Skip to main content

Fully automated RAG SDK - Initialize with a directory and start querying

Project description

Flip RAG SDK ๐Ÿš€

Fully Automated Retrieval-Augmented Generation

Flip is the simplest yet most powerful RAG SDK. Initialize with a directory and start querying - that's it!

โœจ Features

  • ๐ŸŽฏ Ultra-Simple API: Just Flip(directory="./docs") to get started
  • ๐Ÿ”„ Fully Automated: Handles everything from document loading to response generation
  • ๐Ÿค– Multiple LLM Providers: OpenAI, Azure OpenAI, Anthropic, Google, HuggingFace, Meta, Ollama
  • ๐Ÿ“Š Smart Chunking: Token, sentence, semantic, and recursive strategies
  • ๐Ÿ” Hybrid Search: Vector + keyword search for better accuracy
  • ๐Ÿ’พ 9 Vector Databases: Pinecone, Qdrant, Weaviate, Milvus, FAISS, Pgvector, Redis, Elasticsearch, MongoDB
  • ๐Ÿ“ Rich File Support: PDF, DOCX, TXT, MD, JSON, CSV, HTML, code files
  • ๐ŸŽจ Extensible: Easy to add custom providers and strategies

๐Ÿš€ Advanced Features

Flip includes production-ready advanced features:

  • ๐Ÿ”€ Hybrid Search: Combines vector similarity + BM25 keyword search with reciprocal rank fusion
  • ๐Ÿ“Š Re-ranking: Cross-encoder models for improved retrieval accuracy
  • ๐Ÿง  Query Enhancement: Automatic query classification, rewriting, decomposition, and HyDE
  • ๐Ÿ’พ Intelligent Caching: LRU caching for embeddings and queries with disk persistence
  • โšก Pipeline Orchestration: Seamless integration of all components
  • ๐Ÿ”„ Incremental Updates: Efficient document change tracking
  • ๐Ÿ“ˆ Performance Monitoring: Query logging and analytics
  • ๐Ÿ“Š Built-in Evaluation: Precision, recall, F1, MRR, NDCG metrics

See ADVANCED_FEATURES.md for detailed documentation.

๐Ÿš€ Quick Start

Installation

pip install flip-rag

Basic Usage

from flip import Flip

# Initialize with a directory - that's it!
flip = Flip(directory="./docs")

# Query your documents
response = flip.query("What is the main topic?")

print(response.answer)
print(response.citations)

Choose Your LLM Provider

# Use OpenAI (default)
flip = Flip(directory="./docs", llm_provider="openai")

# Use Azure OpenAI
flip = Flip(directory="./docs", llm_provider="azure-openai")

# Use Anthropic Claude
flip = Flip(directory="./docs", llm_provider="anthropic")

# Use Google Gemini
flip = Flip(directory="./docs", llm_provider="google")

# Use HuggingFace
flip = Flip(directory="./docs", llm_provider="huggingface")

# Use local Ollama
flip = Flip(directory="./docs", llm_provider="ollama")

Advanced Configuration

from flip import Flip, FlipConfig

# Custom configuration
config = FlipConfig(
    llm_provider="openai",
    llm_model="gpt-4-turbo-preview",
    embedding_provider="openai",
    chunking_strategy="semantic",
    chunk_size=512,
    retrieval_top_k=5,
    use_hybrid_search=True,
)

flip = Flip(directory="./docs", config=config)

Azure OpenAI Configuration

from flip import Flip, FlipConfig

config = FlipConfig(
    llm_provider="azure-openai",
    llm_model="gpt-4",  # Your deployment name
    
    embedding_provider="azure-openai",
    embedding_model="text-embedding-ada-002",  # Your deployment name
    
    azure_openai_api_key="your-key",
    azure_openai_endpoint="https://your-resource.openai.azure.com/",
)

flip = Flip(directory="./docs", config=config)
response = flip.query("What is AI?")

๐Ÿ“š Supported LLM Providers

