fix(codex): route bare codex-auto-review to the Codex provider (#4135)
This commit is contained in:
committed by
decolua
parent
4641c2b76a
commit
efc80ba2e3
@@ -65,6 +65,9 @@ export default {
|
|||||||
{ id: "gpt-5.4-mini-review", name: "GPT 5.4 Mini Review", upstreamModelId: "gpt-5.4-mini", quotaFamily: "review" },
|
{ id: "gpt-5.4-mini-review", name: "GPT 5.4 Mini Review", upstreamModelId: "gpt-5.4-mini", quotaFamily: "review" },
|
||||||
{ id: "gpt-5.3-codex-spark", name: "GPT 5.3 Codex Spark" },
|
{ id: "gpt-5.3-codex-spark", name: "GPT 5.3 Codex Spark" },
|
||||||
{ id: "gpt-5.3-codex-spark-review", name: "GPT 5.3 Codex Spark Review", upstreamModelId: "gpt-5.3-codex-spark", quotaFamily: "review" },
|
{ id: "gpt-5.3-codex-spark-review", name: "GPT 5.3 Codex Spark Review", upstreamModelId: "gpt-5.3-codex-spark", quotaFamily: "review" },
|
||||||
|
// Codex CLI's auto-review virtual model. Unlike the "-review" variants above it is not derived
|
||||||
|
// from a base model, so it is forwarded verbatim instead of having "-review" stripped (#1398).
|
||||||
|
{ id: "codex-auto-review", name: "Codex Auto Review", upstreamModelId: "codex-auto-review", quotaFamily: "review" },
|
||||||
{ id: "gpt-image-2.5", name: "GPT Image 2.5", capabilities: ["text2img","edit","multiImage"], params: ["size","quality","background","image_detail","output_format"], kind: "image" },
|
{ id: "gpt-image-2.5", name: "GPT Image 2.5", capabilities: ["text2img","edit","multiImage"], params: ["size","quality","background","image_detail","output_format"], kind: "image" },
|
||||||
{ id: "gpt-image-2.5-flare", name: "GPT Image 2.5 Flare", capabilities: ["text2img","edit","multiImage"], params: ["size","quality","background","image_detail","output_format"], kind: "image" },
|
{ id: "gpt-image-2.5-flare", name: "GPT Image 2.5 Flare", capabilities: ["text2img","edit","multiImage"], params: ["size","quality","background","image_detail","output_format"], kind: "image" },
|
||||||
{ id: "gpt-image-2.5-sunburst", name: "GPT Image 2.5 Sunburst", capabilities: ["text2img","edit","multiImage"], params: ["size","quality","background","image_detail","output_format"], kind: "image" },
|
{ id: "gpt-image-2.5-sunburst", name: "GPT Image 2.5 Sunburst", capabilities: ["text2img","edit","multiImage"], params: ["size","quality","background","image_detail","output_format"], kind: "image" },
|
||||||
|
|||||||
@@ -124,6 +124,8 @@ export async function getModelInfoCore(modelStr, aliasesOrGetter) {
|
|||||||
|
|
||||||
// Config-driven prefix → provider inference (first match wins, fallback "openai").
|
// Config-driven prefix → provider inference (first match wins, fallback "openai").
|
||||||
const MODEL_PREFIX_PROVIDERS = [
|
const MODEL_PREFIX_PROVIDERS = [
|
||||||
|
// Codex CLI sends this bare virtual model for auto-review — keep it on OAuth Codex (#1398).
|
||||||
|
[/^codex-auto-review$/, "codex"],
|
||||||
[/^claude-/, "anthropic"],
|
[/^claude-/, "anthropic"],
|
||||||
[/^gemini-/, "gemini"],
|
[/^gemini-/, "gemini"],
|
||||||
[/^gpt-/, "openai"],
|
[/^gpt-/, "openai"],
|
||||||
|
|||||||
44
tests/unit/codex-auto-review-routing.test.js
Normal file
44
tests/unit/codex-auto-review-routing.test.js
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
|
import {
|
||||||
|
getDefaultModel,
|
||||||
|
getModelQuotaFamily,
|
||||||
|
getModelUpstreamId,
|
||||||
|
getProviderModels,
|
||||||
|
} from "../../open-sse/config/providerModels.js";
|
||||||
|
import { getModelInfoCore } from "../../open-sse/services/model.js";
|
||||||
|
|
||||||
|
// Codex CLI's auto-review sends the bare model id "codex-auto-review". Before #1398 it fell
|
||||||
|
// through prefix inference to the "openai" default and failed with
|
||||||
|
// "No active credentials for provider: openai".
|
||||||
|
describe("codex auto-review routing (#1398)", () => {
|
||||||
|
it("routes the bare Codex auto-review model to the OAuth Codex provider", async () => {
|
||||||
|
await expect(getModelInfoCore("codex-auto-review", {})).resolves.toEqual({
|
||||||
|
provider: "codex",
|
||||||
|
model: "codex-auto-review",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("exposes Codex auto-review as a review-quota Codex model", () => {
|
||||||
|
const autoReview = getProviderModels("cx").find(
|
||||||
|
(model) => model.id === "codex-auto-review",
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(autoReview).toBeTruthy();
|
||||||
|
expect(autoReview.name).toBe("Codex Auto Review");
|
||||||
|
expect(getModelQuotaFamily("cx", "codex-auto-review")).toBe("review");
|
||||||
|
});
|
||||||
|
|
||||||
|
// getModelUpstreamId strips CODEX_REVIEW_SUFFIX from unregistered "cx" ids, which would send
|
||||||
|
// "codex-auto" upstream. This model is not a derived review variant, so it must go out verbatim.
|
||||||
|
it("forwards the id upstream without stripping the -review suffix", () => {
|
||||||
|
expect(getModelUpstreamId("cx", "codex-auto-review")).toBe(
|
||||||
|
"codex-auto-review",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Registering it must not push it to the front of the cx list — getDefaultModel takes models[0].
|
||||||
|
it("does not become the default Codex model", () => {
|
||||||
|
expect(getDefaultModel("cx")).not.toBe("codex-auto-review");
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user