UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

37 lines (36 loc) • 1.8 kB
import { c as isRecord } from "./record-coerce-TIsquoVR.mjs"; import "./string-coerce-runtime-50qKeWeL.mjs"; import { f as createPayloadPatchStreamWrapper } from "./provider-stream-shared-C8xSwqvp.mjs"; import { t as resolveNativeWebSearch } from "./native-web-search-policy-X_5M7ytz.mjs"; //#region extensions/openai/native-web-search.ts const OPENAI_WEB_SEARCH_TOOL = { type: "web_search" }; function isNativeWebSearchTool(tool) { return isRecord(tool) && tool.type === OPENAI_WEB_SEARCH_TOOL.type; } function isManagedWebSearchTool(tool) { return isRecord(tool) && tool.type === "function" && tool.name === OPENAI_WEB_SEARCH_TOOL.type; } function patchOpenAINativeWebSearchPayload(payload) { if (!isRecord(payload)) return; const existingTools = Array.isArray(payload.tools) ? payload.tools : []; const filteredTools = existingTools.filter((tool) => !isManagedWebSearchTool(tool)); if (filteredTools.some(isNativeWebSearchTool)) { if (filteredTools.length !== existingTools.length) payload.tools = filteredTools; } else payload.tools = [...filteredTools, OPENAI_WEB_SEARCH_TOOL]; const reasoning = payload.reasoning; if (isRecord(reasoning) && reasoning.effort === "minimal") reasoning.effort = "low"; } function createOpenAINativeWebSearchWrapper(baseStreamFn, params) { return createPayloadPatchStreamWrapper(baseStreamFn, ({ payload, options }) => { options?.openclawCodeModeAllowedHostedToolTypes?.add(OPENAI_WEB_SEARCH_TOOL.type); patchOpenAINativeWebSearchPayload(payload); }, { shouldPatch: ({ model }) => params.nativeWebSearchAllowedByToolPolicy !== false && resolveNativeWebSearch({ config: params.config, provider: model.provider, modelId: model.id, api: model.api, baseUrl: model.baseUrl }) }); } //#endregion export { createOpenAINativeWebSearchWrapper as t };