Provider Models API Key Required
OpenAI GPT-4, GPT-3.5 Yes (OPENAI_API_KEY)
Azure OpenAI GPT-4, GPT-3.5 Yes (AZURE_OPENAI_API_KEY)
Anthropic Claude 3 (Opus, Sonnet, Haiku) Yes (ANTHROPIC_API_KEY)
Google Gemini Pro Yes (GOOGLE_API_KEY)
HuggingFace Llama 2, Mistral, etc. Yes (HUGGINGFACE_API_KEY)
Meta Llama models via HuggingFace Yes (HUGGINGFACE_API_KEY)
Ollama Any local model No (runs locally)

๐Ÿ”— Supported Embedding Providers

Provider Models API Key Required
OpenAI text-embedding-3-small/large Yes
Azure OpenAI text-embedding-ada-002 Yes
Google models/embedding-001 Yes
HuggingFace Various models Yes
Sentence Transformers all-MiniLM-L6-v2, etc. No (local)

๐Ÿ“„ Supported File Formats

  • Documents: PDF, DOCX, TXT, MD
  • Data: JSON, CSV
  • Web: HTML, HTM
  • Code: Python, JavaScript, TypeScript, Java, C++, Go, Rust, Ruby

๐Ÿ”ง API Reference

Flip Class

flip = Flip(
    directory: Optional[str] = None,
    config: Optional[FlipConfig] = None,
    llm_provider: Optional[str] = None,
    llm_model: Optional[str] = None,
    **kwargs
)

Methods

  • query(question: str) -> FlipResponse: Query your documents
  • index_directory(directory: str): Index a directory
  • add_documents(file_paths: List[str]): Add specific files
  • refresh_index(): Incrementally update index with changed documents
  • evaluate(query, relevant_ids, k=5): Evaluate RAG performance
  • get_monitoring_stats(): Get performance statistics
  • clear(): Clear all indexed documents
  • get_stats(): Get indexing statistics

FlipResponse

@dataclass
class FlipResponse:
    answer: str                    # Generated answer
    citations: List[Dict]          # Source citations
    context_chunks: List[str]      # Retrieved chunks
    metadata: Dict[str, Any]       # Additional metadata

FlipConfig

config = FlipConfig(
    # LLM Configuration
    llm_provider="openai",         # openai, azure-openai, anthropic, google, huggingface, ollama
    llm_model=None,                # Auto-selected if None
    llm_temperature=0.7,
    llm_max_tokens=1024,
    
    # Embedding Configuration
    embedding_provider="openai",   # openai, azure-openai, google, sentence-transformers, huggingface
    embedding_model=None,          # Auto-selected if None
    
    # Azure OpenAI (if using azure-openai provider)
    azure_openai_api_key=None,
    azure_openai_endpoint=None,
    azure_openai_api_version="2024-02-15-preview",
    
    # Vector Store
    vector_store="chroma",         # chroma (more coming soon)
    vector_store_path=None,        # Auto: ./flip_data
    
    # Chunking
    chunking_strategy="semantic",  # token, sentence, semantic, recursive
    chunk_size=512,
    chunk_overlap=50,
    
    # Retrieval
    retrieval_top_k=5,
    use_hybrid_search=True,
    use_reranking=True,
    
    # Cache
    enable_cache=True,
    cache_dir=None,                # Auto: ./flip_cache
)

๐ŸŒŸ Examples

Example 1: Simple Q&A

from flip import Flip

flip = Flip(directory="./company_docs")
response = flip.query("What is our refund policy?")

print(f"Answer: {response.answer}")
print(f"Sources: {len(response.citations)} documents")

Example 2: Multiple Providers

from flip import Flip

# Try different providers
providers = ["openai", "azure-openai", "anthropic", "google"]

for provider in providers:
    flip = Flip(directory="./docs", llm_provider=provider)
    response = flip.query("Summarize the main points")
    print(f"{provider}: {response.answer[:100]}...")

Example 3: Incremental Updates

from flip import Flip

flip = Flip(directory="./docs")

