voicegw smoke-test
Validate the inference pipeline end-to-end without spinning up a LiveKit server. Use this as a pre-deploy check after touching voicegw.yaml, after a key rotation, or when triaging a “the dashboard says zero costs” report.
What it checks
- Config:
voicegw.yamlparses, cost tracking is enabled (smoke-test needs SQLite to verify storage writes). - Active project: resolves the same way the inference module does (
--projectflag >default_project> first non-default project >default). - Inference factories: for each modality with a configured model and provider key,
voicegateway.inference.STT/LLM/TTSconstructs cleanly. The LiveKit plugin layer is stubbed so the run does not hit any provider API. - Storage path: the wrapped instance’s
_log_requestwrites a row to therequeststable. - Session correlation: all three wrappers share one
session_id, thesessionsrow aggregatesmodalities,started_at,ended_at,total_cost_usd, andrequest_count.
Usage
--live flag
Without --live the smoke test is offline-safe: stubbed plugins, no API calls. Pass --live to additionally run each configured provider’s health_check() (the same probe vg_test_provider_key runs over MCP). The health check makes one lightweight call per provider (typically a model-list endpoint) and reports reachable or the exception.
--live requires real provider credentials and network access. Skip it on air-gapped machines or when running pre-deploy in CI.
What it does NOT replace
smoke-test covers every layer of the pipeline up to the LiveKit transport. It does not:
- Connect to a LiveKit server.
- Perform real audio capture or playback.
- Verify end-to-end latency (TTFB across STT → LLM → TTS).
Sample output
Common failures
| Failure | Likely cause |
|---|---|
config FAIL: cost tracking disabled | Enable cost_tracking.enabled: true in voicegw.yaml. |
inference.STT FAIL: No API key configured for provider 'deepgram' | The fail-fast preflight. Set the env var the YAML references, or run vg_add_provider. |
inference.STT PASS with “skipped (no model registered)“ | The project’s available providers cover this modality but no model is in models:. Add an entry under models.stt: for the relevant provider. |
health.<provider> FAIL with auth error (only with --live) | Wrong credentials. Rotate via vg_set_provider_key (MCP) or update YAML. |
session correlation FAIL: missing entries in modalities | Some modality’s _log_request call did not write through. Check the row above for the underlying error. |
/cli/ for the full CLI reference.