@@ -10,6 +10,11 @@ const OPENAI_GPT_54_CONTEXT_TOKENS = 1_050_000;
1010const OPENAI_GPT_54_MAX_TOKENS = 128_000 ;
1111const OPENAI_GPT_54_TEMPLATE_MODEL_IDS = [ "gpt-5.2" ] as const ;
1212const OPENAI_GPT_54_PRO_TEMPLATE_MODEL_IDS = [ "gpt-5.2-pro" , "gpt-5.2" ] as const ;
13+ const OPENAI_GPT_REALTIME_15_MODEL_ID = "gpt-realtime-1.5" ;
14+ const OPENAI_GPT_REALTIME_MINI_MODEL_ID = "gpt-realtime-mini" ;
15+ const OPENAI_GPT_REALTIME_CONTEXT_TOKENS = 128_000 ;
16+ const OPENAI_GPT_REALTIME_MAX_TOKENS = 16_384 ;
17+ const OPENAI_GPT_REALTIME_TEMPLATE_MODEL_IDS = [ "gpt-5.2" , "gpt-4.1" ] as const ;
1318
1419const OPENAI_CODEX_GPT_54_MODEL_ID = "gpt-5.4" ;
1520const OPENAI_CODEX_GPT_54_CONTEXT_TOKENS = 1_050_000 ;
@@ -91,6 +96,53 @@ function resolveOpenAIGpt54ForwardCompatModel(
9196 ) ;
9297}
9398
99+ function resolveOpenAIRealtimeForwardCompatModel (
100+ provider : string ,
101+ modelId : string ,
102+ modelRegistry : ModelRegistry ,
103+ ) : Model < Api > | undefined {
104+ const normalizedProvider = normalizeProviderId ( provider ) ;
105+ if ( normalizedProvider !== "openai" ) {
106+ return undefined ;
107+ }
108+
109+ const trimmedModelId = modelId . trim ( ) ;
110+ const lower = trimmedModelId . toLowerCase ( ) ;
111+ if ( lower !== OPENAI_GPT_REALTIME_15_MODEL_ID && lower !== OPENAI_GPT_REALTIME_MINI_MODEL_ID ) {
112+ return undefined ;
113+ }
114+
115+ return (
116+ cloneFirstTemplateModel ( {
117+ normalizedProvider,
118+ trimmedModelId,
119+ templateIds : [ ...OPENAI_GPT_REALTIME_TEMPLATE_MODEL_IDS ] ,
120+ modelRegistry,
121+ patch : {
122+ api : "openai-responses" ,
123+ provider : normalizedProvider ,
124+ baseUrl : "https://api.openai.com/v1" ,
125+ reasoning : false ,
126+ input : [ "text" ] ,
127+ contextWindow : OPENAI_GPT_REALTIME_CONTEXT_TOKENS ,
128+ maxTokens : OPENAI_GPT_REALTIME_MAX_TOKENS ,
129+ } ,
130+ } ) ??
131+ normalizeModelCompat ( {
132+ id : trimmedModelId ,
133+ name : trimmedModelId ,
134+ api : "openai-responses" ,
135+ provider : normalizedProvider ,
136+ baseUrl : "https://api.openai.com/v1" ,
137+ reasoning : false ,
138+ input : [ "text" ] ,
139+ cost : { input : 0 , output : 0 , cacheRead : 0 , cacheWrite : 0 } ,
140+ contextWindow : OPENAI_GPT_REALTIME_CONTEXT_TOKENS ,
141+ maxTokens : OPENAI_GPT_REALTIME_MAX_TOKENS ,
142+ } as Model < Api > )
143+ ) ;
144+ }
145+
94146function cloneFirstTemplateModel ( params : {
95147 normalizedProvider : string ;
96148 trimmedModelId : string ;
@@ -348,6 +400,7 @@ export function resolveForwardCompatModel(
348400) : Model < Api > | undefined {
349401 return (
350402 resolveOpenAIGpt54ForwardCompatModel ( provider , modelId , modelRegistry ) ??
403+ resolveOpenAIRealtimeForwardCompatModel ( provider , modelId , modelRegistry ) ??
351404 resolveOpenAICodexForwardCompatModel ( provider , modelId , modelRegistry ) ??
352405 resolveAnthropicOpus46ForwardCompatModel ( provider , modelId , modelRegistry ) ??
353406 resolveAnthropicSonnet46ForwardCompatModel ( provider , modelId , modelRegistry ) ??
0 commit comments