























@@ -22,15 +22,21 @@ import {
2222} from "./shared.js";
23232424const PROVIDER_ID = "openai";
25+const OPENAI_GPT_55_MODEL_ID = "gpt-5.5";
26+const OPENAI_GPT_55_PRO_MODEL_ID = "gpt-5.5-pro";
2527const OPENAI_GPT_54_MODEL_ID = "gpt-5.4";
2628const OPENAI_GPT_54_PRO_MODEL_ID = "gpt-5.4-pro";
2729const OPENAI_GPT_54_MINI_MODEL_ID = "gpt-5.4-mini";
2830const OPENAI_GPT_54_NANO_MODEL_ID = "gpt-5.4-nano";
31+const OPENAI_GPT_55_CONTEXT_TOKENS = 1_000_000;
32+const OPENAI_GPT_55_PRO_CONTEXT_TOKENS = 1_000_000;
2933const OPENAI_GPT_54_CONTEXT_TOKENS = 1_050_000;
3034const OPENAI_GPT_54_PRO_CONTEXT_TOKENS = 1_050_000;
3135const OPENAI_GPT_54_MINI_CONTEXT_TOKENS = 400_000;
3236const OPENAI_GPT_54_NANO_CONTEXT_TOKENS = 400_000;
3337const OPENAI_GPT_54_MAX_TOKENS = 128_000;
38+const OPENAI_GPT_55_COST = { input: 5, output: 30, cacheRead: 0, cacheWrite: 0 } as const;
39+const OPENAI_GPT_55_PRO_COST = { input: 30, output: 180, cacheRead: 0, cacheWrite: 0 } as const;
3440const OPENAI_GPT_54_COST = { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 } as const;
3541const OPENAI_GPT_54_PRO_COST = { input: 30, output: 180, cacheRead: 0, cacheWrite: 0 } as const;
3642const OPENAI_GPT_54_MINI_COST = {
@@ -45,18 +51,29 @@ const OPENAI_GPT_54_NANO_COST = {
4551cacheRead: 0.02,
4652cacheWrite: 0,
4753} as const;
54+const OPENAI_GPT_55_TEMPLATE_MODEL_IDS = [OPENAI_GPT_54_MODEL_ID, "gpt-5.2"] as const;
55+const OPENAI_GPT_55_PRO_TEMPLATE_MODEL_IDS = [
56+OPENAI_GPT_54_PRO_MODEL_ID,
57+OPENAI_GPT_54_MODEL_ID,
58+"gpt-5.2-pro",
59+"gpt-5.2",
60+] as const;
4861const OPENAI_GPT_54_TEMPLATE_MODEL_IDS = ["gpt-5.2"] as const;
4962const OPENAI_GPT_54_PRO_TEMPLATE_MODEL_IDS = ["gpt-5.2-pro", "gpt-5.2"] as const;
5063const OPENAI_GPT_54_MINI_TEMPLATE_MODEL_IDS = ["gpt-5-mini"] as const;
5164const OPENAI_GPT_54_NANO_TEMPLATE_MODEL_IDS = ["gpt-5-nano", "gpt-5-mini"] as const;
5265const OPENAI_XHIGH_MODEL_IDS = [
66+"gpt-5.5",
67+"gpt-5.5-pro",
5368"gpt-5.4",
5469"gpt-5.4-pro",
5570"gpt-5.4-mini",
5671"gpt-5.4-nano",
5772"gpt-5.2",
5873] as const;
5974const OPENAI_MODERN_MODEL_IDS = [
75+"gpt-5.5",
76+"gpt-5.5-pro",
6077"gpt-5.4",
6178"gpt-5.4-pro",
6279"gpt-5.4-mini",
@@ -97,14 +114,38 @@ function normalizeOpenAITransport(model: ProviderRuntimeModel): ProviderRuntimeM
97114};
98115}
99116100-function resolveOpenAIGpt54ForwardCompatModel(
117+function resolveOpenAIGptForwardCompatModel(
101118ctx: ProviderResolveDynamicModelContext,
102119): ProviderRuntimeModel | undefined {
103120const trimmedModelId = ctx.modelId.trim();
104121const lower = normalizeLowercaseStringOrEmpty(trimmedModelId);
105122let templateIds: readonly string[];
106123let patch: Partial<ProviderRuntimeModel>;
107-if (lower === OPENAI_GPT_54_MODEL_ID) {
124+if (lower === OPENAI_GPT_55_MODEL_ID) {
125+templateIds = OPENAI_GPT_55_TEMPLATE_MODEL_IDS;
126+patch = {
127+api: "openai-responses",
128+provider: PROVIDER_ID,
129+baseUrl: "https://api.openai.com/v1",
130+reasoning: true,
131+input: ["text", "image"],
132+cost: OPENAI_GPT_55_COST,
133+contextWindow: OPENAI_GPT_55_CONTEXT_TOKENS,
134+maxTokens: OPENAI_GPT_54_MAX_TOKENS,
135+};
136+} else if (lower === OPENAI_GPT_55_PRO_MODEL_ID) {
137+templateIds = OPENAI_GPT_55_PRO_TEMPLATE_MODEL_IDS;
138+patch = {
139+api: "openai-responses",
140+provider: PROVIDER_ID,
141+baseUrl: "https://api.openai.com/v1",
142+reasoning: true,
143+input: ["text", "image"],
144+cost: OPENAI_GPT_55_PRO_COST,
145+contextWindow: OPENAI_GPT_55_PRO_CONTEXT_TOKENS,
146+maxTokens: OPENAI_GPT_54_MAX_TOKENS,
147+};
148+} else if (lower === OPENAI_GPT_54_MODEL_ID) {
108149templateIds = OPENAI_GPT_54_TEMPLATE_MODEL_IDS;
109150patch = {
110151api: "openai-responses",
@@ -202,7 +243,7 @@ export function buildOpenAIProvider(): ProviderPlugin {
202243},
203244}),
204245],
205-resolveDynamicModel: (ctx) => resolveOpenAIGpt54ForwardCompatModel(ctx),
246+resolveDynamicModel: (ctx) => resolveOpenAIGptForwardCompatModel(ctx),
206247normalizeResolvedModel: (ctx) => {
207248if (normalizeProviderId(ctx.provider) !== PROVIDER_ID) {
208249return undefined;
@@ -234,7 +275,7 @@ export function buildOpenAIProvider(): ProviderPlugin {
234275if (ctx.provider !== PROVIDER_ID || ctx.listProfileIds("openai-codex").length === 0) {
235276return undefined;
236277}
237-return 'No API key found for provider "openai". You are authenticated with OpenAI Codex OAuth. Use openai-codex/gpt-5.4 (OAuth) or set OPENAI_API_KEY to use openai/gpt-5.4.';
278+return 'No API key found for provider "openai". You are authenticated with OpenAI Codex OAuth. Use openai-codex/gpt-5.5 (OAuth) or set OPENAI_API_KEY to use openai/gpt-5.5.';
238279},
239280suppressBuiltInModel: (ctx) => {
240281if (
@@ -249,6 +290,16 @@ export function buildOpenAIProvider(): ProviderPlugin {
249290};
250291},
251292augmentModelCatalog: (ctx) => {
293+const openAiGpt55Template = findCatalogTemplate({
294+entries: ctx.entries,
295+providerId: PROVIDER_ID,
296+templateIds: OPENAI_GPT_55_TEMPLATE_MODEL_IDS,
297+});
298+const openAiGpt55ProTemplate = findCatalogTemplate({
299+entries: ctx.entries,
300+providerId: PROVIDER_ID,
301+templateIds: OPENAI_GPT_55_PRO_TEMPLATE_MODEL_IDS,
302+});
252303const openAiGpt54Template = findCatalogTemplate({
253304entries: ctx.entries,
254305providerId: PROVIDER_ID,
@@ -270,6 +321,18 @@ export function buildOpenAIProvider(): ProviderPlugin {
270321templateIds: OPENAI_GPT_54_NANO_TEMPLATE_MODEL_IDS,
271322});
272323return [
324+buildOpenAISyntheticCatalogEntry(openAiGpt55Template, {
325+id: OPENAI_GPT_55_MODEL_ID,
326+reasoning: true,
327+input: ["text", "image"],
328+contextWindow: OPENAI_GPT_55_CONTEXT_TOKENS,
329+}),
330+buildOpenAISyntheticCatalogEntry(openAiGpt55ProTemplate, {
331+id: OPENAI_GPT_55_PRO_MODEL_ID,
332+reasoning: true,
333+input: ["text", "image"],
334+contextWindow: OPENAI_GPT_55_PRO_CONTEXT_TOKENS,
335+}),
273336buildOpenAISyntheticCatalogEntry(openAiGpt54Template, {
274337id: OPENAI_GPT_54_MODEL_ID,
275338reasoning: true,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。