Skip to content

feat(gateway): WaaV Infer integration — session language, endpoint, truncated replies - #20

Merged
dittops merged 4 commits into
fix/gaia-integration-2026-10-16from
feat/infer-integration-2026-10-19
Oct 19, 2026
Merged

dittops merged 4 commits into
fix/gaia-integration-2026-10-16from
feat/infer-integration-2026-10-19

Conversation

@dittops

@dittops dittops commented Oct 19, 2026

Copy link
Copy Markdown
Member

Summary

Stacked on #19 (base: fix/gaia-integration-2026-10-16). Gateway side of BudEcosystem/WaaV-Infer#2.

  • Segmented STT sends the session language to WaaV Infer. The waav-infer-file profile now carries language (single shape, droppable if a server refuses it). Before, the Gateway sent no language, so Infer guessed per segment. Routing map, capability map and the wire test updated.
  • Native Infer adapters point at Infer's real endpoint, ws://127.0.0.1:8080/v1/ws (was :8123/v1/realtime, which Infer does not serve).
  • Truncated replies are surfaced. WaaV Infer now marks a reply its length bound cut off (x-waav-truncated: true on REST; a truncated terminal on its WebSocket). The generic TTS HTTP layer logs it and counts waav_gateway_tts_truncated_total{provider} instead of passing a cut-off reply off as complete.

Test plan

  • segmented-stt 490/490
  • gateway lib 7110/7113 — the 3 failures are timing tests in untouched code (core::metrics::provider test_ttfb_recording, test_concurrent_min_max_updates; core::observability::speaking test_typical_speaking_session) that pass on rerun (one intermittent in 5 stress runs)
  • new unit test for the truncation header
  • my changed file is cargo fmt clean (the crate's fmt check already fails on other untouched files)

🤖 Generated with Claude Code

jithinAB and others added 4 commits October 19, 2026 05:42
…runcated replies

- Segmented STT: the waav-infer file profile now sends the session language
  (`language`, single shape, droppable on refusal) — the Gateway used to send
  none, so Infer guessed the language per segment. Routing map, capability map
  and the wire test updated.
- Native Infer STT/TTS adapters default to Infer's real endpoint,
  ws://127.0.0.1:8080/v1/ws (was ws://127.0.0.1:8123/v1/realtime).
- TTS: a speech reply WaaV Infer flags with `x-waav-truncated: true` (its
  length bound cut the utterance; the audio is real but incomplete) is logged
  and counted in waav_gateway_tts_truncated_total{provider}, instead of being
  passed off as a complete reply. Pairs with Infer's new `truncated` terminal.

Tests: segmented-stt 490/490; gateway lib 7110/7113 — the three failures
(core::metrics::provider test_ttfb_recording / test_concurrent_min_max_updates,
core::observability::speaking test_typical_speaking_session) are timing tests
in untouched code that pass on rerun (one intermittent in 5 stress runs).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ws test

All of these also failed on #19's head; main was last green on 5 Oct.

- supply-chain: rustls 0.23.45 -> 0.23.46 (RUSTSEC-2026-0346..0349). The rest
  cannot be upgraded here and are ignored with reasons in deny.toml (mirrored in
  gateway/.cargo/audit.toml), like the existing tonic 0.11 entries: rustls 0.22
  only via tonic 0.11 (Google Speech client); zip extract() advisories while
  WaaV never extracts (zip 0.6 is webrtc-sys-build's build-time unpack, zip 2 is
  ndarray-npy's .npz reader via mel_spec); unsafe-libyaml unmaintained via
  serde_yaml 0.9 (operator-authored YAML). `cargo audit --deny warnings` and
  `cargo deny check advisories bans licenses sources` pass.
- clippy -D warnings (Rust 1.99): chunks_exact -> as_chunks, is_multiple_of,
  and an explained allow where a `return` is only needless without features.
- server boot: config.example.yaml configures API secrets, so #19's metrics
  policy locks /metrics (403) — the secure default. The probe now asserts the
  403, then reboots with WAAV_METRICS_PUBLIC=true and checks the series.
- ws_tests::test_websocket_voice_config: #19 closes a session whose voice setup
  failed (1011) instead of leaving it half-configured; the test now asserts that
  close rather than writing into the closed socket.

Verified: clippy (default and --all-features) clean; the CI integration suites
(e2e_mock, load, server_startup, ws, keystone_wire, keystone_completeness,
segmented_stt_ws, segmented_stt_golden) 63/63.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CI's rustfmt and segmented-stt jobs failed on #19's head. Formatting only, no
functional change (vendored webrtc-sys untouched); both crates build with all
targets afterwards.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gateway/vendor/ (webrtc-sys, livekit-api, vendored in #19) is upstream code kept
byte-close to its source; its spellings are not ours to change. With cargo audit
and cargo deny now green, typos on vendor/ was the last supply-chain failure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dittops
dittops merged commit 2417994 into fix/gaia-integration-2026-10-16 Oct 19, 2026
17 checks passed
dittops pushed a commit that referenced this pull request Oct 19, 2026
gitleaks flagged gateway/vendor/livekit-api/src/test_token.txt (rule jwt) once #20 merged into this branch
and the scan covered the whole range to main. It is the upstream crate's own test token (iss "myapikey",
sub "identity", expired March 2025), read only by its access_token.rs tests. Allowlisted by exact path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants