langchain 1.0.0-alpha.4 → 1.0.0-alpha.6

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 (384) hide show
  1. package/dist/agents/ReactAgent.cjs +5 -5
  2. package/dist/agents/ReactAgent.cjs.map +1 -1
  3. package/dist/agents/ReactAgent.d.cts +1 -3
  4. package/dist/agents/ReactAgent.d.cts.map +1 -1
  5. package/dist/agents/ReactAgent.d.ts +1 -3
  6. package/dist/agents/ReactAgent.d.ts.map +1 -1
  7. package/dist/agents/ReactAgent.js +6 -6
  8. package/dist/agents/ReactAgent.js.map +1 -1
  9. package/dist/agents/RunnableCallable.cjs +5 -0
  10. package/dist/agents/RunnableCallable.cjs.map +1 -1
  11. package/dist/agents/RunnableCallable.d.cts +2 -0
  12. package/dist/agents/RunnableCallable.d.cts.map +1 -1
  13. package/dist/agents/RunnableCallable.d.ts +2 -0
  14. package/dist/agents/RunnableCallable.d.ts.map +1 -1
  15. package/dist/agents/RunnableCallable.js +5 -0
  16. package/dist/agents/RunnableCallable.js.map +1 -1
  17. package/dist/agents/annotation.cjs.map +1 -1
  18. package/dist/agents/annotation.d.cts +5 -7
  19. package/dist/agents/annotation.d.cts.map +1 -1
  20. package/dist/agents/annotation.d.ts +4 -6
  21. package/dist/agents/annotation.d.ts.map +1 -1
  22. package/dist/agents/annotation.js.map +1 -1
  23. package/dist/agents/createAgent.cjs +10 -0
  24. package/dist/agents/createAgent.cjs.map +1 -0
  25. package/dist/agents/createAgent.js +10 -0
  26. package/dist/agents/createAgent.js.map +1 -0
  27. package/dist/agents/index.cjs +23 -4
  28. package/dist/agents/index.cjs.map +1 -1
  29. package/dist/agents/index.d.cts +84 -21
  30. package/dist/agents/index.d.cts.map +1 -1
  31. package/dist/agents/index.d.ts +84 -21
  32. package/dist/agents/index.d.ts.map +1 -1
  33. package/dist/agents/index.js +23 -4
  34. package/dist/agents/index.js.map +1 -1
  35. package/dist/agents/middlewareAgent/ReactAgent.cjs +255 -0
  36. package/dist/agents/middlewareAgent/ReactAgent.cjs.map +1 -0
  37. package/dist/agents/middlewareAgent/ReactAgent.d.cts +67 -0
  38. package/dist/agents/middlewareAgent/ReactAgent.d.cts.map +1 -0
  39. package/dist/agents/middlewareAgent/ReactAgent.d.ts +67 -0
  40. package/dist/agents/middlewareAgent/ReactAgent.d.ts.map +1 -0
  41. package/dist/agents/middlewareAgent/ReactAgent.js +254 -0
  42. package/dist/agents/middlewareAgent/ReactAgent.js.map +1 -0
  43. package/dist/agents/middlewareAgent/annotation.cjs +39 -0
  44. package/dist/agents/middlewareAgent/annotation.cjs.map +1 -0
  45. package/dist/agents/middlewareAgent/annotation.js +38 -0
  46. package/dist/agents/middlewareAgent/annotation.js.map +1 -0
  47. package/dist/agents/middlewareAgent/index.cjs +11 -0
  48. package/dist/agents/middlewareAgent/index.cjs.map +1 -0
  49. package/dist/agents/middlewareAgent/index.js +11 -0
  50. package/dist/agents/middlewareAgent/index.js.map +1 -0
  51. package/dist/agents/middlewareAgent/middleware/hitl.cjs +235 -0
  52. package/dist/agents/middlewareAgent/middleware/hitl.cjs.map +1 -0
  53. package/dist/agents/middlewareAgent/middleware/hitl.d.cts +199 -0
  54. package/dist/agents/middlewareAgent/middleware/hitl.d.cts.map +1 -0
  55. package/dist/agents/middlewareAgent/middleware/hitl.d.ts +199 -0
  56. package/dist/agents/middlewareAgent/middleware/hitl.d.ts.map +1 -0
  57. package/dist/agents/middlewareAgent/middleware/hitl.js +234 -0
  58. package/dist/agents/middlewareAgent/middleware/hitl.js.map +1 -0
  59. package/dist/agents/middlewareAgent/middleware/index.cjs +26 -0
  60. package/dist/agents/middlewareAgent/middleware/index.cjs.map +1 -0
  61. package/dist/agents/middlewareAgent/middleware/index.d.cts +4 -0
  62. package/dist/agents/middlewareAgent/middleware/index.d.ts +4 -0
  63. package/dist/agents/middlewareAgent/middleware/index.js +17 -0
  64. package/dist/agents/middlewareAgent/middleware/index.js.map +1 -0
  65. package/dist/agents/middlewareAgent/middleware/promptCaching.cjs +182 -0
  66. package/dist/agents/middlewareAgent/middleware/promptCaching.cjs.map +1 -0
  67. package/dist/agents/middlewareAgent/middleware/promptCaching.d.cts +152 -0
  68. package/dist/agents/middlewareAgent/middleware/promptCaching.d.cts.map +1 -0
  69. package/dist/agents/middlewareAgent/middleware/promptCaching.d.ts +152 -0
  70. package/dist/agents/middlewareAgent/middleware/promptCaching.d.ts.map +1 -0
  71. package/dist/agents/middlewareAgent/middleware/promptCaching.js +181 -0
  72. package/dist/agents/middlewareAgent/middleware/promptCaching.js.map +1 -0
  73. package/dist/agents/middlewareAgent/middleware/summarization.cjs +262 -0
  74. package/dist/agents/middlewareAgent/middleware/summarization.cjs.map +1 -0
  75. package/dist/agents/middlewareAgent/middleware/summarization.d.cts +89 -0
  76. package/dist/agents/middlewareAgent/middleware/summarization.d.cts.map +1 -0
  77. package/dist/agents/middlewareAgent/middleware/summarization.d.ts +89 -0
  78. package/dist/agents/middlewareAgent/middleware/summarization.d.ts.map +1 -0
  79. package/dist/agents/middlewareAgent/middleware/summarization.js +260 -0
  80. package/dist/agents/middlewareAgent/middleware/summarization.js.map +1 -0
  81. package/dist/agents/middlewareAgent/middleware.cjs +47 -0
  82. package/dist/agents/middlewareAgent/middleware.cjs.map +1 -0
  83. package/dist/agents/middlewareAgent/middleware.d.cts +46 -0
  84. package/dist/agents/middlewareAgent/middleware.d.cts.map +1 -0
  85. package/dist/agents/middlewareAgent/middleware.d.ts +46 -0
  86. package/dist/agents/middlewareAgent/middleware.d.ts.map +1 -0
  87. package/dist/agents/middlewareAgent/middleware.js +46 -0
  88. package/dist/agents/middlewareAgent/middleware.js.map +1 -0
  89. package/dist/agents/middlewareAgent/nodes/AfterModalNode.cjs +29 -0
  90. package/dist/agents/middlewareAgent/nodes/AfterModalNode.cjs.map +1 -0
  91. package/dist/agents/middlewareAgent/nodes/AfterModalNode.js +29 -0
  92. package/dist/agents/middlewareAgent/nodes/AfterModalNode.js.map +1 -0
  93. package/dist/agents/middlewareAgent/nodes/AgentNode.cjs +325 -0
  94. package/dist/agents/middlewareAgent/nodes/AgentNode.cjs.map +1 -0
  95. package/dist/agents/middlewareAgent/nodes/AgentNode.js +324 -0
  96. package/dist/agents/middlewareAgent/nodes/AgentNode.js.map +1 -0
  97. package/dist/agents/middlewareAgent/nodes/BeforeModalNode.cjs +27 -0
  98. package/dist/agents/middlewareAgent/nodes/BeforeModalNode.cjs.map +1 -0
  99. package/dist/agents/middlewareAgent/nodes/BeforeModalNode.js +27 -0
  100. package/dist/agents/middlewareAgent/nodes/BeforeModalNode.js.map +1 -0
  101. package/dist/agents/middlewareAgent/nodes/middleware.cjs +73 -0
  102. package/dist/agents/middlewareAgent/nodes/middleware.cjs.map +1 -0
  103. package/dist/agents/middlewareAgent/nodes/middleware.js +73 -0
  104. package/dist/agents/middlewareAgent/nodes/middleware.js.map +1 -0
  105. package/dist/agents/middlewareAgent/nodes/utils.cjs +74 -0
  106. package/dist/agents/middlewareAgent/nodes/utils.cjs.map +1 -0
  107. package/dist/agents/middlewareAgent/nodes/utils.js +70 -0
  108. package/dist/agents/middlewareAgent/nodes/utils.js.map +1 -0
  109. package/dist/agents/middlewareAgent/types.d.cts +380 -0
  110. package/dist/agents/middlewareAgent/types.d.cts.map +1 -0
  111. package/dist/agents/middlewareAgent/types.d.ts +380 -0
  112. package/dist/agents/middlewareAgent/types.d.ts.map +1 -0
  113. package/dist/agents/nodes/AgentNode.cjs +4 -4
  114. package/dist/agents/nodes/AgentNode.cjs.map +1 -1
  115. package/dist/agents/nodes/AgentNode.js +4 -4
  116. package/dist/agents/nodes/AgentNode.js.map +1 -1
  117. package/dist/agents/nodes/ToolNode.cjs +3 -3
  118. package/dist/agents/nodes/ToolNode.cjs.map +1 -1
  119. package/dist/agents/nodes/ToolNode.d.cts +4 -5
  120. package/dist/agents/nodes/ToolNode.d.cts.map +1 -1
  121. package/dist/agents/nodes/ToolNode.d.ts +1 -2
  122. package/dist/agents/nodes/ToolNode.d.ts.map +1 -1
  123. package/dist/agents/nodes/ToolNode.js +4 -4
  124. package/dist/agents/nodes/ToolNode.js.map +1 -1
  125. package/dist/agents/responses.cjs +1 -1
  126. package/dist/agents/responses.cjs.map +1 -1
  127. package/dist/agents/responses.d.cts.map +1 -1
  128. package/dist/agents/responses.d.ts.map +1 -1
  129. package/dist/agents/responses.js +1 -1
  130. package/dist/agents/responses.js.map +1 -1
  131. package/dist/agents/types.d.cts +5 -7
  132. package/dist/agents/types.d.cts.map +1 -1
  133. package/dist/agents/types.d.ts +1 -3
  134. package/dist/agents/types.d.ts.map +1 -1
  135. package/dist/agents/utils.cjs +6 -6
  136. package/dist/agents/utils.cjs.map +1 -1
  137. package/dist/agents/utils.js +7 -7
  138. package/dist/agents/utils.js.map +1 -1
  139. package/dist/agents/withAgentName.cjs.map +1 -1
  140. package/dist/agents/withAgentName.js.map +1 -1
  141. package/dist/chains/api/api_chain.d.cts +1 -1
  142. package/dist/chains/api/prompts.cjs.map +1 -1
  143. package/dist/chains/api/prompts.js.map +1 -1
  144. package/dist/chains/base.d.cts +1 -1
  145. package/dist/chains/combine_docs_chain.d.cts +1 -1
  146. package/dist/chains/combine_documents/stuff.d.cts +1 -1
  147. package/dist/chains/constitutional_ai/constitutional_chain.cjs.map +1 -1
  148. package/dist/chains/constitutional_ai/constitutional_chain.js.map +1 -1
  149. package/dist/chains/conversational_retrieval_chain.d.cts +1 -1
  150. package/dist/chains/graph_qa/cypher.d.cts +1 -1
  151. package/dist/chains/history_aware_retriever.d.cts +2 -2
  152. package/dist/chains/index.cjs +0 -3
  153. package/dist/chains/index.cjs.map +1 -1
  154. package/dist/chains/index.d.cts +1 -2
  155. package/dist/chains/index.d.ts +1 -2
  156. package/dist/chains/index.js +1 -3
  157. package/dist/chains/index.js.map +1 -1
  158. package/dist/chains/llm_chain.d.cts +3 -3
  159. package/dist/chains/openai_functions/base.d.cts +3 -3
  160. package/dist/chains/openai_functions/extraction.cjs.map +1 -1
  161. package/dist/chains/openai_functions/extraction.d.cts +1 -3
  162. package/dist/chains/openai_functions/extraction.d.cts.map +1 -1
  163. package/dist/chains/openai_functions/extraction.d.ts +1 -3
  164. package/dist/chains/openai_functions/extraction.d.ts.map +1 -1
  165. package/dist/chains/openai_functions/extraction.js.map +1 -1
  166. package/dist/chains/openai_functions/index.cjs +0 -5
  167. package/dist/chains/openai_functions/index.cjs.map +1 -1
  168. package/dist/chains/openai_functions/index.d.cts +1 -2
  169. package/dist/chains/openai_functions/index.d.ts +1 -2
  170. package/dist/chains/openai_functions/index.js +1 -4
  171. package/dist/chains/openai_functions/index.js.map +1 -1
  172. package/dist/chains/openai_functions/openapi.cjs +4 -4
  173. package/dist/chains/openai_functions/openapi.cjs.map +1 -1
  174. package/dist/chains/openai_functions/openapi.d.cts +2 -2
  175. package/dist/chains/openai_functions/openapi.js +4 -4
  176. package/dist/chains/openai_functions/openapi.js.map +1 -1
  177. package/dist/chains/openai_functions/tagging.cjs.map +1 -1
  178. package/dist/chains/openai_functions/tagging.d.cts +2 -4
  179. package/dist/chains/openai_functions/tagging.d.cts.map +1 -1
  180. package/dist/chains/openai_functions/tagging.d.ts +1 -3
  181. package/dist/chains/openai_functions/tagging.d.ts.map +1 -1
  182. package/dist/chains/openai_functions/tagging.js.map +1 -1
  183. package/dist/chains/query_constructor/index.cjs +4 -4
  184. package/dist/chains/query_constructor/index.cjs.map +1 -1
  185. package/dist/chains/query_constructor/index.d.cts +5 -3
  186. package/dist/chains/query_constructor/index.d.cts.map +1 -1
  187. package/dist/chains/query_constructor/index.d.ts +4 -2
  188. package/dist/chains/query_constructor/index.d.ts.map +1 -1
  189. package/dist/chains/query_constructor/index.js +1 -1
  190. package/dist/chains/query_constructor/index.js.map +1 -1
  191. package/dist/chains/question_answering/map_reduce_prompts.cjs.map +1 -1
  192. package/dist/chains/question_answering/map_reduce_prompts.js.map +1 -1
  193. package/dist/chains/question_answering/refine_prompts.cjs.map +1 -1
  194. package/dist/chains/question_answering/refine_prompts.js.map +1 -1
  195. package/dist/chains/question_answering/stuff_prompts.cjs.map +1 -1
  196. package/dist/chains/question_answering/stuff_prompts.js.map +1 -1
  197. package/dist/chains/retrieval.d.cts +1 -1
  198. package/dist/chains/router/llm_router.d.cts +1 -1
  199. package/dist/chains/router/multi_prompt.cjs +4 -4
  200. package/dist/chains/router/multi_prompt.cjs.map +1 -1
  201. package/dist/chains/router/multi_prompt.js +1 -1
  202. package/dist/chains/router/multi_prompt.js.map +1 -1
  203. package/dist/chains/router/multi_retrieval_qa.cjs +4 -4
  204. package/dist/chains/router/multi_retrieval_qa.cjs.map +1 -1
  205. package/dist/chains/router/multi_retrieval_qa.js +1 -1
  206. package/dist/chains/router/multi_retrieval_qa.js.map +1 -1
  207. package/dist/chains/sql_db/sql_db_chain.d.cts +2 -2
  208. package/dist/chains/sql_db/sql_db_prompt.cjs.map +1 -1
  209. package/dist/chains/sql_db/sql_db_prompt.d.cts.map +1 -1
  210. package/dist/chains/sql_db/sql_db_prompt.d.ts.map +1 -1
  211. package/dist/chains/sql_db/sql_db_prompt.js.map +1 -1
  212. package/dist/chains/summarization/stuff_prompts.cjs.map +1 -1
  213. package/dist/chains/summarization/stuff_prompts.js.map +1 -1
  214. package/dist/chat_models/universal.cjs +8 -5
  215. package/dist/chat_models/universal.cjs.map +1 -1
  216. package/dist/chat_models/universal.d.cts +4 -4
  217. package/dist/chat_models/universal.d.cts.map +1 -1
  218. package/dist/chat_models/universal.d.ts +2 -2
  219. package/dist/chat_models/universal.d.ts.map +1 -1
  220. package/dist/chat_models/universal.js +8 -5
  221. package/dist/chat_models/universal.js.map +1 -1
  222. package/dist/document_loaders/fs/directory.cjs.map +1 -1
  223. package/dist/document_loaders/fs/directory.d.cts +0 -1
  224. package/dist/document_loaders/fs/directory.d.cts.map +1 -1
  225. package/dist/document_loaders/fs/directory.d.ts +0 -1
  226. package/dist/document_loaders/fs/directory.d.ts.map +1 -1
  227. package/dist/document_loaders/fs/directory.js.map +1 -1
  228. package/dist/document_loaders/fs/json.cjs +7 -1
  229. package/dist/document_loaders/fs/json.cjs.map +1 -1
  230. package/dist/document_loaders/fs/json.js +7 -1
  231. package/dist/document_loaders/fs/json.js.map +1 -1
  232. package/dist/embeddings/cache_backed.cjs +1 -1
  233. package/dist/embeddings/cache_backed.cjs.map +1 -1
  234. package/dist/embeddings/cache_backed.d.cts +1 -1
  235. package/dist/embeddings/cache_backed.d.ts +1 -1
  236. package/dist/embeddings/cache_backed.js +2 -2
  237. package/dist/embeddings/cache_backed.js.map +1 -1
  238. package/dist/evaluation/agents/trajectory.d.cts +3 -3
  239. package/dist/evaluation/agents/trajectory.d.cts.map +1 -1
  240. package/dist/evaluation/agents/trajectory.d.ts.map +1 -1
  241. package/dist/evaluation/comparison/pairwise.d.cts +1 -1
  242. package/dist/evaluation/comparison/pairwise.d.cts.map +1 -1
  243. package/dist/evaluation/criteria/criteria.d.cts +1 -1
  244. package/dist/evaluation/criteria/criteria.d.cts.map +1 -1
  245. package/dist/evaluation/criteria/criteria.d.ts.map +1 -1
  246. package/dist/evaluation/embedding_distance/base.cjs +2 -4
  247. package/dist/evaluation/embedding_distance/base.cjs.map +1 -1
  248. package/dist/evaluation/embedding_distance/base.js +2 -3
  249. package/dist/evaluation/embedding_distance/base.js.map +1 -1
  250. package/dist/evaluation/loader.cjs +7 -12
  251. package/dist/evaluation/loader.cjs.map +1 -1
  252. package/dist/evaluation/loader.d.cts +8 -2
  253. package/dist/evaluation/loader.d.cts.map +1 -1
  254. package/dist/evaluation/loader.d.ts +8 -2
  255. package/dist/evaluation/loader.d.ts.map +1 -1
  256. package/dist/evaluation/loader.js +7 -12
  257. package/dist/evaluation/loader.js.map +1 -1
  258. package/dist/evaluation/qa/eval_chain.d.cts +1 -1
  259. package/dist/hub/base.cjs.map +1 -1
  260. package/dist/hub/base.js.map +1 -1
  261. package/dist/index.cjs +3 -0
  262. package/dist/index.cjs.map +1 -1
  263. package/dist/index.d.cts +5 -4
  264. package/dist/index.d.ts +3 -2
  265. package/dist/index.js +3 -1
  266. package/dist/index.js.map +1 -1
  267. package/dist/langchain-core/dist/load/serializable.d.cts.map +1 -1
  268. package/dist/langchain-core/dist/messages/base.d.cts +24 -33
  269. package/dist/langchain-core/dist/messages/base.d.cts.map +1 -1
  270. package/dist/langchain-core/dist/messages/content/index.d.cts +1 -1
  271. package/dist/langchain-core/dist/messages/content/index.d.cts.map +1 -1
  272. package/dist/langchain-core/dist/messages/message.d.cts +598 -0
  273. package/dist/langchain-core/dist/messages/message.d.cts.map +1 -0
  274. package/dist/langchain-core/dist/messages/metadata.d.cts +97 -0
  275. package/dist/langchain-core/dist/messages/metadata.d.cts.map +1 -0
  276. package/dist/langchain-core/dist/messages/utils.d.cts +75 -0
  277. package/dist/langchain-core/dist/messages/utils.d.cts.map +1 -0
  278. package/dist/langchain-core/dist/prompt_values.d.cts.map +1 -1
  279. package/dist/libs/langchain-core/dist/load/serializable.d.ts.map +1 -1
  280. package/dist/libs/langchain-core/dist/messages/base.d.ts +24 -33
  281. package/dist/libs/langchain-core/dist/messages/base.d.ts.map +1 -1
  282. package/dist/libs/langchain-core/dist/messages/content/index.d.ts +1 -1
  283. package/dist/libs/langchain-core/dist/messages/content/index.d.ts.map +1 -1
  284. package/dist/libs/langchain-core/dist/messages/message.d.ts +598 -0
  285. package/dist/libs/langchain-core/dist/messages/message.d.ts.map +1 -0
  286. package/dist/libs/langchain-core/dist/messages/metadata.d.ts +97 -0
  287. package/dist/libs/langchain-core/dist/messages/metadata.d.ts.map +1 -0
  288. package/dist/libs/langchain-core/dist/messages/utils.d.ts +75 -0
  289. package/dist/libs/langchain-core/dist/messages/utils.d.ts.map +1 -0
  290. package/dist/libs/langchain-core/dist/prompt_values.d.ts.map +1 -1
  291. package/dist/libs/langchain-core/dist/utils/types/index.d.ts +2 -0
  292. package/dist/libs/langchain-core/dist/utils/types/index.d.ts.map +1 -1
  293. package/dist/libs/langchain-core/dist/utils/types/zod.d.ts +1 -0
  294. package/dist/load/import_map.cjs +2 -13
  295. package/dist/load/import_map.cjs.map +1 -1
  296. package/dist/load/import_map.js +2 -13
  297. package/dist/load/import_map.js.map +1 -1
  298. package/dist/memory/prompt.cjs.map +1 -1
  299. package/dist/memory/prompt.d.cts.map +1 -1
  300. package/dist/memory/prompt.d.ts.map +1 -1
  301. package/dist/memory/prompt.js.map +1 -1
  302. package/dist/memory/summary.d.cts +1 -1
  303. package/dist/output_parsers/combining.cjs +1 -1
  304. package/dist/output_parsers/combining.cjs.map +1 -1
  305. package/dist/output_parsers/combining.js +1 -1
  306. package/dist/output_parsers/combining.js.map +1 -1
  307. package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.cjs.map +1 -1
  308. package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.js.map +1 -1
  309. package/dist/output_parsers/expression_type_handlers/base.cjs +1 -1
  310. package/dist/output_parsers/expression_type_handlers/base.cjs.map +1 -1
  311. package/dist/output_parsers/expression_type_handlers/base.js +1 -1
  312. package/dist/output_parsers/expression_type_handlers/base.js.map +1 -1
  313. package/dist/output_parsers/fix.d.cts +1 -1
  314. package/dist/output_parsers/http_response.d.cts +1 -1
  315. package/dist/output_parsers/regex.cjs.map +1 -1
  316. package/dist/output_parsers/regex.js.map +1 -1
  317. package/dist/output_parsers/structured.cjs +4 -4
  318. package/dist/output_parsers/structured.cjs.map +1 -1
  319. package/dist/output_parsers/structured.d.cts +2 -2
  320. package/dist/output_parsers/structured.d.cts.map +1 -1
  321. package/dist/output_parsers/structured.d.ts +1 -1
  322. package/dist/output_parsers/structured.d.ts.map +1 -1
  323. package/dist/output_parsers/structured.js +2 -2
  324. package/dist/output_parsers/structured.js.map +1 -1
  325. package/dist/retrievers/ensemble.cjs.map +1 -1
  326. package/dist/retrievers/ensemble.js.map +1 -1
  327. package/dist/storage/file_system.cjs +1 -1
  328. package/dist/storage/file_system.cjs.map +1 -1
  329. package/dist/storage/file_system.js +1 -1
  330. package/dist/storage/file_system.js.map +1 -1
  331. package/dist/tools/fs.cjs +5 -5
  332. package/dist/tools/fs.cjs.map +1 -1
  333. package/dist/tools/fs.d.cts +1 -1
  334. package/dist/tools/fs.d.cts.map +1 -1
  335. package/dist/tools/fs.d.ts +1 -1
  336. package/dist/tools/fs.d.ts.map +1 -1
  337. package/dist/tools/fs.js +1 -1
  338. package/dist/tools/fs.js.map +1 -1
  339. package/dist/tools/json.d.cts +1 -1
  340. package/dist/tools/retriever.cjs +2 -2
  341. package/dist/tools/retriever.cjs.map +1 -1
  342. package/dist/tools/retriever.d.cts +2 -2
  343. package/dist/tools/retriever.d.cts.map +1 -1
  344. package/dist/tools/retriever.d.ts +1 -1
  345. package/dist/tools/retriever.d.ts.map +1 -1
  346. package/dist/tools/retriever.js +1 -1
  347. package/dist/tools/retriever.js.map +1 -1
  348. package/dist/tools/sql.cjs +1 -2
  349. package/dist/tools/sql.cjs.map +1 -1
  350. package/dist/tools/sql.d.cts +1 -1
  351. package/dist/tools/sql.d.cts.map +1 -1
  352. package/dist/tools/sql.d.ts +1 -1
  353. package/dist/tools/sql.d.ts.map +1 -1
  354. package/dist/tools/sql.js +1 -2
  355. package/dist/tools/sql.js.map +1 -1
  356. package/dist/tools/vectorstore.d.cts +1 -1
  357. package/dist/tools/webbrowser.d.cts +1 -1
  358. package/dist/types/expression-parser.d.cts +2 -0
  359. package/dist/types/expression-parser.d.cts.map +1 -1
  360. package/dist/types/expression-parser.d.ts +2 -0
  361. package/dist/types/expression-parser.d.ts.map +1 -1
  362. package/dist/util/hub.cjs +1 -1
  363. package/dist/util/hub.js +1 -1
  364. package/dist/util/openapi.cjs +1 -1
  365. package/dist/util/openapi.cjs.map +1 -1
  366. package/dist/util/openapi.js +1 -1
  367. package/dist/util/openapi.js.map +1 -1
  368. package/package.json +21 -16
  369. package/dist/chains/openai_functions/structured_output.cjs +0 -107
  370. package/dist/chains/openai_functions/structured_output.cjs.map +0 -1
  371. package/dist/chains/openai_functions/structured_output.d.cts +0 -38
  372. package/dist/chains/openai_functions/structured_output.d.cts.map +0 -1
  373. package/dist/chains/openai_functions/structured_output.d.ts +0 -38
  374. package/dist/chains/openai_functions/structured_output.d.ts.map +0 -1
  375. package/dist/chains/openai_functions/structured_output.js +0 -105
  376. package/dist/chains/openai_functions/structured_output.js.map +0 -1
  377. package/dist/chains/openai_moderation.cjs +0 -107
  378. package/dist/chains/openai_moderation.cjs.map +0 -1
  379. package/dist/chains/openai_moderation.d.cts +0 -74
  380. package/dist/chains/openai_moderation.d.cts.map +0 -1
  381. package/dist/chains/openai_moderation.d.ts +0 -74
  382. package/dist/chains/openai_moderation.d.ts.map +0 -1
  383. package/dist/chains/openai_moderation.js +0 -106
  384. package/dist/chains/openai_moderation.js.map +0 -1
