Token streaming
WebSocket deltas render with a live caret, then swap to sanitized Markdown when the reply completes.
Nebula streams answers token by token, grounds them in your own documents, and keeps a transparent ledger of every token spent. Bring OpenAI, Groq, OpenRouter, Ollama or any OpenAI-compatible provider — the interface stays the same.
No glue code, no half-finished admin. Auth, streaming, retrieval, quotas, API and tests ship in the box.
WebSocket deltas render with a live caret, then swap to sanitized Markdown when the reply completes.
PDF, DOCX, Markdown and text files are chunked, embedded and retrieved per conversation or globally.
One OpenAI-compatible adapter covers OpenAI, Azure, Groq, OpenRouter, Together, Ollama and LM Studio.
Every completion and embedding is metered. Monthly allowances reset automatically and block at the limit.
Conversations, messages and documents are scriptable with per-user throttling and pagination.
Custom email-first users, CSRF-protected forms, sanitized Markdown and owner-only querysets.
Copy .env.example, point LLM_BASE_URL at your provider and add a key. Or keep the mock provider for an offline demo.
Sign up, start a thread, and tune the model, temperature and system prompt per conversation.
Upload documents from the chat panel or the library, then ask questions and get cited answers.
Exchange credentials for a JWT, then drive conversations, messages and uploads from scripts, CI or your own frontend.
# 1. Get an access token curl -s http://localhost:8000/api/v1/auth/token/ \ -H "Content-Type: application/json" \ -d '{"email":"you@example.com","password":"…"}' # 2. Create a conversation curl -s http://localhost:8000/api/v1/conversations/ \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title":"From the API"}' # 3. Send a message curl -s http://localhost:8000/api/v1/conversations/<id>/messages/ \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"content":"Summarize the docs"}'
Self-hosted, provider-agnostic, and polished out of the box.