mirror of
https://github.com/ItzCrazyKns/Perplexica.git
synced 2025-11-25 22:48:13 +00:00
feat(agents): add search agent
This commit is contained in:
48
src/lib/agents/search/index.ts
Normal file
48
src/lib/agents/search/index.ts
Normal file
@@ -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<ResearcherOutput> | 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;
|
||||||
Reference in New Issue
Block a user