OpenAI realtime speech-to-text

Streaming transcription can now route to OpenAI, and realtime-only transcription models are refused on the buffered path instead of failing at the vendor.

The streaming transcription socket can select OpenAI. Previously the router had no OpenAI streaming transport, so openai:gpt-live-transcribe could not be reached on any path.

openai:gpt-live-transcribe runs only on OpenAI's realtime transcription endpoint. Pinning it on POST /v1/transcribe or POST /v1/audio/transcriptions now returns HTTP 400 naming the buffered models that are available, rather than forwarding a request the vendor rejects.

Automatic selection on the buffered path never picks a realtime-only model, and the refusal does not advertise one.

The streaming config frame accepts an optional sampleRate between 8000 and 48000, defaulting to 16000. OpenAI requires at least 24 kHz, so lower-rate audio is upsampled and the rate actually sent is declared to the vendor.

Within one streaming session, gpt-live-transcribe emits cumulative partial transcripts and a single final transcript at end of stream. It carries no vendor turn detection, so there are no mid-call finals. The gpt-4o transcription models are unchanged and continue to finalize on vendor voice activity detection.

Action: No migration is required. Existing streaming and buffered integrations are unchanged. To use OpenAI streaming transcription, pin openai:gpt-live-transcribe on the transcription socket and send at least 24 kHz audio or let the router upsample.