langchain 0.2.9 → 0.2.11

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 (350) hide show
  1. package/chat_models/universal.cjs +1 -0
  2. package/chat_models/universal.d.cts +1 -0
  3. package/chat_models/universal.d.ts +1 -0
  4. package/chat_models/universal.js +1 -0
  5. package/dist/agents/executor.cjs +6 -0
  6. package/dist/agents/executor.js +6 -0
  7. package/dist/chat_models/universal.cjs +600 -0
  8. package/dist/chat_models/universal.d.ts +115 -0
  9. package/dist/chat_models/universal.js +595 -0
  10. package/dist/document_loaders/web/assemblyai.cjs +9 -1
  11. package/dist/document_loaders/web/assemblyai.js +9 -1
  12. package/dist/experimental/chrome_ai/app/dist/bundle.cjs +1250 -0
  13. package/dist/experimental/chrome_ai/app/dist/bundle.d.ts +1 -0
  14. package/dist/experimental/chrome_ai/app/dist/bundle.js +1249 -0
  15. package/dist/load/import_constants.cjs +1 -0
  16. package/dist/load/import_constants.js +1 -0
  17. package/dist/retrievers/parent_document.cjs +1 -1
  18. package/dist/retrievers/parent_document.d.ts +1 -1
  19. package/dist/retrievers/parent_document.js +1 -1
  20. package/package.json +65 -6
  21. package/dist/agents/tests/agent.int.test.d.ts +0 -1
  22. package/dist/agents/tests/agent.int.test.js +0 -309
  23. package/dist/agents/tests/chat_convo_output_parser.test.d.ts +0 -1
  24. package/dist/agents/tests/chat_convo_output_parser.test.js +0 -91
  25. package/dist/agents/tests/create_openai_functions_agent.int.test.d.ts +0 -2
  26. package/dist/agents/tests/create_openai_functions_agent.int.test.js +0 -71
  27. package/dist/agents/tests/create_openai_tools_agent.int.test.d.ts +0 -1
  28. package/dist/agents/tests/create_openai_tools_agent.int.test.js +0 -75
  29. package/dist/agents/tests/create_react_agent.int.test.d.ts +0 -1
  30. package/dist/agents/tests/create_react_agent.int.test.js +0 -32
  31. package/dist/agents/tests/create_structured_chat_agent.int.test.d.ts +0 -1
  32. package/dist/agents/tests/create_structured_chat_agent.int.test.js +0 -32
  33. package/dist/agents/tests/create_tool_calling_agent.int.test.d.ts +0 -1
  34. package/dist/agents/tests/create_tool_calling_agent.int.test.js +0 -122
  35. package/dist/agents/tests/create_xml_agent.int.test.d.ts +0 -1
  36. package/dist/agents/tests/create_xml_agent.int.test.js +0 -32
  37. package/dist/agents/tests/json.test.d.ts +0 -1
  38. package/dist/agents/tests/json.test.js +0 -74
  39. package/dist/agents/tests/react.test.d.ts +0 -1
  40. package/dist/agents/tests/react.test.js +0 -44
  41. package/dist/agents/tests/runnable.int.test.d.ts +0 -1
  42. package/dist/agents/tests/runnable.int.test.js +0 -104
  43. package/dist/agents/tests/sql.test.d.ts +0 -1
  44. package/dist/agents/tests/sql.test.js +0 -133
  45. package/dist/agents/tests/structured_chat_output_parser.test.d.ts +0 -1
  46. package/dist/agents/tests/structured_chat_output_parser.test.js +0 -35
  47. package/dist/agents/tests/structured_chat_output_parser_with_retries.int.test.d.ts +0 -1
  48. package/dist/agents/tests/structured_chat_output_parser_with_retries.int.test.js +0 -44
  49. package/dist/agents/tests/structured_output_runnables.int.test.d.ts +0 -1
  50. package/dist/agents/tests/structured_output_runnables.int.test.js +0 -112
  51. package/dist/agents/toolkits/tests/conversational_retrieval.int.test.d.ts +0 -1
  52. package/dist/agents/toolkits/tests/conversational_retrieval.int.test.js +0 -41
  53. package/dist/cache/tests/file_system.int.test.d.ts +0 -1
  54. package/dist/cache/tests/file_system.int.test.js +0 -32
  55. package/dist/chains/openai_functions/tests/create_runnable_chains.int.test.d.ts +0 -1
  56. package/dist/chains/openai_functions/tests/create_runnable_chains.int.test.js +0 -139
  57. package/dist/chains/openai_functions/tests/extraction.int.test.d.ts +0 -1
  58. package/dist/chains/openai_functions/tests/extraction.int.test.js +0 -33
  59. package/dist/chains/openai_functions/tests/openapi.int.test.d.ts +0 -1
  60. package/dist/chains/openai_functions/tests/openapi.int.test.js +0 -130
  61. package/dist/chains/openai_functions/tests/openapi.test.d.ts +0 -1
  62. package/dist/chains/openai_functions/tests/openapi.test.js +0 -172
  63. package/dist/chains/openai_functions/tests/structured_output.int.test.d.ts +0 -1
  64. package/dist/chains/openai_functions/tests/structured_output.int.test.js +0 -40
  65. package/dist/chains/openai_functions/tests/structured_output.test.d.ts +0 -1
  66. package/dist/chains/openai_functions/tests/structured_output.test.js +0 -102
  67. package/dist/chains/openai_functions/tests/tagging.int.test.d.ts +0 -1
  68. package/dist/chains/openai_functions/tests/tagging.int.test.js +0 -21
  69. package/dist/chains/query_constructor/tests/query_chain.int.test.d.ts +0 -1
  70. package/dist/chains/query_constructor/tests/query_chain.int.test.js +0 -93
  71. package/dist/chains/query_constructor/tests/query_parser.test.d.ts +0 -1
  72. package/dist/chains/query_constructor/tests/query_parser.test.js +0 -28
  73. package/dist/chains/question_answering/tests/load.int.test.d.ts +0 -1
  74. package/dist/chains/question_answering/tests/load.int.test.js +0 -39
  75. package/dist/chains/router/tests/multi_prompt.int.test.d.ts +0 -1
  76. package/dist/chains/router/tests/multi_prompt.int.test.js +0 -45
  77. package/dist/chains/router/tests/multi_prompt.test.d.ts +0 -1
  78. package/dist/chains/router/tests/multi_prompt.test.js +0 -62
  79. package/dist/chains/router/tests/multi_retrieval_qa.int.test.d.ts +0 -1
  80. package/dist/chains/router/tests/multi_retrieval_qa.int.test.js +0 -67
  81. package/dist/chains/router/tests/multi_retrieval_qa.test.d.ts +0 -1
  82. package/dist/chains/router/tests/multi_retrieval_qa.test.js +0 -125
  83. package/dist/chains/summarization/tests/load.int.test.d.ts +0 -1
  84. package/dist/chains/summarization/tests/load.int.test.js +0 -37
  85. package/dist/chains/tests/api_chain.int.test.d.ts +0 -1
  86. package/dist/chains/tests/api_chain.int.test.js +0 -55
  87. package/dist/chains/tests/combine_docs_chain.int.test.d.ts +0 -1
  88. package/dist/chains/tests/combine_docs_chain.int.test.js +0 -50
  89. package/dist/chains/tests/combine_docs_chain.test.d.ts +0 -1
  90. package/dist/chains/tests/combine_docs_chain.test.js +0 -98
  91. package/dist/chains/tests/constitutional_chain.int.test.d.ts +0 -1
  92. package/dist/chains/tests/constitutional_chain.int.test.js +0 -30
  93. package/dist/chains/tests/constitutional_chain.test.d.ts +0 -1
  94. package/dist/chains/tests/constitutional_chain.test.js +0 -63
  95. package/dist/chains/tests/conversation_chain.int.test.d.ts +0 -1
  96. package/dist/chains/tests/conversation_chain.int.test.js +0 -9
  97. package/dist/chains/tests/conversational_retrieval_chain.int.test.d.ts +0 -1
  98. package/dist/chains/tests/conversational_retrieval_chain.int.test.js +0 -243
  99. package/dist/chains/tests/example_data/open_meteo_docs.d.ts +0 -1
  100. package/dist/chains/tests/example_data/open_meteo_docs.js +0 -29
  101. package/dist/chains/tests/history_aware_retriever.int.test.d.ts +0 -1
  102. package/dist/chains/tests/history_aware_retriever.int.test.js +0 -41
  103. package/dist/chains/tests/history_aware_retriever.test.d.ts +0 -1
  104. package/dist/chains/tests/history_aware_retriever.test.js +0 -27
  105. package/dist/chains/tests/llm_chain.int.test.d.ts +0 -1
  106. package/dist/chains/tests/llm_chain.int.test.js +0 -119
  107. package/dist/chains/tests/openai_moderation.int.test.d.ts +0 -1
  108. package/dist/chains/tests/openai_moderation.int.test.js +0 -30
  109. package/dist/chains/tests/retrieval_chain.int.test.d.ts +0 -1
  110. package/dist/chains/tests/retrieval_chain.int.test.js +0 -69
  111. package/dist/chains/tests/retrieval_chain.test.d.ts +0 -1
  112. package/dist/chains/tests/retrieval_chain.test.js +0 -36
  113. package/dist/chains/tests/sequential_chain.int.test.d.ts +0 -1
  114. package/dist/chains/tests/sequential_chain.int.test.js +0 -88
  115. package/dist/chains/tests/sequential_chain.test.d.ts +0 -1
  116. package/dist/chains/tests/sequential_chain.test.js +0 -295
  117. package/dist/chains/tests/simple_sequential_chain.int.test.d.ts +0 -1
  118. package/dist/chains/tests/simple_sequential_chain.int.test.js +0 -81
  119. package/dist/chains/tests/simple_sequential_chain.test.d.ts +0 -1
  120. package/dist/chains/tests/simple_sequential_chain.test.js +0 -128
  121. package/dist/chains/tests/sql_db_chain.int.test.d.ts +0 -1
  122. package/dist/chains/tests/sql_db_chain.int.test.js +0 -125
  123. package/dist/chains/tests/transform.test.d.ts +0 -1
  124. package/dist/chains/tests/transform.test.js +0 -12
  125. package/dist/chains/tests/vector_db_qa_chain.int.test.d.ts +0 -1
  126. package/dist/chains/tests/vector_db_qa_chain.int.test.js +0 -45
  127. package/dist/document_loaders/tests/assemblyai.int.test.d.ts +0 -1
  128. package/dist/document_loaders/tests/assemblyai.int.test.js +0 -111
  129. package/dist/document_loaders/tests/chatgpt-blob.test.d.ts +0 -1
  130. package/dist/document_loaders/tests/chatgpt-blob.test.js +0 -30
  131. package/dist/document_loaders/tests/chatgpt.test.d.ts +0 -1
  132. package/dist/document_loaders/tests/chatgpt.test.js +0 -29
  133. package/dist/document_loaders/tests/cheerio.int.test.d.ts +0 -1
  134. package/dist/document_loaders/tests/cheerio.int.test.js +0 -21
  135. package/dist/document_loaders/tests/college_confidential.int.test.d.ts +0 -1
  136. package/dist/document_loaders/tests/college_confidential.int.test.js +0 -6
  137. package/dist/document_loaders/tests/confluence.test.d.ts +0 -1
  138. package/dist/document_loaders/tests/confluence.test.js +0 -52
  139. package/dist/document_loaders/tests/couchbase.int.test.d.ts +0 -1
  140. package/dist/document_loaders/tests/couchbase.int.test.js +0 -28
  141. package/dist/document_loaders/tests/csv-blob.test.d.ts +0 -1
  142. package/dist/document_loaders/tests/csv-blob.test.js +0 -53
  143. package/dist/document_loaders/tests/csv.test.d.ts +0 -1
  144. package/dist/document_loaders/tests/csv.test.js +0 -41
  145. package/dist/document_loaders/tests/directory.test.d.ts +0 -1
  146. package/dist/document_loaders/tests/directory.test.js +0 -38
  147. package/dist/document_loaders/tests/docx.test.d.ts +0 -1
  148. package/dist/document_loaders/tests/docx.test.js +0 -11
  149. package/dist/document_loaders/tests/epub.test.d.ts +0 -1
  150. package/dist/document_loaders/tests/epub.test.js +0 -18
  151. package/dist/document_loaders/tests/example_data/github_api_responses.d.ts +0 -5
  152. package/dist/document_loaders/tests/example_data/github_api_responses.js +0 -91
  153. package/dist/document_loaders/tests/figma.int.test.d.ts +0 -1
  154. package/dist/document_loaders/tests/figma.int.test.js +0 -13
  155. package/dist/document_loaders/tests/firecrawl.int.test.d.ts +0 -1
  156. package/dist/document_loaders/tests/firecrawl.int.test.js +0 -30
  157. package/dist/document_loaders/tests/gitbook.int.test.d.ts +0 -1
  158. package/dist/document_loaders/tests/gitbook.int.test.js +0 -14
  159. package/dist/document_loaders/tests/github.int.test.d.ts +0 -1
  160. package/dist/document_loaders/tests/github.int.test.js +0 -86
  161. package/dist/document_loaders/tests/github.test.d.ts +0 -1
  162. package/dist/document_loaders/tests/github.test.js +0 -51
  163. package/dist/document_loaders/tests/hn.int.test.d.ts +0 -1
  164. package/dist/document_loaders/tests/hn.int.test.js +0 -6
  165. package/dist/document_loaders/tests/imsdb.test.d.ts +0 -1
  166. package/dist/document_loaders/tests/imsdb.test.js +0 -6
  167. package/dist/document_loaders/tests/json-blob.test.d.ts +0 -1
  168. package/dist/document_loaders/tests/json-blob.test.js +0 -91
  169. package/dist/document_loaders/tests/json.test.d.ts +0 -1
  170. package/dist/document_loaders/tests/json.test.js +0 -69
  171. package/dist/document_loaders/tests/jsonl-blob.test.d.ts +0 -1
  172. package/dist/document_loaders/tests/jsonl-blob.test.js +0 -46
  173. package/dist/document_loaders/tests/jsonl.test.d.ts +0 -1
  174. package/dist/document_loaders/tests/jsonl.test.js +0 -15
  175. package/dist/document_loaders/tests/multi_file.test.d.ts +0 -1
  176. package/dist/document_loaders/tests/multi_file.test.js +0 -49
  177. package/dist/document_loaders/tests/notion.test.d.ts +0 -1
  178. package/dist/document_loaders/tests/notion.test.js +0 -11
  179. package/dist/document_loaders/tests/notionapi.int.test.d.ts +0 -1
  180. package/dist/document_loaders/tests/notionapi.int.test.js +0 -80
  181. package/dist/document_loaders/tests/notionapi.test.d.ts +0 -1
  182. package/dist/document_loaders/tests/notionapi.test.js +0 -84
  183. package/dist/document_loaders/tests/notiondb.int.test.d.ts +0 -1
  184. package/dist/document_loaders/tests/notiondb.int.test.js +0 -13
  185. package/dist/document_loaders/tests/obsidian.test.d.ts +0 -1
  186. package/dist/document_loaders/tests/obsidian.test.js +0 -119
  187. package/dist/document_loaders/tests/pdf-blob.test.d.ts +0 -1
  188. package/dist/document_loaders/tests/pdf-blob.test.js +0 -44
  189. package/dist/document_loaders/tests/pdf.test.d.ts +0 -1
  190. package/dist/document_loaders/tests/pdf.test.js +0 -25
  191. package/dist/document_loaders/tests/playwright_web.int.test.d.ts +0 -1
  192. package/dist/document_loaders/tests/playwright_web.int.test.js +0 -27
  193. package/dist/document_loaders/tests/pptx.test.d.ts +0 -1
  194. package/dist/document_loaders/tests/pptx.test.js +0 -17
  195. package/dist/document_loaders/tests/puppeteer.int.test.d.ts +0 -1
  196. package/dist/document_loaders/tests/puppeteer.int.test.js +0 -47
  197. package/dist/document_loaders/tests/recursive_url.int.test.d.ts +0 -1
  198. package/dist/document_loaders/tests/recursive_url.int.test.js +0 -64
  199. package/dist/document_loaders/tests/s3.int.test.d.ts +0 -1
  200. package/dist/document_loaders/tests/s3.int.test.js +0 -48
  201. package/dist/document_loaders/tests/searchapi.test.d.ts +0 -1
  202. package/dist/document_loaders/tests/searchapi.test.js +0 -29
  203. package/dist/document_loaders/tests/serpapi.test.d.ts +0 -1
  204. package/dist/document_loaders/tests/serpapi.test.js +0 -21
  205. package/dist/document_loaders/tests/sitemap.int.test.d.ts +0 -1
  206. package/dist/document_loaders/tests/sitemap.int.test.js +0 -28
  207. package/dist/document_loaders/tests/sonix_audio.int.test.d.ts +0 -1
  208. package/dist/document_loaders/tests/sonix_audio.int.test.js +0 -55
  209. package/dist/document_loaders/tests/sort_xyz_blockchain.int.test.d.ts +0 -1
  210. package/dist/document_loaders/tests/sort_xyz_blockchain.int.test.js +0 -38
  211. package/dist/document_loaders/tests/srt-blob.test.d.ts +0 -1
  212. package/dist/document_loaders/tests/srt-blob.test.js +0 -18
  213. package/dist/document_loaders/tests/srt.test.d.ts +0 -1
  214. package/dist/document_loaders/tests/srt.test.js +0 -16
  215. package/dist/document_loaders/tests/text-blob.test.d.ts +0 -1
  216. package/dist/document_loaders/tests/text-blob.test.js +0 -14
  217. package/dist/document_loaders/tests/text.test.d.ts +0 -1
  218. package/dist/document_loaders/tests/text.test.js +0 -22
  219. package/dist/document_loaders/tests/unstructured.int.test.d.ts +0 -1
  220. package/dist/document_loaders/tests/unstructured.int.test.js +0 -58
  221. package/dist/document_loaders/tests/webpdf.int.test.d.ts +0 -1
  222. package/dist/document_loaders/tests/webpdf.int.test.js +0 -90
  223. package/dist/document_transformers/tests/openai_functions.int.test.d.ts +0 -1
  224. package/dist/document_transformers/tests/openai_functions.int.test.js +0 -40
  225. package/dist/embeddings/tests/cache.test.d.ts +0 -1
  226. package/dist/embeddings/tests/cache.test.js +0 -24
  227. package/dist/embeddings/tests/fake.test.d.ts +0 -1
  228. package/dist/embeddings/tests/fake.test.js +0 -34
  229. package/dist/evaluation/agents/tests/trajectory_eval_chain.int.test.d.ts +0 -1
  230. package/dist/evaluation/agents/tests/trajectory_eval_chain.int.test.js +0 -33
  231. package/dist/evaluation/comparison/tests/pairwise_eval_chain.int.test.d.ts +0 -1
  232. package/dist/evaluation/comparison/tests/pairwise_eval_chain.int.test.js +0 -46
  233. package/dist/evaluation/criteria/tests/criteria_eval_chain.int.test.d.ts +0 -1
  234. package/dist/evaluation/criteria/tests/criteria_eval_chain.int.test.js +0 -108
  235. package/dist/evaluation/embedding_distance/tests/embedding_distance_eval_chain.int.test.d.ts +0 -1
  236. package/dist/evaluation/embedding_distance/tests/embedding_distance_eval_chain.int.test.js +0 -26
  237. package/dist/evaluation/qa/tests/eval_chain.int.test.d.ts +0 -1
  238. package/dist/evaluation/qa/tests/eval_chain.int.test.js +0 -27
  239. package/dist/experimental/autogpt/tests/output_parser.test.d.ts +0 -1
  240. package/dist/experimental/autogpt/tests/output_parser.test.js +0 -8
  241. package/dist/experimental/autogpt/tests/prompt.test.d.ts +0 -1
  242. package/dist/experimental/autogpt/tests/prompt.test.js +0 -69
  243. package/dist/experimental/autogpt/tests/prompt_generator.test.d.ts +0 -1
  244. package/dist/experimental/autogpt/tests/prompt_generator.test.js +0 -91
  245. package/dist/experimental/chains/tests/violation_of_expectations_chain.int.test.d.ts +0 -1
  246. package/dist/experimental/chains/tests/violation_of_expectations_chain.int.test.js +0 -26
  247. package/dist/experimental/generative_agents/tests/generative_agent.int.test.d.ts +0 -1
  248. package/dist/experimental/generative_agents/tests/generative_agent.int.test.js +0 -304
  249. package/dist/experimental/masking/tests/masking-extended.test.d.ts +0 -1
  250. package/dist/experimental/masking/tests/masking-extended.test.js +0 -58
  251. package/dist/experimental/masking/tests/masking.test.d.ts +0 -1
  252. package/dist/experimental/masking/tests/masking.test.js +0 -388
  253. package/dist/experimental/openai_assistant/tests/openai_assistant.int.test.d.ts +0 -1
  254. package/dist/experimental/openai_assistant/tests/openai_assistant.int.test.js +0 -203
  255. package/dist/experimental/openai_files/tests/openai_file.int.test.d.ts +0 -1
  256. package/dist/experimental/openai_files/tests/openai_file.int.test.js +0 -87
  257. package/dist/experimental/plan_and_execute/tests/plan_and_execute.int.test.d.ts +0 -1
  258. package/dist/experimental/plan_and_execute/tests/plan_and_execute.int.test.js +0 -54
  259. package/dist/experimental/prompts/tests/handlebars.test.d.ts +0 -1
  260. package/dist/experimental/prompts/tests/handlebars.test.js +0 -24
  261. package/dist/experimental/tools/tests/pyinterpreter.int.test.d.ts +0 -1
  262. package/dist/experimental/tools/tests/pyinterpreter.int.test.js +0 -22
  263. package/dist/load/tests/cross_language.test.d.ts +0 -1
  264. package/dist/load/tests/cross_language.test.js +0 -83
  265. package/dist/load/tests/load.int.test.d.ts +0 -1
  266. package/dist/load/tests/load.int.test.js +0 -9
  267. package/dist/load/tests/load.test.d.ts +0 -1
  268. package/dist/load/tests/load.test.js +0 -412
  269. package/dist/memory/tests/buffer_memory.test.d.ts +0 -1
  270. package/dist/memory/tests/buffer_memory.test.js +0 -34
  271. package/dist/memory/tests/buffer_token_memory.int.test.d.ts +0 -1
  272. package/dist/memory/tests/buffer_token_memory.int.test.js +0 -47
  273. package/dist/memory/tests/buffer_window_memory.test.d.ts +0 -1
  274. package/dist/memory/tests/buffer_window_memory.test.js +0 -42
  275. package/dist/memory/tests/combined_memory.int.test.d.ts +0 -1
  276. package/dist/memory/tests/combined_memory.int.test.js +0 -74
  277. package/dist/memory/tests/entity_memory.int.test.d.ts +0 -1
  278. package/dist/memory/tests/entity_memory.int.test.js +0 -79
  279. package/dist/memory/tests/entity_memory.test.d.ts +0 -1
  280. package/dist/memory/tests/entity_memory.test.js +0 -48
  281. package/dist/memory/tests/summary.int.test.d.ts +0 -1
  282. package/dist/memory/tests/summary.int.test.js +0 -50
  283. package/dist/memory/tests/summary_buffer.int.test.d.ts +0 -1
  284. package/dist/memory/tests/summary_buffer.int.test.js +0 -55
  285. package/dist/memory/tests/vector_store_memory.int.test.d.ts +0 -1
  286. package/dist/memory/tests/vector_store_memory.int.test.js +0 -55
  287. package/dist/output_parsers/tests/combining.int.test.d.ts +0 -1
  288. package/dist/output_parsers/tests/combining.int.test.js +0 -26
  289. package/dist/output_parsers/tests/combining.test.d.ts +0 -1
  290. package/dist/output_parsers/tests/combining.test.js +0 -54
  291. package/dist/output_parsers/tests/datetime.test.d.ts +0 -1
  292. package/dist/output_parsers/tests/datetime.test.js +0 -14
  293. package/dist/output_parsers/tests/expression.test.d.ts +0 -1
  294. package/dist/output_parsers/tests/expression.test.js +0 -339
  295. package/dist/output_parsers/tests/http_response.test.d.ts +0 -1
  296. package/dist/output_parsers/tests/http_response.test.js +0 -39
  297. package/dist/output_parsers/tests/list.test.d.ts +0 -1
  298. package/dist/output_parsers/tests/list.test.js +0 -27
  299. package/dist/output_parsers/tests/openai_functions.int.test.d.ts +0 -1
  300. package/dist/output_parsers/tests/openai_functions.int.test.js +0 -89
  301. package/dist/output_parsers/tests/openai_tools.int.test.d.ts +0 -1
  302. package/dist/output_parsers/tests/openai_tools.int.test.js +0 -36
  303. package/dist/output_parsers/tests/structured.int.test.d.ts +0 -1
  304. package/dist/output_parsers/tests/structured.int.test.js +0 -150
  305. package/dist/prompts/tests/selectors.test.d.ts +0 -1
  306. package/dist/prompts/tests/selectors.test.js +0 -59
  307. package/dist/retrievers/self_query/tests/memory_self_query.int.test.d.ts +0 -1
  308. package/dist/retrievers/self_query/tests/memory_self_query.int.test.js +0 -330
  309. package/dist/retrievers/tests/chain_extract.int.test.d.ts +0 -1
  310. package/dist/retrievers/tests/chain_extract.int.test.js +0 -32
  311. package/dist/retrievers/tests/ensemble_retriever.int.test.d.ts +0 -1
  312. package/dist/retrievers/tests/ensemble_retriever.int.test.js +0 -74
  313. package/dist/retrievers/tests/hyde.int.test.d.ts +0 -1
  314. package/dist/retrievers/tests/hyde.int.test.js +0 -44
  315. package/dist/retrievers/tests/matryoshka_retriever.int.test.d.ts +0 -1
  316. package/dist/retrievers/tests/matryoshka_retriever.int.test.js +0 -113
  317. package/dist/retrievers/tests/multi_query.int.test.d.ts +0 -1
  318. package/dist/retrievers/tests/multi_query.int.test.js +0 -45
  319. package/dist/retrievers/tests/parent_document.int.test.d.ts +0 -1
  320. package/dist/retrievers/tests/parent_document.int.test.js +0 -122
  321. package/dist/retrievers/tests/score_threshold.int.test.d.ts +0 -1
  322. package/dist/retrievers/tests/score_threshold.int.test.js +0 -83
  323. package/dist/retrievers/tests/time_weighted.test.d.ts +0 -1
  324. package/dist/retrievers/tests/time_weighted.test.js +0 -320
  325. package/dist/retrievers/tests/vectorstores.test.d.ts +0 -1
  326. package/dist/retrievers/tests/vectorstores.test.js +0 -50
  327. package/dist/smith/tests/run_on_dataset.int.test.d.ts +0 -1
  328. package/dist/smith/tests/run_on_dataset.int.test.js +0 -257
  329. package/dist/smith/tests/runner_utils.int.test.d.ts +0 -9
  330. package/dist/smith/tests/runner_utils.int.test.js +0 -234
  331. package/dist/storage/tests/file_system.test.d.ts +0 -1
  332. package/dist/storage/tests/file_system.test.js +0 -81
  333. package/dist/tools/tests/chain.test.d.ts +0 -1
  334. package/dist/tools/tests/chain.test.js +0 -136
  335. package/dist/tools/tests/webbrowser.int.test.d.ts +0 -1
  336. package/dist/tools/tests/webbrowser.int.test.js +0 -80
  337. package/dist/tools/tests/webbrowser.test.d.ts +0 -1
  338. package/dist/tools/tests/webbrowser.test.js +0 -21
  339. package/dist/util/tests/async_caller.int.test.d.ts +0 -1
  340. package/dist/util/tests/async_caller.int.test.js +0 -34
  341. package/dist/util/tests/azure.test.d.ts +0 -1
  342. package/dist/util/tests/azure.test.js +0 -42
  343. package/dist/util/tests/openai-stream.test.d.ts +0 -1
  344. package/dist/util/tests/openai-stream.test.js +0 -135
  345. package/dist/util/tests/set.test.d.ts +0 -1
  346. package/dist/util/tests/set.test.js +0 -36
  347. package/dist/util/tests/sql_utils.test.d.ts +0 -1
  348. package/dist/util/tests/sql_utils.test.js +0 -50
  349. package/dist/vectorstores/tests/memory.test.d.ts +0 -1
  350. package/dist/vectorstores/tests/memory.test.js +0 -78
