diff --git a/docs/tools/ollama-search.md b/docs/tools/ollama-search.md index 4278c78e7ef..96036f62a05 100644 --- a/docs/tools/ollama-search.md +++ b/docs/tools/ollama-search.md @@ -7,9 +7,9 @@ read_when: title: "Ollama web search" --- -OpenClaw supports **Ollama Web Search** as a bundled `web_search` provider. -It uses Ollama's experimental web-search API and returns structured results -with titles, URLs, and snippets. +OpenClaw supports **Ollama Web Search** as a bundled `web_search` provider. It +uses Ollama's web-search API and returns structured results with titles, URLs, +and snippets. Unlike the Ollama model provider, this setup does not need an API key by default. It does require: @@ -89,8 +89,7 @@ for web-search requests too. it does not block selection. - Runtime auto-detect can fall back to Ollama Web Search when no higher-priority credentialed provider is configured. -- The provider uses Ollama's experimental `/api/experimental/web_search` - endpoint. +- The provider uses Ollama's `/api/web_search` endpoint. ## Related diff --git a/extensions/ollama/src/web-search-provider.test.ts b/extensions/ollama/src/web-search-provider.test.ts index 89ef3ab87fe..c336c591ca4 100644 --- a/extensions/ollama/src/web-search-provider.test.ts +++ b/extensions/ollama/src/web-search-provider.test.ts @@ -115,17 +115,17 @@ describe("ollama web search provider", () => { ).toBe("http://localhost:11434"); }); - it("falls back to the local Ollama host when the model provider uses ollama cloud", () => { + it("uses the configured Ollama Cloud host for web search", () => { expect( testing.resolveOllamaWebSearchBaseUrl( createOllamaConfig({ baseUrl: "https://ollama.com", }), ), - ).toBe("http://127.0.0.1:11434"); + ).toBe("https://ollama.com"); }); - it("maps generic search args into the Ollama experimental search endpoint", async () => { + it("maps generic search args into the Ollama search endpoint", async () => { const release = vi.fn(async () => {}); fetchWithSsrFGuardMock.mockResolvedValue({ response: new Response( @@ -157,7 +157,7 @@ describe("ollama web search provider", () => { expect(fetchWithSsrFGuardMock).toHaveBeenCalledWith( expect.objectContaining({ - url: "http://ollama.local:11434/api/experimental/web_search", + url: "http://ollama.local:11434/api/web_search", auditContext: "ollama-web-search.search", }), ); diff --git a/extensions/ollama/src/web-search-provider.ts b/extensions/ollama/src/web-search-provider.ts index 5882d183670..61279ef2c95 100644 --- a/extensions/ollama/src/web-search-provider.ts +++ b/extensions/ollama/src/web-search-provider.ts @@ -19,7 +19,7 @@ import { import { fetchWithSsrFGuard } from "openclaw/plugin-sdk/ssrf-runtime"; import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime"; import { Type } from "typebox"; -import { OLLAMA_CLOUD_BASE_URL, OLLAMA_DEFAULT_BASE_URL } from "./defaults.js"; +import { OLLAMA_DEFAULT_BASE_URL } from "./defaults.js"; import { buildOllamaBaseUrlSsrFPolicy, fetchOllamaModels, @@ -41,7 +41,7 @@ const OLLAMA_WEB_SEARCH_SCHEMA = Type.Object( { additionalProperties: false }, ); -const OLLAMA_WEB_SEARCH_PATH = "/api/experimental/web_search"; +const OLLAMA_WEB_SEARCH_PATH = "/api/web_search"; const DEFAULT_OLLAMA_WEB_SEARCH_COUNT = 5; const DEFAULT_OLLAMA_WEB_SEARCH_TIMEOUT_MS = 15_000; const OLLAMA_WEB_SEARCH_SNIPPET_MAX_CHARS = 300; @@ -73,10 +73,7 @@ function resolveOllamaWebSearchBaseUrl(config?: OpenClawConfig): string { } const configuredBaseUrl = config?.models?.providers?.ollama?.baseUrl; if (normalizeOptionalString(configuredBaseUrl)) { - const baseUrl = resolveOllamaApiBase(configuredBaseUrl); - if (baseUrl !== OLLAMA_CLOUD_BASE_URL) { - return baseUrl; - } + return resolveOllamaApiBase(configuredBaseUrl); } return OLLAMA_DEFAULT_BASE_URL; } @@ -230,7 +227,7 @@ export function createOllamaWebSearchProvider(): WebSearchProviderPlugin { }), createTool: (ctx) => ({ description: - "Search the web using Ollama's experimental web search API. Returns titles, URLs, and snippets from the configured Ollama host.", + "Search the web using Ollama's web search API. Returns titles, URLs, and snippets from the configured Ollama host.", parameters: OLLAMA_WEB_SEARCH_SCHEMA, execute: async (args) => await runOllamaWebSearch({