2026-03-16 12:56:09 +00:00
import { normalizeProviderId } from "../agents/provider-id.js" ;
2026-03-17 04:04:12 +00:00
import { findCatalogTemplate } from "./provider-catalog.js" ;
2026-03-16 12:56:09 +00:00
import type {
ProviderAugmentModelCatalogContext ,
ProviderBuiltInModelSuppressionContext ,
} from "./types.js" ;
const OPENAI_PROVIDER_ID = "openai" ;
const OPENAI_CODEX_PROVIDER_ID = "openai-codex" ;
const OPENAI_DIRECT_SPARK_MODEL_ID = "gpt-5.3-codex-spark" ;
const SUPPRESSED_SPARK_PROVIDERS = new Set ( [ "openai" , "azure-openai-responses" ] ) ;
export function resolveBundledProviderBuiltInModelSuppression (
context : ProviderBuiltInModelSuppressionContext ,
) {
if (
! SUPPRESSED_SPARK_PROVIDERS . has ( normalizeProviderId ( context . provider ) ) ||
context . modelId . toLowerCase ( ) !== OPENAI_DIRECT_SPARK_MODEL_ID
) {
return undefined ;
}
return {
suppress : true ,
errorMessage : ` Unknown model: ${ context . provider } / ${ OPENAI_DIRECT_SPARK_MODEL_ID } . ${ OPENAI_DIRECT_SPARK_MODEL_ID } is only supported via openai-codex OAuth. Use openai-codex/ ${ OPENAI_DIRECT_SPARK_MODEL_ID } . ` ,
} ;
}
export function augmentBundledProviderCatalog (
context : ProviderAugmentModelCatalogContext ,
) : ProviderAugmentModelCatalogContext [ "entries" ] {
const openAiGpt54Template = findCatalogTemplate ( {
entries : context.entries ,
providerId : OPENAI_PROVIDER_ID ,
templateIds : [ "gpt-5.2" ] ,
} ) ;
const openAiGpt54ProTemplate = findCatalogTemplate ( {
entries : context.entries ,
providerId : OPENAI_PROVIDER_ID ,
templateIds : [ "gpt-5.2-pro" , "gpt-5.2" ] ,
} ) ;
2026-03-17 16:21:39 -07:00
const openAiGpt54MiniTemplate = findCatalogTemplate ( {
entries : context.entries ,
providerId : OPENAI_PROVIDER_ID ,
templateIds : [ "gpt-5-mini" ] ,
} ) ;
const openAiGpt54NanoTemplate = findCatalogTemplate ( {
entries : context.entries ,
providerId : OPENAI_PROVIDER_ID ,
templateIds : [ "gpt-5-nano" , "gpt-5-mini" ] ,
} ) ;
2026-03-16 12:56:09 +00:00
const openAiCodexGpt54Template = findCatalogTemplate ( {
entries : context.entries ,
providerId : OPENAI_CODEX_PROVIDER_ID ,
templateIds : [ "gpt-5.3-codex" , "gpt-5.2-codex" ] ,
} ) ;
const openAiCodexSparkTemplate = findCatalogTemplate ( {
entries : context.entries ,
providerId : OPENAI_CODEX_PROVIDER_ID ,
templateIds : [ "gpt-5.3-codex" , "gpt-5.2-codex" ] ,
} ) ;
return [
openAiGpt54Template
? {
. . . openAiGpt54Template ,
id : "gpt-5.4" ,
name : "gpt-5.4" ,
}
: undefined ,
openAiGpt54ProTemplate
? {
. . . openAiGpt54ProTemplate ,
id : "gpt-5.4-pro" ,
name : "gpt-5.4-pro" ,
}
: undefined ,
2026-03-17 16:21:39 -07:00
openAiGpt54MiniTemplate
? {
. . . openAiGpt54MiniTemplate ,
id : "gpt-5.4-mini" ,
name : "gpt-5.4-mini" ,
}
: undefined ,
openAiGpt54NanoTemplate
? {
. . . openAiGpt54NanoTemplate ,
id : "gpt-5.4-nano" ,
name : "gpt-5.4-nano" ,
}
: undefined ,
2026-03-16 12:56:09 +00:00
openAiCodexGpt54Template
? {
. . . openAiCodexGpt54Template ,
id : "gpt-5.4" ,
name : "gpt-5.4" ,
}
: undefined ,
openAiCodexSparkTemplate
? {
. . . openAiCodexSparkTemplate ,
id : OPENAI_DIRECT_SPARK_MODEL_ID ,
name : OPENAI_DIRECT_SPARK_MODEL_ID ,
}
: undefined ,
] . filter ( ( entry ) : entry is NonNullable < typeof entry > = > entry !== undefined ) ;
}