Metadata-Version: 2.4
Name: fennec-rag
Version: 1.1.1
Summary: A comprehensive RAG framework with Arabic language support, multi-provider embeddings, and advanced RAG strategies
License: MIT
Project-URL: Homepage, https://fennec-community.vercel.app/#overview
Project-URL: Repository, https://github.com/YousefKhalil10/fennec-rag-projects
Keywords: rag,retrieval-augmented-generation,arabic,nlp,llm,embeddings,vector-database,ai
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Natural Language :: Arabic
Classifier: Natural Language :: English
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.24.0
Requires-Dist: requests>=2.28.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: tiktoken>=0.5.0
Requires-Dist: tqdm>=4.65.0
Provides-Extra: faiss
Requires-Dist: faiss-cpu>=1.7.4; extra == "faiss"
Provides-Extra: faiss-gpu
Requires-Dist: faiss-gpu>=1.7.4; extra == "faiss-gpu"
Provides-Extra: chroma
Requires-Dist: chromadb>=0.4.0; extra == "chroma"
Provides-Extra: pinecone
Requires-Dist: pinecone-client>=3.0.0; extra == "pinecone"
Provides-Extra: openai
Requires-Dist: openai>=1.0.0; extra == "openai"
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.20.0; extra == "anthropic"
Provides-Extra: gemini
Requires-Dist: google-genai>=1.0.0; extra == "gemini"
Provides-Extra: mistral
Requires-Dist: mistralai>=1.0.0; extra == "mistral"
Provides-Extra: huggingface
Requires-Dist: transformers>=4.30.0; extra == "huggingface"
Requires-Dist: torch>=2.0.0; extra == "huggingface"
Provides-Extra: ollama
Requires-Dist: aiohttp>=3.9.0; extra == "ollama"
Provides-Extra: sentence-transformers
Requires-Dist: sentence-transformers>=2.2.0; extra == "sentence-transformers"
Provides-Extra: pdf
Requires-Dist: pypdf>=3.0.0; extra == "pdf"
Requires-Dist: PyPDF2>=3.0.0; extra == "pdf"
Provides-Extra: docx
Requires-Dist: python-docx>=1.0.0; extra == "docx"
Provides-Extra: excel
Requires-Dist: openpyxl>=3.1.0; extra == "excel"
Provides-Extra: html
Requires-Dist: beautifulsoup4>=4.12.0; extra == "html"
Requires-Dist: lxml>=4.9.0; extra == "html"
Provides-Extra: web
Requires-Dist: aiohttp>=3.9.0; extra == "web"
Requires-Dist: beautifulsoup4>=4.12.0; extra == "web"
Provides-Extra: chardet
Requires-Dist: chardet>=5.0.0; extra == "chardet"
Provides-Extra: jq
Requires-Dist: jq>=1.6.0; extra == "jq"
Provides-Extra: arabic
Requires-Dist: stanza>=1.5.0; extra == "arabic"
Requires-Dist: camel-tools>=1.5.0; extra == "arabic"
Provides-Extra: jinja2
Requires-Dist: jinja2>=3.1.0; extra == "jinja2"
Provides-Extra: observability
Requires-Dist: fastapi>=0.100.0; extra == "observability"
Requires-Dist: uvicorn>=0.23.0; extra == "observability"
Provides-Extra: eval
Requires-Dist: scikit-learn>=1.3.0; extra == "eval"
Provides-Extra: crypto
Requires-Dist: cryptography>=41.0.0; extra == "crypto"
Provides-Extra: all
Requires-Dist: faiss-cpu>=1.7.4; extra == "all"
Requires-Dist: chromadb>=0.4.0; extra == "all"
Requires-Dist: pinecone-client>=3.0.0; extra == "all"
Requires-Dist: openai>=1.0.0; extra == "all"
Requires-Dist: anthropic>=0.20.0; extra == "all"
Requires-Dist: google-genai>=1.0.0; extra == "all"
Requires-Dist: mistralai>=1.0.0; extra == "all"
Requires-Dist: transformers>=4.30.0; extra == "all"
Requires-Dist: torch>=2.0.0; extra == "all"
Requires-Dist: sentence-transformers>=2.2.0; extra == "all"
Requires-Dist: aiohttp>=3.9.0; extra == "all"
Requires-Dist: pypdf>=3.0.0; extra == "all"
Requires-Dist: python-docx>=1.0.0; extra == "all"
Requires-Dist: openpyxl>=3.1.0; extra == "all"
Requires-Dist: beautifulsoup4>=4.12.0; extra == "all"
Requires-Dist: lxml>=4.9.0; extra == "all"
Requires-Dist: chardet>=5.0.0; extra == "all"
Requires-Dist: jq>=1.6.0; extra == "all"
Requires-Dist: stanza>=1.5.0; extra == "all"
Requires-Dist: jinja2>=3.1.0; extra == "all"
Requires-Dist: fastapi>=0.100.0; extra == "all"
Requires-Dist: uvicorn>=0.23.0; extra == "all"
Requires-Dist: scikit-learn>=1.3.0; extra == "all"
Requires-Dist: cryptography>=41.0.0; extra == "all"
Dynamic: license-file

