UNPKG

@langchain/community

Version:
1 lines • 3.46 kB
{"version":3,"file":"aiplugin.cjs","names":["Tool","params: AIPluginToolParams","_input: string","url: string"],"sources":["../../src/tools/aiplugin.ts"],"sourcesContent":["import { Tool, type ToolParams } from \"@langchain/core/tools\";\n\n/**\n * Interface for parameters required to create an instance of\n * AIPluginTool.\n */\nexport interface AIPluginToolParams extends ToolParams {\n name: string;\n description: string;\n apiSpec: string;\n}\n\n/**\n * Class for creating instances of AI tools from plugins. It extends the\n * Tool class and implements the AIPluginToolParams interface.\n */\nexport class AIPluginTool extends Tool implements AIPluginToolParams {\n static lc_name() {\n return \"AIPluginTool\";\n }\n\n private _name: string;\n\n private _description: string;\n\n apiSpec: string;\n\n get name() {\n return this._name;\n }\n\n get description() {\n return this._description;\n }\n\n constructor(params: AIPluginToolParams) {\n super(params);\n this._name = params.name;\n this._description = params.description;\n this.apiSpec = params.apiSpec;\n }\n\n /** @ignore */\n async _call(_input: string) {\n return this.apiSpec;\n }\n\n /**\n * Static method that creates an instance of AIPluginTool from a given\n * plugin URL. It fetches the plugin and its API specification from the\n * provided URL and returns a new instance of AIPluginTool with the\n * fetched data.\n * @param url The URL of the AI plugin.\n * @returns A new instance of AIPluginTool.\n */\n static async fromPluginUrl(url: string) {\n const aiPluginRes = await fetch(url);\n if (!aiPluginRes.ok) {\n throw new Error(\n `Failed to fetch plugin from ${url} with status ${aiPluginRes.status}`\n );\n }\n const aiPluginJson = await aiPluginRes.json();\n\n const apiUrlRes = await fetch(aiPluginJson.api.url);\n if (!apiUrlRes.ok) {\n throw new Error(\n `Failed to fetch API spec from ${aiPluginJson.api.url} with status ${apiUrlRes.status}`\n );\n }\n const apiUrlJson = await apiUrlRes.text();\n\n return new AIPluginTool({\n name: aiPluginJson.name_for_model,\n description: `Call this tool to get the OpenAPI spec (and usage guide) for interacting with the ${aiPluginJson.name_for_human} API. You should only call this ONCE! What is the ${aiPluginJson.name_for_human} API useful for? ${aiPluginJson.description_for_human}`,\n apiSpec: `Usage Guide: ${aiPluginJson.description_for_model}\n\nOpenAPI Spec in JSON or YAML format:\\n${apiUrlJson}`,\n });\n }\n}\n"],"mappings":";;;;;;;;;;AAgBA,IAAa,eAAb,MAAa,qBAAqBA,4BAAmC;CACnE,OAAO,UAAU;AACf,SAAO;CACR;CAED,AAAQ;CAER,AAAQ;CAER;CAEA,IAAI,OAAO;AACT,SAAO,KAAK;CACb;CAED,IAAI,cAAc;AAChB,SAAO,KAAK;CACb;CAED,YAAYC,QAA4B;EACtC,MAAM,OAAO;EACb,KAAK,QAAQ,OAAO;EACpB,KAAK,eAAe,OAAO;EAC3B,KAAK,UAAU,OAAO;CACvB;;CAGD,MAAM,MAAMC,QAAgB;AAC1B,SAAO,KAAK;CACb;;;;;;;;;CAUD,aAAa,cAAcC,KAAa;EACtC,MAAM,cAAc,MAAM,MAAM,IAAI;AACpC,MAAI,CAAC,YAAY,GACf,OAAM,IAAI,MACR,CAAC,4BAA4B,EAAE,IAAI,aAAa,EAAE,YAAY,QAAQ;EAG1E,MAAM,eAAe,MAAM,YAAY,MAAM;EAE7C,MAAM,YAAY,MAAM,MAAM,aAAa,IAAI,IAAI;AACnD,MAAI,CAAC,UAAU,GACb,OAAM,IAAI,MACR,CAAC,8BAA8B,EAAE,aAAa,IAAI,IAAI,aAAa,EAAE,UAAU,QAAQ;EAG3F,MAAM,aAAa,MAAM,UAAU,MAAM;AAEzC,SAAO,IAAI,aAAa;GACtB,MAAM,aAAa;GACnB,aAAa,CAAC,kFAAkF,EAAE,aAAa,eAAe,kDAAkD,EAAE,aAAa,eAAe,iBAAiB,EAAE,aAAa,uBAAuB;GACrQ,SAAS,CAAC,aAAa,EAAE,aAAa,sBAAsB;;sCAE5B,EAAE,YAAY;EAC/C;CACF;AACF"}