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) |
| 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 |
| 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 documentsindex_directory(directory: str): Index a directoryadd_documents(file_paths: List[str]): Add specific filesrefresh_index(): Incrementally update index with changed documentsevaluate(query, relevant_ids, k=5): Evaluate RAG performanceget_monitoring_stats(): Get performance statisticsclear(): Clear all indexed documentsget_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:
- Simplicity First: The API should be so simple that you can get started in 2 lines of code
- Automation: Handle all the complexity internally - chunking, embedding, retrieval, generation
- 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
- Documentation: https://flip-rag.readthedocs.io
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with โค๏ธ by the Flip Team
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea387815a354c41972ac0a688bab67b9152c384e4128f2050e502e2b0af46eac
|
|
| MD5 |
d75f7d18c9d31d9c4f5033568e095569
|
|
| BLAKE2b-256 |
ed4393d5ee70513acc74470d179bc0d7949e977f3d748c0b973c9bc6f36fab0c
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95694b3ed310f3d33ec7ab26a0494ced4aea8edf94fe837732f2474c1c258a05
|
|
| MD5 |
5c6f9d15014960acf7fea6c2fce1e03b
|
|
| BLAKE2b-256 |
587ea4644861e0f79b2b6df0f61e0a819118ac05a4c687885593d026cdf30667
|