feat: update research pipeline with Tavily search and progress stages

This commit is contained in:
Christopher Mayor
2026-04-24 14:34:22 -07:00
parent 71ef567d0d
commit 637f1540cf
2 changed files with 35 additions and 9 deletions

View File

@@ -3,7 +3,9 @@ import type {
ComparisonResult, ComparisonResult,
ResearchProgress, ResearchProgress,
} from "./types"; } from "./types";
import { generateComparison } from "./providers/openai"; import { searchItem, type SearchResult } from "./providers/tavily";
import { generateComparisonWithResearch } from "./providers/openai";
import { getActiveProvider } from "./providers";
export type { export type {
ComparisonRequest, ComparisonRequest,
@@ -24,21 +26,44 @@ export async function* runResearch(
return; return;
} }
for (let i = 0; i < request.items.length; i++) { const provider = getActiveProvider();
yield { const searchResults: Record<string, SearchResult[]> = {};
stage: "researching",
item: request.items[i], if (provider.hasSearch) {
progress: Math.round(((i + 0.5) / request.items.length) * 80), for (let i = 0; i < request.items.length; i++) {
}; const item = request.items[i];
const results = await searchItem(item, request.query);
searchResults[item] = results;
yield {
stage: "searching",
item,
results: results.length,
};
yield {
stage: "researching",
item,
progress: Math.round(((i + 1) / request.items.length) * 50),
};
}
} else {
for (let i = 0; i < request.items.length; i++) {
yield {
stage: "researching",
item: request.items[i],
progress: Math.round(((i + 0.5) / request.items.length) * 80),
};
}
} }
yield { yield {
stage: "synthesizing", stage: "synthesizing",
message: "Synthesizing research into structured comparison...", message: `Synthesizing research into structured comparison using ${provider.name}...`,
}; };
try { try {
const result = await generateComparison(request); const result = await provider.synthesize(request, searchResults);
yield { stage: "complete", result }; yield { stage: "complete", result };
} catch (error) { } catch (error) {
yield { yield {

View File

@@ -31,6 +31,7 @@ export interface ComparisonResult {
export type ResearchProgress = export type ResearchProgress =
| { stage: "parsing"; message: string } | { stage: "parsing"; message: string }
| { stage: "searching"; item: string; results: number }
| { stage: "researching"; item: string; progress: number } | { stage: "researching"; item: string; progress: number }
| { stage: "synthesizing"; message: string } | { stage: "synthesizing"; message: string }
| { stage: "complete"; result: ComparisonResult } | { stage: "complete"; result: ComparisonResult }