{"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"}