Skip to main content

YARP - Yet Another RAG Pipeline

Documentation

YARP (Yet Another RAG Pipeline) is a lightweight, high-performance Python library focused on in-memory vector database operations with Approximate Nearest Neighbor (ANN) search. Built for fast document similarity search and retrieval-augmented generation (RAG) applications.

🚀 Key Features

  • Fast In-Memory Vector Search: Uses Annoy (Spotify's ANN library) for lightning-fast similarity search
  • Hybrid Scoring: Combines semantic similarity (via sentence transformers) with lexical similarity (Levenshtein distance)
  • Easy Document Management: Add, delete, and update documents dynamically
  • Persistence: Save and load your vector indices to/from disk
  • Lightweight: Minimal dependencies, maximum performance
  • Configurable: Adjustable similarity metrics, tree counts, and scoring weights
  • Type Safe: Built with Pydantic models for reliable data handling

📦 Installation

Standard Installation

Default installation does not automatically install sentence-transformers. Please install python-yarp[cpu] or python-yarp[gpu] depending on acceleration type.

uv add python-yarp

Or with pip:

pip install python-yarp

GPU Support

To enable GPU acceleration and install GPU-specific dependencies (PyTorch and sentence-transformers):

uv add python-yarp[gpu]

Or with pip:

pip install 'python-yarp[gpu]'

CPU-Only Installation (Recommended for systems without GPU)

For a leaner installation that installs PyTorch CPU-only wheel without NVIDIA CUDA dependencies:

uv add python-yarp[cpu]

Or with pip:

pip install 'python-yarp[cpu]'

This option is ideal for:

  • CPU-only environments
  • Docker containers without GPU support
  • Systems where you want to minimize package size
  • Development environments that don't require GPU acceleration

Development Installation

git clone https://github.com/regmibijay/yarp.git
cd yarp
uv sync --dev

🔧 Quick Start

Basic Usage

from yarp import LocalMemoryIndex

# Initialize with your documents
documents = [
    "The cat sat on the mat",
    "Python programming language", 
    "Machine learning with transformers",
    "Natural language processing",
    "Vector similarity search"
]

# Create and build the index
index = LocalMemoryIndex(documents, model_name="all-MiniLM-L6-v2")
index.process()

# Search for similar documents
results = index.query("programming languages", top_k=3)

# Access results
for result in results:
    print(f"Document: {result.document}")
    print(f"Score: {result.matching_score:.2f}%")
    print("---")

Advanced Usage with Hybrid Scoring

from yarp import LocalMemoryIndex

# Initialize index
index = LocalMemoryIndex(documents)
index.process(num_trees=256, metrics_type="angular")

# Query with custom weights
results = index.query(
    "machine learning algorithms",
    top_k=5,
    weight_semantic=0.7,      # 70% semantic similarity
    weight_levenshtein=0.3,   # 30% lexical similarity
    search_k=100             # Search more candidates for better accuracy
)

# Invert results (lowest to highest scores)
inverted_results = results.invert(inplace=False)

Document Management

# Add new documents
index.add("New document about artificial intelligence")
index.add(["Multiple", "documents", "at once"])

# Delete documents  
index.delete("The cat sat on the mat")

# Query updated index
results = index.query("AI and machine learning")

Persistence

# Save index to disk
index.backup("/path/to/backup/directory")

# Load index from disk
loaded_index = LocalMemoryIndex.load("/path/to/backup/directory")

# Continue using loaded index
results = loaded_index.query("your query here")

📖 API Reference

LocalMemoryIndex

The main class for creating and managing vector indices.

Constructor

LocalMemoryIndex(documents: List[str], model_name: str = "all-MiniLM-L6-v2")
  • documents: List of text documents to index
  • model_name: SentenceTransformer model name for embeddings

Methods

process(num_trees: int = 128, metrics_type: str = "angular")

Build the vector index with specified parameters.

  • num_trees: Number of trees in Annoy index (more trees = better accuracy, slower build)
  • metrics_type: Distance metric ("angular", "euclidean", "manhattan", "hamming", "dot")
query(q: str, top_k: int = 5, weight_semantic: float = 0.5, weight_levenshtein: float = 0.5, search_k: int = 50)

Search for similar documents.

  • q: Query string
  • top_k: Number of results to return
  • weight_semantic: Weight for semantic similarity (0.0-1.0)
  • weight_levenshtein: Weight for lexical similarity (0.0-1.0)
  • search_k: Number of candidates to search (higher = better accuracy)

Returns LocalMemorySearchResult object.

add(documents: str | List[str])

Add new documents to the index. Automatically rebuilds the index.

delete(document: str)

Remove a document from the index. Automatically rebuilds the index.

backup(path: str)

Save the index and metadata to disk.

load(path: str, model_name: str = "all-MiniLM-L6-v2")

Class method to load an index from disk.

Data Models

LocalMemorySearchResult

Container for search results with built-in iteration and sorting capabilities.

class LocalMemorySearchResult(BaseModel):
    results: List[LocalMemorySearchResultEntry]
    
    def __iter__(self):
        """Iterate over results"""
        
    def invert(self, inplace: bool = True):
        """Reverse sort order of results"""

LocalMemorySearchResultEntry

Individual search result entry.

class LocalMemorySearchResultEntry(BaseModel):
    document: str           # The matched document
    matching_score: float   # Similarity score (0-100%)

🎯 Use Cases

  • Document Similarity Search: Find similar documents in large collections
  • RAG Applications: Retrieve relevant context for language model prompts
  • Content Recommendation: Recommend similar articles, products, or content
  • Semantic Search: Search beyond exact keyword matching
  • Duplicate Detection: Find near-duplicate documents with hybrid scoring
  • Question Answering: Retrieve relevant passages for Q&A systems

⚡ Performance

YARP is optimized for speed and memory efficiency:

  • Fast Indexing: Efficient embedding generation and Annoy index building
  • Quick Queries: Sub-millisecond search times for most datasets
  • Memory Efficient: Stores embeddings in optimized Annoy format
  • Scalable: Tested with thousands of documents

Benchmarks

Operation Small (10 docs) Medium (100 docs) Large (1K docs)
Index Build <1s ~3s ~15s
Query Time <1ms <5ms <10ms
Memory Usage ~10MB ~50MB ~200MB

Benchmarks run on standard laptop with all-MiniLM-L6-v2 model

🛠️ Configuration

Model Selection

Choose from various SentenceTransformer models based on your needs:

# Lightweight and fast
index = LocalMemoryIndex(docs, model_name="all-MiniLM-L6-v2")

# Better accuracy, slower
index = LocalMemoryIndex(docs, model_name="all-mpnet-base-v2")

# Multilingual support
index = LocalMemoryIndex(docs, model_name="paraphrase-multilingual-MiniLM-L12-v2")

Distance Metrics

  • angular: Cosine similarity (default, good for text)
  • euclidean: L2 distance
  • manhattan: L1 distance
  • dot: Dot product similarity

Tuning Parameters

  • num_trees: Higher values increase accuracy but slow down indexing
  • search_k: Higher values increase query accuracy but slow down search
  • weight_semantic/weight_levenshtein: Balance between semantic and lexical matching

🚦 Error Handling

YARP provides specific exception types for different error conditions:

from yarp.exceptions import (
    LocalMemoryTreeNotBuildException,
    LocalMemoryBadRequestException
)

try:
    results = index.query("test query")
except LocalMemoryTreeNotBuildException:
    print("Index not built yet - call process() first")
except LocalMemoryBadRequestException as e:
    print(f"Invalid request: {e}")

🧪 Testing

Run the test suite:

# Run all tests
pytest

# Run with coverage
pytest --cov=yarp

# Run only fast tests (skip integration)
pytest -m "not slow"

# Run integration tests
pytest -m integration

🤝 Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines.

Quick Development Setup

# Clone the repository
git clone https://github.com/regmibijay/yarp.git
cd yarp

# Install in development mode with dev dependencies
uv sync --dev

# For CPU-only development environments (optional)
# uv sync --dev --extra cpu

# Install pre-commit hooks
uv run pre-commit install

# Run tests
uv run pytest

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

📈 Roadmap

  • Support for more embedding models (OpenAI, Cohere, etc.)
  • Batch query operations
  • Distributed index support
  • Integration with popular vector databases
  • Web API interface
  • Advanced filtering capabilities

📞 Support


Made with ❤️ for the Python community

Release files for python-yarp 0.3.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for python-yarp 0.3.4
File Size Uploaded
python_yarp-0.3.4.tar.gz 107.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for python-yarp 0.3.4
File Interpreter ABI Platform
python_yarp-0.3.4-py3-none-any.whl Python 3 none any Details

Total release size: 122.4 kB

Release files / python_yarp-0.3.4.tar.gz

Download URL python_yarp-0.3.4.tar.gz
Size 107.3 kB
Tags Source
SHA-256 checksum
How to use checksums
d781fe34a2f2bdee2fb426a099cde99e2f93ceeae752e942ba037fe0a22fc1a7
BLAKE2b-256 checksum
How to use checksums
4a6513c948caa933b6d823fe5358a9945eb8e7440d1c983e678927ccc62592e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 15, 2025.

Transparency log

Release files / python_yarp-0.3.4-py3-none-any.whl

Download URL python_yarp-0.3.4-py3-none-any.whl
Size 15.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
edcfc583ddfd9df59c5d183f020282483e6175b68100c9edd33cfb506b521329
BLAKE2b-256 checksum
How to use checksums
8c5d0e8b2c3f561700dc482e5320456b5e207ba801b67951eea27f858406261b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 15, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.4 This release

2 release files

0.3.3

2 release files

0.3.1

2 release files

0.2.1

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page