Nebula AI workspace
Django · Channels · HTMX

An AI workspace
that feels alive.

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.

SSE + WSStreaming by default
5 formatsPDF, DOCX, MD, TXT
REST + JWTAutomation ready
nebula / conversations / product-brief streaming
You
Summarize the attached product brief and list the top three risks.
Summary. The brief proposes a usage-based tier with document grounding as the flagship feature.

Risks.
1. Embedding cost scales with uploads.
2. Quota messaging must be clear at the limit.
3. Provider latency varies by region.
You
Cite the passages you used.
brief.pdf · p.4 pricing.md
1.2s first token quota enforced RAG grounded
Everything included

Production concerns, already handled

No glue code, no half-finished admin. Auth, streaming, retrieval, quotas, API and tests ship in the box.

Token streaming

WebSocket deltas render with a live caret, then swap to sanitized Markdown when the reply completes.

Document grounding

PDF, DOCX, Markdown and text files are chunked, embedded and retrieved per conversation or globally.

Provider agnostic

One OpenAI-compatible adapter covers OpenAI, Azure, Groq, OpenRouter, Together, Ollama and LM Studio.

Usage quotas

Every completion and embedding is metered. Monthly allowances reset automatically and block at the limit.

REST API + JWT

Conversations, messages and documents are scriptable with per-user throttling and pagination.

Secure by default

Custom email-first users, CSRF-protected forms, sanitized Markdown and owner-only querysets.

How it works

From clone to conversation in three steps

01

Configure a provider

Copy .env.example, point LLM_BASE_URL at your provider and add a key. Or keep the mock provider for an offline demo.

02

Create your account

Sign up, start a thread, and tune the model, temperature and system prompt per conversation.

03

Add your knowledge

Upload documents from the chat panel or the library, then ask questions and get cited answers.

Automate anything

A REST API that matches the UI

Exchange credentials for a JWT, then drive conversations, messages and uploads from scripts, CI or your own frontend.

JWT auth Throttled Paginated
Browse the API
shell
# 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"}'

Ready to give your team a real AI workspace?

Self-hosted, provider-agnostic, and polished out of the box.