Every modality, one control plane
Chat, embeddings, vision, audio, document OCR, rerank, async video jobs, and realtime sessions — across four request lifecycles. Because modality and lifecycle are first-class in the IR, policy applies to all of them the same way.
"Sync, true SSE streaming, crash-safe async jobs, realtime sessions — one control plane for all."
Sync
The classic request/response path — a single call in, a single completion out, with all policy applied inline.
True SSE streaming
stream: true uses true server-sent events via LiveStream adapters — no full upstream buffer on the happy path.
Crash-safe async jobs
Durable leased workers for long work like video and batches: enqueue → claim → heartbeat → complete, with a reaper for expired leases.
Realtime sessions
A WebSocket bridge for realtime, so live voice and streaming interactions share the same auth, budgets, and logging as everything else.
Every modality
Chat, embeddings, image generate/edit, audio TTS/STT, and rerank — modality is a first-class concept, not vision bolted on as a base64 afterthought.
Document OCR
PDFs, scans and images become Markdown, page by page, in the Mistral OCR request and response shape. Priced per page, guardrails run on every page and write their masks back, and the payload log summarises the document instead of storing it.
One control plane
All four lifecycles and every op share the same inference IR — routing, caching, budgets, and guardrails apply consistently across them.

Step by step
- 01
Speak any shape
Clients send OpenAI, Anthropic, or Gemini-style requests — chat, vision, audio, embeddings — or the native IR directly.
- 02
Map to the IR
The façade maps the request into one inference-request model that captures modality, operation, and lifecycle as first-class fields.
- 03
Pick the lifecycle
Sync returns inline, streaming opens an SSE channel, long jobs are enqueued to durable workers, and realtime opens a WebSocket bridge.
- 04
Apply policy uniformly
Routing, caching, budgets, and guardrails run the same way regardless of modality or lifecycle — no special cases to reason about.
# Video generation is always a job
POST /v1/videos
→ { "id": "job_9f2", "status": "queued" }
# Durable worker: claim → heartbeat → complete
# Survives restarts; a reaper reclaims dead leases
GET /v1/videos/job_9f2
→ { "status": "running" }Multimodal & Lifecycles is one of six control surfaces enforced in the same request path, applying to every application behind the endpoint — including the ones that were never instrumented.
See how they combineOne endpoint. Every model. Complete control.
Run it in your own infrastructure
Everything you need to run a control plane in production is Apache-2.0 and stays that way — routing, HA, caching, failover, budgets, policy, MCP, jobs and observability. Self-hosted, no account, no phone-home.
$ docker run -p 4000:4000 <registry>/waeg-gateway:<version>Not a working pull: the images are not public yet. Design partners receive the registry details privately.
Deploy in 5 minutesShape it as a design partner
Wäg is not publicly released yet. We are working with a small cohort of teams running multi-provider AI in production, and serious about governance and sovereignty, to harden the control plane on real workloads.
- Every Enterprise capability included, at no licence cost
- Hands-on migration — we do it with you, including from LiteLLM
- A direct line to the engineers building it, and real influence on what ships next