mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 15:50:46 +00:00
fix(openai-codex): normalize legacy copilot transport
This commit is contained in:
@@ -521,6 +521,32 @@ describe("openai codex provider", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("normalizes legacy GitHub Copilot Codex metadata to the codex transport", () => {
|
||||
const provider = buildOpenAICodexProviderPlugin();
|
||||
|
||||
const model = provider.normalizeResolvedModel?.({
|
||||
provider: "openai-codex",
|
||||
model: {
|
||||
id: "gpt-5.4",
|
||||
name: "gpt-5.4",
|
||||
provider: "openai-codex",
|
||||
api: "openai-completions",
|
||||
baseUrl: "https://api.githubcopilot.com",
|
||||
reasoning: true,
|
||||
input: ["text", "image"],
|
||||
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
||||
contextWindow: 1_050_000,
|
||||
contextTokens: 272_000,
|
||||
maxTokens: 128_000,
|
||||
},
|
||||
} as never);
|
||||
|
||||
expect(model).toMatchObject({
|
||||
api: "openai-codex-responses",
|
||||
baseUrl: "https://chatgpt.com/backend-api/codex",
|
||||
});
|
||||
});
|
||||
|
||||
it("normalizes transport metadata for stale /backend-api/v1 codex routes", () => {
|
||||
const provider = buildOpenAICodexProviderPlugin();
|
||||
|
||||
@@ -551,6 +577,21 @@ describe("openai codex provider", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("normalizes transport metadata for legacy GitHub Copilot Codex routes", () => {
|
||||
const provider = buildOpenAICodexProviderPlugin();
|
||||
|
||||
expect(
|
||||
provider.normalizeTransport?.({
|
||||
provider: "openai-codex",
|
||||
api: "openai-completions",
|
||||
baseUrl: "https://api.githubcopilot.com/v1",
|
||||
} as never),
|
||||
).toEqual({
|
||||
api: "openai-codex-responses",
|
||||
baseUrl: "https://chatgpt.com/backend-api/codex",
|
||||
});
|
||||
});
|
||||
|
||||
it("leaves custom proxy completions transport metadata unchanged", () => {
|
||||
const provider = buildOpenAICodexProviderPlugin();
|
||||
|
||||
|
||||
@@ -96,6 +96,11 @@ const OPENAI_CODEX_MODERN_MODEL_IDS = [
|
||||
OPENAI_CODEX_GPT_53_SPARK_MODEL_ID,
|
||||
] as const;
|
||||
|
||||
function isLegacyCodexCompatBaseUrl(baseUrl?: string): boolean {
|
||||
const trimmed = baseUrl?.trim();
|
||||
return !!trimmed && /^https?:\/\/api\.githubcopilot\.com(?:\/v1)?\/?$/iu.test(trimmed);
|
||||
}
|
||||
|
||||
function normalizeCodexTransportFields(params: {
|
||||
api?: ProviderRuntimeModel["api"] | null;
|
||||
baseUrl?: string;
|
||||
@@ -104,7 +109,10 @@ function normalizeCodexTransportFields(params: {
|
||||
baseUrl?: string;
|
||||
} {
|
||||
const useCodexTransport =
|
||||
!params.baseUrl || isOpenAIApiBaseUrl(params.baseUrl) || isOpenAICodexBaseUrl(params.baseUrl);
|
||||
!params.baseUrl ||
|
||||
isOpenAIApiBaseUrl(params.baseUrl) ||
|
||||
isOpenAICodexBaseUrl(params.baseUrl) ||
|
||||
isLegacyCodexCompatBaseUrl(params.baseUrl);
|
||||
const api =
|
||||
useCodexTransport &&
|
||||
(!params.api || params.api === "openai-responses" || params.api === "openai-completions")
|
||||
|
||||
Reference in New Issue
Block a user