{"version":3,"file":"conditional.cjs","names":[],"sources":["../../src/example_selectors/conditional.ts"],"sourcesContent":["import type { BaseChatModel } from \"../language_models/chat_models.js\";\nimport type { BasePromptTemplate } from \"../prompts/base.js\";\nimport type { BaseLanguageModelInterface } from \"../language_models/base.js\";\nimport type { BaseLLM } from \"../language_models/llms.js\";\nimport type { PartialValues } from \"../utils/types/index.js\";\n\nexport type BaseGetPromptAsyncOptions = {\n  partialVariables?: PartialValues;\n};\n\n/**\n * Abstract class that defines the interface for selecting a prompt for a\n * given language model.\n */\nexport abstract class BasePromptSelector {\n  /**\n   * Abstract method that must be implemented by any class that extends\n   * `BasePromptSelector`. It takes a language model as an argument and\n   * returns a prompt template.\n   * @param llm The language model for which to get a prompt.\n   * @returns A prompt template.\n   */\n  abstract getPrompt(llm: BaseLanguageModelInterface): BasePromptTemplate;\n\n  /**\n   * Asynchronous version of `getPrompt` that also accepts an options object\n   * for partial variables.\n   * @param llm The language model for which to get a prompt.\n   * @param options Optional object for partial variables.\n   * @returns A Promise that resolves to a prompt template.\n   */\n  async getPromptAsync(\n    llm: BaseLanguageModelInterface,\n    options?: BaseGetPromptAsyncOptions\n  ): Promise<BasePromptTemplate> {\n    const prompt = this.getPrompt(llm);\n    return prompt.partial(options?.partialVariables ?? {});\n  }\n}\n\n/**\n * Concrete implementation of `BasePromptSelector` that selects a prompt\n * based on a set of conditions. It has a default prompt that it returns\n * if none of the conditions are met.\n */\nexport class ConditionalPromptSelector extends BasePromptSelector {\n  defaultPrompt: BasePromptTemplate;\n\n  conditionals: Array<\n    [\n      condition: (llm: BaseLanguageModelInterface) => boolean,\n      prompt: BasePromptTemplate,\n    ]\n  >;\n\n  constructor(\n    default_prompt: BasePromptTemplate,\n    conditionals: Array<\n      [\n        condition: (llm: BaseLanguageModelInterface) => boolean,\n        prompt: BasePromptTemplate,\n      ]\n    > = []\n  ) {\n    super();\n    this.defaultPrompt = default_prompt;\n    this.conditionals = conditionals;\n  }\n\n  /**\n   * Method that selects a prompt based on a set of conditions. If none of\n   * the conditions are met, it returns the default prompt.\n   * @param llm The language model for which to get a prompt.\n   * @returns A prompt template.\n   */\n  getPrompt(llm: BaseLanguageModelInterface): BasePromptTemplate {\n    for (const [condition, prompt] of this.conditionals) {\n      if (condition(llm)) {\n        return prompt;\n      }\n    }\n    return this.defaultPrompt;\n  }\n}\n\n/**\n * Type guard function that checks if a given language model is of type\n * `BaseLLM`.\n */\nexport function isLLM(llm: BaseLanguageModelInterface): llm is BaseLLM {\n  return llm._modelType() === \"base_llm\";\n}\n\n/**\n * Type guard function that checks if a given language model is of type\n * `BaseChatModel`.\n */\nexport function isChatModel(\n  llm: BaseLanguageModelInterface\n): llm is BaseChatModel {\n  return llm._modelType() === \"base_chat_model\";\n}\n"],"mappings":";;;;;AAcA,IAAsB,qBAAtB,MAAyC;;;;;;;;CAiBvC,MAAM,eACJ,KACA,SAC6B;AAE7B,SADe,KAAK,UAAU,IAAI,CACpB,QAAQ,SAAS,oBAAoB,EAAE,CAAC;;;;;;;;AAS1D,IAAa,4BAAb,cAA+C,mBAAmB;CAChE;CAEA;CAOA,YACE,gBACA,eAKI,EAAE,EACN;AACA,SAAO;AACP,OAAK,gBAAgB;AACrB,OAAK,eAAe;;;;;;;;CAStB,UAAU,KAAqD;AAC7D,OAAK,MAAM,CAAC,WAAW,WAAW,KAAK,aACrC,KAAI,UAAU,IAAI,CAChB,QAAO;AAGX,SAAO,KAAK;;;;;;;AAQhB,SAAgB,MAAM,KAAiD;AACrE,QAAO,IAAI,YAAY,KAAK;;;;;;AAO9B,SAAgB,YACd,KACsB;AACtB,QAAO,IAAI,YAAY,KAAK"}