@@ -23,9 +23,7 @@ declare function createExtractionChain(schema: FunctionParameters, llm: BaseChat
23
23
  * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.
24
24
  * @returns A LLMChain instance configured to return data matching the schema.
25
25
  */
26
- declare function createExtractionChainFromZod(
27
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
- schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
26
+ declare function createExtractionChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
29
27
  //#endregion
30
28
  export { createExtractionChain, createExtractionChainFromZod };
31
29
  //# sourceMappingURL=extraction.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extraction.d.cts","names":["BaseChatModel","BaseFunctionCallOptions","InteropZodObject","AIMessageChunk","FunctionParameters","LLMChain","createExtractionChain","createExtractionChainFromZod"],"sources":["../../../src/chains/openai_functions/extraction.d.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport { FunctionParameters } from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain } from \"../llm_chain.js\";\n/**\n * Function that creates an extraction chain using the provided JSON schema.\n * It sets up the necessary components, such as the prompt, output parser, and tags.\n * @param schema JSON schema of the function parameters.\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChain(schema: FunctionParameters, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n/**\n * Function that creates an extraction chain from a Zod schema. It\n * converts the Zod schema to a JSON schema using before creating\n * the extraction chain.\n * @param schema The Zod schema which extracted data should match\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChainFromZod(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nschema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n"],"mappings":";;;;;;;;;;;AAaA;;;;;AAAuJC,iBAA/HK,qBAAAA,CAA+HL,MAAAA,EAAjGG,kBAAiGH,EAAAA,GAAAA,EAAxED,aAAwEC,CAA1DA,uBAA0DA,CAAAA,CAAAA,EAA/BI,QAA+BJ,CAAAA,MAAAA,EAAdD,aAAcC,CAAAA,uBAAAA,EAAyBE,cAAzBF,CAAAA,CAAAA;;;;AAAvB;AAShI;;;;AAE+BD,iBAFPO,4BAAAA;;MAEsG,EAAtHL,gBAAwHC,EAAAA,GAAAA,EAAjGH,aAAiGG,CAAnFF,uBAAmFE,CAAAA,CAAAA,EAAxDE,QAAwDF,CAAAA,MAAAA,EAAvCH,aAAuCG,CAAzBF,uBAAyBE,EAAAA,cAAAA,CAAAA,CAAAA"}
1
+ {"version":3,"file":"extraction.d.cts","names":["BaseChatModel","BaseFunctionCallOptions","InteropZodObject","AIMessageChunk","FunctionParameters","LLMChain","createExtractionChain","createExtractionChainFromZod"],"sources":["../../../src/chains/openai_functions/extraction.d.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport { FunctionParameters } from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain } from \"../llm_chain.js\";\n/**\n * Function that creates an extraction chain using the provided JSON schema.\n * It sets up the necessary components, such as the prompt, output parser, and tags.\n * @param schema JSON schema of the function parameters.\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChain(schema: FunctionParameters, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n/**\n * Function that creates an extraction chain from a Zod schema. It\n * converts the Zod schema to a JSON schema using before creating\n * the extraction chain.\n * @param schema The Zod schema which extracted data should match\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n"],"mappings":";;;;;;;;;;;AAaA;;;;;AAAuJC,iBAA/HK,qBAAAA,CAA+HL,MAAAA,EAAjGG,kBAAiGH,EAAAA,GAAAA,EAAxED,aAAwEC,CAA1DA,uBAA0DA,CAAAA,CAAAA,EAA/BI,QAA+BJ,CAAAA,MAAAA,EAAdD,aAAcC,CAAAA,uBAAAA,EAAyBE,cAAzBF,CAAAA,CAAAA;;;;AAAvB;AAShI;;;;AAAoFD,iBAA5DO,4BAAAA,CAA4DP,MAAAA,EAAvBE,gBAAuBF,EAAAA,GAAAA,EAAAA,aAAAA,CAAcC,uBAAdD,CAAAA,CAAAA,EAAyCK,QAAzCL,CAAAA,MAAAA,EAA0DA,aAA1DA,CAAwEC,uBAAxED,EAAiGG,cAAjGH,CAAAA,CAAAA"}
@@ -23,9 +23,7 @@ declare function createExtractionChain(schema: FunctionParameters, llm: BaseChat
23
23
  * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.
24
24
  * @returns A LLMChain instance configured to return data matching the schema.
25
25
  */
26
- declare function createExtractionChainFromZod(
27
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
- schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
26
+ declare function createExtractionChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
29
27
  //#endregion
30
28
  export { createExtractionChain, createExtractionChainFromZod };
31
29
  //# sourceMappingURL=extraction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extraction.d.ts","names":["BaseChatModel","BaseFunctionCallOptions","InteropZodObject","AIMessageChunk","FunctionParameters","LLMChain","createExtractionChain","createExtractionChainFromZod"],"sources":["../../../src/chains/openai_functions/extraction.d.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport { FunctionParameters } from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain } from \"../llm_chain.js\";\n/**\n * Function that creates an extraction chain using the provided JSON schema.\n * It sets up the necessary components, such as the prompt, output parser, and tags.\n * @param schema JSON schema of the function parameters.\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChain(schema: FunctionParameters, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n/**\n * Function that creates an extraction chain from a Zod schema. It\n * converts the Zod schema to a JSON schema using before creating\n * the extraction chain.\n * @param schema The Zod schema which extracted data should match\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChainFromZod(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nschema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n"],"mappings":";;;;;;;;;;;AAaA;;;;;AAAuJC,iBAA/HK,qBAAAA,CAA+HL,MAAAA,EAAjGG,kBAAiGH,EAAAA,GAAAA,EAAxED,aAAwEC,CAA1DA,uBAA0DA,CAAAA,CAAAA,EAA/BI,QAA+BJ,CAAAA,MAAAA,EAAdD,aAAcC,CAAAA,uBAAAA,EAAyBE,cAAzBF,CAAAA,CAAAA;;;;AAAvB;AAShI;;;;AAE+BD,iBAFPO,4BAAAA;;MAEsG,EAAtHL,gBAAwHC,EAAAA,GAAAA,EAAjGH,aAAiGG,CAAnFF,uBAAmFE,CAAAA,CAAAA,EAAxDE,QAAwDF,CAAAA,MAAAA,EAAvCH,aAAuCG,CAAzBF,uBAAyBE,EAAAA,cAAAA,CAAAA,CAAAA"}
1
+ {"version":3,"file":"extraction.d.ts","names":["BaseChatModel","BaseFunctionCallOptions","InteropZodObject","AIMessageChunk","FunctionParameters","LLMChain","createExtractionChain","createExtractionChainFromZod"],"sources":["../../../src/chains/openai_functions/extraction.d.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport { FunctionParameters } from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain } from \"../llm_chain.js\";\n/**\n * Function that creates an extraction chain using the provided JSON schema.\n * It sets up the necessary components, such as the prompt, output parser, and tags.\n * @param schema JSON schema of the function parameters.\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChain(schema: FunctionParameters, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n/**\n * Function that creates an extraction chain from a Zod schema. It\n * converts the Zod schema to a JSON schema using before creating\n * the extraction chain.\n * @param schema The Zod schema which extracted data should match\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n"],"mappings":";;;;;;;;;;;AAaA;;;;;AAAuJC,iBAA/HK,qBAAAA,CAA+HL,MAAAA,EAAjGG,kBAAiGH,EAAAA,GAAAA,EAAxED,aAAwEC,CAA1DA,uBAA0DA,CAAAA,CAAAA,EAA/BI,QAA+BJ,CAAAA,MAAAA,EAAdD,aAAcC,CAAAA,uBAAAA,EAAyBE,cAAzBF,CAAAA,CAAAA;;;;AAAvB;AAShI;;;;AAAoFD,iBAA5DO,4BAAAA,CAA4DP,MAAAA,EAAvBE,gBAAuBF,EAAAA,GAAAA,EAAAA,aAAAA,CAAcC,uBAAdD,CAAAA,CAAAA,EAAyCK,QAAzCL,CAAAA,MAAAA,EAA0DA,aAA1DA,CAAwEC,uBAAxED,EAAiGG,cAAjGH,CAAAA,CAAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"extraction.js","names":["schema: FunctionParameters","llm: BaseChatModel<BaseFunctionCallOptions>","schema: InteropZodObject"],"sources":["../../../src/chains/openai_functions/extraction.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport {\n type JsonSchema7ObjectType,\n toJsonSchema,\n} from \"@langchain/core/utils/json_schema\";\nimport {\n FunctionParameters,\n JsonKeyOutputFunctionsParser,\n} from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain } from \"../llm_chain.js\";\n\n/**\n * Function that returns an array of extraction functions. These functions\n * are used to extract relevant information from a passage.\n * @param schema The schema of the function parameters.\n * @returns An array of extraction functions.\n */\nfunction getExtractionFunctions(schema: FunctionParameters) {\n return [\n {\n name: \"information_extraction\",\n description: \"Extracts the relevant information from the passage.\",\n parameters: {\n type: \"object\",\n properties: {\n info: {\n type: \"array\",\n items: {\n type: schema.type,\n properties: schema.properties,\n required: schema.required,\n },\n },\n },\n required: [\"info\"],\n },\n },\n ];\n}\n\nconst _EXTRACTION_TEMPLATE = `Extract and save the relevant entities mentioned in the following passage together with their properties.\n\nPassage:\n{input}\n`;\n\n/**\n * Function that creates an extraction chain using the provided JSON schema.\n * It sets up the necessary components, such as the prompt, output parser, and tags.\n * @param schema JSON schema of the function parameters.\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport function createExtractionChain(\n schema: FunctionParameters,\n llm: BaseChatModel<BaseFunctionCallOptions>\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n const functions = getExtractionFunctions(schema);\n const prompt = PromptTemplate.fromTemplate(_EXTRACTION_TEMPLATE);\n const outputParser = new JsonKeyOutputFunctionsParser({ attrName: \"info\" });\n return new LLMChain({\n llm,\n prompt,\n llmKwargs: { functions },\n outputParser,\n tags: [\"openai_functions\", \"extraction\"],\n });\n}\n\n/**\n * Function that creates an extraction chain from a Zod schema. It\n * converts the Zod schema to a JSON schema using before creating\n * the extraction chain.\n * @param schema The Zod schema which extracted data should match\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport function createExtractionChainFromZod(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n schema: InteropZodObject,\n llm: BaseChatModel<BaseFunctionCallOptions>\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n return createExtractionChain(\n toJsonSchema(schema) as JsonSchema7ObjectType,\n llm\n );\n}\n"],"mappings":";;;;;;;;;;;;AAqBA,SAAS,uBAAuBA,QAA4B;AAC1D,QAAO,CACL;EACE,MAAM;EACN,aAAa;EACb,YAAY;GACV,MAAM;GACN,YAAY,EACV,MAAM;IACJ,MAAM;IACN,OAAO;KACL,MAAM,OAAO;KACb,YAAY,OAAO;KACnB,UAAU,OAAO;IAClB;GACF,EACF;GACD,UAAU,CAAC,MAAO;EACnB;CACF,CACF;AACF;AAED,MAAM,uBAAuB,CAAC;;;;AAI9B,CAAC;;;;;;;;AASD,SAAgB,sBACdA,QACAC,KAC0E;CAC1E,MAAM,YAAY,uBAAuB,OAAO;CAChD,MAAM,SAAS,eAAe,aAAa,qBAAqB;CAChE,MAAM,eAAe,IAAI,6BAA6B,EAAE,UAAU,OAAQ;AAC1E,QAAO,IAAI,SAAS;EAClB;EACA;EACA,WAAW,EAAE,UAAW;EACxB;EACA,MAAM,CAAC,oBAAoB,YAAa;CACzC;AACF;;;;;;;;;AAUD,SAAgB,6BAEdC,QACAD,KAC0E;AAC1E,QAAO,sBACL,aAAa,OAAO,EACpB,IACD;AACF"}
1
+ {"version":3,"file":"extraction.js","names":["schema: FunctionParameters","llm: BaseChatModel<BaseFunctionCallOptions>","schema: InteropZodObject"],"sources":["../../../src/chains/openai_functions/extraction.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport {\n type JsonSchema7ObjectType,\n toJsonSchema,\n} from \"@langchain/core/utils/json_schema\";\nimport {\n FunctionParameters,\n JsonKeyOutputFunctionsParser,\n} from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain } from \"../llm_chain.js\";\n\n/**\n * Function that returns an array of extraction functions. These functions\n * are used to extract relevant information from a passage.\n * @param schema The schema of the function parameters.\n * @returns An array of extraction functions.\n */\nfunction getExtractionFunctions(schema: FunctionParameters) {\n return [\n {\n name: \"information_extraction\",\n description: \"Extracts the relevant information from the passage.\",\n parameters: {\n type: \"object\",\n properties: {\n info: {\n type: \"array\",\n items: {\n type: schema.type,\n properties: schema.properties,\n required: schema.required,\n },\n },\n },\n required: [\"info\"],\n },\n },\n ];\n}\n\nconst _EXTRACTION_TEMPLATE = `Extract and save the relevant entities mentioned in the following passage together with their properties.\n\nPassage:\n{input}\n`;\n\n/**\n * Function that creates an extraction chain using the provided JSON schema.\n * It sets up the necessary components, such as the prompt, output parser, and tags.\n * @param schema JSON schema of the function parameters.\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport function createExtractionChain(\n schema: FunctionParameters,\n llm: BaseChatModel<BaseFunctionCallOptions>\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n const functions = getExtractionFunctions(schema);\n const prompt = PromptTemplate.fromTemplate(_EXTRACTION_TEMPLATE);\n const outputParser = new JsonKeyOutputFunctionsParser({ attrName: \"info\" });\n return new LLMChain({\n llm,\n prompt,\n llmKwargs: { functions },\n outputParser,\n tags: [\"openai_functions\", \"extraction\"],\n });\n}\n\n/**\n * Function that creates an extraction chain from a Zod schema. It\n * converts the Zod schema to a JSON schema using before creating\n * the extraction chain.\n * @param schema The Zod schema which extracted data should match\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport function createExtractionChainFromZod(\n schema: InteropZodObject,\n llm: BaseChatModel<BaseFunctionCallOptions>\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n return createExtractionChain(\n toJsonSchema(schema) as JsonSchema7ObjectType,\n llm\n );\n}\n"],"mappings":";;;;;;;;;;;;AAqBA,SAAS,uBAAuBA,QAA4B;AAC1D,QAAO,CACL;EACE,MAAM;EACN,aAAa;EACb,YAAY;GACV,MAAM;GACN,YAAY,EACV,MAAM;IACJ,MAAM;IACN,OAAO;KACL,MAAM,OAAO;KACb,YAAY,OAAO;KACnB,UAAU,OAAO;IAClB;GACF,EACF;GACD,UAAU,CAAC,MAAO;EACnB;CACF,CACF;AACF;AAED,MAAM,uBAAuB,CAAC;;;;AAI9B,CAAC;;;;;;;;AASD,SAAgB,sBACdA,QACAC,KAC0E;CAC1E,MAAM,YAAY,uBAAuB,OAAO;CAChD,MAAM,SAAS,eAAe,aAAa,qBAAqB;CAChE,MAAM,eAAe,IAAI,6BAA6B,EAAE,UAAU,OAAQ;AAC1E,QAAO,IAAI,SAAS;EAClB;EACA;EACA,WAAW,EAAE,UAAW;EACxB;EACA,MAAM,CAAC,oBAAoB,YAAa;CACzC;AACF;;;;;;;;;AAUD,SAAgB,6BACdC,QACAD,KAC0E;AAC1E,QAAO,sBACL,aAAa,OAAO,EACpB,IACD;AACF"}
@@ -2,7 +2,6 @@ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
2
  const require_extraction = require('./extraction.cjs');
3
3
  const require_tagging = require('./tagging.cjs');
4
4
  const require_openapi = require('./openapi.cjs');
5
- const require_structured_output = require('./structured_output.cjs');
6
5
  const require_base = require('./base.cjs');
7
6
 
8
7
  //#region src/chains/openai_functions/index.ts
@@ -12,8 +11,6 @@ require_rolldown_runtime.__export(openai_functions_exports, {
12
11
  createExtractionChainFromZod: () => require_extraction.createExtractionChainFromZod,
13
12
  createOpenAIFnRunnable: () => require_base.createOpenAIFnRunnable,
14
13
  createOpenAPIChain: () => require_openapi.createOpenAPIChain,
15
- createStructuredOutputChain: () => require_structured_output.createStructuredOutputChain,
16
- createStructuredOutputChainFromZod: () => require_structured_output.createStructuredOutputChainFromZod,
17
14
  createStructuredOutputRunnable: () => require_base.createStructuredOutputRunnable,
18
15
  createTaggingChain: () => require_tagging.createTaggingChain,
19
16
  createTaggingChainFromZod: () => require_tagging.createTaggingChainFromZod
@@ -24,8 +21,6 @@ exports.createExtractionChain = require_extraction.createExtractionChain;
24
21
  exports.createExtractionChainFromZod = require_extraction.createExtractionChainFromZod;
25
22
  exports.createOpenAIFnRunnable = require_base.createOpenAIFnRunnable;
26
23
  exports.createOpenAPIChain = require_openapi.createOpenAPIChain;
27
- exports.createStructuredOutputChain = require_structured_output.createStructuredOutputChain;
28
- exports.createStructuredOutputChainFromZod = require_structured_output.createStructuredOutputChainFromZod;
29
24
  exports.createStructuredOutputRunnable = require_base.createStructuredOutputRunnable;
30
25
  exports.createTaggingChain = require_tagging.createTaggingChain;
31
26
  exports.createTaggingChainFromZod = require_tagging.createTaggingChainFromZod;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/chains/openai_functions/index.ts"],"sourcesContent":["export {\n createExtractionChain,\n createExtractionChainFromZod,\n} from \"./extraction.js\";\nexport {\n type TaggingChainOptions,\n createTaggingChain,\n createTaggingChainFromZod,\n} from \"./tagging.js\";\nexport { type OpenAPIChainOptions, createOpenAPIChain } from \"./openapi.js\";\nexport {\n type StructuredOutputChainInput,\n createStructuredOutputChain,\n createStructuredOutputChainFromZod,\n} from \"./structured_output.js\";\nexport {\n type CreateStructuredOutputRunnableConfig,\n createStructuredOutputRunnable,\n type CreateOpenAIFnRunnableConfig,\n createOpenAIFnRunnable,\n} from \"./base.js\";\n"],"mappings":""}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/chains/openai_functions/index.ts"],"sourcesContent":["export {\n createExtractionChain,\n createExtractionChainFromZod,\n} from \"./extraction.js\";\nexport {\n type TaggingChainOptions,\n createTaggingChain,\n createTaggingChainFromZod,\n} from \"./tagging.js\";\nexport { type OpenAPIChainOptions, createOpenAPIChain } from \"./openapi.js\";\nexport {\n type CreateStructuredOutputRunnableConfig,\n createStructuredOutputRunnable,\n type CreateOpenAIFnRunnableConfig,\n createOpenAIFnRunnable,\n} from \"./base.js\";\n"],"mappings":""}
@@ -1,6 +1,5 @@
1
1
  import { createExtractionChain, createExtractionChainFromZod } from "./extraction.cjs";
2
2
  import { TaggingChainOptions, createTaggingChain, createTaggingChainFromZod } from "./tagging.cjs";
3
3
  import { OpenAPIChainOptions, createOpenAPIChain } from "./openapi.cjs";
4
- import { StructuredOutputChainInput, createStructuredOutputChain, createStructuredOutputChainFromZod } from "./structured_output.cjs";
5
4
  import { CreateOpenAIFnRunnableConfig, CreateStructuredOutputRunnableConfig, createOpenAIFnRunnable, createStructuredOutputRunnable } from "./base.cjs";
6
- export { type CreateOpenAIFnRunnableConfig, type CreateStructuredOutputRunnableConfig, type OpenAPIChainOptions, type StructuredOutputChainInput, type TaggingChainOptions, createExtractionChain, createExtractionChainFromZod, createOpenAIFnRunnable, createOpenAPIChain, createStructuredOutputChain, createStructuredOutputChainFromZod, createStructuredOutputRunnable, createTaggingChain, createTaggingChainFromZod };
5
+ export { type CreateOpenAIFnRunnableConfig, type CreateStructuredOutputRunnableConfig, type OpenAPIChainOptions, type TaggingChainOptions, createExtractionChain, createExtractionChainFromZod, createOpenAIFnRunnable, createOpenAPIChain, createStructuredOutputRunnable, createTaggingChain, createTaggingChainFromZod };
@@ -1,6 +1,5 @@
1
1
  import { createExtractionChain, createExtractionChainFromZod } from "./extraction.js";
2
2
  import { TaggingChainOptions, createTaggingChain, createTaggingChainFromZod } from "./tagging.js";
3
3
  import { OpenAPIChainOptions, createOpenAPIChain } from "./openapi.js";
4
- import { StructuredOutputChainInput, createStructuredOutputChain, createStructuredOutputChainFromZod } from "./structured_output.js";
5
4
  import { CreateOpenAIFnRunnableConfig, CreateStructuredOutputRunnableConfig, createOpenAIFnRunnable, createStructuredOutputRunnable } from "./base.js";
6
- export { type CreateOpenAIFnRunnableConfig, type CreateStructuredOutputRunnableConfig, type OpenAPIChainOptions, type StructuredOutputChainInput, type TaggingChainOptions, createExtractionChain, createExtractionChainFromZod, createOpenAIFnRunnable, createOpenAPIChain, createStructuredOutputChain, createStructuredOutputChainFromZod, createStructuredOutputRunnable, createTaggingChain, createTaggingChainFromZod };
5
+ export { type CreateOpenAIFnRunnableConfig, type CreateStructuredOutputRunnableConfig, type OpenAPIChainOptions, type TaggingChainOptions, createExtractionChain, createExtractionChainFromZod, createOpenAIFnRunnable, createOpenAPIChain, createStructuredOutputRunnable, createTaggingChain, createTaggingChainFromZod };
@@ -2,7 +2,6 @@ import { __export } from "../../_virtual/rolldown_runtime.js";
2
2
  import { createExtractionChain, createExtractionChainFromZod } from "./extraction.js";
3
3
  import { createTaggingChain, createTaggingChainFromZod } from "./tagging.js";
4
4
  import { createOpenAPIChain } from "./openapi.js";
5
- import { createStructuredOutputChain, createStructuredOutputChainFromZod } from "./structured_output.js";
6
5
  import { createOpenAIFnRunnable, createStructuredOutputRunnable } from "./base.js";
7
6
 
8
7
  //#region src/chains/openai_functions/index.ts
@@ -12,13 +11,11 @@ __export(openai_functions_exports, {
12
11
  createExtractionChainFromZod: () => createExtractionChainFromZod,
13
12
  createOpenAIFnRunnable: () => createOpenAIFnRunnable,
14
13
  createOpenAPIChain: () => createOpenAPIChain,
15
- createStructuredOutputChain: () => createStructuredOutputChain,
16
- createStructuredOutputChainFromZod: () => createStructuredOutputChainFromZod,
17
14
  createStructuredOutputRunnable: () => createStructuredOutputRunnable,
18
15
  createTaggingChain: () => createTaggingChain,
19
16
  createTaggingChainFromZod: () => createTaggingChainFromZod
20
17
  });
21
18
 
22
19
  //#endregion
23
- export { createExtractionChain, createExtractionChainFromZod, createOpenAIFnRunnable, createOpenAPIChain, createStructuredOutputChain, createStructuredOutputChainFromZod, createStructuredOutputRunnable, createTaggingChain, createTaggingChainFromZod, openai_functions_exports };
20
+ export { createExtractionChain, createExtractionChainFromZod, createOpenAIFnRunnable, createOpenAPIChain, createStructuredOutputRunnable, createTaggingChain, createTaggingChainFromZod, openai_functions_exports };
24
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/chains/openai_functions/index.ts"],"sourcesContent":["export {\n createExtractionChain,\n createExtractionChainFromZod,\n} from \"./extraction.js\";\nexport {\n type TaggingChainOptions,\n createTaggingChain,\n createTaggingChainFromZod,\n} from \"./tagging.js\";\nexport { type OpenAPIChainOptions, createOpenAPIChain } from \"./openapi.js\";\nexport {\n type StructuredOutputChainInput,\n createStructuredOutputChain,\n createStructuredOutputChainFromZod,\n} from \"./structured_output.js\";\nexport {\n type CreateStructuredOutputRunnableConfig,\n createStructuredOutputRunnable,\n type CreateOpenAIFnRunnableConfig,\n createOpenAIFnRunnable,\n} from \"./base.js\";\n"],"mappings":""}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/chains/openai_functions/index.ts"],"sourcesContent":["export {\n createExtractionChain,\n createExtractionChainFromZod,\n} from \"./extraction.js\";\nexport {\n type TaggingChainOptions,\n createTaggingChain,\n createTaggingChainFromZod,\n} from \"./tagging.js\";\nexport { type OpenAPIChainOptions, createOpenAPIChain } from \"./openapi.js\";\nexport {\n type CreateStructuredOutputRunnableConfig,\n createStructuredOutputRunnable,\n type CreateOpenAIFnRunnableConfig,\n createOpenAIFnRunnable,\n} from \"./base.js\";\n"],"mappings":""}
@@ -5,7 +5,6 @@ const require_sequential_chain = require('../sequential_chain.cjs');
5
5
  const require_openai_functions = require('../../output_parsers/openai_functions.cjs');
