From 29d042175e221ac4304c00dca96e0f43b39efa9e Mon Sep 17 00:00:00 2001 From: Yi Ding <yi.s.ding@gmail.com> Date: Tue, 4 Jul 2023 07:08:36 -0700 Subject: [PATCH] initial work --- packages/core/src/QueryEngine.ts | 22 ++++++++++++++++++- packages/core/src/QuestionGenerator.ts | 29 ++++++++++++++++++++++++++ packages/core/src/Tool.ts | 1 + 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 packages/core/src/QuestionGenerator.ts create mode 100644 packages/core/src/Tool.ts diff --git a/packages/core/src/QueryEngine.ts b/packages/core/src/QueryEngine.ts index 10dace359..2300043e0 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 000000000..739188831 --- /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 000000000..221141e12 --- /dev/null +++ b/packages/core/src/Tool.ts @@ -0,0 +1 @@ +export interface ToolMetadata {} -- GitLab