# Later, refresh with only changed documents
stats = flip.refresh_index()

print(f"Added: {stats['added']}")
print(f"Updated: {stats['updated']}")
print(f"Deleted: {stats['deleted']}")

Example 4: Evaluation

from flip import Flip

flip = Flip(directory="./docs")

# Evaluate a query
result = flip.evaluate(
    query="What is AI?",
    relevant_doc_ids=["chunk_1", "chunk_2"],  # Ground truth
    k=5
)

print(f"Precision: {result.retrieval_precision:.3f}")
print(f"Overall Score: {result.overall_score:.3f}")

๐Ÿ”‘ Environment Variables

Set API keys as environment variables:

export OPENAI_API_KEY="your-key-here"
export AZURE_OPENAI_API_KEY="your-azure-key-here"
export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com/"
export ANTHROPIC_API_KEY="your-key-here"
export GOOGLE_API_KEY="your-key-here"
export HUGGINGFACE_API_KEY="your-key-here"

Or use a .env file:

OPENAI_API_KEY=your-key-here
AZURE_OPENAI_API_KEY=your-azure-key-here
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
ANTHROPIC_API_KEY=your-key-here
GOOGLE_API_KEY=your-key-here
HUGGINGFACE_API_KEY=your-key-here

๐Ÿ—„๏ธ Multi-Database Support

Flip supports 9 major vector and NoSQL databases, giving you complete flexibility to choose the perfect storage backend for your use case:

Vector Databases

Pinecone (Cloud-Native)

config = FlipConfig(
    vector_store="pinecone",
    pinecone_api_key="your-key",
    pinecone_environment="gcp-starter",
    pinecone_index_name="flip-index"
)
flip = Flip(directory="./docs", config=config)

Qdrant (Local/Cloud)

config = FlipConfig(
    vector_store="qdrant",
    qdrant_url="http://localhost:6333",  # or cloud URL
    qdrant_api_key="your-key"  # for cloud
)
flip = Flip(directory="./docs", config=config)

Weaviate (GraphQL)

config = FlipConfig(
    vector_store="weaviate",
    weaviate_url="http://localhost:8080",
    weaviate_api_key="your-key"  # for cloud
)
flip = Flip(directory="./docs", config=config)

Milvus (Enterprise)

config = FlipConfig(
    vector_store="milvus",
    milvus_host="localhost",
    milvus_port=19530
)
flip = Flip(directory="./docs", config=config)

FAISS (Local, Ultra-Fast)

config = FlipConfig(
    vector_store="faiss",
    faiss_index_type="HNSW",  # or IVF, Flat
    persist_directory="./faiss_data"
)
flip = Flip(directory="./docs", config=config)

Pgvector (PostgreSQL)

config = FlipConfig(
    vector_store="pgvector",
    pgvector_host="localhost",
    pgvector_database="flip_db",
    pgvector_user="postgres",
    pgvector_password="password"
)
flip = Flip(directory="./docs", config=config)

NoSQL/Hybrid Databases

Redis (In-Memory + Cache)

config = FlipConfig(
    vector_store="redis",
    redis_host="localhost",
    redis_port=6379
)
flip = Flip(directory="./docs", config=config)

Elasticsearch (Search Engine)

config = FlipConfig(
    vector_store="elasticsearch",
    elasticsearch_url="http://localhost:9200",
    elasticsearch_api_key="your-key"
)
flip = Flip(directory="./docs", config=config)

MongoDB (Document Store)

config = FlipConfig(
    vector_store="mongodb",
    mongodb_uri="mongodb://localhost:27017/",
    mongodb_database="flip_db"
)
flip = Flip(directory="./docs", config=config)

Database Comparison

Database Type Best For Deployment
Pinecone Vector Production, cloud-native Cloud
Qdrant Vector Flexibility, snapshots Local/Cloud
Weaviate Vector GraphQL, schema management Local/Cloud
Milvus Vector Enterprise, scalability Local/Cloud
FAISS Vector Local, speed, GPU support Local
Pgvector Vector PostgreSQL users, ACID Local/Cloud
Redis Hybrid Caching, real-time Local/Cloud
Elasticsearch Hybrid Full-text + vectors Local/Cloud
MongoDB NoSQL Metadata-rich storage Local/Cloud

