UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

111 lines (110 loc) 4.46 kB
import { c as isRecord } from "./record-coerce-DItp3I4t.js"; import { r as createLazyRuntimeModule } from "./lazy-runtime-CgCh8H_K.js"; import "./string-coerce-runtime-GQa0ehRA.js"; import { i as resolveProviderWebSearchPluginConfig, r as mergeScopedSearchConfig } from "./web-search-provider-config-DP_T4wzm.js"; import { t as createBaseWebSearchProviderContractFields } from "./provider-web-search-contract-fields-BHbA-N9n.js"; //#region extensions/google/src/gemini-web-search-provider.ts const GEMINI_CREDENTIAL_PATH = "plugins.entries.google.config.webSearch.apiKey"; const GOOGLE_PROVIDER_CREDENTIAL_PATH = "models.providers.google.apiKey"; const loadGeminiWebSearchRuntime = createLazyRuntimeModule(() => import("./gemini-web-search-provider.runtime.js")); const GEMINI_TOOL_PARAMETERS = { type: "object", properties: { query: { type: "string", description: "Search query string." }, count: { type: "integer", description: "Number of results to return (1-10).", minimum: 1, maximum: 10 }, country: { type: "string", description: "Not supported by Gemini." }, language: { type: "string", description: "Not supported by Gemini." }, freshness: { type: "string", description: "Filter Gemini search freshness: week, month, and year use hard Google Search time ranges; day prioritizes the last 24 hours as a recency hint." }, date_after: { type: "string", description: "Only ground with results published after this date (YYYY-MM-DD)." }, date_before: { type: "string", description: "Only ground with results published before this date (YYYY-MM-DD)." } }, required: ["query"] }; function createGeminiToolDefinition(searchConfig) { return { description: "Search the web using Gemini with Google Search grounding. Returns AI-synthesized answers with citations from Google Search.", parameters: GEMINI_TOOL_PARAMETERS, execute: async (args, context) => { const { executeGeminiSearch } = await loadGeminiWebSearchRuntime(); return await executeGeminiSearch(args, searchConfig, context); } }; } function resolveGoogleModelProviderConfig(config) { const provider = config?.models?.providers?.google; return isRecord(provider) ? provider : void 0; } function getGoogleModelProviderCredentialFallback(config) { const provider = resolveGoogleModelProviderConfig(config); return provider && provider.apiKey !== void 0 ? { path: GOOGLE_PROVIDER_CREDENTIAL_PATH, value: provider.apiKey } : void 0; } function withGoogleModelProviderFallbacks(searchConfig, config) { const provider = resolveGoogleModelProviderConfig(config); if (!provider || provider.apiKey === void 0 && provider.baseUrl === void 0) return searchConfig; const gemini = isRecord(searchConfig?.gemini) ? { ...searchConfig.gemini } : {}; const mergedSearchConfig = searchConfig ? Object.defineProperties({}, Object.getOwnPropertyDescriptors(searchConfig)) : {}; const geminiDescriptor = searchConfig ? Object.getOwnPropertyDescriptor(searchConfig, "gemini") : void 0; if (provider.apiKey !== void 0) gemini.providerApiKey = provider.apiKey; if (provider.baseUrl !== void 0) gemini.providerBaseUrl = provider.baseUrl; Object.defineProperty(mergedSearchConfig, "gemini", { value: gemini, enumerable: geminiDescriptor?.enumerable ?? false, configurable: true, writable: true }); return mergedSearchConfig; } function createGeminiWebSearchProvider() { const contractFields = createBaseWebSearchProviderContractFields({ credentialPath: GEMINI_CREDENTIAL_PATH, searchCredential: { type: "scoped", scopeId: "gemini" }, configuredCredential: { pluginId: "google" } }); return { id: "gemini", label: "Gemini (Google Search)", hint: "Requires Google Gemini API key · Google Search grounding", onboardingScopes: ["text-inference"], credentialLabel: "Google Gemini API key", envVars: ["GEMINI_API_KEY"], placeholder: "AIza...", signupUrl: "https://aistudio.google.com/apikey", docsUrl: "https://docs.openclaw.ai/tools/web", autoDetectOrder: 20, credentialPath: GEMINI_CREDENTIAL_PATH, ...contractFields, getConfiguredCredentialFallback: getGoogleModelProviderCredentialFallback, createTool: (ctx) => createGeminiToolDefinition(withGoogleModelProviderFallbacks(mergeScopedSearchConfig(ctx.searchConfig, "gemini", resolveProviderWebSearchPluginConfig(ctx.config, "google")), ctx.config)) }; } //#endregion export { createGeminiWebSearchProvider as t };