UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

84 lines (83 loc) • 2.54 kB
//#region extensions/openai/realtime-quicksilver.ts const OPENAI_GPT_LIVE_MODEL_PREFIX = "gpt-live"; const OPENAI_GPT_LIVE_MODELS = ["gpt-live-1", "gpt-live-1-codex"]; const OPENAI_GPT_LIVE_API_VOICES = [ "alloy", "ash", "ballad", "beacon", "bossa", "cedar", "cinder", "coral", "delta", "echo", "gleam", "marin", "meridian", "quartz", "ripple", "sage", "shimmer", "stone", "tempo", "verse", "vesper", "willow" ]; const OPENAI_GPT_LIVE_VOICES = [ "arbor", "breeze", "cove", "ember", "juniper", "maple", "sol", "spruce", "vale" ]; const OPENAI_GPT_LIVE_UNLISTED_VOICES = ["marin", "cedar"]; function isOpenAIGptLiveApiModel(model) { return model?.trim().toLowerCase() === "gpt-live-1"; } function isOpenAIGptLiveSubscriptionModel(model) { return model?.trim().toLowerCase() === "gpt-live-1-codex"; } function isSupportedOpenAIGptLiveModel(model) { return isOpenAIGptLiveApiModel(model) || isOpenAIGptLiveSubscriptionModel(model); } function resolveOpenAIQuicksilverVoice(model, value) { const voices = resolveOpenAIQuicksilverVoices(model); const defaultVoice = isOpenAIGptLiveSubscriptionModel(model) ? "cove" : "marin"; if (typeof value === "string") { const normalized = value.trim().toLowerCase(); return voices.find((voice) => voice === normalized) ?? defaultVoice; } return defaultVoice; } function resolveOpenAIQuicksilverVoices(model) { if (isOpenAIGptLiveApiModel(model)) return OPENAI_GPT_LIVE_API_VOICES; return isOpenAIGptLiveSubscriptionModel(model) ? OPENAI_GPT_LIVE_VOICES : OPENAI_GPT_LIVE_UNLISTED_VOICES; } function isOpenAIGptLiveModel(model) { if (!model) return false; const normalized = model.trim().toLowerCase(); return normalized === OPENAI_GPT_LIVE_MODEL_PREFIX || normalized.startsWith(`${OPENAI_GPT_LIVE_MODEL_PREFIX}-`); } const OPENAI_QUICKSILVER_CAPABILITIES = { transports: ["webrtc", "gateway-relay"], handlesAgentConsult: true, supportsBargeIn: false, handlesInputAudioBargeIn: true, supportsActivationNameGating: false, supportsToolCalls: false, supportsVideoFrames: false }; function resolveOpenAIQuicksilverVoiceCapabilities(model) { return { voices: resolveOpenAIQuicksilverVoices(model), voiceSelectionPolicy: "allowlist-default" }; } //#endregion export { isOpenAIGptLiveSubscriptionModel as a, resolveOpenAIQuicksilverVoiceCapabilities as c, isOpenAIGptLiveModel as i, OPENAI_QUICKSILVER_CAPABILITIES as n, isSupportedOpenAIGptLiveModel as o, isOpenAIGptLiveApiModel as r, resolveOpenAIQuicksilverVoice as s, OPENAI_GPT_LIVE_MODELS as t };