UNPKG

@langgraph-js/sdk

Version:

The UI SDK for LangGraph - seamlessly integrate your AI agents with frontend interfaces

65 lines (64 loc) 2.05 kB
import { z } from "zod"; import { zodToJsonSchema } from "zod-to-json-schema"; import { ToolManager } from "../ToolManager.js"; /** 用于格式校验 */ export const createTool = (tool) => { return tool; }; /** * create Type Safe Tool with zod and UI Render Feature */ export const createUITool = (tool) => { const execute = tool.execute || (async (args, context) => { try { const result = await tool.handler?.(args, context); if (typeof result === "string") { return [{ type: "text", text: result }]; } else if (result.decisions) { return result; } return [{ type: "text", text: JSON.stringify(result) }]; } catch (error) { return [{ type: "text", text: `Error: ${error}` }]; } }); return { ...tool, execute, }; }; export const createRenderUITool = createUITool; export const createInteractiveUITool = (tool) => { const execute = tool.execute || (async (args, context) => { try { const result = await tool.handler?.(args, context); if (typeof result === "string") { return [{ type: "text", text: result }]; } else if (result.decisions) { return result; } return [{ type: "text", text: JSON.stringify(result) }]; } catch (error) { return [{ type: "text", text: `Error: ${error}` }]; } }); return { ...tool, handler: ToolManager.waitForUIDone, execute, }; }; ///======= UnionTool 到 各种工具的辅助函数 export const createJSONDefineTool = (tool) => { return { name: tool.name, description: tool.description, parameters: tool.isPureParams ? tool.parameters : zodToJsonSchema(z.object(tool.parameters)), }; };