fix(openai): raise minimal reasoning for native web search · openclaw/openclaw@a81c475
steipete
·
2026-04-23
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -57,6 +57,14 @@ function isManagedWebSearchTool(tool: unknown): boolean {
|
57 | 57 | return isRecord(tool) && tool.type === "function" && tool.name === OPENAI_WEB_SEARCH_TOOL.type; |
58 | 58 | } |
59 | 59 | |
| 60 | +function raiseMinimalReasoningForOpenAINativeWebSearch(payload: Record<string, unknown>): void { |
| 61 | +const reasoning = payload.reasoning; |
| 62 | +if (!isRecord(reasoning) || reasoning.effort !== "minimal") { |
| 63 | +return; |
| 64 | +} |
| 65 | +reasoning.effort = "low"; |
| 66 | +} |
| 67 | + |
60 | 68 | export function patchOpenAINativeWebSearchPayload( |
61 | 69 | payload: unknown, |
62 | 70 | ): OpenAINativeWebSearchPatchResult { |
@@ -70,10 +78,12 @@ export function patchOpenAINativeWebSearchPayload(
|
70 | 78 | if (filteredTools.length !== existingTools.length) { |
71 | 79 | payload.tools = filteredTools; |
72 | 80 | } |
| 81 | +raiseMinimalReasoningForOpenAINativeWebSearch(payload); |
73 | 82 | return "native_tool_already_present"; |
74 | 83 | } |
75 | 84 | |
76 | 85 | payload.tools = [...filteredTools, OPENAI_WEB_SEARCH_TOOL]; |
| 86 | +raiseMinimalReasoningForOpenAINativeWebSearch(payload); |
77 | 87 | return "injected"; |
78 | 88 | } |
79 | 89 | |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -400,6 +400,33 @@ describe("buildOpenAIProvider", () => {
|
400 | 400 | ]); |
401 | 401 | }); |
402 | 402 | |
| 403 | +it("raises minimal reasoning when native OpenAI web search is injected", () => { |
| 404 | +const provider = buildOpenAIProvider(); |
| 405 | +const wrap = provider.wrapStreamFn; |
| 406 | +expect(wrap).toBeTypeOf("function"); |
| 407 | +if (!wrap) { |
| 408 | +throw new Error("expected OpenAI wrapper"); |
| 409 | +} |
| 410 | + |
| 411 | +const result = runWrappedPayloadCase({ |
| 412 | + wrap, |
| 413 | +provider: "openai", |
| 414 | +modelId: "gpt-5.4", |
| 415 | +model: { |
| 416 | +api: "openai-responses", |
| 417 | +provider: "openai", |
| 418 | +id: "gpt-5.4", |
| 419 | +baseUrl: "https://api.openai.com/v1", |
| 420 | +} as Model<"openai-responses">, |
| 421 | +payload: { |
| 422 | +reasoning: { effort: "minimal", summary: "auto" }, |
| 423 | +}, |
| 424 | +}); |
| 425 | + |
| 426 | +expect(result.payload.reasoning).toEqual({ effort: "low", summary: "auto" }); |
| 427 | +expect(result.payload.tools).toEqual([{ type: "web_search" }]); |
| 428 | +}); |
| 429 | + |
403 | 430 | it("does not inject native OpenAI web search when disabled or proxied", () => { |
404 | 431 | const provider = buildOpenAIProvider(); |
405 | 432 | const wrap = provider.wrapStreamFn; |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。