@@ -0,0 +1 @@
1
+ module.exports = require('../dist/chat_models/universal.cjs');
@@ -0,0 +1 @@
1
+ export * from '../dist/chat_models/universal.js'
@@ -0,0 +1 @@
1
+ export * from '../dist/chat_models/universal.js'
@@ -0,0 +1 @@
1
+ export * from '../dist/chat_models/universal.js'
@@ -478,6 +478,9 @@ class AgentExecutor extends base_js_1.BaseChain {
478
478
  observation = tool
479
479
  ? await tool.invoke(action.toolInput, (0, runnables_1.patchConfig)(config, { callbacks: runManager?.getChild() }))
480
480
  : `${action.tool} is not a valid tool, try another one.`;
481
+ if (typeof observation !== "string") {
482
+ throw new Error("Received unsupported non-string response from tool call.");
483
+ }
481
484
  }
482
485
  catch (e) {
483
486
  // eslint-disable-next-line no-instanceof/no-instanceof
@@ -573,6 +576,9 @@ class AgentExecutor extends base_js_1.BaseChain {
573
576
  const tool = nameToolMap[agentAction.tool];
574
577
  try {
575
578
  observation = await tool.call(agentAction.toolInput, runManager?.getChild());
579
+ if (typeof observation !== "string") {
580
+ throw new Error("Received unsupported non-string response from tool call.");
581
+ }
576
582
  }
577
583
  catch (e) {
578
584
  // eslint-disable-next-line no-instanceof/no-instanceof
@@ -473,6 +473,9 @@ export class AgentExecutor extends BaseChain {
473
473
  observation = tool
474
474
  ? await tool.invoke(action.toolInput, patchConfig(config, { callbacks: runManager?.getChild() }))
475
475
  : `${action.tool} is not a valid tool, try another one.`;
476
+ if (typeof observation !== "string") {
477
+ throw new Error("Received unsupported non-string response from tool call.");
478
+ }
476
479
  }
477
480
  catch (e) {
478
481
  // eslint-disable-next-line no-instanceof/no-instanceof
@@ -568,6 +571,9 @@ export class AgentExecutor extends BaseChain {
568
571
  const tool = nameToolMap[agentAction.tool];
569
572
  try {
570
573
  observation = await tool.call(agentAction.toolInput, runManager?.getChild());
574
+ if (typeof observation !== "string") {
575
+ throw new Error("Received unsupported non-string response from tool call.");
576
+ }
571
577
  }
572
578
  catch (e) {
573
579
  // eslint-disable-next-line no-instanceof/no-instanceof
@@ -0,0 +1,600 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initChatModel = exports._inferModelProvider = void 0;
4
+ const chat_models_1 = require("@langchain/core/language_models/chat_models");
5
+ const runnables_1 = require("@langchain/core/runnables");
6
+ const stream_1 = require("@langchain/core/utils/stream");
7
+ const _SUPPORTED_PROVIDERS = [
8
+ "openai",
9
+ "anthropic",
10
+ "azure_openai",
11
+ "cohere",
12
+ "google-vertexai",
13
+ "google-genai",
14
+ "ollama",
15
+ "together",
16
+ "fireworks",
17
+ "mistralai",
18
+ "groq",
19
+ "bedrock",
20
+ ];
21
+ async function _initChatModelHelper(model, modelProvider,
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ params = {}) {
24
+ const modelProviderCopy = modelProvider || _inferModelProvider(model);
25
+ if (!modelProviderCopy) {
26
+ throw new Error(`Unable to infer model provider for { model: ${model} }, please specify modelProvider directly.`);
27
+ }
28
+ try {
29
+ switch (modelProviderCopy) {
30
+ case "openai": {
31
+ const { ChatOpenAI } = await import("@langchain/openai");
32
+ return new ChatOpenAI({ model, ...params });
33
+ }
34
+ case "anthropic": {
35
+ const { ChatAnthropic } = await import("@langchain/anthropic");
36
+ return new ChatAnthropic({ model, ...params });
37
+ }
38
+ case "azure_openai": {
39
+ const { AzureChatOpenAI } = await import("@langchain/openai");
40
+ return new AzureChatOpenAI({ model, ...params });
41
+ }
42
+ case "cohere": {
43
+ const { ChatCohere } = await import("@langchain/cohere");
44
+ return new ChatCohere({ model, ...params });
45
+ }
46
+ case "google-vertexai": {
47
+ const { ChatVertexAI } = await import("@langchain/google-vertexai");
48
+ return new ChatVertexAI({ model, ...params });
49
+ }
50
+ case "google-genai": {
51
+ const { ChatGoogleGenerativeAI } = await import("@langchain/google-genai");
52
+ return new ChatGoogleGenerativeAI({ model, ...params });
53
+ }
54
+ case "ollama": {
55
+ const { ChatOllama } = await import("@langchain/ollama");
56
+ return new ChatOllama({ model, ...params });
57
+ }
58
+ case "mistralai": {
59
+ const { ChatMistralAI } = await import("@langchain/mistralai");
60
+ return new ChatMistralAI({ model, ...params });
61
+ }
62
+ case "groq": {
63
+ const { ChatGroq } = await import("@langchain/groq");
64
+ return new ChatGroq({ model, ...params });
65
+ }
66
+ case "bedrock": {
67
+ const { ChatBedrockConverse } = await import("@langchain/aws");
68
+ return new ChatBedrockConverse({ model, ...params });
69
+ }
70
+ case "fireworks": {
71
+ const { ChatFireworks } = await import(
72
+ // We can not 'expect-error' because if you explicitly build `@langchain/community`
73
+ // this import will be able to be resolved, thus there will be no error. However
74
+ // this will never be the case in CI.
75
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
76
+ // @ts-ignore - Can not install as a proper dependency due to circular dependency
77
+ "@langchain/community/chat_models/fireworks");
78
+ return new ChatFireworks({ model, ...params });
79
+ }
80
+ case "together": {
81
+ const { ChatTogetherAI } = await import(
82
+ // We can not 'expect-error' because if you explicitly build `@langchain/community`
83
+ // this import will be able to be resolved, thus there will be no error. However
84
+ // this will never be the case in CI.
85
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
86
+ // @ts-ignore - Can not install as a proper dependency due to circular dependency
87
+ "@langchain/community/chat_models/togetherai");
88
+ return new ChatTogetherAI({ model, ...params });
89
+ }
90
+ default: {
91
+ const supported = _SUPPORTED_PROVIDERS.join(", ");
92
+ throw new Error(`Unsupported { modelProvider: ${modelProviderCopy} }.\n\nSupported model providers are: ${supported}`);
93
+ }
94
+ }
95
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
+ }
97
+ catch (e) {
98
+ if ("code" in e && e.code.includes("ERR_MODULE_NOT_FOUND")) {
99
+ const attemptedPackage = new Error(e).message
100
+ .split("Error: Cannot find package '")[1]
101
+ .split("'")[0];
102
+ throw new Error(`Unable to import ${attemptedPackage}. Please install with ` +
103
+ `\`npm install ${attemptedPackage}\` or \`yarn add ${attemptedPackage}\``);
104
+ }
105
+ throw e;
106
+ }
107
+ }
108
+ /**
109
+ * Attempts to infer the model provider based on the given model name.
110
+ *
111
+ * @param {string} modelName - The name of the model to infer the provider for.
112
+ * @returns {string | undefined} The inferred model provider name, or undefined if unable to infer.
113
+ *
114
+ * @example
115
+ * _inferModelProvider("gpt-4"); // returns "openai"
116
+ * _inferModelProvider("claude-2"); // returns "anthropic"
117
+ * _inferModelProvider("unknown-model"); // returns undefined
118
+ */
119
+ function _inferModelProvider(modelName) {
120
+ if (modelName.startsWith("gpt-3") || modelName.startsWith("gpt-4")) {
121
+ return "openai";
122
+ }
123
+ else if (modelName.startsWith("claude")) {
124
+ return "anthropic";
125
+ }
126
+ else if (modelName.startsWith("command")) {
127
+ return "cohere";
128
+ }
129
+ else if (modelName.startsWith("accounts/fireworks")) {
130
+ return "fireworks";
131
+ }
132
+ else if (modelName.startsWith("gemini")) {
133
+ return "google-vertexai";
134
+ }
135
+ else if (modelName.startsWith("amazon.")) {
136
+ return "bedrock";
137
+ }
138
+ else {
139
+ return undefined;
140
+ }
141
+ }
142
+ exports._inferModelProvider = _inferModelProvider;
143
+ class _ConfigurableModel extends chat_models_1.BaseChatModel {
144
+ _llmType() {
145
+ return "chat_model";
146
+ }
147
+ constructor(fields) {
148
+ super(fields);
149
+ Object.defineProperty(this, "lc_namespace", {
150
+ enumerable: true,
151
+ configurable: true,
152
+ writable: true,
153
+ value: ["langchain", "chat_models"]
154
+ });
155
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
156
+ Object.defineProperty(this, "_defaultConfig", {
157
+ enumerable: true,
158
+ configurable: true,
159
+ writable: true,
160
+ value: {}
161
+ });
162
+ /**
163
+ * @default "any"
164
+ */
165
+ Object.defineProperty(this, "_configurableFields", {
166
+ enumerable: true,
167
+ configurable: true,
168
+ writable: true,
169
+ value: "any"
170
+ });
171
+ /**
172
+ * @default ""
173
+ */
174
+ Object.defineProperty(this, "_configPrefix", {
175
+ enumerable: true,
176
+ configurable: true,
177
+ writable: true,
178
+ value: void 0
179
+ });
180
+ /**
181
+ * Methods which should be called after the model is initialized.
182
+ * The key will be the method name, and the value will be the arguments.
183
+ */
184
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
185
+ Object.defineProperty(this, "_queuedMethodOperations", {
186
+ enumerable: true,
187
+ configurable: true,
188
+ writable: true,
189
+ value: {}
190
+ });
191
+ // Extract the input types from the `BaseModel` class.
192
+ Object.defineProperty(this, "withStructuredOutput", {
193
+ enumerable: true,
194
+ configurable: true,
195
+ writable: true,
196
+ value: (schema, ...args) => {
197
+ this._queuedMethodOperations.withStructuredOutput = [schema, ...args];
198
+ return new _ConfigurableModel({
199
+ defaultConfig: this._defaultConfig,
200
+ configurableFields: this._configurableFields,
201
+ configPrefix: this._configPrefix,
202
+ queuedMethodOperations: this._queuedMethodOperations,
203
+ });
204
+ }
205
+ });
206
+ this._defaultConfig = fields.defaultConfig ?? {};
207
+ if (fields.configurableFields === "any") {
208
+ this._configurableFields = "any";
209
+ }
210
+ else {
211
+ this._configurableFields = fields.configurableFields ?? "any";
212
+ }
213
+ if (fields.configPrefix) {
214
+ this._configPrefix = fields.configPrefix.endsWith("_")
215
+ ? fields.configPrefix
216
+ : `${fields.configPrefix}_`;
217
+ }
218
+ else {
219
+ this._configPrefix = "";
220
+ }
221
+ this._queuedMethodOperations =
222
+ fields.queuedMethodOperations ?? this._queuedMethodOperations;
223
+ }
224
+ async _model(config) {
225
+ const params = { ...this._defaultConfig, ...this._modelParams(config) };
226
+ let initializedModel = await _initChatModelHelper(params.model, params.modelProvider, params);
227
+ // Apply queued method operations
228
+ const queuedMethodOperationsEntries = Object.entries(this._queuedMethodOperations);
229
+ if (queuedMethodOperationsEntries.length > 0) {
230
+ for (const [method, args] of queuedMethodOperationsEntries) {
231
+ if (method in initializedModel &&
232
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
233
+ typeof initializedModel[method] === "function") {
234
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
235
+ initializedModel = await initializedModel[method](...args);
236
+ }
237
+ }
238
+ }
239
+ return initializedModel;
240
+ }
241
+ async _generate(messages, options, runManager) {
242
+ const model = await this._model(options);
243
+ return model._generate(messages, options ?? {}, runManager);
244
+ }
245
+ bindTools(tools,
246
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
247
+ params) {
248
+ this._queuedMethodOperations.bindTools = [tools, params];
249
+ return new _ConfigurableModel({
250
+ defaultConfig: this._defaultConfig,
251
+ configurableFields: this._configurableFields,
252
+ configPrefix: this._configPrefix,
253
+ queuedMethodOperations: this._queuedMethodOperations,
254
+ });
255
+ }
256
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
257
+ _modelParams(config) {
258
+ const configurable = config?.configurable ?? {};
259
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
260
+ let modelParams = {};
261
+ for (const [key, value] of Object.entries(configurable)) {
262
+ if (key.startsWith(this._configPrefix)) {
263
+ const strippedKey = this._removePrefix(key, this._configPrefix);
264
+ modelParams[strippedKey] = value;
265
+ }
266
+ }
267
+ if (this._configurableFields !== "any") {
268
+ modelParams = Object.fromEntries(Object.entries(modelParams).filter(([key]) => this._configurableFields.includes(key)));
269
+ }
270
+ return modelParams;
271
+ }
272
+ _removePrefix(str, prefix) {
273
+ return str.startsWith(prefix) ? str.slice(prefix.length) : str;
274
+ }
275
+ /**
276
+ * Bind config to a Runnable, returning a new Runnable.
277
+ * @param {RunnableConfig | undefined} [config] - The config to bind.
278
+ * @returns {RunnableBinding<RunInput, RunOutput, CallOptions>} A new RunnableBinding with the bound config.
279
+ */
280
+ withConfig(config) {
281
+ const mergedConfig = { ...(config || {}) };
282
+ const modelParams = this._modelParams(mergedConfig);
283
+ const remainingConfig = Object.fromEntries(Object.entries(mergedConfig).filter(([k]) => k !== "configurable"));
284
+ remainingConfig.configurable = Object.fromEntries(Object.entries(mergedConfig.configurable || {}).filter(([k]) => this._configPrefix &&
285
+ !Object.keys(modelParams).includes(this._removePrefix(k, this._configPrefix))));
286
+ const newConfigurableModel = new _ConfigurableModel({
287
+ defaultConfig: { ...this._defaultConfig, ...modelParams },
288
+ configurableFields: Array.isArray(this._configurableFields)
289
+ ? [...this._configurableFields]
290
+ : this._configurableFields,
291
+ configPrefix: this._configPrefix,
292
+ });
293
+ return new runnables_1.RunnableBinding({
294
+ config: mergedConfig,
295
+ bound: newConfigurableModel,
296
+ });
297
+ }
298
+ async invoke(input, options) {
299
+ const model = await this._model(options);
300
+ const config = (0, runnables_1.ensureConfig)(options);
301
+ return model.invoke(input, config);
302
+ }
303
+ async stream(input, options) {
304
+ const model = await this._model(options);
305
+ const wrappedGenerator = new stream_1.AsyncGeneratorWithSetup({
306
+ generator: await model.stream(input, options),
307
+ config: options,
308
+ });
309
+ await wrappedGenerator.setup;
310
+ return stream_1.IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
311
+ }
312
+ async batch(inputs, options, batchOptions) {
313
+ // We can super this since the base runnable implementation of
314
+ // `.batch` will call `.invoke` on each input.
315
+ return super.batch(inputs, options, batchOptions);
316
+ }
317
+ async *transform(generator, options) {
318
+ const model = await this._model(options);
319
+ const config = (0, runnables_1.ensureConfig)(options);
320
+ yield* model.transform(generator, config);
321
+ }
322
+ async *streamLog(input, options, streamOptions) {
323
+ const model = await this._model(options);
324
+ const config = (0, runnables_1.ensureConfig)(options);
325
+ yield* model.streamLog(input, config, {
326
+ ...streamOptions,
327
+ _schemaFormat: "original",
328
+ includeNames: streamOptions?.includeNames,
329
+ includeTypes: streamOptions?.includeTypes,
330
+ includeTags: streamOptions?.includeTags,
331
+ excludeNames: streamOptions?.excludeNames,
332
+ excludeTypes: streamOptions?.excludeTypes,
333
+ excludeTags: streamOptions?.excludeTags,
334
+ });
335
+ }
336
+ streamEvents(input, options, streamOptions) {
337
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
338
+ const outerThis = this;
339
+ async function* wrappedGenerator() {
340
+ const model = await outerThis._model(options);
341
+ const config = (0, runnables_1.ensureConfig)(options);
342
+ const eventStream = model.streamEvents(input, config, streamOptions);
343
+ for await (const chunk of eventStream) {
344
+ yield chunk;
345
+ }
346
+ }
347
+ return stream_1.IterableReadableStream.fromAsyncGenerator(wrappedGenerator());
348
+ }
349
+ }
350
+ // ################################# FOR CONTRIBUTORS #################################
351
+ //
352
+ // If adding support for a new provider, please append the provider
353
+ // name to the supported list in the docstring below.
354
+ //
355
+ // ####################################################################################
356
+ /**
357
+ * Initialize a ChatModel from the model name and provider.
358
+ * Must have the integration package corresponding to the model provider installed.
359
+ *
360
+ * @template {extends BaseLanguageModelInput = BaseLanguageModelInput} RunInput - The input type for the model.
361
+ * @template {extends ConfigurableChatModelCallOptions = ConfigurableChatModelCallOptions} CallOptions - Call options for the model.
362
+ *
363
+ * @param {string | ChatModelProvider} [model] - The name of the model, e.g. "gpt-4", "claude-3-opus-20240229".
364
+ * @param {Object} [fields] - Additional configuration options.
365
+ * @param {string} [fields.modelProvider] - The model provider. Supported values include:
366
+ * - openai (@langchain/openai)
367
+ * - anthropic (@langchain/anthropic)
368
+ * - azure_openai (@langchain/openai)
369
+ * - google-vertexai (@langchain/google-vertexai)
370
+ * - google-genai (@langchain/google-genai)
371
+ * - bedrock (@langchain/aws)
372
+ * - cohere (@langchain/cohere)
373
+ * - fireworks (@langchain/community/chat_models/fireworks)
374
+ * - together (@langchain/community/chat_models/togetherai)
375
+ * - mistralai (@langchain/mistralai)
376
+ * - groq (@langchain/groq)
377
+ * - ollama (@langchain/ollama)
378
+ * @param {string[] | "any"} [fields.configurableFields] - Which model parameters are configurable:
379
+ * - undefined: No configurable fields.
380
+ * - "any": All fields are configurable. (See Security Note in description)
381
+ * - string[]: Specified fields are configurable.
382
+ * @param {string} [fields.configPrefix] - Prefix for configurable fields at runtime.
383
+ * @param {Record<string, any>} [fields.params] - Additional keyword args to pass to the ChatModel constructor.
384
+ * @returns {Promise<_ConfigurableModel<RunInput, CallOptions>>} A class which extends BaseChatModel.
385
+ * @throws {Error} If modelProvider cannot be inferred or isn't supported.
386
+ * @throws {Error} If the model provider integration package is not installed.
387
+ *
388
+ * @example Initialize non-configurable models
389
+ * ```typescript
390
+ * import { initChatModel } from "langchain/chat_models/universal";
391
+ *
392
+ * const gpt4 = await initChatModel("gpt-4", {
393
+ * modelProvider: "openai",
394
+ * temperature: 0.25,
395
+ * });
396
+ * const gpt4Result = await gpt4.invoke("what's your name");
397
+ *
398
+ * const claude = await initChatModel("claude-3-opus-20240229", {
399
+ * modelProvider: "anthropic",
400
+ * temperature: 0.25,
401
+ * });
402
+ * const claudeResult = await claude.invoke("what's your name");
403
+ *
404
+ * const gemini = await initChatModel("gemini-1.5-pro", {
405
+ * modelProvider: "google-vertexai",
406
+ * temperature: 0.25,
407
+ * });
408
+ * const geminiResult = await gemini.invoke("what's your name");
409
+ * ```
410
+ *
411
+ * @example Create a partially configurable model with no default model
412
+ * ```typescript
413
+ * import { initChatModel } from "langchain/chat_models/universal";
414
+ *
415
+ * const configurableModel = await initChatModel(undefined, {
416
+ * temperature: 0,
417
+ * configurableFields: ["model", "apiKey"],
418
+ * });
419
+ *
420
+ * const gpt4Result = await configurableModel.invoke("what's your name", {
421
+ * configurable: {
422
+ * model: "gpt-4",
423
+ * },
424
+ * });
425
+ *
426
+ * const claudeResult = await configurableModel.invoke("what's your name", {
427
+ * configurable: {
428
+ * model: "claude-3-5-sonnet-20240620",
429
+ * },
430
+ * });
431
+ * ```
432
+ *
433
+ * @example Create a fully configurable model with a default model and a config prefix
434
+ * ```typescript
435
+ * import { initChatModel } from "langchain/chat_models/universal";
436
+ *
437
+ * const configurableModelWithDefault = await initChatModel("gpt-4", {
438
+ * modelProvider: "openai",
439
+ * configurableFields: "any",
440
+ * configPrefix: "foo",
441
+ * temperature: 0,
442
+ * });
443
+ *
444
+ * const openaiResult = await configurableModelWithDefault.invoke(
445
+ * "what's your name",
446
+ * {
447
+ * configurable: {
448
+ * foo_apiKey: process.env.OPENAI_API_KEY,
449
+ * },
450
+ * }
451
+ * );
452
+ *
453
+ * const claudeResult = await configurableModelWithDefault.invoke(
454
+ * "what's your name",
455
+ * {
456
+ * configurable: {
457
+ * foo_model: "claude-3-5-sonnet-20240620",
458
+ * foo_modelProvider: "anthropic",
459
+ * foo_temperature: 0.6,
460
+ * foo_apiKey: process.env.ANTHROPIC_API_KEY,
461
+ * },
462
+ * }
463
+ * );
464
+ * ```
465
+ *
466
+ * @example Bind tools to a configurable model:
467
+ * ```typescript
468
+ * import { initChatModel } from "langchain/chat_models/universal";
469
+ * import { z } from "zod";
470
+ * import { tool } from "@langchain/core/tools";
471
+ *
472
+ * const getWeatherTool = tool(
473
+ * (input) => {
474
+ * // Do something with the input
475
+ * return JSON.stringify(input);
476
+ * },
477
+ * {
478
+ * schema: z
479
+ * .object({
480
+ * location: z
481
+ * .string()
482
+ * .describe("The city and state, e.g. San Francisco, CA"),
483
+ * })
484
+ * .describe("Get the current weather in a given location"),
485
+ * name: "GetWeather",
486
+ * description: "Get the current weather in a given location",
487
+ * }
488
+ * );
489
+ *
490
+ * const getPopulationTool = tool(
491
+ * (input) => {
492
+ * // Do something with the input
493
+ * return JSON.stringify(input);
494
+ * },
495
+ * {
496
+ * schema: z
497
+ * .object({
498
+ * location: z
499
+ * .string()
500
+ * .describe("The city and state, e.g. San Francisco, CA"),
501
+ * })
502
+ * .describe("Get the current population in a given location"),
503
+ * name: "GetPopulation",
504
+ * description: "Get the current population in a given location",
505
+ * }
506
+ * );
507
+ *
508
+ * const configurableModel = await initChatModel("gpt-4", {
509
+ * configurableFields: ["model", "modelProvider", "apiKey"],
510
+ * temperature: 0,
511
+ * });
512
+ *
513
+ * const configurableModelWithTools = configurableModel.bind({
514
+ * tools: [getWeatherTool, getPopulationTool],
515
+ * });
516
+ *
517
+ * const configurableToolResult = await configurableModelWithTools.invoke(
518
+ * "Which city is hotter today and which is bigger: LA or NY?",
519
+ * {
520
+ * configurable: {
521
+ * apiKey: process.env.OPENAI_API_KEY,
522
+ * },
523
+ * }
524
+ * );
525
+ *
526
+ * const configurableToolResult2 = await configurableModelWithTools.invoke(
527
+ * "Which city is hotter today and which is bigger: LA or NY?",
528
+ * {
529
+ * configurable: {
530
+ * model: "claude-3-5-sonnet-20240620",
531
+ * apiKey: process.env.ANTHROPIC_API_KEY,
532
+ * },
533
+ * }
534
+ * );
535
+ * ```
536
+ *
537
+ * @description
538
+ * This function initializes a ChatModel based on the provided model name and provider.
539
+ * It supports various model providers and allows for runtime configuration of model parameters.
540
+ *
541
+ * Security Note: Setting `configurableFields` to "any" means fields like api_key, base_url, etc.
542
+ * can be altered at runtime, potentially redirecting model requests to a different service/user.
543
+ * Make sure that if you're accepting untrusted configurations, you enumerate the
544
+ * `configurableFields` explicitly.
545
+ *
546
+ * The function will attempt to infer the model provider from the model name if not specified.
547
+ * Certain model name prefixes are associated with specific providers:
548
+ * - gpt-3... or gpt-4... -> openai
549
+ * - claude... -> anthropic
550
+ * - amazon.... -> bedrock
551
+ * - gemini... -> google-vertexai
552
+ * - command... -> cohere
553
+ * - accounts/fireworks... -> fireworks
554
+ *
555
+ * @since 0.2.11
556
+ * @version 0.2.11
557
+ */
558
+ async function initChatModel(model,
559
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
560
+ fields) {
561
+ const { configurableFields, configPrefix, modelProvider, ...params } = {
562
+ configPrefix: "",
563
+ ...(fields ?? {}),
564
+ };
565
+ let configurableFieldsCopy = configurableFields;
566
+ if (!model && !configurableFieldsCopy) {
567
+ configurableFieldsCopy = ["model", "modelProvider"];
568
+ }
569
+ if (configPrefix && !configurableFieldsCopy) {
570
+ console.warn(`{ configPrefix: ${configPrefix} } has been set but no fields are configurable. Set ` +
571
+ `{ configurableFields: [...] } to specify the model params that are ` +
572
+ `configurable.`);
573
+ }
574
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
575
+ const paramsCopy = { ...params };
576
+ if (!configurableFieldsCopy) {
577
+ return new _ConfigurableModel({
578
+ defaultConfig: {
579
+ ...paramsCopy,
580
+ model,
581
+ modelProvider,
582
+ },
583
+ configPrefix,
584
+ });
585
+ }
586
+ else {
587
+ if (model) {
588
+ paramsCopy.model = model;
589
+ }
590
+ if (modelProvider) {
591
+ paramsCopy.modelProvider = modelProvider;
592
+ }
593
+ return new _ConfigurableModel({
594
+ defaultConfig: paramsCopy,
595
+ configPrefix,
596
+ configurableFields: configurableFieldsCopy,
597
+ });
598
+ }
599
+ }
600
+ exports.initChatModel = initChatModel;