




















@@ -229,6 +229,101 @@ describe("buildOpenAIProvider", () => {
229229});
230230});
231231232+it("resolves gpt-5.5 and gpt-5.5-pro with launch metadata", () => {
233+const provider = buildOpenAIProvider();
234+235+const model = provider.resolveDynamicModel?.({
236+provider: "openai",
237+modelId: "gpt-5.5",
238+modelRegistry: {
239+find: (_provider: string, id: string) =>
240+id === "gpt-5.4"
241+ ? {
242+ id,
243+name: "GPT-5.4",
244+provider: "openai",
245+api: "openai-responses",
246+baseUrl: "https://api.openai.com/v1",
247+reasoning: true,
248+input: ["text", "image"],
249+cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 },
250+contextWindow: 1_050_000,
251+maxTokens: 128_000,
252+}
253+ : null,
254+} as never,
255+});
256+const pro = provider.resolveDynamicModel?.({
257+provider: "openai",
258+modelId: "gpt-5.5-pro",
259+modelRegistry: {
260+find: (_provider: string, id: string) =>
261+id === "gpt-5.4-pro"
262+ ? {
263+ id,
264+name: "GPT-5.4 Pro",
265+provider: "openai",
266+api: "openai-responses",
267+baseUrl: "https://api.openai.com/v1",
268+reasoning: true,
269+input: ["text", "image"],
270+cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0 },
271+contextWindow: 1_050_000,
272+maxTokens: 128_000,
273+}
274+ : null,
275+} as never,
276+});
277+278+expect(model).toMatchObject({
279+provider: "openai",
280+id: "gpt-5.5",
281+api: "openai-responses",
282+baseUrl: "https://api.openai.com/v1",
283+contextWindow: 1_000_000,
284+maxTokens: 128_000,
285+cost: { input: 5, output: 30, cacheRead: 0, cacheWrite: 0 },
286+});
287+expect(pro).toMatchObject({
288+provider: "openai",
289+id: "gpt-5.5-pro",
290+api: "openai-responses",
291+baseUrl: "https://api.openai.com/v1",
292+contextWindow: 1_000_000,
293+maxTokens: 128_000,
294+cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0 },
295+});
296+});
297+298+it("surfaces gpt-5.5 in xhigh and augmented catalog metadata", () => {
299+const provider = buildOpenAIProvider();
300+301+expect(
302+provider
303+.resolveThinkingProfile?.({
304+provider: "openai",
305+modelId: "gpt-5.5",
306+} as never)
307+?.levels.some((level) => level.id === "xhigh"),
308+).toBe(true);
309+310+const entries = provider.augmentModelCatalog?.({
311+env: process.env,
312+entries: [{ provider: "openai", id: "gpt-5.4", name: "GPT-5.4" }],
313+} as never);
314+315+expect(entries).toContainEqual(
316+expect.objectContaining({
317+provider: "openai",
318+id: "gpt-5.5",
319+name: "gpt-5.5",
320+reasoning: true,
321+input: ["text", "image"],
322+contextWindow: 1_000_000,
323+}),
324+);
325+});
326+232327it("keeps modern live selection on OpenAI 5.2+ and Codex 5.2+", () => {
233328const provider = buildOpenAIProvider();
234329const codexProvider = buildOpenAICodexProviderPlugin();
@@ -251,6 +346,12 @@ describe("buildOpenAIProvider", () => {
251346modelId: "gpt-5.4",
252347} as never),
253348).toBe(true);
349+expect(
350+provider.isModernModelRef?.({
351+provider: "openai",
352+modelId: "gpt-5.5",
353+} as never),
354+).toBe(true);
254355255356expect(
256357codexProvider.isModernModelRef?.({
@@ -276,6 +377,12 @@ describe("buildOpenAIProvider", () => {
276377modelId: "gpt-5.4",
277378} as never),
278379).toBe(true);
380+expect(
381+codexProvider.isModernModelRef?.({
382+provider: "openai-codex",
383+modelId: "gpt-5.5",
384+} as never),
385+).toBe(true);
279386});
280387281388it("owns replay policy for OpenAI and Codex transports", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。