Skip to content

v0.5.0 — Cross-modality routing and white-label

Choose a tag to compare

@mahimairaja mahimairaja released this 12 May 04:11
· 774 commits to main since this release

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