35dbf43670
- Added Brave web search provider with support for query, result count, and recency filtering. - Added BRAVE_API_KEY environment variable configuration for Brave search authentication. - Updated web search provider priority order to include Brave as second-highest priority after Exa. - Extended recency filter support to Brave search provider alongside Perplexity. - Implemented BraveProvider class with API integration, response mapping, and parameter validation. - Added helper functions for recency mapping, result clamping, and snippet building in Brave provider.
53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
/**
|
|
* Test web search providers.
|
|
*/
|
|
import { Args, Command, Flags } from "@oh-my-pi/pi-utils/cli";
|
|
import { runSearchCommand, type SearchCommandArgs } from "../cli/web-search-cli";
|
|
import type { SearchProviderId } from "../web/search/types";
|
|
|
|
const PROVIDERS: Array<SearchProviderId | "auto"> = [
|
|
"auto",
|
|
"anthropic",
|
|
"perplexity",
|
|
"exa",
|
|
"brave",
|
|
"jina",
|
|
"zai",
|
|
"gemini",
|
|
"codex",
|
|
];
|
|
|
|
const RECENCY: NonNullable<SearchCommandArgs["recency"]>[] = ["day", "week", "month", "year"];
|
|
|
|
export default class Search extends Command {
|
|
static description = "Test web search providers";
|
|
|
|
static aliases = ["q"];
|
|
|
|
static args = {
|
|
query: Args.string({ description: "Search query text", required: false, multiple: true }),
|
|
};
|
|
|
|
static flags = {
|
|
provider: Flags.string({ description: "Search provider", options: PROVIDERS }),
|
|
recency: Flags.string({ description: "Recency filter", options: RECENCY }),
|
|
limit: Flags.integer({ char: "l", description: "Max results to return" }),
|
|
compact: Flags.boolean({ description: "Render condensed output" }),
|
|
};
|
|
|
|
async run(): Promise<void> {
|
|
const { args, flags } = await this.parse(Search);
|
|
const query = Array.isArray(args.query) ? args.query.join(" ") : (args.query ?? "");
|
|
|
|
const cmd: SearchCommandArgs = {
|
|
query,
|
|
provider: flags.provider as SearchProviderId | "auto" | undefined,
|
|
recency: flags.recency as SearchCommandArgs["recency"],
|
|
limit: flags.limit,
|
|
expanded: !flags.compact,
|
|
};
|
|
|
|
await runSearchCommand(cmd);
|
|
}
|
|
}
|