{"version":3,"file":"base.cjs","names":[],"sources":["../../../src/experimental/plan_and_execute/base.ts"],"sourcesContent":["import { BaseOutputParser } from \"@langchain/core/output_parsers\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManager } from \"@langchain/core/callbacks/manager\";\nimport { BaseChain } from \"../../chains/base.js\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\n\n/**\n * Represents an action to be performed in a step.\n */\nexport type StepAction = {\n  text: string;\n};\n\n/**\n * Represents the result of a step.\n */\nexport type StepResult = {\n  response: string;\n};\n\n/**\n * Represents a step, which includes an action and its result.\n */\nexport type Step = {\n  action: StepAction;\n  result: StepResult;\n};\n\n/**\n * Represents a plan, which is a sequence of step actions.\n */\nexport type Plan = {\n  steps: StepAction[];\n};\n\n/**\n * Abstract class that defines the structure for a planner. Planners are\n * responsible for generating a plan based on inputs.\n */\nexport abstract class BasePlanner {\n  abstract plan(\n    inputs: ChainValues,\n    runManager?: CallbackManager\n  ): Promise<Plan>;\n}\n\n/**\n * Abstract class that defines the structure for a step executor. Step\n * executors are responsible for executing a step based on inputs.\n */\nexport abstract class BaseStepExecutor {\n  abstract step(\n    inputs: ChainValues,\n    runManager?: CallbackManager\n  ): Promise<StepResult>;\n}\n\n/**\n * Abstract class that defines the structure for a step container. Step\n * containers are responsible for managing steps.\n */\nexport abstract class BaseStepContainer {\n  abstract addStep(action: StepAction, result: StepResult): void;\n\n  abstract getSteps(): Step[];\n\n  abstract getFinalResponse(): string;\n}\n\n/**\n * Class that extends BaseStepContainer and provides an implementation for\n * its methods. It maintains a list of steps and provides methods to add a\n * step, get all steps, and get the final response.\n */\nexport class ListStepContainer extends BaseStepContainer {\n  private steps: Step[] = [];\n\n  addStep(action: StepAction, result: StepResult) {\n    this.steps.push({ action, result });\n  }\n\n  getSteps() {\n    return this.steps;\n  }\n\n  getFinalResponse(): string {\n    return this.steps[this.steps.length - 1]?.result?.response;\n  }\n}\n\n/**\n * Class that extends BasePlanner and provides an implementation for the\n * plan method. It uses an instance of LLMChain and an output parser to\n * generate a plan.\n */\nexport class LLMPlanner extends BasePlanner {\n  constructor(\n    private llmChain: LLMChain,\n    private outputParser: BaseOutputParser<Plan>\n  ) {\n    super();\n  }\n\n  async plan(inputs: ChainValues, runManager?: CallbackManager): Promise<Plan> {\n    const output = await this.llmChain.run(inputs, runManager);\n    return this.outputParser.parse(output);\n  }\n}\n\n/**\n * Class that extends BaseStepExecutor and provides an implementation for\n * the step method. It uses an instance of BaseChain to execute a step.\n */\nexport class ChainStepExecutor extends BaseStepExecutor {\n  constructor(private chain: BaseChain) {\n    super();\n  }\n\n  async step(\n    inputs: ChainValues,\n    runManager?: CallbackManager\n  ): Promise<StepResult> {\n    const chainResponse = await this.chain.call(inputs, runManager);\n    return { response: chainResponse.output };\n  }\n}\n"],"mappings":";;;;;AAuCA,IAAsB,cAAtB,MAAkC;;;;;AAWlC,IAAsB,mBAAtB,MAAuC;;;;;AAWvC,IAAsB,oBAAtB,MAAwC;;;;;;AAaxC,IAAa,oBAAb,cAAuC,kBAAkB;CACvD,QAAwB,EAAE;CAE1B,QAAQ,QAAoB,QAAoB;AAC9C,OAAK,MAAM,KAAK;GAAE;GAAQ;GAAQ,CAAC;;CAGrC,WAAW;AACT,SAAO,KAAK;;CAGd,mBAA2B;AACzB,SAAO,KAAK,MAAM,KAAK,MAAM,SAAS,IAAI,QAAQ;;;;;;;;AAStD,IAAa,aAAb,cAAgC,YAAY;CAC1C,YACE,UACA,cACA;AACA,SAAO;AAHC,OAAA,WAAA;AACA,OAAA,eAAA;;CAKV,MAAM,KAAK,QAAqB,YAA6C;EAC3E,MAAM,SAAS,MAAM,KAAK,SAAS,IAAI,QAAQ,WAAW;AAC1D,SAAO,KAAK,aAAa,MAAM,OAAO;;;;;;;AAQ1C,IAAa,oBAAb,cAAuC,iBAAiB;CACtD,YAAY,OAA0B;AACpC,SAAO;AADW,OAAA,QAAA;;CAIpB,MAAM,KACJ,QACA,YACqB;AAErB,SAAO,EAAE,WADa,MAAM,KAAK,MAAM,KAAK,QAAQ,WAAW,EAC9B,QAAQ"}