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