From fececd89ab8dc9fee5bf57f26819a63c32cca51a Mon Sep 17 00:00:00 2001 From: Thuc Pham <51660321+thucpn@users.noreply.github.com> Date: Fri, 22 Mar 2024 14:40:41 +0700 Subject: [PATCH] feat: add tool factory (#663) --- .changeset/lemon-windows-fetch.md | 5 ++++ packages/core/src/tools/ToolFactory.ts | 33 ++++++++++++++++++++++++++ packages/core/src/tools/index.ts | 1 + 3 files changed, 39 insertions(+) create mode 100644 .changeset/lemon-windows-fetch.md create mode 100644 packages/core/src/tools/ToolFactory.ts diff --git a/.changeset/lemon-windows-fetch.md b/.changeset/lemon-windows-fetch.md new file mode 100644 index 000000000..72d27fc61 --- /dev/null +++ b/.changeset/lemon-windows-fetch.md @@ -0,0 +1,5 @@ +--- +"llamaindex": patch +--- + +feat: add tool factory diff --git a/packages/core/src/tools/ToolFactory.ts b/packages/core/src/tools/ToolFactory.ts new file mode 100644 index 000000000..d40b0d950 --- /dev/null +++ b/packages/core/src/tools/ToolFactory.ts @@ -0,0 +1,33 @@ +import type { BaseTool } from "../types.js"; +import { WikipediaTool } from "./WikipediaTool.js"; + +enum Tools { + Wikipedia = "wikipedia.WikipediaToolSpec", +} + +type ToolConfig = { [key in Tools]: Record<string, any> }; + +export class ToolFactory { + private static async createTool( + key: Tools, + options: Record<string, any>, + ): Promise<BaseTool> { + if (key === Tools.Wikipedia) { + const tool = new WikipediaTool(); + return tool; + } + + throw new Error( + `Sorry! Tool ${key} is not supported yet. Options: ${options}`, + ); + } + + public static async createTools(config: ToolConfig): Promise<BaseTool[]> { + const tools: BaseTool[] = []; + for (const [key, value] of Object.entries(config as ToolConfig)) { + const tool = await ToolFactory.createTool(key as Tools, value); + tools.push(tool); + } + return tools; + } +} diff --git a/packages/core/src/tools/index.ts b/packages/core/src/tools/index.ts index 2b52c32ed..c9d38eef9 100644 --- a/packages/core/src/tools/index.ts +++ b/packages/core/src/tools/index.ts @@ -1,4 +1,5 @@ export * from "./QueryEngineTool.js"; +export * from "./ToolFactory.js"; export * from "./WikipediaTool.js"; export * from "./functionTool.js"; export * from "./types.js"; -- GitLab