{"version":3,"file":"index.cjs","names":["basePull","bindOutputSchema","load","generateOptionalImportMap","generateModelImportMap"],"sources":["../../src/hub/index.ts"],"sourcesContent":["import { Runnable } from \"@langchain/core/runnables\";\nimport type { BaseLanguageModel } from \"@langchain/core/language_models/base\";\nimport { load } from \"../load/index.js\";\nimport {\n  basePush,\n  basePull,\n  generateModelImportMap,\n  generateOptionalImportMap,\n  bindOutputSchema,\n} from \"./base.js\";\n\nexport { basePush as push };\n\n/**\n * Pull a prompt from the hub.\n *\n * @param ownerRepoCommit The name of the repo containing the prompt, as well as an optional commit hash separated by a slash.\n * @param options.apiKey LangSmith API key to use when pulling the prompt\n * @param options.apiUrl LangSmith API URL to use when pulling the prompt\n * @param options.includeModel Whether to also instantiate and attach a model instance to the prompt,\n *   if the prompt has associated model metadata. If set to true, invoking the resulting pulled prompt will\n *   also invoke the instantiated model. For non-OpenAI models, you must also set \"modelClass\" to the\n *   correct class of the model.\n * @param options.modelClass If includeModel is true, the class of the model to instantiate. Required\n *   for non-OpenAI models. If you are running in Node or another environment that supports dynamic imports,\n *   you may instead import this function from \"langchain/hub/node\" and pass \"includeModel: true\" instead\n *   of specifying this parameter.\n * @param options.secrets A map of secrets to use when loading, e.g.\n *   {'OPENAI_API_KEY': 'sk-...'}`.\n *   If a secret is not found in the map, it will be loaded from the\n *   environment if `secrets_from_env` is `True`. Should only be needed when\n *   `includeModel` is `true`.\n * @param options.secretsFromEnv Whether to load secrets from environment variables.\n *   Use with caution and only with trusted prompts.\n * @returns\n */\nexport async function pull<T extends Runnable>(\n  ownerRepoCommit: string,\n  options?: {\n    apiKey?: string;\n    apiUrl?: string;\n    includeModel?: boolean;\n    // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n    modelClass?: new (...args: any[]) => BaseLanguageModel;\n    secrets?: Record<string, string>;\n    secretsFromEnv?: boolean;\n  }\n) {\n  const promptObject = await basePull(ownerRepoCommit, options);\n  try {\n    const loadedPrompt = await load<T>(\n      JSON.stringify(promptObject.manifest),\n      options?.secrets,\n      generateOptionalImportMap(options?.modelClass),\n      generateModelImportMap(options?.modelClass),\n      options?.secretsFromEnv\n    );\n    return bindOutputSchema(loadedPrompt);\n    // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  } catch (e: any) {\n    if (options?.includeModel) {\n      throw new Error(\n        [\n          e.message,\n          \"\",\n          `To load prompts with an associated non-OpenAI model, you must use the \"langchain/hub/node\" entrypoint, or pass a \"modelClass\" parameter like this:`,\n          \"\",\n          \"```\",\n          `import { pull } from \"langchain/hub\";`,\n          `import { ChatAnthropic } from \"@langchain/anthropic\";`,\n          \"\",\n          `const prompt = await pull(\"my-prompt\", {`,\n          `  includeModel: true,`,\n          `  modelClass: ChatAnthropic,`,\n          `});`,\n          \"```\",\n        ].join(\"\\n\")\n      );\n    } else {\n      throw e;\n    }\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,eAAsB,KACpB,iBACA,SASA;CACA,MAAM,eAAe,MAAMA,aAAAA,SAAS,iBAAiB,QAAQ;AAC7D,KAAI;AAQF,SAAOC,aAAAA,iBAPc,MAAMC,mBAAAA,KACzB,KAAK,UAAU,aAAa,SAAS,EACrC,SAAS,SACTC,aAAAA,0BAA0B,SAAS,WAAW,EAC9CC,aAAAA,uBAAuB,SAAS,WAAW,EAC3C,SAAS,eACV,CACoC;UAE9B,GAAQ;AACf,MAAI,SAAS,aACX,OAAM,IAAI,MACR;GACE,EAAE;GACF;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,KAAK,KAAK,CACb;MAED,OAAM"}