Portable Retrieval-Augmented Generation Library
Project description
ragpackai ๐ฆ
Portable Retrieval-Augmented Generation Library
ragpackai is a Python library for creating, saving, loading, and querying portable RAG (Retrieval-Augmented Generation) packs. It allows you to bundle documents, embeddings, vectorstores, and configuration into a single .rag file that can be easily shared and deployed across different environments.
โจ Features
- ๐ Portable RAG Packs: Bundle everything into a single
.ragfile - ๐ Provider Flexibility: Support for OpenAI, Google, Groq, Cerebras, and HuggingFace
- ๐ Encryption Support: Optional AES-GCM encryption for sensitive data
- ๐ฏ Runtime Overrides: Change embedding/LLM providers without rebuilding
- ๐ Multiple Formats: Support for PDF, TXT, MD, and more
- ๐ ๏ธ CLI Tools: Command-line interface for easy pack management
- ๐ง Lazy Loading: Efficient dependency management with lazy imports
๐ Quick Start
Installation
# Core installation
pip install ragpackai
# With optional providers
pip install ragpackai[google] # Google Vertex AI
pip install ragpackai[groq] # Groq
pip install ragpackai[cerebras] # Cerebras
pip install ragpackai[all] # All providers
Basic Usage
from ragpackai import ragpackai
# Create a pack from documents
pack = ragpackai.from_files([
"docs/manual.pdf",
"notes.txt",
"knowledge_base/"
])
# Save the pack
pack.save("my_knowledge.rag")
# Load and query
pack = ragpackai.load("my_knowledge.rag")
# Simple retrieval (no LLM)
results = pack.query("How do I install this?", top_k=3)
print(results)
# Question answering with LLM
answer = pack.ask("What are the main features?")
print(answer)
Provider Overrides
# Load with different providers
pack = ragpackai.load(
"my_knowledge.rag",
embedding_config={
"provider": "google",
"model_name": "textembedding-gecko"
},
llm_config={
"provider": "groq",
"model_name": "mixtral-8x7b-32768"
}
)
answer = pack.ask("Explain the architecture")
๐ ๏ธ Command Line Interface
Create a RAG Pack
# From files and directories
ragpackai create docs/ notes.txt --output knowledge.rag
# With custom settings
ragpackai create docs/ \
--embedding-provider openai \
--embedding-model text-embedding-3-large \
--chunk-size 1024 \
--encrypt-key mypassword
Query and Ask
# Simple retrieval
ragpackai query knowledge.rag "How to install?"
# Question answering
ragpackai ask knowledge.rag "What are the requirements?" \
--llm-provider openai \
--llm-model gpt-4o
# With provider overrides
ragpackai ask knowledge.rag "Explain the API" \
--embedding-provider google \
--embedding-model textembedding-gecko \
--llm-provider groq \
--llm-model mixtral-8x7b-32768
Pack Information
ragpackai info knowledge.rag
๐๏ธ Architecture
.rag File Structure
A .rag file is a structured zip archive:
mypack.rag
โโโ metadata.json # Pack metadata
โโโ config.json # Default configurations
โโโ documents/ # Original documents
โ โโโ doc1.txt
โ โโโ doc2.pdf
โโโ vectorstore/ # Chroma vectorstore
โโโ chroma.sqlite3
โโโ ...
Supported Providers
Embedding Providers:
openai: text-embedding-3-small, text-embedding-3-largehuggingface: all-MiniLM-L6-v2, all-mpnet-base-v2 (offline)google: textembedding-gecko
LLM Providers:
openai: gpt-4o, gpt-4o-mini, gpt-3.5-turbogoogle: gemini-pro, gemini-1.5-flashgroq: mixtral-8x7b-32768, llama2-70b-4096cerebras: llama3.1-8b, llama3.1-70b
๐ API Reference
ragpackai Class
ragpackai.from_files(files, embed_model="openai:text-embedding-3-small", **kwargs)
Create a RAG pack from files.
Parameters:
files: List of file paths or directoriesembed_model: Embedding model in format "provider:model"chunk_size: Text chunk size (default: 512)chunk_overlap: Chunk overlap (default: 50)name: Pack name
ragpackai.load(path, embedding_config=None, llm_config=None, **kwargs)
Load a RAG pack from file.
Parameters:
path: Path to .rag fileembedding_config: Override embedding configurationllm_config: Override LLM configurationreindex_on_mismatch: Rebuild vectorstore if dimensions mismatchdecrypt_key: Decryption password
pack.save(path, encrypt_key=None)
Save pack to .rag file.
pack.query(question, top_k=3)
Retrieve relevant chunks (no LLM).
pack.ask(question, top_k=4, temperature=0.0)
Ask question with LLM.
Provider Wrappers
# Direct provider access
from ragpackai.embeddings import OpenAI, HuggingFace, Google
from ragpackai.llms import OpenAIChat, GoogleChat, GroqChat
# Create embedding provider
embeddings = OpenAI(model_name="text-embedding-3-large")
vectors = embeddings.embed_documents(["Hello world"])
# Create LLM provider
llm = OpenAIChat(model_name="gpt-4o", temperature=0.7)
response = llm.invoke("What is AI?")
๐ง Configuration
Environment Variables
# API Keys
export OPENAI_API_KEY="your-key"
export GOOGLE_CLOUD_PROJECT="your-project"
export GROQ_API_KEY="your-key"
export CEREBRAS_API_KEY="your-key"
# Optional
export GOOGLE_APPLICATION_CREDENTIALS="path/to/service-account.json"
Configuration Files
# Custom embedding config
embedding_config = {
"provider": "huggingface",
"model_name": "all-mpnet-base-v2",
"device": "cuda" # Use GPU
}
# Custom LLM config
llm_config = {
"provider": "openai",
"model_name": "gpt-4o",
"temperature": 0.7,
"max_tokens": 2000
}
๐ Security
Encryption
ragpackai supports AES-GCM encryption for sensitive data:
# Save with encryption
pack.save("sensitive.rag", encrypt_key="strong-password")
# Load encrypted pack
pack = ragpackai.load("sensitive.rag", decrypt_key="strong-password")
Best Practices
- Use strong passwords for encryption
- Store API keys securely in environment variables
- Validate .rag files before loading in production
- Consider network security when sharing packs
๐งช Examples
See the examples/ directory for complete examples:
basic_usage.py- Simple pack creation and queryingprovider_overrides.py- Using different providersencryption_example.py- Working with encrypted packscli_examples.sh- Command-line usage examples
๐ค Contributing
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Support
- ๐ Documentation
- ๐ Issue Tracker
- ๐ฌ Discussions
๐ Acknowledgments
Built with:
- LangChain - LLM framework
- ChromaDB - Vector database
- Sentence Transformers - Embedding models
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 ragpackaiai-0.1.1.tar.gz.
File metadata
- Download URL: ragpackaiai-0.1.1.tar.gz
- Upload date:
- Size: 41.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ec1cb31f39412841104ef24e0f099bbb4ba4f0de907b406ed858e9edbecf600
|
|
| MD5 |
a22a18a8003daf955132f0a819544e99
|
|
| BLAKE2b-256 |
55cc99b2d6d89d31180f1d2bba21c6e460419c70a5d6965a8c1339cb5f9c3b28
|
File details
Details for the file ragpackaiai-0.1.1-py3-none-any.whl.
File metadata
- Download URL: ragpackaiai-0.1.1-py3-none-any.whl
- Upload date:
- Size: 33.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3d8d53a5b0b4ecc88d7aea6513799aaeed90c92de5c4cbce7e4ffe08dbe935d
|
|
| MD5 |
dbac682dc880029afccdacaedbe483b6
|
|
| BLAKE2b-256 |
83dfcdc4c3a0ffb5a012dae30f26e47fc95125714e6482a4dd74c98224acaba8
|