openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
37 lines (36 loc) • 1.8 kB
JavaScript
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 };