Skip to main content

No project description provided

Project description

Ceylon AI RAG Framework

A powerful, modular, and extensible Retrieval-Augmented Generation (RAG) framework built with Python, supporting multiple LLM providers, embedders, and document types.

🌟 Features

  • Multiple Document Types: Support for various document formats including:

    • Text files (with extensive format support)
    • PDF documents
    • Images (with OCR capabilities)
    • Source code files
  • Flexible Architecture:

    • Modular component design
    • Pluggable LLM providers (OpenAI, Ollama)
    • Extensible embedding providers
    • Vector store integration (LanceDB)
  • Advanced RAG Capabilities:

    • Intelligent document chunking
    • Context-aware searching
    • Query expansion and reranking
    • Metadata enrichment
    • Source attribution
  • Specialized RAG Implementations:

    • FolderRAG: Process and analyze entire directory structures
    • CodeAnalysisRAG: Specialized for source code understanding
    • SimpleRAG: Basic RAG implementation for text data
    • Support for custom RAG implementations

🚀 Getting Started

Installation

# Install via pip
pip install ceylon-rag

# Or install from source
git clone https://github.com/ceylonai/ceylon-rag.git
cd ceylon-rag
pip install -e .

Basic Usage

Here's a simple example using the framework:

import asyncio
from dotenv import load_dotenv
from ceylon_rag import SimpleRAG

async def main():
    # Load environment variables
    load_dotenv()

    # Configure the RAG system
    config = {
        "llm": {
            "type": "openai",
            "model_name": "gpt-4",
            "api_key": os.getenv("OPENAI_API_KEY")
        },
        "embedder": {
            "type": "openai",
            "model_name": "text-embedding-3-small",
            "api_key": os.getenv("OPENAI_API_KEY")
        },
        "vector_store": {
            "type": "lancedb",
            "db_path": "./data/lancedb",
            "table_name": "documents"
        }
    }

    # Initialize RAG
    rag = SimpleRAG(config)
    await rag.initialize()

    try:
        # Process your documents
        documents = await rag.process_documents("path/to/documents")
        
        # Query the system
        result = await rag.query("What are the main topics in these documents?")
        print(result.response)
        
    finally:
        await rag.close()

if __name__ == "__main__":
    asyncio.run(main())

🏗️ Architecture

Core Components

  1. Document Loaders

    • TextLoader: Handles text-based files
    • PDFLoader: Processes PDF documents
    • ImageLoader: Handles images with OCR
    • Extensible base class for custom loaders
  2. Embedders

    • OpenAI embeddings support
    • Ollama embeddings support
    • Modular design for adding new providers
  3. LLM Providers

    • OpenAI integration
    • Ollama integration
    • Async interface for all providers
  4. Vector Store

    • LanceDB integration
    • Efficient vector similarity search
    • Metadata storage and retrieval

Document Processing

The framework provides sophisticated document processing capabilities:

# Example: Processing a code repository
async def analyze_codebase():
    config = {
        "llm": {
            "type": "openai",
            "model_name": "gpt-4"
        },
        "embedder": {
            "type": "openai",
            "model_name": "text-embedding-3-small"
        },
        "vector_store": {
            "type": "lancedb",
            "db_path": "./data/lancedb",
            "table_name": "code_documents"
        },
        "chunk_size": 1000,
        "chunk_overlap": 200
    }

    rag = CodeAnalysisRAG(config)
    await rag.initialize()
    
    documents = await rag.process_codebase("./src")
    await rag.index_code(documents)
    
    result = await rag.analyze_code(
        "Explain the main architecture of this codebase"
    )
    print(result.response)

🔧 Advanced Configuration

File Exclusions

Configure file exclusions using patterns:

config = {
    # ... other config options ...
    "excluded_dirs": [
        "venv",
        "node_modules",
        ".git",
        "__pycache__"
    ],
    "excluded_files": [
        ".env",
        "package-lock.json"
    ],
    "excluded_extensions": [
        ".pyc",
        ".pyo",
        ".pyd"
    ],
    "ignore_file": ".ragignore"  # Similar to .gitignore
}

Chunking Configuration

Customize document chunking:

config = {
    # ... other config options ...
    "chunk_size": 1000,  # Characters per chunk
    "chunk_overlap": 200,  # Overlap between chunks
}

🤝 Contributing

Contributions are welcome! Please feel free to submit pull requests. For major changes, please open an issue first to discuss what you would like to change.

📄 License

MIT License

🙏 Acknowledgments

  • OpenAI for GPT and embedding models
  • Ollama for local LLM support
  • LanceDB team for vector storage
  • All contributors and users of the framework

📚 API Documentation

For detailed API documentation, please visit our API Documentation page.

🔗 Links

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

ceylon_rag-0.2.0.tar.gz (40.6 kB view details)

Uploaded Source

Built Distribution

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

ceylon_rag-0.2.0-py3-none-any.whl (3.3 kB view details)

Uploaded Python 3

File details

Details for the file ceylon_rag-0.2.0.tar.gz.

File metadata

  • Download URL: ceylon_rag-0.2.0.tar.gz
  • Upload date:
  • Size: 40.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.5 CPython/3.12.6 Windows/11

File hashes

Hashes for ceylon_rag-0.2.0.tar.gz
Algorithm Hash digest
SHA256 2b6ba770a963d566ea39132b2bbbc1520256274762e1c179de87b739b44524d8
MD5 4bbc661d377517aa697035e3e016901e
BLAKE2b-256 89300b51f369ac777fee7b110736e18fb5a2dfa8a830230310a4d389cc62ffa2

See more details on using hashes here.

File details

Details for the file ceylon_rag-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: ceylon_rag-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 3.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.5 CPython/3.12.6 Windows/11

File hashes

Hashes for ceylon_rag-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ae403233e8b42e9a0b8e02110757cc746aa8fac8930f30f7825ccd47b38e474c
MD5 e0c72718f575657ce18a2ef4dcc23715
BLAKE2b-256 83d059398d6df9f2aab0cf8fe5c7d057b6f9f4f8138406bd6e8be36b5af24186

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