ORBIT (Open Retrieval-Based Inference Toolkit) is a middleware platform that provides a unified API for AI inference. It acts as a central gateway, allowing you to connect various local and remote AI models with your private data sources like SQL databases and vector stores.
ORBIT gives you a single, consistent API to run LLMs (local or cloud) against your private data sources with portability, performance, high-availability, and security at the core.
⭐️ If ORBIT helps you ship faster, please consider starring the repo to support the roadmap.
- ✨ Highlights
- 🚀 Quick Start
- 🛠️ Why ORBIT
- 🏗️ Architecture Overview
- ✨ What Can You Build with ORBIT?
- ⭐ Support the Project
- 📖 Documentation
- 🤝 Community & Support
- 📄 License
- Unified AI gateway that normalizes requests across local models, cloud APIs, and hybrid deployments.
- Bring-your-own data with production-grade RAG adapters for SQL, vector stores, and custom datasources.
- Secure by default with token-based auth, role-aware API keys, and pluggable content moderation.
- Ready for teams thanks to batteries-included clients (CLI, React widget, Node/Python SDKs) and automation scripts.
- Python 3.12+ (for running the server or CLI locally)
- Docker Engine 24+ (if you prefer containers)
- MongoDB (Atlas or local) to unlock authentication, RAG, and history persistence
- Optional: Redis cache plus your choice of vector DB (Chroma, Qdrant, Pinecone, Milvus)
Refer to the Docker Setup Guide or run the bundled scripts from the docker/ directory:
cd docker
chmod +x docker-init.sh orbit-docker.sh
./docker-init.sh --build --profile minimal# Download the latest release archive
curl -L https://github.com/schmitech/orbit/releases/download/v1.5.8/orbit-1.5.8.tar.gz -o orbit-1.5.8.tar.gz
tar -xzf orbit-1.5.8.tar.gz
cd orbit-1.5.8
# Bootstrap dependencies and download a small model
cp env.example .env
./install/setup.sh --profile minimal --download-gguf granite4-micro
# Start the ORBIT server
source venv/bin/activate
./bin/orbit.sh start
# Check the logs
cat ./logs/orbit.logBrowse to http://localhost:3000/dashboard to monitor the ORBIT server:
pip install schmitech-orbit-client
# Point to a running ORBIT instance (defaults to http://localhost:3000)
orbit-chatorbit-chat-cli.mp4
Using the
orbit-chat CLI. Run orbit-chat -h for options.
cd clients/chat-app
npm install
npm run devorbit-chat-ui.mp4
Chatting with ORBIT using the React client.
- Create an API key tied to the adapter you want to expose (
./bin/orbit.py key create). - Enable or customize adapters in
config/adapters.yamland redeploy to connect new datasources. - Skim the docs for deep dives on auth, configuration, and deployment patterns.
- Run securely with your data thanks to first-class support for on-prem hardware, air-gapped installs, and strict authentication defaults.
- Mix and match models (local, hosted, or API) through a single contract without rewriting downstream apps.
- Production-ready RAG with adapters for SQL, vector databases, and pipelines that keep context fresh.
- Dev-friendly tooling including a CLI, SDKs, React widget, and language clients maintained in this repo.
- Platform & infra teams who need a stable control plane for LLM workloads.
- Product teams shipping AI copilots that depend on reliable retrieval and guardrails.
- Researchers & tinkerers exploring local-first stacks or evaluating different foundation models.
Have a story or feature request? Open an issue or add it to the Roadmap.
Click to learn more about the Core Components
ORBIT Server (/server/): FastAPI-based inference middleware
- Inference Layer: Supports multiple LLM providers (OpenAI, Anthropic, Cohere, Ollama, etc.) via unified interface
- RAG System: Retrieval-Augmented Generation with SQL and Vector DB adapters (file-based / multimodal retrieval underway, it will be available in release 2.0.0)
- Authentication: PBKDF2-SHA256 with bearer tokens, MongoDB-backed sessions
- Fault Tolerance: Circuit breaker pattern with exponential backoff for provider failures
- Content Moderation: Multi-layered safety with LLM Guard and configurable moderators
Configuration (/config/): YAML-based modular configuration
- Main config in
config.yamlwith environment variable support - Separate configs for adapters, datasources, embeddings, inference, moderators, and rerankers
- Dynamic loading with validation and resolver system
Client Libraries:
- React-based chat application with Zustand state management
- Embeddable chat widget with theming support
- Node.js and Python API client libraries
- MongoDB (Required): Authentication, RAG storage, conversation history
- Redis (Optional): Caching layer
- Vector DBs (Optional): Chroma, Qdrant, Pinecone, Milvus for semantic search
- SQL DBs (Optional): PostgreSQL, MySQL, SQLite for structured data retrieval
ORBIT uses a flexible adapter architecture to connect your data to AI models. An API key is tied to a specific adapter, effectively creating a specialized "agent" for a certain task. Here are a few examples:
Provide instant, semantically-aware answers from a knowledge base. Perfect for customer support or internal documentation.
Sample Questions:
- "What are the summer camp programs for kids?"
- "How do I register for the contemporary dance class?"
NOTE: You need an instance of MongoDB to enable adapters
Here's the Sample Q/A datasets for this example. The knowledge base corresponds to a municipal services assistant.
Set inference_only mode to false in config/config.yaml:
inference_only: falseEnable the adapter in config/adapters.yaml:
- name: "qa-sql"
enabled: true
type: "retriever"
datasource: "sqlite"
adapter: "qa"
implementation: "retrievers.implementations.qa.QASSQLRetriever"Restart ORBIT:
./bin/orbit.sh start --delete-logsGenerate sample data and API Key (Default SQLite DB in examples/sqlite/sqlite_db):
#Login as admin first. Default password is admin123. You should change after installing ORBIT.
./bin/orbit.sh login
# Set up SQLite database with Q&A data.
./examples/sample-db-setup.sh sqliteStart chatting with your new key:
orbit-chat --url http://localhost:3000 --api-key YOUR_API_KEYcity-chat.mp4
Setting up the sample SQLite Q/A dataset
Ask questions about your data in natural language and get answers without writing SQL.
Sample Questions:
- "Show me all users from Toronto"
- "What are the top 10 users by age?"
- "Find users created in the last month"
Transform your application logs into actionable insights using natural language queries. Perfect for DevOps teams, SREs, and developers who need to quickly understand system behavior and troubleshoot issues.
Sample Questions:
- "Show me recent errors from the payment service"
- "Which services have the most errors in the last hour?"
- "Find slow API requests taking more than 2 seconds"
- "What's the error trend over the last 24 hours?"
- "Show me all timeout errors with their stack traces"
Set up Elasticsearch and generate sample log data:
# Ensure Elasticsearch is running (Docker example)
docker run -d --name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
elasticsearch:8.11.0
# Generate sample application logs
python ./utils/elasticsearch-intent-template/examples/application-logs/generate_sample_data.py \
--count 1000 \
--use-ai \
--provider ollama \
--ai-usage-rate 30Enable the Elasticsearch log analysis adapter in config/adapters.yaml:
- name: "intent-elasticsearch-app-logs"
enabled: true
type: "retriever"
datasource: "elasticsearch"
adapter: "intent"
implementation: "retrievers.implementations.intent.IntentElasticsearchRetriever"
inference_provider: "ollama"
embedding_provider: "ollama"Start ORBIT and create an API key:
./bin/orbit.sh start --delete-logs
# Login and create API key
./bin/orbit.sh login
./bin/orbit.py key create \
--intent-elasticsearch-app-logs \
--name "Log Analysis Assistant" \
--notes "Elasticsearch log analysis with AI insights" \
--prompt-file examples/prompts/elasticsearch-log-assistant-prompt.txt
# Start analyzing your logs
orbit-chat --url http://localhost:3000 --api-key YOUR_API_KEYInstall Ollama and pull the nomic-embed-text:latest embedding model. Also pull a model of choice for inference purposes.
ollama pull nomic-embed-text:latest
ollama pull gemma3:12bEnable the contact domain sample adapter in /config/adapters.yaml:
- name: "intent-sql-sqlite-contact"
enabled: true
type: "retriever"
datasource: "sqlite"
adapter: "intent"
implementation: "retrievers.implementations.intent.IntentSQLiteRetriever"
inference_provider: "ollama"
model: "gemma3:12b"
embedding_provider: "ollama"Start ORBIT:
./bin/orbit.sh start --delete-logsCreate an API Key for this adapter:
# Login admin credentials
./bin/orbit.sh login
# Create an API key for the SQL intent adapter
./bin/orbit.py key create \
--intent-sql-sqlite-contact \
--name "Contact Adapter Demo" \
--notes "Demo using SQLite" \
--prompt-file examples/prompts/contact-assistant-prompt.txt
# Generate sample data
python ./utils/sql-intent-template/examples/sqlite/contact/generate_contact_data.py \
--records 500 \
--output ./examples/sqlite/sqlite_db \
--clean
# Test data exists
sqlite3 examples/sqlite/sqlite_db 'SELECT * FROM users LIMIT 5;'
# Start chatting with your new key
orbit-chat --url http://localhost:3000 --api-key YOUR_API_KEYcontact-chat.mp4
Testing the SQL Intent Adapter using the ORBIT CLI tool
Looking for more samples? Browse the
examples/directory for data loaders, prompts, and client integrations you can adapt.
Your support keeps ORBIT independent and focused on open-source innovation.
- ⭐ Star the repo to signal that ORBIT matters to you.
- 📣 Share a demo, blog, or tweet so other builders discover it.
- 🐛 Open issues and PRs—your feedback directly shapes the roadmap.
For more detailed information, please refer to the official documentation.
- Installation Guide
- Configuration
- Authentication
- RAG & Adapters
- Development Roadmap
- Contributing Guide
Full API Reference
ORBIT provides a RESTful API for programmatic access. The full API reference with examples is available at /docs (Swagger UI) when the server is running.
POST /v1/chat- MCP protocol chat endpoint (JSON-RPC 2.0 format)GET /health- Overall system health
POST /auth/login- User authenticationPOST /auth/logout- End sessionGET /auth/me- Get current user infoPOST /auth/register- Register new userPOST /auth/change-password- Change user password
GET /admin/api-keys- List API keysPOST /admin/api-keys- Create new API keyDELETE /admin/api-keys/{api_key}- Delete API keyPOST /admin/api-keys/deactivate- Deactivate API keyGET /admin/api-keys/{api_key}/status- Get API key status
GET /admin/prompts- List system promptsPOST /admin/prompts- Create system promptPUT /admin/prompts/{prompt_id}- Update system promptDELETE /admin/prompts/{prompt_id}- Delete system prompt
GET /health- System health overviewGET /health/adapters- Adapter health statusGET /health/embedding-services- Embedding service statusGET /health/mongodb-services- MongoDB connection statusGET /health/ready- Readiness checkGET /health/system- System resource usage
POST /upload- Single file uploadPOST /upload/batch- Batch file uploadGET /info/{file_id}- File informationDELETE /{file_id}- Delete fileGET /status- File system status
- Questions? Open an issue
- Updates: Check the changelog
- Commercial Support: Contact schmitech.ai
- Maintained by: Remsy Schmilinsky
Apache 2.0 - See LICENSE for details.