Sabbia AI
OPEN SOURCE · SELF-HOSTED

Multimodal and voice agents you host yourself

Knowledge Q&A, customer support, transcript-based voice, and image understanding. Four capabilities in a zero-dependency, single-process Bun server you run on your own infrastructure.

Your runtime. Your storage. Your provider keys.

local / quickstart
git clone https://github.com/sabbia-ai/sabbia
cd sabbia && cp .env.example .env
bun run src/index.ts      # → http://localhost:3000

Requires Bun 1.2+. Set your provider key in .env, or use SABBIA_MOCK=1 for offline inference. Setup details →

4agent modules
0runtime dependencies
1process to run
100 %self-hosted
FOUR CAPABILITIES · ONE FOUNDATION

From context to conversation.

Ground answers. Route requests.
Work with transcripts and images.

01 / AGENT MODULE

Knowledge

Document Q&A with citations.

  • PDF, Markdown, DOCX, HTML, and CSV ingestion
  • BM25 + rank fusion retrieval
  • Inline [S1] citations link back to the source excerpt
  • Refuses to answer when the corpus has no grounding
Open Knowledge
02 / AGENT MODULE

Support

A customer-support agent with clear boundaries.

  • Intent routing for customer requests
  • Four-state guardrails: allow / redact / refuse / escalate
  • PII redaction before model calls
  • Persisted escalation tickets with an SLA deadline
Open Support
03 / AGENT MODULE

Voice

Transcript-mode agents for telephony integrations.

  • Bring your own STT/TTS
  • Per-session transcript segments with timings and interruption flags
  • A guardrail verdict on every caller turn
  • Concise replies for low-latency workflows; timing returned per turn

Browser audio capture is outside the product. The agent consumes transcripts; your application handles STT/TTS.

Open Voice
04 / AGENT MODULE

Vision

Ask one image to explain itself.

  • Describe a visible scene
  • OCR-style text extraction
  • Table extraction to CSV-ready rows
  • Question answering against a single image
Open Vision
INSPECT THE WORK

A console for every turn.

Upload sources, inspect citations, review guardrail verdicts, and track model calls. Use the same runtime for knowledge, support, transcript sessions, and image analysis.

Open the console
sabbia / consoleIllustrative preview
sKnowledgeSupportVoiceVision
KNOWLEDGE

What is the return window?

Sabbia AI

Returns are accepted for thirty days with a receipt. [S1]

allow
[S1] Returns policy

“Returns are accepted for thirty days with a receipt.”

SMALL BY DESIGN

One process. A clear path.

Local state and an explicit
gateway for model calls.

  1. 01

    Browser

    Static HTML, CSS, and JavaScript

  2. 02

    Bun HTTP + SSE

    Routes, agent turns, and ingestion

    Event journal / SSE resume by sequence
  3. 03

    SQLite (FTS5)
    + object store

    Sources, transcripts, and persisted events

  4. 04

    Provider gateway

    text · vision · guard

    Key-pool rotation + cooldowns

Logical request flow. Storage is local; live model inference runs at the provider endpoint you configure.

OWN THE RUNTIME

Why self-host?

Zero dependencies

Bun runs the TypeScript server and static console directly. No package installation or application build.

Single process

HTTP, SSE, ingestion, SQLite, and agent orchestration share one Bun process.

Citations by default

Knowledge answers use source labels you can open in the console’s excerpt inspector.

Resumable streams

Every thread event is journaled with a sequence number for replay after a disconnect.

Guardrails on input and output

Conversation turns pass PII and safety checks before the final reply is delivered.

Provider key rotation

A round-robin key pool rotates on rate limits and transient failures, with cooldowns.

BUILD ON THE SAME PRIMITIVES

An API you can read.

Request and response reference →
Core HTTP endpoints
MethodPathPurpose
GET/healthzCheck runtime, database, and provider key health.
GET/api/modelsRead the explicit model registry.
POST/v1/threadsCreate a conversation on an agent surface.
POST/v1/threads/:id/turnsSubmit a message and receive its SSE events.
GET/v1/threads/:id/eventsReplay the journal and subscribe to live SSE.
POST/v1/corporaCreate a document collection.
POST/v1/corpora/:id/sourcesUpload a document for background ingestion.
POST/v1/corpora/:id/searchRetrieve scored source passages.
POST/v1/assetsUpload an image to the local object store.
POST/v1/vision/analysesAnalyze one image: describe, text, table, or qa.
POST/v1/voice/sessionsStart a transcript session and its voice thread.
POST/v1/voice/sessions/:id/turnsLog a transcript and return the caller turn’s agent reply.
BEFORE YOU RUN IT

A few practical answers.

What do I need to run it?

Bun 1.2 or later, writable local storage, and a provider API key. Set SABBIA_MOCK=1 in .env to try deterministic offline inference without a key. Docker Compose is also supported.

Which models does it call?

The explicit registry includes GPT-OSS for text, Nemotron and Llama models for vision and safety, and separate fast routing roles. Live calls use your configured NVIDIA-compatible endpoint. See the full registry and token budgets.

Where does my data go?

SQLite stores conversations, transcript segments, events, and document chunks in your data directory. Original uploads live in its object store. Prompts, relevant source passages, and images used for live inference go to your configured provider. There is no telemetry.

Can I use my own STT and TTS?

Yes. Your telephony or audio application transcribes caller audio, sends the transcript to the Voice API, and turns the returned reply into audio. The Sabbia console accepts text; it does not capture browser audio.

Does it need a vector database?

No. Retrieval combines SQLite FTS5 BM25 results with a lexical fallback using reciprocal rank fusion. It does not require embeddings or a separate vector service.

What licence is it under?

Sabbia AI is licensed under Apache-2.0. You can run it on your own infrastructure and adapt it under that licence.