diff --git a/packages/core/src/QueryEngine.ts b/packages/core/src/QueryEngine.ts index 10dace35954c1f89cb4e4662f1e607d5167d3a49..2300043e0309342244137e25ebde7f8c4bb517d0 100644 --- a/packages/core/src/QueryEngine.ts +++ b/packages/core/src/QueryEngine.ts @@ -1,3 +1,7 @@ +import { + BaseQuestionGenerator, + LLMQuestionGenerator, +} from "./QuestionGenerator"; import { Response } from "./Response"; import { ResponseSynthesizer } from "./ResponseSynthesizer"; import { BaseRetriever } from "./Retriever"; @@ -6,7 +10,7 @@ export interface BaseQueryEngine { aquery(query: string): Promise<Response>; } -export class RetrieverQueryEngine { +export class RetrieverQueryEngine implements BaseQueryEngine { retriever: BaseRetriever; responseSynthesizer: ResponseSynthesizer; @@ -20,3 +24,19 @@ export class RetrieverQueryEngine { return this.responseSynthesizer.asynthesize(query, nodes); } } + +export class SubQuestionQueryEngine implements BaseQueryEngine { + responseSynthesizer: ResponseSynthesizer; + questionGenerator: BaseQuestionGenerator; + + constructor(init?: Partial<SubQuestionQueryEngine>) { + this.responseSynthesizer = + init?.responseSynthesizer ?? new ResponseSynthesizer(); + this.questionGenerator = + init?.questionGenerator ?? new LLMQuestionGenerator(); + } + + aquery(query: string): Promise<Response> { + throw new Error("Method not implemented."); + } +} diff --git a/packages/core/src/QuestionGenerator.ts b/packages/core/src/QuestionGenerator.ts new file mode 100644 index 0000000000000000000000000000000000000000..7391888313dbc533cae5b082a161666bb1ab18e0 --- /dev/null +++ b/packages/core/src/QuestionGenerator.ts @@ -0,0 +1,29 @@ +import { BaseLLMPredictor } from "./LLMPredictor"; +import { SimplePrompt } from "./Prompt"; +import { ToolMetadata } from "./Tool"; + +export interface BaseQuestionGenerator { + agenerate(tools: ToolMetadata[], query: string): Promise<SubQuestion[]>; +} + +export class LLMQuestionGenerator implements BaseQuestionGenerator { + llmPredictor: BaseLLMPredictor; + prompt: SimplePrompt; + + constructor(init?: Partial<LLMQuestionGenerator>) { + this.llmPredictor = init?.llmPredictor ?? new BaseLLMPredictor(); + this.prompt = init?.prompt ?? new SimplePrompt(); + } + + async agenerate( + tools: ToolMetadata[], + query: string + ): Promise<SubQuestion[]> { + throw new Error("Method not implemented."); + } +} + +interface SubQuestion { + subQuestion: string; + toolName: string; +} diff --git a/packages/core/src/Tool.ts b/packages/core/src/Tool.ts new file mode 100644 index 0000000000000000000000000000000000000000..221141e12efe23ee91d3e6297b163462ef69c74d --- /dev/null +++ b/packages/core/src/Tool.ts @@ -0,0 +1 @@ +export interface ToolMetadata {}