@langchain/core 1.2.9 → 1.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/_virtual/_rolldown/runtime.cjs +1 -1
  3. package/dist/callbacks/dispatch/index.cjs +2 -1
  4. package/dist/callbacks/dispatch/index.cjs.map +1 -1
  5. package/dist/callbacks/dispatch/index.js +2 -1
  6. package/dist/callbacks/dispatch/index.js.map +1 -1
  7. package/dist/indexing/base.cjs +10 -6
  8. package/dist/indexing/base.cjs.map +1 -1
  9. package/dist/indexing/base.js +10 -6
  10. package/dist/indexing/base.js.map +1 -1
  11. package/dist/language_models/base.cjs +1 -1
  12. package/dist/language_models/base.cjs.map +1 -1
  13. package/dist/language_models/base.js +1 -1
  14. package/dist/language_models/base.js.map +1 -1
  15. package/dist/language_models/chat_models.cjs +10 -5
  16. package/dist/language_models/chat_models.cjs.map +1 -1
  17. package/dist/language_models/chat_models.js +10 -5
  18. package/dist/language_models/chat_models.js.map +1 -1
  19. package/dist/language_models/stream.cjs +0 -2
  20. package/dist/language_models/stream.cjs.map +1 -1
  21. package/dist/language_models/stream.js +0 -2
  22. package/dist/language_models/stream.js.map +1 -1
  23. package/dist/load/index.cjs +7 -5
  24. package/dist/load/index.cjs.map +1 -1
  25. package/dist/load/index.js +7 -5
  26. package/dist/load/index.js.map +1 -1
  27. package/dist/load/serializable.cjs +2 -1
  28. package/dist/load/serializable.cjs.map +1 -1
  29. package/dist/load/serializable.js +2 -1
  30. package/dist/load/serializable.js.map +1 -1
  31. package/dist/load/validation.cjs +4 -3
  32. package/dist/load/validation.cjs.map +1 -1
  33. package/dist/load/validation.js +4 -3
  34. package/dist/load/validation.js.map +1 -1
  35. package/dist/messages/base.cjs +13 -18
  36. package/dist/messages/base.cjs.map +1 -1
  37. package/dist/messages/base.d.cts.map +1 -1
  38. package/dist/messages/base.d.ts.map +1 -1
  39. package/dist/messages/base.js +13 -18
  40. package/dist/messages/base.js.map +1 -1
  41. package/dist/messages/block_translators/anthropic.cjs.map +1 -1
  42. package/dist/messages/block_translators/anthropic.js.map +1 -1
  43. package/dist/messages/block_translators/google.cjs +10 -9
  44. package/dist/messages/block_translators/google.cjs.map +1 -1
  45. package/dist/messages/block_translators/google.js +10 -9
  46. package/dist/messages/block_translators/google.js.map +1 -1
  47. package/dist/messages/block_translators/google_vertexai.cjs +14 -12
  48. package/dist/messages/block_translators/google_vertexai.cjs.map +1 -1
  49. package/dist/messages/block_translators/google_vertexai.js +14 -12
  50. package/dist/messages/block_translators/google_vertexai.js.map +1 -1
  51. package/dist/messages/message.cjs.map +1 -1
  52. package/dist/messages/message.d.cts.map +1 -1
  53. package/dist/messages/message.d.ts.map +1 -1
  54. package/dist/messages/message.js.map +1 -1
  55. package/dist/messages/transformers.cjs +12 -8
  56. package/dist/messages/transformers.cjs.map +1 -1
  57. package/dist/messages/transformers.js +12 -8
  58. package/dist/messages/transformers.js.map +1 -1
  59. package/dist/output_parsers/transform.cjs.map +1 -1
  60. package/dist/prompts/chat.cjs +2 -1
  61. package/dist/prompts/chat.cjs.map +1 -1
  62. package/dist/prompts/chat.js +2 -1
  63. package/dist/prompts/chat.js.map +1 -1
  64. package/dist/prompts/few_shot.cjs +6 -4
  65. package/dist/prompts/few_shot.cjs.map +1 -1
  66. package/dist/prompts/few_shot.js +6 -4
  67. package/dist/prompts/few_shot.js.map +1 -1
  68. package/dist/prompts/image.cjs +2 -1
  69. package/dist/prompts/image.cjs.map +1 -1
  70. package/dist/prompts/image.js +2 -1
  71. package/dist/prompts/image.js.map +1 -1
  72. package/dist/prompts/prompt.cjs.map +1 -1
  73. package/dist/prompts/prompt.d.cts.map +1 -1
  74. package/dist/prompts/prompt.d.ts.map +1 -1
  75. package/dist/prompts/prompt.js.map +1 -1
  76. package/dist/prompts/string.cjs +2 -1
  77. package/dist/prompts/string.cjs.map +1 -1
  78. package/dist/prompts/string.js +2 -1
  79. package/dist/prompts/string.js.map +1 -1
  80. package/dist/prompts/template.cjs.map +1 -1
  81. package/dist/prompts/template.js.map +1 -1
  82. package/dist/runnables/base.cjs +60 -40
  83. package/dist/runnables/base.cjs.map +1 -1
  84. package/dist/runnables/base.js +60 -40
  85. package/dist/runnables/base.js.map +1 -1
  86. package/dist/runnables/branch.cjs +16 -12
  87. package/dist/runnables/branch.cjs.map +1 -1
  88. package/dist/runnables/branch.js +16 -12
  89. package/dist/runnables/branch.js.map +1 -1
  90. package/dist/runnables/config.cjs +28 -23
  91. package/dist/runnables/config.cjs.map +1 -1
  92. package/dist/runnables/config.js +28 -23
  93. package/dist/runnables/config.js.map +1 -1
  94. package/dist/runnables/graph.cjs +2 -1
  95. package/dist/runnables/graph.cjs.map +1 -1
  96. package/dist/runnables/graph.js +2 -1
  97. package/dist/runnables/graph.js.map +1 -1
  98. package/dist/runnables/passthrough.cjs +8 -6
  99. package/dist/runnables/passthrough.cjs.map +1 -1
  100. package/dist/runnables/passthrough.js +8 -6
  101. package/dist/runnables/passthrough.js.map +1 -1
  102. package/dist/singletons/async_local_storage/context.cjs.map +1 -1
  103. package/dist/singletons/tracer.cjs +4 -1
  104. package/dist/singletons/tracer.cjs.map +1 -1
  105. package/dist/singletons/tracer.js +4 -1
  106. package/dist/singletons/tracer.js.map +1 -1
  107. package/dist/tools/index.cjs +22 -20
  108. package/dist/tools/index.cjs.map +1 -1
  109. package/dist/tools/index.js +22 -20
  110. package/dist/tools/index.js.map +1 -1
  111. package/dist/tracers/base.cjs +11 -10
  112. package/dist/tracers/base.cjs.map +1 -1
  113. package/dist/tracers/base.js +11 -10
  114. package/dist/tracers/base.js.map +1 -1
  115. package/dist/tracers/log_stream.cjs +7 -6
  116. package/dist/tracers/log_stream.cjs.map +1 -1
  117. package/dist/tracers/log_stream.js +7 -6
  118. package/dist/tracers/log_stream.js.map +1 -1
  119. package/dist/tracers/tracer_langchain.cjs.map +1 -1
  120. package/dist/utils/env.cjs.map +1 -1
  121. package/dist/utils/env.d.cts.map +1 -1
  122. package/dist/utils/env.d.ts.map +1 -1
  123. package/dist/utils/env.js.map +1 -1
  124. package/dist/utils/event_source_parse.cjs +1 -3
  125. package/dist/utils/event_source_parse.cjs.map +1 -1
  126. package/dist/utils/event_source_parse.js +1 -3
  127. package/dist/utils/event_source_parse.js.map +1 -1
  128. package/dist/utils/fast-json-patch/src/core.cjs +4 -2
  129. package/dist/utils/fast-json-patch/src/core.cjs.map +1 -1
  130. package/dist/utils/fast-json-patch/src/core.js +4 -2
  131. package/dist/utils/fast-json-patch/src/core.js.map +1 -1
  132. package/dist/utils/fast-json-patch/src/helpers.cjs.map +1 -1
  133. package/dist/utils/fast-json-patch/src/helpers.js.map +1 -1
  134. package/dist/utils/js-sha256/hash.cjs.map +1 -1
  135. package/dist/utils/js-sha256/hash.js.map +1 -1
  136. package/dist/utils/json_schema.cjs +4 -2
  137. package/dist/utils/json_schema.cjs.map +1 -1
  138. package/dist/utils/json_schema.js +4 -2
  139. package/dist/utils/json_schema.js.map +1 -1
  140. package/dist/utils/sax-js/sax.cjs +41 -35
  141. package/dist/utils/sax-js/sax.cjs.map +1 -1
  142. package/dist/utils/sax-js/sax.js +41 -35
  143. package/dist/utils/sax-js/sax.js.map +1 -1
  144. package/dist/utils/testing/chat_models.cjs +2 -1
  145. package/dist/utils/testing/chat_models.cjs.map +1 -1
  146. package/dist/utils/testing/chat_models.js +2 -1
  147. package/dist/utils/testing/chat_models.js.map +1 -1
  148. package/dist/utils/tiktoken.cjs.map +1 -1
  149. package/dist/utils/types/zod.cjs.map +1 -1
  150. package/dist/utils/types/zod.js.map +1 -1
  151. package/dist/utils/zod-to-json-schema/parsers/bigint.cjs +9 -9
  152. package/dist/utils/zod-to-json-schema/parsers/bigint.cjs.map +1 -1
  153. package/dist/utils/zod-to-json-schema/parsers/bigint.js +9 -9
  154. package/dist/utils/zod-to-json-schema/parsers/bigint.js.map +1 -1
  155. package/dist/utils/zod-to-json-schema/parsers/date.cjs +1 -3
  156. package/dist/utils/zod-to-json-schema/parsers/date.cjs.map +1 -1
  157. package/dist/utils/zod-to-json-schema/parsers/date.js +1 -3
  158. package/dist/utils/zod-to-json-schema/parsers/date.js.map +1 -1
  159. package/dist/utils/zod-to-json-schema/parsers/number.cjs +9 -9
  160. package/dist/utils/zod-to-json-schema/parsers/number.cjs.map +1 -1
  161. package/dist/utils/zod-to-json-schema/parsers/number.js +9 -9
  162. package/dist/utils/zod-to-json-schema/parsers/number.js.map +1 -1
  163. package/dist/utils/zod-to-json-schema/parsers/string.cjs +3 -13
  164. package/dist/utils/zod-to-json-schema/parsers/string.cjs.map +1 -1
  165. package/dist/utils/zod-to-json-schema/parsers/string.js +3 -13
  166. package/dist/utils/zod-to-json-schema/parsers/string.js.map +1 -1
  167. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","names":[],"sources":["../../src/prompts/template.ts"],"sourcesContent":["import mustache from \"mustache\";\nimport { MessageContent } from \"../messages/index.js\";\nimport type { InputValues } from \"../utils/types/index.js\";\nimport { addLangChainErrorFields } from \"../errors/index.js\";\n\n// Use unescaped HTML, passed per render call so the shared mustache module\n// keeps escaping for unrelated callers in the same process.\n// https://github.com/janl/mustache.js?tab=readme-ov-file#variables\nconst MUSTACHE_RENDER_OPTIONS: mustache.RenderOptions = {\n escape: (text) => text,\n};\n\n/**\n * Type that specifies the format of a template.\n */\nexport type TemplateFormat = \"f-string\" | \"mustache\";\n\n/**\n * Type that represents a node in a parsed format string. It can be either\n * a literal text or a variable name.\n */\nexport type ParsedTemplateNode =\n | { type: \"literal\"; text: string }\n | { type: \"variable\"; name: string };\n\n/**\n * Alias for `ParsedTemplateNode` since it is the same for\n * both f-string and mustache templates.\n */\nexport type ParsedFStringNode = ParsedTemplateNode;\n\nexport const parseFString = (template: string): ParsedTemplateNode[] => {\n // Core logic replicated from internals of pythons built in Formatter class.\n // https://github.com/python/cpython/blob/135ec7cefbaffd516b77362ad2b2ad1025af462e/Objects/stringlib/unicode_format.h#L700-L706\n const chars = template.split(\"\");\n const nodes: ParsedTemplateNode[] = [];\n\n const nextBracket = (bracket: \"}\" | \"{\" | \"{}\", start: number) => {\n for (let i = start; i < chars.length; i += 1) {\n if (bracket.includes(chars[i])) {\n return i;\n }\n }\n return -1;\n };\n\n let i = 0;\n while (i < chars.length) {\n if (chars[i] === \"{\" && i + 1 < chars.length && chars[i + 1] === \"{\") {\n nodes.push({ type: \"literal\", text: \"{\" });\n i += 2;\n } else if (\n chars[i] === \"}\" &&\n i + 1 < chars.length &&\n chars[i + 1] === \"}\"\n ) {\n nodes.push({ type: \"literal\", text: \"}\" });\n i += 2;\n } else if (chars[i] === \"{\") {\n const j = nextBracket(\"}\", i);\n if (j < 0) {\n throw new Error(\"Unclosed '{' in template.\");\n }\n\n nodes.push({\n type: \"variable\",\n name: chars.slice(i + 1, j).join(\"\"),\n });\n i = j + 1;\n } else if (chars[i] === \"}\") {\n throw new Error(\"Single '}' in template.\");\n } else {\n const next = nextBracket(\"{}\", i);\n const text = (next < 0 ? chars.slice(i) : chars.slice(i, next)).join(\"\");\n nodes.push({ type: \"literal\", text });\n i = next < 0 ? chars.length : next;\n }\n }\n return nodes;\n};\n\n/**\n * Convert the result of mustache.parse into an array of ParsedTemplateNode,\n * to make it compatible with other LangChain string parsing template formats.\n *\n * @param {mustache.TemplateSpans} template The result of parsing a mustache template with the mustache.js library.\n * @param {string[]} context Array of section variable names for nested context\n * @returns {ParsedTemplateNode[]}\n */\nconst mustacheTemplateToNodes = (\n template: mustache.TemplateSpans,\n context: string[] = []\n): ParsedTemplateNode[] => {\n const nodes: ParsedTemplateNode[] = [];\n\n for (const temp of template) {\n if (temp[0] === \"name\") {\n const name = temp[1].includes(\".\") ? temp[1].split(\".\")[0] : temp[1];\n nodes.push({ type: \"variable\", name });\n } else if ([\"#\", \"&\", \"^\", \">\"].includes(temp[0])) {\n // # represents a section, \"&\" represents an unescaped variable.\n // These should both be considered variables.\n nodes.push({ type: \"variable\", name: temp[1] });\n\n // If this is a section with nested content, recursively process it\n if (temp[0] === \"#\" && temp.length > 4 && Array.isArray(temp[4])) {\n const newContext = [...context, temp[1]];\n const nestedNodes = mustacheTemplateToNodes(temp[4], newContext);\n nodes.push(...nestedNodes);\n }\n } else {\n nodes.push({ type: \"literal\", text: temp[1] });\n }\n }\n\n return nodes;\n};\n\nexport const parseMustache = (template: string) => {\n const parsed = mustache.parse(template);\n return mustacheTemplateToNodes(parsed);\n};\n\nexport const interpolateFString = (template: string, values: InputValues) => {\n return parseFString(template).reduce((res, node) => {\n if (node.type === \"variable\") {\n if (node.name in values) {\n const stringValue =\n typeof values[node.name] === \"string\"\n ? values[node.name]\n : JSON.stringify(values[node.name]);\n return res + stringValue;\n }\n throw new Error(`(f-string) Missing value for input ${node.name}`);\n }\n\n return res + node.text;\n }, \"\");\n};\n\nexport const interpolateMustache = (template: string, values: InputValues) => {\n return mustache.render(template, values, undefined, MUSTACHE_RENDER_OPTIONS);\n};\n\n/**\n * Type that represents a function that takes a template string and a set\n * of input values, and returns a string where all variables in the\n * template have been replaced with their corresponding values.\n */\ntype Interpolator = (template: string, values: InputValues) => string;\n\n/**\n * Type that represents a function that takes a template string and\n * returns an array of `ParsedTemplateNode`.\n */\ntype Parser = (template: string) => ParsedTemplateNode[];\n\nexport const DEFAULT_FORMATTER_MAPPING: Record<TemplateFormat, Interpolator> = {\n \"f-string\": interpolateFString,\n mustache: interpolateMustache,\n};\n\nexport const DEFAULT_PARSER_MAPPING: Record<TemplateFormat, Parser> = {\n \"f-string\": parseFString,\n mustache: parseMustache,\n};\n\nexport const renderTemplate = (\n template: string,\n templateFormat: TemplateFormat,\n inputValues: InputValues\n) => {\n try {\n return DEFAULT_FORMATTER_MAPPING[templateFormat](template, inputValues);\n } catch (e) {\n const error = addLangChainErrorFields(e, \"INVALID_PROMPT_INPUT\");\n throw error;\n }\n};\n\nexport const parseTemplate = (\n template: string,\n templateFormat: TemplateFormat\n) => DEFAULT_PARSER_MAPPING[templateFormat](template);\n\nexport const checkValidTemplate = (\n template: MessageContent,\n templateFormat: TemplateFormat,\n inputVariables: string[]\n) => {\n if (!(templateFormat in DEFAULT_FORMATTER_MAPPING)) {\n const validFormats = Object.keys(DEFAULT_FORMATTER_MAPPING);\n throw new Error(`Invalid template format. Got \\`${templateFormat}\\`;\n should be one of ${validFormats}`);\n }\n try {\n // Build dummy inputs using Object.fromEntries to avoid prototype pollution\n // from dynamic property assignment with user-provided keys\n const dummyInputs: InputValues = Object.fromEntries(\n inputVariables.map((v) => [v, \"foo\"])\n );\n if (Array.isArray(template)) {\n template.forEach((message) => {\n if (\n message.type === \"text\" &&\n \"text\" in message &&\n typeof message.text === \"string\"\n ) {\n renderTemplate(message.text, templateFormat, dummyInputs);\n } else if (message.type === \"image_url\") {\n if (typeof message.image_url === \"string\") {\n renderTemplate(message.image_url, templateFormat, dummyInputs);\n } else if (\n typeof message.image_url === \"object\" &&\n message.image_url !== null &&\n \"url\" in message.image_url &&\n typeof message.image_url.url === \"string\"\n ) {\n const imageUrl = message.image_url.url;\n renderTemplate(imageUrl, templateFormat, dummyInputs);\n }\n } else {\n throw new Error(\n `Invalid message template received. ${JSON.stringify(\n message,\n null,\n 2\n )}`\n );\n }\n });\n } else {\n renderTemplate(template, templateFormat, dummyInputs);\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n throw new Error(`Invalid prompt schema: ${e.message}`);\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"template.js","names":[],"sources":["../../src/prompts/template.ts"],"sourcesContent":["import mustache from \"mustache\";\nimport { MessageContent } from \"../messages/index.js\";\nimport type { InputValues } from \"../utils/types/index.js\";\nimport { addLangChainErrorFields } from \"../errors/index.js\";\n\n// Use unescaped HTML, passed per render call so the shared mustache module\n// keeps escaping for unrelated callers in the same process.\n// https://github.com/janl/mustache.js?tab=readme-ov-file#variables\nconst MUSTACHE_RENDER_OPTIONS: mustache.RenderOptions = {\n escape: (text) => text,\n};\n\n/**\n * Type that specifies the format of a template.\n */\nexport type TemplateFormat = \"f-string\" | \"mustache\";\n\n/**\n * Type that represents a node in a parsed format string. It can be either\n * a literal text or a variable name.\n */\nexport type ParsedTemplateNode =\n | { type: \"literal\"; text: string }\n | { type: \"variable\"; name: string };\n\n/**\n * Alias for `ParsedTemplateNode` since it is the same for\n * both f-string and mustache templates.\n */\nexport type ParsedFStringNode = ParsedTemplateNode;\n\nexport const parseFString = (template: string): ParsedTemplateNode[] => {\n // Core logic replicated from internals of pythons built in Formatter class.\n // https://github.com/python/cpython/blob/135ec7cefbaffd516b77362ad2b2ad1025af462e/Objects/stringlib/unicode_format.h#L700-L706\n const chars = template.split(\"\");\n const nodes: ParsedTemplateNode[] = [];\n\n const nextBracket = (bracket: \"}\" | \"{\" | \"{}\", start: number) => {\n for (let i = start; i < chars.length; i += 1) {\n if (bracket.includes(chars[i])) {\n return i;\n }\n }\n return -1;\n };\n\n let i = 0;\n while (i < chars.length) {\n if (chars[i] === \"{\" && i + 1 < chars.length && chars[i + 1] === \"{\") {\n nodes.push({ type: \"literal\", text: \"{\" });\n i += 2;\n } else if (\n chars[i] === \"}\" &&\n i + 1 < chars.length &&\n chars[i + 1] === \"}\"\n ) {\n nodes.push({ type: \"literal\", text: \"}\" });\n i += 2;\n } else if (chars[i] === \"{\") {\n const j = nextBracket(\"}\", i);\n if (j < 0) {\n throw new Error(\"Unclosed '{' in template.\");\n }\n\n nodes.push({\n type: \"variable\",\n name: chars.slice(i + 1, j).join(\"\"),\n });\n i = j + 1;\n } else if (chars[i] === \"}\") {\n throw new Error(\"Single '}' in template.\");\n } else {\n const next = nextBracket(\"{}\", i);\n const text = (next < 0 ? chars.slice(i) : chars.slice(i, next)).join(\"\");\n nodes.push({ type: \"literal\", text });\n i = next < 0 ? chars.length : next;\n }\n }\n return nodes;\n};\n\n/**\n * Convert the result of mustache.parse into an array of ParsedTemplateNode,\n * to make it compatible with other LangChain string parsing template formats.\n *\n * @param {mustache.TemplateSpans} template The result of parsing a mustache template with the mustache.js library.\n * @param {string[]} context Array of section variable names for nested context\n * @returns {ParsedTemplateNode[]}\n */\nconst mustacheTemplateToNodes = (\n template: mustache.TemplateSpans,\n context: string[] = []\n): ParsedTemplateNode[] => {\n const nodes: ParsedTemplateNode[] = [];\n\n for (const temp of template) {\n if (temp[0] === \"name\") {\n const name = temp[1].includes(\".\") ? temp[1].split(\".\")[0] : temp[1];\n nodes.push({ type: \"variable\", name });\n } else if ([\"#\", \"&\", \"^\", \">\"].includes(temp[0])) {\n // # represents a section, \"&\" represents an unescaped variable.\n // These should both be considered variables.\n nodes.push({ type: \"variable\", name: temp[1] });\n\n // If this is a section with nested content, recursively process it\n if (temp[0] === \"#\" && temp.length > 4 && Array.isArray(temp[4])) {\n const newContext = [...context, temp[1]];\n const nestedNodes = mustacheTemplateToNodes(temp[4], newContext);\n nodes.push(...nestedNodes);\n }\n } else {\n nodes.push({ type: \"literal\", text: temp[1] });\n }\n }\n\n return nodes;\n};\n\nexport const parseMustache = (template: string) => {\n const parsed = mustache.parse(template);\n return mustacheTemplateToNodes(parsed);\n};\n\nexport const interpolateFString = (template: string, values: InputValues) => {\n return parseFString(template).reduce((res, node) => {\n if (node.type === \"variable\") {\n if (node.name in values) {\n const stringValue =\n typeof values[node.name] === \"string\"\n ? values[node.name]\n : JSON.stringify(values[node.name]);\n return res + stringValue;\n }\n throw new Error(`(f-string) Missing value for input ${node.name}`);\n }\n\n return res + node.text;\n }, \"\");\n};\n\nexport const interpolateMustache = (template: string, values: InputValues) => {\n return mustache.render(template, values, undefined, MUSTACHE_RENDER_OPTIONS);\n};\n\n/**\n * Type that represents a function that takes a template string and a set\n * of input values, and returns a string where all variables in the\n * template have been replaced with their corresponding values.\n */\ntype Interpolator = (template: string, values: InputValues) => string;\n\n/**\n * Type that represents a function that takes a template string and\n * returns an array of `ParsedTemplateNode`.\n */\ntype Parser = (template: string) => ParsedTemplateNode[];\n\nexport const DEFAULT_FORMATTER_MAPPING: Record<TemplateFormat, Interpolator> = {\n \"f-string\": interpolateFString,\n mustache: interpolateMustache,\n};\n\nexport const DEFAULT_PARSER_MAPPING: Record<TemplateFormat, Parser> = {\n \"f-string\": parseFString,\n mustache: parseMustache,\n};\n\nexport const renderTemplate = (\n template: string,\n templateFormat: TemplateFormat,\n inputValues: InputValues\n) => {\n try {\n return DEFAULT_FORMATTER_MAPPING[templateFormat](template, inputValues);\n } catch (e) {\n const error = addLangChainErrorFields(e, \"INVALID_PROMPT_INPUT\");\n throw error;\n }\n};\n\nexport const parseTemplate = (\n template: string,\n templateFormat: TemplateFormat\n) => DEFAULT_PARSER_MAPPING[templateFormat](template);\n\nexport const checkValidTemplate = (\n template: MessageContent,\n templateFormat: TemplateFormat,\n inputVariables: string[]\n) => {\n if (!(templateFormat in DEFAULT_FORMATTER_MAPPING)) {\n const validFormats = Object.keys(DEFAULT_FORMATTER_MAPPING);\n throw new Error(`Invalid template format. Got \\`${templateFormat}\\`;\n should be one of ${validFormats}`);\n }\n try {\n // Build dummy inputs using Object.fromEntries to avoid prototype pollution\n // from dynamic property assignment with user-provided keys\n const dummyInputs: InputValues = Object.fromEntries(\n inputVariables.map((v) => [v, \"foo\"])\n );\n if (Array.isArray(template)) {\n template.forEach((message) => {\n if (\n message.type === \"text\" &&\n \"text\" in message &&\n typeof message.text === \"string\"\n ) {\n renderTemplate(message.text, templateFormat, dummyInputs);\n } else if (message.type === \"image_url\") {\n if (typeof message.image_url === \"string\") {\n renderTemplate(message.image_url, templateFormat, dummyInputs);\n } else if (\n typeof message.image_url === \"object\" &&\n message.image_url !== null &&\n \"url\" in message.image_url &&\n typeof message.image_url.url === \"string\"\n ) {\n const imageUrl = message.image_url.url;\n renderTemplate(imageUrl, templateFormat, dummyInputs);\n }\n } else {\n throw new Error(\n `Invalid message template received. ${JSON.stringify(\n message,\n null,\n 2\n )}`\n );\n }\n });\n } else {\n renderTemplate(template, templateFormat, dummyInputs);\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n throw new Error(`Invalid prompt schema: ${e.message}`);\n }\n};\n"],"mappings":"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"}
