From 160fda3f297655bedab240db95786e6a36f0cb8b Mon Sep 17 00:00:00 2001 From: Christof Salis Date: Sun, 15 Mar 2026 11:40:51 +0100 Subject: [PATCH] Codex: use model-level API for native search relevance --- src/agents/codex-native-web-search.test.ts | 40 ++++++++++++++++++++++ src/agents/codex-native-web-search.ts | 5 ++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/agents/codex-native-web-search.test.ts b/src/agents/codex-native-web-search.test.ts index a5cca3296cb..941ae281059 100644 --- a/src/agents/codex-native-web-search.test.ts +++ b/src/agents/codex-native-web-search.test.ts @@ -209,3 +209,43 @@ describe("shouldSuppressManagedWebSearchTool", () => { ).toBe(false); }); }); + +describe("isCodexNativeWebSearchRelevant", () => { + it("treats a default model with model-level openai-codex-responses api as relevant", async () => { + const { isCodexNativeWebSearchRelevant } = await import("./codex-native-web-search.js"); + + expect( + isCodexNativeWebSearchRelevant({ + config: { + agents: { + defaults: { + model: { + primary: "gateway/gpt-5.4", + }, + }, + }, + models: { + providers: { + gateway: { + api: "openai-responses", + baseUrl: "https://gateway.example/v1", + models: [ + { + id: "gpt-5.4", + name: "gpt-5.4", + api: "openai-codex-responses", + reasoning: false, + input: ["text"], + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, + contextWindow: 128_000, + maxTokens: 16_384, + }, + ], + }, + }, + }, + }, + }), + ).toBe(true); + }); +}); diff --git a/src/agents/codex-native-web-search.ts b/src/agents/codex-native-web-search.ts index 4e367dd6d85..e220d5ff80b 100644 --- a/src/agents/codex-native-web-search.ts +++ b/src/agents/codex-native-web-search.ts @@ -283,9 +283,12 @@ export function isCodexNativeWebSearchRelevant(params: { agentId: params.agentId, }); const configuredProvider = params.config.models?.providers?.[defaultModel.provider]; + const configuredModelApi = configuredProvider?.models?.find( + (candidate) => candidate.id === defaultModel.model, + )?.api; return isCodexNativeSearchEligibleModel({ modelProvider: defaultModel.provider, - modelApi: configuredProvider?.api, + modelApi: configuredModelApi ?? configuredProvider?.api, }); }