6
6
  const require_openapi = require('../../util/openapi.cjs');
7
7
  const __langchain_core_prompts = require_rolldown_runtime.__toESM(require("@langchain/core/prompts"));
8
- const __langchain_openai = require_rolldown_runtime.__toESM(require("@langchain/openai"));
9
8
 
10
9
  //#region src/chains/openai_functions/openapi.ts
11
10
  /**
@@ -250,17 +249,18 @@ async function createOpenAPIChain(spec, options = {}) {
250
249
  let convertedSpec;
251
250
  if (typeof spec === "string") try {
252
251
  convertedSpec = await require_openapi.OpenAPISpec.fromURL(spec);
253
- } catch (e) {
252
+ } catch {
254
253
  try {
255
254
  convertedSpec = require_openapi.OpenAPISpec.fromString(spec);
256
- } catch (e$1) {
255
+ } catch {
257
256
  throw new Error(`Unable to parse spec from source ${spec}.`);
258
257
  }
259
258
  }
260
259
  else convertedSpec = require_openapi.OpenAPISpec.fromObject(spec);
261
260
  const { openAIFunctions, defaultExecutionMethod } = convertOpenAPISpecToOpenAIFunctions(convertedSpec);
262
261
  if (defaultExecutionMethod === void 0) throw new Error(`Could not parse any valid operations from the provided spec.`);
263
- const { llm = new __langchain_openai.ChatOpenAI({ model: "gpt-3.5-turbo-0613" }), prompt = __langchain_core_prompts.ChatPromptTemplate.fromMessages([__langchain_core_prompts.HumanMessagePromptTemplate.fromTemplate("Use the provided API's to respond to this user query:\n\n{query}")]), requestChain = new SimpleRequestChain({ requestMethod: async (name, args) => defaultExecutionMethod(name, args, {
262
+ if (!options.llm) throw new Error("`llm` option is required");
263
+ const { llm = options.llm, prompt = __langchain_core_prompts.ChatPromptTemplate.fromMessages([__langchain_core_prompts.HumanMessagePromptTemplate.fromTemplate("Use the provided API's to respond to this user query:\n\n{query}")]), requestChain = new SimpleRequestChain({ requestMethod: async (name, args) => defaultExecutionMethod(name, args, {
264
264
  headers: options.headers,
265
265
  params: options.params
266
266
  }) }), llmChainInputs = {}, verbose,...rest } = options;
@@ -1 +1 @@
1
- {"version":3,"file":"openapi.cjs","names":["url: string","pathParams: Record<string, string>","newParams: Record<string, string>","params: OpenAPIV3_1.ParameterObject[]","spec: OpenAPISpec","jsonSchema: JsonSchema7ObjectType","schema: OpenAPIV3_1.SchemaObject","nameToCallMap: Record<string, { method: string; url: string }>","operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>","paramLocationToRequestArgNameMap: Record<string, string>","requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n }","requestBodySchemas: Record<string, JsonSchema7ObjectType>","openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function","OpenAPISpec","name: string","requestArgs: Record<string, any>","options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }","filteredArgs: Record<string, any>","headers: Record<string, string>","BaseChain","config: { requestMethod: SimpleRequestChainExecutionMethod }","values: ChainValues","_runManager?: CallbackManagerForChainRun","spec: OpenAPIV3_1.Document | string","options: OpenAPIChainOptions","e","ChatOpenAI","ChatPromptTemplate","HumanMessagePromptTemplate","LLMChain","JsonOutputFunctionsParser","SequentialChain"],"sources":["../../../src/chains/openai_functions/openapi.ts"],"sourcesContent":["import type { OpenAIClient } from \"@langchain/openai\";\nimport {\n type JsonSchema7ObjectType,\n type JsonSchema7ArrayType,\n type JsonSchema7Type,\n} from \"@langchain/core/utils/json_schema\";\nimport type { OpenAPIV3_1 } from \"openapi-types\";\n\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { ChatOpenAI } from \"@langchain/openai\";\nimport { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport {\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n BasePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { OpenAPISpec } from \"../../util/openapi.js\";\nimport { BaseChain } from \"../base.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\nimport { SequentialChain } from \"../sequential_chain.js\";\nimport { JsonOutputFunctionsParser } from \"../../output_parsers/openai_functions.js\";\n\n/**\n * Type representing a function for executing OpenAPI requests.\n */\ntype OpenAPIExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n) => Promise<string>;\n\n/**\n * Formats a URL by replacing path parameters with their corresponding\n * values.\n * @param url The URL to format.\n * @param pathParams The path parameters to replace in the URL.\n * @returns The formatted URL.\n */\nfunction formatURL(url: string, pathParams: Record<string, string>): string {\n const expectedPathParamNames = [...url.matchAll(/{(.*?)}/g)].map(\n (match) => match[1]\n );\n const newParams: Record<string, string> = {};\n for (const paramName of expectedPathParamNames) {\n const cleanParamName = paramName.replace(/^\\.;/, \"\").replace(/\\*$/, \"\");\n const value = pathParams[cleanParamName];\n let formattedValue;\n if (Array.isArray(value)) {\n if (paramName.startsWith(\".\")) {\n const separator = paramName.endsWith(\"*\") ? \".\" : \",\";\n formattedValue = `.${value.join(separator)}`;\n } else if (paramName.startsWith(\",\")) {\n const separator = paramName.endsWith(\"*\") ? `${cleanParamName}=` : \",\";\n formattedValue = `${cleanParamName}=${value.join(separator)}`;\n } else {\n formattedValue = value.join(\",\");\n }\n } else if (typeof value === \"object\") {\n const kvSeparator = paramName.endsWith(\"*\") ? \"=\" : \",\";\n const kvStrings = Object.entries(value).map(\n ([k, v]) => k + kvSeparator + v\n );\n let entrySeparator;\n if (paramName.startsWith(\".\")) {\n entrySeparator = \".\";\n formattedValue = \".\";\n } else if (paramName.startsWith(\";\")) {\n entrySeparator = \";\";\n formattedValue = \";\";\n } else {\n entrySeparator = \",\";\n formattedValue = \"\";\n }\n formattedValue += kvStrings.join(entrySeparator);\n } else {\n if (paramName.startsWith(\".\")) {\n formattedValue = `.${value}`;\n } else if (paramName.startsWith(\";\")) {\n formattedValue = `;${cleanParamName}=${value}`;\n } else {\n formattedValue = value;\n }\n }\n newParams[paramName] = formattedValue;\n }\n let formattedUrl = url;\n for (const [key, newValue] of Object.entries(newParams)) {\n formattedUrl = formattedUrl.replace(`{${key}}`, newValue);\n }\n return formattedUrl;\n}\n\n/**\n * Converts OpenAPI parameters to JSON schema format.\n * @param params The OpenAPI parameters to convert.\n * @param spec The OpenAPI specification that contains the parameters.\n * @returns The JSON schema representation of the OpenAPI parameters.\n */\nfunction convertOpenAPIParamsToJSONSchema(\n params: OpenAPIV3_1.ParameterObject[],\n spec: OpenAPISpec\n) {\n return params.reduce(\n (jsonSchema: JsonSchema7ObjectType, param) => {\n let schema;\n if (param.schema) {\n schema = spec.getSchema(param.schema);\n // eslint-disable-next-line no-param-reassign\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else if (param.content) {\n const mediaTypeSchema = Object.values(param.content)[0].schema;\n if (mediaTypeSchema) {\n schema = spec.getSchema(mediaTypeSchema);\n }\n if (!schema) {\n return jsonSchema;\n }\n if (schema.description === undefined) {\n schema.description = param.description ?? \"\";\n }\n // eslint-disable-next-line no-param-reassign\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else {\n return jsonSchema;\n }\n if (param.required && Array.isArray(jsonSchema.required)) {\n jsonSchema.required.push(param.name);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n}\n\n// OpenAI throws errors on extraneous schema properties, e.g. if \"required\" is set on individual ones\n/**\n * Converts OpenAPI schemas to JSON schema format.\n * @param schema The OpenAPI schema to convert.\n * @param spec The OpenAPI specification that contains the schema.\n * @returns The JSON schema representation of the OpenAPI schema.\n */\nexport function convertOpenAPISchemaToJSONSchema(\n schema: OpenAPIV3_1.SchemaObject,\n spec: OpenAPISpec\n): JsonSchema7Type {\n if (schema.type === \"object\") {\n return Object.keys(schema.properties ?? {}).reduce(\n (jsonSchema: JsonSchema7ObjectType, propertyName) => {\n if (!schema.properties) {\n return jsonSchema;\n }\n const openAPIProperty = spec.getSchema(schema.properties[propertyName]);\n if (openAPIProperty.type === undefined) {\n return jsonSchema;\n }\n // eslint-disable-next-line no-param-reassign\n jsonSchema.properties[propertyName] = convertOpenAPISchemaToJSONSchema(\n openAPIProperty,\n spec\n );\n if (\n (openAPIProperty.required ||\n schema.required?.includes(propertyName)) &&\n jsonSchema.required !== undefined\n ) {\n jsonSchema.required.push(propertyName);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n }\n if (schema.type === \"array\") {\n return {\n type: \"array\",\n items: convertOpenAPISchemaToJSONSchema(schema.items ?? {}, spec),\n minItems: schema.minItems,\n maxItems: schema.maxItems,\n } as JsonSchema7ArrayType;\n }\n return {\n type: schema.type ?? \"string\",\n } as JsonSchema7Type;\n}\n\n/**\n * Converts an OpenAPI specification to OpenAI functions.\n * @param spec The OpenAPI specification to convert.\n * @returns An object containing the OpenAI functions derived from the OpenAPI specification and a default execution method.\n */\nexport function convertOpenAPISpecToOpenAIFunctions(spec: OpenAPISpec): {\n openAIFunctions: OpenAIClient.Chat.ChatCompletionCreateParams.Function[];\n defaultExecutionMethod?: OpenAPIExecutionMethod;\n} {\n if (!spec.document.paths) {\n return { openAIFunctions: [] };\n }\n const openAIFunctions = [];\n const nameToCallMap: Record<string, { method: string; url: string }> = {};\n for (const path of Object.keys(spec.document.paths)) {\n const pathParameters = spec.getParametersForPath(path);\n for (const method of spec.getMethodsForPath(path)) {\n const operation = spec.getOperation(path, method);\n if (!operation) {\n return { openAIFunctions: [] };\n }\n const operationParametersByLocation = pathParameters\n .concat(spec.getParametersForOperation(operation))\n .reduce(\n (\n operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>,\n param\n ) => {\n if (!operationParams[param.in]) {\n // eslint-disable-next-line no-param-reassign\n operationParams[param.in] = [];\n }\n operationParams[param.in].push(param);\n return operationParams;\n },\n {}\n );\n const paramLocationToRequestArgNameMap: Record<string, string> = {\n query: \"params\",\n header: \"headers\",\n cookie: \"cookies\",\n path: \"path_params\",\n };\n const requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n } = {};\n for (const paramLocation of Object.keys(\n paramLocationToRequestArgNameMap\n )) {\n if (operationParametersByLocation[paramLocation]) {\n requestArgsSchema[paramLocationToRequestArgNameMap[paramLocation]] =\n convertOpenAPIParamsToJSONSchema(\n operationParametersByLocation[paramLocation],\n spec\n );\n }\n }\n const requestBody = spec.getRequestBodyForOperation(operation);\n if (requestBody?.content !== undefined) {\n const requestBodySchemas: Record<string, JsonSchema7ObjectType> = {};\n for (const [mediaType, mediaTypeObject] of Object.entries(\n requestBody.content\n )) {\n if (mediaTypeObject.schema !== undefined) {\n const schema = spec.getSchema(mediaTypeObject.schema);\n requestBodySchemas[mediaType] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n ) as JsonSchema7ObjectType;\n }\n }\n const mediaTypes = Object.keys(requestBodySchemas);\n if (mediaTypes.length === 1) {\n requestArgsSchema.data = requestBodySchemas[mediaTypes[0]];\n } else if (mediaTypes.length > 1) {\n requestArgsSchema.data = {\n anyOf: Object.values(requestBodySchemas),\n };\n }\n }\n const openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function =\n {\n name: OpenAPISpec.getCleanedOperationId(operation, path, method),\n description: operation.description ?? operation.summary ?? \"\",\n parameters: {\n type: \"object\",\n properties: requestArgsSchema,\n // All remaining top-level parameters are required\n required: Object.keys(requestArgsSchema),\n },\n };\n\n openAIFunctions.push(openAIFunction);\n const baseUrl = (spec.baseUrl ?? \"\").endsWith(\"/\")\n ? (spec.baseUrl ?? \"\").slice(0, -1)\n : spec.baseUrl ?? \"\";\n nameToCallMap[openAIFunction.name] = {\n method,\n url: baseUrl + path,\n };\n }\n }\n return {\n openAIFunctions,\n defaultExecutionMethod: async (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n ) => {\n const {\n headers: customHeaders,\n params: customParams,\n ...rest\n } = options ?? {};\n const { method, url } = nameToCallMap[name];\n const requestParams = requestArgs.params ?? {};\n const nonEmptyParams = Object.keys(requestParams).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (filteredArgs: Record<string, any>, argName) => {\n if (\n requestParams[argName] !== \"\" &&\n requestParams[argName] !== null &&\n requestParams[argName] !== undefined\n ) {\n // eslint-disable-next-line no-param-reassign\n filteredArgs[argName] = requestParams[argName];\n }\n return filteredArgs;\n },\n {}\n );\n const queryString = new URLSearchParams({\n ...nonEmptyParams,\n ...customParams,\n }).toString();\n const pathParams = requestArgs.path_params;\n const formattedUrl =\n formatURL(url, pathParams) +\n (queryString.length ? `?${queryString}` : \"\");\n const headers: Record<string, string> = {};\n let body;\n if (requestArgs.data !== undefined) {\n let contentType = \"text/plain\";\n if (typeof requestArgs.data !== \"string\") {\n if (typeof requestArgs.data === \"object\") {\n contentType = \"application/json\";\n }\n body = JSON.stringify(requestArgs.data);\n } else {\n body = requestArgs.data;\n }\n headers[\"content-type\"] = contentType;\n }\n const response = await fetch(formattedUrl, {\n ...requestArgs,\n method,\n headers: {\n ...headers,\n ...requestArgs.headers,\n ...customHeaders,\n },\n body,\n ...rest,\n });\n let output;\n if (response.status < 200 || response.status > 299) {\n output = `${response.status}: ${\n response.statusText\n } for ${name} called with ${JSON.stringify(queryString)}`;\n } else {\n output = await response.text();\n }\n return output;\n },\n };\n}\n\n/**\n * Type representing a function for executing simple requests.\n */\ntype SimpleRequestChainExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>\n) => Promise<string>;\n\n/**\n * A chain for making simple API requests.\n */\nclass SimpleRequestChain extends BaseChain {\n static lc_name() {\n return \"SimpleRequestChain\";\n }\n\n private requestMethod: SimpleRequestChainExecutionMethod;\n\n inputKey = \"function\";\n\n outputKey = \"response\";\n\n constructor(config: { requestMethod: SimpleRequestChainExecutionMethod }) {\n super();\n this.requestMethod = config.requestMethod;\n }\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return [this.outputKey];\n }\n\n _chainType() {\n return \"simple_request_chain\" as const;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n _runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const inputKeyValue = values[this.inputKey];\n const methodName = inputKeyValue.name;\n const args = inputKeyValue.arguments;\n const response = await this.requestMethod(methodName, args);\n return { [this.outputKey]: response };\n }\n}\n\n/**\n * Type representing the options for creating an OpenAPI chain.\n */\nexport type OpenAPIChainOptions = {\n llm?: BaseChatModel<BaseFunctionCallOptions>;\n prompt?: BasePromptTemplate;\n requestChain?: BaseChain;\n llmChainInputs?: LLMChainInput;\n headers?: Record<string, string>;\n params?: Record<string, string>;\n verbose?: boolean;\n};\n\n/**\n * Create a chain for querying an API from a OpenAPI spec.\n * @param spec OpenAPISpec or url/file/text string corresponding to one.\n * @param options Custom options passed into the chain\n * @returns OpenAPIChain\n */\nexport async function createOpenAPIChain(\n spec: OpenAPIV3_1.Document | string,\n options: OpenAPIChainOptions = {}\n) {\n let convertedSpec;\n if (typeof spec === \"string\") {\n try {\n convertedSpec = await OpenAPISpec.fromURL(spec);\n } catch (e) {\n try {\n convertedSpec = OpenAPISpec.fromString(spec);\n } catch (e) {\n throw new Error(`Unable to parse spec from source ${spec}.`);\n }\n }\n } else {\n convertedSpec = OpenAPISpec.fromObject(spec);\n }\n const { openAIFunctions, defaultExecutionMethod } =\n convertOpenAPISpecToOpenAIFunctions(convertedSpec);\n if (defaultExecutionMethod === undefined) {\n throw new Error(\n `Could not parse any valid operations from the provided spec.`\n );\n }\n const {\n llm = new ChatOpenAI({ model: \"gpt-3.5-turbo-0613\" }),\n prompt = ChatPromptTemplate.fromMessages([\n HumanMessagePromptTemplate.fromTemplate(\n \"Use the provided API's to respond to this user query:\\n\\n{query}\"\n ),\n ]),\n requestChain = new SimpleRequestChain({\n requestMethod: async (name, args) =>\n defaultExecutionMethod(name, args, {\n headers: options.headers,\n params: options.params,\n }),\n }),\n llmChainInputs = {},\n verbose,\n ...rest\n } = options;\n const formatChain = new LLMChain({\n llm,\n prompt,\n outputParser: new JsonOutputFunctionsParser({ argsOnly: false }),\n outputKey: \"function\",\n llmKwargs: { functions: openAIFunctions },\n ...llmChainInputs,\n });\n return new SequentialChain({\n chains: [formatChain, requestChain],\n outputVariables: [\"response\"],\n inputVariables: formatChain.inputKeys,\n verbose,\n ...rest,\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"openapi.cjs","names":["url: string","pathParams: Record<string, string>","newParams: Record<string, string>","params: OpenAPIV3_1.ParameterObject[]","spec: OpenAPISpec","jsonSchema: JsonSchema7ObjectType","schema: OpenAPIV3_1.SchemaObject","nameToCallMap: Record<string, { method: string; url: string }>","operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>","paramLocationToRequestArgNameMap: Record<string, string>","requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n }","requestBodySchemas: Record<string, JsonSchema7ObjectType>","openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function","OpenAPISpec","name: string","requestArgs: Record<string, any>","options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }","filteredArgs: Record<string, any>","headers: Record<string, string>","BaseChain","config: { requestMethod: SimpleRequestChainExecutionMethod }","values: ChainValues","_runManager?: CallbackManagerForChainRun","spec: OpenAPIV3_1.Document | string","options: OpenAPIChainOptions","ChatPromptTemplate","HumanMessagePromptTemplate","LLMChain","JsonOutputFunctionsParser","SequentialChain"],"sources":["../../../src/chains/openai_functions/openapi.ts"],"sourcesContent":["import type { OpenAIClient } from \"@langchain/openai\";\nimport {\n type JsonSchema7ObjectType,\n type JsonSchema7ArrayType,\n type JsonSchema7Type,\n} from \"@langchain/core/utils/json_schema\";\nimport type { OpenAPIV3_1 } from \"openapi-types\";\n\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport {\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n BasePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { OpenAPISpec } from \"../../util/openapi.js\";\nimport { BaseChain } from \"../base.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\nimport { SequentialChain } from \"../sequential_chain.js\";\nimport { JsonOutputFunctionsParser } from \"../../output_parsers/openai_functions.js\";\n\n/**\n * Type representing a function for executing OpenAPI requests.\n */\ntype OpenAPIExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n) => Promise<string>;\n\n/**\n * Formats a URL by replacing path parameters with their corresponding\n * values.\n * @param url The URL to format.\n * @param pathParams The path parameters to replace in the URL.\n * @returns The formatted URL.\n */\nfunction formatURL(url: string, pathParams: Record<string, string>): string {\n const expectedPathParamNames = [...url.matchAll(/{(.*?)}/g)].map(\n (match) => match[1]\n );\n const newParams: Record<string, string> = {};\n for (const paramName of expectedPathParamNames) {\n const cleanParamName = paramName.replace(/^\\.;/, \"\").replace(/\\*$/, \"\");\n const value = pathParams[cleanParamName];\n let formattedValue;\n if (Array.isArray(value)) {\n if (paramName.startsWith(\".\")) {\n const separator = paramName.endsWith(\"*\") ? \".\" : \",\";\n formattedValue = `.${value.join(separator)}`;\n } else if (paramName.startsWith(\",\")) {\n const separator = paramName.endsWith(\"*\") ? `${cleanParamName}=` : \",\";\n formattedValue = `${cleanParamName}=${value.join(separator)}`;\n } else {\n formattedValue = value.join(\",\");\n }\n } else if (typeof value === \"object\") {\n const kvSeparator = paramName.endsWith(\"*\") ? \"=\" : \",\";\n const kvStrings = Object.entries(value).map(\n ([k, v]) => k + kvSeparator + v\n );\n let entrySeparator;\n if (paramName.startsWith(\".\")) {\n entrySeparator = \".\";\n formattedValue = \".\";\n } else if (paramName.startsWith(\";\")) {\n entrySeparator = \";\";\n formattedValue = \";\";\n } else {\n entrySeparator = \",\";\n formattedValue = \"\";\n }\n formattedValue += kvStrings.join(entrySeparator);\n } else {\n if (paramName.startsWith(\".\")) {\n formattedValue = `.${value}`;\n } else if (paramName.startsWith(\";\")) {\n formattedValue = `;${cleanParamName}=${value}`;\n } else {\n formattedValue = value;\n }\n }\n newParams[paramName] = formattedValue;\n }\n let formattedUrl = url;\n for (const [key, newValue] of Object.entries(newParams)) {\n formattedUrl = formattedUrl.replace(`{${key}}`, newValue);\n }\n return formattedUrl;\n}\n\n/**\n * Converts OpenAPI parameters to JSON schema format.\n * @param params The OpenAPI parameters to convert.\n * @param spec The OpenAPI specification that contains the parameters.\n * @returns The JSON schema representation of the OpenAPI parameters.\n */\nfunction convertOpenAPIParamsToJSONSchema(\n params: OpenAPIV3_1.ParameterObject[],\n spec: OpenAPISpec\n) {\n return params.reduce(\n (jsonSchema: JsonSchema7ObjectType, param) => {\n let schema;\n if (param.schema) {\n schema = spec.getSchema(param.schema);\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else if (param.content) {\n const mediaTypeSchema = Object.values(param.content)[0].schema;\n if (mediaTypeSchema) {\n schema = spec.getSchema(mediaTypeSchema);\n }\n if (!schema) {\n return jsonSchema;\n }\n if (schema.description === undefined) {\n schema.description = param.description ?? \"\";\n }\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else {\n return jsonSchema;\n }\n if (param.required && Array.isArray(jsonSchema.required)) {\n jsonSchema.required.push(param.name);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n}\n\n// OpenAI throws errors on extraneous schema properties, e.g. if \"required\" is set on individual ones\n/**\n * Converts OpenAPI schemas to JSON schema format.\n * @param schema The OpenAPI schema to convert.\n * @param spec The OpenAPI specification that contains the schema.\n * @returns The JSON schema representation of the OpenAPI schema.\n */\nexport function convertOpenAPISchemaToJSONSchema(\n schema: OpenAPIV3_1.SchemaObject,\n spec: OpenAPISpec\n): JsonSchema7Type {\n if (schema.type === \"object\") {\n return Object.keys(schema.properties ?? {}).reduce(\n (jsonSchema: JsonSchema7ObjectType, propertyName) => {\n if (!schema.properties) {\n return jsonSchema;\n }\n const openAPIProperty = spec.getSchema(schema.properties[propertyName]);\n if (openAPIProperty.type === undefined) {\n return jsonSchema;\n }\n jsonSchema.properties[propertyName] = convertOpenAPISchemaToJSONSchema(\n openAPIProperty,\n spec\n );\n if (\n (openAPIProperty.required ||\n schema.required?.includes(propertyName)) &&\n jsonSchema.required !== undefined\n ) {\n jsonSchema.required.push(propertyName);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n }\n if (schema.type === \"array\") {\n return {\n type: \"array\",\n items: convertOpenAPISchemaToJSONSchema(schema.items ?? {}, spec),\n minItems: schema.minItems,\n maxItems: schema.maxItems,\n } as JsonSchema7ArrayType;\n }\n return {\n type: schema.type ?? \"string\",\n } as JsonSchema7Type;\n}\n\n/**\n * Converts an OpenAPI specification to OpenAI functions.\n * @param spec The OpenAPI specification to convert.\n * @returns An object containing the OpenAI functions derived from the OpenAPI specification and a default execution method.\n */\nexport function convertOpenAPISpecToOpenAIFunctions(spec: OpenAPISpec): {\n openAIFunctions: OpenAIClient.Chat.ChatCompletionCreateParams.Function[];\n defaultExecutionMethod?: OpenAPIExecutionMethod;\n} {\n if (!spec.document.paths) {\n return { openAIFunctions: [] };\n }\n const openAIFunctions = [];\n const nameToCallMap: Record<string, { method: string; url: string }> = {};\n for (const path of Object.keys(spec.document.paths)) {\n const pathParameters = spec.getParametersForPath(path);\n for (const method of spec.getMethodsForPath(path)) {\n const operation = spec.getOperation(path, method);\n if (!operation) {\n return { openAIFunctions: [] };\n }\n const operationParametersByLocation = pathParameters\n .concat(spec.getParametersForOperation(operation))\n .reduce(\n (\n operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>,\n param\n ) => {\n if (!operationParams[param.in]) {\n operationParams[param.in] = [];\n }\n operationParams[param.in].push(param);\n return operationParams;\n },\n {}\n );\n const paramLocationToRequestArgNameMap: Record<string, string> = {\n query: \"params\",\n header: \"headers\",\n cookie: \"cookies\",\n path: \"path_params\",\n };\n const requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n } = {};\n for (const paramLocation of Object.keys(\n paramLocationToRequestArgNameMap\n )) {\n if (operationParametersByLocation[paramLocation]) {\n requestArgsSchema[paramLocationToRequestArgNameMap[paramLocation]] =\n convertOpenAPIParamsToJSONSchema(\n operationParametersByLocation[paramLocation],\n spec\n );\n }\n }\n const requestBody = spec.getRequestBodyForOperation(operation);\n if (requestBody?.content !== undefined) {\n const requestBodySchemas: Record<string, JsonSchema7ObjectType> = {};\n for (const [mediaType, mediaTypeObject] of Object.entries(\n requestBody.content\n )) {\n if (mediaTypeObject.schema !== undefined) {\n const schema = spec.getSchema(mediaTypeObject.schema);\n requestBodySchemas[mediaType] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n ) as JsonSchema7ObjectType;\n }\n }\n const mediaTypes = Object.keys(requestBodySchemas);\n if (mediaTypes.length === 1) {\n requestArgsSchema.data = requestBodySchemas[mediaTypes[0]];\n } else if (mediaTypes.length > 1) {\n requestArgsSchema.data = {\n anyOf: Object.values(requestBodySchemas),\n };\n }\n }\n const openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function =\n {\n name: OpenAPISpec.getCleanedOperationId(operation, path, method),\n description: operation.description ?? operation.summary ?? \"\",\n parameters: {\n type: \"object\",\n properties: requestArgsSchema,\n // All remaining top-level parameters are required\n required: Object.keys(requestArgsSchema),\n },\n };\n\n openAIFunctions.push(openAIFunction);\n const baseUrl = (spec.baseUrl ?? \"\").endsWith(\"/\")\n ? (spec.baseUrl ?? \"\").slice(0, -1)\n : spec.baseUrl ?? \"\";\n nameToCallMap[openAIFunction.name] = {\n method,\n url: baseUrl + path,\n };\n }\n }\n return {\n openAIFunctions,\n defaultExecutionMethod: async (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n ) => {\n const {\n headers: customHeaders,\n params: customParams,\n ...rest\n } = options ?? {};\n const { method, url } = nameToCallMap[name];\n const requestParams = requestArgs.params ?? {};\n const nonEmptyParams = Object.keys(requestParams).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (filteredArgs: Record<string, any>, argName) => {\n if (\n requestParams[argName] !== \"\" &&\n requestParams[argName] !== null &&\n requestParams[argName] !== undefined\n ) {\n filteredArgs[argName] = requestParams[argName];\n }\n return filteredArgs;\n },\n {}\n );\n const queryString = new URLSearchParams({\n ...nonEmptyParams,\n ...customParams,\n }).toString();\n const pathParams = requestArgs.path_params;\n const formattedUrl =\n formatURL(url, pathParams) +\n (queryString.length ? `?${queryString}` : \"\");\n const headers: Record<string, string> = {};\n let body;\n if (requestArgs.data !== undefined) {\n let contentType = \"text/plain\";\n if (typeof requestArgs.data !== \"string\") {\n if (typeof requestArgs.data === \"object\") {\n contentType = \"application/json\";\n }\n body = JSON.stringify(requestArgs.data);\n } else {\n body = requestArgs.data;\n }\n headers[\"content-type\"] = contentType;\n }\n const response = await fetch(formattedUrl, {\n ...requestArgs,\n method,\n headers: {\n ...headers,\n ...requestArgs.headers,\n ...customHeaders,\n },\n body,\n ...rest,\n });\n let output;\n if (response.status < 200 || response.status > 299) {\n output = `${response.status}: ${\n response.statusText\n } for ${name} called with ${JSON.stringify(queryString)}`;\n } else {\n output = await response.text();\n }\n return output;\n },\n };\n}\n\n/**\n * Type representing a function for executing simple requests.\n */\ntype SimpleRequestChainExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>\n) => Promise<string>;\n\n/**\n * A chain for making simple API requests.\n */\nclass SimpleRequestChain extends BaseChain {\n static lc_name() {\n return \"SimpleRequestChain\";\n }\n\n private requestMethod: SimpleRequestChainExecutionMethod;\n\n inputKey = \"function\";\n\n outputKey = \"response\";\n\n constructor(config: { requestMethod: SimpleRequestChainExecutionMethod }) {\n super();\n this.requestMethod = config.requestMethod;\n }\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return [this.outputKey];\n }\n\n _chainType() {\n return \"simple_request_chain\" as const;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n _runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const inputKeyValue = values[this.inputKey];\n const methodName = inputKeyValue.name;\n const args = inputKeyValue.arguments;\n const response = await this.requestMethod(methodName, args);\n return { [this.outputKey]: response };\n }\n}\n\n/**\n * Type representing the options for creating an OpenAPI chain.\n */\nexport type OpenAPIChainOptions = {\n llm?: BaseChatModel<BaseFunctionCallOptions>;\n prompt?: BasePromptTemplate;\n requestChain?: BaseChain;\n llmChainInputs?: LLMChainInput;\n headers?: Record<string, string>;\n params?: Record<string, string>;\n verbose?: boolean;\n};\n\n/**\n * Create a chain for querying an API from a OpenAPI spec.\n * @param spec OpenAPISpec or url/file/text string corresponding to one.\n * @param options Custom options passed into the chain\n * @returns OpenAPIChain\n */\nexport async function createOpenAPIChain(\n spec: OpenAPIV3_1.Document | string,\n options: OpenAPIChainOptions = {}\n) {\n let convertedSpec;\n if (typeof spec === \"string\") {\n try {\n convertedSpec = await OpenAPISpec.fromURL(spec);\n } catch {\n try {\n convertedSpec = OpenAPISpec.fromString(spec);\n } catch {\n throw new Error(`Unable to parse spec from source ${spec}.`);\n }\n }\n } else {\n convertedSpec = OpenAPISpec.fromObject(spec);\n }\n const { openAIFunctions, defaultExecutionMethod } =\n convertOpenAPISpecToOpenAIFunctions(convertedSpec);\n if (defaultExecutionMethod === undefined) {\n throw new Error(\n `Could not parse any valid operations from the provided spec.`\n );\n }\n\n if (!options.llm) {\n throw new Error(\"`llm` option is required\");\n }\n\n const {\n llm = options.llm,\n prompt = ChatPromptTemplate.fromMessages([\n HumanMessagePromptTemplate.fromTemplate(\n \"Use the provided API's to respond to this user query:\\n\\n{query}\"\n ),\n ]),\n requestChain = new SimpleRequestChain({\n requestMethod: async (name, args) =>\n defaultExecutionMethod(name, args, {\n headers: options.headers,\n params: options.params,\n }),\n }),\n llmChainInputs = {},\n verbose,\n ...rest\n } = options;\n const formatChain = new LLMChain({\n llm,\n prompt,\n outputParser: new JsonOutputFunctionsParser({ argsOnly: false }),\n outputKey: \"function\",\n llmKwargs: { functions: openAIFunctions },\n ...llmChainInputs,\n });\n return new SequentialChain({\n chains: [formatChain, requestChain],\n outputVariables: [\"response\"],\n inputVariables: formatChain.inputKeys,\n verbose,\n ...rest,\n });\n}\n"],"mappings":"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"}
@@ -3,10 +3,10 @@ import { LLMChainInput } from "../llm_chain.cjs";
3
3
  import { SequentialChain } from "../sequential_chain.cjs";
