v0.5.0
mahimailabs/voicegatewayv0.5.0May 12, 2026by mahimairaja
AI Summary
Adds cross-modality routing and white-labeling capabilities, optimizing session latency based on budgets and allowing per-project branding on the dashboard.
Key Highlights
- Cross-modality routing with latency budgeting per project.
- White-label branding support (logo, accent color, product name).
- New dashboard page for routing and latency observations.
New Features
- Cross-modality routing optimization
- White-label branding and dashboard customization
Full Release Notes
**v0.5.0 — Cross-modality routing and white-label**
Two capabilities ship together because they target the same agency rung of the buyer ladder. The router runs once per session at session-create time, reads the project's latency budget and recent observed per-provider latency, and picks the (STT, LLM, TTS) combination from the project's rosters that minimises predicted total latency under budget. White-label branding lets agencies upload a per-project logo, accent color, and product name; the dashboard chrome reflects the brand for users scoped to that project.
**Highlights**
- **REQ-VG-ROUTE-001** (latency budget per project): new `routing.budget_ms` on `ProjectConfig` with the OQ1-locked 1500 ms default; in-flight sessions keep their prior budget when the operator edits the project.
- **REQ-VG-ROUTE-002** (pick the triple at session start): `voicegateway/middleware/router.py::route_session` picks the lowest-predicted-total triple under budget from project rosters; falls back to fastest + `budget_overrun=true` (or raises `BudgetExceeded`). Observed p50 from `latency_observations` wins; missing observations fall back to `voicegateway/core/provider_baselines.json` (10 curated `(provider, modality)` entries with `source_url`). Caller overrides win for named modalities. The 15-minute roll-up worker keeps the snapshot fresh (OQ2).
- **REQ-VG-ROUTE-003** (show routing + observed latency): new `Routing` dashboard page with a sortable per-provider table, hourly auto-refresh, "no observations yet" labels (AC-4). `SessionDetail` modal gains a `RoutingStrip` showing the picked triple, budget, and overrun chip. `GET /api/routing/observations` powers both.
- **REQ-VG-ROUTE-004** (per-project white-label branding): new `BrandingConfig` (logo_url / accent_color / product_name) on `ProjectConfig`; `branding_json` column on `managed_projects`. Dashboard endpoints: `GET/POST /api/projects/{id}/branding` + multipart `POST /api/projects/{id}/branding/logo` (Pillow-validated PNG: 256 KB + 512×512 cap; SVG header validated). `lib/branding.ts` applies brand as CSS variables on `document.documentElement` plus favicon + title; read-once-per-mount (OQ5). Projects page Brand button opens a `BrandingModal` with color picker + logo upload + preview. `voicegw brand set/show/clear` CLI for scripted provisioning.
**Migration notes**
None breaking. Migration 0006 is idempotent and adds five nullable routing columns to `sessions`, `branding_json` nullable on `managed_projects` (guarded by `sqlite_master` for v0.0.5-only installs), and a new `latency_observations` table. Pre-v0.5.0 sessions keep NULL on the new columns; the dashboard's RoutingStrip is hidden entirely on those rows so they don't show empty UI. The new `pillow>=10.0` dependency lands automatically with `pip install -e .[dev]` or any cloud-extra reinstall.
Five Foundry Open Questions locked in this release: budget_ms default 1500 (OQ1), 24h rolling / 15-min refresh (OQ2), curated `provider_baselines.json` fallback (OQ3), 256 KB / 512×512 / PNG-SVG logo cap (OQ4), read-once-per-mount branding cache (OQ5).
Out of scope this release: no mid-call provider switching, no adaptive learning, no custom-domain dashboard hosting, no per-tenant branding inside one project, no email/exported-report branding, no cost-aware routing, no multi-region routing, no in-flight latency-budget enforcement. The agency quickstart guide enumerates these explicitly.
**Refinery and Foundry**
- Refinery: https://linear.app/mahimairaja/document/v050-cross-modality-routing-refinery-bc88ae8e11ea
- Foundry: https://linear.app/mahimairaja/document/v050-cross-modality-routing-foundry-blueprint-e6879587c0f7