This path is not verified end to end.
model-server/README.md states plainly that a real call through the voice server pointed at the gateway has not been tested, and that the LLM slot “has never been built or started”. STT and TTS have been verified standalone on an H200; the integration has not. Budget time for debugging, and do not put this in front of callers without testing it yourself.When to self-host
Against: you need GPUs, the images are large, and cold starts are slow. Mixing is common — self-host speech, use a cloud LLM, or the reverse.
Deploy the model server
From the repository root::8100; the model slots stay internal on 8001, 8002, 8003. Check it:
Network it to the runtime
The model containers publish nothing on the host — only the gateway does — so the stack coexists with others without port conflicts.- Same host
- Separate hosts
Put both stacks on one network, or reach the gateway over the host address:
Configure an agent
STT and TTS have first-class local providers — pick them like any other provider, nobase_url needed:
MODEL_SERVER_URL (indic_orpheus, OpenAI-shaped HTTP) and MODEL_SERVER_WS_URL (indic_nemotron, raw WebSocket) on the runtime. See Providers → The local providers for the field reference.
No local LLM provider exists yet, so an LLM still has to go through an OpenAI-compatible base_url on the openai provider:
GET /models reports. Mixing is fine — a self-hosted LLM with cloud STT and TTS is a valid configuration, and so is a self-hosted indic_orpheus/indic_nemotron pair with a cloud LLM.
Verify
Work outward, one layer at a time. 1. The gateway answers:Known gaps
The per-model pages under Model server state what has and has not run on hardware. Read them before choosing a model —
ready in models.yaml means “the folder exists with a Dockerfile”, not “tested”.