@@ -85,8 +85,9 @@ var Runnable = class extends require_load_serializable.Serializable {
85
85
  }
86
86
  async batch(inputs, options, batchOptions) {
87
87
  const configList = this._getOptionsList(options ?? {}, inputs.length);
88
+ const maxConcurrency = configList[0]?.maxConcurrency ?? batchOptions?.maxConcurrency;
88
89
  const caller = new require_utils_async_caller.AsyncCaller({
89
- maxConcurrency: configList[0]?.maxConcurrency ?? batchOptions?.maxConcurrency,
90
+ maxConcurrency,
90
91
  onFailedAttempt: (e) => {
91
92
  throw e;
92
93
  }
@@ -159,7 +160,8 @@ var Runnable = class extends require_load_serializable.Serializable {
159
160
  delete config.runId;
160
161
  let output;
161
162
  try {
162
- output = await require_signal.raceWithSignal(func.call(this, input, config, runManager), config.signal);
163
+ const promise = func.call(this, input, config, runManager);
164
+ output = await require_signal.raceWithSignal(promise, config.signal);
163
165
  } catch (e) {
164
166
  await runManager?.handleChainError(e);
165
167
  throw e;
@@ -186,7 +188,8 @@ var Runnable = class extends require_load_serializable.Serializable {
186
188
  }));
187
189
  let outputs;
188
190
  try {
189
- outputs = await require_signal.raceWithSignal(func.call(this, inputs, optionsList, runManagers, batchOptions), optionsList?.[0]?.signal);
191
+ const promise = func.call(this, inputs, optionsList, runManagers, batchOptions);
192
+ outputs = await require_signal.raceWithSignal(promise, optionsList?.[0]?.signal);
190
193
  } catch (e) {
191
194
  await Promise.all(runManagers.map((runManager) => runManager?.handleChainError(e)));
192
195
  throw e;
@@ -213,12 +216,14 @@ var Runnable = class extends require_load_serializable.Serializable {
213
216
  const outerThis = this;
214
217
  async function* wrapInputForTracing() {
215
218
  for await (const chunk of inputGenerator) {
216
- if (finalInputSupported) if (finalInput === void 0) finalInput = chunk;
217
- else try {
218
- finalInput = outerThis._concatOutputChunks(finalInput, chunk);
219
- } catch {
220
- finalInput = void 0;
221
- finalInputSupported = false;
219
+ if (finalInputSupported) {
220
+ if (finalInput === void 0) finalInput = chunk;
221
+ else try {
222
+ finalInput = outerThis._concatOutputChunks(finalInput, chunk);
223
+ } catch {
224
+ finalInput = void 0;
225
+ finalInputSupported = false;
226
+ }
222
227
  }
223
228
  yield chunk;
224
229
  }
@@ -235,12 +240,14 @@ var Runnable = class extends require_load_serializable.Serializable {
235
240
  if (streamLogHandler !== void 0 && runManager !== void 0) iterator = streamLogHandler.tapOutputIterable(runManager.runId, iterator);
236
241
  for await (const chunk of iterator) {
237
242
  yield chunk;
238
- if (finalOutputSupported) if (finalOutput === void 0) finalOutput = chunk;
239
- else try {
240
- finalOutput = this._concatOutputChunks(finalOutput, chunk);
241
- } catch {
242
- finalOutput = void 0;
243
- finalOutputSupported = false;
243
+ if (finalOutputSupported) {
244
+ if (finalOutput === void 0) finalOutput = chunk;
245
+ else try {
246
+ finalOutput = this._concatOutputChunks(finalOutput, chunk);
247
+ } catch {
248
+ finalOutput = void 0;
249
+ finalOutputSupported = false;
250
+ }
244
251
  }
245
252
  }
246
253
  } catch (e) {
@@ -385,14 +392,15 @@ var Runnable = class extends require_load_serializable.Serializable {
385
392
  async function consumeRunnableStream() {
386
393
  let signal;
387
394
  try {
388
- if (config.signal) if ("any" in AbortSignal) signal = AbortSignal.any([abortController.signal, config.signal]);
389
- else {
390
- const composed = new AbortController();
391
- config.signal.addEventListener("abort", () => composed.abort(), { once: true });
392
- abortController.signal.addEventListener("abort", () => composed.abort(), { once: true });
393
- signal = composed.signal;
394
- }
395
- else signal = abortController.signal;
395
+ if (config.signal) {
396
+ if ("any" in AbortSignal) signal = AbortSignal.any([abortController.signal, config.signal]);
397
+ else {
398
+ const composed = new AbortController();
399
+ config.signal.addEventListener("abort", () => composed.abort(), { once: true });
400
+ abortController.signal.addEventListener("abort", () => composed.abort(), { once: true });
401
+ signal = composed.signal;
402
+ }
403
+ } else signal = abortController.signal;
396
404
  const runnableStream = await outerThis.stream(input, {
397
405
  ...config,
398
406
  signal
@@ -462,9 +470,10 @@ var Runnable = class extends require_load_serializable.Serializable {
462
470
  let eventType;
463
471
  let data = {};
464
472
  const logEntry = runLog.state.logs[path];
465
- if (logEntry.end_time === void 0) if (logEntry.streamed_output.length > 0) eventType = "stream";
466
- else eventType = "start";
467
- else eventType = "end";
473
+ if (logEntry.end_time === void 0) {
474
+ if (logEntry.streamed_output.length > 0) eventType = "stream";
475
+ else eventType = "start";
476
+ } else eventType = "end";
468
477
  if (eventType === "start") {
469
478
  if (logEntry.inputs !== void 0) data.input = logEntry.inputs;
470
479
  } else if (eventType === "end") {
@@ -931,7 +940,10 @@ var RunnableSequence = class RunnableSequence extends Runnable {
931
940
  let finalOutput;
932
941
  try {
933
942
  const initialSteps = [this.first, ...this.middle];
934
- for (let i = 0; i < initialSteps.length; i += 1) nextStepInput = await require_signal.raceWithSignal(initialSteps[i].invoke(nextStepInput, require_config.patchConfig(config, { callbacks: runManager?.getChild(this.omitSequenceTags ? void 0 : `seq:step:${i + 1}`) })), config.signal);
943
+ for (let i = 0; i < initialSteps.length; i += 1) {
944
+ const promise = initialSteps[i].invoke(nextStepInput, require_config.patchConfig(config, { callbacks: runManager?.getChild(this.omitSequenceTags ? void 0 : `seq:step:${i + 1}`) }));
945
+ nextStepInput = await require_signal.raceWithSignal(promise, config.signal);
946
+ }
935
947
  if (config.signal?.aborted) throw require_signal.getAbortSignalError(config.signal);
936
948
  finalOutput = await this.last.invoke(nextStepInput, require_config.patchConfig(config, { callbacks: runManager?.getChild(this.omitSequenceTags ? void 0 : `seq:step:${this.steps.length}`) }));
937
949
  } catch (e) {
@@ -951,10 +963,13 @@ var RunnableSequence = class RunnableSequence extends Runnable {
951
963
  }));
952
964
  let nextStepInputs = inputs;
953
965
  try {
954
- for (let i = 0; i < this.steps.length; i += 1) nextStepInputs = await require_signal.raceWithSignal(this.steps[i].batch(nextStepInputs, runManagers.map((runManager, j) => {
955
- const childRunManager = runManager?.getChild(this.omitSequenceTags ? void 0 : `seq:step:${i + 1}`);
956
- return require_config.patchConfig(configList[j], { callbacks: childRunManager });
957
- }), batchOptions), configList[0]?.signal);
966
+ for (let i = 0; i < this.steps.length; i += 1) {
967
+ const promise = this.steps[i].batch(nextStepInputs, runManagers.map((runManager, j) => {
968
+ const childRunManager = runManager?.getChild(this.omitSequenceTags ? void 0 : `seq:step:${i + 1}`);
969
+ return require_config.patchConfig(configList[j], { callbacks: childRunManager });
970
+ }), batchOptions);
971
+ nextStepInputs = await require_signal.raceWithSignal(promise, configList[0]?.signal);
972
+ }
958
973
  } catch (e) {
959
974
  await Promise.all(runManagers.map((runManager) => runManager?.handleChainError(e)));
960
975
  throw e;
@@ -986,12 +1001,14 @@ var RunnableSequence = class RunnableSequence extends Runnable {
986
1001
  for await (const chunk of finalGenerator) {
987
1002
  options?.signal?.throwIfAborted();
988
1003
  yield chunk;
989
- if (concatSupported) if (finalOutput === void 0) finalOutput = chunk;
990
- else try {
991
- finalOutput = this._concatOutputChunks(finalOutput, chunk);
992
- } catch {
993
- finalOutput = void 0;
994
- concatSupported = false;
1004
+ if (concatSupported) {
1005
+ if (finalOutput === void 0) finalOutput = chunk;
1006
+ else try {
1007
+ finalOutput = this._concatOutputChunks(finalOutput, chunk);
1008
+ } catch {
1009
+ finalOutput = void 0;
1010
+ concatSupported = false;
1011
+ }
995
1012
  }
996
1013
  }
997
1014
  } catch (e) {
@@ -1111,7 +1128,8 @@ var RunnableMap = class RunnableMap extends Runnable {
1111
1128
  }))];
1112
1129
  }));
1113
1130
  while (tasks.size) {
1114
- const { key, result, gen } = await require_signal.raceWithSignal(Promise.race(tasks.values()), options?.signal);
1131
+ const promise = Promise.race(tasks.values());
1132
+ const { key, result, gen } = await require_signal.raceWithSignal(promise, options?.signal);
1115
1133
  tasks.delete(key);
1116
1134
  if (!result.done) {
1117
1135
  yield { [key]: result.value };
@@ -1154,7 +1172,8 @@ var RunnableTraceable = class RunnableTraceable extends Runnable {
1154
1172
  async invoke(input, options) {
1155
1173
  const [config] = this._getOptionsList(options ?? {}, 1);
1156
1174
  const callbacks = await require_config.getCallbackManagerForConfig(config);
1157
- return require_signal.raceWithSignal(this.func(require_config.patchConfig(config, { callbacks }), input), config?.signal);
1175
+ const promise = this.func(require_config.patchConfig(config, { callbacks }), input);
1176
+ return require_signal.raceWithSignal(promise, config?.signal);
1158
1177
  }
1159
1178
  async *_streamIterator(input, options) {
1160
1179
  const [config] = this._getOptionsList(options ?? {}, 1);
@@ -1482,7 +1501,8 @@ var RunnableWithFallbacks = class extends Runnable {
1482
1501
  config?.signal?.throwIfAborted();
1483
1502
  const childConfig = require_config.patchConfig(otherConfigFields, { callbacks: runManager?.getChild() });
1484
1503
  try {
1485
- stream = require_iter.consumeAsyncIterableInContext(childConfig, await runnable.stream(input, childConfig));
1504
+ const originalStream = await runnable.stream(input, childConfig);
1505
+ stream = require_iter.consumeAsyncIterableInContext(childConfig, originalStream);
1486
1506
  break;
1487
1507
  } catch (e) {
1488
1508
  if (firstError === void 0) firstError = e;