mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 16:30:57 +00:00
fix(openai): raise minimal reasoning for native web search
This commit is contained in:
@@ -57,6 +57,14 @@ function isManagedWebSearchTool(tool: unknown): boolean {
|
||||
return isRecord(tool) && tool.type === "function" && tool.name === OPENAI_WEB_SEARCH_TOOL.type;
|
||||
}
|
||||
|
||||
function raiseMinimalReasoningForOpenAINativeWebSearch(payload: Record<string, unknown>): void {
|
||||
const reasoning = payload.reasoning;
|
||||
if (!isRecord(reasoning) || reasoning.effort !== "minimal") {
|
||||
return;
|
||||
}
|
||||
reasoning.effort = "low";
|
||||
}
|
||||
|
||||
export function patchOpenAINativeWebSearchPayload(
|
||||
payload: unknown,
|
||||
): OpenAINativeWebSearchPatchResult {
|
||||
@@ -70,10 +78,12 @@ export function patchOpenAINativeWebSearchPayload(
|
||||
if (filteredTools.length !== existingTools.length) {
|
||||
payload.tools = filteredTools;
|
||||
}
|
||||
raiseMinimalReasoningForOpenAINativeWebSearch(payload);
|
||||
return "native_tool_already_present";
|
||||
}
|
||||
|
||||
payload.tools = [...filteredTools, OPENAI_WEB_SEARCH_TOOL];
|
||||
raiseMinimalReasoningForOpenAINativeWebSearch(payload);
|
||||
return "injected";
|
||||
}
|
||||
|
||||
|
||||
@@ -400,6 +400,33 @@ describe("buildOpenAIProvider", () => {
|
||||
]);
|
||||
});
|
||||
|
||||
it("raises minimal reasoning when native OpenAI web search is injected", () => {
|
||||
const provider = buildOpenAIProvider();
|
||||
const wrap = provider.wrapStreamFn;
|
||||
expect(wrap).toBeTypeOf("function");
|
||||
if (!wrap) {
|
||||
throw new Error("expected OpenAI wrapper");
|
||||
}
|
||||
|
||||
const result = runWrappedPayloadCase({
|
||||
wrap,
|
||||
provider: "openai",
|
||||
modelId: "gpt-5.4",
|
||||
model: {
|
||||
api: "openai-responses",
|
||||
provider: "openai",
|
||||
id: "gpt-5.4",
|
||||
baseUrl: "https://api.openai.com/v1",
|
||||
} as Model<"openai-responses">,
|
||||
payload: {
|
||||
reasoning: { effort: "minimal", summary: "auto" },
|
||||
},
|
||||
});
|
||||
|
||||
expect(result.payload.reasoning).toEqual({ effort: "low", summary: "auto" });
|
||||
expect(result.payload.tools).toEqual([{ type: "web_search" }]);
|
||||
});
|
||||
|
||||
it("does not inject native OpenAI web search when disabled or proxied", () => {
|
||||
const provider = buildOpenAIProvider();
|
||||
const wrap = provider.wrapStreamFn;
|
||||
|
||||
Reference in New Issue
Block a user