






















@@ -60,9 +60,6 @@ vi.mock("../model-suppression.js", () => {
6060) {
6161return true;
6262}
63-if (provider === "openai-codex" && id?.trim().toLowerCase() === "gpt-5.4-mini") {
64-return true;
65-}
6663return (
6764(provider === "qwen" || provider === "modelstudio") &&
6865id?.trim().toLowerCase() === "qwen3.6-plus" &&
@@ -78,9 +75,6 @@ vi.mock("../model-suppression.js", () => {
7875) {
7976return true;
8077}
81-if (provider === "openai-codex" && id?.trim().toLowerCase() === "gpt-5.4-mini") {
82-return true;
83-}
8478return false;
8579},
8680buildSuppressedBuiltInModelError: ({
@@ -99,9 +93,6 @@ vi.mock("../model-suppression.js", () => {
9993) {
10094return "Unknown model: qwen/qwen3.6-plus. qwen3.6-plus is not supported on the Qwen Coding Plan endpoint; use a Standard pay-as-you-go Qwen endpoint or choose qwen/qwen3.5-plus.";
10195}
102-if (provider === "openai-codex" && id?.trim().toLowerCase() === "gpt-5.4-mini") {
103-return "Unknown model: openai-codex/gpt-5.4-mini. gpt-5.4-mini is not supported by the OpenAI Codex OAuth route. Use openai/gpt-5.4-mini with an OpenAI API key or openai-codex/gpt-5.5 with Codex OAuth.";
104-}
10596if (
10697(provider === "openai" ||
10798provider === "azure-openai-responses" ||
@@ -369,7 +360,7 @@ describe("resolveModel", () => {
369360);
370361});
371362372-it("#74451: suppresses explicitly configured openai-codex/gpt-5.4-mini despite inline entry", () => {
363+it("#74451: resolves explicitly configured openai-codex/gpt-5.4-mini inline entries", () => {
373364const cfg = {
374365models: {
375366providers: {
@@ -391,10 +382,14 @@ describe("resolveModel", () => {
391382392383const result = resolveModelForTest("openai-codex", "gpt-5.4-mini", "/tmp/agent", cfg);
393384394-expect(result.model).toBeUndefined();
395-expect(result.error).toBe(
396-"Unknown model: openai-codex/gpt-5.4-mini. gpt-5.4-mini is not supported by the OpenAI Codex OAuth route. Use openai/gpt-5.4-mini with an OpenAI API key or openai-codex/gpt-5.5 with Codex OAuth.",
397-);
385+expect(result.error).toBeUndefined();
386+expect(result.model).toMatchObject({
387+provider: "openai-codex",
388+id: "gpt-5.4-mini",
389+api: "openai-codex-responses",
390+contextWindow: 400_000,
391+maxTokens: 128_000,
392+});
398393});
399394400395it("normalizes Google fallback baseUrls for custom providers", () => {
@@ -1542,15 +1537,17 @@ describe("resolveModel", () => {
15421537});
15431538});
154415391545-it("does not build an openai-codex fallback for unsupported gpt-5.4-mini", () => {
1540+it("builds an openai-codex fallback for gpt-5.4-mini", () => {
15461541mockOpenAICodexTemplateModel(discoverModels);
1547154215481543const result = resolveModelForTest("openai-codex", "gpt-5.4-mini", "/tmp/agent");
154915441550-expect(result.model).toBeUndefined();
1551-expect(result.error).toBe(
1552-"Unknown model: openai-codex/gpt-5.4-mini. gpt-5.4-mini is not supported by the OpenAI Codex OAuth route. Use openai/gpt-5.4-mini with an OpenAI API key or openai-codex/gpt-5.5 with Codex OAuth.",
1553-);
1545+expect(result.error).toBeUndefined();
1546+expect(result.model).toMatchObject({
1547+ ...buildOpenAICodexForwardCompatExpectation("gpt-5.4-mini"),
1548+contextWindow: 400_000,
1549+contextTokens: 272_000,
1550+});
15541551});
1555155215561553it("does not build an openai-codex fallback for removed gpt-5.3-codex-spark", () => {
@@ -1944,7 +1941,7 @@ describe("resolveModel", () => {
19441941});
19451942});
194619431947-it("rejects stale discovered openai-codex gpt-5.4-mini rows", () => {
1944+it("resolves discovered openai-codex gpt-5.4-mini rows", () => {
19481945mockDiscoveredModel(discoverModels, {
19491946provider: "openai-codex",
19501947modelId: "gpt-5.4-mini",
@@ -1958,10 +1955,14 @@ describe("resolveModel", () => {
1958195519591956const result = resolveModelForTest("openai-codex", "gpt-5.4-mini", "/tmp/agent");
196019571961-expect(result.model).toBeUndefined();
1962-expect(result.error).toBe(
1963-"Unknown model: openai-codex/gpt-5.4-mini. gpt-5.4-mini is not supported by the OpenAI Codex OAuth route. Use openai/gpt-5.4-mini with an OpenAI API key or openai-codex/gpt-5.5 with Codex OAuth.",
1964-);
1958+expect(result.error).toBeUndefined();
1959+expect(result.model).toMatchObject({
1960+provider: "openai-codex",
1961+id: "gpt-5.4-mini",
1962+name: "GPT-5.4 Mini",
1963+contextWindow: 64_000,
1964+input: ["text"],
1965+});
19651966});
1966196719671968it("rejects stale direct openai gpt-5.3-codex-spark discovery rows", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。