Streaming TTS model list was hardcoded in the official provider with two Volcengine ids. This moves it server-side so operators control the catalog without a client release. Catalog lives on `STREAMING_TTS_UPSTREAM.models` (same configKV entry as the ws upstream + key envelope) rather than a separate kv key — connection target, keys, and surfaced ids are one deployment decision, splitting them risks drift on rotation. `LLM_ROUTER_CONFIG.tts.models` is the router/fallback domain for HTTP TTS; streaming is single-ws and has no router semantics, so it gets its own `streamingTtsUpstreamSchema` instead of reusing `ttsUpstreamSchema`. New `GET /api/v1/audio/models/streaming` returns the configured list; empty when upstream or models is unset (UI renders "no models" instead of 5xx). Admin slice apply preserves existing `models` across key/connection rotation so admin POSTs that only carry upstream+keys do not wipe the catalog. Frontend `providerOfficialSpeechStreaming.listModels` fetches the endpoint and throws on upstream errors (no silent empty array).
@proj-airi/server
HTTP and WebSocket backend for AIRI. This app owns auth, billing, chat synchronization, gateway forwarding, and server-side observability export.
What It Does
- Serves the Hono-based API and WebSocket endpoints.
- Uses Postgres as the source of truth for users, billing, and durable state.
- Uses Redis for cache, KV, Pub/Sub, and Streams.
- Forwards GenAI requests to the configured upstream gateway and records billing from usage.
- Exports traces, metrics, and logs through OpenTelemetry.
How To Use It
Install dependencies from the repo root and run scoped commands:
pnpm -F @proj-airi/server typecheck
pnpm -F @proj-airi/server exec vitest run
pnpm -F @proj-airi/server build
For local observability infrastructure, use:
docker compose -f apps/server/docker-compose.otel.yml up -d
ADDITIONAL_TRUSTED_ORIGINS (LAN / Capacitor dev)
When the mobile dev server uses a non-localhost origin (for example https://10.x.x.x:5273 from cap copy ios / capacitor.config.json), set ADDITIONAL_TRUSTED_ORIGINS in apps/server/.env.local to a comma-separated list of exact origins (parsed and normalized at startup). Example:
ADDITIONAL_TRUSTED_ORIGINS=https://10.0.0.129:5273,https://198.18.0.1:5273
Restart the API server after changing this variable.