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
This commit is contained in:
RTrippler 2026-01-27 19:57:31 +01:00
parent 3fe4b2595a
commit 6fe931ace0

View File

@ -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'.", "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<MoltbotConfig["tools"]>["web"] extends infer Web type WebSearchConfig = NonNullable<MoltbotConfig["tools"]>["web"] extends infer Web
@ -450,6 +456,14 @@ export function createWebSearchTool(options?: {
docs: "https://docs.molt.bot/tools/web", 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; const freshness = rawFreshness ? normalizeFreshness(rawFreshness) : undefined;
if (rawFreshness && !freshness) { if (rawFreshness && !freshness) {
return jsonResult({ return jsonResult({
@ -475,7 +489,7 @@ export function createWebSearchTool(options?: {
perplexityAuth?.source, perplexityAuth?.source,
perplexityAuth?.apiKey, perplexityAuth?.apiKey,
), ),
perplexityModel: resolvePerplexityModel(perplexityConfig), perplexityModel: modelOverride || resolvePerplexityModel(perplexityConfig),
}); });
return jsonResult(result); return jsonResult(result);
}, },