{"version":3,"file":"chat.cjs","names":["Runnable","input: RunInput","options?: BaseCallbackConfig","input","fields:\n      | Extract<keyof RunInput, string>\n      | MessagesPlaceholderFields<Extract<keyof RunInput, string>>","values: TypedPromptInputValues<RunInput>","coerceMessageLikeToMessage","e: any","fields:\n      | MessageStringPromptTemplateFields<\n          InputValues<Extract<keyof RunInput, string>>\n        >\n      | BaseStringPromptTemplate<\n          InputValues<Extract<keyof RunInput, string>>,\n          string\n        >","BasePromptTemplate","input: BasePromptTemplateInput<RunInput, PartialVariableName>","ChatPromptValue","fields:\n      | ChatMessagePromptTemplateFields<\n          InputValues<Extract<keyof RunInput, string>>\n        >\n      | BaseStringPromptTemplate<InputValues<Extract<keyof RunInput, string>>>","role?: string","values: RunInput","ChatMessage","template: T","role: string","options?: { templateFormat?: TemplateFormat }","PromptTemplate","param: unknown","fields: any","additionalOptions?: _StringImageMessagePromptTemplateOptions","inputVariables: Extract<keyof RunInput, string>[]","content: MessageContent","name: string","template:\n      | string\n      | Array<\n          | string\n          | _TextTemplateParam\n          | _ImageTemplateParam\n          | Record<string, unknown>\n        >","prompt: Array<\n      | PromptTemplate<InputValues>\n      | ImagePromptTemplate<InputValues>\n      | DictPromptTemplate\n    >","imgTemplateObject: ImagePromptTemplate<InputValues>","inputVariables: string[]","parsedTemplate: ParsedTemplateNode[]","parseMustache","parseFString","item","ImagePromptTemplate","DictPromptTemplate","input: TypedPromptInputValues<RunInput>","BaseStringPromptTemplate","inputs: Record<string, any>","additionalContentFields: ContentBlock | undefined","HumanMessage","AIMessage","SystemMessage","baseMessagePromptTemplateLike: BaseMessagePromptTemplateLike","messagePromptTemplateLike: BaseMessagePromptTemplateLike","extra?: Extra","isBaseMessage","templateData:\n    | string\n    | (\n        | string\n        | _TextTemplateParam\n        | _ImageTemplateParam\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        | Record<string, any>\n      )[]","x: BaseMessagePromptTemplate | BaseMessage","input: ChatPromptTemplateInput<RunInput, PartialVariableName>","BaseMessage","message: BaseMessage","inputValues: InputValues<\n      PartialVariableName | Extract<keyof RunInput, string>\n    >","resultMessages: BaseMessage[]","inputValues: InputValues","addLangChainErrorFields","values: PartialValues<NewPartialVariableName>","options?: Omit<\n      PromptTemplateInput<RunInput, string, TemplateFormat>,\n      \"template\" | \"inputVariables\"\n    >","promptMessages: (\n      | ChatPromptTemplate<InputValues, string>\n      | BaseMessagePromptTemplateLike\n    )[]","extra?: Omit<\n      Extra,\n      \"inputVariables\" | \"promptMessages\" | \"partialVariables\"\n    >","acc: Array<BaseMessagePromptTemplate | BaseMessage>"],"sources":["../../src/prompts/chat.ts"],"sourcesContent":["// Default generic \"any\" values are for backwards compatibility.\n// Replace with \"string\" when we are comfortable with a breaking change.\n\nimport type { BaseCallbackConfig } from \"../callbacks/manager.js\";\nimport {\n  AIMessage,\n  HumanMessage,\n  SystemMessage,\n  BaseMessage,\n  ChatMessage,\n  type BaseMessageLike,\n  coerceMessageLikeToMessage,\n  isBaseMessage,\n  MessageContent,\n  ContentBlock,\n} from \"../messages/index.js\";\nimport {\n  type ChatPromptValueInterface,\n  ChatPromptValue,\n} from \"../prompt_values.js\";\nimport type { InputValues, PartialValues } from \"../utils/types/index.js\";\nimport { Runnable } from \"../runnables/base.js\";\nimport { BaseStringPromptTemplate } from \"./string.js\";\nimport {\n  BasePromptTemplate,\n  type BasePromptTemplateInput,\n  type TypedPromptInputValues,\n} from \"./base.js\";\nimport {\n  PromptTemplate,\n  type ParamsFromFString,\n  PromptTemplateInput,\n  ExtractedFStringParams,\n} from \"./prompt.js\";\nimport { ImagePromptTemplate } from \"./image.js\";\nimport {\n  ParsedTemplateNode,\n  TemplateFormat,\n  parseFString,\n  parseMustache,\n} from \"./template.js\";\nimport { addLangChainErrorFields } from \"../errors/index.js\";\nimport { DictPromptTemplate } from \"./dict.js\";\n\n/**\n * Abstract class that serves as a base for creating message prompt\n * templates. It defines how to format messages for different roles in a\n * conversation.\n */\nexport abstract class BaseMessagePromptTemplate<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  RunInput extends InputValues = any,\n  RunOutput extends BaseMessage[] = BaseMessage[]\n> extends Runnable<RunInput, RunOutput> {\n  lc_namespace = [\"langchain_core\", \"prompts\", \"chat\"];\n\n  lc_serializable = true;\n\n  abstract inputVariables: Array<Extract<keyof RunInput, string>>;\n\n  /**\n   * Method that takes an object of TypedPromptInputValues and returns a\n   * promise that resolves to an array of BaseMessage instances.\n   * @param values Object of TypedPromptInputValues\n   * @returns Formatted array of BaseMessages\n   */\n  abstract formatMessages(\n    values: TypedPromptInputValues<RunInput>\n  ): Promise<RunOutput>;\n\n  /**\n   * Calls the formatMessages method with the provided input and options.\n   * @param input Input for the formatMessages method\n   * @param options Optional BaseCallbackConfig\n   * @returns Formatted output messages\n   */\n  async invoke(\n    input: RunInput,\n    options?: BaseCallbackConfig\n  ): Promise<RunOutput> {\n    return this._callWithConfig(\n      (input: RunInput) => this.formatMessages(input),\n      input,\n      { ...options, runType: \"prompt\" }\n    );\n  }\n}\n\n/**\n * Interface for the fields of a MessagePlaceholder.\n */\nexport interface MessagesPlaceholderFields<T extends string> {\n  variableName: T;\n  optional?: boolean;\n}\n\n/**\n * Class that represents a placeholder for messages in a chat prompt. It\n * extends the BaseMessagePromptTemplate.\n */\nexport class MessagesPlaceholder<\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    RunInput extends InputValues = any\n  >\n  extends BaseMessagePromptTemplate<RunInput>\n  implements MessagesPlaceholderFields<Extract<keyof RunInput, string>>\n{\n  static lc_name() {\n    return \"MessagesPlaceholder\";\n  }\n\n  variableName: Extract<keyof RunInput, string>;\n\n  optional: boolean;\n\n  constructor(variableName: Extract<keyof RunInput, string>);\n\n  constructor(\n    fields: MessagesPlaceholderFields<Extract<keyof RunInput, string>>\n  );\n\n  constructor(\n    fields:\n      | Extract<keyof RunInput, string>\n      | MessagesPlaceholderFields<Extract<keyof RunInput, string>>\n  ) {\n    if (typeof fields === \"string\") {\n      // eslint-disable-next-line no-param-reassign\n      fields = { variableName: fields };\n    }\n    super(fields);\n    this.variableName = fields.variableName;\n    this.optional = fields.optional ?? false;\n  }\n\n  get inputVariables() {\n    return [this.variableName];\n  }\n\n  async formatMessages(\n    values: TypedPromptInputValues<RunInput>\n  ): Promise<BaseMessage[]> {\n    const input = values[this.variableName];\n    if (this.optional && !input) {\n      return [];\n    } else if (!input) {\n      const error = new Error(\n        `Field \"${this.variableName}\" in prompt uses a MessagesPlaceholder, which expects an array of BaseMessages as an input value. Received: undefined`\n      );\n      error.name = \"InputFormatError\";\n      throw error;\n    }\n\n    let formattedMessages;\n    try {\n      if (Array.isArray(input)) {\n        formattedMessages = input.map(coerceMessageLikeToMessage);\n      } else {\n        formattedMessages = [coerceMessageLikeToMessage(input)];\n      }\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    } catch (e: any) {\n      const readableInput =\n        typeof input === \"string\" ? input : JSON.stringify(input, null, 2);\n      const error = new Error(\n        [\n          `Field \"${this.variableName}\" in prompt uses a MessagesPlaceholder, which expects an array of BaseMessages or coerceable values as input.`,\n          `Received value: ${readableInput}`,\n          `Additional message: ${e.message}`,\n        ].join(\"\\n\\n\")\n      );\n      error.name = \"InputFormatError\";\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      (error as any).lc_error_code = e.lc_error_code;\n      throw error;\n    }\n\n    return formattedMessages;\n  }\n}\n\n/**\n * Interface for the fields of a MessageStringPromptTemplate.\n */\nexport interface MessageStringPromptTemplateFields<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  T extends InputValues = any\n> {\n  prompt: BaseStringPromptTemplate<T, string>;\n}\n\n/**\n * Abstract class that serves as a base for creating message string prompt\n * templates. It extends the BaseMessagePromptTemplate.\n */\nexport abstract class BaseMessageStringPromptTemplate<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  RunInput extends InputValues = any\n> extends BaseMessagePromptTemplate<RunInput> {\n  prompt: BaseStringPromptTemplate<\n    InputValues<Extract<keyof RunInput, string>>,\n    string\n  >;\n\n  constructor(\n    prompt: BaseStringPromptTemplate<\n      InputValues<Extract<keyof RunInput, string>>\n    >\n  );\n\n  constructor(\n    fields: MessageStringPromptTemplateFields<\n      InputValues<Extract<keyof RunInput, string>>\n    >\n  );\n\n  constructor(\n    fields:\n      | MessageStringPromptTemplateFields<\n          InputValues<Extract<keyof RunInput, string>>\n        >\n      | BaseStringPromptTemplate<\n          InputValues<Extract<keyof RunInput, string>>,\n          string\n        >\n  ) {\n    if (!(\"prompt\" in fields)) {\n      // eslint-disable-next-line no-param-reassign\n      fields = { prompt: fields };\n    }\n    super(fields);\n    this.prompt = fields.prompt;\n  }\n\n  get inputVariables() {\n    return this.prompt.inputVariables;\n  }\n\n  abstract format(\n    values: TypedPromptInputValues<RunInput>\n  ): Promise<BaseMessage>;\n\n  async formatMessages(\n    values: TypedPromptInputValues<RunInput>\n  ): Promise<BaseMessage[]> {\n    return [await this.format(values)];\n  }\n}\n\n/**\n * Abstract class that serves as a base for creating chat prompt\n * templates. It extends the BasePromptTemplate.\n */\nexport abstract class BaseChatPromptTemplate<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  RunInput extends InputValues = any,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  PartialVariableName extends string = any\n> extends BasePromptTemplate<\n  RunInput,\n  ChatPromptValueInterface,\n  PartialVariableName\n> {\n  constructor(input: BasePromptTemplateInput<RunInput, PartialVariableName>) {\n    super(input);\n  }\n\n  abstract formatMessages(\n    values: TypedPromptInputValues<RunInput>\n  ): Promise<BaseMessage[]>;\n\n  async format(values: TypedPromptInputValues<RunInput>): Promise<string> {\n    return (await this.formatPromptValue(values)).toString();\n  }\n\n  async formatPromptValue(\n    values: TypedPromptInputValues<RunInput>\n  ): Promise<ChatPromptValueInterface> {\n    const resultMessages = await this.formatMessages(values);\n    return new ChatPromptValue(resultMessages);\n  }\n}\n\n/**\n * Interface for the fields of a ChatMessagePromptTemplate.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface ChatMessagePromptTemplateFields<T extends InputValues = any>\n  extends MessageStringPromptTemplateFields<T> {\n  role: string;\n}\n\n/**\n * Class that represents a chat message prompt template. It extends the\n * BaseMessageStringPromptTemplate.\n */\nexport class ChatMessagePromptTemplate<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  RunInput extends InputValues = any\n> extends BaseMessageStringPromptTemplate<RunInput> {\n  static lc_name() {\n    return \"ChatMessagePromptTemplate\";\n  }\n\n  role: string;\n\n  constructor(\n    prompt: BaseStringPromptTemplate<\n      InputValues<Extract<keyof RunInput, string>>\n    >,\n    role: string\n  );\n\n  constructor(\n    fields: ChatMessagePromptTemplateFields<\n      InputValues<Extract<keyof RunInput, string>>\n    >\n  );\n\n  constructor(\n    fields:\n      | ChatMessagePromptTemplateFields<\n          InputValues<Extract<keyof RunInput, string>>\n        >\n      | BaseStringPromptTemplate<InputValues<Extract<keyof RunInput, string>>>,\n    role?: string\n  ) {\n    if (!(\"prompt\" in fields)) {\n      // eslint-disable-next-line no-param-reassign\n      fields = { prompt: fields, role: role! };\n    }\n    super(fields);\n    this.role = fields.role;\n  }\n\n  async format(values: RunInput): Promise<BaseMessage> {\n    return new ChatMessage(await this.prompt.format(values), this.role);\n  }\n\n  static fromTemplate<\n    RunInput extends InputValues = Symbol,\n    T extends string = string\n  >(template: T, role: string, options?: { templateFormat?: TemplateFormat }) {\n    return new this(\n      PromptTemplate.fromTemplate<RunInput, T>(template, {\n        templateFormat: options?.templateFormat,\n      }),\n      role\n    );\n  }\n}\n\ninterface _TextTemplateParam {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  text?: string | Record<string, any>;\n}\n\nfunction isTextTemplateParam(param: unknown): param is _TextTemplateParam {\n  if (param === null || typeof param !== \"object\" || Array.isArray(param)) {\n    return false;\n  }\n  return (\n    Object.keys(param).length === 1 &&\n    \"text\" in param &&\n    typeof param.text === \"string\"\n  );\n}\n\ninterface _ImageTemplateParam {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  image_url?: string | Record<string, any>;\n}\n\nfunction isImageTemplateParam(param: unknown): param is _ImageTemplateParam {\n  if (param === null || typeof param !== \"object\" || Array.isArray(param)) {\n    return false;\n  }\n  return (\n    \"image_url\" in param &&\n    (typeof param.image_url === \"string\" ||\n      (typeof param.image_url === \"object\" &&\n        param.image_url !== null &&\n        \"url\" in param.image_url &&\n        typeof param.image_url.url === \"string\"))\n  );\n}\n\ntype MessageClass =\n  | typeof HumanMessage\n  | typeof AIMessage\n  | typeof SystemMessage;\n\ntype ChatMessageClass = typeof ChatMessage;\n\ninterface _StringImageMessagePromptTemplateOptions<\n  Format extends TemplateFormat = TemplateFormat\n> extends Record<string, unknown> {\n  templateFormat?: Format;\n}\n\nclass _StringImageMessagePromptTemplate<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  RunInput extends InputValues = any,\n  RunOutput extends BaseMessage[] = BaseMessage[]\n> extends BaseMessagePromptTemplate<RunInput, RunOutput> {\n  lc_namespace = [\"langchain_core\", \"prompts\", \"chat\"];\n\n  lc_serializable = true;\n\n  inputVariables: Array<Extract<keyof RunInput, string>> = [];\n\n  additionalOptions: _StringImageMessagePromptTemplateOptions = {};\n\n  prompt:\n    | BaseStringPromptTemplate<\n        InputValues<Extract<keyof RunInput, string>>,\n        string\n      >\n    | Array<\n        | BaseStringPromptTemplate<\n            InputValues<Extract<keyof RunInput, string>>,\n            string\n          >\n        | ImagePromptTemplate<\n            InputValues<Extract<keyof RunInput, string>>,\n            string\n          >\n        | MessageStringPromptTemplateFields<\n            InputValues<Extract<keyof RunInput, string>>\n          >\n        | DictPromptTemplate<InputValues<Extract<keyof RunInput, string>>>\n      >;\n\n  protected messageClass?: MessageClass;\n\n  static _messageClass(): MessageClass {\n    throw new Error(\n      \"Can not invoke _messageClass from inside _StringImageMessagePromptTemplate\"\n    );\n  }\n\n  // ChatMessage contains role field, others don't.\n  // Because of this, we have a separate class property for ChatMessage.\n  protected chatMessageClass?: ChatMessageClass;\n\n  constructor(\n    /** @TODO When we come up with a better way to type prompt templates, fix this */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    fields: any,\n    additionalOptions?: _StringImageMessagePromptTemplateOptions\n  ) {\n    if (!(\"prompt\" in fields)) {\n      // eslint-disable-next-line no-param-reassign\n      fields = { prompt: fields };\n    }\n    super(fields);\n    this.prompt = fields.prompt;\n    if (Array.isArray(this.prompt)) {\n      let inputVariables: Extract<keyof RunInput, string>[] = [];\n      this.prompt.forEach((prompt) => {\n        if (\"inputVariables\" in prompt) {\n          inputVariables = inputVariables.concat(prompt.inputVariables);\n        }\n      });\n      this.inputVariables = inputVariables;\n    } else {\n      this.inputVariables = this.prompt.inputVariables;\n    }\n    this.additionalOptions = additionalOptions ?? this.additionalOptions;\n  }\n\n  createMessage(content: MessageContent) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const constructor = this.constructor as any;\n    if (constructor._messageClass()) {\n      const MsgClass = constructor._messageClass();\n      return new MsgClass({ content });\n    } else if (constructor.chatMessageClass) {\n      const MsgClass = constructor.chatMessageClass();\n      // Assuming ChatMessage constructor also takes a content argument\n      return new MsgClass({\n        content,\n        role: this.getRoleFromMessageClass(MsgClass.lc_name()),\n      });\n    } else {\n      throw new Error(\"No message class defined\");\n    }\n  }\n\n  getRoleFromMessageClass(name: string) {\n    switch (name) {\n      case \"HumanMessage\":\n        return \"human\";\n      case \"AIMessage\":\n        return \"ai\";\n      case \"SystemMessage\":\n        return \"system\";\n      case \"ChatMessage\":\n        return \"chat\";\n      default:\n        throw new Error(\"Invalid message class name\");\n    }\n  }\n\n  static fromTemplate(\n    template:\n      | string\n      | Array<\n          | string\n          | _TextTemplateParam\n          | _ImageTemplateParam\n          | Record<string, unknown>\n        >,\n    additionalOptions?: _StringImageMessagePromptTemplateOptions\n  ) {\n    if (typeof template === \"string\") {\n      return new this(PromptTemplate.fromTemplate(template, additionalOptions));\n    }\n    const prompt: Array<\n      | PromptTemplate<InputValues>\n      | ImagePromptTemplate<InputValues>\n      | DictPromptTemplate\n    > = [];\n    for (const item of template) {\n      // handle string cases\n      if (typeof item === \"string\") {\n        prompt.push(PromptTemplate.fromTemplate(item, additionalOptions));\n      } else if (item === null) {\n        // pass\n      } else if (isTextTemplateParam(item)) {\n        let text = \"\";\n        if (typeof item.text === \"string\") {\n          text = item.text ?? \"\";\n        }\n\n        const options = {\n          ...additionalOptions,\n          additionalContentFields: item as ContentBlock,\n        };\n        prompt.push(PromptTemplate.fromTemplate(text, options));\n      } else if (isImageTemplateParam(item)) {\n        let imgTemplate = item.image_url ?? \"\";\n        let imgTemplateObject: ImagePromptTemplate<InputValues>;\n        let inputVariables: string[] = [];\n        if (typeof imgTemplate === \"string\") {\n          let parsedTemplate: ParsedTemplateNode[];\n          if (additionalOptions?.templateFormat === \"mustache\") {\n            parsedTemplate = parseMustache(imgTemplate);\n          } else {\n            parsedTemplate = parseFString(imgTemplate);\n          }\n\n          const variables = parsedTemplate.flatMap((item) =>\n            item.type === \"variable\" ? [item.name] : []\n          );\n\n          if ((variables?.length ?? 0) > 0) {\n            if (variables.length > 1) {\n              throw new Error(\n                `Only one format variable allowed per image template.\\nGot: ${variables}\\nFrom: ${imgTemplate}`\n              );\n            }\n            inputVariables = [variables[0]];\n          } else {\n            inputVariables = [];\n          }\n\n          imgTemplate = { url: imgTemplate };\n          imgTemplateObject = new ImagePromptTemplate<InputValues>({\n            template: imgTemplate,\n            inputVariables,\n            templateFormat: additionalOptions?.templateFormat,\n            additionalContentFields: item as ContentBlock,\n          });\n        } else if (typeof imgTemplate === \"object\") {\n          if (\"url\" in imgTemplate) {\n            let parsedTemplate: ParsedTemplateNode[];\n            if (additionalOptions?.templateFormat === \"mustache\") {\n              parsedTemplate = parseMustache(imgTemplate.url);\n            } else {\n              parsedTemplate = parseFString(imgTemplate.url);\n            }\n\n            inputVariables = parsedTemplate.flatMap((item) =>\n              item.type === \"variable\" ? [item.name] : []\n            );\n          } else {\n            inputVariables = [];\n          }\n          imgTemplateObject = new ImagePromptTemplate<InputValues>({\n            template: imgTemplate,\n            inputVariables,\n            templateFormat: additionalOptions?.templateFormat,\n            additionalContentFields: item as ContentBlock,\n          });\n        } else {\n          throw new Error(\"Invalid image template\");\n        }\n        prompt.push(imgTemplateObject);\n      } else if (typeof item === \"object\") {\n        prompt.push(\n          new DictPromptTemplate({\n            template: item,\n            templateFormat: additionalOptions?.templateFormat,\n          })\n        );\n      }\n    }\n    return new this({ prompt, additionalOptions });\n  }\n\n  async format(input: TypedPromptInputValues<RunInput>): Promise<BaseMessage> {\n    // eslint-disable-next-line no-instanceof/no-instanceof\n    if (this.prompt instanceof BaseStringPromptTemplate) {\n      const text = await this.prompt.format(input);\n\n      return this.createMessage(text);\n    } else {\n      const content: MessageContent = [];\n      for (const prompt of this.prompt) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        let inputs: Record<string, any> = {};\n        if (!(\"inputVariables\" in prompt)) {\n          throw new Error(\n            `Prompt ${prompt} does not have inputVariables defined.`\n          );\n        }\n        for (const item of prompt.inputVariables) {\n          if (!inputs) {\n            inputs = { [item]: input[item] };\n          }\n          inputs = { ...inputs, [item]: input[item] };\n        }\n        // eslint-disable-next-line no-instanceof/no-instanceof\n        if (prompt instanceof BaseStringPromptTemplate) {\n          const formatted = await prompt.format(\n            inputs as TypedPromptInputValues<RunInput>\n          );\n          let additionalContentFields: ContentBlock | undefined;\n          if (\"additionalContentFields\" in prompt) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            additionalContentFields = prompt.additionalContentFields as any;\n          }\n          if (formatted !== \"\") {\n            content.push({\n              ...additionalContentFields,\n              type: \"text\",\n              text: formatted,\n            });\n          }\n          /** @TODO replace this */\n          // eslint-disable-next-line no-instanceof/no-instanceof\n        } else if (prompt instanceof ImagePromptTemplate) {\n          const formatted = await prompt.format(\n            inputs as TypedPromptInputValues<RunInput>\n          );\n          let additionalContentFields: ContentBlock | undefined;\n          if (\"additionalContentFields\" in prompt) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            additionalContentFields = prompt.additionalContentFields as any;\n          }\n          content.push({\n            ...additionalContentFields,\n            type: \"image_url\",\n            image_url: formatted,\n          });\n          // eslint-disable-next-line no-instanceof/no-instanceof\n        } else if (prompt instanceof DictPromptTemplate) {\n          const formatted = await prompt.format(\n            inputs as TypedPromptInputValues<RunInput>\n          );\n          let additionalContentFields: ContentBlock | undefined;\n          if (\"additionalContentFields\" in prompt) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            additionalContentFields = prompt.additionalContentFields as any;\n          }\n          content.push({\n            ...additionalContentFields,\n            ...formatted,\n          } as ContentBlock);\n        }\n      }\n      return this.createMessage(content);\n    }\n  }\n\n  async formatMessages(values: RunInput): Promise<RunOutput> {\n    return [await this.format(values)] as BaseMessage[] as RunOutput;\n  }\n}\n\n/**\n * Class that represents a human message prompt template. It extends the\n * BaseMessageStringPromptTemplate.\n * @example\n * ```typescript\n * const message = HumanMessagePromptTemplate.fromTemplate(\"{text}\");\n * const formatted = await message.format({ text: \"Hello world!\" });\n *\n * const chatPrompt = ChatPromptTemplate.fromMessages([message]);\n * const formattedChatPrompt = await chatPrompt.invoke({\n *   text: \"Hello world!\",\n * });\n * ```\n */\nexport class HumanMessagePromptTemplate<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  RunInput extends InputValues = any\n> extends _StringImageMessagePromptTemplate<RunInput> {\n  static _messageClass(): typeof HumanMessage {\n    return HumanMessage;\n  }\n\n  static lc_name() {\n    return \"HumanMessagePromptTemplate\";\n  }\n}\n\n/**\n * Class that represents an AI message prompt template. It extends the\n * BaseMessageStringPromptTemplate.\n */\nexport class AIMessagePromptTemplate<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  RunInput extends InputValues = any\n> extends _StringImageMessagePromptTemplate<RunInput> {\n  static _messageClass(): typeof AIMessage {\n    return AIMessage;\n  }\n\n  static lc_name() {\n    return \"AIMessagePromptTemplate\";\n  }\n}\n\n/**\n * Class that represents a system message prompt template. It extends the\n * BaseMessageStringPromptTemplate.\n * @example\n * ```typescript\n * const message = SystemMessagePromptTemplate.fromTemplate(\"{text}\");\n * const formatted = await message.format({ text: \"Hello world!\" });\n *\n * const chatPrompt = ChatPromptTemplate.fromMessages([message]);\n * const formattedChatPrompt = await chatPrompt.invoke({\n *   text: \"Hello world!\",\n * });\n * ```\n */\nexport class SystemMessagePromptTemplate<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  RunInput extends InputValues = any\n> extends _StringImageMessagePromptTemplate<RunInput> {\n  static _messageClass(): typeof SystemMessage {\n    return SystemMessage;\n  }\n\n  static lc_name() {\n    return \"SystemMessagePromptTemplate\";\n  }\n}\n\n/**\n * Interface for the input of a ChatPromptTemplate.\n */\nexport interface ChatPromptTemplateInput<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  RunInput extends InputValues = any,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  PartialVariableName extends string = any\n> extends BasePromptTemplateInput<RunInput, PartialVariableName> {\n  /**\n   * The prompt messages\n   */\n  promptMessages: Array<BaseMessagePromptTemplate | BaseMessage>;\n\n  /**\n   * Whether to try validating the template on initialization\n   *\n   * @defaultValue `true`\n   */\n  validateTemplate?: boolean;\n\n  /**\n   * The formatting method to use on the prompt.\n   * @default \"f-string\"\n   */\n  templateFormat?: TemplateFormat;\n}\n\nexport type BaseMessagePromptTemplateLike =\n  | BaseMessagePromptTemplate\n  | BaseMessageLike;\n\nfunction _isBaseMessagePromptTemplate(\n  baseMessagePromptTemplateLike: BaseMessagePromptTemplateLike\n): baseMessagePromptTemplateLike is BaseMessagePromptTemplate {\n  return (\n    typeof (baseMessagePromptTemplateLike as BaseMessagePromptTemplate)\n      .formatMessages === \"function\"\n  );\n}\n\nfunction _coerceMessagePromptTemplateLike<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  RunInput extends InputValues = any,\n  Extra extends Omit<\n    ChatPromptTemplateInput<RunInput>,\n    \"inputVariables\" | \"promptMessages\" | \"partialVariables\"\n  > = Omit<\n    ChatPromptTemplateInput<RunInput>,\n    \"inputVariables\" | \"promptMessages\" | \"partialVariables\"\n  >\n>(\n  messagePromptTemplateLike: BaseMessagePromptTemplateLike,\n  extra?: Extra\n): BaseMessagePromptTemplate | BaseMessage {\n  if (\n    _isBaseMessagePromptTemplate(messagePromptTemplateLike) ||\n    isBaseMessage(messagePromptTemplateLike)\n  ) {\n    return messagePromptTemplateLike;\n  }\n  if (\n    Array.isArray(messagePromptTemplateLike) &&\n    messagePromptTemplateLike[0] === \"placeholder\"\n  ) {\n    const messageContent = messagePromptTemplateLike[1];\n    if (\n      extra?.templateFormat === \"mustache\" &&\n      typeof messageContent === \"string\" &&\n      messageContent.slice(0, 2) === \"{{\" &&\n      messageContent.slice(-2) === \"}}\"\n    ) {\n      const variableName = messageContent.slice(2, -2);\n      return new MessagesPlaceholder({ variableName, optional: true });\n    } else if (\n      typeof messageContent === \"string\" &&\n      messageContent[0] === \"{\" &&\n      messageContent[messageContent.length - 1] === \"}\"\n    ) {\n      const variableName = messageContent.slice(1, -1);\n      return new MessagesPlaceholder({ variableName, optional: true });\n    }\n    throw new Error(\n      `Invalid placeholder template for format ${\n        extra?.templateFormat ?? `\"f-string\"`\n      }: \"${\n        messagePromptTemplateLike[1]\n      }\". Expected a variable name surrounded by ${\n        extra?.templateFormat === \"mustache\" ? \"double\" : \"single\"\n      } curly braces.`\n    );\n  }\n  const message = coerceMessageLikeToMessage(messagePromptTemplateLike);\n  let templateData:\n    | string\n    | (\n        | string\n        | _TextTemplateParam\n        | _ImageTemplateParam\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        | Record<string, any>\n      )[];\n\n  if (typeof message.content === \"string\") {\n    templateData = message.content;\n  } else {\n    // Assuming message.content is an array of complex objects, transform it.\n    templateData = message.content.map((item) => {\n      if (\"text\" in item) {\n        return { ...item, text: item.text };\n      } else if (\"image_url\" in item) {\n        return { ...item, image_url: item.image_url };\n      } else {\n        return item;\n      }\n    });\n  }\n\n  if (message._getType() === \"human\") {\n    return HumanMessagePromptTemplate.fromTemplate(templateData, extra);\n  } else if (message._getType() === \"ai\") {\n    return AIMessagePromptTemplate.fromTemplate(templateData, extra);\n  } else if (message._getType() === \"system\") {\n    return SystemMessagePromptTemplate.fromTemplate(templateData, extra);\n  } else if (ChatMessage.isInstance(message)) {\n    return ChatMessagePromptTemplate.fromTemplate(\n      message.content as string,\n      message.role,\n      extra\n    );\n  } else {\n    throw new Error(\n      `Could not coerce message prompt template from input. Received message type: \"${message._getType()}\".`\n    );\n  }\n}\n\nfunction isMessagesPlaceholder(\n  x: BaseMessagePromptTemplate | BaseMessage\n): x is MessagesPlaceholder {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return (x.constructor as any).lc_name() === \"MessagesPlaceholder\";\n}\n\n/**\n * Class that represents a chat prompt. It extends the\n * BaseChatPromptTemplate and uses an array of BaseMessagePromptTemplate\n * instances to format a series of messages for a conversation.\n * @example\n * ```typescript\n * const message = SystemMessagePromptTemplate.fromTemplate(\"{text}\");\n * const chatPrompt = ChatPromptTemplate.fromMessages([\n *   [\"ai\", \"You are a helpful assistant.\"],\n *   message,\n * ]);\n * const formattedChatPrompt = await chatPrompt.invoke({\n *   text: \"Hello world!\",\n * });\n * ```\n */\nexport class ChatPromptTemplate<\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    RunInput extends InputValues = any,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    PartialVariableName extends string = any\n  >\n  extends BaseChatPromptTemplate<RunInput, PartialVariableName>\n  implements ChatPromptTemplateInput<RunInput, PartialVariableName>\n{\n  static lc_name() {\n    return \"ChatPromptTemplate\";\n  }\n\n  get lc_aliases(): Record<string, string> {\n    return {\n      promptMessages: \"messages\",\n    };\n  }\n\n  promptMessages: Array<BaseMessagePromptTemplate | BaseMessage>;\n\n  validateTemplate = true;\n\n  templateFormat: TemplateFormat = \"f-string\";\n\n  constructor(input: ChatPromptTemplateInput<RunInput, PartialVariableName>) {\n    super(input);\n    // If input is mustache and validateTemplate is not defined, set it to false\n    if (\n      input.templateFormat === \"mustache\" &&\n      input.validateTemplate === undefined\n    ) {\n      this.validateTemplate = false;\n    }\n    Object.assign(this, input);\n\n    if (this.validateTemplate) {\n      const inputVariablesMessages = new Set<string>();\n      for (const promptMessage of this.promptMessages) {\n        // eslint-disable-next-line no-instanceof/no-instanceof\n        if (promptMessage instanceof BaseMessage) continue;\n        for (const inputVariable of promptMessage.inputVariables) {\n          inputVariablesMessages.add(inputVariable);\n        }\n      }\n\n      const totalInputVariables = this.inputVariables as string[];\n      const inputVariablesInstance = new Set(\n        this.partialVariables\n          ? totalInputVariables.concat(Object.keys(this.partialVariables))\n          : totalInputVariables\n      );\n      const difference = new Set(\n        [...inputVariablesInstance].filter(\n          (x) => !inputVariablesMessages.has(x)\n        )\n      );\n      if (difference.size > 0) {\n        throw new Error(\n          `Input variables \\`${[\n            ...difference,\n          ]}\\` are not used in any of the prompt messages.`\n        );\n      }\n      const otherDifference = new Set(\n        [...inputVariablesMessages].filter(\n          (x) => !inputVariablesInstance.has(x)\n        )\n      );\n      if (otherDifference.size > 0) {\n        throw new Error(\n          `Input variables \\`${[\n            ...otherDifference,\n          ]}\\` are used in prompt messages but not in the prompt template.`\n        );\n      }\n    }\n  }\n\n  _getPromptType(): \"chat\" {\n    return \"chat\";\n  }\n\n  private async _parseImagePrompts(\n    message: BaseMessage,\n    inputValues: InputValues<\n      PartialVariableName | Extract<keyof RunInput, string>\n    >\n  ): Promise<BaseMessage> {\n    if (typeof message.content === \"string\") {\n      return message;\n    }\n    const formattedMessageContent = await Promise.all(\n      message.content.map(async (item) => {\n        if (item.type !== \"image_url\") {\n          return item;\n        }\n\n        let imageUrl = \"\";\n        if (typeof item.image_url === \"string\") {\n          imageUrl = item.image_url;\n        } else if (\n          typeof item.image_url === \"object\" &&\n          item.image_url !== null &&\n          \"url\" in item.image_url &&\n          typeof item.image_url.url === \"string\"\n        ) {\n          imageUrl = item.image_url.url;\n        }\n\n        const promptTemplatePlaceholder = PromptTemplate.fromTemplate(\n          imageUrl,\n          {\n            templateFormat: this.templateFormat,\n          }\n        );\n        const formattedUrl = await promptTemplatePlaceholder.format(\n          inputValues\n        );\n\n        if (\n          typeof item.image_url === \"object\" &&\n          item.image_url !== null &&\n          \"url\" in item.image_url\n        ) {\n          // eslint-disable-next-line no-param-reassign\n          item.image_url.url = formattedUrl;\n        } else {\n          item.image_url = formattedUrl;\n        }\n        return item;\n      })\n    );\n    message.content = formattedMessageContent;\n    return message;\n  }\n\n  async formatMessages(\n    values: TypedPromptInputValues<RunInput>\n  ): Promise<BaseMessage[]> {\n    const allValues = await this.mergePartialAndUserVariables(values);\n    let resultMessages: BaseMessage[] = [];\n\n    for (const promptMessage of this.promptMessages) {\n      // eslint-disable-next-line no-instanceof/no-instanceof\n      if (promptMessage instanceof BaseMessage) {\n        resultMessages.push(\n          await this._parseImagePrompts(promptMessage, allValues)\n        );\n      } else {\n        let inputValues: InputValues;\n\n        if (this.templateFormat === \"mustache\") {\n          inputValues = { ...allValues };\n        } else {\n          inputValues = promptMessage.inputVariables.reduce(\n            (acc, inputVariable) => {\n              if (\n                !(inputVariable in allValues) &&\n                !(\n                  isMessagesPlaceholder(promptMessage) && promptMessage.optional\n                )\n              ) {\n                const error = addLangChainErrorFields(\n                  new Error(\n                    `Missing value for input variable \\`${inputVariable.toString()}\\``\n                  ),\n                  \"INVALID_PROMPT_INPUT\"\n                );\n                throw error;\n              }\n              acc[inputVariable] = allValues[inputVariable];\n              return acc;\n            },\n            {} as InputValues\n          );\n        }\n        const message = await promptMessage.formatMessages(inputValues);\n        resultMessages = resultMessages.concat(message);\n      }\n    }\n    return resultMessages;\n  }\n\n  async partial<NewPartialVariableName extends string>(\n    values: PartialValues<NewPartialVariableName>\n  ) {\n    // This is implemented in a way it doesn't require making\n    // BaseMessagePromptTemplate aware of .partial()\n    const newInputVariables = this.inputVariables.filter(\n      (iv) => !(iv in values)\n    ) as Exclude<Extract<keyof RunInput, string>, NewPartialVariableName>[];\n    const newPartialVariables = {\n      ...(this.partialVariables ?? {}),\n      ...values,\n    } as PartialValues<PartialVariableName | NewPartialVariableName>;\n    const promptDict = {\n      ...this,\n      inputVariables: newInputVariables,\n      partialVariables: newPartialVariables,\n    };\n    return new ChatPromptTemplate<\n      InputValues<\n        Exclude<Extract<keyof RunInput, string>, NewPartialVariableName>\n      >\n    >(promptDict);\n  }\n\n  /**\n   * Load prompt template from a template f-string\n   */\n  static fromTemplate<\n    RunInput extends InputValues = Symbol,\n    T extends string = string\n  >(\n    template: T,\n    options?: Omit<\n      PromptTemplateInput<RunInput, string, \"f-string\">,\n      \"template\" | \"inputVariables\"\n    >\n  ): ChatPromptTemplate<ExtractedFStringParams<T, RunInput>>;\n\n  static fromTemplate<\n    RunInput extends InputValues = Symbol,\n    T extends string = string\n  >(\n    template: T,\n    options?: Omit<\n      PromptTemplateInput<RunInput, string>,\n      \"template\" | \"inputVariables\"\n    >\n  ): ChatPromptTemplate<ExtractedFStringParams<T, RunInput>>;\n\n  static fromTemplate<\n    RunInput extends InputValues = Symbol,\n    T extends string = string\n  >(\n    template: T,\n    options?: Omit<\n      PromptTemplateInput<RunInput, string, \"mustache\">,\n      \"template\" | \"inputVariables\"\n    >\n  ): ChatPromptTemplate<InputValues>;\n\n  static fromTemplate<\n    RunInput extends InputValues = Symbol,\n    T extends string = string\n  >(\n    template: T,\n    options?: Omit<\n      PromptTemplateInput<RunInput, string, TemplateFormat>,\n      \"template\" | \"inputVariables\"\n    >\n  ): ChatPromptTemplate<ExtractedFStringParams<T, RunInput> | InputValues> {\n    const prompt = PromptTemplate.fromTemplate(template, options);\n    const humanTemplate = new HumanMessagePromptTemplate({ prompt });\n    return this.fromMessages<\n      RunInput extends Symbol ? ParamsFromFString<T> : RunInput\n    >([humanTemplate]);\n  }\n\n  /**\n   * Create a chat model-specific prompt from individual chat messages\n   * or message-like tuples.\n   * @param promptMessages Messages to be passed to the chat model\n   * @returns A new ChatPromptTemplate\n   */\n  static fromMessages<\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    RunInput extends InputValues = any,\n    Extra extends ChatPromptTemplateInput<RunInput> = ChatPromptTemplateInput<RunInput>\n  >(\n    promptMessages: (\n      | ChatPromptTemplate<InputValues, string>\n      | BaseMessagePromptTemplateLike\n    )[],\n    extra?: Omit<\n      Extra,\n      \"inputVariables\" | \"promptMessages\" | \"partialVariables\"\n    >\n  ): ChatPromptTemplate<RunInput> {\n    const flattenedMessages = promptMessages.reduce(\n      (acc: Array<BaseMessagePromptTemplate | BaseMessage>, promptMessage) =>\n        acc.concat(\n          // eslint-disable-next-line no-instanceof/no-instanceof\n          promptMessage instanceof ChatPromptTemplate\n            ? promptMessage.promptMessages\n            : [\n                _coerceMessagePromptTemplateLike<\n                  RunInput,\n                  Omit<\n                    Extra,\n                    \"inputVariables\" | \"promptMessages\" | \"partialVariables\"\n                  >\n                >(promptMessage, extra),\n              ]\n        ),\n      []\n    );\n    const flattenedPartialVariables = promptMessages.reduce(\n      (acc, promptMessage) =>\n        // eslint-disable-next-line no-instanceof/no-instanceof\n        promptMessage instanceof ChatPromptTemplate\n          ? Object.assign(acc, promptMessage.partialVariables)\n          : acc,\n      Object.create(null) as PartialValues\n    );\n    const inputVariables = new Set<string>();\n    for (const promptMessage of flattenedMessages) {\n      // eslint-disable-next-line no-instanceof/no-instanceof\n      if (promptMessage instanceof BaseMessage) continue;\n      for (const inputVariable of promptMessage.inputVariables) {\n        if (inputVariable in flattenedPartialVariables) {\n          continue;\n        }\n        inputVariables.add(inputVariable);\n      }\n    }\n    return new this<RunInput>({\n      ...extra,\n      inputVariables: [...inputVariables] as Extract<keyof RunInput, string>[],\n      promptMessages: flattenedMessages,\n      partialVariables: flattenedPartialVariables,\n      templateFormat: extra?.templateFormat,\n    });\n  }\n}\n"],"mappings":"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"}