{"id":39440728,"url":"https://github.com/paradocx96/querio-api","last_synced_at":"2026-01-18T04:19:51.726Z","repository":{"id":327916209,"uuid":"1113302446","full_name":"paradocx96/querio-api","owner":"paradocx96","description":null,"archived":false,"fork":false,"pushed_at":"2025-12-10T10:49:43.000Z","size":2775,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-10T10:52:51.557Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paradocx96.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-09T19:42:51.000Z","updated_at":"2025-12-10T10:49:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/paradocx96/querio-api","commit_stats":null,"previous_names":["paradocx96/querio-api"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/paradocx96/querio-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paradocx96%2Fquerio-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paradocx96%2Fquerio-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paradocx96%2Fquerio-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paradocx96%2Fquerio-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paradocx96","download_url":"https://codeload.github.com/paradocx96/querio-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paradocx96%2Fquerio-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28529500,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-18T04:19:51.014Z","updated_at":"2026-01-18T04:19:51.717Z","avatar_url":"https://github.com/paradocx96.png","language":"Python","readme":"\u003cdiv align=\"center\"\u003e\n\n# Querio - RAG API\n\n![Python](https://img.shields.io/badge/python-3.10+-blue.svg)\n![FastAPI](https://img.shields.io/badge/FastAPI-0.115.6-009688.svg)\n![LangChain](https://img.shields.io/badge/LangChain-0.3.13-green.svg)\n![License](https://img.shields.io/badge/license-MIT-blue.svg)\n\n**A powerful PDF-based Retrieval Augmented Generation (RAG) API built with FastAPI, LangChain, and Google Gemini**\n\n[Features](#features) •\n[Quick Start](#quick-start) •\n[API Documentation](#api-documentation) •\n[Development](#development) •\n[Deployment](#deployment)\n\n\u003c/div\u003e\n\n---\n\n## 📋 Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n- [Architecture](#architecture)\n- [Prerequisites](#prerequisites)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [API Documentation](#api-documentation)\n- [Configuration](#configuration)\n- [Project Structure](#project-structure)\n- [Usage Examples](#usage-examples)\n- [Development](#development)\n- [Testing](#testing)\n- [Deployment](#deployment)\n- [Contributing](#contributing)\n- [Troubleshooting](#troubleshooting)\n- [License](#license)\n- [Acknowledgments](#acknowledgments)\n\n---\n\n## 🎯 Overview\n\nQuerio is a production-ready RESTful API that enables intelligent question-answering over PDF documents using Retrieval Augmented Generation (RAG). Built on modern AI technologies, it provides a robust backend for building knowledge-based applications with natural language interfaces.\n\n### Why Querio?\n\n- 🚀 **Fast \u0026 Efficient**: Optimized vector search with ChromaDB\n- 🔒 **Production Ready**: Complete with error handling, validation, and comprehensive API docs\n- 🎨 **Frontend Ready**: CORS-enabled REST API perfect for web/mobile frontends\n- 📚 **Multi-Document**: Process and query across multiple PDF documents\n- 💬 **Conversational**: Session-based chat with context retention\n- 🔍 **Semantic Search**: Advanced vector similarity search\n- 📊 **Scalable**: Built with async FastAPI for high performance\n\n---\n\n## ✨ Features\n\n### Core Functionality\n\n- **Document Management**\n  - Upload single or multiple PDF files\n  - Automatic text extraction and processing\n  - Document metadata tracking\n  - Delete and manage documents\n\n- **Intelligent Querying**\n  - RAG-based question answering\n  - Context-aware responses using Google Gemini\n  - Configurable retrieval parameters\n  - Source attribution\n\n- **Conversational AI**\n  - Session-based chat conversations\n  - Message history tracking\n  - Multi-session support\n  - Context retention across messages\n\n- **Semantic Search**\n  - Vector similarity search\n  - Find similar content\n  - Retrieve relevant document chunks\n  - No LLM overhead for pure search\n\n### Technical Features\n\n- ⚡ **Async API**: Built with FastAPI for high concurrency\n- 📖 **Auto Documentation**: Interactive Swagger UI and ReDoc\n- 🔐 **Type Safety**: Pydantic models for request/response validation\n- 🎯 **Error Handling**: Comprehensive exception handling and logging\n- 🌐 **CORS Support**: Ready for browser-based frontends\n- 📈 **Health Monitoring**: Health check and statistics endpoints\n- 🔄 **Hot Reload**: Development server with auto-reload\n\n---\n\n## 🏗️ Architecture\n\n```\n┌─────────────┐      ┌──────────────┐      ┌─────────────┐\n│   Client    │────▶ │  FastAPI     │────▶ │  Google     │\n│ Application │      │  REST API    │      │  Gemini AI  │\n└─────────────┘      └──────────────┘      └─────────────┘\n                            │\n                            ▼\n                     ┌──────────────┐\n                     │  Document    │\n                     │  Service     │\n                     └──────────────┘\n                            │\n                            ▼\n                     ┌──────────────┐      ┌─────────────┐\n                     │  Vector      │────▶ │  ChromaDB   │\n                     │  Store       │      │  (Local)    │\n                     └──────────────┘      └─────────────┘\n                            │\n                            ▼\n                     ┌──────────────┐\n                     │  HuggingFace │\n                     │  Embeddings  │\n                     └──────────────┘\n```\n\n### Technology Stack\n\n- **Framework**: FastAPI 0.115.6\n- **LLM**: Google Gemini Pro\n- **Embeddings**: HuggingFace (sentence-transformers)\n- **Vector DB**: ChromaDB 0.5.23\n- **PDF Processing**: PyMuPDF (fitz)\n- **Text Splitting**: LangChain Text Splitters\n- **Orchestration**: LangChain 0.3.13\n\n---\n\n## 📦 Prerequisites\n\n### System Requirements\n\n- **Python**: 3.10 or higher (3.11+ recommended)\n- **RAM**: Minimum 4GB (8GB+ recommended for large documents)\n- **Storage**: ~2GB for dependencies + space for documents and vector DB\n\n### API Keys\n\n- **Google AI API Key**: Get from [Google AI Studio](https://makersuite.google.com/app/apikey)\n\n---\n\n## 🚀 Installation\n\n### 1. Clone the Repository\n\n```bash\ngit clone https://github.com/paradocx96/querio.git\ncd querio\n```\n\n### 2. Create Virtual Environment\n\n```bash\n# Using venv\npython -m venv querio-venv\n\n# Activate on Windows\nquerio-venv\\Scripts\\activate\n\n# Activate on macOS/Linux\nsource querio-venv/bin/activate\n```\n\n### 3. Install Dependencies\n\n```bash\npip install -r requirements.txt\n```\n\n### 4. Set Up Environment Variables\n\nCreate a `.env` file in the project root:\n\n```bash\n# .env\nGENAI_API_KEY=your_google_api_key_here\n```\n\n### 5. Verify Installation\n\n```bash\npython --version  # Should be 3.10+\npip list | grep fastapi  # Verify FastAPI is installed\n```\n\n---\n\n## ⚡ Quick Start\n\n### Start the API Server\n\n```bash\ncd src\npython app.py\n```\n\nThe server will start on `http://localhost:8000`\n\n### Access the Documentation\n\n- **Swagger UI**: http://localhost:8000/docs\n- **ReDoc**: http://localhost:8000/redoc\n- **Health Check**: http://localhost:8000/api/health\n\n### Basic Workflow\n\n1. **Upload a PDF Document**\n   ```bash\n   curl -X POST \"http://localhost:8000/api/documents/upload\" \\\n     -F \"file=@your_document.pdf\"\n   ```\n\n2. **Process Documents**\n   ```bash\n   curl -X POST \"http://localhost:8000/api/documents/process\"\n   ```\n\n3. **Ask a Question**\n   ```bash\n   curl -X POST \"http://localhost:8000/api/query\" \\\n     -H \"Content-Type: application/json\" \\\n     -d '{\"query\": \"What is the main topic?\", \"k\": 3}'\n   ```\n\n---\n\n## 📚 API Documentation\n\n### Base URL\n```\nhttp://localhost:8000\n```\n\n### Endpoints Overview\n\n| Category | Endpoint | Method | Description |\n|----------|----------|--------|-------------|\n| **System** | `/api/health` | GET | Health check |\n| **System** | `/api/stats` | GET | System statistics |\n| **Documents** | `/api/documents/upload` | POST | Upload PDF |\n| **Documents** | `/api/documents` | GET | List all documents |\n| **Documents** | `/api/documents/{id}` | GET | Get document details |\n| **Documents** | `/api/documents/{id}` | DELETE | Delete document |\n| **Documents** | `/api/documents/process` | POST | Process documents |\n| **Query** | `/api/query` | POST | Ask a question |\n| **Chat** | `/api/chat` | POST | Send chat message |\n| **Chat** | `/api/chat/sessions` | GET | List chat sessions |\n| **Chat** | `/api/chat/sessions` | POST | Create session |\n| **Chat** | `/api/chat/sessions/{id}` | GET | Get session |\n| **Chat** | `/api/chat/sessions/{id}` | DELETE | Delete session |\n| **Chat** | `/api/chat/sessions/{id}/history` | GET | Get chat history |\n| **Search** | `/api/search` | POST | Semantic search |\n| **Search** | `/api/search/similar` | POST | Find similar content |\n\n### Interactive Documentation\n\nVisit `http://localhost:8000/docs` for:\n- Try out endpoints directly\n- See request/response schemas\n- Test authentication\n- View example payloads\n\nFor detailed API documentation, see [API_DOCUMENTATION.md](docs/API_DOCUMENTATION.md)\n\n---\n\n## ⚙️ Configuration\n\n### Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `GENAI_API_KEY` | Yes | - | Google AI API key |\n| `PDF_FOLDER` | No | `data` | PDF storage directory |\n| `CHROMA_DB` | No | `chroma_db` | Vector DB directory |\n\n### Application Settings\n\nEdit `src/config.py` to customize:\n\n```python\nclass Settings:\n    GENAI_API_KEY = os.getenv(\"GENAI_API_KEY\")\n    PDF_FOLDER = \"data\"\n    CHROMA_DB = \"chroma_db\"\n```\n\n### Server Configuration\n\nModify `src/app.py` for:\n- CORS origins\n- Server host/port\n- API metadata\n- Middleware\n\n---\n\n## 📁 Project Structure\n\n```\nquerio/\n├── src/\n│   ├── api/\n│   │   ├── routes/\n│   │   │   ├── __init__.py\n│   │   │   ├── query.py           # Query endpoints\n│   │   │   ├── chat.py            # Chat endpoints\n│   │   │   ├── documents.py       # Document management\n│   │   │   ├── search.py          # Search endpoints\n│   │   │   └── system.py          # Health \u0026 stats\n│   │   ├── __init__.py\n│   │   ├── models.py              # Pydantic models\n│   │   ├── services.py            # Business logic\n│   │   └── dependencies.py        # Dependency injection\n│   ├── app.py                     # FastAPI application\n│   ├── config.py                  # Configuration\n│   ├── pdf_handler.py             # PDF processing\n│   ├── text_splitter.py           # Text chunking\n│   ├── vector_store.py            # Vector DB operations\n│   ├── rag_pipeline.py            # RAG logic\n│   └── main.py                    # CLI interface (legacy)\n├── data/                          # PDF storage\n├── chroma_db/                     # Vector database\n├── requirements.txt               # Dependencies\n├── .env                           # Environment variables\n└── README.md                      # This file\n```\n\n---\n\n## 💡 Usage Examples\n\n### Python Client\n\n```python\nimport requests\n\nBASE_URL = \"http://localhost:8000\"\n\n# Upload document\nwith open(\"document.pdf\", \"rb\") as f:\n    files = {\"file\": f}\n    response = requests.post(f\"{BASE_URL}/api/documents/upload\", files=files)\n    print(f\"Uploaded: {response.json()['filename']}\")\n\n# Process documents\nresponse = requests.post(f\"{BASE_URL}/api/documents/process\")\nprint(f\"Processed {response.json()['documents_processed']} documents\")\n\n# Query\ndata = {\"query\": \"What is machine learning?\", \"k\": 3}\nresponse = requests.post(f\"{BASE_URL}/api/query\", json=data)\nprint(f\"Answer: {response.json()['answer']}\")\n\n# Start a chat\ndata = {\"message\": \"Hello, tell me about the documents\"}\nresponse = requests.post(f\"{BASE_URL}/api/chat\", json=data)\nsession_id = response.json()[\"session_id\"]\nprint(f\"Response: {response.json()['answer']}\")\n\n# Continue conversation\ndata = {\"message\": \"Tell me more\", \"session_id\": session_id}\nresponse = requests.post(f\"{BASE_URL}/api/chat\", json=data)\nprint(f\"Response: {response.json()['answer']}\")\n```\n\n### JavaScript/Fetch\n\n```javascript\n// Upload document\nconst formData = new FormData();\nformData.append('file', fileInput.files[0]);\n\nconst uploadResponse = await fetch('http://localhost:8000/api/documents/upload', {\n  method: 'POST',\n  body: formData\n});\nconst uploadData = await uploadResponse.json();\nconsole.log('Uploaded:', uploadData.filename);\n\n// Process documents\nawait fetch('http://localhost:8000/api/documents/process', {\n  method: 'POST'\n});\n\n// Query\nconst queryResponse = await fetch('http://localhost:8000/api/query', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify({\n    query: 'What is AI?',\n    k: 3\n  })\n});\nconst queryData = await queryResponse.json();\nconsole.log('Answer:', queryData.answer);\n```\n\n### cURL\n\n```bash\n# Upload document\ncurl -X POST \"http://localhost:8000/api/documents/upload\" \\\n  -F \"file=@document.pdf\"\n\n# Process documents\ncurl -X POST \"http://localhost:8000/api/documents/process\"\n\n# Query\ncurl -X POST \"http://localhost:8000/api/query\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"What is the main topic?\", \"k\": 3}'\n\n# Chat\ncurl -X POST \"http://localhost:8000/api/chat\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"message\": \"Tell me about the documents\"}'\n```\n\n---\n\n## 🛠️ Development\n\n### Development Setup\n\n```bash\n# Install in development mode\npip install -r requirements.txt\n\n# Run with auto-reload\ncd src\npython app.py\n\n# Or use uvicorn directly\nuvicorn app:app --reload --host 0.0.0.0 --port 8000\n```\n\n### Code Style\n\n```bash\n# Format code with black\nblack src/\n\n# Sort imports\nisort src/\n\n# Lint with flake8\nflake8 src/\n```\n\n### Adding New Endpoints\n\n1. Define Pydantic models in `src/api/models.py`\n2. Add business logic to `src/api/services.py`\n3. Create route file in `src/api/routes/`\n4. Include router in `src/app.py`\n\nExample:\n```python\n# src/api/routes/new_feature.py\nfrom fastapi import APIRouter\n\nrouter = APIRouter(prefix=\"/api/feature\", tags=[\"Feature\"])\n\n@router.get(\"/\")\nasync def get_feature():\n    return {\"message\": \"New feature\"}\n\n# src/app.py\nfrom api.routes import new_feature\napp.include_router(new_feature.router)\n```\n\n---\n\n## 🧪 Testing\n\n### Manual Testing\n\nUse the interactive API documentation:\n```\nhttp://localhost:8000/docs\n```\n\n### API Testing\n\n```bash\n# Test health endpoint\ncurl http://localhost:8000/api/health\n\n# Test stats\ncurl http://localhost:8000/api/stats\n\n# Upload test document\ncurl -X POST http://localhost:8000/api/documents/upload \\\n  -F \"file=@test.pdf\"\n```\n\n### Load Testing\n\n```bash\n# Install Apache Bench\napt-get install apache2-utils\n\n# Test with 100 requests, 10 concurrent\nab -n 100 -c 10 http://localhost:8000/api/health\n```\n\n---\n\n## 🚢 Deployment\n\n### Docker Deployment\n\nCreate `Dockerfile`:\n\n```dockerfile\nFROM python:3.11-slim\n\nWORKDIR /app\n\n# Install dependencies\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\n# Copy application\nCOPY src/ ./src/\nCOPY .env .\n\n# Create data directories\nRUN mkdir -p data chroma_db\n\nEXPOSE 8000\n\n# Run application\nCMD [\"uvicorn\", \"src.app:app\", \"--host\", \"0.0.0.0\", \"--port\", \"8000\"]\n```\n\nBuild and run:\n```bash\ndocker build -t querio-api .\ndocker run -p 8000:8000 -v $(pwd)/data:/app/data querio-api\n```\n\n### Docker Compose\n\nCreate `docker-compose.yml`:\n\n```yaml\nversion: '3.8'\n\nservices:\n  api:\n    build: .\n    ports:\n      - \"8000:8000\"\n    volumes:\n      - ./data:/app/data\n      - ./chroma_db:/app/chroma_db\n    env_file:\n      - .env\n    restart: unless-stopped\n```\n\nRun with:\n```bash\ndocker-compose up -d\n```\n\n### Production Deployment\n\n#### Using Gunicorn + Uvicorn Workers\n\n```bash\npip install gunicorn\n\ngunicorn src.app:app \\\n  --workers 4 \\\n  --worker-class uvicorn.workers.UvicornWorker \\\n  --bind 0.0.0.0:8000 \\\n  --timeout 120\n```\n\n#### Systemd Service\n\nCreate `/etc/systemd/system/querio.service`:\n\n```ini\n[Unit]\nDescription=Querio API Service\nAfter=network.target\n\n[Service]\nType=simple\nUser=www-data\nWorkingDirectory=/opt/querio\nEnvironment=\"PATH=/opt/querio/venv/bin\"\nExecStart=/opt/querio/venv/bin/uvicorn src.app:app --host 0.0.0.0 --port 8000\nRestart=always\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target\n```\n\nEnable and start:\n```bash\nsudo systemctl enable querio\nsudo systemctl start querio\nsudo systemctl status querio\n```\n\n#### Nginx Reverse Proxy\n\n```nginx\nserver {\n    listen 80;\n    server_name api.yourdomain.com;\n\n    location / {\n        proxy_pass http://localhost:8000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    }\n}\n```\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome! Please follow these guidelines:\n\n### Getting Started\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n### Guidelines\n\n- Follow PEP 8 style guide\n- Add docstrings to all functions\n- Update documentation for new features\n- Write meaningful commit messages\n- Test your changes before submitting\n\n### Code of Conduct\n\n- Be respectful and inclusive\n- Provide constructive feedback\n- Focus on what is best for the community\n- Show empathy towards other contributors\n\n---\n\n## ❓ Troubleshooting\n\n### Common Issues\n\n#### Vector Store Not Initialized\n```\nError: Vector store not initialized\n```\n**Solution**: Upload documents and run `/api/documents/process`\n\n#### Import Errors\n```\nModuleNotFoundError: No module named 'fastapi'\n```\n**Solution**: Ensure virtual environment is activated and dependencies are installed\n```bash\npip install -r requirements.txt\n```\n\n#### Google API Key Error\n```\nError: Failed to configure Google LLM\n```\n**Solution**: Check that `GENAI_API_KEY` is set in `.env` file\n\n#### Port Already in Use\n```\nError: Address already in use\n```\n**Solution**: Change port in `app.py` or kill process using port 8000\n```bash\n# Windows\nnetstat -ano | findstr :8000\ntaskkill /PID \u003cPID\u003e /F\n\n# Linux/Mac\nlsof -i :8000\nkill -9 \u003cPID\u003e\n```\n\n#### ChromaDB Errors\n```\nFailed to send telemetry event\n```\n**Solution**: These are harmless warnings. Update to latest version:\n```bash\npip install -U langchain-chroma\n```\n\n### Getting Help\n\n- 📖 Check the [API Documentation](docs/API_DOCUMENTATION.md)\n- 💬 Open an [Issue](https://github.com/paradocx96/querio/issues)\n- 📧 Contact: navindadev@gmail.com\n\n---\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n```\nMIT License\n\nCopyright (c) 2025 Navinda Chandrasiri\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n\n---\n\n## 🙏 Acknowledgments\n\n### Built With\n\n- [FastAPI](https://fastapi.tiangolo.com/) - Modern web framework\n- [LangChain](https://www.langchain.com/) - LLM orchestration\n- [Google Gemini](https://ai.google.dev/) - Large language model\n- [ChromaDB](https://www.trychroma.com/) - Vector database\n- [HuggingFace](https://huggingface.co/) - Embeddings models\n- [PyMuPDF](https://pymupdf.readthedocs.io/) - PDF processing\n\n### Inspiration\n\nThis project was inspired by the need for a production-ready RAG API that could be easily integrated into any application requiring intelligent document querying.\n\n### Special Thanks\n\n- The FastAPI community for excellent documentation\n- LangChain team for RAG abstractions\n- Google for providing Gemini API\n- All contributors and users of this project\n\n---\n\n## 📞 Contact \u0026 Support\n\n### Maintainer\n\n**Your Name**\n- GitHub: [@paradocx96](https://github.com/paradocx96)\n- Email: navindadev@gmail.com\n- LinkedIn: [Profile](https://www.linkedin.com/in/navinda-chandrasiri)\n\n### Community\n\n- 🐛 Report bugs via [GitHub Issues](https://github.com/paradocx96/querio/issues)\n- 💡 Request features via [GitHub Discussions](https://github.com/paradocx96/querio/discussions)\n- 📧 General inquiries: navindadev@gmail.com\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n### ⭐ Star us on GitHub if you find this project useful!\n\n**Built with ❤️ by paradocx96**\n\n[⬆ Back to Top](#querio---rag-api)\n\n\u003c/div\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparadocx96%2Fquerio-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparadocx96%2Fquerio-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparadocx96%2Fquerio-api/lists"}