diff --git a/.changeset/lemon-windows-fetch.md b/.changeset/lemon-windows-fetch.md new file mode 100644 index 0000000000000000000000000000000000000000..72d27fc61d547b0adbe7160236957555a96fe57f --- /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 0000000000000000000000000000000000000000..d40b0d9500b3f802d39208f58e95737c23cdd0c0 --- /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 2b52c32edf8fbc07dd31882a66ace92095400d61..c9d38eef9943bb3bdfe0fc45d2b977492ce2a8a4 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";