feat(web_search): add freshness parameter for Brave time filtering
Adds support for Brave Search API's freshness parameter to filter results
by discovery time:
- 'pd' - Past 24 hours
- 'pw' - Past week
- 'pm' - Past month
- 'py' - Past year
- 'YYYY-MM-DDtoYYYY-MM-DD' - Custom date range
Useful for cron jobs and monitoring tasks that need recent results.
Note: Perplexity provider ignores this parameter (Brave only).
---
🤖 AI-assisted: This PR was created with Claude (Opus). Lightly tested via
build script. The change follows existing patterns for optional parameters
(country, search_lang, ui_lang).
This commit is contained in:
committed by
Peter Steinberger
parent
5956dde459
commit
8682524da3
@@ -55,6 +55,12 @@ const WebSearchSchema = Type.Object({
|
|||||||
description: "ISO language code for UI elements.",
|
description: "ISO language code for UI elements.",
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
freshness: Type.Optional(
|
||||||
|
Type.String({
|
||||||
|
description:
|
||||||
|
"Filter results by discovery time. Values: 'pd' (past 24h), 'pw' (past week), 'pm' (past month), 'py' (past year), or date range 'YYYY-MM-DDtoYYYY-MM-DD'. Brave provider only.",
|
||||||
|
}),
|
||||||
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
type WebSearchConfig = NonNullable<ClawdbotConfig["tools"]>["web"] extends infer Web
|
type WebSearchConfig = NonNullable<ClawdbotConfig["tools"]>["web"] extends infer Web
|
||||||
@@ -279,11 +285,12 @@ async function runWebSearch(params: {
|
|||||||
country?: string;
|
country?: string;
|
||||||
search_lang?: string;
|
search_lang?: string;
|
||||||
ui_lang?: string;
|
ui_lang?: string;
|
||||||
|
freshness?: string;
|
||||||
perplexityBaseUrl?: string;
|
perplexityBaseUrl?: string;
|
||||||
perplexityModel?: string;
|
perplexityModel?: string;
|
||||||
}): Promise<Record<string, unknown>> {
|
}): Promise<Record<string, unknown>> {
|
||||||
const cacheKey = normalizeCacheKey(
|
const cacheKey = normalizeCacheKey(
|
||||||
`${params.provider}:${params.query}:${params.count}:${params.country || "default"}:${params.search_lang || "default"}:${params.ui_lang || "default"}`,
|
`${params.provider}:${params.query}:${params.count}:${params.country || "default"}:${params.search_lang || "default"}:${params.ui_lang || "default"}:${params.freshness || "default"}`,
|
||||||
);
|
);
|
||||||
const cached = readCache(SEARCH_CACHE, cacheKey);
|
const cached = readCache(SEARCH_CACHE, cacheKey);
|
||||||
if (cached) return { ...cached.value, cached: true };
|
if (cached) return { ...cached.value, cached: true };
|
||||||
@@ -327,6 +334,9 @@ async function runWebSearch(params: {
|
|||||||
if (params.ui_lang) {
|
if (params.ui_lang) {
|
||||||
url.searchParams.set("ui_lang", params.ui_lang);
|
url.searchParams.set("ui_lang", params.ui_lang);
|
||||||
}
|
}
|
||||||
|
if (params.freshness) {
|
||||||
|
url.searchParams.set("freshness", params.freshness);
|
||||||
|
}
|
||||||
|
|
||||||
const res = await fetch(url.toString(), {
|
const res = await fetch(url.toString(), {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
@@ -399,6 +409,7 @@ export function createWebSearchTool(options?: {
|
|||||||
const country = readStringParam(params, "country");
|
const country = readStringParam(params, "country");
|
||||||
const search_lang = readStringParam(params, "search_lang");
|
const search_lang = readStringParam(params, "search_lang");
|
||||||
const ui_lang = readStringParam(params, "ui_lang");
|
const ui_lang = readStringParam(params, "ui_lang");
|
||||||
|
const freshness = readStringParam(params, "freshness");
|
||||||
const result = await runWebSearch({
|
const result = await runWebSearch({
|
||||||
query,
|
query,
|
||||||
count: resolveSearchCount(count, DEFAULT_SEARCH_COUNT),
|
count: resolveSearchCount(count, DEFAULT_SEARCH_COUNT),
|
||||||
@@ -409,6 +420,7 @@ export function createWebSearchTool(options?: {
|
|||||||
country,
|
country,
|
||||||
search_lang,
|
search_lang,
|
||||||
ui_lang,
|
ui_lang,
|
||||||
|
freshness,
|
||||||
perplexityBaseUrl: resolvePerplexityBaseUrl(
|
perplexityBaseUrl: resolvePerplexityBaseUrl(
|
||||||
perplexityConfig,
|
perplexityConfig,
|
||||||
perplexityAuth?.source,
|
perplexityAuth?.source,
|
||||||
|
|||||||
Reference in New Issue
Block a user