4
4
  import { OpenAPISpec } from "../../util/openapi.cjs";
5
5
  import { BaseFunctionCallOptions } from "@langchain/core/language_models/base";
6
- import { BasePromptTemplate } from "@langchain/core/prompts";
7
- import { OpenAIClient } from "@langchain/openai";
8
6
  import { BaseChatModel } from "@langchain/core/language_models/chat_models";
7
+ import { BasePromptTemplate } from "@langchain/core/prompts";
9
8
  import { JsonSchema7Type } from "@langchain/core/utils/json_schema";
9
+ import { OpenAIClient } from "@langchain/openai";
10
10
  import { OpenAPIV3_1 } from "openapi-types";
11
11
 
12
12
  //#region src/chains/openai_functions/openapi.d.ts
@@ -4,7 +4,6 @@ import { SequentialChain } from "../sequential_chain.js";
4
4
  import { JsonOutputFunctionsParser } from "../../output_parsers/openai_functions.js";
5
5
  import { OpenAPISpec } from "../../util/openapi.js";
6
6
  import { ChatPromptTemplate, HumanMessagePromptTemplate } from "@langchain/core/prompts";
7
- import { ChatOpenAI } from "@langchain/openai";
8
7
 
9
8
  //#region src/chains/openai_functions/openapi.ts
