{"version":3,"file":"combining.cjs","names":["BaseOutputParser"],"sources":["../../src/output_parsers/combining.ts"],"sourcesContent":["import { Callbacks } from \"@langchain/core/callbacks/manager\";\nimport { BaseOutputParser } from \"@langchain/core/output_parsers\";\n\n/**\n * Type for the combined output of the CombiningOutputParser class.\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type CombinedOutput = Record<string, any>;\n\n/**\n * Interface for the fields required by the CombiningOutputParser class.\n */\nexport interface CombiningOutputParserFields {\n  parsers: BaseOutputParser[];\n}\n\n/**\n * Class to combine multiple output parsers\n * @augments BaseOutputParser\n */\nexport class CombiningOutputParser extends BaseOutputParser<object> {\n  static lc_name() {\n    return \"CombiningOutputParser\";\n  }\n\n  lc_namespace = [\"langchain\", \"output_parsers\", \"combining\"];\n\n  lc_serializable = true;\n\n  parsers: BaseOutputParser[];\n\n  outputDelimiter = \"-----\";\n\n  constructor(fields: CombiningOutputParserFields);\n\n  constructor(...parsers: BaseOutputParser[]);\n\n  constructor(\n    fields: BaseOutputParser | CombiningOutputParserFields,\n    ...parsers: BaseOutputParser[]\n  ) {\n    if (parsers.length > 0 || !(\"parsers\" in fields)) {\n      // oxlint-disable-next-line no-param-reassign\n      fields = {\n        parsers: [fields as BaseOutputParser, ...parsers],\n      };\n    }\n    super(fields);\n    this.parsers = fields.parsers;\n  }\n\n  /**\n   * Method to parse an input string using the parsers in the parsers array.\n   * The parsed outputs are combined into a single object and returned.\n   * @param input The input string to parse.\n   * @param callbacks Optional Callbacks object.\n   * @returns A Promise that resolves to a CombinedOutput object.\n   */\n  async parse(input: string, callbacks?: Callbacks): Promise<CombinedOutput> {\n    const inputs = input\n      .trim()\n      .split(\n        new RegExp(`${this.outputDelimiter}Output \\\\d+${this.outputDelimiter}`)\n      )\n      .slice(1);\n    const ret: CombinedOutput = {};\n    for (const [i, p] of this.parsers.entries()) {\n      let parsed;\n      try {\n        let extracted = inputs[i].includes(\"```\")\n          ? inputs[i].trim().split(/```/)[1]\n          : inputs[i].trim();\n        if (extracted.endsWith(this.outputDelimiter)) {\n          extracted = extracted.slice(0, -this.outputDelimiter.length);\n        }\n        parsed = await p.parse(extracted, callbacks);\n      } catch {\n        parsed = await p.parse(input.trim(), callbacks);\n      }\n      Object.assign(ret, parsed);\n    }\n    return ret;\n  }\n\n  /**\n   * Method to get instructions on how to format the LLM output. The\n   * instructions are based on the parsers array and the outputDelimiter.\n   * @returns A string with format instructions.\n   */\n  getFormatInstructions(): string {\n    return `${[\n      `Return the following ${this.parsers.length} outputs, each formatted as described below. Include the delimiter characters \"${this.outputDelimiter}\" in your response:`,\n      ...this.parsers.map(\n        (p, i) =>\n          `${this.outputDelimiter}Output ${i + 1}${this.outputDelimiter}\\n${p\n            .getFormatInstructions()\n            .trim()}\\n${this.outputDelimiter}`\n      ),\n    ].join(\"\\n\\n\")}\\n`;\n  }\n}\n"],"mappings":";;;;;;;AAoBA,IAAa,wBAAb,cAA2CA,+BAAAA,iBAAyB;CAClE,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAkB;EAAY;CAE3D,kBAAkB;CAElB;CAEA,kBAAkB;CAMlB,YACE,QACA,GAAG,SACH;AACA,MAAI,QAAQ,SAAS,KAAK,EAAE,aAAa,QAEvC,UAAS,EACP,SAAS,CAAC,QAA4B,GAAG,QAAQ,EAClD;AAEH,QAAM,OAAO;AACb,OAAK,UAAU,OAAO;;;;;;;;;CAUxB,MAAM,MAAM,OAAe,WAAgD;EACzE,MAAM,SAAS,MACZ,MAAM,CACN,MACC,IAAI,OAAO,GAAG,KAAK,gBAAgB,aAAa,KAAK,kBAAkB,CACxE,CACA,MAAM,EAAE;EACX,MAAM,MAAsB,EAAE;AAC9B,OAAK,MAAM,CAAC,GAAG,MAAM,KAAK,QAAQ,SAAS,EAAE;GAC3C,IAAI;AACJ,OAAI;IACF,IAAI,YAAY,OAAO,GAAG,SAAS,MAAM,GACrC,OAAO,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC,KAC9B,OAAO,GAAG,MAAM;AACpB,QAAI,UAAU,SAAS,KAAK,gBAAgB,CAC1C,aAAY,UAAU,MAAM,GAAG,CAAC,KAAK,gBAAgB,OAAO;AAE9D,aAAS,MAAM,EAAE,MAAM,WAAW,UAAU;WACtC;AACN,aAAS,MAAM,EAAE,MAAM,MAAM,MAAM,EAAE,UAAU;;AAEjD,UAAO,OAAO,KAAK,OAAO;;AAE5B,SAAO;;;;;;;CAQT,wBAAgC;AAC9B,SAAO,GAAG,CACR,wBAAwB,KAAK,QAAQ,OAAO,iFAAiF,KAAK,gBAAgB,sBAClJ,GAAG,KAAK,QAAQ,KACb,GAAG,MACF,GAAG,KAAK,gBAAgB,SAAS,IAAI,IAAI,KAAK,gBAAgB,IAAI,EAC/D,uBAAuB,CACvB,MAAM,CAAC,IAAI,KAAK,kBACtB,CACF,CAAC,KAAK,OAAO,CAAC"}