Files
openclaw/extensions/openai/realtime-quicksilver.ts
Peter Steinberger dc60a9442d feat(talk): support GPT-Live over gateway relay (#115831)
* feat(talk): add GPT-Live gateway relay peer

* fix(talk): ignore duplicate GPT-Live sideband audio

* fix(openai): harden GPT-Live relay startup

* fix(deps): replace vulnerable werift ip helper

* fix(deps): scope werift ip override version

* fix(openai): normalize relay startup errors

* test(ci): register GPT-Live gateway live shard

* fix(talk): tighten GPT-Live relay readiness

* fix(talk): keep relay override helper private

* fix(talk): resolve relay readiness with launch model

* fix(openai): preserve GPT-Live media clock

* fix(talk): align GPT-Live relay readiness and framing

* fix(openai): expire pending GPT-Live reservations

* fix(openai): harden GPT-Live delegation audio

* style(openai): satisfy RTP reorder lint
2026-07-29 12:54:23 -04:00

26 lines
876 B
TypeScript

// GPT-Live (OpenAI "quicksilver") uses browser or Gateway-owned WebRTC when
// the host owns delegation, and the Platform-key Frameless Bidi WebSocket elsewhere.
const OPENAI_GPT_LIVE_MODEL_PREFIX = "gpt-live";
export const OPENAI_GPT_LIVE_MODELS = ["gpt-live-1-codex", "gpt-live-1-boulder-alpha"] as const;
export function isOpenAIGptLiveModel(model: string | undefined): boolean {
if (!model) {
return false;
}
const normalized = model.trim().toLowerCase();
return (
normalized === OPENAI_GPT_LIVE_MODEL_PREFIX ||
normalized.startsWith(`${OPENAI_GPT_LIVE_MODEL_PREFIX}-`)
);
}
export function isSupportedOpenAIGptLiveModel(model: string | undefined): boolean {
if (!model) {
return false;
}
const normalized = model.trim().toLowerCase();
return OPENAI_GPT_LIVE_MODELS.includes(normalized as (typeof OPENAI_GPT_LIVE_MODELS)[number]);
}