10
9
  /**
@@ -249,17 +248,18 @@ async function createOpenAPIChain(spec, options = {}) {
249
248
  let convertedSpec;
250
249
  if (typeof spec === "string") try {
251
250
  convertedSpec = await OpenAPISpec.fromURL(spec);
252
- } catch (e) {
251
+ } catch {
253
252
  try {
254
253
  convertedSpec = OpenAPISpec.fromString(spec);
255
- } catch (e$1) {
254
+ } catch {
256
255
  throw new Error(`Unable to parse spec from source ${spec}.`);
257
256
  }
258
257
  }
259
258
  else convertedSpec = OpenAPISpec.fromObject(spec);
260
259
  const { openAIFunctions, defaultExecutionMethod } = convertOpenAPISpecToOpenAIFunctions(convertedSpec);
261
260
  if (defaultExecutionMethod === void 0) throw new Error(`Could not parse any valid operations from the provided spec.`);
262
- const { llm = new ChatOpenAI({ model: "gpt-3.5-turbo-0613" }), prompt = ChatPromptTemplate.fromMessages([HumanMessagePromptTemplate.fromTemplate("Use the provided API's to respond to this user query:\n\n{query}")]), requestChain = new SimpleRequestChain({ requestMethod: async (name, args) => defaultExecutionMethod(name, args, {
261
+ if (!options.llm) throw new Error("`llm` option is required");
262
+ const { llm = options.llm, prompt = ChatPromptTemplate.fromMessages([HumanMessagePromptTemplate.fromTemplate("Use the provided API's to respond to this user query:\n\n{query}")]), requestChain = new SimpleRequestChain({ requestMethod: async (name, args) => defaultExecutionMethod(name, args, {
263
263
  headers: options.headers,
264
264
  params: options.params
265
265
  }) }), llmChainInputs = {}, verbose,...rest } = options;
@@ -1 +1 @@
1
- {"version":3,"file":"openapi.js","names":["url: string","pathParams: Record<string, string>","newParams: Record<string, string>","params: OpenAPIV3_1.ParameterObject[]","spec: OpenAPISpec","jsonSchema: JsonSchema7ObjectType","schema: OpenAPIV3_1.SchemaObject","nameToCallMap: Record<string, { method: string; url: string }>","operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>","paramLocationToRequestArgNameMap: Record<string, string>","requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n }","requestBodySchemas: Record<string, JsonSchema7ObjectType>","openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function","name: string","requestArgs: Record<string, any>","options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }","filteredArgs: Record<string, any>","headers: Record<string, string>","config: { requestMethod: SimpleRequestChainExecutionMethod }","values: ChainValues","_runManager?: CallbackManagerForChainRun","spec: OpenAPIV3_1.Document | string","options: OpenAPIChainOptions","e"],"sources":["../../../src/chains/openai_functions/openapi.ts"],"sourcesContent":["import type { OpenAIClient } from \"@langchain/openai\";\nimport {\n type JsonSchema7ObjectType,\n type JsonSchema7ArrayType,\n type JsonSchema7Type,\n} from \"@langchain/core/utils/json_schema\";\nimport type { OpenAPIV3_1 } from \"openapi-types\";\n\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { ChatOpenAI } from \"@langchain/openai\";\nimport { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport {\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n BasePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { OpenAPISpec } from \"../../util/openapi.js\";\nimport { BaseChain } from \"../base.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\nimport { SequentialChain } from \"../sequential_chain.js\";\nimport { JsonOutputFunctionsParser } from \"../../output_parsers/openai_functions.js\";\n\n/**\n * Type representing a function for executing OpenAPI requests.\n */\ntype OpenAPIExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n) => Promise<string>;\n\n/**\n * Formats a URL by replacing path parameters with their corresponding\n * values.\n * @param url The URL to format.\n * @param pathParams The path parameters to replace in the URL.\n * @returns The formatted URL.\n */\nfunction formatURL(url: string, pathParams: Record<string, string>): string {\n const expectedPathParamNames = [...url.matchAll(/{(.*?)}/g)].map(\n (match) => match[1]\n );\n const newParams: Record<string, string> = {};\n for (const paramName of expectedPathParamNames) {\n const cleanParamName = paramName.replace(/^\\.;/, \"\").replace(/\\*$/, \"\");\n const value = pathParams[cleanParamName];\n let formattedValue;\n if (Array.isArray(value)) {\n if (paramName.startsWith(\".\")) {\n const separator = paramName.endsWith(\"*\") ? \".\" : \",\";\n formattedValue = `.${value.join(separator)}`;\n } else if (paramName.startsWith(\",\")) {\n const separator = paramName.endsWith(\"*\") ? `${cleanParamName}=` : \",\";\n formattedValue = `${cleanParamName}=${value.join(separator)}`;\n } else {\n formattedValue = value.join(\",\");\n }\n } else if (typeof value === \"object\") {\n const kvSeparator = paramName.endsWith(\"*\") ? \"=\" : \",\";\n const kvStrings = Object.entries(value).map(\n ([k, v]) => k + kvSeparator + v\n );\n let entrySeparator;\n if (paramName.startsWith(\".\")) {\n entrySeparator = \".\";\n formattedValue = \".\";\n } else if (paramName.startsWith(\";\")) {\n entrySeparator = \";\";\n formattedValue = \";\";\n } else {\n entrySeparator = \",\";\n formattedValue = \"\";\n }\n formattedValue += kvStrings.join(entrySeparator);\n } else {\n if (paramName.startsWith(\".\")) {\n formattedValue = `.${value}`;\n } else if (paramName.startsWith(\";\")) {\n formattedValue = `;${cleanParamName}=${value}`;\n } else {\n formattedValue = value;\n }\n }\n newParams[paramName] = formattedValue;\n }\n let formattedUrl = url;\n for (const [key, newValue] of Object.entries(newParams)) {\n formattedUrl = formattedUrl.replace(`{${key}}`, newValue);\n }\n return formattedUrl;\n}\n\n/**\n * Converts OpenAPI parameters to JSON schema format.\n * @param params The OpenAPI parameters to convert.\n * @param spec The OpenAPI specification that contains the parameters.\n * @returns The JSON schema representation of the OpenAPI parameters.\n */\nfunction convertOpenAPIParamsToJSONSchema(\n params: OpenAPIV3_1.ParameterObject[],\n spec: OpenAPISpec\n) {\n return params.reduce(\n (jsonSchema: JsonSchema7ObjectType, param) => {\n let schema;\n if (param.schema) {\n schema = spec.getSchema(param.schema);\n // eslint-disable-next-line no-param-reassign\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else if (param.content) {\n const mediaTypeSchema = Object.values(param.content)[0].schema;\n if (mediaTypeSchema) {\n schema = spec.getSchema(mediaTypeSchema);\n }\n if (!schema) {\n return jsonSchema;\n }\n if (schema.description === undefined) {\n schema.description = param.description ?? \"\";\n }\n // eslint-disable-next-line no-param-reassign\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else {\n return jsonSchema;\n }\n if (param.required && Array.isArray(jsonSchema.required)) {\n jsonSchema.required.push(param.name);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n}\n\n// OpenAI throws errors on extraneous schema properties, e.g. if \"required\" is set on individual ones\n/**\n * Converts OpenAPI schemas to JSON schema format.\n * @param schema The OpenAPI schema to convert.\n * @param spec The OpenAPI specification that contains the schema.\n * @returns The JSON schema representation of the OpenAPI schema.\n */\nexport function convertOpenAPISchemaToJSONSchema(\n schema: OpenAPIV3_1.SchemaObject,\n spec: OpenAPISpec\n): JsonSchema7Type {\n if (schema.type === \"object\") {\n return Object.keys(schema.properties ?? {}).reduce(\n (jsonSchema: JsonSchema7ObjectType, propertyName) => {\n if (!schema.properties) {\n return jsonSchema;\n }\n const openAPIProperty = spec.getSchema(schema.properties[propertyName]);\n if (openAPIProperty.type === undefined) {\n return jsonSchema;\n }\n // eslint-disable-next-line no-param-reassign\n jsonSchema.properties[propertyName] = convertOpenAPISchemaToJSONSchema(\n openAPIProperty,\n spec\n );\n if (\n (openAPIProperty.required ||\n schema.required?.includes(propertyName)) &&\n jsonSchema.required !== undefined\n ) {\n jsonSchema.required.push(propertyName);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n }\n if (schema.type === \"array\") {\n return {\n type: \"array\",\n items: convertOpenAPISchemaToJSONSchema(schema.items ?? {}, spec),\n minItems: schema.minItems,\n maxItems: schema.maxItems,\n } as JsonSchema7ArrayType;\n }\n return {\n type: schema.type ?? \"string\",\n } as JsonSchema7Type;\n}\n\n/**\n * Converts an OpenAPI specification to OpenAI functions.\n * @param spec The OpenAPI specification to convert.\n * @returns An object containing the OpenAI functions derived from the OpenAPI specification and a default execution method.\n */\nexport function convertOpenAPISpecToOpenAIFunctions(spec: OpenAPISpec): {\n openAIFunctions: OpenAIClient.Chat.ChatCompletionCreateParams.Function[];\n defaultExecutionMethod?: OpenAPIExecutionMethod;\n} {\n if (!spec.document.paths) {\n return { openAIFunctions: [] };\n }\n const openAIFunctions = [];\n const nameToCallMap: Record<string, { method: string; url: string }> = {};\n for (const path of Object.keys(spec.document.paths)) {\n const pathParameters = spec.getParametersForPath(path);\n for (const method of spec.getMethodsForPath(path)) {\n const operation = spec.getOperation(path, method);\n if (!operation) {\n return { openAIFunctions: [] };\n }\n const operationParametersByLocation = pathParameters\n .concat(spec.getParametersForOperation(operation))\n .reduce(\n (\n operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>,\n param\n ) => {\n if (!operationParams[param.in]) {\n // eslint-disable-next-line no-param-reassign\n operationParams[param.in] = [];\n }\n operationParams[param.in].push(param);\n return operationParams;\n },\n {}\n );\n const paramLocationToRequestArgNameMap: Record<string, string> = {\n query: \"params\",\n header: \"headers\",\n cookie: \"cookies\",\n path: \"path_params\",\n };\n const requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n } = {};\n for (const paramLocation of Object.keys(\n paramLocationToRequestArgNameMap\n )) {\n if (operationParametersByLocation[paramLocation]) {\n requestArgsSchema[paramLocationToRequestArgNameMap[paramLocation]] =\n convertOpenAPIParamsToJSONSchema(\n operationParametersByLocation[paramLocation],\n spec\n );\n }\n }\n const requestBody = spec.getRequestBodyForOperation(operation);\n if (requestBody?.content !== undefined) {\n const requestBodySchemas: Record<string, JsonSchema7ObjectType> = {};\n for (const [mediaType, mediaTypeObject] of Object.entries(\n requestBody.content\n )) {\n if (mediaTypeObject.schema !== undefined) {\n const schema = spec.getSchema(mediaTypeObject.schema);\n requestBodySchemas[mediaType] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n ) as JsonSchema7ObjectType;\n }\n }\n const mediaTypes = Object.keys(requestBodySchemas);\n if (mediaTypes.length === 1) {\n requestArgsSchema.data = requestBodySchemas[mediaTypes[0]];\n } else if (mediaTypes.length > 1) {\n requestArgsSchema.data = {\n anyOf: Object.values(requestBodySchemas),\n };\n }\n }\n const openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function =\n {\n name: OpenAPISpec.getCleanedOperationId(operation, path, method),\n description: operation.description ?? operation.summary ?? \"\",\n parameters: {\n type: \"object\",\n properties: requestArgsSchema,\n // All remaining top-level parameters are required\n required: Object.keys(requestArgsSchema),\n },\n };\n\n openAIFunctions.push(openAIFunction);\n const baseUrl = (spec.baseUrl ?? \"\").endsWith(\"/\")\n ? (spec.baseUrl ?? \"\").slice(0, -1)\n : spec.baseUrl ?? \"\";\n nameToCallMap[openAIFunction.name] = {\n method,\n url: baseUrl + path,\n };\n }\n }\n return {\n openAIFunctions,\n defaultExecutionMethod: async (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n ) => {\n const {\n headers: customHeaders,\n params: customParams,\n ...rest\n } = options ?? {};\n const { method, url } = nameToCallMap[name];\n const requestParams = requestArgs.params ?? {};\n const nonEmptyParams = Object.keys(requestParams).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (filteredArgs: Record<string, any>, argName) => {\n if (\n requestParams[argName] !== \"\" &&\n requestParams[argName] !== null &&\n requestParams[argName] !== undefined\n ) {\n // eslint-disable-next-line no-param-reassign\n filteredArgs[argName] = requestParams[argName];\n }\n return filteredArgs;\n },\n {}\n );\n const queryString = new URLSearchParams({\n ...nonEmptyParams,\n ...customParams,\n }).toString();\n const pathParams = requestArgs.path_params;\n const formattedUrl =\n formatURL(url, pathParams) +\n (queryString.length ? `?${queryString}` : \"\");\n const headers: Record<string, string> = {};\n let body;\n if (requestArgs.data !== undefined) {\n let contentType = \"text/plain\";\n if (typeof requestArgs.data !== \"string\") {\n if (typeof requestArgs.data === \"object\") {\n contentType = \"application/json\";\n }\n body = JSON.stringify(requestArgs.data);\n } else {\n body = requestArgs.data;\n }\n headers[\"content-type\"] = contentType;\n }\n const response = await fetch(formattedUrl, {\n ...requestArgs,\n method,\n headers: {\n ...headers,\n ...requestArgs.headers,\n ...customHeaders,\n },\n body,\n ...rest,\n });\n let output;\n if (response.status < 200 || response.status > 299) {\n output = `${response.status}: ${\n response.statusText\n } for ${name} called with ${JSON.stringify(queryString)}`;\n } else {\n output = await response.text();\n }\n return output;\n },\n };\n}\n\n/**\n * Type representing a function for executing simple requests.\n */\ntype SimpleRequestChainExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>\n) => Promise<string>;\n\n/**\n * A chain for making simple API requests.\n */\nclass SimpleRequestChain extends BaseChain {\n static lc_name() {\n return \"SimpleRequestChain\";\n }\n\n private requestMethod: SimpleRequestChainExecutionMethod;\n\n inputKey = \"function\";\n\n outputKey = \"response\";\n\n constructor(config: { requestMethod: SimpleRequestChainExecutionMethod }) {\n super();\n this.requestMethod = config.requestMethod;\n }\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return [this.outputKey];\n }\n\n _chainType() {\n return \"simple_request_chain\" as const;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n _runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const inputKeyValue = values[this.inputKey];\n const methodName = inputKeyValue.name;\n const args = inputKeyValue.arguments;\n const response = await this.requestMethod(methodName, args);\n return { [this.outputKey]: response };\n }\n}\n\n/**\n * Type representing the options for creating an OpenAPI chain.\n */\nexport type OpenAPIChainOptions = {\n llm?: BaseChatModel<BaseFunctionCallOptions>;\n prompt?: BasePromptTemplate;\n requestChain?: BaseChain;\n llmChainInputs?: LLMChainInput;\n headers?: Record<string, string>;\n params?: Record<string, string>;\n verbose?: boolean;\n};\n\n/**\n * Create a chain for querying an API from a OpenAPI spec.\n * @param spec OpenAPISpec or url/file/text string corresponding to one.\n * @param options Custom options passed into the chain\n * @returns OpenAPIChain\n */\nexport async function createOpenAPIChain(\n spec: OpenAPIV3_1.Document | string,\n options: OpenAPIChainOptions = {}\n) {\n let convertedSpec;\n if (typeof spec === \"string\") {\n try {\n convertedSpec = await OpenAPISpec.fromURL(spec);\n } catch (e) {\n try {\n convertedSpec = OpenAPISpec.fromString(spec);\n } catch (e) {\n throw new Error(`Unable to parse spec from source ${spec}.`);\n }\n }\n } else {\n convertedSpec = OpenAPISpec.fromObject(spec);\n }\n const { openAIFunctions, defaultExecutionMethod } =\n convertOpenAPISpecToOpenAIFunctions(convertedSpec);\n if (defaultExecutionMethod === undefined) {\n throw new Error(\n `Could not parse any valid operations from the provided spec.`\n );\n }\n const {\n llm = new ChatOpenAI({ model: \"gpt-3.5-turbo-0613\" }),\n prompt = ChatPromptTemplate.fromMessages([\n HumanMessagePromptTemplate.fromTemplate(\n \"Use the provided API's to respond to this user query:\\n\\n{query}\"\n ),\n ]),\n requestChain = new SimpleRequestChain({\n requestMethod: async (name, args) =>\n defaultExecutionMethod(name, args, {\n headers: options.headers,\n params: options.params,\n }),\n }),\n llmChainInputs = {},\n verbose,\n ...rest\n } = options;\n const formatChain = new LLMChain({\n llm,\n prompt,\n outputParser: new JsonOutputFunctionsParser({ argsOnly: false }),\n outputKey: \"function\",\n llmKwargs: { functions: openAIFunctions },\n ...llmChainInputs,\n });\n return new SequentialChain({\n chains: [formatChain, requestChain],\n outputVariables: [\"response\"],\n inputVariables: formatChain.inputKeys,\n verbose,\n ...rest,\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"openapi.js","names":["url: string","pathParams: Record<string, string>","newParams: Record<string, string>","params: OpenAPIV3_1.ParameterObject[]","spec: OpenAPISpec","jsonSchema: JsonSchema7ObjectType","schema: OpenAPIV3_1.SchemaObject","nameToCallMap: Record<string, { method: string; url: string }>","operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>","paramLocationToRequestArgNameMap: Record<string, string>","requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n }","requestBodySchemas: Record<string, JsonSchema7ObjectType>","openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function","name: string","requestArgs: Record<string, any>","options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }","filteredArgs: Record<string, any>","headers: Record<string, string>","config: { requestMethod: SimpleRequestChainExecutionMethod }","values: ChainValues","_runManager?: CallbackManagerForChainRun","spec: OpenAPIV3_1.Document | string","options: OpenAPIChainOptions"],"sources":["../../../src/chains/openai_functions/openapi.ts"],"sourcesContent":["import type { OpenAIClient } from \"@langchain/openai\";\nimport {\n type JsonSchema7ObjectType,\n type JsonSchema7ArrayType,\n type JsonSchema7Type,\n} from \"@langchain/core/utils/json_schema\";\nimport type { OpenAPIV3_1 } from \"openapi-types\";\n\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport {\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n BasePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { OpenAPISpec } from \"../../util/openapi.js\";\nimport { BaseChain } from \"../base.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\nimport { SequentialChain } from \"../sequential_chain.js\";\nimport { JsonOutputFunctionsParser } from \"../../output_parsers/openai_functions.js\";\n\n/**\n * Type representing a function for executing OpenAPI requests.\n */\ntype OpenAPIExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n) => Promise<string>;\n\n/**\n * Formats a URL by replacing path parameters with their corresponding\n * values.\n * @param url The URL to format.\n * @param pathParams The path parameters to replace in the URL.\n * @returns The formatted URL.\n */\nfunction formatURL(url: string, pathParams: Record<string, string>): string {\n const expectedPathParamNames = [...url.matchAll(/{(.*?)}/g)].map(\n (match) => match[1]\n );\n const newParams: Record<string, string> = {};\n for (const paramName of expectedPathParamNames) {\n const cleanParamName = paramName.replace(/^\\.;/, \"\").replace(/\\*$/, \"\");\n const value = pathParams[cleanParamName];\n let formattedValue;\n if (Array.isArray(value)) {\n if (paramName.startsWith(\".\")) {\n const separator = paramName.endsWith(\"*\") ? \".\" : \",\";\n formattedValue = `.${value.join(separator)}`;\n } else if (paramName.startsWith(\",\")) {\n const separator = paramName.endsWith(\"*\") ? `${cleanParamName}=` : \",\";\n formattedValue = `${cleanParamName}=${value.join(separator)}`;\n } else {\n formattedValue = value.join(\",\");\n }\n } else if (typeof value === \"object\") {\n const kvSeparator = paramName.endsWith(\"*\") ? \"=\" : \",\";\n const kvStrings = Object.entries(value).map(\n ([k, v]) => k + kvSeparator + v\n );\n let entrySeparator;\n if (paramName.startsWith(\".\")) {\n entrySeparator = \".\";\n formattedValue = \".\";\n } else if (paramName.startsWith(\";\")) {\n entrySeparator = \";\";\n formattedValue = \";\";\n } else {\n entrySeparator = \",\";\n formattedValue = \"\";\n }\n formattedValue += kvStrings.join(entrySeparator);\n } else {\n if (paramName.startsWith(\".\")) {\n formattedValue = `.${value}`;\n } else if (paramName.startsWith(\";\")) {\n formattedValue = `;${cleanParamName}=${value}`;\n } else {\n formattedValue = value;\n }\n }\n newParams[paramName] = formattedValue;\n }\n let formattedUrl = url;\n for (const [key, newValue] of Object.entries(newParams)) {\n formattedUrl = formattedUrl.replace(`{${key}}`, newValue);\n }\n return formattedUrl;\n}\n\n/**\n * Converts OpenAPI parameters to JSON schema format.\n * @param params The OpenAPI parameters to convert.\n * @param spec The OpenAPI specification that contains the parameters.\n * @returns The JSON schema representation of the OpenAPI parameters.\n */\nfunction convertOpenAPIParamsToJSONSchema(\n params: OpenAPIV3_1.ParameterObject[],\n spec: OpenAPISpec\n) {\n return params.reduce(\n (jsonSchema: JsonSchema7ObjectType, param) => {\n let schema;\n if (param.schema) {\n schema = spec.getSchema(param.schema);\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else if (param.content) {\n const mediaTypeSchema = Object.values(param.content)[0].schema;\n if (mediaTypeSchema) {\n schema = spec.getSchema(mediaTypeSchema);\n }\n if (!schema) {\n return jsonSchema;\n }\n if (schema.description === undefined) {\n schema.description = param.description ?? \"\";\n }\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else {\n return jsonSchema;\n }\n if (param.required && Array.isArray(jsonSchema.required)) {\n jsonSchema.required.push(param.name);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n}\n\n// OpenAI throws errors on extraneous schema properties, e.g. if \"required\" is set on individual ones\n/**\n * Converts OpenAPI schemas to JSON schema format.\n * @param schema The OpenAPI schema to convert.\n * @param spec The OpenAPI specification that contains the schema.\n * @returns The JSON schema representation of the OpenAPI schema.\n */\nexport function convertOpenAPISchemaToJSONSchema(\n schema: OpenAPIV3_1.SchemaObject,\n spec: OpenAPISpec\n): JsonSchema7Type {\n if (schema.type === \"object\") {\n return Object.keys(schema.properties ?? {}).reduce(\n (jsonSchema: JsonSchema7ObjectType, propertyName) => {\n if (!schema.properties) {\n return jsonSchema;\n }\n const openAPIProperty = spec.getSchema(schema.properties[propertyName]);\n if (openAPIProperty.type === undefined) {\n return jsonSchema;\n }\n jsonSchema.properties[propertyName] = convertOpenAPISchemaToJSONSchema(\n openAPIProperty,\n spec\n );\n if (\n (openAPIProperty.required ||\n schema.required?.includes(propertyName)) &&\n jsonSchema.required !== undefined\n ) {\n jsonSchema.required.push(propertyName);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n }\n if (schema.type === \"array\") {\n return {\n type: \"array\",\n items: convertOpenAPISchemaToJSONSchema(schema.items ?? {}, spec),\n minItems: schema.minItems,\n maxItems: schema.maxItems,\n } as JsonSchema7ArrayType;\n }\n return {\n type: schema.type ?? \"string\",\n } as JsonSchema7Type;\n}\n\n/**\n * Converts an OpenAPI specification to OpenAI functions.\n * @param spec The OpenAPI specification to convert.\n * @returns An object containing the OpenAI functions derived from the OpenAPI specification and a default execution method.\n */\nexport function convertOpenAPISpecToOpenAIFunctions(spec: OpenAPISpec): {\n openAIFunctions: OpenAIClient.Chat.ChatCompletionCreateParams.Function[];\n defaultExecutionMethod?: OpenAPIExecutionMethod;\n} {\n if (!spec.document.paths) {\n return { openAIFunctions: [] };\n }\n const openAIFunctions = [];\n const nameToCallMap: Record<string, { method: string; url: string }> = {};\n for (const path of Object.keys(spec.document.paths)) {\n const pathParameters = spec.getParametersForPath(path);\n for (const method of spec.getMethodsForPath(path)) {\n const operation = spec.getOperation(path, method);\n if (!operation) {\n return { openAIFunctions: [] };\n }\n const operationParametersByLocation = pathParameters\n .concat(spec.getParametersForOperation(operation))\n .reduce(\n (\n operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>,\n param\n ) => {\n if (!operationParams[param.in]) {\n operationParams[param.in] = [];\n }\n operationParams[param.in].push(param);\n return operationParams;\n },\n {}\n );\n const paramLocationToRequestArgNameMap: Record<string, string> = {\n query: \"params\",\n header: \"headers\",\n cookie: \"cookies\",\n path: \"path_params\",\n };\n const requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n } = {};\n for (const paramLocation of Object.keys(\n paramLocationToRequestArgNameMap\n )) {\n if (operationParametersByLocation[paramLocation]) {\n requestArgsSchema[paramLocationToRequestArgNameMap[paramLocation]] =\n convertOpenAPIParamsToJSONSchema(\n operationParametersByLocation[paramLocation],\n spec\n );\n }\n }\n const requestBody = spec.getRequestBodyForOperation(operation);\n if (requestBody?.content !== undefined) {\n const requestBodySchemas: Record<string, JsonSchema7ObjectType> = {};\n for (const [mediaType, mediaTypeObject] of Object.entries(\n requestBody.content\n )) {\n if (mediaTypeObject.schema !== undefined) {\n const schema = spec.getSchema(mediaTypeObject.schema);\n requestBodySchemas[mediaType] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n ) as JsonSchema7ObjectType;\n }\n }\n const mediaTypes = Object.keys(requestBodySchemas);\n if (mediaTypes.length === 1) {\n requestArgsSchema.data = requestBodySchemas[mediaTypes[0]];\n } else if (mediaTypes.length > 1) {\n requestArgsSchema.data = {\n anyOf: Object.values(requestBodySchemas),\n };\n }\n }\n const openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function =\n {\n name: OpenAPISpec.getCleanedOperationId(operation, path, method),\n description: operation.description ?? operation.summary ?? \"\",\n parameters: {\n type: \"object\",\n properties: requestArgsSchema,\n // All remaining top-level parameters are required\n required: Object.keys(requestArgsSchema),\n },\n };\n\n openAIFunctions.push(openAIFunction);\n const baseUrl = (spec.baseUrl ?? \"\").endsWith(\"/\")\n ? (spec.baseUrl ?? \"\").slice(0, -1)\n : spec.baseUrl ?? \"\";\n nameToCallMap[openAIFunction.name] = {\n method,\n url: baseUrl + path,\n };\n }\n }\n return {\n openAIFunctions,\n defaultExecutionMethod: async (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n ) => {\n const {\n headers: customHeaders,\n params: customParams,\n ...rest\n } = options ?? {};\n const { method, url } = nameToCallMap[name];\n const requestParams = requestArgs.params ?? {};\n const nonEmptyParams = Object.keys(requestParams).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (filteredArgs: Record<string, any>, argName) => {\n if (\n requestParams[argName] !== \"\" &&\n requestParams[argName] !== null &&\n requestParams[argName] !== undefined\n ) {\n filteredArgs[argName] = requestParams[argName];\n }\n return filteredArgs;\n },\n {}\n );\n const queryString = new URLSearchParams({\n ...nonEmptyParams,\n ...customParams,\n }).toString();\n const pathParams = requestArgs.path_params;\n const formattedUrl =\n formatURL(url, pathParams) +\n (queryString.length ? `?${queryString}` : \"\");\n const headers: Record<string, string> = {};\n let body;\n if (requestArgs.data !== undefined) {\n let contentType = \"text/plain\";\n if (typeof requestArgs.data !== \"string\") {\n if (typeof requestArgs.data === \"object\") {\n contentType = \"application/json\";\n }\n body = JSON.stringify(requestArgs.data);\n } else {\n body = requestArgs.data;\n }\n headers[\"content-type\"] = contentType;\n }\n const response = await fetch(formattedUrl, {\n ...requestArgs,\n method,\n headers: {\n ...headers,\n ...requestArgs.headers,\n ...customHeaders,\n },\n body,\n ...rest,\n });\n let output;\n if (response.status < 200 || response.status > 299) {\n output = `${response.status}: ${\n response.statusText\n } for ${name} called with ${JSON.stringify(queryString)}`;\n } else {\n output = await response.text();\n }\n return output;\n },\n };\n}\n\n/**\n * Type representing a function for executing simple requests.\n */\ntype SimpleRequestChainExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>\n) => Promise<string>;\n\n/**\n * A chain for making simple API requests.\n */\nclass SimpleRequestChain extends BaseChain {\n static lc_name() {\n return \"SimpleRequestChain\";\n }\n\n private requestMethod: SimpleRequestChainExecutionMethod;\n\n inputKey = \"function\";\n\n outputKey = \"response\";\n\n constructor(config: { requestMethod: SimpleRequestChainExecutionMethod }) {\n super();\n this.requestMethod = config.requestMethod;\n }\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return [this.outputKey];\n }\n\n _chainType() {\n return \"simple_request_chain\" as const;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n _runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const inputKeyValue = values[this.inputKey];\n const methodName = inputKeyValue.name;\n const args = inputKeyValue.arguments;\n const response = await this.requestMethod(methodName, args);\n return { [this.outputKey]: response };\n }\n}\n\n/**\n * Type representing the options for creating an OpenAPI chain.\n */\nexport type OpenAPIChainOptions = {\n llm?: BaseChatModel<BaseFunctionCallOptions>;\n prompt?: BasePromptTemplate;\n requestChain?: BaseChain;\n llmChainInputs?: LLMChainInput;\n headers?: Record<string, string>;\n params?: Record<string, string>;\n verbose?: boolean;\n};\n\n/**\n * Create a chain for querying an API from a OpenAPI spec.\n * @param spec OpenAPISpec or url/file/text string corresponding to one.\n * @param options Custom options passed into the chain\n * @returns OpenAPIChain\n */\nexport async function createOpenAPIChain(\n spec: OpenAPIV3_1.Document | string,\n options: OpenAPIChainOptions = {}\n) {\n let convertedSpec;\n if (typeof spec === \"string\") {\n try {\n convertedSpec = await OpenAPISpec.fromURL(spec);\n } catch {\n try {\n convertedSpec = OpenAPISpec.fromString(spec);\n } catch {\n throw new Error(`Unable to parse spec from source ${spec}.`);\n }\n }\n } else {\n convertedSpec = OpenAPISpec.fromObject(spec);\n }\n const { openAIFunctions, defaultExecutionMethod } =\n convertOpenAPISpecToOpenAIFunctions(convertedSpec);\n if (defaultExecutionMethod === undefined) {\n throw new Error(\n `Could not parse any valid operations from the provided spec.`\n );\n }\n\n if (!options.llm) {\n throw new Error(\"`llm` option is required\");\n }\n\n const {\n llm = options.llm,\n prompt = ChatPromptTemplate.fromMessages([\n HumanMessagePromptTemplate.fromTemplate(\n \"Use the provided API's to respond to this user query:\\n\\n{query}\"\n ),\n ]),\n requestChain = new SimpleRequestChain({\n requestMethod: async (name, args) =>\n defaultExecutionMethod(name, args, {\n headers: options.headers,\n params: options.params,\n }),\n }),\n llmChainInputs = {},\n verbose,\n ...rest\n } = options;\n const formatChain = new LLMChain({\n llm,\n prompt,\n outputParser: new JsonOutputFunctionsParser({ argsOnly: false }),\n outputKey: \"function\",\n llmKwargs: { functions: openAIFunctions },\n ...llmChainInputs,\n });\n return new SequentialChain({\n chains: [formatChain, requestChain],\n outputVariables: [\"response\"],\n inputVariables: formatChain.inputKeys,\n verbose,\n ...rest,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;AA2CA,SAAS,UAAUA,KAAaC,YAA4C;CAC1E,MAAM,yBAAyB,CAAC,GAAG,IAAI,SAAS,WAAW,AAAC,EAAC,IAC3D,CAAC,UAAU,MAAM,GAClB;CACD,MAAMC,YAAoC,CAAE;AAC5C,MAAK,MAAM,aAAa,wBAAwB;EAC9C,MAAM,iBAAiB,UAAU,QAAQ,QAAQ,GAAG,CAAC,QAAQ,OAAO,GAAG;EACvE,MAAM,QAAQ,WAAW;EACzB,IAAI;AACJ,MAAI,MAAM,QAAQ,MAAM,CACtB,KAAI,UAAU,WAAW,IAAI,EAAE;GAC7B,MAAM,YAAY,UAAU,SAAS,IAAI,GAAG,MAAM;GAClD,iBAAiB,CAAC,CAAC,EAAE,MAAM,KAAK,UAAU,EAAE;EAC7C,WAAU,UAAU,WAAW,IAAI,EAAE;GACpC,MAAM,YAAY,UAAU,SAAS,IAAI,GAAG,GAAG,eAAe,CAAC,CAAC,GAAG;GACnE,iBAAiB,GAAG,eAAe,CAAC,EAAE,MAAM,KAAK,UAAU,EAAE;EAC9D,OACC,iBAAiB,MAAM,KAAK,IAAI;WAEzB,OAAO,UAAU,UAAU;GACpC,MAAM,cAAc,UAAU,SAAS,IAAI,GAAG,MAAM;GACpD,MAAM,YAAY,OAAO,QAAQ,MAAM,CAAC,IACtC,CAAC,CAAC,GAAG,EAAE,KAAK,IAAI,cAAc,EAC/B;GACD,IAAI;AACJ,OAAI,UAAU,WAAW,IAAI,EAAE;IAC7B,iBAAiB;IACjB,iBAAiB;GAClB,WAAU,UAAU,WAAW,IAAI,EAAE;IACpC,iBAAiB;IACjB,iBAAiB;GAClB,OAAM;IACL,iBAAiB;IACjB,iBAAiB;GAClB;GACD,kBAAkB,UAAU,KAAK,eAAe;EACjD,WACK,UAAU,WAAW,IAAI,EAC3B,iBAAiB,CAAC,CAAC,EAAE,OAAO;WACnB,UAAU,WAAW,IAAI,EAClC,iBAAiB,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,OAAO;OAE9C,iBAAiB;EAGrB,UAAU,aAAa;CACxB;CACD,IAAI,eAAe;AACnB,MAAK,MAAM,CAAC,KAAK,SAAS,IAAI,OAAO,QAAQ,UAAU,EACrD,eAAe,aAAa,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAE3D,QAAO;AACR;;;;;;;AAQD,SAAS,iCACPC,QACAC,MACA;AACA,QAAO,OAAO,OACZ,CAACC,YAAmC,UAAU;EAC5C,IAAI;AACJ,MAAI,MAAM,QAAQ;GAChB,SAAS,KAAK,UAAU,MAAM,OAAO;GACrC,WAAW,WAAW,MAAM,QAAQ,iCAClC,QACA,KACD;EACF,WAAU,MAAM,SAAS;GACxB,MAAM,kBAAkB,OAAO,OAAO,MAAM,QAAQ,CAAC,GAAG;AACxD,OAAI,iBACF,SAAS,KAAK,UAAU,gBAAgB;AAE1C,OAAI,CAAC,OACH,QAAO;AAET,OAAI,OAAO,gBAAgB,QACzB,OAAO,cAAc,MAAM,eAAe;GAE5C,WAAW,WAAW,MAAM,QAAQ,iCAClC,QACA,KACD;EACF,MACC,QAAO;AAET,MAAI,MAAM,YAAY,MAAM,QAAQ,WAAW,SAAS,EACtD,WAAW,SAAS,KAAK,MAAM,KAAK;AAEtC,SAAO;CACR,GACD;EACE,MAAM;EACN,YAAY,CAAE;EACd,UAAU,CAAE;EACZ,sBAAsB,CAAE;CACzB,EACF;AACF;;;;;;;AASD,SAAgB,iCACdC,QACAF,MACiB;AACjB,KAAI,OAAO,SAAS,SAClB,QAAO,OAAO,KAAK,OAAO,cAAc,CAAE,EAAC,CAAC,OAC1C,CAACC,YAAmC,iBAAiB;AACnD,MAAI,CAAC,OAAO,WACV,QAAO;EAET,MAAM,kBAAkB,KAAK,UAAU,OAAO,WAAW,cAAc;AACvE,MAAI,gBAAgB,SAAS,OAC3B,QAAO;EAET,WAAW,WAAW,gBAAgB,iCACpC,iBACA,KACD;AACD,OACG,gBAAgB,YACf,OAAO,UAAU,SAAS,aAAa,KACzC,WAAW,aAAa,QAExB,WAAW,SAAS,KAAK,aAAa;AAExC,SAAO;CACR,GACD;EACE,MAAM;EACN,YAAY,CAAE;EACd,UAAU,CAAE;EACZ,sBAAsB,CAAE;CACzB,EACF;AAEH,KAAI,OAAO,SAAS,QAClB,QAAO;EACL,MAAM;EACN,OAAO,iCAAiC,OAAO,SAAS,CAAE,GAAE,KAAK;EACjE,UAAU,OAAO;EACjB,UAAU,OAAO;CAClB;AAEH,QAAO,EACL,MAAM,OAAO,QAAQ,SACtB;AACF;;;;;;AAOD,SAAgB,oCAAoCD,MAGlD;AACA,KAAI,CAAC,KAAK,SAAS,MACjB,QAAO,EAAE,iBAAiB,CAAE,EAAE;CAEhC,MAAM,kBAAkB,CAAE;CAC1B,MAAMG,gBAAiE,CAAE;AACzE,MAAK,MAAM,QAAQ,OAAO,KAAK,KAAK,SAAS,MAAM,EAAE;EACnD,MAAM,iBAAiB,KAAK,qBAAqB,KAAK;AACtD,OAAK,MAAM,UAAU,KAAK,kBAAkB,KAAK,EAAE;GACjD,MAAM,YAAY,KAAK,aAAa,MAAM,OAAO;AACjD,OAAI,CAAC,UACH,QAAO,EAAE,iBAAiB,CAAE,EAAE;GAEhC,MAAM,gCAAgC,eACnC,OAAO,KAAK,0BAA0B,UAAU,CAAC,CACjD,OACC,CACEC,iBACA,UACG;AACH,QAAI,CAAC,gBAAgB,MAAM,KACzB,gBAAgB,MAAM,MAAM,CAAE;IAEhC,gBAAgB,MAAM,IAAI,KAAK,MAAM;AACrC,WAAO;GACR,GACD,CAAE,EACH;GACH,MAAMC,mCAA2D;IAC/D,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;GACP;GACD,MAAMC,oBAMF,CAAE;AACN,QAAK,MAAM,iBAAiB,OAAO,KACjC,iCACD,CACC,KAAI,8BAA8B,gBAChC,kBAAkB,iCAAiC,kBACjD,iCACE,8BAA8B,gBAC9B,KACD;GAGP,MAAM,cAAc,KAAK,2BAA2B,UAAU;AAC9D,OAAI,aAAa,YAAY,QAAW;IACtC,MAAMC,qBAA4D,CAAE;AACpE,SAAK,MAAM,CAAC,WAAW,gBAAgB,IAAI,OAAO,QAChD,YAAY,QACb,CACC,KAAI,gBAAgB,WAAW,QAAW;KACxC,MAAM,SAAS,KAAK,UAAU,gBAAgB,OAAO;KACrD,mBAAmB,aAAa,iCAC9B,QACA,KACD;IACF;IAEH,MAAM,aAAa,OAAO,KAAK,mBAAmB;AAClD,QAAI,WAAW,WAAW,GACxB,kBAAkB,OAAO,mBAAmB,WAAW;aAC9C,WAAW,SAAS,GAC7B,kBAAkB,OAAO,EACvB,OAAO,OAAO,OAAO,mBAAmB,CACzC;GAEJ;GACD,MAAMC,iBACJ;IACE,MAAM,YAAY,sBAAsB,WAAW,MAAM,OAAO;IAChE,aAAa,UAAU,eAAe,UAAU,WAAW;IAC3D,YAAY;KACV,MAAM;KACN,YAAY;KAEZ,UAAU,OAAO,KAAK,kBAAkB;IACzC;GACF;GAEH,gBAAgB,KAAK,eAAe;GACpC,MAAM,WAAW,KAAK,WAAW,IAAI,SAAS,IAAI,IAC7C,KAAK,WAAW,IAAI,MAAM,GAAG,GAAG,GACjC,KAAK,WAAW;GACpB,cAAc,eAAe,QAAQ;IACnC;IACA,KAAK,UAAU;GAChB;EACF;CACF;AACD,QAAO;EACL;EACA,wBAAwB,OACtBC,MAEAC,aACAC,YAIG;GACH,MAAM,EACJ,SAAS,eACT,QAAQ,aACR,GAAG,MACJ,GAAG,WAAW,CAAE;GACjB,MAAM,EAAE,QAAQ,KAAK,GAAG,cAAc;GACtC,MAAM,gBAAgB,YAAY,UAAU,CAAE;GAC9C,MAAM,iBAAiB,OAAO,KAAK,cAAc,CAAC,OAEhD,CAACC,cAAmC,YAAY;AAC9C,QACE,cAAc,aAAa,MAC3B,cAAc,aAAa,QAC3B,cAAc,aAAa,QAE3B,aAAa,WAAW,cAAc;AAExC,WAAO;GACR,GACD,CAAE,EACH;GACD,MAAM,cAAc,IAAI,gBAAgB;IACtC,GAAG;IACH,GAAG;GACJ,GAAE,UAAU;GACb,MAAM,aAAa,YAAY;GAC/B,MAAM,eACJ,UAAU,KAAK,WAAW,IACzB,YAAY,SAAS,CAAC,CAAC,EAAE,aAAa,GAAG;GAC5C,MAAMC,UAAkC,CAAE;GAC1C,IAAI;AACJ,OAAI,YAAY,SAAS,QAAW;IAClC,IAAI,cAAc;AAClB,QAAI,OAAO,YAAY,SAAS,UAAU;AACxC,SAAI,OAAO,YAAY,SAAS,UAC9B,cAAc;KAEhB,OAAO,KAAK,UAAU,YAAY,KAAK;IACxC,OACC,OAAO,YAAY;IAErB,QAAQ,kBAAkB;GAC3B;GACD,MAAM,WAAW,MAAM,MAAM,cAAc;IACzC,GAAG;IACH;IACA,SAAS;KACP,GAAG;KACH,GAAG,YAAY;KACf,GAAG;IACJ;IACD;IACA,GAAG;GACJ,EAAC;GACF,IAAI;AACJ,OAAI,SAAS,SAAS,OAAO,SAAS,SAAS,KAC7C,SAAS,GAAG,SAAS,OAAO,EAAE,EAC5B,SAAS,WACV,KAAK,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,YAAY,EAAE;QAEzD,SAAS,MAAM,SAAS,MAAM;AAEhC,UAAO;EACR;CACF;AACF;;;;AAcD,IAAM,qBAAN,cAAiC,UAAU;CACzC,OAAO,UAAU;AACf,SAAO;CACR;CAED,AAAQ;CAER,WAAW;CAEX,YAAY;CAEZ,YAAYC,QAA8D;EACxE,OAAO;EACP,KAAK,gBAAgB,OAAO;CAC7B;CAED,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,QAAS;CACvB;CAED,IAAI,aAAa;AACf,SAAO,CAAC,KAAK,SAAU;CACxB;CAED,aAAa;AACX,SAAO;CACR;;CAGD,MAAM,MACJC,QACAC,aACsB;EACtB,MAAM,gBAAgB,OAAO,KAAK;EAClC,MAAM,aAAa,cAAc;EACjC,MAAM,OAAO,cAAc;EAC3B,MAAM,WAAW,MAAM,KAAK,cAAc,YAAY,KAAK;AAC3D,SAAO,GAAG,KAAK,YAAY,SAAU;CACtC;AACF;;;;;;;AAqBD,eAAsB,mBACpBC,MACAC,UAA+B,CAAE,GACjC;CACA,IAAI;AACJ,KAAI,OAAO,SAAS,SAClB,KAAI;EACF,gBAAgB,MAAM,YAAY,QAAQ,KAAK;CAChD,QAAO;AACN,MAAI;GACF,gBAAgB,YAAY,WAAW,KAAK;EAC7C,QAAO;AACN,SAAM,IAAI,MAAM,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;EAC5D;CACF;MAED,gBAAgB,YAAY,WAAW,KAAK;CAE9C,MAAM,EAAE,iBAAiB,wBAAwB,GAC/C,oCAAoC,cAAc;AACpD,KAAI,2BAA2B,OAC7B,OAAM,IAAI,MACR,CAAC,4DAA4D,CAAC;AAIlE,KAAI,CAAC,QAAQ,IACX,OAAM,IAAI,MAAM;CAGlB,MAAM,EACJ,MAAM,QAAQ,KACd,SAAS,mBAAmB,aAAa,CACvC,2BAA2B,aACzB,mEACD,AACF,EAAC,EACF,eAAe,IAAI,mBAAmB,EACpC,eAAe,OAAO,MAAM,SAC1B,uBAAuB,MAAM,MAAM;EACjC,SAAS,QAAQ;EACjB,QAAQ,QAAQ;CACjB,EAAC,CACL,IACD,iBAAiB,CAAE,GACnB,QACA,GAAG,MACJ,GAAG;CACJ,MAAM,cAAc,IAAI,SAAS;EAC/B;EACA;EACA,cAAc,IAAI,0BAA0B,EAAE,UAAU,MAAO;EAC/D,WAAW;EACX,WAAW,EAAE,WAAW,gBAAiB;EACzC,GAAG;CACJ;AACD,QAAO,IAAI,gBAAgB;EACzB,QAAQ,CAAC,aAAa,YAAa;EACnC,iBAAiB,CAAC,UAAW;EAC7B,gBAAgB,YAAY;EAC5B;EACA,GAAG;CACJ;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"tagging.cjs","names":["schema: FunctionParameters","llm: BaseChatModel<BaseFunctionCallOptions>","options: TaggingChainOptions","PromptTemplate","JsonOutputFunctionsParser","LLMChain","schema: InteropZodObject","options?: TaggingChainOptions"],"sources":["../../../src/chains/openai_functions/tagging.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { AIMessageChunk } from \"@langchain/core/messages\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport {\n type JsonSchema7ObjectType,\n toJsonSchema,\n} from \"@langchain/core/utils/json_schema\";\nimport {\n FunctionParameters,\n JsonOutputFunctionsParser,\n} from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\n\n/**\n * Type representing the options for creating a tagging chain.\n */\nexport type TaggingChainOptions = {\n prompt?: PromptTemplate;\n} & Omit<LLMChainInput<object>, \"prompt\" | \"llm\">;\n\n/**\n * Function that returns an array of tagging functions. These functions\n * are used to extract relevant information from a passage.\n * @param schema The schema defining the structure of function parameters.\n * @returns An array of tagging functions.\n */\nfunction getTaggingFunctions(schema: FunctionParameters) {\n return [\n {\n name: \"information_extraction\",\n description: \"Extracts the relevant information from the passage.\",\n parameters: schema,\n },\n ];\n}\n\nconst TAGGING_TEMPLATE = `Extract the desired information from the following passage.\n\nPassage:\n{input}\n`;\n\n/**\n * Function that creates a tagging chain using the provided schema,\n * LLM, and options. It constructs the LLM with the necessary\n * functions, prompt, output parser, and tags.\n * @param schema The schema defining the structure of function parameters.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport function createTaggingChain(\n schema: FunctionParameters,\n llm: BaseChatModel<BaseFunctionCallOptions>,\n options: TaggingChainOptions = {}\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n const { prompt = PromptTemplate.fromTemplate(TAGGING_TEMPLATE), ...rest } =\n options;\n const functions = getTaggingFunctions(schema);\n const outputParser = new JsonOutputFunctionsParser();\n return new LLMChain({\n llm,\n prompt,\n llmKwargs: { functions },\n outputParser,\n tags: [\"openai_functions\", \"tagging\"],\n ...rest,\n });\n}\n\n/**\n * Function that creates a tagging chain from a Zod schema. It converts\n * the Zod schema to a JSON schema using the zodToJsonSchema function and\n * then calls createTaggingChain with the converted schema.\n * @param schema The Zod schema which extracted data should match.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport function createTaggingChainFromZod(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n schema: InteropZodObject,\n llm: BaseChatModel<BaseFunctionCallOptions>,\n options?: TaggingChainOptions\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n return createTaggingChain(\n toJsonSchema(schema) as JsonSchema7ObjectType,\n llm,\n options\n );\n}\n"],"mappings":";;;;;;;;;;;;;AA4BA,SAAS,oBAAoBA,QAA4B;AACvD,QAAO,CACL;EACE,MAAM;EACN,aAAa;EACb,YAAY;CACb,CACF;AACF;AAED,MAAM,mBAAmB,CAAC;;;;AAI1B,CAAC;;;;;;;;;;;;;;AAeD,SAAgB,mBACdA,QACAC,KACAC,UAA+B,CAAE,GACyC;CAC1E,MAAM,EAAE,SAASC,wCAAe,aAAa,iBAAiB,CAAE,GAAG,MAAM,GACvE;CACF,MAAM,YAAY,oBAAoB,OAAO;CAC7C,MAAM,eAAe,IAAIC;AACzB,QAAO,IAAIC,2BAAS;EAClB;EACA;EACA,WAAW,EAAE,UAAW;EACxB;EACA,MAAM,CAAC,oBAAoB,SAAU;EACrC,GAAG;CACJ;AACF;;;;;;;;;;;;;;AAeD,SAAgB,0BAEdC,QACAL,KACAM,SAC0E;AAC1E,QAAO,wEACQ,OAAO,EACpB,KACA,QACD;AACF"}
1
+ {"version":3,"file":"tagging.cjs","names":["schema: FunctionParameters","llm: BaseChatModel<BaseFunctionCallOptions>","options: TaggingChainOptions","PromptTemplate","JsonOutputFunctionsParser","LLMChain","schema: InteropZodObject","options?: TaggingChainOptions"],"sources":["../../../src/chains/openai_functions/tagging.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { AIMessageChunk } from \"@langchain/core/messages\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport {\n type JsonSchema7ObjectType,\n toJsonSchema,\n} from \"@langchain/core/utils/json_schema\";\nimport {\n FunctionParameters,\n JsonOutputFunctionsParser,\n} from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\n\n/**\n * Type representing the options for creating a tagging chain.\n */\nexport type TaggingChainOptions = {\n prompt?: PromptTemplate;\n} & Omit<LLMChainInput<object>, \"prompt\" | \"llm\">;\n\n/**\n * Function that returns an array of tagging functions. These functions\n * are used to extract relevant information from a passage.\n * @param schema The schema defining the structure of function parameters.\n * @returns An array of tagging functions.\n */\nfunction getTaggingFunctions(schema: FunctionParameters) {\n return [\n {\n name: \"information_extraction\",\n description: \"Extracts the relevant information from the passage.\",\n parameters: schema,\n },\n ];\n}\n\nconst TAGGING_TEMPLATE = `Extract the desired information from the following passage.\n\nPassage:\n{input}\n`;\n\n/**\n * Function that creates a tagging chain using the provided schema,\n * LLM, and options. It constructs the LLM with the necessary\n * functions, prompt, output parser, and tags.\n * @param schema The schema defining the structure of function parameters.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport function createTaggingChain(\n schema: FunctionParameters,\n llm: BaseChatModel<BaseFunctionCallOptions>,\n options: TaggingChainOptions = {}\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n const { prompt = PromptTemplate.fromTemplate(TAGGING_TEMPLATE), ...rest } =\n options;\n const functions = getTaggingFunctions(schema);\n const outputParser = new JsonOutputFunctionsParser();\n return new LLMChain({\n llm,\n prompt,\n llmKwargs: { functions },\n outputParser,\n tags: [\"openai_functions\", \"tagging\"],\n ...rest,\n });\n}\n\n/**\n * Function that creates a tagging chain from a Zod schema. It converts\n * the Zod schema to a JSON schema using the zodToJsonSchema function and\n * then calls createTaggingChain with the converted schema.\n * @param schema The Zod schema which extracted data should match.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport function createTaggingChainFromZod(\n schema: InteropZodObject,\n llm: BaseChatModel<BaseFunctionCallOptions>,\n options?: TaggingChainOptions\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n return createTaggingChain(\n toJsonSchema(schema) as JsonSchema7ObjectType,\n llm,\n options\n );\n}\n"],"mappings":";;;;;;;;;;;;;AA4BA,SAAS,oBAAoBA,QAA4B;AACvD,QAAO,CACL;EACE,MAAM;EACN,aAAa;EACb,YAAY;CACb,CACF;AACF;AAED,MAAM,mBAAmB,CAAC;;;;AAI1B,CAAC;;;;;;;;;;;;;;AAeD,SAAgB,mBACdA,QACAC,KACAC,UAA+B,CAAE,GACyC;CAC1E,MAAM,EAAE,SAASC,wCAAe,aAAa,iBAAiB,CAAE,GAAG,MAAM,GACvE;CACF,MAAM,YAAY,oBAAoB,OAAO;CAC7C,MAAM,eAAe,IAAIC;AACzB,QAAO,IAAIC,2BAAS;EAClB;EACA;EACA,WAAW,EAAE,UAAW;EACxB;EACA,MAAM,CAAC,oBAAoB,SAAU;EACrC,GAAG;CACJ;AACF;;;;;;;;;;;;;;AAeD,SAAgB,0BACdC,QACAL,KACAM,SAC0E;AAC1E,QAAO,wEACQ,OAAO,EACpB,KACA,QACD;AACF"}
@@ -1,10 +1,10 @@
1
1
  import { LLMChain, LLMChainInput } from "../llm_chain.cjs";
