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,
ResearchProgress,
} 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 {
ComparisonRequest,
@@ -24,21 +26,44 @@ export async function* runResearch(
return;
}
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),
};
const provider = getActiveProvider();
const searchResults: Record<string, SearchResult[]> = {};
if (provider.hasSearch) {
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 {
stage: "synthesizing",
message: "Synthesizing research into structured comparison...",
message: `Synthesizing research into structured comparison using ${provider.name}...`,
};
try {
const result = await generateComparison(request);
const result = await provider.synthesize(request, searchResults);
yield { stage: "complete", result };
} catch (error) {
yield {