mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 05:10:44 +00:00
fix(openai): align Codex fallback with GPT-5.5
This commit is contained in:
@@ -13,9 +13,9 @@ const DEFAULT_MAX_TOKENS = 128_000;
|
||||
|
||||
export const FALLBACK_CODEX_MODELS = [
|
||||
{
|
||||
id: "gpt-5.4",
|
||||
model: "gpt-5.4",
|
||||
displayName: "gpt-5.4",
|
||||
id: "gpt-5.5",
|
||||
model: "gpt-5.5",
|
||||
displayName: "gpt-5.5",
|
||||
description: "Latest frontier agentic coding model.",
|
||||
isDefault: true,
|
||||
inputModalities: ["text", "image"],
|
||||
|
||||
@@ -17,7 +17,7 @@ function expectStaticFallbackCatalog(
|
||||
result: Awaited<ReturnType<typeof buildCodexProviderCatalog>>,
|
||||
) {
|
||||
expect(result.provider.models.map((model) => model.id)).toEqual([
|
||||
"gpt-5.4",
|
||||
"gpt-5.5",
|
||||
"gpt-5.4-mini",
|
||||
"gpt-5.2",
|
||||
]);
|
||||
@@ -241,7 +241,7 @@ describe("codex provider", () => {
|
||||
|
||||
expect(
|
||||
result && "provider" in result ? result.provider.models.map((model) => model.id) : [],
|
||||
).toEqual(["gpt-5.4", "gpt-5.4-mini", "gpt-5.2"]);
|
||||
).toEqual(["gpt-5.5", "gpt-5.4-mini", "gpt-5.2"]);
|
||||
});
|
||||
|
||||
it("adds the GPT-5 prompt overlay to Codex provider runs", () => {
|
||||
|
||||
@@ -110,7 +110,7 @@ export async function buildCodexProviderCatalog(
|
||||
};
|
||||
}
|
||||
|
||||
function resolveCodexDynamicModel(modelId: string): ProviderRuntimeModel | undefined {
|
||||
function resolveCodexDynamicModel(modelId: string) {
|
||||
const id = modelId.trim();
|
||||
if (!id) {
|
||||
return undefined;
|
||||
@@ -191,5 +191,7 @@ function isKnownXHighCodexModel(modelId: string): boolean {
|
||||
|
||||
function isModernCodexModel(modelId: string): boolean {
|
||||
const lower = modelId.trim().toLowerCase();
|
||||
return lower === "gpt-5.4" || lower === "gpt-5.4-mini" || lower === "gpt-5.2";
|
||||
return (
|
||||
lower === "gpt-5.5" || lower === "gpt-5.4" || lower === "gpt-5.4-mini" || lower === "gpt-5.2"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -114,9 +114,7 @@ function normalizeOpenAITransport(model: ProviderRuntimeModel): ProviderRuntimeM
|
||||
};
|
||||
}
|
||||
|
||||
function resolveOpenAIGptForwardCompatModel(
|
||||
ctx: ProviderResolveDynamicModelContext,
|
||||
): ProviderRuntimeModel | undefined {
|
||||
function resolveOpenAIGptForwardCompatModel(ctx: ProviderResolveDynamicModelContext) {
|
||||
const trimmedModelId = ctx.modelId.trim();
|
||||
const lower = normalizeLowercaseStringOrEmpty(trimmedModelId);
|
||||
let templateIds: readonly string[];
|
||||
@@ -286,7 +284,7 @@ export function buildOpenAIProvider(): ProviderPlugin {
|
||||
}
|
||||
return {
|
||||
suppress: true,
|
||||
errorMessage: `Unknown model: ${ctx.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}.`,
|
||||
errorMessage: `Unknown model: ${ctx.provider}/${OPENAI_DIRECT_SPARK_MODEL_ID}. ${OPENAI_DIRECT_SPARK_MODEL_ID} is only supported through Codex OAuth. Use openai/${OPENAI_DIRECT_SPARK_MODEL_ID} with the Codex OAuth profile.`,
|
||||
};
|
||||
},
|
||||
augmentModelCatalog: (ctx) => {
|
||||
|
||||
@@ -31,7 +31,7 @@ vi.mock("../model-suppression.js", () => ({
|
||||
) {
|
||||
return undefined;
|
||||
}
|
||||
return `Unknown model: ${provider}/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported via openai-codex OAuth. Use openai-codex/gpt-5.3-codex-spark.`;
|
||||
return `Unknown model: ${provider}/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported through Codex OAuth. Use openai/gpt-5.3-codex-spark with the Codex OAuth profile.`;
|
||||
},
|
||||
}));
|
||||
|
||||
@@ -140,7 +140,7 @@ describe("resolveModel forward-compat errors and overrides", () => {
|
||||
|
||||
expect(result.model).toBeUndefined();
|
||||
expect(result.error).toBe(
|
||||
"Unknown model: openai/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported via openai-codex OAuth. Use openai-codex/gpt-5.3-codex-spark.",
|
||||
"Unknown model: openai/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported through Codex OAuth. Use openai/gpt-5.3-codex-spark with the Codex OAuth profile.",
|
||||
);
|
||||
});
|
||||
|
||||
@@ -161,7 +161,7 @@ describe("resolveModel forward-compat errors and overrides", () => {
|
||||
|
||||
expect(result.model).toBeUndefined();
|
||||
expect(result.error).toBe(
|
||||
"Unknown model: openai/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported via openai-codex OAuth. Use openai-codex/gpt-5.3-codex-spark.",
|
||||
"Unknown model: openai/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported through Codex OAuth. Use openai/gpt-5.3-codex-spark with the Codex OAuth profile.",
|
||||
);
|
||||
});
|
||||
|
||||
@@ -174,7 +174,7 @@ describe("resolveModel forward-compat errors and overrides", () => {
|
||||
|
||||
expect(result.model).toBeUndefined();
|
||||
expect(result.error).toBe(
|
||||
"Unknown model: azure-openai-responses/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported via openai-codex OAuth. Use openai-codex/gpt-5.3-codex-spark.",
|
||||
"Unknown model: azure-openai-responses/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported through Codex OAuth. Use openai/gpt-5.3-codex-spark with the Codex OAuth profile.",
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ vi.mock("../model-suppression.js", () => ({
|
||||
) {
|
||||
return undefined;
|
||||
}
|
||||
return `Unknown model: ${provider}/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported via openai-codex OAuth. Use openai-codex/gpt-5.3-codex-spark.`;
|
||||
return `Unknown model: ${provider}/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported through Codex OAuth. Use openai/gpt-5.3-codex-spark with the Codex OAuth profile.`;
|
||||
},
|
||||
}));
|
||||
|
||||
@@ -1260,7 +1260,7 @@ describe("resolveModel", () => {
|
||||
|
||||
expect(result.model).toBeUndefined();
|
||||
expect(result.error).toBe(
|
||||
"Unknown model: openai/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported via openai-codex OAuth. Use openai-codex/gpt-5.3-codex-spark.",
|
||||
"Unknown model: openai/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported through Codex OAuth. Use openai/gpt-5.3-codex-spark with the Codex OAuth profile.",
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -77,7 +77,9 @@ export function expectCodexBuiltInSuppression(
|
||||
}),
|
||||
).toMatchObject({
|
||||
suppress: true,
|
||||
errorMessage: expect.stringContaining("openai-codex/gpt-5.3-codex-spark"),
|
||||
errorMessage: expect.stringContaining(
|
||||
"openai/gpt-5.3-codex-spark with the Codex OAuth profile",
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -134,7 +134,10 @@ function createOpenAiCatalogProviderPlugin(
|
||||
suppressBuiltInModel: ({ provider, modelId }) =>
|
||||
(provider === "openai" || provider === "azure-openai-responses") &&
|
||||
modelId === "gpt-5.3-codex-spark"
|
||||
? { suppress: true, errorMessage: "openai-codex/gpt-5.3-codex-spark" }
|
||||
? {
|
||||
suppress: true,
|
||||
errorMessage: "openai/gpt-5.3-codex-spark with the Codex OAuth profile",
|
||||
}
|
||||
: undefined,
|
||||
augmentModelCatalog: () => [
|
||||
{ provider: "openai", id: "gpt-5.4", name: "gpt-5.4" },
|
||||
|
||||
Reference in New Issue
Block a user