2
2
  import { FunctionParameters } from "../../output_parsers/openai_functions.cjs";
3
3
  import { BaseFunctionCallOptions } from "@langchain/core/language_models/base";
4
- import { PromptTemplate } from "@langchain/core/prompts";
5
4
  import { InteropZodObject } from "@langchain/core/utils/types";
6
5
  import { AIMessageChunk } from "@langchain/core/messages";
7
6
  import { BaseChatModel } from "@langchain/core/language_models/chat_models";
7
+ import { PromptTemplate } from "@langchain/core/prompts";
8
8
 
9
9
  //#region src/chains/openai_functions/tagging.d.ts
10
10
 
@@ -41,9 +41,7 @@ declare function createTaggingChain(schema: FunctionParameters, llm: BaseChatMod
41
41
  * Switch to expression language: https://js.langchain.com/docs/expression_language/
42
42
  * Will be removed in 0.2.0
43
43
  */
44
- declare function createTaggingChainFromZod(
45
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
- schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
44
+ declare function createTaggingChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
47
45
  //#endregion
48
46
  export { TaggingChainOptions, createTaggingChain, createTaggingChainFromZod };
49
47
  //# sourceMappingURL=tagging.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tagging.d.cts","names":["BaseChatModel","BaseFunctionCallOptions","AIMessageChunk","PromptTemplate","InteropZodObject","FunctionParameters","LLMChain","LLMChainInput","TaggingChainOptions","Omit","createTaggingChain","createTaggingChainFromZod"],"sources":["../../../src/chains/openai_functions/tagging.d.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { AIMessageChunk } from \"@langchain/core/messages\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport { FunctionParameters } from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\n/**\n * Type representing the options for creating a tagging chain.\n */\nexport type TaggingChainOptions = {\n prompt?: PromptTemplate;\n} & Omit<LLMChainInput<object>, \"prompt\" | \"llm\">;\n/**\n * Function that creates a tagging chain using the provided schema,\n * LLM, and options. It constructs the LLM with the necessary\n * functions, prompt, output parser, and tags.\n * @param schema The schema defining the structure of function parameters.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport declare function createTaggingChain(schema: FunctionParameters, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n/**\n * Function that creates a tagging chain from a Zod schema. It converts\n * the Zod schema to a JSON schema using the zodToJsonSchema function and\n * then calls createTaggingChain with the converted schema.\n * @param schema The Zod schema which extracted data should match.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport declare function createTaggingChainFromZod(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nschema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n"],"mappings":";;;;;;;;;;;;AAUA;AAA+B,KAAnBQ,mBAAAA,GAAmB;EAAA,MAClBL,CAAAA,EAAAA,cAAAA;CAAc,GACvBM,IAAKF,CAAAA,aAAAA,CAAAA,MAAAA,CAAAA,EAAAA,QAAAA,GAAAA,KAAAA,CAAAA;;AAAD;AAcR;;;;;;;;;;AAA4J;AAcpII,iBAdAD,kBAAAA,CAcyB,MAAA,EAdEL,kBAcF,EAAA,GAAA,EAd2BL,aAc3B,CAdyCC,uBAczC,CAAA,EAAA,OAAA,CAAA,EAd6EO,mBAc7E,CAAA,EAdmGF,QAcnG,CAAA,MAAA,EAdoHN,aAcpH,CAdkIC,uBAclI,EAd2JC,cAc3J,CAAA,CAAA;;;;;;;;;;AAE8D;;;;iBAFvFS,yBAAAA;;QAEhBP,uBAAuBJ,cAAcC,oCAAoCO,sBAAsBF,iBAAiBN,cAAcC,yBAAyBC"}
1
+ {"version":3,"file":"tagging.d.cts","names":["BaseChatModel","BaseFunctionCallOptions","AIMessageChunk","PromptTemplate","InteropZodObject","FunctionParameters","LLMChain","LLMChainInput","TaggingChainOptions","Omit","createTaggingChain","createTaggingChainFromZod"],"sources":["../../../src/chains/openai_functions/tagging.d.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { AIMessageChunk } from \"@langchain/core/messages\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport { FunctionParameters } from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\n/**\n * Type representing the options for creating a tagging chain.\n */\nexport type TaggingChainOptions = {\n prompt?: PromptTemplate;\n} & Omit<LLMChainInput<object>, \"prompt\" | \"llm\">;\n/**\n * Function that creates a tagging chain using the provided schema,\n * LLM, and options. It constructs the LLM with the necessary\n * functions, prompt, output parser, and tags.\n * @param schema The schema defining the structure of function parameters.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport declare function createTaggingChain(schema: FunctionParameters, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n/**\n * Function that creates a tagging chain from a Zod schema. It converts\n * the Zod schema to a JSON schema using the zodToJsonSchema function and\n * then calls createTaggingChain with the converted schema.\n * @param schema The Zod schema which extracted data should match.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport declare function createTaggingChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n"],"mappings":";;;;;;;;;;;;AAUA;AAA+B,KAAnBQ,mBAAAA,GAAmB;EAAA,MAClBL,CAAAA,EAAAA,cAAAA;CAAc,GACvBM,IAAKF,CAAAA,aAAAA,CAAAA,MAAAA,CAAAA,EAAAA,QAAAA,GAAAA,KAAAA,CAAAA;;AAAD;AAcR;;;;;;;;;;AAA4J;AAcpII,iBAdAD,kBAAAA,CAcyB,MAAA,EAdEL,kBAcF,EAAA,GAAA,EAd2BL,aAc3B,CAdyCC,uBAczC,CAAA,EAAA,OAAA,CAAA,EAd6EO,mBAc7E,CAAA,EAdmGF,QAcnG,CAAA,MAAA,EAdoHN,aAcpH,CAdkIC,uBAclI,EAd2JC,cAc3J,CAAA,CAAA;;;;;;;;;;AAAgH;;;;iBAAzIS,yBAAAA,SAAkCP,uBAAuBJ,cAAcC,oCAAoCO,sBAAsBF,iBAAiBN,cAAcC,yBAAyBC"}
@@ -41,9 +41,7 @@ declare function createTaggingChain(schema: FunctionParameters, llm: BaseChatMod
41
41
  * Switch to expression language: https://js.langchain.com/docs/expression_language/
42
42
  * Will be removed in 0.2.0
43
43
  */
44
- declare function createTaggingChainFromZod(
45
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
- schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
44
+ declare function createTaggingChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
47
45
  //#endregion
48
46
  export { TaggingChainOptions, createTaggingChain, createTaggingChainFromZod };
49
47
  //# sourceMappingURL=tagging.d.ts.map