bodhi-realtime-agent / TransportCapabilities
Interface: TransportCapabilities
Defined in: src/types/transport.ts:19
Static capabilities — orchestrator branches on these, never on provider names.
Properties
automaticPreambles?
optionalautomaticPreambles?:boolean
Defined in: src/types/transport.ts:53
Model emits short spoken preambles automatically before tool calls / during reasoning. Doc-only signal for behaviour gating (suppress duplicate app-side announcements). Optional — undefined means false.
bufferedUncancellableAudio?
optionalbufferedUncancellableAudio?:boolean
Defined in: src/types/transport.ts:97
True when the transport streams response audio the framework cannot stop on the wire: generation runs faster than realtime and is buffered client-side, and cancelResponse() cannot cancel it — instead it suppresses the current response's remaining outbound audio. When true, the framework (a) drives barge-in itself via client VAD (the provider's own VAD is the only other interrupt and is unreliable mid-stream) and (b) relies on cancelResponse() to stop the trailing audio. A transport that sets this MUST implement cancelResponse to suppress its current-turn audio. Gemini Live → true; OpenAI/Qwen → false (cancelResponse cancels generation). Optional — undefined means false.
contextCompression
contextCompression:
boolean
Defined in: src/types/transport.ts:31
Supports server-side context compression (Gemini: yes, OpenAI: no).
explicitGenerationTrigger?
optionalexplicitGenerationTrigger?:boolean
Defined in: src/types/transport.ts:46
triggerGeneration() starts a model response by itself (a response.create on OpenAI/Qwen). Unset or false: the provider generates on its own after content or tool results, and the call is a no-op (Gemini). The reconnector's content-less nudge counts as eliciting only when this is true or elicitResponse exists.
frameworkOwnsInterrupt?
optionalframeworkOwnsInterrupt?:boolean
Defined in: src/types/transport.ts:81
True if this transport's interrupt actuation is framework-owned: cancelResponse() is the wire path the framework uses to stop generation, and the provider does not auto-cancel from server-VAD events. Required for greetingInterruptGraceMs > 0 to be honoured (otherwise the provider auto-cancel defeats the grace). Optional — undefined means false.
greetingInterruptGraceMs?
optionalgreetingInterruptGraceMs?:number
Defined in: src/types/transport.ts:74
Recommended grace window (ms) at session-first-audio during which user-driven interrupts are suppressed and outbound mic frames are dropped. Allows browser AEC to converge before the framework lets echo-triggered events count as barge-in. Defaults: OpenAI Realtime → 1000 (runtime-computed iff frameworkOwnsInterrupt is true), Gemini Live → 0, unknown → 0. Optional — undefined means 0.
groundingMetadata
groundingMetadata:
boolean
Defined in: src/types/transport.ts:33
Provides grounding metadata with search citations (Gemini: yes, OpenAI: no).
inPlaceSessionUpdate
inPlaceSessionUpdate:
boolean
Defined in: src/types/transport.ts:27
Supports in-place session update without reconnection (OpenAI: yes, Gemini: no).
messageTruncation
messageTruncation:
boolean
Defined in: src/types/transport.ts:21
Can truncate server-side message at audio playback position (OpenAI: yes, Gemini: no).
parallelToolCalls?
optionalparallelToolCalls?:boolean
Defined in: src/types/transport.ts:41
Model can emit multiple function_call items in a single response. Optional — undefined means false. Doc-only signal; the transport's batched-tool-call dispatch is on for everyone (no-op if only one call).
playbackGatedTurnComplete?
optionalplaybackGatedTurnComplete?:boolean
Defined in: src/types/transport.ts:66
onTurnComplete fires only after model audio playback should be done (Gemini Live: yes — turnComplete is delayed until playback; OpenAI Realtime: no — response.done is generation-gated). When false, the native playback-end gate must supply playback-end gating itself. Optional — undefined means false. EVERY transport should set this explicitly; the default exists only so adding the flag does not break compilation of existing custom transports.
providerEvidenceKinds?
optionalproviderEvidenceKinds?:ProviderEvidenceKind[]
Defined in: src/types/transport.ts:86
Provider-evidence kinds this transport's adapter can emit (Phase 1, design-speech-evidence-architecture.md §1). Undeclared kinds make the corresponding SegmentEvidence bit 'not-observable' — stated once here, never inferred per event. Omitted = no provider evidence.
quiescible?
optionalquiescible?:boolean
Defined in: src/types/transport.ts:58
Transport implements quiesce() / unquiesce() for cross-provider transcription mode (pause without disconnecting). When undefined or false, VoiceSession falls back to a framework-layer audio-output guard during mode flips.
reasoningEffort?
optionalreasoningEffort?:boolean
Defined in: src/types/transport.ts:49
Model exposes a configurable reasoning-effort dial (e.g. gpt-realtime-2). Optional — undefined means false.
sessionResumption
sessionResumption:
boolean
Defined in: src/types/transport.ts:29
Supports session resumption on disconnect (Gemini: yes, OpenAI: no).
textResponseModality?
optionaltextResponseModality?:boolean
Defined in: src/types/transport.ts:37
Supports text-only response modality (required for external TTS). Optional — defaults to false. Existing custom transport implementations are unaffected until they want to support TTS.
turnDetection
turnDetection:
boolean
Defined in: src/types/transport.ts:23
Server-side VAD / end-of-turn detection (V1 requires true).
userTranscription
userTranscription:
boolean
Defined in: src/types/transport.ts:25
Provides transcriptions of user audio input.