From c4acc83fd596caf04f11b3d3b20f03bfc444de18 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 21 Nov 2025 23:57:50 +0530 Subject: [PATCH] feat(agents): add search agent --- src/lib/agents/search/index.ts | 48 ++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/lib/agents/search/index.ts diff --git a/src/lib/agents/search/index.ts b/src/lib/agents/search/index.ts new file mode 100644 index 0000000..141ea7f --- /dev/null +++ b/src/lib/agents/search/index.ts @@ -0,0 +1,48 @@ +import { ResearcherOutput, SearchAgentInput } from './types'; +import SessionManager from '@/lib/session'; +import Classifier from './classifier'; +import { WidgetRegistry } from './widgets'; +import Researcher from './researcher'; + +class SearchAgent { + async searchAsync(session: SessionManager, input: SearchAgentInput) { + const classifier = new Classifier(); + + const classification = await classifier.classify({ + chatHistory: input.chatHistory, + enabledSources: input.config.sources, + query: input.followUp, + llm: input.config.llm, + }); + + session.emit('data', { + type: 'classification', + classification: classification, + }); + + const widgetPromise = WidgetRegistry.executeAll(classification.widgets, { + llm: input.config.llm, + embedding: input.config.embedding, + session: session, + }); + + let searchPromise: Promise | null = null; + + if (!classification.skipSearch) { + const researcher = new Researcher(); + searchPromise = researcher.research(session, { + chatHistory: input.chatHistory, + followUp: input.followUp, + classification: classification, + config: input.config, + }); + } + + const [widgetOutputs, searchResults] = await Promise.all([ + widgetPromise, + searchPromise, + ]); + } +} + +export default SearchAgent;