# 🦊 fennec-rag

A comprehensive, production-ready **Retrieval-Augmented Generation (RAG)** framework with first-class **Arabic language support**.

[![PyPI version](https://badge.fury.io/py/fennec-rag.svg)](https://badge.fury.io/py/fennec-rag)
[![Python](https://img.shields.io/pypi/pyversions/fennec-rag)](https://pypi.org/project/fennec-rag/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## ✨ Features

- 🌍 **Arabic-first NLP** — dedicated Arabic chunker, embedder, and prompt templates
- 🔌 **Multi-provider LLMs** — OpenAI, Anthropic, Gemini, Mistral, HuggingFace, Ollama
- 🗄️ **Multiple vector databases** — FAISS, ChromaDB, Pinecone
- 🧩 **Advanced RAG strategies** — Conversational, Agentic, Graph, Multi-hop, Federated, Self-improving, Streaming
- 🛡️ **Hallucination Guard** — built-in hallucination detection and grounding
- 📊 **Observability & Evaluation** — tracing, metrics, dashboards, evaluation suite
- 📄 **Rich document loaders** — PDF, DOCX, HTML, CSV, JSON, Excel, Web, Directory

## 📦 Installation

```bash
# Basic
pip install fennec-rag

# With specific providers
pip install "fennec-rag[openai,faiss]"
pip install "fennec-rag[anthropic,chroma]"
pip install "fennec-rag[gemini,pinecone]"

# Arabic NLP
pip install "fennec-rag[arabic]"

# Full install
pip install "fennec-rag[all]"
```

## 🚀 Quick Start

```python
from fennec.rag.core import RAGSystem, RAGConfig
from fennec.embeddings import OpenAIEmbedder
from fennec.vector_database import FAISSVectorDatabase
from fennec.llm import OpenAIInterface

embedder = OpenAIEmbedder(api_key="your-key")
vector_db = FAISSVectorDatabase(embedder=embedder)
llm = OpenAIInterface(api_key="your-key")

config = RAGConfig(chunk_size=512, overlap=128, top_k=5)
rag = RAGSystem(config=config, vector_db=vector_db, llm=llm)

rag.load_documents(["document.pdf"])
response = rag.query("What is the main topic?")
print(response)
```

## 🗂️ Modules

| Module | Description |
|--------|-------------|
| `fennec.rag.core` | RAGSystem, MultiDocRAG, Reranker, PromptRouter |
| `fennec.rag.conversational_rag` | Multi-turn conversation RAG |
| `fennec.rag.agentic_rag` | Agent-based RAG |
| `fennec.rag.graph_rag` | Knowledge graph RAG |
| `fennec.rag.hybrid_search` | BM25 + semantic hybrid search |
| `fennec.rag.multi_hop` | Multi-hop question decomposition |
| `fennec.rag.self_improving_rag` | HyDE + recursive refinement |
| `fennec.rag.streaming_rag` | Token streaming |
| `fennec.embeddings` | OpenAI, Gemini, HuggingFace, Mistral, Ollama, Arabic |
| `fennec.vector_database` | FAISS, ChromaDB, Pinecone |
| `fennec.llm` | OpenAI, Anthropic, Gemini, Mistral, HuggingFace, Ollama |
| `fennec.llm.hallucination` | HallucinationGuard, ProtectedLLMInterface |
| `fennec.chunks` | Arabic & multilingual text chunkers |
| `fennec.document_loaders` | PDF, DOCX, HTML, CSV, JSON, Excel, Web, Directory |
| `fennec.memory` | Buffer, Window, Summary, Entity memory |
| `fennec.router` | SemanticRouter |
| `fennec.prompt` | PromptTemplate, ChatTemplate, FewShotTemplate |
| `fennec.output_parser` | JSON, YAML, CSV, Pydantic parsers |
| `fennec.evaluator` | RAG evaluation & reporting |
| `fennec.observability` | Tracing, metrics, dashboards |
| `fennec.cache` | Multi-level cache |
| `fennec.persistence` | State persistence & backup |
| `fennec.plugins` | Extensible plugin system |

## 📝 License

MIT License
