OmniRoute/tests/unit/executor-codex-gpt56.test.ts
Diego Rodrigues de Sa e Souza 3cdd4339c8
fix(release): drain v3.8.52 tip unit reds (catalog/translator) (#15903)
Drains 9 v3.8.52 tip unit reds: 1 production fix (combo family-fallback skipped for request-scoped refusals, regression of #13603) + 8 test alignments to intentional contract changes (#15301 #15132 #15035 #15478 #15310 #15710 #15487), each annotated. Validated on a combined board with #15902 after clean npm ci: 32 previously-red files 327/329 (remaining 2 = quality-rail-gate-membership owned by #15682, and route-namespaces fixed in #15902), typecheck/open-sse/api typecheck, lint, 22 gates.
2026-10-08 11:06:52 -03:00

177 lines
5.6 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { CodexExecutor } from "../../open-sse/executors/codex.ts";
import { openaiToOpenAIResponsesRequest } from "../../open-sse/translator/request/openai-responses/toResponses.ts";
test("Chat-to-Codex translation preserves max only for GPT-5.6", () => {
const executor = new CodexExecutor();
const cases = [
{ model: "gpt-5.6-sol", expectedEffort: "max" },
{ model: "gpt-5.6-terra", expectedEffort: "max" },
{ model: "gpt-5.6-luna", expectedEffort: "max" },
{ model: "gpt-5.5", expectedEffort: "xhigh" },
];
for (const { model, expectedEffort } of cases) {
const translated = openaiToOpenAIResponsesRequest(
model,
{
model,
messages: [{ role: "user", content: "test" }],
reasoning_effort: "max",
},
true,
{}
);
const result = executor.transformRequest(model, translated, true, {
requestEndpointPath: "/chat/completions",
});
assert.equal(result.model, model);
assert.equal(result.reasoning.effort, expectedEffort, model);
assert.equal(result.reasoning_effort, undefined);
}
});
test("CodexExecutor.transformRequest preserves max effort for GPT-5.6", () => {
const executor = new CodexExecutor();
const result = executor.transformRequest(
"gpt-5.6-sol",
{
model: "gpt-5.6-sol",
input: [],
reasoning_effort: "max",
},
false,
{ requestEndpointPath: "/responses" }
);
assert.equal(result.model, "gpt-5.6-sol");
assert.equal(result.reasoning.effort, "max");
assert.equal(result.reasoning_effort, undefined);
});
test("CodexExecutor.transformRequest maps GPT-5.6 ultra aliases to max wire effort", () => {
const executor = new CodexExecutor();
for (const model of ["gpt-5.6-sol-ultra", "gpt-5.6-terra-ultra"]) {
const result = executor.transformRequest(model, { model, input: [] }, false, {
requestEndpointPath: "/responses",
});
assert.equal(result.model, model.replace(/-ultra$/, ""));
assert.equal(result.reasoning.effort, "max");
}
});
test("CodexExecutor.transformRequest clamps Luna ultra requests to its max effort", () => {
const executor = new CodexExecutor();
const result = executor.transformRequest(
"gpt-5.6-luna",
{
model: "gpt-5.6-luna",
input: [],
reasoning_effort: "ultra",
},
false,
{ requestEndpointPath: "/responses" }
);
assert.equal(result.model, "gpt-5.6-luna");
assert.equal(result.reasoning.effort, "max");
});
test("CodexExecutor.transformRequest accepts parenthesized GPT-5.6 effort overrides", () => {
const executor = new CodexExecutor();
const cases = [
{ model: "gpt-5.6-sol(ultra)", expectedModel: "gpt-5.6-sol", expectedEffort: "max" },
{ model: "gpt-5.6-terra(max)", expectedModel: "gpt-5.6-terra", expectedEffort: "max" },
// contract changed by #15710: a parenthesized `(ultra)` now honors the ultra alias
// set like the hyphen form, and Luna is max-tier only, so `gpt-5.6-luna(ultra)` is no
// longer an alias (exactly like `gpt-5.6-luna-ultra`). Luna's parenthesized override
// is `(max)`.
{ model: "gpt-5.6-luna(max)", expectedModel: "gpt-5.6-luna", expectedEffort: "max" },
];
for (const { model, expectedModel, expectedEffort } of cases) {
const result = executor.transformRequest(
model,
{
model,
input: [],
reasoning: { effort: "low", summary: "detailed" },
},
false,
{ requestEndpointPath: "/responses" }
);
assert.equal(result.model, expectedModel);
assert.equal(result.reasoning.effort, expectedEffort);
assert.equal(result.reasoning.summary, "detailed");
}
});
test("CodexExecutor.execute disables parallel tool calls for Responses Lite markers", async () => {
const executor = new CodexExecutor();
const originalFetch = globalThis.fetch;
const capturedBodies: Record<string, unknown>[] = [];
globalThis.fetch = async (_url, init) => {
capturedBodies.push(JSON.parse(String(init?.body || "{}")));
return new Response(JSON.stringify({ id: "resp_lite", object: "response" }), {
status: 200,
headers: { "Content-Type": "application/json" },
});
};
const headerBody = {
_nativeCodexPassthrough: true,
model: "gpt-5.6-sol",
input: [],
parallel_tool_calls: true,
};
const metadataBody = {
_nativeCodexPassthrough: true,
model: "gpt-5.6-sol",
input: [],
client_metadata: {
ws_request_header_x_openai_internal_codex_responses_lite: "true",
},
};
const standardBody = {
_nativeCodexPassthrough: true,
model: "gpt-5.6-sol",
input: [],
parallel_tool_calls: true,
};
try {
for (const request of [
{
body: headerBody,
clientHeaders: { "X-OpenAI-Internal-Codex-Responses-Lite": "true" },
},
{ body: metadataBody },
{ body: standardBody },
]) {
const result = await executor.execute({
model: "gpt-5.6-sol",
body: request.body,
stream: true,
credentials: { accessToken: "codex-token" },
clientHeaders: request.clientHeaders,
});
assert.equal(result.response.status, 200);
}
assert.equal(capturedBodies[0].parallel_tool_calls, false);
assert.equal(headerBody.parallel_tool_calls, true);
assert.equal(capturedBodies[1].parallel_tool_calls, false);
assert.equal(metadataBody.parallel_tool_calls, undefined);
assert.equal(capturedBodies[2].parallel_tool_calls, true);
assert.equal(standardBody.parallel_tool_calls, true);
} finally {
globalThis.fetch = originalFetch;
}
});