From 6fe931ace0335456257e3d8302ff6fc7d25ad40b Mon Sep 17 00:00:00 2001 From: RTrippler Date: Tue, 27 Jan 2026 19:57:31 +0100 Subject: [PATCH] feat(web_search): add optional model parameter for Perplexity provider Allows runtime model override without config changes or gateway restart. - Add 'model' parameter to web_search tool schema - Override configured default when parameter is provided - Return error if used with non-Perplexity provider (Brave) Closes #2882 --- src/agents/tools/web-search.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/agents/tools/web-search.ts b/src/agents/tools/web-search.ts index 1d87676e8..40e4b7b9f 100644 --- a/src/agents/tools/web-search.ts +++ b/src/agents/tools/web-search.ts @@ -63,6 +63,12 @@ const WebSearchSchema = Type.Object({ "Filter results by discovery time (Brave only). Values: 'pd' (past 24h), 'pw' (past week), 'pm' (past month), 'py' (past year), or date range 'YYYY-MM-DDtoYYYY-MM-DD'.", }), ), + model: Type.Optional( + Type.String({ + description: + "Perplexity model to use (Perplexity provider only). Overrides the configured default. Examples: 'sonar', 'sonar-pro', 'sonar-reasoning'.", + }), + ), }); type WebSearchConfig = NonNullable["web"] extends infer Web @@ -450,6 +456,14 @@ export function createWebSearchTool(options?: { docs: "https://docs.molt.bot/tools/web", }); } + const modelOverride = readStringParam(params, "model"); + if (modelOverride && provider !== "perplexity") { + return jsonResult({ + error: "unsupported_model_override", + message: "model parameter is only supported by the Perplexity web_search provider.", + docs: "https://docs.molt.bot/tools/web", + }); + } const freshness = rawFreshness ? normalizeFreshness(rawFreshness) : undefined; if (rawFreshness && !freshness) { return jsonResult({ @@ -475,7 +489,7 @@ export function createWebSearchTool(options?: { perplexityAuth?.source, perplexityAuth?.apiKey, ), - perplexityModel: resolvePerplexityModel(perplexityConfig), + perplexityModel: modelOverride || resolvePerplexityModel(perplexityConfig), }); return jsonResult(result); },