Key Features Across All Databases

  • โœ… Unified API: Same interface for all databases
  • โœ… Lazy Loading: Optional dependencies (install only what you need)
  • โœ… Health Checks: Monitor database status
  • โœ… Batch Operations: Efficient bulk inserts
  • โœ… Metadata Filtering: Filter by custom metadata
  • โœ… Statistics: Track vector counts and performance

See individual database examples in the examples/ directory.

๐ŸŽฏ Design Philosophy

Flip is designed around three core principles:

  1. Simplicity First: The API should be so simple that you can get started in 2 lines of code
  2. Automation: Handle all the complexity internally - chunking, embedding, retrieval, generation
  3. Flexibility: Support multiple providers and allow customization when needed

๐Ÿ› ๏ธ Advanced Features

Custom Providers

You can register custom LLM or embedding providers:

from flip.generation.factory import LLMFactory
from flip.generation.base import BaseLLM

class MyCustomLLM(BaseLLM):
    # Implement required methods
    pass

LLMFactory.register_provider("mycustom", MyCustomLLM)

# Use it
flip = Flip(directory="./docs", llm_provider="mycustom")

๐Ÿ“Š Performance

Flip is optimized for performance:

  • Batch Processing: Embeddings generated in batches
  • Caching: Automatic caching of embeddings and queries
  • Efficient Storage: Support for 9 optimized vector databases
  • Incremental Updates: Only re-index changed documents
  • Performance Testing: Built-in benchmarking framework

๐Ÿงช Testing

Flip includes comprehensive testing infrastructure:

# Use test fixtures for any database
from tests.fixtures import all_vector_stores

def test_my_feature(all_vector_stores):
    # Test runs against all available databases
    pass

# Benchmark performance
from tests.performance import PerformanceTester

tester = PerformanceTester(vector_store)
tester.run_full_benchmark()
tester.print_results()

๐Ÿค Contributing

Contributions are welcome! Please see our contributing guidelines.

๐Ÿ“ License

MIT License - see LICENSE file for details

๐Ÿ™ Acknowledgments

Flip builds on the shoulders of giants:

  • OpenAI, Azure OpenAI, Anthropic, Google for LLM APIs
  • Pinecone, Qdrant, Weaviate, Milvus, FAISS, Pgvector, Redis, Elasticsearch, MongoDB for vector storage
  • Sentence Transformers for local embeddings
  • And many other open-source projects

๐Ÿ“ž Support


Made with โค๏ธ by the Flip Team

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flip_rag-0.1.1.tar.gz (104.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flip_rag-0.1.1-py3-none-any.whl (96.6 kB view details)

Uploaded Python 3

File details

Details for the file flip_rag-0.1.1.tar.gz.

File metadata

  • Download URL: flip_rag-0.1.1.tar.gz
  • Upload date:
  • Size: 104.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.3

File hashes

Hashes for flip_rag-0.1.1.tar.gz
Algorithm Hash digest
SHA256 ea387815a354c41972ac0a688bab67b9152c384e4128f2050e502e2b0af46eac
MD5 d75f7d18c9d31d9c4f5033568e095569
BLAKE2b-256 ed4393d5ee70513acc74470d179bc0d7949e977f3d748c0b973c9bc6f36fab0c

See more details on using hashes here.

File details

Details for the file flip_rag-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: flip_rag-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 96.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.3

File hashes

Hashes for flip_rag-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 95694b3ed310f3d33ec7ab26a0494ced4aea8edf94fe837732f2474c1c258a05
MD5 5c6f9d15014960acf7fea6c2fce1e03b
BLAKE2b-256 587ea4644861e0f79b2b6df0f61e0a819118ac05a4c687885593d026cdf30667

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page