{"version":3,"file":"output_parser.cjs","names":["BaseOutputParser"],"sources":["../../../src/experimental/autogpt/output_parser.ts"],"sourcesContent":["import { BaseOutputParser } from \"@langchain/core/output_parsers\";\nimport { AutoGPTAction } from \"./schema.js\";\n\n/**\n * Utility function used to preprocess a string to be parsed as JSON.\n * It replaces single backslashes with double backslashes, while leaving\n * already escaped ones intact.\n * It also extracts the json code if it is inside a code block\n */\nexport function preprocessJsonInput(inputStr: string): string {\n  const correctedStr = inputStr.replace(\n    /(?<!\\\\)\\\\(?![\"\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\n    \"\\\\\\\\\"\n  );\n  const match = correctedStr.match(\n    /```(.*)(\\r\\n|\\r|\\n)(?<code>[\\w\\W\\n]+)(\\r\\n|\\r|\\n)```/\n  );\n  if (match?.groups?.code) {\n    return match.groups.code.trim();\n  } else {\n    return correctedStr;\n  }\n}\n\n/**\n * Class responsible for parsing the output of AutoGPT. It extends the\n * BaseOutputParser class.\n */\nexport class AutoGPTOutputParser extends BaseOutputParser<AutoGPTAction> {\n  lc_namespace = [\"langchain\", \"experimental\", \"autogpt\"];\n\n  /**\n   * Method not implemented in the class and will throw an error if called.\n   * It is likely meant to be overridden in subclasses to provide specific\n   * format instructions.\n   * @returns Throws an error.\n   */\n  getFormatInstructions(): string {\n    throw new Error(\"Method not implemented.\");\n  }\n\n  /**\n   * Asynchronous method that takes a string as input and attempts to parse\n   * it into an AutoGPTAction object. If the input string cannot be parsed\n   * directly, the method tries to preprocess the string using the\n   * preprocessJsonInput function and parse it again. If parsing fails\n   * again, it returns an AutoGPTAction object with an error message.\n   * @param text The string to be parsed.\n   * @returns A Promise that resolves to an AutoGPTAction object.\n   */\n  async parse(text: string): Promise<AutoGPTAction> {\n    let parsed: {\n      command: {\n        name: string;\n        args: Record<string, unknown>;\n      };\n    };\n    try {\n      parsed = JSON.parse(text);\n    } catch {\n      const preprocessedText = preprocessJsonInput(text);\n      try {\n        parsed = JSON.parse(preprocessedText);\n      } catch {\n        return {\n          name: \"ERROR\",\n          args: { error: `Could not parse invalid json: ${text}` },\n        };\n      }\n    }\n    try {\n      return {\n        name: parsed.command.name,\n        args: parsed.command.args,\n      };\n    } catch {\n      return {\n        name: \"ERROR\",\n        args: { error: `Incomplete command args: ${parsed}` },\n      };\n    }\n  }\n}\n"],"mappings":";;;;;;;;;AASA,SAAgB,oBAAoB,UAA0B;CAC5D,MAAM,eAAe,SAAS,QAC5B,6CACA,OACD;CACD,MAAM,QAAQ,aAAa,MACzB,uDACD;AACD,KAAI,OAAO,QAAQ,KACjB,QAAO,MAAM,OAAO,KAAK,MAAM;KAE/B,QAAO;;;;;;AAQX,IAAa,sBAAb,cAAyCA,+BAAAA,iBAAgC;CACvE,eAAe;EAAC;EAAa;EAAgB;EAAU;;;;;;;CAQvD,wBAAgC;AAC9B,QAAM,IAAI,MAAM,0BAA0B;;;;;;;;;;;CAY5C,MAAM,MAAM,MAAsC;EAChD,IAAI;AAMJ,MAAI;AACF,YAAS,KAAK,MAAM,KAAK;UACnB;GACN,MAAM,mBAAmB,oBAAoB,KAAK;AAClD,OAAI;AACF,aAAS,KAAK,MAAM,iBAAiB;WAC/B;AACN,WAAO;KACL,MAAM;KACN,MAAM,EAAE,OAAO,iCAAiC,QAAQ;KACzD;;;AAGL,MAAI;AACF,UAAO;IACL,MAAM,OAAO,QAAQ;IACrB,MAAM,OAAO,QAAQ;IACtB;UACK;AACN,UAAO;IACL,MAAM;IACN,MAAM,EAAE,OAAO,4BAA4B,UAAU;IACtD"}