Skip to main content

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 .rag file
  • 🔄 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

# Basic installation (minimal dependencies)
pip install ragpackai

# Recommended for most users
pip install ragpackai[standard]

# Specific features
pip install ragpackai[core]        # Core RAG functionality
pip install ragpackai[openai]      # OpenAI integration
pip install ragpackai[documents]   # PDF processing
pip install ragpackai[embeddings]  # Sentence transformers

# Provider-specific
pip install ragpackai[google]      # Google/Gemini
pip install ragpackai[groq]        # Groq
pip install ragpackai[cerebras]    # Cerebras
pip install ragpackai[nvidia]      # NVIDIA

# Everything (may have installation issues on some systems)
pip install ragpackai[all]

🚨 Installation Issues?

If you encounter installation problems (especially with faiss-cpu):

# Try the standard installation first
pip install ragpackai[standard]

# For FAISS issues, use conda instead
conda install -c conda-forge faiss-cpu
pip install ragpackai[core,openai,documents,embeddings]

# Get installation help
python -c "import ragpackai; ragpackai.install_guide()"

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-large
  • huggingface: all-MiniLM-L6-v2, all-mpnet-base-v2 (offline)
  • google: textembedding-gecko

LLM Providers:

  • openai: gpt-4o, gpt-4o-mini, gpt-3.5-turbo
  • google: gemini-pro, gemini-1.5-flash
  • groq: mixtral-8x7b-32768, llama2-70b-4096
  • cerebras: 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 directories
  • embed_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 file
  • embedding_config: Override embedding configuration
  • llm_config: Override LLM configuration
  • reindex_on_mismatch: Rebuild vectorstore if dimensions mismatch
  • decrypt_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 querying
  • provider_overrides.py - Using different providers
  • encryption_example.py - Working with encrypted packs
  • cli_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

🙏 Acknowledgments

Built with:

Metadata

Release files for ragpackai 0.1.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 ragpackai 0.1.4
File Size Uploaded Provenance
ragpackai-0.1.4.tar.gz 44.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for ragpackai 0.1.4
File Interpreter ABI Platform
ragpackai-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 79.3 kB

Release files / ragpackai-0.1.4.tar.gz

Download URL ragpackai-0.1.4.tar.gz
Size 44.0 kB
Tags Source
SHA-256 checksum
How to use checksums
4d0a6bc24a52637fa25ccea552b69c71169563ab92d9f552c71399b16cc0d00e
BLAKE2b-256 checksum
How to use checksums
e4610367fa21e0d7deb4952be27a27b6e2bec9e479f0df90c00444fb38fc45d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.11

Release files / ragpackai-0.1.4-py3-none-any.whl

Download URL ragpackai-0.1.4-py3-none-any.whl
Size 35.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a93a35fe2c142daebccf4b4fe84aa80fffa2bf05302ce34278d0f3dbcfcbc0f7
BLAKE2b-256 checksum
How to use checksums
fa329233d9406f320e6a4e1943fa10308982d53abf90aa07378b288433e6cd2c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.11

Security for ragpackai 0.1.4

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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