@langchain/classic 1.0.23 → 1.0.24-dev-1773698445534

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 (1431) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +12 -22
  2. package/dist/_virtual/_rolldown/runtime.js +12 -21
  3. package/dist/agents/agent.cjs +2 -3
  4. package/dist/agents/agent.cjs.map +1 -1
  5. package/dist/agents/agent.js +1 -2
  6. package/dist/agents/agent.js.map +1 -1
  7. package/dist/agents/chat/index.cjs +6 -7
  8. package/dist/agents/chat/index.cjs.map +1 -1
  9. package/dist/agents/chat/index.js +1 -2
  10. package/dist/agents/chat/index.js.map +1 -1
  11. package/dist/agents/chat/outputParser.cjs +5 -6
  12. package/dist/agents/chat/outputParser.cjs.map +1 -1
  13. package/dist/agents/chat/outputParser.js +2 -3
  14. package/dist/agents/chat/outputParser.js.map +1 -1
  15. package/dist/agents/chat/prompt.cjs +1 -2
  16. package/dist/agents/chat/prompt.cjs.map +1 -1
  17. package/dist/agents/chat/prompt.js +1 -1
  18. package/dist/agents/chat_convo/index.cjs +6 -7
  19. package/dist/agents/chat_convo/index.cjs.map +1 -1
  20. package/dist/agents/chat_convo/index.js +1 -2
  21. package/dist/agents/chat_convo/index.js.map +1 -1
  22. package/dist/agents/chat_convo/outputParser.cjs +5 -6
  23. package/dist/agents/chat_convo/outputParser.cjs.map +1 -1
  24. package/dist/agents/chat_convo/outputParser.js +1 -2
  25. package/dist/agents/chat_convo/outputParser.js.map +1 -1
  26. package/dist/agents/chat_convo/prompt.cjs +1 -2
  27. package/dist/agents/chat_convo/prompt.cjs.map +1 -1
  28. package/dist/agents/chat_convo/prompt.js +1 -1
  29. package/dist/agents/executor.cjs +4 -5
  30. package/dist/agents/executor.cjs.map +1 -1
  31. package/dist/agents/executor.js +1 -2
  32. package/dist/agents/executor.js.map +1 -1
  33. package/dist/agents/format_scratchpad/log.cjs +8 -10
  34. package/dist/agents/format_scratchpad/log.cjs.map +1 -1
  35. package/dist/agents/format_scratchpad/log.js +1 -2
  36. package/dist/agents/format_scratchpad/log.js.map +1 -1
  37. package/dist/agents/format_scratchpad/log_to_message.cjs +8 -9
  38. package/dist/agents/format_scratchpad/log_to_message.cjs.map +1 -1
  39. package/dist/agents/format_scratchpad/log_to_message.js +1 -2
  40. package/dist/agents/format_scratchpad/log_to_message.js.map +1 -1
  41. package/dist/agents/format_scratchpad/openai_functions.cjs +9 -10
  42. package/dist/agents/format_scratchpad/openai_functions.cjs.map +1 -1
  43. package/dist/agents/format_scratchpad/openai_functions.js +1 -2
  44. package/dist/agents/format_scratchpad/openai_functions.js.map +1 -1
  45. package/dist/agents/format_scratchpad/openai_tools.cjs +9 -10
  46. package/dist/agents/format_scratchpad/openai_tools.js +1 -2
  47. package/dist/agents/format_scratchpad/tool_calling.cjs +2 -3
  48. package/dist/agents/format_scratchpad/tool_calling.cjs.map +1 -1
  49. package/dist/agents/format_scratchpad/tool_calling.js +1 -2
  50. package/dist/agents/format_scratchpad/tool_calling.js.map +1 -1
  51. package/dist/agents/format_scratchpad/xml.cjs +8 -10
  52. package/dist/agents/format_scratchpad/xml.cjs.map +1 -1
  53. package/dist/agents/format_scratchpad/xml.js +1 -2
  54. package/dist/agents/format_scratchpad/xml.js.map +1 -1
  55. package/dist/agents/helpers.cjs +2 -3
  56. package/dist/agents/helpers.cjs.map +1 -1
  57. package/dist/agents/helpers.js +1 -2
  58. package/dist/agents/helpers.js.map +1 -1
  59. package/dist/agents/index.cjs +35 -36
  60. package/dist/agents/index.d.ts +0 -1
  61. package/dist/agents/index.js +1 -2
  62. package/dist/agents/initialize.cjs +9 -10
  63. package/dist/agents/initialize.cjs.map +1 -1
  64. package/dist/agents/initialize.js +1 -2
  65. package/dist/agents/initialize.js.map +1 -1
  66. package/dist/agents/load.cjs +12 -13
  67. package/dist/agents/load.cjs.map +1 -1
  68. package/dist/agents/load.js +1 -2
  69. package/dist/agents/load.js.map +1 -1
  70. package/dist/agents/mrkl/index.cjs +7 -8
  71. package/dist/agents/mrkl/index.cjs.map +1 -1
  72. package/dist/agents/mrkl/index.js +1 -2
  73. package/dist/agents/mrkl/index.js.map +1 -1
  74. package/dist/agents/mrkl/outputParser.cjs +5 -8
  75. package/dist/agents/mrkl/outputParser.cjs.map +1 -1
  76. package/dist/agents/mrkl/outputParser.d.cts +1 -1
  77. package/dist/agents/mrkl/outputParser.js +2 -5
  78. package/dist/agents/mrkl/outputParser.js.map +1 -1
  79. package/dist/agents/mrkl/prompt.cjs +1 -2
  80. package/dist/agents/mrkl/prompt.cjs.map +1 -1
  81. package/dist/agents/mrkl/prompt.js +1 -1
  82. package/dist/agents/openai/output_parser.cjs +10 -11
  83. package/dist/agents/openai/output_parser.js +1 -2
  84. package/dist/agents/openai_functions/index.cjs +8 -9
  85. package/dist/agents/openai_functions/index.cjs.map +1 -1
  86. package/dist/agents/openai_functions/index.d.ts +0 -1
  87. package/dist/agents/openai_functions/index.d.ts.map +1 -1
  88. package/dist/agents/openai_functions/index.js +1 -2
  89. package/dist/agents/openai_functions/index.js.map +1 -1
  90. package/dist/agents/openai_functions/output_parser.cjs +3 -4
  91. package/dist/agents/openai_functions/output_parser.cjs.map +1 -1
  92. package/dist/agents/openai_functions/output_parser.js +1 -2
  93. package/dist/agents/openai_functions/output_parser.js.map +1 -1
  94. package/dist/agents/openai_functions/prompt.cjs +1 -2
  95. package/dist/agents/openai_functions/prompt.cjs.map +1 -1
  96. package/dist/agents/openai_functions/prompt.js +1 -1
  97. package/dist/agents/openai_tools/index.cjs +6 -7
  98. package/dist/agents/openai_tools/index.cjs.map +1 -1
  99. package/dist/agents/openai_tools/index.js +1 -2
  100. package/dist/agents/openai_tools/index.js.map +1 -1
  101. package/dist/agents/openai_tools/output_parser.cjs +3 -4
  102. package/dist/agents/openai_tools/output_parser.cjs.map +1 -1
  103. package/dist/agents/openai_tools/output_parser.js +1 -2
  104. package/dist/agents/openai_tools/output_parser.js.map +1 -1
  105. package/dist/agents/react/index.cjs +6 -7
  106. package/dist/agents/react/index.cjs.map +1 -1
  107. package/dist/agents/react/index.js +1 -2
  108. package/dist/agents/react/index.js.map +1 -1
  109. package/dist/agents/react/output_parser.cjs +10 -11
  110. package/dist/agents/react/output_parser.cjs.map +1 -1
  111. package/dist/agents/react/output_parser.js +1 -2
  112. package/dist/agents/react/output_parser.js.map +1 -1
  113. package/dist/agents/react/prompt.cjs +1 -2
  114. package/dist/agents/react/prompt.cjs.map +1 -1
  115. package/dist/agents/react/prompt.js +1 -1
  116. package/dist/agents/structured_chat/index.cjs +8 -9
  117. package/dist/agents/structured_chat/index.cjs.map +1 -1
  118. package/dist/agents/structured_chat/index.js +1 -2
  119. package/dist/agents/structured_chat/index.js.map +1 -1
  120. package/dist/agents/structured_chat/outputParser.cjs +5 -6
  121. package/dist/agents/structured_chat/outputParser.cjs.map +1 -1
  122. package/dist/agents/structured_chat/outputParser.js +1 -2
  123. package/dist/agents/structured_chat/outputParser.js.map +1 -1
  124. package/dist/agents/structured_chat/prompt.cjs +1 -2
  125. package/dist/agents/structured_chat/prompt.cjs.map +1 -1
  126. package/dist/agents/structured_chat/prompt.js +1 -1
  127. package/dist/agents/tool_calling/index.cjs +5 -6
  128. package/dist/agents/tool_calling/index.cjs.map +1 -1
  129. package/dist/agents/tool_calling/index.js +1 -2
  130. package/dist/agents/tool_calling/index.js.map +1 -1
  131. package/dist/agents/tool_calling/output_parser.cjs +3 -4
  132. package/dist/agents/tool_calling/output_parser.cjs.map +1 -1
  133. package/dist/agents/tool_calling/output_parser.d.ts +0 -1
  134. package/dist/agents/tool_calling/output_parser.d.ts.map +1 -1
  135. package/dist/agents/tool_calling/output_parser.js +1 -2
  136. package/dist/agents/tool_calling/output_parser.js.map +1 -1
  137. package/dist/agents/toolkits/base.cjs +2 -2
  138. package/dist/agents/toolkits/base.js +1 -2
  139. package/dist/agents/toolkits/conversational_retrieval/openai_functions.cjs +4 -5
  140. package/dist/agents/toolkits/conversational_retrieval/openai_functions.cjs.map +1 -1
  141. package/dist/agents/toolkits/conversational_retrieval/openai_functions.js +1 -2
  142. package/dist/agents/toolkits/conversational_retrieval/openai_functions.js.map +1 -1
  143. package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.cjs +4 -5
  144. package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.cjs.map +1 -1
  145. package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.js +1 -2
  146. package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.js.map +1 -1
  147. package/dist/agents/toolkits/conversational_retrieval/tool.cjs +3 -4
  148. package/dist/agents/toolkits/conversational_retrieval/tool.cjs.map +1 -1
  149. package/dist/agents/toolkits/conversational_retrieval/tool.js +1 -2
  150. package/dist/agents/toolkits/conversational_retrieval/tool.js.map +1 -1
  151. package/dist/agents/toolkits/index.cjs +14 -15
  152. package/dist/agents/toolkits/index.js +1 -2
  153. package/dist/agents/toolkits/json/json.cjs +7 -8
  154. package/dist/agents/toolkits/json/json.cjs.map +1 -1
  155. package/dist/agents/toolkits/json/json.js +1 -2
  156. package/dist/agents/toolkits/json/json.js.map +1 -1
  157. package/dist/agents/toolkits/json/prompt.cjs +1 -2
  158. package/dist/agents/toolkits/json/prompt.cjs.map +1 -1
  159. package/dist/agents/toolkits/json/prompt.js +1 -1
  160. package/dist/agents/toolkits/openapi/openapi.cjs +8 -9
  161. package/dist/agents/toolkits/openapi/openapi.cjs.map +1 -1
  162. package/dist/agents/toolkits/openapi/openapi.js +1 -2
  163. package/dist/agents/toolkits/openapi/openapi.js.map +1 -1
  164. package/dist/agents/toolkits/openapi/prompt.cjs +1 -2
  165. package/dist/agents/toolkits/openapi/prompt.cjs.map +1 -1
  166. package/dist/agents/toolkits/openapi/prompt.js +1 -1
  167. package/dist/agents/toolkits/sql/index.cjs +10 -11
  168. package/dist/agents/toolkits/sql/index.js +1 -2
  169. package/dist/agents/toolkits/sql/prompt.cjs +1 -2
  170. package/dist/agents/toolkits/sql/prompt.cjs.map +1 -1
  171. package/dist/agents/toolkits/sql/prompt.js +1 -1
  172. package/dist/agents/toolkits/sql/sql.cjs +7 -8
  173. package/dist/agents/toolkits/sql/sql.cjs.map +1 -1
  174. package/dist/agents/toolkits/sql/sql.js +1 -2
  175. package/dist/agents/toolkits/sql/sql.js.map +1 -1
  176. package/dist/agents/toolkits/vectorstore/prompt.cjs +1 -2
  177. package/dist/agents/toolkits/vectorstore/prompt.cjs.map +1 -1
  178. package/dist/agents/toolkits/vectorstore/prompt.js +1 -1
  179. package/dist/agents/toolkits/vectorstore/vectorstore.cjs +8 -9
  180. package/dist/agents/toolkits/vectorstore/vectorstore.cjs.map +1 -1
  181. package/dist/agents/toolkits/vectorstore/vectorstore.js +1 -2
  182. package/dist/agents/toolkits/vectorstore/vectorstore.js.map +1 -1
  183. package/dist/agents/types.cjs +2 -3
  184. package/dist/agents/types.cjs.map +1 -1
  185. package/dist/agents/types.js +1 -2
  186. package/dist/agents/types.js.map +1 -1
  187. package/dist/agents/xml/index.cjs +8 -9
  188. package/dist/agents/xml/index.cjs.map +1 -1
  189. package/dist/agents/xml/index.js +1 -2
  190. package/dist/agents/xml/index.js.map +1 -1
  191. package/dist/agents/xml/output_parser.cjs +9 -10
  192. package/dist/agents/xml/output_parser.cjs.map +1 -1
  193. package/dist/agents/xml/output_parser.js +1 -2
  194. package/dist/agents/xml/output_parser.js.map +1 -1
  195. package/dist/agents/xml/prompt.cjs +1 -2
  196. package/dist/agents/xml/prompt.cjs.map +1 -1
  197. package/dist/agents/xml/prompt.js +1 -1
  198. package/dist/cache/file_system.cjs +8 -9
  199. package/dist/cache/file_system.cjs.map +1 -1
  200. package/dist/cache/file_system.js +1 -2
  201. package/dist/cache/file_system.js.map +1 -1
  202. package/dist/callbacks/handlers/console.cjs +13 -13
  203. package/dist/callbacks/handlers/console.d.cts +0 -1
  204. package/dist/callbacks/handlers/console.d.ts +0 -1
  205. package/dist/callbacks/handlers/console.js +2 -4
  206. package/dist/callbacks/handlers/run_collector.cjs +13 -13
  207. package/dist/callbacks/handlers/run_collector.d.cts +0 -1
  208. package/dist/callbacks/handlers/run_collector.d.ts +0 -1
  209. package/dist/callbacks/handlers/run_collector.js +2 -4
  210. package/dist/callbacks/handlers/tracer.cjs +13 -13
  211. package/dist/callbacks/handlers/tracer.d.cts +0 -1
  212. package/dist/callbacks/handlers/tracer.d.ts +0 -1
  213. package/dist/callbacks/handlers/tracer.js +2 -4
  214. package/dist/callbacks/handlers/tracer_langchain.cjs +13 -13
  215. package/dist/callbacks/handlers/tracer_langchain.d.cts +0 -1
  216. package/dist/callbacks/handlers/tracer_langchain.d.ts +0 -1
  217. package/dist/callbacks/handlers/tracer_langchain.js +2 -4
  218. package/dist/callbacks/index.cjs +49 -50
  219. package/dist/callbacks/index.js +1 -2
  220. package/dist/callbacks/promises.cjs +13 -13
  221. package/dist/callbacks/promises.d.cts +0 -1
  222. package/dist/callbacks/promises.d.ts +0 -1
  223. package/dist/callbacks/promises.js +2 -4
  224. package/dist/chains/analyze_documents_chain.cjs +3 -4
  225. package/dist/chains/analyze_documents_chain.cjs.map +1 -1
  226. package/dist/chains/analyze_documents_chain.js +1 -2
  227. package/dist/chains/analyze_documents_chain.js.map +1 -1
  228. package/dist/chains/api/api_chain.cjs +4 -5
  229. package/dist/chains/api/api_chain.cjs.map +1 -1
  230. package/dist/chains/api/api_chain.js +1 -2
  231. package/dist/chains/api/api_chain.js.map +1 -1
  232. package/dist/chains/api/prompts.cjs +2 -3
  233. package/dist/chains/api/prompts.cjs.map +1 -1
  234. package/dist/chains/api/prompts.js +10 -12
  235. package/dist/chains/api/prompts.js.map +1 -1
  236. package/dist/chains/base.cjs +2 -3
  237. package/dist/chains/base.cjs.map +1 -1
  238. package/dist/chains/base.js +1 -2
  239. package/dist/chains/base.js.map +1 -1
  240. package/dist/chains/chat_vector_db_chain.cjs +5 -6
  241. package/dist/chains/chat_vector_db_chain.cjs.map +1 -1
  242. package/dist/chains/chat_vector_db_chain.js +1 -2
  243. package/dist/chains/chat_vector_db_chain.js.map +1 -1
  244. package/dist/chains/combine_docs_chain.cjs +4 -5
  245. package/dist/chains/combine_docs_chain.cjs.map +1 -1
  246. package/dist/chains/combine_docs_chain.js +1 -2
  247. package/dist/chains/combine_docs_chain.js.map +1 -1
  248. package/dist/chains/combine_documents/base.cjs +2 -5
  249. package/dist/chains/combine_documents/base.cjs.map +1 -1
  250. package/dist/chains/combine_documents/base.js +2 -4
  251. package/dist/chains/combine_documents/base.js.map +1 -1
  252. package/dist/chains/combine_documents/index.cjs +9 -10
  253. package/dist/chains/combine_documents/index.js +1 -2
  254. package/dist/chains/combine_documents/reduce.cjs +8 -10
  255. package/dist/chains/combine_documents/reduce.cjs.map +1 -1
  256. package/dist/chains/combine_documents/reduce.js +1 -2
  257. package/dist/chains/combine_documents/reduce.js.map +1 -1
  258. package/dist/chains/combine_documents/stuff.cjs +5 -6
  259. package/dist/chains/combine_documents/stuff.cjs.map +1 -1
  260. package/dist/chains/combine_documents/stuff.js +4 -5
  261. package/dist/chains/combine_documents/stuff.js.map +1 -1
  262. package/dist/chains/constitutional_ai/constitutional_chain.cjs +5 -6
  263. package/dist/chains/constitutional_ai/constitutional_chain.cjs.map +1 -1
  264. package/dist/chains/constitutional_ai/constitutional_chain.js +1 -2
  265. package/dist/chains/constitutional_ai/constitutional_chain.js.map +1 -1
  266. package/dist/chains/constitutional_ai/constitutional_principle.cjs +1 -2
  267. package/dist/chains/constitutional_ai/constitutional_principle.cjs.map +1 -1
  268. package/dist/chains/constitutional_ai/constitutional_principle.js +1 -1
  269. package/dist/chains/constitutional_ai/constitutional_prompts.cjs +5 -8
  270. package/dist/chains/constitutional_ai/constitutional_prompts.cjs.map +1 -1
  271. package/dist/chains/constitutional_ai/constitutional_prompts.js +4 -7
  272. package/dist/chains/constitutional_ai/constitutional_prompts.js.map +1 -1
  273. package/dist/chains/conversation.cjs +4 -5
  274. package/dist/chains/conversation.cjs.map +1 -1
  275. package/dist/chains/conversation.js +1 -2
  276. package/dist/chains/conversation.js.map +1 -1
  277. package/dist/chains/conversational_retrieval_chain.cjs +5 -6
  278. package/dist/chains/conversational_retrieval_chain.cjs.map +1 -1
  279. package/dist/chains/conversational_retrieval_chain.js +1 -2
  280. package/dist/chains/conversational_retrieval_chain.js.map +1 -1
  281. package/dist/chains/graph_qa/cypher.cjs +12 -13
  282. package/dist/chains/graph_qa/cypher.cjs.map +1 -1
  283. package/dist/chains/graph_qa/cypher.js +1 -2
  284. package/dist/chains/graph_qa/cypher.js.map +1 -1
  285. package/dist/chains/graph_qa/prompts.cjs +8 -12
  286. package/dist/chains/graph_qa/prompts.cjs.map +1 -1
  287. package/dist/chains/graph_qa/prompts.js +7 -11
  288. package/dist/chains/graph_qa/prompts.js.map +1 -1
  289. package/dist/chains/history_aware_retriever.cjs +8 -9
  290. package/dist/chains/history_aware_retriever.cjs.map +1 -1
  291. package/dist/chains/history_aware_retriever.js +1 -2
  292. package/dist/chains/history_aware_retriever.js.map +1 -1
  293. package/dist/chains/index.cjs +32 -33
  294. package/dist/chains/index.js +1 -2
  295. package/dist/chains/llm_chain.cjs +4 -5
  296. package/dist/chains/llm_chain.cjs.map +1 -1
  297. package/dist/chains/llm_chain.js +1 -2
  298. package/dist/chains/llm_chain.js.map +1 -1
  299. package/dist/chains/load.cjs +12 -13
  300. package/dist/chains/load.cjs.map +1 -1
  301. package/dist/chains/load.js +1 -2
  302. package/dist/chains/load.js.map +1 -1
  303. package/dist/chains/openai_functions/base.cjs +3 -4
  304. package/dist/chains/openai_functions/base.cjs.map +1 -1
  305. package/dist/chains/openai_functions/base.js +1 -2
  306. package/dist/chains/openai_functions/base.js.map +1 -1
  307. package/dist/chains/openai_functions/extraction.cjs +4 -5
  308. package/dist/chains/openai_functions/extraction.cjs.map +1 -1
  309. package/dist/chains/openai_functions/extraction.js +1 -2
  310. package/dist/chains/openai_functions/extraction.js.map +1 -1
  311. package/dist/chains/openai_functions/index.cjs +12 -13
  312. package/dist/chains/openai_functions/index.js +1 -2
  313. package/dist/chains/openai_functions/openapi.cjs +7 -8
  314. package/dist/chains/openai_functions/openapi.cjs.map +1 -1
  315. package/dist/chains/openai_functions/openapi.js +1 -2
  316. package/dist/chains/openai_functions/openapi.js.map +1 -1
  317. package/dist/chains/openai_functions/tagging.cjs +4 -5
  318. package/dist/chains/openai_functions/tagging.cjs.map +1 -1
  319. package/dist/chains/openai_functions/tagging.js +1 -2
  320. package/dist/chains/openai_functions/tagging.js.map +1 -1
  321. package/dist/chains/openai_moderation.cjs +3 -4
  322. package/dist/chains/openai_moderation.cjs.map +1 -1
  323. package/dist/chains/openai_moderation.js +1 -2
  324. package/dist/chains/openai_moderation.js.map +1 -1
  325. package/dist/chains/query_constructor/index.cjs +11 -12
  326. package/dist/chains/query_constructor/index.cjs.map +1 -1
  327. package/dist/chains/query_constructor/index.js +1 -2
  328. package/dist/chains/query_constructor/index.js.map +1 -1
  329. package/dist/chains/query_constructor/ir.cjs +14 -14
  330. package/dist/chains/query_constructor/ir.js +2 -4
  331. package/dist/chains/query_constructor/parser.cjs +3 -4
  332. package/dist/chains/query_constructor/parser.cjs.map +1 -1
  333. package/dist/chains/query_constructor/parser.js +1 -2
  334. package/dist/chains/query_constructor/parser.js.map +1 -1
  335. package/dist/chains/query_constructor/prompt.cjs +23 -27
  336. package/dist/chains/query_constructor/prompt.cjs.map +1 -1
  337. package/dist/chains/query_constructor/prompt.js +22 -26
  338. package/dist/chains/query_constructor/prompt.js.map +1 -1
  339. package/dist/chains/question_answering/load.cjs +6 -7
  340. package/dist/chains/question_answering/load.cjs.map +1 -1
  341. package/dist/chains/question_answering/load.js +1 -2
  342. package/dist/chains/question_answering/load.js.map +1 -1
  343. package/dist/chains/question_answering/map_reduce_prompts.cjs +6 -10
  344. package/dist/chains/question_answering/map_reduce_prompts.cjs.map +1 -1
  345. package/dist/chains/question_answering/map_reduce_prompts.js +7 -13
  346. package/dist/chains/question_answering/map_reduce_prompts.js.map +1 -1
  347. package/dist/chains/question_answering/refine_prompts.cjs +14 -18
  348. package/dist/chains/question_answering/refine_prompts.cjs.map +1 -1
  349. package/dist/chains/question_answering/refine_prompts.js +15 -21
  350. package/dist/chains/question_answering/refine_prompts.js.map +1 -1
  351. package/dist/chains/question_answering/stuff_prompts.cjs +2 -3
  352. package/dist/chains/question_answering/stuff_prompts.cjs.map +1 -1
  353. package/dist/chains/question_answering/stuff_prompts.js +2 -4
  354. package/dist/chains/question_answering/stuff_prompts.js.map +1 -1
  355. package/dist/chains/retrieval.cjs +8 -9
  356. package/dist/chains/retrieval.cjs.map +1 -1
  357. package/dist/chains/retrieval.js +1 -2
  358. package/dist/chains/retrieval.js.map +1 -1
  359. package/dist/chains/retrieval_qa.cjs +3 -4
  360. package/dist/chains/retrieval_qa.cjs.map +1 -1
  361. package/dist/chains/retrieval_qa.js +1 -2
  362. package/dist/chains/retrieval_qa.js.map +1 -1
  363. package/dist/chains/router/llm_router.cjs +3 -4
  364. package/dist/chains/router/llm_router.cjs.map +1 -1
  365. package/dist/chains/router/llm_router.js +1 -2
  366. package/dist/chains/router/llm_router.js.map +1 -1
  367. package/dist/chains/router/multi_prompt.cjs +9 -10
  368. package/dist/chains/router/multi_prompt.cjs.map +1 -1
  369. package/dist/chains/router/multi_prompt.js +1 -2
  370. package/dist/chains/router/multi_prompt.js.map +1 -1
  371. package/dist/chains/router/multi_prompt_prompt.cjs +1 -2
  372. package/dist/chains/router/multi_prompt_prompt.cjs.map +1 -1
  373. package/dist/chains/router/multi_prompt_prompt.js +1 -1
  374. package/dist/chains/router/multi_retrieval_prompt.cjs +1 -2
  375. package/dist/chains/router/multi_retrieval_prompt.cjs.map +1 -1
  376. package/dist/chains/router/multi_retrieval_prompt.js +1 -1
  377. package/dist/chains/router/multi_retrieval_qa.cjs +9 -10
  378. package/dist/chains/router/multi_retrieval_qa.cjs.map +1 -1
  379. package/dist/chains/router/multi_retrieval_qa.js +1 -2
  380. package/dist/chains/router/multi_retrieval_qa.js.map +1 -1
  381. package/dist/chains/router/multi_route.cjs +2 -3
  382. package/dist/chains/router/multi_route.cjs.map +1 -1
  383. package/dist/chains/router/multi_route.js +1 -2
  384. package/dist/chains/router/multi_route.js.map +1 -1
  385. package/dist/chains/router/utils.cjs +1 -2
  386. package/dist/chains/router/utils.cjs.map +1 -1
  387. package/dist/chains/router/utils.js +1 -1
  388. package/dist/chains/sequential_chain.cjs +3 -4
  389. package/dist/chains/sequential_chain.cjs.map +1 -1
  390. package/dist/chains/sequential_chain.js +1 -2
  391. package/dist/chains/sequential_chain.js.map +1 -1
  392. package/dist/chains/sql_db/index.cjs +10 -11
  393. package/dist/chains/sql_db/index.js +1 -2
  394. package/dist/chains/sql_db/sql_db_chain.cjs +6 -7
  395. package/dist/chains/sql_db/sql_db_chain.cjs.map +1 -1
  396. package/dist/chains/sql_db/sql_db_chain.js +1 -2
  397. package/dist/chains/sql_db/sql_db_chain.js.map +1 -1
  398. package/dist/chains/sql_db/sql_db_prompt.cjs +2 -3
  399. package/dist/chains/sql_db/sql_db_prompt.cjs.map +1 -1
  400. package/dist/chains/sql_db/sql_db_prompt.js +1 -2
  401. package/dist/chains/sql_db/sql_db_prompt.js.map +1 -1
  402. package/dist/chains/summarization/load.cjs +5 -6
  403. package/dist/chains/summarization/load.cjs.map +1 -1
  404. package/dist/chains/summarization/load.js +1 -2
  405. package/dist/chains/summarization/load.js.map +1 -1
  406. package/dist/chains/summarization/refine_prompts.cjs +5 -9
  407. package/dist/chains/summarization/refine_prompts.cjs.map +1 -1
  408. package/dist/chains/summarization/refine_prompts.js +4 -7
  409. package/dist/chains/summarization/refine_prompts.js.map +1 -1
  410. package/dist/chains/summarization/stuff_prompts.cjs +5 -9
  411. package/dist/chains/summarization/stuff_prompts.cjs.map +1 -1
  412. package/dist/chains/summarization/stuff_prompts.js +4 -7
  413. package/dist/chains/summarization/stuff_prompts.js.map +1 -1
  414. package/dist/chains/transform.cjs +2 -3
  415. package/dist/chains/transform.cjs.map +1 -1
  416. package/dist/chains/transform.js +1 -2
  417. package/dist/chains/transform.js.map +1 -1
  418. package/dist/chains/vector_db_qa.cjs +3 -4
  419. package/dist/chains/vector_db_qa.cjs.map +1 -1
  420. package/dist/chains/vector_db_qa.js +1 -2
  421. package/dist/chains/vector_db_qa.js.map +1 -1
  422. package/dist/chat_models/universal.cjs +8 -9
  423. package/dist/chat_models/universal.cjs.map +1 -1
  424. package/dist/chat_models/universal.js +1 -2
  425. package/dist/chat_models/universal.js.map +1 -1
  426. package/dist/document.cjs +13 -14
  427. package/dist/document.js +1 -2
  428. package/dist/document_loaders/base.cjs +14 -14
  429. package/dist/document_loaders/base.js +2 -4
  430. package/dist/document_loaders/fs/buffer.cjs +8 -9
  431. package/dist/document_loaders/fs/buffer.cjs.map +1 -1
  432. package/dist/document_loaders/fs/buffer.js +1 -2
  433. package/dist/document_loaders/fs/buffer.js.map +1 -1
  434. package/dist/document_loaders/fs/directory.cjs +8 -9
  435. package/dist/document_loaders/fs/directory.cjs.map +1 -1
  436. package/dist/document_loaders/fs/directory.js +1 -2
  437. package/dist/document_loaders/fs/directory.js.map +1 -1
  438. package/dist/document_loaders/fs/json.cjs +9 -10
  439. package/dist/document_loaders/fs/json.cjs.map +1 -1
  440. package/dist/document_loaders/fs/json.js +1 -2
  441. package/dist/document_loaders/fs/json.js.map +1 -1
  442. package/dist/document_loaders/fs/multi_file.cjs +9 -10
  443. package/dist/document_loaders/fs/multi_file.cjs.map +1 -1
  444. package/dist/document_loaders/fs/multi_file.js +1 -2
  445. package/dist/document_loaders/fs/multi_file.js.map +1 -1
  446. package/dist/document_loaders/fs/text.cjs +8 -9
  447. package/dist/document_loaders/fs/text.cjs.map +1 -1
  448. package/dist/document_loaders/fs/text.js +1 -2
  449. package/dist/document_loaders/fs/text.js.map +1 -1
  450. package/dist/document_transformers/openai_functions.cjs +10 -11
  451. package/dist/document_transformers/openai_functions.cjs.map +1 -1
  452. package/dist/document_transformers/openai_functions.d.ts +0 -1
  453. package/dist/document_transformers/openai_functions.d.ts.map +1 -1
  454. package/dist/document_transformers/openai_functions.js +1 -2
  455. package/dist/document_transformers/openai_functions.js.map +1 -1
  456. package/dist/embeddings/cache_backed.cjs +9 -10
  457. package/dist/embeddings/cache_backed.cjs.map +1 -1
  458. package/dist/embeddings/cache_backed.js +1 -2
  459. package/dist/embeddings/cache_backed.js.map +1 -1
  460. package/dist/embeddings/fake.cjs +14 -14
  461. package/dist/embeddings/fake.js +2 -4
  462. package/dist/evaluation/agents/index.cjs +1 -1
  463. package/dist/evaluation/agents/index.js +2 -3
  464. package/dist/evaluation/agents/prompt.cjs +8 -10
  465. package/dist/evaluation/agents/prompt.cjs.map +1 -1
  466. package/dist/evaluation/agents/prompt.js +7 -9
  467. package/dist/evaluation/agents/prompt.js.map +1 -1
  468. package/dist/evaluation/agents/trajectory.cjs +4 -5
  469. package/dist/evaluation/agents/trajectory.cjs.map +1 -1
  470. package/dist/evaluation/agents/trajectory.js +1 -2
  471. package/dist/evaluation/agents/trajectory.js.map +1 -1
  472. package/dist/evaluation/base.cjs +4 -5
  473. package/dist/evaluation/base.cjs.map +1 -1
  474. package/dist/evaluation/base.d.ts +0 -1
  475. package/dist/evaluation/base.d.ts.map +1 -1
  476. package/dist/evaluation/base.js +1 -2
  477. package/dist/evaluation/base.js.map +1 -1
  478. package/dist/evaluation/comparison/index.cjs +1 -1
  479. package/dist/evaluation/comparison/index.js +2 -3
  480. package/dist/evaluation/comparison/pairwise.cjs +6 -7
  481. package/dist/evaluation/comparison/pairwise.cjs.map +1 -1
  482. package/dist/evaluation/comparison/pairwise.js +1 -2
  483. package/dist/evaluation/comparison/pairwise.js.map +1 -1
  484. package/dist/evaluation/comparison/prompt.cjs +16 -27
  485. package/dist/evaluation/comparison/prompt.cjs.map +1 -1
  486. package/dist/evaluation/comparison/prompt.js +15 -26
  487. package/dist/evaluation/comparison/prompt.js.map +1 -1
  488. package/dist/evaluation/criteria/criteria.cjs +5 -6
  489. package/dist/evaluation/criteria/criteria.cjs.map +1 -1
  490. package/dist/evaluation/criteria/criteria.js +1 -2
  491. package/dist/evaluation/criteria/criteria.js.map +1 -1
  492. package/dist/evaluation/criteria/index.cjs +1 -1
  493. package/dist/evaluation/criteria/index.js +2 -3
  494. package/dist/evaluation/criteria/prompt.cjs +16 -20
  495. package/dist/evaluation/criteria/prompt.cjs.map +1 -1
  496. package/dist/evaluation/criteria/prompt.js +15 -19
  497. package/dist/evaluation/criteria/prompt.js.map +1 -1
  498. package/dist/evaluation/embedding_distance/base.cjs +5 -6
  499. package/dist/evaluation/embedding_distance/base.cjs.map +1 -1
  500. package/dist/evaluation/embedding_distance/base.js +1 -2
  501. package/dist/evaluation/embedding_distance/base.js.map +1 -1
  502. package/dist/evaluation/embedding_distance/index.cjs +1 -1
  503. package/dist/evaluation/embedding_distance/index.js +2 -3
  504. package/dist/evaluation/index.cjs +19 -20
  505. package/dist/evaluation/index.d.ts +0 -5
  506. package/dist/evaluation/index.js +1 -2
  507. package/dist/evaluation/loader.cjs +10 -11
  508. package/dist/evaluation/loader.cjs.map +1 -1
  509. package/dist/evaluation/loader.d.ts +0 -2
  510. package/dist/evaluation/loader.d.ts.map +1 -1
  511. package/dist/evaluation/loader.js +1 -2
  512. package/dist/evaluation/loader.js.map +1 -1
  513. package/dist/evaluation/qa/eval_chain.cjs +3 -4
  514. package/dist/evaluation/qa/eval_chain.cjs.map +1 -1
  515. package/dist/evaluation/qa/eval_chain.js +1 -2
  516. package/dist/evaluation/qa/eval_chain.js.map +1 -1
  517. package/dist/evaluation/qa/index.cjs +1 -1
  518. package/dist/evaluation/qa/index.js +2 -3
  519. package/dist/evaluation/qa/prompt.cjs +10 -14
  520. package/dist/evaluation/qa/prompt.cjs.map +1 -1
  521. package/dist/evaluation/qa/prompt.js +9 -12
  522. package/dist/evaluation/qa/prompt.js.map +1 -1
  523. package/dist/experimental/autogpt/agent.cjs +8 -9
  524. package/dist/experimental/autogpt/agent.cjs.map +1 -1
  525. package/dist/experimental/autogpt/agent.js +3 -4
  526. package/dist/experimental/autogpt/agent.js.map +1 -1
  527. package/dist/experimental/autogpt/index.cjs +11 -12
  528. package/dist/experimental/autogpt/index.js +1 -2
  529. package/dist/experimental/autogpt/output_parser.cjs +2 -3
  530. package/dist/experimental/autogpt/output_parser.cjs.map +1 -1
  531. package/dist/experimental/autogpt/output_parser.js +1 -2
  532. package/dist/experimental/autogpt/output_parser.js.map +1 -1
  533. package/dist/experimental/autogpt/prompt.cjs +3 -4
  534. package/dist/experimental/autogpt/prompt.cjs.map +1 -1
  535. package/dist/experimental/autogpt/prompt.js +1 -2
  536. package/dist/experimental/autogpt/prompt.js.map +1 -1
  537. package/dist/experimental/autogpt/prompt_generator.cjs +3 -4
  538. package/dist/experimental/autogpt/prompt_generator.cjs.map +1 -1
  539. package/dist/experimental/autogpt/prompt_generator.js +1 -2
  540. package/dist/experimental/autogpt/prompt_generator.js.map +1 -1
  541. package/dist/experimental/autogpt/schema.cjs +1 -2
  542. package/dist/experimental/autogpt/schema.cjs.map +1 -1
  543. package/dist/experimental/autogpt/schema.js +1 -1
  544. package/dist/experimental/babyagi/agent.cjs +6 -7
  545. package/dist/experimental/babyagi/agent.cjs.map +1 -1
  546. package/dist/experimental/babyagi/agent.js +1 -2
  547. package/dist/experimental/babyagi/agent.js.map +1 -1
  548. package/dist/experimental/babyagi/index.cjs +12 -13
  549. package/dist/experimental/babyagi/index.js +1 -2
  550. package/dist/experimental/babyagi/task_creation.cjs +3 -4
  551. package/dist/experimental/babyagi/task_creation.cjs.map +1 -1
  552. package/dist/experimental/babyagi/task_creation.js +1 -2
  553. package/dist/experimental/babyagi/task_creation.js.map +1 -1
  554. package/dist/experimental/babyagi/task_execution.cjs +3 -4
  555. package/dist/experimental/babyagi/task_execution.cjs.map +1 -1
  556. package/dist/experimental/babyagi/task_execution.js +1 -2
  557. package/dist/experimental/babyagi/task_execution.js.map +1 -1
  558. package/dist/experimental/babyagi/task_prioritization.cjs +3 -4
  559. package/dist/experimental/babyagi/task_prioritization.cjs.map +1 -1
  560. package/dist/experimental/babyagi/task_prioritization.js +1 -2
  561. package/dist/experimental/babyagi/task_prioritization.js.map +1 -1
  562. package/dist/experimental/chains/violation_of_expectations/index.cjs +9 -10
  563. package/dist/experimental/chains/violation_of_expectations/index.js +1 -2
  564. package/dist/experimental/chains/violation_of_expectations/types.cjs +1 -2
  565. package/dist/experimental/chains/violation_of_expectations/types.cjs.map +1 -1
  566. package/dist/experimental/chains/violation_of_expectations/types.js +1 -1
  567. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_chain.cjs +6 -7
  568. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_chain.cjs.map +1 -1
  569. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_chain.js +1 -2
  570. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_chain.js.map +1 -1
  571. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_prompt.cjs +2 -3
  572. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_prompt.cjs.map +1 -1
  573. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_prompt.js +1 -2
  574. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_prompt.js.map +1 -1
  575. package/dist/experimental/generative_agents/generative_agent.cjs +4 -5
  576. package/dist/experimental/generative_agents/generative_agent.cjs.map +1 -1
  577. package/dist/experimental/generative_agents/generative_agent.js +1 -2
  578. package/dist/experimental/generative_agents/generative_agent.js.map +1 -1
  579. package/dist/experimental/generative_agents/generative_agent_memory.cjs +4 -5
  580. package/dist/experimental/generative_agents/generative_agent_memory.cjs.map +1 -1
  581. package/dist/experimental/generative_agents/generative_agent_memory.js +1 -2
  582. package/dist/experimental/generative_agents/generative_agent_memory.js.map +1 -1
  583. package/dist/experimental/generative_agents/index.cjs +10 -11
  584. package/dist/experimental/generative_agents/index.js +1 -2
  585. package/dist/experimental/masking/index.cjs +11 -12
  586. package/dist/experimental/masking/index.js +1 -2
  587. package/dist/experimental/masking/parser.cjs +1 -2
  588. package/dist/experimental/masking/parser.cjs.map +1 -1
  589. package/dist/experimental/masking/parser.js +1 -1
  590. package/dist/experimental/masking/parser.js.map +1 -1
  591. package/dist/experimental/masking/regex_masking_transformer.cjs +2 -3
  592. package/dist/experimental/masking/regex_masking_transformer.cjs.map +1 -1
  593. package/dist/experimental/masking/regex_masking_transformer.js +1 -2
  594. package/dist/experimental/masking/regex_masking_transformer.js.map +1 -1
  595. package/dist/experimental/masking/transformer.cjs +1 -2
  596. package/dist/experimental/masking/transformer.cjs.map +1 -1
  597. package/dist/experimental/masking/transformer.js +1 -1
  598. package/dist/experimental/openai_assistant/index.cjs +9 -10
  599. package/dist/experimental/openai_assistant/index.cjs.map +1 -1
  600. package/dist/experimental/openai_assistant/index.js +1 -2
  601. package/dist/experimental/openai_assistant/index.js.map +1 -1
  602. package/dist/experimental/openai_files/index.cjs +8 -9
  603. package/dist/experimental/openai_files/index.cjs.map +1 -1
  604. package/dist/experimental/openai_files/index.js +1 -2
  605. package/dist/experimental/openai_files/index.js.map +1 -1
  606. package/dist/experimental/plan_and_execute/agent_executor.cjs +10 -11
  607. package/dist/experimental/plan_and_execute/agent_executor.cjs.map +1 -1
  608. package/dist/experimental/plan_and_execute/agent_executor.js +1 -2
  609. package/dist/experimental/plan_and_execute/agent_executor.js.map +1 -1
  610. package/dist/experimental/plan_and_execute/base.cjs +1 -2
  611. package/dist/experimental/plan_and_execute/base.cjs.map +1 -1
  612. package/dist/experimental/plan_and_execute/base.js +1 -1
  613. package/dist/experimental/plan_and_execute/base.js.map +1 -1
  614. package/dist/experimental/plan_and_execute/index.cjs +11 -12
  615. package/dist/experimental/plan_and_execute/index.js +1 -2
  616. package/dist/experimental/plan_and_execute/outputParser.cjs +3 -4
  617. package/dist/experimental/plan_and_execute/outputParser.cjs.map +1 -1
  618. package/dist/experimental/plan_and_execute/outputParser.js +1 -2
  619. package/dist/experimental/plan_and_execute/outputParser.js.map +1 -1
  620. package/dist/experimental/plan_and_execute/prompt.cjs +2 -3
  621. package/dist/experimental/plan_and_execute/prompt.cjs.map +1 -1
  622. package/dist/experimental/plan_and_execute/prompt.js +1 -2
  623. package/dist/experimental/plan_and_execute/prompt.js.map +1 -1
  624. package/dist/experimental/prompts/custom_format.cjs +8 -9
  625. package/dist/experimental/prompts/custom_format.cjs.map +1 -1
  626. package/dist/experimental/prompts/custom_format.js +1 -2
  627. package/dist/experimental/prompts/custom_format.js.map +1 -1
  628. package/dist/experimental/prompts/handlebars.cjs +9 -10
  629. package/dist/experimental/prompts/handlebars.cjs.map +1 -1
  630. package/dist/experimental/prompts/handlebars.js +1 -2
  631. package/dist/experimental/prompts/handlebars.js.map +1 -1
  632. package/dist/hub/base.cjs +1 -2
  633. package/dist/hub/base.cjs.map +1 -1
  634. package/dist/hub/base.js +1 -1
  635. package/dist/hub/base.js.map +1 -1
  636. package/dist/hub/index.cjs +4 -5
  637. package/dist/hub/index.cjs.map +1 -1
  638. package/dist/hub/index.js +1 -2
  639. package/dist/hub/index.js.map +1 -1
  640. package/dist/hub/node.cjs +5 -6
  641. package/dist/hub/node.cjs.map +1 -1
  642. package/dist/hub/node.js +1 -2
  643. package/dist/hub/node.js.map +1 -1
  644. package/dist/index.cjs +8 -10
  645. package/dist/index.cjs.map +1 -1
  646. package/dist/index.js +1 -2
  647. package/dist/index.js.map +1 -1
  648. package/dist/indexes/index.cjs +8 -9
  649. package/dist/indexes/index.js +1 -2
  650. package/dist/load/import_constants.cjs +1 -2
  651. package/dist/load/import_constants.cjs.map +1 -1
  652. package/dist/load/import_constants.js +1 -1
  653. package/dist/load/import_map.cjs +98 -99
  654. package/dist/load/import_map.cjs.map +1 -1
  655. package/dist/load/import_map.js +1 -2
  656. package/dist/load/import_map.js.map +1 -1
  657. package/dist/load/index.cjs +5 -6
  658. package/dist/load/index.cjs.map +1 -1
  659. package/dist/load/index.js +1 -2
  660. package/dist/load/index.js.map +1 -1
  661. package/dist/load/serializable.cjs +14 -14
  662. package/dist/load/serializable.js +2 -4
  663. package/dist/memory/buffer_memory.cjs +3 -4
  664. package/dist/memory/buffer_memory.cjs.map +1 -1
  665. package/dist/memory/buffer_memory.js +1 -2
  666. package/dist/memory/buffer_memory.js.map +1 -1
  667. package/dist/memory/buffer_token_memory.cjs +3 -4
  668. package/dist/memory/buffer_token_memory.cjs.map +1 -1
  669. package/dist/memory/buffer_token_memory.js +1 -2
  670. package/dist/memory/buffer_token_memory.js.map +1 -1
  671. package/dist/memory/buffer_window_memory.cjs +3 -4
  672. package/dist/memory/buffer_window_memory.cjs.map +1 -1
  673. package/dist/memory/buffer_window_memory.js +1 -2
  674. package/dist/memory/buffer_window_memory.js.map +1 -1
  675. package/dist/memory/chat_memory.cjs +8 -9
  676. package/dist/memory/chat_memory.cjs.map +1 -1
  677. package/dist/memory/chat_memory.js +1 -2
  678. package/dist/memory/chat_memory.js.map +1 -1
  679. package/dist/memory/combined_memory.cjs +2 -3
  680. package/dist/memory/combined_memory.cjs.map +1 -1
  681. package/dist/memory/combined_memory.js +1 -2
  682. package/dist/memory/combined_memory.js.map +1 -1
  683. package/dist/memory/entity_memory.cjs +6 -7
  684. package/dist/memory/entity_memory.cjs.map +1 -1
  685. package/dist/memory/entity_memory.js +1 -2
  686. package/dist/memory/entity_memory.js.map +1 -1
  687. package/dist/memory/index.cjs +43 -44
  688. package/dist/memory/index.js +1 -2
  689. package/dist/memory/prompt.cjs +27 -33
  690. package/dist/memory/prompt.cjs.map +1 -1
  691. package/dist/memory/prompt.js +26 -32
  692. package/dist/memory/prompt.js.map +1 -1
  693. package/dist/memory/stores/entity/base.cjs +2 -3
  694. package/dist/memory/stores/entity/base.cjs.map +1 -1
  695. package/dist/memory/stores/entity/base.js +1 -2
  696. package/dist/memory/stores/entity/base.js.map +1 -1
  697. package/dist/memory/stores/entity/in_memory.cjs +2 -3
  698. package/dist/memory/stores/entity/in_memory.cjs.map +1 -1
  699. package/dist/memory/stores/entity/in_memory.js +1 -2
  700. package/dist/memory/stores/entity/in_memory.js.map +1 -1
  701. package/dist/memory/summary.cjs +5 -6
  702. package/dist/memory/summary.cjs.map +1 -1
  703. package/dist/memory/summary.js +1 -2
  704. package/dist/memory/summary.js.map +1 -1
  705. package/dist/memory/summary_buffer.cjs +3 -4
  706. package/dist/memory/summary_buffer.cjs.map +1 -1
  707. package/dist/memory/summary_buffer.js +1 -2
  708. package/dist/memory/summary_buffer.js.map +1 -1
  709. package/dist/memory/vector_store.cjs +3 -4
  710. package/dist/memory/vector_store.cjs.map +1 -1
  711. package/dist/memory/vector_store.js +1 -2
  712. package/dist/memory/vector_store.js.map +1 -1
  713. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/_runner.d.cts +1 -4
  714. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/_runner.d.ts +1 -4
  715. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluate_comparative.d.cts +1 -2
  716. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluate_comparative.d.ts +1 -2
  717. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/index.d.cts +1 -4
  718. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/index.d.ts +1 -4
  719. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/string_evaluator.d.cts +1 -1
  720. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/string_evaluator.d.ts +1 -1
  721. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/traceable.d.cts +0 -1
  722. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/traceable.d.cts.map +1 -1
  723. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/traceable.d.ts +0 -1
  724. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/traceable.d.ts.map +1 -1
  725. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/async_caller.d.cts +0 -2
  726. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/async_caller.d.cts.map +1 -1
  727. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/async_caller.d.ts +0 -2
  728. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/async_caller.d.ts.map +1 -1
  729. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/p-queue.d.cts +1 -1
  730. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/p-queue.d.ts +1 -1
  731. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/evaluation.d.cts +1 -2
  732. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.19.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/evaluation.d.ts +1 -2
  733. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.d.cts +1 -1
  734. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.d.ts +1 -1
  735. package/dist/output_parsers/combining.cjs +2 -3
  736. package/dist/output_parsers/combining.cjs.map +1 -1
  737. package/dist/output_parsers/combining.js +1 -2
  738. package/dist/output_parsers/combining.js.map +1 -1
  739. package/dist/output_parsers/datetime.cjs +2 -3
  740. package/dist/output_parsers/datetime.cjs.map +1 -1
  741. package/dist/output_parsers/datetime.js +1 -2
  742. package/dist/output_parsers/datetime.js.map +1 -1
  743. package/dist/output_parsers/expression.cjs +10 -11
  744. package/dist/output_parsers/expression.cjs.map +1 -1
  745. package/dist/output_parsers/expression.js +1 -2
  746. package/dist/output_parsers/expression.js.map +1 -1
  747. package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.cjs +2 -3
  748. package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.cjs.map +1 -1
  749. package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.js +1 -2
  750. package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.js.map +1 -1
  751. package/dist/output_parsers/expression_type_handlers/base.cjs +2 -3
  752. package/dist/output_parsers/expression_type_handlers/base.cjs.map +1 -1
  753. package/dist/output_parsers/expression_type_handlers/base.js +1 -2
  754. package/dist/output_parsers/expression_type_handlers/base.js.map +1 -1
  755. package/dist/output_parsers/expression_type_handlers/boolean_literal_handler.cjs +2 -3
  756. package/dist/output_parsers/expression_type_handlers/boolean_literal_handler.cjs.map +1 -1
  757. package/dist/output_parsers/expression_type_handlers/boolean_literal_handler.js +1 -2
  758. package/dist/output_parsers/expression_type_handlers/boolean_literal_handler.js.map +1 -1
  759. package/dist/output_parsers/expression_type_handlers/call_expression_handler.cjs +2 -3
  760. package/dist/output_parsers/expression_type_handlers/call_expression_handler.cjs.map +1 -1
  761. package/dist/output_parsers/expression_type_handlers/call_expression_handler.js +1 -2
  762. package/dist/output_parsers/expression_type_handlers/call_expression_handler.js.map +1 -1
  763. package/dist/output_parsers/expression_type_handlers/factory.cjs +11 -12
  764. package/dist/output_parsers/expression_type_handlers/factory.cjs.map +1 -1
  765. package/dist/output_parsers/expression_type_handlers/factory.js +1 -2
  766. package/dist/output_parsers/expression_type_handlers/factory.js.map +1 -1
  767. package/dist/output_parsers/expression_type_handlers/grammar/parser_grammar.cjs +1 -2
  768. package/dist/output_parsers/expression_type_handlers/grammar/parser_grammar.cjs.map +1 -1
  769. package/dist/output_parsers/expression_type_handlers/grammar/parser_grammar.js +1 -1
  770. package/dist/output_parsers/expression_type_handlers/identifier_handler.cjs +2 -3
  771. package/dist/output_parsers/expression_type_handlers/identifier_handler.cjs.map +1 -1
  772. package/dist/output_parsers/expression_type_handlers/identifier_handler.js +1 -2
  773. package/dist/output_parsers/expression_type_handlers/identifier_handler.js.map +1 -1
  774. package/dist/output_parsers/expression_type_handlers/member_expression_handler.cjs +2 -3
  775. package/dist/output_parsers/expression_type_handlers/member_expression_handler.cjs.map +1 -1
  776. package/dist/output_parsers/expression_type_handlers/member_expression_handler.js +1 -2
  777. package/dist/output_parsers/expression_type_handlers/member_expression_handler.js.map +1 -1
  778. package/dist/output_parsers/expression_type_handlers/numeric_literal_handler.cjs +2 -3
  779. package/dist/output_parsers/expression_type_handlers/numeric_literal_handler.cjs.map +1 -1
  780. package/dist/output_parsers/expression_type_handlers/numeric_literal_handler.js +1 -2
  781. package/dist/output_parsers/expression_type_handlers/numeric_literal_handler.js.map +1 -1
  782. package/dist/output_parsers/expression_type_handlers/object_literal_expression_handler.cjs +3 -4
  783. package/dist/output_parsers/expression_type_handlers/object_literal_expression_handler.cjs.map +1 -1
  784. package/dist/output_parsers/expression_type_handlers/object_literal_expression_handler.js +1 -2
  785. package/dist/output_parsers/expression_type_handlers/object_literal_expression_handler.js.map +1 -1
  786. package/dist/output_parsers/expression_type_handlers/property_assignment_handler.cjs +2 -3
  787. package/dist/output_parsers/expression_type_handlers/property_assignment_handler.cjs.map +1 -1
  788. package/dist/output_parsers/expression_type_handlers/property_assignment_handler.js +1 -2
  789. package/dist/output_parsers/expression_type_handlers/property_assignment_handler.js.map +1 -1
  790. package/dist/output_parsers/expression_type_handlers/string_literal_handler.cjs +2 -3
  791. package/dist/output_parsers/expression_type_handlers/string_literal_handler.cjs.map +1 -1
  792. package/dist/output_parsers/expression_type_handlers/string_literal_handler.js +1 -2
  793. package/dist/output_parsers/expression_type_handlers/string_literal_handler.js.map +1 -1
  794. package/dist/output_parsers/fix.cjs +4 -5
  795. package/dist/output_parsers/fix.cjs.map +1 -1
  796. package/dist/output_parsers/fix.js +1 -2
  797. package/dist/output_parsers/fix.js.map +1 -1
  798. package/dist/output_parsers/http_response.cjs +2 -3
  799. package/dist/output_parsers/http_response.cjs.map +1 -1
  800. package/dist/output_parsers/http_response.js +1 -2
  801. package/dist/output_parsers/http_response.js.map +1 -1
  802. package/dist/output_parsers/index.cjs +32 -33
  803. package/dist/output_parsers/index.js +1 -2
  804. package/dist/output_parsers/noop.cjs +2 -3
  805. package/dist/output_parsers/noop.cjs.map +1 -1
  806. package/dist/output_parsers/noop.js +1 -2
  807. package/dist/output_parsers/noop.js.map +1 -1
  808. package/dist/output_parsers/openai_functions.cjs +2 -3
  809. package/dist/output_parsers/openai_functions.cjs.map +1 -1
  810. package/dist/output_parsers/openai_functions.js +1 -2
  811. package/dist/output_parsers/openai_functions.js.map +1 -1
  812. package/dist/output_parsers/openai_tools.cjs +2 -3
  813. package/dist/output_parsers/openai_tools.cjs.map +1 -1
  814. package/dist/output_parsers/openai_tools.js +1 -2
  815. package/dist/output_parsers/openai_tools.js.map +1 -1
  816. package/dist/output_parsers/prompts.cjs +4 -8
  817. package/dist/output_parsers/prompts.cjs.map +1 -1
  818. package/dist/output_parsers/prompts.js +3 -6
  819. package/dist/output_parsers/prompts.js.map +1 -1
  820. package/dist/output_parsers/regex.cjs +2 -3
  821. package/dist/output_parsers/regex.cjs.map +1 -1
  822. package/dist/output_parsers/regex.js +1 -2
  823. package/dist/output_parsers/regex.js.map +1 -1
  824. package/dist/output_parsers/router.cjs +3 -4
  825. package/dist/output_parsers/router.cjs.map +1 -1
  826. package/dist/output_parsers/router.js +1 -2
  827. package/dist/output_parsers/router.js.map +1 -1
  828. package/dist/output_parsers/structured.cjs +2 -3
  829. package/dist/output_parsers/structured.cjs.map +1 -1
  830. package/dist/output_parsers/structured.js +1 -2
  831. package/dist/output_parsers/structured.js.map +1 -1
  832. package/dist/retrievers/contextual_compression.cjs +8 -9
  833. package/dist/retrievers/contextual_compression.cjs.map +1 -1
  834. package/dist/retrievers/contextual_compression.js +1 -2
  835. package/dist/retrievers/contextual_compression.js.map +1 -1
  836. package/dist/retrievers/document_compressors/chain_extract.cjs +11 -12
  837. package/dist/retrievers/document_compressors/chain_extract.cjs.map +1 -1
  838. package/dist/retrievers/document_compressors/chain_extract.js +1 -2
  839. package/dist/retrievers/document_compressors/chain_extract.js.map +1 -1
  840. package/dist/retrievers/document_compressors/chain_extract_prompt.cjs +1 -2
  841. package/dist/retrievers/document_compressors/chain_extract_prompt.cjs.map +1 -1
  842. package/dist/retrievers/document_compressors/chain_extract_prompt.js +1 -1
  843. package/dist/retrievers/document_compressors/embeddings_filter.cjs +9 -10
  844. package/dist/retrievers/document_compressors/embeddings_filter.cjs.map +1 -1
  845. package/dist/retrievers/document_compressors/embeddings_filter.js +1 -2
  846. package/dist/retrievers/document_compressors/embeddings_filter.js.map +1 -1
  847. package/dist/retrievers/document_compressors/index.cjs +8 -10
  848. package/dist/retrievers/document_compressors/index.cjs.map +1 -1
  849. package/dist/retrievers/document_compressors/index.js +1 -2
  850. package/dist/retrievers/document_compressors/index.js.map +1 -1
  851. package/dist/retrievers/ensemble.cjs +8 -9
  852. package/dist/retrievers/ensemble.cjs.map +1 -1
  853. package/dist/retrievers/ensemble.js +1 -2
  854. package/dist/retrievers/ensemble.js.map +1 -1
  855. package/dist/retrievers/hyde.cjs +8 -9
  856. package/dist/retrievers/hyde.cjs.map +1 -1
  857. package/dist/retrievers/hyde.js +1 -2
  858. package/dist/retrievers/hyde.js.map +1 -1
  859. package/dist/retrievers/matryoshka_retriever.cjs +8 -9
  860. package/dist/retrievers/matryoshka_retriever.cjs.map +1 -1
  861. package/dist/retrievers/matryoshka_retriever.js +1 -2
  862. package/dist/retrievers/matryoshka_retriever.js.map +1 -1
  863. package/dist/retrievers/multi_query.cjs +9 -10
  864. package/dist/retrievers/multi_query.cjs.map +1 -1
  865. package/dist/retrievers/multi_query.js +1 -2
  866. package/dist/retrievers/multi_query.js.map +1 -1
  867. package/dist/retrievers/multi_vector.cjs +9 -10
  868. package/dist/retrievers/multi_vector.cjs.map +1 -1
  869. package/dist/retrievers/multi_vector.js +1 -2
  870. package/dist/retrievers/multi_vector.js.map +1 -1
  871. package/dist/retrievers/parent_document.cjs +9 -10
  872. package/dist/retrievers/parent_document.cjs.map +1 -1
  873. package/dist/retrievers/parent_document.js +1 -2
  874. package/dist/retrievers/parent_document.js.map +1 -1
  875. package/dist/retrievers/score_threshold.cjs +8 -9
  876. package/dist/retrievers/score_threshold.cjs.map +1 -1
  877. package/dist/retrievers/score_threshold.js +1 -2
  878. package/dist/retrievers/score_threshold.js.map +1 -1
  879. package/dist/retrievers/self_query/functional.cjs +13 -14
  880. package/dist/retrievers/self_query/functional.js +1 -2
  881. package/dist/retrievers/self_query/index.cjs +24 -25
  882. package/dist/retrievers/self_query/index.cjs.map +1 -1
  883. package/dist/retrievers/self_query/index.js +1 -2
  884. package/dist/retrievers/self_query/index.js.map +1 -1
  885. package/dist/retrievers/time_weighted.cjs +9 -10
  886. package/dist/retrievers/time_weighted.cjs.map +1 -1
  887. package/dist/retrievers/time_weighted.js +2 -3
  888. package/dist/retrievers/time_weighted.js.map +1 -1
  889. package/dist/schema/prompt_template.cjs +8 -10
  890. package/dist/schema/prompt_template.cjs.map +1 -1
  891. package/dist/schema/prompt_template.js +1 -2
  892. package/dist/schema/prompt_template.js.map +1 -1
  893. package/dist/schema/query_constructor.cjs +8 -10
  894. package/dist/schema/query_constructor.cjs.map +1 -1
  895. package/dist/schema/query_constructor.js +1 -2
  896. package/dist/schema/query_constructor.js.map +1 -1
  897. package/dist/smith/config.cjs +1 -2
  898. package/dist/smith/config.cjs.map +1 -1
  899. package/dist/smith/config.d.cts +0 -1
  900. package/dist/smith/config.d.cts.map +1 -1
  901. package/dist/smith/config.d.ts +0 -2
  902. package/dist/smith/config.d.ts.map +1 -1
  903. package/dist/smith/config.js +1 -1
  904. package/dist/smith/index.cjs +10 -11
  905. package/dist/smith/index.js +1 -2
  906. package/dist/smith/name_generation.cjs +1 -2
  907. package/dist/smith/name_generation.cjs.map +1 -1
  908. package/dist/smith/name_generation.js +1 -1
  909. package/dist/smith/progress.cjs +1 -2
  910. package/dist/smith/progress.cjs.map +1 -1
  911. package/dist/smith/progress.js +1 -1
  912. package/dist/smith/progress.js.map +1 -1
  913. package/dist/smith/runner_utils.cjs +6 -7
  914. package/dist/smith/runner_utils.cjs.map +1 -1
  915. package/dist/smith/runner_utils.d.cts +0 -1
  916. package/dist/smith/runner_utils.d.cts.map +1 -1
  917. package/dist/smith/runner_utils.d.ts +0 -1
  918. package/dist/smith/runner_utils.d.ts.map +1 -1
  919. package/dist/smith/runner_utils.js +1 -2
  920. package/dist/smith/runner_utils.js.map +1 -1
  921. package/dist/sql_db.cjs +9 -10
  922. package/dist/sql_db.cjs.map +1 -1
  923. package/dist/sql_db.js +1 -2
  924. package/dist/sql_db.js.map +1 -1
  925. package/dist/storage/encoder_backed.cjs +8 -9
  926. package/dist/storage/encoder_backed.cjs.map +1 -1
  927. package/dist/storage/encoder_backed.js +1 -2
  928. package/dist/storage/encoder_backed.js.map +1 -1
  929. package/dist/storage/file_system.cjs +8 -9
  930. package/dist/storage/file_system.cjs.map +1 -1
  931. package/dist/storage/file_system.js +1 -2
  932. package/dist/storage/file_system.js.map +1 -1
  933. package/dist/storage/in_memory.cjs +13 -14
  934. package/dist/storage/in_memory.js +1 -2
  935. package/dist/stores/doc/base.cjs +8 -10
  936. package/dist/stores/doc/base.cjs.map +1 -1
  937. package/dist/stores/doc/base.js +1 -2
  938. package/dist/stores/doc/base.js.map +1 -1
  939. package/dist/stores/doc/in_memory.cjs +9 -10
  940. package/dist/stores/doc/in_memory.cjs.map +1 -1
  941. package/dist/stores/doc/in_memory.js +1 -2
  942. package/dist/stores/doc/in_memory.js.map +1 -1
  943. package/dist/stores/file/base.cjs +2 -3
  944. package/dist/stores/file/base.cjs.map +1 -1
  945. package/dist/stores/file/base.js +1 -2
  946. package/dist/stores/file/base.js.map +1 -1
  947. package/dist/stores/file/in_memory.cjs +9 -10
  948. package/dist/stores/file/in_memory.cjs.map +1 -1
  949. package/dist/stores/file/in_memory.js +1 -2
  950. package/dist/stores/file/in_memory.js.map +1 -1
  951. package/dist/stores/file/node.cjs +9 -10
  952. package/dist/stores/file/node.cjs.map +1 -1
  953. package/dist/stores/file/node.js +1 -2
  954. package/dist/stores/file/node.js.map +1 -1
  955. package/dist/stores/message/in_memory.cjs +13 -14
  956. package/dist/stores/message/in_memory.js +1 -2
  957. package/dist/text_splitter.cjs +14 -14
  958. package/dist/text_splitter.d.cts +0 -1
  959. package/dist/text_splitter.d.ts +0 -1
  960. package/dist/text_splitter.js +2 -4
  961. package/dist/tools/chain.cjs +8 -9
  962. package/dist/tools/chain.cjs.map +1 -1
  963. package/dist/tools/chain.js +1 -2
  964. package/dist/tools/chain.js.map +1 -1
  965. package/dist/tools/fs.cjs +2 -3
  966. package/dist/tools/fs.cjs.map +1 -1
  967. package/dist/tools/fs.js +1 -2
  968. package/dist/tools/fs.js.map +1 -1
  969. package/dist/tools/index.cjs +33 -34
  970. package/dist/tools/index.js +1 -2
  971. package/dist/tools/json.cjs +2 -3
  972. package/dist/tools/json.cjs.map +1 -1
  973. package/dist/tools/json.js +1 -2
  974. package/dist/tools/json.js.map +1 -1
  975. package/dist/tools/render.cjs +8 -9
  976. package/dist/tools/render.cjs.map +1 -1
  977. package/dist/tools/render.js +1 -2
  978. package/dist/tools/render.js.map +1 -1
  979. package/dist/tools/requests.cjs +2 -3
  980. package/dist/tools/requests.cjs.map +1 -1
  981. package/dist/tools/requests.js +1 -2
  982. package/dist/tools/requests.js.map +1 -1
  983. package/dist/tools/retriever.cjs +9 -10
  984. package/dist/tools/retriever.cjs.map +1 -1
  985. package/dist/tools/retriever.js +1 -2
  986. package/dist/tools/retriever.js.map +1 -1
  987. package/dist/tools/sql.cjs +9 -10
  988. package/dist/tools/sql.cjs.map +1 -1
  989. package/dist/tools/sql.js +1 -2
  990. package/dist/tools/sql.js.map +1 -1
  991. package/dist/tools/vectorstore.cjs +3 -4
  992. package/dist/tools/vectorstore.cjs.map +1 -1
  993. package/dist/tools/vectorstore.js +1 -2
  994. package/dist/tools/vectorstore.js.map +1 -1
  995. package/dist/tools/webbrowser.cjs +10 -11
  996. package/dist/tools/webbrowser.cjs.map +1 -1
  997. package/dist/tools/webbrowser.js +1 -2
  998. package/dist/tools/webbrowser.js.map +1 -1
  999. package/dist/util/document.cjs +8 -10
  1000. package/dist/util/document.cjs.map +1 -1
  1001. package/dist/util/document.js +1 -2
  1002. package/dist/util/document.js.map +1 -1
  1003. package/dist/util/entrypoint_deprecation.cjs +1 -1
  1004. package/dist/util/entrypoint_deprecation.js +1 -2
  1005. package/dist/util/env.cjs +2 -2
  1006. package/dist/util/env.js +1 -2
  1007. package/dist/util/extname.cjs +1 -2
  1008. package/dist/util/extname.cjs.map +1 -1
  1009. package/dist/util/extname.js +1 -1
  1010. package/dist/util/hub.cjs +4 -5
  1011. package/dist/util/hub.cjs.map +1 -1
  1012. package/dist/util/hub.js +1 -2
  1013. package/dist/util/hub.js.map +1 -1
  1014. package/dist/util/is-network-error/index.cjs +1 -2
  1015. package/dist/util/is-network-error/index.cjs.map +1 -1
  1016. package/dist/util/is-network-error/index.js +1 -1
  1017. package/dist/util/is-network-error/index.js.map +1 -1
  1018. package/dist/util/load.cjs +1 -2
  1019. package/dist/util/load.cjs.map +1 -1
  1020. package/dist/util/load.js +1 -1
  1021. package/dist/util/math.cjs +14 -14
  1022. package/dist/util/math.js +2 -4
  1023. package/dist/util/ml-distance/distances.cjs +1 -2
  1024. package/dist/util/ml-distance/distances.cjs.map +1 -1
  1025. package/dist/util/ml-distance/distances.js +1 -1
  1026. package/dist/util/ml-distance/similarities.cjs +1 -2
  1027. package/dist/util/ml-distance/similarities.cjs.map +1 -1
  1028. package/dist/util/ml-distance/similarities.js +1 -1
  1029. package/dist/util/ml-distance-euclidean/euclidean.cjs +1 -2
  1030. package/dist/util/ml-distance-euclidean/euclidean.cjs.map +1 -1
  1031. package/dist/util/ml-distance-euclidean/euclidean.js +1 -1
  1032. package/dist/util/openapi.cjs +2 -3
  1033. package/dist/util/openapi.cjs.map +1 -1
  1034. package/dist/util/openapi.js +1 -2
  1035. package/dist/util/openapi.js.map +1 -1
  1036. package/dist/util/p-retry/index.cjs +2 -3
  1037. package/dist/util/p-retry/index.cjs.map +1 -1
  1038. package/dist/util/p-retry/index.js +1 -2
  1039. package/dist/util/p-retry/index.js.map +1 -1
  1040. package/dist/util/parse.cjs +3 -4
  1041. package/dist/util/parse.cjs.map +1 -1
  1042. package/dist/util/parse.js +1 -2
  1043. package/dist/util/parse.js.map +1 -1
  1044. package/dist/util/set.cjs +1 -2
  1045. package/dist/util/set.cjs.map +1 -1
  1046. package/dist/util/set.js +1 -1
  1047. package/dist/util/sql_utils.cjs +2 -3
  1048. package/dist/util/sql_utils.cjs.map +1 -1
  1049. package/dist/util/sql_utils.js +1 -2
  1050. package/dist/util/sql_utils.js.map +1 -1
  1051. package/dist/util/time.cjs +8 -10
  1052. package/dist/util/time.cjs.map +1 -1
  1053. package/dist/util/time.js +1 -2
  1054. package/dist/util/time.js.map +1 -1
  1055. package/dist/vectorstores/memory.cjs +9 -10
  1056. package/dist/vectorstores/memory.cjs.map +1 -1
  1057. package/dist/vectorstores/memory.js +1 -2
  1058. package/dist/vectorstores/memory.js.map +1 -1
  1059. package/package.json +21 -17
  1060. package/agents/format_scratchpad/log.cjs +0 -1
  1061. package/agents/format_scratchpad/log.d.cts +0 -1
  1062. package/agents/format_scratchpad/log.d.ts +0 -1
  1063. package/agents/format_scratchpad/log.js +0 -1
  1064. package/agents/format_scratchpad/log_to_message.cjs +0 -1
  1065. package/agents/format_scratchpad/log_to_message.d.cts +0 -1
  1066. package/agents/format_scratchpad/log_to_message.d.ts +0 -1
  1067. package/agents/format_scratchpad/log_to_message.js +0 -1
  1068. package/agents/format_scratchpad/openai_functions.cjs +0 -1
  1069. package/agents/format_scratchpad/openai_functions.d.cts +0 -1
  1070. package/agents/format_scratchpad/openai_functions.d.ts +0 -1
  1071. package/agents/format_scratchpad/openai_functions.js +0 -1
  1072. package/agents/format_scratchpad/openai_tools.cjs +0 -1
  1073. package/agents/format_scratchpad/openai_tools.d.cts +0 -1
  1074. package/agents/format_scratchpad/openai_tools.d.ts +0 -1
  1075. package/agents/format_scratchpad/openai_tools.js +0 -1
  1076. package/agents/format_scratchpad/xml.cjs +0 -1
  1077. package/agents/format_scratchpad/xml.d.cts +0 -1
  1078. package/agents/format_scratchpad/xml.d.ts +0 -1
  1079. package/agents/format_scratchpad/xml.js +0 -1
  1080. package/agents/load.cjs +0 -1
  1081. package/agents/load.d.cts +0 -1
  1082. package/agents/load.d.ts +0 -1
  1083. package/agents/load.js +0 -1
  1084. package/agents/openai/output_parser.cjs +0 -1
  1085. package/agents/openai/output_parser.d.cts +0 -1
  1086. package/agents/openai/output_parser.d.ts +0 -1
  1087. package/agents/openai/output_parser.js +0 -1
  1088. package/agents/react/output_parser.cjs +0 -1
  1089. package/agents/react/output_parser.d.cts +0 -1
  1090. package/agents/react/output_parser.d.ts +0 -1
  1091. package/agents/react/output_parser.js +0 -1
  1092. package/agents/toolkits/sql.cjs +0 -1
  1093. package/agents/toolkits/sql.d.cts +0 -1
  1094. package/agents/toolkits/sql.d.ts +0 -1
  1095. package/agents/toolkits/sql.js +0 -1
  1096. package/agents/toolkits.cjs +0 -1
  1097. package/agents/toolkits.d.cts +0 -1
  1098. package/agents/toolkits.d.ts +0 -1
  1099. package/agents/toolkits.js +0 -1
  1100. package/agents/xml/output_parser.cjs +0 -1
  1101. package/agents/xml/output_parser.d.cts +0 -1
  1102. package/agents/xml/output_parser.d.ts +0 -1
  1103. package/agents/xml/output_parser.js +0 -1
  1104. package/agents.cjs +0 -1
  1105. package/agents.d.cts +0 -1
  1106. package/agents.d.ts +0 -1
  1107. package/agents.js +0 -1
  1108. package/cache/file_system.cjs +0 -1
  1109. package/cache/file_system.d.cts +0 -1
  1110. package/cache/file_system.d.ts +0 -1
  1111. package/cache/file_system.js +0 -1
  1112. package/callbacks.cjs +0 -1
  1113. package/callbacks.d.cts +0 -1
  1114. package/callbacks.d.ts +0 -1
  1115. package/callbacks.js +0 -1
  1116. package/chains/combine_documents/reduce.cjs +0 -1
  1117. package/chains/combine_documents/reduce.d.cts +0 -1
  1118. package/chains/combine_documents/reduce.d.ts +0 -1
  1119. package/chains/combine_documents/reduce.js +0 -1
  1120. package/chains/combine_documents.cjs +0 -1
  1121. package/chains/combine_documents.d.cts +0 -1
  1122. package/chains/combine_documents.d.ts +0 -1
  1123. package/chains/combine_documents.js +0 -1
  1124. package/chains/graph_qa/cypher.cjs +0 -1
  1125. package/chains/graph_qa/cypher.d.cts +0 -1
  1126. package/chains/graph_qa/cypher.d.ts +0 -1
  1127. package/chains/graph_qa/cypher.js +0 -1
  1128. package/chains/history_aware_retriever.cjs +0 -1
  1129. package/chains/history_aware_retriever.d.cts +0 -1
  1130. package/chains/history_aware_retriever.d.ts +0 -1
  1131. package/chains/history_aware_retriever.js +0 -1
  1132. package/chains/load.cjs +0 -1
  1133. package/chains/load.d.cts +0 -1
  1134. package/chains/load.d.ts +0 -1
  1135. package/chains/load.js +0 -1
  1136. package/chains/openai_functions.cjs +0 -1
  1137. package/chains/openai_functions.d.cts +0 -1
  1138. package/chains/openai_functions.d.ts +0 -1
  1139. package/chains/openai_functions.js +0 -1
  1140. package/chains/query_constructor/ir.cjs +0 -1
  1141. package/chains/query_constructor/ir.d.cts +0 -1
  1142. package/chains/query_constructor/ir.d.ts +0 -1
  1143. package/chains/query_constructor/ir.js +0 -1
  1144. package/chains/query_constructor.cjs +0 -1
  1145. package/chains/query_constructor.d.cts +0 -1
  1146. package/chains/query_constructor.d.ts +0 -1
  1147. package/chains/query_constructor.js +0 -1
  1148. package/chains/retrieval.cjs +0 -1
  1149. package/chains/retrieval.d.cts +0 -1
  1150. package/chains/retrieval.d.ts +0 -1
  1151. package/chains/retrieval.js +0 -1
  1152. package/chains/sql_db.cjs +0 -1
  1153. package/chains/sql_db.d.cts +0 -1
  1154. package/chains/sql_db.d.ts +0 -1
  1155. package/chains/sql_db.js +0 -1
  1156. package/chains.cjs +0 -1
  1157. package/chains.d.cts +0 -1
  1158. package/chains.d.ts +0 -1
  1159. package/chains.js +0 -1
  1160. package/chat_models/universal.cjs +0 -1
  1161. package/chat_models/universal.d.cts +0 -1
  1162. package/chat_models/universal.d.ts +0 -1
  1163. package/chat_models/universal.js +0 -1
  1164. package/document.cjs +0 -1
  1165. package/document.d.cts +0 -1
  1166. package/document.d.ts +0 -1
  1167. package/document.js +0 -1
  1168. package/document_loaders/base.cjs +0 -1
  1169. package/document_loaders/base.d.cts +0 -1
  1170. package/document_loaders/base.d.ts +0 -1
  1171. package/document_loaders/base.js +0 -1
  1172. package/document_loaders/fs/buffer.cjs +0 -1
  1173. package/document_loaders/fs/buffer.d.cts +0 -1
  1174. package/document_loaders/fs/buffer.d.ts +0 -1
  1175. package/document_loaders/fs/buffer.js +0 -1
  1176. package/document_loaders/fs/directory.cjs +0 -1
  1177. package/document_loaders/fs/directory.d.cts +0 -1
  1178. package/document_loaders/fs/directory.d.ts +0 -1
  1179. package/document_loaders/fs/directory.js +0 -1
  1180. package/document_loaders/fs/json.cjs +0 -1
  1181. package/document_loaders/fs/json.d.cts +0 -1
  1182. package/document_loaders/fs/json.d.ts +0 -1
  1183. package/document_loaders/fs/json.js +0 -1
  1184. package/document_loaders/fs/multi_file.cjs +0 -1
  1185. package/document_loaders/fs/multi_file.d.cts +0 -1
  1186. package/document_loaders/fs/multi_file.d.ts +0 -1
  1187. package/document_loaders/fs/multi_file.js +0 -1
  1188. package/document_loaders/fs/text.cjs +0 -1
  1189. package/document_loaders/fs/text.d.cts +0 -1
  1190. package/document_loaders/fs/text.d.ts +0 -1
  1191. package/document_loaders/fs/text.js +0 -1
  1192. package/document_transformers/openai_functions.cjs +0 -1
  1193. package/document_transformers/openai_functions.d.cts +0 -1
  1194. package/document_transformers/openai_functions.d.ts +0 -1
  1195. package/document_transformers/openai_functions.js +0 -1
  1196. package/embeddings/cache_backed.cjs +0 -1
  1197. package/embeddings/cache_backed.d.cts +0 -1
  1198. package/embeddings/cache_backed.d.ts +0 -1
  1199. package/embeddings/cache_backed.js +0 -1
  1200. package/embeddings/fake.cjs +0 -1
  1201. package/embeddings/fake.d.cts +0 -1
  1202. package/embeddings/fake.d.ts +0 -1
  1203. package/embeddings/fake.js +0 -1
  1204. package/evaluation.cjs +0 -1
  1205. package/evaluation.d.cts +0 -1
  1206. package/evaluation.d.ts +0 -1
  1207. package/evaluation.js +0 -1
  1208. package/experimental/autogpt.cjs +0 -1
  1209. package/experimental/autogpt.d.cts +0 -1
  1210. package/experimental/autogpt.d.ts +0 -1
  1211. package/experimental/autogpt.js +0 -1
  1212. package/experimental/babyagi.cjs +0 -1
  1213. package/experimental/babyagi.d.cts +0 -1
  1214. package/experimental/babyagi.d.ts +0 -1
  1215. package/experimental/babyagi.js +0 -1
  1216. package/experimental/chains/violation_of_expectations.cjs +0 -1
  1217. package/experimental/chains/violation_of_expectations.d.cts +0 -1
  1218. package/experimental/chains/violation_of_expectations.d.ts +0 -1
  1219. package/experimental/chains/violation_of_expectations.js +0 -1
  1220. package/experimental/generative_agents.cjs +0 -1
  1221. package/experimental/generative_agents.d.cts +0 -1
  1222. package/experimental/generative_agents.d.ts +0 -1
  1223. package/experimental/generative_agents.js +0 -1
  1224. package/experimental/masking.cjs +0 -1
  1225. package/experimental/masking.d.cts +0 -1
  1226. package/experimental/masking.d.ts +0 -1
  1227. package/experimental/masking.js +0 -1
  1228. package/experimental/openai_assistant.cjs +0 -1
  1229. package/experimental/openai_assistant.d.cts +0 -1
  1230. package/experimental/openai_assistant.d.ts +0 -1
  1231. package/experimental/openai_assistant.js +0 -1
  1232. package/experimental/openai_files.cjs +0 -1
  1233. package/experimental/openai_files.d.cts +0 -1
  1234. package/experimental/openai_files.d.ts +0 -1
  1235. package/experimental/openai_files.js +0 -1
  1236. package/experimental/plan_and_execute.cjs +0 -1
  1237. package/experimental/plan_and_execute.d.cts +0 -1
  1238. package/experimental/plan_and_execute.d.ts +0 -1
  1239. package/experimental/plan_and_execute.js +0 -1
  1240. package/experimental/prompts/custom_format.cjs +0 -1
  1241. package/experimental/prompts/custom_format.d.cts +0 -1
  1242. package/experimental/prompts/custom_format.d.ts +0 -1
  1243. package/experimental/prompts/custom_format.js +0 -1
  1244. package/experimental/prompts/handlebars.cjs +0 -1
  1245. package/experimental/prompts/handlebars.d.cts +0 -1
  1246. package/experimental/prompts/handlebars.d.ts +0 -1
  1247. package/experimental/prompts/handlebars.js +0 -1
  1248. package/hub/node.cjs +0 -1
  1249. package/hub/node.d.cts +0 -1
  1250. package/hub/node.d.ts +0 -1
  1251. package/hub/node.js +0 -1
  1252. package/hub.cjs +0 -1
  1253. package/hub.d.cts +0 -1
  1254. package/hub.d.ts +0 -1
  1255. package/hub.js +0 -1
  1256. package/indexes.cjs +0 -1
  1257. package/indexes.d.cts +0 -1
  1258. package/indexes.d.ts +0 -1
  1259. package/indexes.js +0 -1
  1260. package/load/serializable.cjs +0 -1
  1261. package/load/serializable.d.cts +0 -1
  1262. package/load/serializable.d.ts +0 -1
  1263. package/load/serializable.js +0 -1
  1264. package/load.cjs +0 -1
  1265. package/load.d.cts +0 -1
  1266. package/load.d.ts +0 -1
  1267. package/load.js +0 -1
  1268. package/memory/chat_memory.cjs +0 -1
  1269. package/memory/chat_memory.d.cts +0 -1
  1270. package/memory/chat_memory.d.ts +0 -1
  1271. package/memory/chat_memory.js +0 -1
  1272. package/memory.cjs +0 -1
  1273. package/memory.d.cts +0 -1
  1274. package/memory.d.ts +0 -1
  1275. package/memory.js +0 -1
  1276. package/output_parsers/expression.cjs +0 -1
  1277. package/output_parsers/expression.d.cts +0 -1
  1278. package/output_parsers/expression.d.ts +0 -1
  1279. package/output_parsers/expression.js +0 -1
  1280. package/output_parsers.cjs +0 -1
  1281. package/output_parsers.d.cts +0 -1
  1282. package/output_parsers.d.ts +0 -1
  1283. package/output_parsers.js +0 -1
  1284. package/retrievers/contextual_compression.cjs +0 -1
  1285. package/retrievers/contextual_compression.d.cts +0 -1
  1286. package/retrievers/contextual_compression.d.ts +0 -1
  1287. package/retrievers/contextual_compression.js +0 -1
  1288. package/retrievers/document_compressors/chain_extract.cjs +0 -1
  1289. package/retrievers/document_compressors/chain_extract.d.cts +0 -1
  1290. package/retrievers/document_compressors/chain_extract.d.ts +0 -1
  1291. package/retrievers/document_compressors/chain_extract.js +0 -1
  1292. package/retrievers/document_compressors/embeddings_filter.cjs +0 -1
  1293. package/retrievers/document_compressors/embeddings_filter.d.cts +0 -1
  1294. package/retrievers/document_compressors/embeddings_filter.d.ts +0 -1
  1295. package/retrievers/document_compressors/embeddings_filter.js +0 -1
  1296. package/retrievers/document_compressors.cjs +0 -1
  1297. package/retrievers/document_compressors.d.cts +0 -1
  1298. package/retrievers/document_compressors.d.ts +0 -1
  1299. package/retrievers/document_compressors.js +0 -1
  1300. package/retrievers/ensemble.cjs +0 -1
  1301. package/retrievers/ensemble.d.cts +0 -1
  1302. package/retrievers/ensemble.d.ts +0 -1
  1303. package/retrievers/ensemble.js +0 -1
  1304. package/retrievers/hyde.cjs +0 -1
  1305. package/retrievers/hyde.d.cts +0 -1
  1306. package/retrievers/hyde.d.ts +0 -1
  1307. package/retrievers/hyde.js +0 -1
  1308. package/retrievers/matryoshka_retriever.cjs +0 -1
  1309. package/retrievers/matryoshka_retriever.d.cts +0 -1
  1310. package/retrievers/matryoshka_retriever.d.ts +0 -1
  1311. package/retrievers/matryoshka_retriever.js +0 -1
  1312. package/retrievers/multi_query.cjs +0 -1
  1313. package/retrievers/multi_query.d.cts +0 -1
  1314. package/retrievers/multi_query.d.ts +0 -1
  1315. package/retrievers/multi_query.js +0 -1
  1316. package/retrievers/multi_vector.cjs +0 -1
  1317. package/retrievers/multi_vector.d.cts +0 -1
  1318. package/retrievers/multi_vector.d.ts +0 -1
  1319. package/retrievers/multi_vector.js +0 -1
  1320. package/retrievers/parent_document.cjs +0 -1
  1321. package/retrievers/parent_document.d.cts +0 -1
  1322. package/retrievers/parent_document.d.ts +0 -1
  1323. package/retrievers/parent_document.js +0 -1
  1324. package/retrievers/score_threshold.cjs +0 -1
  1325. package/retrievers/score_threshold.d.cts +0 -1
  1326. package/retrievers/score_threshold.d.ts +0 -1
  1327. package/retrievers/score_threshold.js +0 -1
  1328. package/retrievers/self_query/functional.cjs +0 -1
  1329. package/retrievers/self_query/functional.d.cts +0 -1
  1330. package/retrievers/self_query/functional.d.ts +0 -1
  1331. package/retrievers/self_query/functional.js +0 -1
  1332. package/retrievers/self_query.cjs +0 -1
  1333. package/retrievers/self_query.d.cts +0 -1
  1334. package/retrievers/self_query.d.ts +0 -1
  1335. package/retrievers/self_query.js +0 -1
  1336. package/retrievers/time_weighted.cjs +0 -1
  1337. package/retrievers/time_weighted.d.cts +0 -1
  1338. package/retrievers/time_weighted.d.ts +0 -1
  1339. package/retrievers/time_weighted.js +0 -1
  1340. package/schema/prompt_template.cjs +0 -1
  1341. package/schema/prompt_template.d.cts +0 -1
  1342. package/schema/prompt_template.d.ts +0 -1
  1343. package/schema/prompt_template.js +0 -1
  1344. package/schema/query_constructor.cjs +0 -1
  1345. package/schema/query_constructor.d.cts +0 -1
  1346. package/schema/query_constructor.d.ts +0 -1
  1347. package/schema/query_constructor.js +0 -1
  1348. package/smith.cjs +0 -1
  1349. package/smith.d.cts +0 -1
  1350. package/smith.d.ts +0 -1
  1351. package/smith.js +0 -1
  1352. package/sql_db.cjs +0 -1
  1353. package/sql_db.d.cts +0 -1
  1354. package/sql_db.d.ts +0 -1
  1355. package/sql_db.js +0 -1
  1356. package/storage/encoder_backed.cjs +0 -1
  1357. package/storage/encoder_backed.d.cts +0 -1
  1358. package/storage/encoder_backed.d.ts +0 -1
  1359. package/storage/encoder_backed.js +0 -1
  1360. package/storage/file_system.cjs +0 -1
  1361. package/storage/file_system.d.cts +0 -1
  1362. package/storage/file_system.d.ts +0 -1
  1363. package/storage/file_system.js +0 -1
  1364. package/storage/in_memory.cjs +0 -1
  1365. package/storage/in_memory.d.cts +0 -1
  1366. package/storage/in_memory.d.ts +0 -1
  1367. package/storage/in_memory.js +0 -1
  1368. package/stores/doc/base.cjs +0 -1
  1369. package/stores/doc/base.d.cts +0 -1
  1370. package/stores/doc/base.d.ts +0 -1
  1371. package/stores/doc/base.js +0 -1
  1372. package/stores/doc/in_memory.cjs +0 -1
  1373. package/stores/doc/in_memory.d.cts +0 -1
  1374. package/stores/doc/in_memory.d.ts +0 -1
  1375. package/stores/doc/in_memory.js +0 -1
  1376. package/stores/file/in_memory.cjs +0 -1
  1377. package/stores/file/in_memory.d.cts +0 -1
  1378. package/stores/file/in_memory.d.ts +0 -1
  1379. package/stores/file/in_memory.js +0 -1
  1380. package/stores/file/node.cjs +0 -1
  1381. package/stores/file/node.d.cts +0 -1
  1382. package/stores/file/node.d.ts +0 -1
  1383. package/stores/file/node.js +0 -1
  1384. package/stores/message/in_memory.cjs +0 -1
  1385. package/stores/message/in_memory.d.cts +0 -1
  1386. package/stores/message/in_memory.d.ts +0 -1
  1387. package/stores/message/in_memory.js +0 -1
  1388. package/text_splitter.cjs +0 -1
  1389. package/text_splitter.d.cts +0 -1
  1390. package/text_splitter.d.ts +0 -1
  1391. package/text_splitter.js +0 -1
  1392. package/tools/chain.cjs +0 -1
  1393. package/tools/chain.d.cts +0 -1
  1394. package/tools/chain.d.ts +0 -1
  1395. package/tools/chain.js +0 -1
  1396. package/tools/render.cjs +0 -1
  1397. package/tools/render.d.cts +0 -1
  1398. package/tools/render.d.ts +0 -1
  1399. package/tools/render.js +0 -1
  1400. package/tools/retriever.cjs +0 -1
  1401. package/tools/retriever.d.cts +0 -1
  1402. package/tools/retriever.d.ts +0 -1
  1403. package/tools/retriever.js +0 -1
  1404. package/tools/sql.cjs +0 -1
  1405. package/tools/sql.d.cts +0 -1
  1406. package/tools/sql.d.ts +0 -1
  1407. package/tools/sql.js +0 -1
  1408. package/tools/webbrowser.cjs +0 -1
  1409. package/tools/webbrowser.d.cts +0 -1
  1410. package/tools/webbrowser.d.ts +0 -1
  1411. package/tools/webbrowser.js +0 -1
  1412. package/tools.cjs +0 -1
  1413. package/tools.d.cts +0 -1
  1414. package/tools.d.ts +0 -1
  1415. package/tools.js +0 -1
  1416. package/util/document.cjs +0 -1
  1417. package/util/document.d.cts +0 -1
  1418. package/util/document.d.ts +0 -1
  1419. package/util/document.js +0 -1
  1420. package/util/math.cjs +0 -1
  1421. package/util/math.d.cts +0 -1
  1422. package/util/math.d.ts +0 -1
  1423. package/util/math.js +0 -1
  1424. package/util/time.cjs +0 -1
  1425. package/util/time.d.cts +0 -1
  1426. package/util/time.d.ts +0 -1
  1427. package/util/time.js +0 -1
  1428. package/vectorstores/memory.cjs +0 -1
  1429. package/vectorstores/memory.d.cts +0 -1
  1430. package/vectorstores/memory.d.ts +0 -1
  1431. package/vectorstores/memory.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"violation_of_expectations_chain.cjs","names":["BaseChain","JsonOutputFunctionsParser","StringOutputParser","HumanMessage","PREDICT_NEXT_USER_MESSAGE_FUNCTION","PREDICT_NEXT_USER_MESSAGE_PROMPT","PREDICTION_VIOLATIONS_FUNCTION","PREDICTION_VIOLATIONS_PROMPT","GENERATE_REVISED_PREDICTION_PROMPT","GENERATE_FACTS_PROMPT"],"sources":["../../../../src/experimental/chains/violation_of_expectations/violation_of_expectations_chain.ts"],"sourcesContent":["import type { BaseRetrieverInterface } from \"@langchain/core/retrievers\";\nimport { ChatOpenAI } from \"@langchain/openai\";\nimport {\n BaseMessage,\n HumanMessage,\n isBaseMessage,\n} from \"@langchain/core/messages\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { StringOutputParser } from \"@langchain/core/output_parsers\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { JsonOutputFunctionsParser } from \"../../../output_parsers/openai_functions.js\";\nimport { BaseChain, ChainInputs } from \"../../../chains/base.js\";\nimport {\n GetPredictionViolationsResponse,\n MessageChunkResult,\n PREDICTION_VIOLATIONS_FUNCTION,\n PREDICT_NEXT_USER_MESSAGE_FUNCTION,\n PredictNextUserMessageResponse,\n} from \"./types.js\";\nimport {\n GENERATE_FACTS_PROMPT,\n GENERATE_REVISED_PREDICTION_PROMPT,\n PREDICTION_VIOLATIONS_PROMPT,\n PREDICT_NEXT_USER_MESSAGE_PROMPT,\n} from \"./violation_of_expectations_prompt.js\";\n\n/**\n * Interface for the input parameters of the ViolationOfExpectationsChain class.\n */\nexport interface ViolationOfExpectationsChainInput extends ChainInputs {\n /**\n * The retriever to use for retrieving stored\n * thoughts and insights.\n */\n retriever: BaseRetrieverInterface;\n /**\n * The LLM to use\n */\n llm: ChatOpenAI;\n}\n\n/**\n * Chain that generates key insights/facts of a user based on a\n * a chat conversation with an AI.\n */\nexport class ViolationOfExpectationsChain\n extends BaseChain\n implements ViolationOfExpectationsChainInput\n{\n static lc_name() {\n return \"ViolationOfExpectationsChain\";\n }\n\n _chainType(): string {\n return \"violation_of_expectation_chain\";\n }\n\n chatHistoryKey = \"chat_history\";\n\n thoughtsKey = \"thoughts\";\n\n get inputKeys() {\n return [this.chatHistoryKey];\n }\n\n get outputKeys() {\n return [this.thoughtsKey];\n }\n\n retriever: BaseRetrieverInterface;\n\n llm: ChatOpenAI;\n\n jsonOutputParser: JsonOutputFunctionsParser;\n\n stringOutputParser: StringOutputParser;\n\n constructor(fields: ViolationOfExpectationsChainInput) {\n super(fields);\n this.retriever = fields.retriever;\n this.llm = fields.llm;\n this.jsonOutputParser = new JsonOutputFunctionsParser();\n this.stringOutputParser = new StringOutputParser();\n }\n\n getChatHistoryString(chatHistory: BaseMessage[]): string {\n return chatHistory\n .map((chatMessage) => {\n if (chatMessage._getType() === \"human\") {\n return `Human: ${chatMessage.content}`;\n } else if (chatMessage._getType() === \"ai\") {\n return `AI: ${chatMessage.content}`;\n } else {\n return `${chatMessage.content}`;\n }\n })\n .join(\"\\n\");\n }\n\n removeDuplicateStrings(strings: Array<string>): Array<string> {\n return [...new Set(strings)];\n }\n\n /**\n * This method breaks down the chat history into chunks of messages.\n * Each chunk consists of a sequence of messages ending with an AI message and the subsequent user response, if any.\n *\n * @param {BaseMessage[]} chatHistory - The chat history to be chunked.\n *\n * @returns {MessageChunkResult[]} An array of message chunks. Each chunk includes a sequence of messages and the subsequent user response.\n *\n * @description\n * The method iterates over the chat history and pushes each message into a temporary array.\n * When it encounters an AI message, it checks for a subsequent user message.\n * If a user message is found, it is considered as the user response to the AI message.\n * If no user message is found after the AI message, the user response is undefined.\n * The method then pushes the chunk (sequence of messages and user response) into the result array.\n * This process continues until all messages in the chat history have been processed.\n */\n chunkMessagesByAIResponse(chatHistory: BaseMessage[]): MessageChunkResult[] {\n const newArray: MessageChunkResult[] = [];\n const tempArray: BaseMessage[] = [];\n\n chatHistory.forEach((item, index) => {\n tempArray.push(item);\n if (item._getType() === \"ai\") {\n let userResponse: BaseMessage | undefined = chatHistory[index + 1];\n if (!userResponse || userResponse._getType() !== \"human\") {\n userResponse = undefined;\n }\n\n newArray.push({\n chunkedMessages: tempArray,\n userResponse: userResponse\n ? new HumanMessage(userResponse)\n : undefined,\n });\n }\n });\n\n return newArray;\n }\n\n /**\n * This method processes a chat history to generate insights about the user.\n *\n * @param {ChainValues} values - The input values for the chain. It should contain a key for chat history.\n * @param {CallbackManagerForChainRun} [runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<ChainValues>} A promise that resolves to a list of insights about the user.\n *\n * @throws {Error} If the chat history key is not found in the input values or if the chat history is not an array of BaseMessages.\n *\n * @description\n * The method performs the following steps:\n * 1. Checks if the chat history key is present in the input values and if the chat history is an array of BaseMessages.\n * 2. Breaks the chat history into chunks of messages.\n * 3. For each chunk, it generates an initial prediction for the user's next message.\n * 4. For each prediction, it generates insights and prediction violations, and regenerates the prediction based on the violations.\n * 5. For each set of messages, it generates a fact/insight about the user.\n * The method returns a list of these insights.\n */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n if (!(this.chatHistoryKey in values)) {\n throw new Error(`Chat history key ${this.chatHistoryKey} not found`);\n }\n\n const chatHistory: unknown[] = values[this.chatHistoryKey];\n\n const isEveryMessageBaseMessage = chatHistory.every((message) =>\n isBaseMessage(message)\n );\n if (!isEveryMessageBaseMessage) {\n throw new Error(\"Chat history must be an array of BaseMessages\");\n }\n\n const messageChunks = this.chunkMessagesByAIResponse(\n chatHistory as BaseMessage[]\n );\n\n // Generate the initial prediction for every user message.\n const userPredictions = await Promise.all(\n messageChunks.map(async (chatHistoryChunk) => ({\n userPredictions: await this.predictNextUserMessage(\n chatHistoryChunk.chunkedMessages\n ),\n userResponse: chatHistoryChunk.userResponse,\n runManager,\n }))\n );\n\n // Generate insights, and prediction violations for every user message.\n // This call also regenerates the prediction based on the violations.\n const predictionViolations = await Promise.all(\n userPredictions.map((prediction) =>\n this.getPredictionViolations({\n userPredictions: prediction.userPredictions,\n userResponse: prediction.userResponse,\n runManager,\n })\n )\n );\n\n // Generate a fact/insight about the user for every set of messages.\n const insights = await Promise.all(\n predictionViolations.map((violation) =>\n this.generateFacts({\n userResponse: violation.userResponse,\n predictions: {\n revisedPrediction: violation.revisedPrediction,\n explainedPredictionErrors: violation.explainedPredictionErrors,\n },\n })\n )\n );\n\n return {\n insights,\n };\n }\n\n /**\n * This method predicts the next user message based on the chat history.\n *\n * @param {BaseMessage[]} chatHistory - The chat history based on which the next user message is predicted.\n * @param {CallbackManagerForChainRun} [runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<PredictNextUserMessageResponse>} A promise that resolves to the predicted next user message, the user state, and any insights.\n *\n * @throws {Error} If the response from the language model does not contain the expected keys: 'userState', 'predictedUserMessage', and 'insights'.\n */\n private async predictNextUserMessage(\n chatHistory: BaseMessage[],\n runManager?: CallbackManagerForChainRun\n ): Promise<PredictNextUserMessageResponse> {\n const messageString = this.getChatHistoryString(chatHistory);\n\n const llmWithFunctions = this.llm\n .bindTools([PREDICT_NEXT_USER_MESSAGE_FUNCTION])\n .withConfig({\n function_call: { name: PREDICT_NEXT_USER_MESSAGE_FUNCTION.name },\n });\n\n const chain = PREDICT_NEXT_USER_MESSAGE_PROMPT.pipe(llmWithFunctions).pipe(\n this.jsonOutputParser\n );\n\n const res = await chain.invoke(\n {\n chat_history: messageString,\n },\n runManager?.getChild(\"prediction\")\n );\n\n if (\n !(\n \"userState\" in res &&\n \"predictedUserMessage\" in res &&\n \"insights\" in res\n )\n ) {\n throw new Error(`Invalid response from LLM: ${JSON.stringify(res)}`);\n }\n\n const predictionResponse = res as PredictNextUserMessageResponse;\n\n // Query the retriever for relevant insights. Use the generates insights as a query.\n const retrievedDocs = await this.retrieveRelevantInsights(\n predictionResponse.insights\n );\n const relevantDocs = this.removeDuplicateStrings([\n ...predictionResponse.insights,\n ...retrievedDocs,\n ]);\n\n return {\n ...predictionResponse,\n insights: relevantDocs,\n };\n }\n\n /**\n * Retrieves relevant insights based on the provided insights.\n *\n * @param {Array<string>} insights - An array of insights to be used for retrieving relevant documents.\n *\n * @returns {Promise<Array<string>>} A promise that resolves to an array of relevant insights content.\n */\n private async retrieveRelevantInsights(\n insights: Array<string>\n ): Promise<Array<string>> {\n // Only extract the first relevant doc from the retriever. We don't need more than one.\n const relevantInsightsDocuments = await Promise.all(\n insights.map(async (insight) => {\n const relevantInsight = await this.retriever.invoke(insight);\n return relevantInsight[0];\n })\n );\n\n const relevantInsightsContent = relevantInsightsDocuments.map(\n (document) => document.pageContent\n );\n\n return relevantInsightsContent;\n }\n\n /**\n * This method generates prediction violations based on the predicted and actual user responses.\n * It also generates a revised prediction based on the identified violations.\n *\n * @param {Object} params - The parameters for the method.\n * @param {PredictNextUserMessageResponse} params.userPredictions - The predicted user message, user state, and insights.\n * @param {BaseMessage} [params.userResponse] - The actual user response.\n * @param {CallbackManagerForChainRun} [params.runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<{ userResponse: BaseMessage | undefined; revisedPrediction: string; explainedPredictionErrors: Array<string>; }>} A promise that resolves to an object containing the actual user response, the revised prediction, and the explained prediction errors.\n *\n * @throws {Error} If the response from the language model does not contain the expected keys: 'violationExplanation', 'explainedPredictionErrors', and 'accuratePrediction'.\n */\n private async getPredictionViolations({\n userPredictions,\n userResponse,\n runManager,\n }: {\n userPredictions: PredictNextUserMessageResponse;\n userResponse?: BaseMessage;\n runManager?: CallbackManagerForChainRun;\n }): Promise<GetPredictionViolationsResponse> {\n const llmWithFunctions = this.llm\n .bindTools([PREDICTION_VIOLATIONS_FUNCTION])\n .withConfig({\n function_call: { name: PREDICTION_VIOLATIONS_FUNCTION.name },\n });\n\n const chain = PREDICTION_VIOLATIONS_PROMPT.pipe(llmWithFunctions).pipe(\n this.jsonOutputParser\n );\n\n if (typeof userResponse?.content !== \"string\") {\n throw new Error(\"This chain does not support non-string model output.\");\n }\n const res = (await chain.invoke(\n {\n predicted_output: userPredictions.predictedUserMessage,\n actual_output: userResponse?.content ?? \"\",\n user_insights: userPredictions.insights.join(\"\\n\"),\n },\n runManager?.getChild(\"prediction_violations\")\n )) as Awaited<{\n violationExplanation: string;\n explainedPredictionErrors: Array<string>;\n accuratePrediction: boolean;\n }>;\n\n // Generate a revised prediction based on violations.\n const revisedPrediction = await this.generateRevisedPrediction({\n originalPrediction: userPredictions.predictedUserMessage,\n explainedPredictionErrors: res.explainedPredictionErrors,\n userInsights: userPredictions.insights,\n runManager,\n });\n\n return {\n userResponse,\n revisedPrediction,\n explainedPredictionErrors: res.explainedPredictionErrors,\n };\n }\n\n /**\n * This method generates a revised prediction based on the original prediction, explained prediction errors, and user insights.\n *\n * @param {Object} params - The parameters for the method.\n * @param {string} params.originalPrediction - The original prediction made by the model.\n * @param {Array<string>} params.explainedPredictionErrors - An array of explained prediction errors.\n * @param {Array<string>} params.userInsights - An array of insights about the user.\n * @param {CallbackManagerForChainRun} [params.runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<string>} A promise that resolves to a revised prediction.\n */\n private async generateRevisedPrediction({\n originalPrediction,\n explainedPredictionErrors,\n userInsights,\n runManager,\n }: {\n originalPrediction: string;\n explainedPredictionErrors: Array<string>;\n userInsights: Array<string>;\n runManager?: CallbackManagerForChainRun;\n }): Promise<string> {\n const revisedPredictionChain = GENERATE_REVISED_PREDICTION_PROMPT.pipe(\n this.llm\n ).pipe(this.stringOutputParser);\n\n const revisedPredictionRes = await revisedPredictionChain.invoke(\n {\n prediction: originalPrediction,\n explained_prediction_errors: explainedPredictionErrors.join(\"\\n\"),\n user_insights: userInsights.join(\"\\n\"),\n },\n runManager?.getChild(\"prediction_revision\")\n );\n\n return revisedPredictionRes;\n }\n\n /**\n * This method generates facts or insights about the user based on the revised prediction, explained prediction errors, and the user's response.\n *\n * @param {Object} params - The parameters for the method.\n * @param {BaseMessage} [params.userResponse] - The actual user response.\n * @param {Object} params.predictions - The revised prediction and explained prediction errors.\n * @param {string} params.predictions.revisedPrediction - The revised prediction made by the model.\n * @param {Array<string>} params.predictions.explainedPredictionErrors - An array of explained prediction errors.\n * @param {CallbackManagerForChainRun} [params.runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<string>} A promise that resolves to a string containing the generated facts or insights about the user.\n */\n private async generateFacts({\n userResponse,\n predictions,\n runManager,\n }: {\n userResponse?: BaseMessage;\n /**\n * Optional if the prediction was accurate.\n */\n predictions: {\n revisedPrediction: string;\n explainedPredictionErrors: Array<string>;\n };\n runManager?: CallbackManagerForChainRun;\n }): Promise<string> {\n const chain = GENERATE_FACTS_PROMPT.pipe(this.llm).pipe(\n this.stringOutputParser\n );\n\n if (typeof userResponse?.content !== \"string\") {\n throw new Error(\"This chain does not support non-string model output.\");\n }\n const res = await chain.invoke(\n {\n prediction_violations: predictions.explainedPredictionErrors.join(\"\\n\"),\n prediction: predictions.revisedPrediction,\n user_message: userResponse?.content ?? \"\",\n },\n runManager?.getChild(\"generate_facts\")\n );\n\n return res;\n }\n\n /**\n * Static method that creates a ViolationOfExpectationsChain instance from a\n * ChatOpenAI and retriever. It also accepts optional options\n * to customize the chain.\n *\n * @param llm The ChatOpenAI instance.\n * @param retriever The retriever used for similarity search.\n * @param options Optional options to customize the chain.\n *\n * @returns A new instance of ViolationOfExpectationsChain.\n */\n static fromLLM(\n llm: ChatOpenAI,\n retriever: BaseRetrieverInterface,\n options?: Partial<\n Omit<ViolationOfExpectationsChainInput, \"llm\" | \"retriever\">\n >\n ): ViolationOfExpectationsChain {\n return new this({\n retriever,\n llm,\n ...options,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;AA6CA,IAAa,+BAAb,cACUA,uBAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,aAAqB;AACnB,SAAO;;CAGT,iBAAiB;CAEjB,cAAc;CAEd,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,eAAe;;CAG9B,IAAI,aAAa;AACf,SAAO,CAAC,KAAK,YAAY;;CAG3B;CAEA;CAEA;CAEA;CAEA,YAAY,QAA2C;AACrD,QAAM,OAAO;AACb,OAAK,YAAY,OAAO;AACxB,OAAK,MAAM,OAAO;AAClB,OAAK,mBAAmB,IAAIC,oDAA2B;AACvD,OAAK,qBAAqB,IAAIC,mDAAoB;;CAGpD,qBAAqB,aAAoC;AACvD,SAAO,YACJ,KAAK,gBAAgB;AACpB,OAAI,YAAY,UAAU,KAAK,QAC7B,QAAO,UAAU,YAAY;YACpB,YAAY,UAAU,KAAK,KACpC,QAAO,OAAO,YAAY;OAE1B,QAAO,GAAG,YAAY;IAExB,CACD,KAAK,KAAK;;CAGf,uBAAuB,SAAuC;AAC5D,SAAO,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC;;;;;;;;;;;;;;;;;;CAmB9B,0BAA0B,aAAkD;EAC1E,MAAM,WAAiC,EAAE;EACzC,MAAM,YAA2B,EAAE;AAEnC,cAAY,SAAS,MAAM,UAAU;AACnC,aAAU,KAAK,KAAK;AACpB,OAAI,KAAK,UAAU,KAAK,MAAM;IAC5B,IAAI,eAAwC,YAAY,QAAQ;AAChE,QAAI,CAAC,gBAAgB,aAAa,UAAU,KAAK,QAC/C,gBAAe;AAGjB,aAAS,KAAK;KACZ,iBAAiB;KACjB,cAAc,eACV,IAAIC,sCAAa,aAAa,GAC9B;KACL,CAAC;;IAEJ;AAEF,SAAO;;;;;;;;;;;;;;;;;;;;;CAsBT,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,kBAAkB,QAC3B,OAAM,IAAI,MAAM,oBAAoB,KAAK,eAAe,YAAY;EAGtE,MAAM,cAAyB,OAAO,KAAK;AAK3C,MAAI,CAH8B,YAAY,OAAO,wDACrC,QAAQ,CACvB,CAEC,OAAM,IAAI,MAAM,gDAAgD;EAGlE,MAAM,gBAAgB,KAAK,0BACzB,YACD;EAGD,MAAM,kBAAkB,MAAM,QAAQ,IACpC,cAAc,IAAI,OAAO,sBAAsB;GAC7C,iBAAiB,MAAM,KAAK,uBAC1B,iBAAiB,gBAClB;GACD,cAAc,iBAAiB;GAC/B;GACD,EAAE,CACJ;EAID,MAAM,uBAAuB,MAAM,QAAQ,IACzC,gBAAgB,KAAK,eACnB,KAAK,wBAAwB;GAC3B,iBAAiB,WAAW;GAC5B,cAAc,WAAW;GACzB;GACD,CAAC,CACH,CACF;AAeD,SAAO,EACL,UAbe,MAAM,QAAQ,IAC7B,qBAAqB,KAAK,cACxB,KAAK,cAAc;GACjB,cAAc,UAAU;GACxB,aAAa;IACX,mBAAmB,UAAU;IAC7B,2BAA2B,UAAU;IACtC;GACF,CAAC,CACH,CACF,EAIA;;;;;;;;;;;;CAaH,MAAc,uBACZ,aACA,YACyC;EACzC,MAAM,gBAAgB,KAAK,qBAAqB,YAAY;EAE5D,MAAM,mBAAmB,KAAK,IAC3B,UAAU,CAACC,iDAAmC,CAAC,CAC/C,WAAW,EACV,eAAe,EAAE,MAAMA,iDAAmC,MAAM,EACjE,CAAC;EAMJ,MAAM,MAAM,MAJEC,0EAAiC,KAAK,iBAAiB,CAAC,KACpE,KAAK,iBACN,CAEuB,OACtB,EACE,cAAc,eACf,EACD,YAAY,SAAS,aAAa,CACnC;AAED,MACE,EACE,eAAe,OACf,0BAA0B,OAC1B,cAAc,KAGhB,OAAM,IAAI,MAAM,8BAA8B,KAAK,UAAU,IAAI,GAAG;EAGtE,MAAM,qBAAqB;EAG3B,MAAM,gBAAgB,MAAM,KAAK,yBAC/B,mBAAmB,SACpB;EACD,MAAM,eAAe,KAAK,uBAAuB,CAC/C,GAAG,mBAAmB,UACtB,GAAG,cACJ,CAAC;AAEF,SAAO;GACL,GAAG;GACH,UAAU;GACX;;;;;;;;;CAUH,MAAc,yBACZ,UACwB;AAaxB,UAXkC,MAAM,QAAQ,IAC9C,SAAS,IAAI,OAAO,YAAY;AAE9B,WADwB,MAAM,KAAK,UAAU,OAAO,QAAQ,EACrC;IACvB,CACH,EAEyD,KACvD,aAAa,SAAS,YACxB;;;;;;;;;;;;;;;CAkBH,MAAc,wBAAwB,EACpC,iBACA,cACA,cAK2C;EAC3C,MAAM,mBAAmB,KAAK,IAC3B,UAAU,CAACC,6CAA+B,CAAC,CAC3C,WAAW,EACV,eAAe,EAAE,MAAMA,6CAA+B,MAAM,EAC7D,CAAC;EAEJ,MAAM,QAAQC,sEAA6B,KAAK,iBAAiB,CAAC,KAChE,KAAK,iBACN;AAED,MAAI,OAAO,cAAc,YAAY,SACnC,OAAM,IAAI,MAAM,uDAAuD;EAEzE,MAAM,MAAO,MAAM,MAAM,OACvB;GACE,kBAAkB,gBAAgB;GAClC,eAAe,cAAc,WAAW;GACxC,eAAe,gBAAgB,SAAS,KAAK,KAAK;GACnD,EACD,YAAY,SAAS,wBAAwB,CAC9C;AAcD,SAAO;GACL;GACA,mBATwB,MAAM,KAAK,0BAA0B;IAC7D,oBAAoB,gBAAgB;IACpC,2BAA2B,IAAI;IAC/B,cAAc,gBAAgB;IAC9B;IACD,CAAC;GAKA,2BAA2B,IAAI;GAChC;;;;;;;;;;;;;CAcH,MAAc,0BAA0B,EACtC,oBACA,2BACA,cACA,cAMkB;AAclB,SAT6B,MAJEC,4EAAmC,KAChE,KAAK,IACN,CAAC,KAAK,KAAK,mBAAmB,CAE2B,OACxD;GACE,YAAY;GACZ,6BAA6B,0BAA0B,KAAK,KAAK;GACjE,eAAe,aAAa,KAAK,KAAK;GACvC,EACD,YAAY,SAAS,sBAAsB,CAC5C;;;;;;;;;;;;;;CAiBH,MAAc,cAAc,EAC1B,cACA,aACA,cAWkB;EAClB,MAAM,QAAQC,+DAAsB,KAAK,KAAK,IAAI,CAAC,KACjD,KAAK,mBACN;AAED,MAAI,OAAO,cAAc,YAAY,SACnC,OAAM,IAAI,MAAM,uDAAuD;AAWzE,SATY,MAAM,MAAM,OACtB;GACE,uBAAuB,YAAY,0BAA0B,KAAK,KAAK;GACvE,YAAY,YAAY;GACxB,cAAc,cAAc,WAAW;GACxC,EACD,YAAY,SAAS,iBAAiB,CACvC;;;;;;;;;;;;;CAgBH,OAAO,QACL,KACA,WACA,SAG8B;AAC9B,SAAO,IAAI,KAAK;GACd;GACA;GACA,GAAG;GACJ,CAAC"}
1
+ {"version":3,"file":"violation_of_expectations_chain.cjs","names":["BaseChain","JsonOutputFunctionsParser","StringOutputParser","HumanMessage","PREDICT_NEXT_USER_MESSAGE_FUNCTION","PREDICT_NEXT_USER_MESSAGE_PROMPT","PREDICTION_VIOLATIONS_FUNCTION","PREDICTION_VIOLATIONS_PROMPT","GENERATE_REVISED_PREDICTION_PROMPT","GENERATE_FACTS_PROMPT"],"sources":["../../../../src/experimental/chains/violation_of_expectations/violation_of_expectations_chain.ts"],"sourcesContent":["import type { BaseRetrieverInterface } from \"@langchain/core/retrievers\";\nimport { ChatOpenAI } from \"@langchain/openai\";\nimport {\n BaseMessage,\n HumanMessage,\n isBaseMessage,\n} from \"@langchain/core/messages\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { StringOutputParser } from \"@langchain/core/output_parsers\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { JsonOutputFunctionsParser } from \"../../../output_parsers/openai_functions.js\";\nimport { BaseChain, ChainInputs } from \"../../../chains/base.js\";\nimport {\n GetPredictionViolationsResponse,\n MessageChunkResult,\n PREDICTION_VIOLATIONS_FUNCTION,\n PREDICT_NEXT_USER_MESSAGE_FUNCTION,\n PredictNextUserMessageResponse,\n} from \"./types.js\";\nimport {\n GENERATE_FACTS_PROMPT,\n GENERATE_REVISED_PREDICTION_PROMPT,\n PREDICTION_VIOLATIONS_PROMPT,\n PREDICT_NEXT_USER_MESSAGE_PROMPT,\n} from \"./violation_of_expectations_prompt.js\";\n\n/**\n * Interface for the input parameters of the ViolationOfExpectationsChain class.\n */\nexport interface ViolationOfExpectationsChainInput extends ChainInputs {\n /**\n * The retriever to use for retrieving stored\n * thoughts and insights.\n */\n retriever: BaseRetrieverInterface;\n /**\n * The LLM to use\n */\n llm: ChatOpenAI;\n}\n\n/**\n * Chain that generates key insights/facts of a user based on a\n * a chat conversation with an AI.\n */\nexport class ViolationOfExpectationsChain\n extends BaseChain\n implements ViolationOfExpectationsChainInput\n{\n static lc_name() {\n return \"ViolationOfExpectationsChain\";\n }\n\n _chainType(): string {\n return \"violation_of_expectation_chain\";\n }\n\n chatHistoryKey = \"chat_history\";\n\n thoughtsKey = \"thoughts\";\n\n get inputKeys() {\n return [this.chatHistoryKey];\n }\n\n get outputKeys() {\n return [this.thoughtsKey];\n }\n\n retriever: BaseRetrieverInterface;\n\n llm: ChatOpenAI;\n\n jsonOutputParser: JsonOutputFunctionsParser;\n\n stringOutputParser: StringOutputParser;\n\n constructor(fields: ViolationOfExpectationsChainInput) {\n super(fields);\n this.retriever = fields.retriever;\n this.llm = fields.llm;\n this.jsonOutputParser = new JsonOutputFunctionsParser();\n this.stringOutputParser = new StringOutputParser();\n }\n\n getChatHistoryString(chatHistory: BaseMessage[]): string {\n return chatHistory\n .map((chatMessage) => {\n if (chatMessage._getType() === \"human\") {\n return `Human: ${chatMessage.content}`;\n } else if (chatMessage._getType() === \"ai\") {\n return `AI: ${chatMessage.content}`;\n } else {\n return `${chatMessage.content}`;\n }\n })\n .join(\"\\n\");\n }\n\n removeDuplicateStrings(strings: Array<string>): Array<string> {\n return [...new Set(strings)];\n }\n\n /**\n * This method breaks down the chat history into chunks of messages.\n * Each chunk consists of a sequence of messages ending with an AI message and the subsequent user response, if any.\n *\n * @param {BaseMessage[]} chatHistory - The chat history to be chunked.\n *\n * @returns {MessageChunkResult[]} An array of message chunks. Each chunk includes a sequence of messages and the subsequent user response.\n *\n * @description\n * The method iterates over the chat history and pushes each message into a temporary array.\n * When it encounters an AI message, it checks for a subsequent user message.\n * If a user message is found, it is considered as the user response to the AI message.\n * If no user message is found after the AI message, the user response is undefined.\n * The method then pushes the chunk (sequence of messages and user response) into the result array.\n * This process continues until all messages in the chat history have been processed.\n */\n chunkMessagesByAIResponse(chatHistory: BaseMessage[]): MessageChunkResult[] {\n const newArray: MessageChunkResult[] = [];\n const tempArray: BaseMessage[] = [];\n\n chatHistory.forEach((item, index) => {\n tempArray.push(item);\n if (item._getType() === \"ai\") {\n let userResponse: BaseMessage | undefined = chatHistory[index + 1];\n if (!userResponse || userResponse._getType() !== \"human\") {\n userResponse = undefined;\n }\n\n newArray.push({\n chunkedMessages: tempArray,\n userResponse: userResponse\n ? new HumanMessage(userResponse)\n : undefined,\n });\n }\n });\n\n return newArray;\n }\n\n /**\n * This method processes a chat history to generate insights about the user.\n *\n * @param {ChainValues} values - The input values for the chain. It should contain a key for chat history.\n * @param {CallbackManagerForChainRun} [runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<ChainValues>} A promise that resolves to a list of insights about the user.\n *\n * @throws {Error} If the chat history key is not found in the input values or if the chat history is not an array of BaseMessages.\n *\n * @description\n * The method performs the following steps:\n * 1. Checks if the chat history key is present in the input values and if the chat history is an array of BaseMessages.\n * 2. Breaks the chat history into chunks of messages.\n * 3. For each chunk, it generates an initial prediction for the user's next message.\n * 4. For each prediction, it generates insights and prediction violations, and regenerates the prediction based on the violations.\n * 5. For each set of messages, it generates a fact/insight about the user.\n * The method returns a list of these insights.\n */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n if (!(this.chatHistoryKey in values)) {\n throw new Error(`Chat history key ${this.chatHistoryKey} not found`);\n }\n\n const chatHistory: unknown[] = values[this.chatHistoryKey];\n\n const isEveryMessageBaseMessage = chatHistory.every((message) =>\n isBaseMessage(message)\n );\n if (!isEveryMessageBaseMessage) {\n throw new Error(\"Chat history must be an array of BaseMessages\");\n }\n\n const messageChunks = this.chunkMessagesByAIResponse(\n chatHistory as BaseMessage[]\n );\n\n // Generate the initial prediction for every user message.\n const userPredictions = await Promise.all(\n messageChunks.map(async (chatHistoryChunk) => ({\n userPredictions: await this.predictNextUserMessage(\n chatHistoryChunk.chunkedMessages\n ),\n userResponse: chatHistoryChunk.userResponse,\n runManager,\n }))\n );\n\n // Generate insights, and prediction violations for every user message.\n // This call also regenerates the prediction based on the violations.\n const predictionViolations = await Promise.all(\n userPredictions.map((prediction) =>\n this.getPredictionViolations({\n userPredictions: prediction.userPredictions,\n userResponse: prediction.userResponse,\n runManager,\n })\n )\n );\n\n // Generate a fact/insight about the user for every set of messages.\n const insights = await Promise.all(\n predictionViolations.map((violation) =>\n this.generateFacts({\n userResponse: violation.userResponse,\n predictions: {\n revisedPrediction: violation.revisedPrediction,\n explainedPredictionErrors: violation.explainedPredictionErrors,\n },\n })\n )\n );\n\n return {\n insights,\n };\n }\n\n /**\n * This method predicts the next user message based on the chat history.\n *\n * @param {BaseMessage[]} chatHistory - The chat history based on which the next user message is predicted.\n * @param {CallbackManagerForChainRun} [runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<PredictNextUserMessageResponse>} A promise that resolves to the predicted next user message, the user state, and any insights.\n *\n * @throws {Error} If the response from the language model does not contain the expected keys: 'userState', 'predictedUserMessage', and 'insights'.\n */\n private async predictNextUserMessage(\n chatHistory: BaseMessage[],\n runManager?: CallbackManagerForChainRun\n ): Promise<PredictNextUserMessageResponse> {\n const messageString = this.getChatHistoryString(chatHistory);\n\n const llmWithFunctions = this.llm\n .bindTools([PREDICT_NEXT_USER_MESSAGE_FUNCTION])\n .withConfig({\n function_call: { name: PREDICT_NEXT_USER_MESSAGE_FUNCTION.name },\n });\n\n const chain = PREDICT_NEXT_USER_MESSAGE_PROMPT.pipe(llmWithFunctions).pipe(\n this.jsonOutputParser\n );\n\n const res = await chain.invoke(\n {\n chat_history: messageString,\n },\n runManager?.getChild(\"prediction\")\n );\n\n if (\n !(\n \"userState\" in res &&\n \"predictedUserMessage\" in res &&\n \"insights\" in res\n )\n ) {\n throw new Error(`Invalid response from LLM: ${JSON.stringify(res)}`);\n }\n\n const predictionResponse = res as PredictNextUserMessageResponse;\n\n // Query the retriever for relevant insights. Use the generates insights as a query.\n const retrievedDocs = await this.retrieveRelevantInsights(\n predictionResponse.insights\n );\n const relevantDocs = this.removeDuplicateStrings([\n ...predictionResponse.insights,\n ...retrievedDocs,\n ]);\n\n return {\n ...predictionResponse,\n insights: relevantDocs,\n };\n }\n\n /**\n * Retrieves relevant insights based on the provided insights.\n *\n * @param {Array<string>} insights - An array of insights to be used for retrieving relevant documents.\n *\n * @returns {Promise<Array<string>>} A promise that resolves to an array of relevant insights content.\n */\n private async retrieveRelevantInsights(\n insights: Array<string>\n ): Promise<Array<string>> {\n // Only extract the first relevant doc from the retriever. We don't need more than one.\n const relevantInsightsDocuments = await Promise.all(\n insights.map(async (insight) => {\n const relevantInsight = await this.retriever.invoke(insight);\n return relevantInsight[0];\n })\n );\n\n const relevantInsightsContent = relevantInsightsDocuments.map(\n (document) => document.pageContent\n );\n\n return relevantInsightsContent;\n }\n\n /**\n * This method generates prediction violations based on the predicted and actual user responses.\n * It also generates a revised prediction based on the identified violations.\n *\n * @param {Object} params - The parameters for the method.\n * @param {PredictNextUserMessageResponse} params.userPredictions - The predicted user message, user state, and insights.\n * @param {BaseMessage} [params.userResponse] - The actual user response.\n * @param {CallbackManagerForChainRun} [params.runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<{ userResponse: BaseMessage | undefined; revisedPrediction: string; explainedPredictionErrors: Array<string>; }>} A promise that resolves to an object containing the actual user response, the revised prediction, and the explained prediction errors.\n *\n * @throws {Error} If the response from the language model does not contain the expected keys: 'violationExplanation', 'explainedPredictionErrors', and 'accuratePrediction'.\n */\n private async getPredictionViolations({\n userPredictions,\n userResponse,\n runManager,\n }: {\n userPredictions: PredictNextUserMessageResponse;\n userResponse?: BaseMessage;\n runManager?: CallbackManagerForChainRun;\n }): Promise<GetPredictionViolationsResponse> {\n const llmWithFunctions = this.llm\n .bindTools([PREDICTION_VIOLATIONS_FUNCTION])\n .withConfig({\n function_call: { name: PREDICTION_VIOLATIONS_FUNCTION.name },\n });\n\n const chain = PREDICTION_VIOLATIONS_PROMPT.pipe(llmWithFunctions).pipe(\n this.jsonOutputParser\n );\n\n if (typeof userResponse?.content !== \"string\") {\n throw new Error(\"This chain does not support non-string model output.\");\n }\n const res = (await chain.invoke(\n {\n predicted_output: userPredictions.predictedUserMessage,\n actual_output: userResponse?.content ?? \"\",\n user_insights: userPredictions.insights.join(\"\\n\"),\n },\n runManager?.getChild(\"prediction_violations\")\n )) as Awaited<{\n violationExplanation: string;\n explainedPredictionErrors: Array<string>;\n accuratePrediction: boolean;\n }>;\n\n // Generate a revised prediction based on violations.\n const revisedPrediction = await this.generateRevisedPrediction({\n originalPrediction: userPredictions.predictedUserMessage,\n explainedPredictionErrors: res.explainedPredictionErrors,\n userInsights: userPredictions.insights,\n runManager,\n });\n\n return {\n userResponse,\n revisedPrediction,\n explainedPredictionErrors: res.explainedPredictionErrors,\n };\n }\n\n /**\n * This method generates a revised prediction based on the original prediction, explained prediction errors, and user insights.\n *\n * @param {Object} params - The parameters for the method.\n * @param {string} params.originalPrediction - The original prediction made by the model.\n * @param {Array<string>} params.explainedPredictionErrors - An array of explained prediction errors.\n * @param {Array<string>} params.userInsights - An array of insights about the user.\n * @param {CallbackManagerForChainRun} [params.runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<string>} A promise that resolves to a revised prediction.\n */\n private async generateRevisedPrediction({\n originalPrediction,\n explainedPredictionErrors,\n userInsights,\n runManager,\n }: {\n originalPrediction: string;\n explainedPredictionErrors: Array<string>;\n userInsights: Array<string>;\n runManager?: CallbackManagerForChainRun;\n }): Promise<string> {\n const revisedPredictionChain = GENERATE_REVISED_PREDICTION_PROMPT.pipe(\n this.llm\n ).pipe(this.stringOutputParser);\n\n const revisedPredictionRes = await revisedPredictionChain.invoke(\n {\n prediction: originalPrediction,\n explained_prediction_errors: explainedPredictionErrors.join(\"\\n\"),\n user_insights: userInsights.join(\"\\n\"),\n },\n runManager?.getChild(\"prediction_revision\")\n );\n\n return revisedPredictionRes;\n }\n\n /**\n * This method generates facts or insights about the user based on the revised prediction, explained prediction errors, and the user's response.\n *\n * @param {Object} params - The parameters for the method.\n * @param {BaseMessage} [params.userResponse] - The actual user response.\n * @param {Object} params.predictions - The revised prediction and explained prediction errors.\n * @param {string} params.predictions.revisedPrediction - The revised prediction made by the model.\n * @param {Array<string>} params.predictions.explainedPredictionErrors - An array of explained prediction errors.\n * @param {CallbackManagerForChainRun} [params.runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<string>} A promise that resolves to a string containing the generated facts or insights about the user.\n */\n private async generateFacts({\n userResponse,\n predictions,\n runManager,\n }: {\n userResponse?: BaseMessage;\n /**\n * Optional if the prediction was accurate.\n */\n predictions: {\n revisedPrediction: string;\n explainedPredictionErrors: Array<string>;\n };\n runManager?: CallbackManagerForChainRun;\n }): Promise<string> {\n const chain = GENERATE_FACTS_PROMPT.pipe(this.llm).pipe(\n this.stringOutputParser\n );\n\n if (typeof userResponse?.content !== \"string\") {\n throw new Error(\"This chain does not support non-string model output.\");\n }\n const res = await chain.invoke(\n {\n prediction_violations: predictions.explainedPredictionErrors.join(\"\\n\"),\n prediction: predictions.revisedPrediction,\n user_message: userResponse?.content ?? \"\",\n },\n runManager?.getChild(\"generate_facts\")\n );\n\n return res;\n }\n\n /**\n * Static method that creates a ViolationOfExpectationsChain instance from a\n * ChatOpenAI and retriever. It also accepts optional options\n * to customize the chain.\n *\n * @param llm The ChatOpenAI instance.\n * @param retriever The retriever used for similarity search.\n * @param options Optional options to customize the chain.\n *\n * @returns A new instance of ViolationOfExpectationsChain.\n */\n static fromLLM(\n llm: ChatOpenAI,\n retriever: BaseRetrieverInterface,\n options?: Partial<\n Omit<ViolationOfExpectationsChainInput, \"llm\" | \"retriever\">\n >\n ): ViolationOfExpectationsChain {\n return new this({\n retriever,\n llm,\n ...options,\n });\n }\n}\n"],"mappings":"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"}
@@ -4,7 +4,6 @@ import { PREDICTION_VIOLATIONS_FUNCTION, PREDICT_NEXT_USER_MESSAGE_FUNCTION } fr
4
4
  import { GENERATE_FACTS_PROMPT, GENERATE_REVISED_PREDICTION_PROMPT, PREDICTION_VIOLATIONS_PROMPT, PREDICT_NEXT_USER_MESSAGE_PROMPT } from "./violation_of_expectations_prompt.js";
5
5
  import { HumanMessage, isBaseMessage } from "@langchain/core/messages";
6
6
  import { StringOutputParser } from "@langchain/core/output_parsers";
7
-
8
7
  //#region src/experimental/chains/violation_of_expectations/violation_of_expectations_chain.ts
9
8
  /**
10
9
  * Chain that generates key insights/facts of a user based on a
@@ -246,7 +245,7 @@ var ViolationOfExpectationsChain = class extends BaseChain {
246
245
  });
247
246
  }
248
247
  };
249
-
250
248
  //#endregion
251
249
  export { ViolationOfExpectationsChain };
250
+
252
251
  //# sourceMappingURL=violation_of_expectations_chain.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"violation_of_expectations_chain.js","names":[],"sources":["../../../../src/experimental/chains/violation_of_expectations/violation_of_expectations_chain.ts"],"sourcesContent":["import type { BaseRetrieverInterface } from \"@langchain/core/retrievers\";\nimport { ChatOpenAI } from \"@langchain/openai\";\nimport {\n BaseMessage,\n HumanMessage,\n isBaseMessage,\n} from \"@langchain/core/messages\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { StringOutputParser } from \"@langchain/core/output_parsers\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { JsonOutputFunctionsParser } from \"../../../output_parsers/openai_functions.js\";\nimport { BaseChain, ChainInputs } from \"../../../chains/base.js\";\nimport {\n GetPredictionViolationsResponse,\n MessageChunkResult,\n PREDICTION_VIOLATIONS_FUNCTION,\n PREDICT_NEXT_USER_MESSAGE_FUNCTION,\n PredictNextUserMessageResponse,\n} from \"./types.js\";\nimport {\n GENERATE_FACTS_PROMPT,\n GENERATE_REVISED_PREDICTION_PROMPT,\n PREDICTION_VIOLATIONS_PROMPT,\n PREDICT_NEXT_USER_MESSAGE_PROMPT,\n} from \"./violation_of_expectations_prompt.js\";\n\n/**\n * Interface for the input parameters of the ViolationOfExpectationsChain class.\n */\nexport interface ViolationOfExpectationsChainInput extends ChainInputs {\n /**\n * The retriever to use for retrieving stored\n * thoughts and insights.\n */\n retriever: BaseRetrieverInterface;\n /**\n * The LLM to use\n */\n llm: ChatOpenAI;\n}\n\n/**\n * Chain that generates key insights/facts of a user based on a\n * a chat conversation with an AI.\n */\nexport class ViolationOfExpectationsChain\n extends BaseChain\n implements ViolationOfExpectationsChainInput\n{\n static lc_name() {\n return \"ViolationOfExpectationsChain\";\n }\n\n _chainType(): string {\n return \"violation_of_expectation_chain\";\n }\n\n chatHistoryKey = \"chat_history\";\n\n thoughtsKey = \"thoughts\";\n\n get inputKeys() {\n return [this.chatHistoryKey];\n }\n\n get outputKeys() {\n return [this.thoughtsKey];\n }\n\n retriever: BaseRetrieverInterface;\n\n llm: ChatOpenAI;\n\n jsonOutputParser: JsonOutputFunctionsParser;\n\n stringOutputParser: StringOutputParser;\n\n constructor(fields: ViolationOfExpectationsChainInput) {\n super(fields);\n this.retriever = fields.retriever;\n this.llm = fields.llm;\n this.jsonOutputParser = new JsonOutputFunctionsParser();\n this.stringOutputParser = new StringOutputParser();\n }\n\n getChatHistoryString(chatHistory: BaseMessage[]): string {\n return chatHistory\n .map((chatMessage) => {\n if (chatMessage._getType() === \"human\") {\n return `Human: ${chatMessage.content}`;\n } else if (chatMessage._getType() === \"ai\") {\n return `AI: ${chatMessage.content}`;\n } else {\n return `${chatMessage.content}`;\n }\n })\n .join(\"\\n\");\n }\n\n removeDuplicateStrings(strings: Array<string>): Array<string> {\n return [...new Set(strings)];\n }\n\n /**\n * This method breaks down the chat history into chunks of messages.\n * Each chunk consists of a sequence of messages ending with an AI message and the subsequent user response, if any.\n *\n * @param {BaseMessage[]} chatHistory - The chat history to be chunked.\n *\n * @returns {MessageChunkResult[]} An array of message chunks. Each chunk includes a sequence of messages and the subsequent user response.\n *\n * @description\n * The method iterates over the chat history and pushes each message into a temporary array.\n * When it encounters an AI message, it checks for a subsequent user message.\n * If a user message is found, it is considered as the user response to the AI message.\n * If no user message is found after the AI message, the user response is undefined.\n * The method then pushes the chunk (sequence of messages and user response) into the result array.\n * This process continues until all messages in the chat history have been processed.\n */\n chunkMessagesByAIResponse(chatHistory: BaseMessage[]): MessageChunkResult[] {\n const newArray: MessageChunkResult[] = [];\n const tempArray: BaseMessage[] = [];\n\n chatHistory.forEach((item, index) => {\n tempArray.push(item);\n if (item._getType() === \"ai\") {\n let userResponse: BaseMessage | undefined = chatHistory[index + 1];\n if (!userResponse || userResponse._getType() !== \"human\") {\n userResponse = undefined;\n }\n\n newArray.push({\n chunkedMessages: tempArray,\n userResponse: userResponse\n ? new HumanMessage(userResponse)\n : undefined,\n });\n }\n });\n\n return newArray;\n }\n\n /**\n * This method processes a chat history to generate insights about the user.\n *\n * @param {ChainValues} values - The input values for the chain. It should contain a key for chat history.\n * @param {CallbackManagerForChainRun} [runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<ChainValues>} A promise that resolves to a list of insights about the user.\n *\n * @throws {Error} If the chat history key is not found in the input values or if the chat history is not an array of BaseMessages.\n *\n * @description\n * The method performs the following steps:\n * 1. Checks if the chat history key is present in the input values and if the chat history is an array of BaseMessages.\n * 2. Breaks the chat history into chunks of messages.\n * 3. For each chunk, it generates an initial prediction for the user's next message.\n * 4. For each prediction, it generates insights and prediction violations, and regenerates the prediction based on the violations.\n * 5. For each set of messages, it generates a fact/insight about the user.\n * The method returns a list of these insights.\n */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n if (!(this.chatHistoryKey in values)) {\n throw new Error(`Chat history key ${this.chatHistoryKey} not found`);\n }\n\n const chatHistory: unknown[] = values[this.chatHistoryKey];\n\n const isEveryMessageBaseMessage = chatHistory.every((message) =>\n isBaseMessage(message)\n );\n if (!isEveryMessageBaseMessage) {\n throw new Error(\"Chat history must be an array of BaseMessages\");\n }\n\n const messageChunks = this.chunkMessagesByAIResponse(\n chatHistory as BaseMessage[]\n );\n\n // Generate the initial prediction for every user message.\n const userPredictions = await Promise.all(\n messageChunks.map(async (chatHistoryChunk) => ({\n userPredictions: await this.predictNextUserMessage(\n chatHistoryChunk.chunkedMessages\n ),\n userResponse: chatHistoryChunk.userResponse,\n runManager,\n }))\n );\n\n // Generate insights, and prediction violations for every user message.\n // This call also regenerates the prediction based on the violations.\n const predictionViolations = await Promise.all(\n userPredictions.map((prediction) =>\n this.getPredictionViolations({\n userPredictions: prediction.userPredictions,\n userResponse: prediction.userResponse,\n runManager,\n })\n )\n );\n\n // Generate a fact/insight about the user for every set of messages.\n const insights = await Promise.all(\n predictionViolations.map((violation) =>\n this.generateFacts({\n userResponse: violation.userResponse,\n predictions: {\n revisedPrediction: violation.revisedPrediction,\n explainedPredictionErrors: violation.explainedPredictionErrors,\n },\n })\n )\n );\n\n return {\n insights,\n };\n }\n\n /**\n * This method predicts the next user message based on the chat history.\n *\n * @param {BaseMessage[]} chatHistory - The chat history based on which the next user message is predicted.\n * @param {CallbackManagerForChainRun} [runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<PredictNextUserMessageResponse>} A promise that resolves to the predicted next user message, the user state, and any insights.\n *\n * @throws {Error} If the response from the language model does not contain the expected keys: 'userState', 'predictedUserMessage', and 'insights'.\n */\n private async predictNextUserMessage(\n chatHistory: BaseMessage[],\n runManager?: CallbackManagerForChainRun\n ): Promise<PredictNextUserMessageResponse> {\n const messageString = this.getChatHistoryString(chatHistory);\n\n const llmWithFunctions = this.llm\n .bindTools([PREDICT_NEXT_USER_MESSAGE_FUNCTION])\n .withConfig({\n function_call: { name: PREDICT_NEXT_USER_MESSAGE_FUNCTION.name },\n });\n\n const chain = PREDICT_NEXT_USER_MESSAGE_PROMPT.pipe(llmWithFunctions).pipe(\n this.jsonOutputParser\n );\n\n const res = await chain.invoke(\n {\n chat_history: messageString,\n },\n runManager?.getChild(\"prediction\")\n );\n\n if (\n !(\n \"userState\" in res &&\n \"predictedUserMessage\" in res &&\n \"insights\" in res\n )\n ) {\n throw new Error(`Invalid response from LLM: ${JSON.stringify(res)}`);\n }\n\n const predictionResponse = res as PredictNextUserMessageResponse;\n\n // Query the retriever for relevant insights. Use the generates insights as a query.\n const retrievedDocs = await this.retrieveRelevantInsights(\n predictionResponse.insights\n );\n const relevantDocs = this.removeDuplicateStrings([\n ...predictionResponse.insights,\n ...retrievedDocs,\n ]);\n\n return {\n ...predictionResponse,\n insights: relevantDocs,\n };\n }\n\n /**\n * Retrieves relevant insights based on the provided insights.\n *\n * @param {Array<string>} insights - An array of insights to be used for retrieving relevant documents.\n *\n * @returns {Promise<Array<string>>} A promise that resolves to an array of relevant insights content.\n */\n private async retrieveRelevantInsights(\n insights: Array<string>\n ): Promise<Array<string>> {\n // Only extract the first relevant doc from the retriever. We don't need more than one.\n const relevantInsightsDocuments = await Promise.all(\n insights.map(async (insight) => {\n const relevantInsight = await this.retriever.invoke(insight);\n return relevantInsight[0];\n })\n );\n\n const relevantInsightsContent = relevantInsightsDocuments.map(\n (document) => document.pageContent\n );\n\n return relevantInsightsContent;\n }\n\n /**\n * This method generates prediction violations based on the predicted and actual user responses.\n * It also generates a revised prediction based on the identified violations.\n *\n * @param {Object} params - The parameters for the method.\n * @param {PredictNextUserMessageResponse} params.userPredictions - The predicted user message, user state, and insights.\n * @param {BaseMessage} [params.userResponse] - The actual user response.\n * @param {CallbackManagerForChainRun} [params.runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<{ userResponse: BaseMessage | undefined; revisedPrediction: string; explainedPredictionErrors: Array<string>; }>} A promise that resolves to an object containing the actual user response, the revised prediction, and the explained prediction errors.\n *\n * @throws {Error} If the response from the language model does not contain the expected keys: 'violationExplanation', 'explainedPredictionErrors', and 'accuratePrediction'.\n */\n private async getPredictionViolations({\n userPredictions,\n userResponse,\n runManager,\n }: {\n userPredictions: PredictNextUserMessageResponse;\n userResponse?: BaseMessage;\n runManager?: CallbackManagerForChainRun;\n }): Promise<GetPredictionViolationsResponse> {\n const llmWithFunctions = this.llm\n .bindTools([PREDICTION_VIOLATIONS_FUNCTION])\n .withConfig({\n function_call: { name: PREDICTION_VIOLATIONS_FUNCTION.name },\n });\n\n const chain = PREDICTION_VIOLATIONS_PROMPT.pipe(llmWithFunctions).pipe(\n this.jsonOutputParser\n );\n\n if (typeof userResponse?.content !== \"string\") {\n throw new Error(\"This chain does not support non-string model output.\");\n }\n const res = (await chain.invoke(\n {\n predicted_output: userPredictions.predictedUserMessage,\n actual_output: userResponse?.content ?? \"\",\n user_insights: userPredictions.insights.join(\"\\n\"),\n },\n runManager?.getChild(\"prediction_violations\")\n )) as Awaited<{\n violationExplanation: string;\n explainedPredictionErrors: Array<string>;\n accuratePrediction: boolean;\n }>;\n\n // Generate a revised prediction based on violations.\n const revisedPrediction = await this.generateRevisedPrediction({\n originalPrediction: userPredictions.predictedUserMessage,\n explainedPredictionErrors: res.explainedPredictionErrors,\n userInsights: userPredictions.insights,\n runManager,\n });\n\n return {\n userResponse,\n revisedPrediction,\n explainedPredictionErrors: res.explainedPredictionErrors,\n };\n }\n\n /**\n * This method generates a revised prediction based on the original prediction, explained prediction errors, and user insights.\n *\n * @param {Object} params - The parameters for the method.\n * @param {string} params.originalPrediction - The original prediction made by the model.\n * @param {Array<string>} params.explainedPredictionErrors - An array of explained prediction errors.\n * @param {Array<string>} params.userInsights - An array of insights about the user.\n * @param {CallbackManagerForChainRun} [params.runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<string>} A promise that resolves to a revised prediction.\n */\n private async generateRevisedPrediction({\n originalPrediction,\n explainedPredictionErrors,\n userInsights,\n runManager,\n }: {\n originalPrediction: string;\n explainedPredictionErrors: Array<string>;\n userInsights: Array<string>;\n runManager?: CallbackManagerForChainRun;\n }): Promise<string> {\n const revisedPredictionChain = GENERATE_REVISED_PREDICTION_PROMPT.pipe(\n this.llm\n ).pipe(this.stringOutputParser);\n\n const revisedPredictionRes = await revisedPredictionChain.invoke(\n {\n prediction: originalPrediction,\n explained_prediction_errors: explainedPredictionErrors.join(\"\\n\"),\n user_insights: userInsights.join(\"\\n\"),\n },\n runManager?.getChild(\"prediction_revision\")\n );\n\n return revisedPredictionRes;\n }\n\n /**\n * This method generates facts or insights about the user based on the revised prediction, explained prediction errors, and the user's response.\n *\n * @param {Object} params - The parameters for the method.\n * @param {BaseMessage} [params.userResponse] - The actual user response.\n * @param {Object} params.predictions - The revised prediction and explained prediction errors.\n * @param {string} params.predictions.revisedPrediction - The revised prediction made by the model.\n * @param {Array<string>} params.predictions.explainedPredictionErrors - An array of explained prediction errors.\n * @param {CallbackManagerForChainRun} [params.runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<string>} A promise that resolves to a string containing the generated facts or insights about the user.\n */\n private async generateFacts({\n userResponse,\n predictions,\n runManager,\n }: {\n userResponse?: BaseMessage;\n /**\n * Optional if the prediction was accurate.\n */\n predictions: {\n revisedPrediction: string;\n explainedPredictionErrors: Array<string>;\n };\n runManager?: CallbackManagerForChainRun;\n }): Promise<string> {\n const chain = GENERATE_FACTS_PROMPT.pipe(this.llm).pipe(\n this.stringOutputParser\n );\n\n if (typeof userResponse?.content !== \"string\") {\n throw new Error(\"This chain does not support non-string model output.\");\n }\n const res = await chain.invoke(\n {\n prediction_violations: predictions.explainedPredictionErrors.join(\"\\n\"),\n prediction: predictions.revisedPrediction,\n user_message: userResponse?.content ?? \"\",\n },\n runManager?.getChild(\"generate_facts\")\n );\n\n return res;\n }\n\n /**\n * Static method that creates a ViolationOfExpectationsChain instance from a\n * ChatOpenAI and retriever. It also accepts optional options\n * to customize the chain.\n *\n * @param llm The ChatOpenAI instance.\n * @param retriever The retriever used for similarity search.\n * @param options Optional options to customize the chain.\n *\n * @returns A new instance of ViolationOfExpectationsChain.\n */\n static fromLLM(\n llm: ChatOpenAI,\n retriever: BaseRetrieverInterface,\n options?: Partial<\n Omit<ViolationOfExpectationsChainInput, \"llm\" | \"retriever\">\n >\n ): ViolationOfExpectationsChain {\n return new this({\n retriever,\n llm,\n ...options,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;AA6CA,IAAa,+BAAb,cACU,UAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,aAAqB;AACnB,SAAO;;CAGT,iBAAiB;CAEjB,cAAc;CAEd,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,eAAe;;CAG9B,IAAI,aAAa;AACf,SAAO,CAAC,KAAK,YAAY;;CAG3B;CAEA;CAEA;CAEA;CAEA,YAAY,QAA2C;AACrD,QAAM,OAAO;AACb,OAAK,YAAY,OAAO;AACxB,OAAK,MAAM,OAAO;AAClB,OAAK,mBAAmB,IAAI,2BAA2B;AACvD,OAAK,qBAAqB,IAAI,oBAAoB;;CAGpD,qBAAqB,aAAoC;AACvD,SAAO,YACJ,KAAK,gBAAgB;AACpB,OAAI,YAAY,UAAU,KAAK,QAC7B,QAAO,UAAU,YAAY;YACpB,YAAY,UAAU,KAAK,KACpC,QAAO,OAAO,YAAY;OAE1B,QAAO,GAAG,YAAY;IAExB,CACD,KAAK,KAAK;;CAGf,uBAAuB,SAAuC;AAC5D,SAAO,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC;;;;;;;;;;;;;;;;;;CAmB9B,0BAA0B,aAAkD;EAC1E,MAAM,WAAiC,EAAE;EACzC,MAAM,YAA2B,EAAE;AAEnC,cAAY,SAAS,MAAM,UAAU;AACnC,aAAU,KAAK,KAAK;AACpB,OAAI,KAAK,UAAU,KAAK,MAAM;IAC5B,IAAI,eAAwC,YAAY,QAAQ;AAChE,QAAI,CAAC,gBAAgB,aAAa,UAAU,KAAK,QAC/C,gBAAe;AAGjB,aAAS,KAAK;KACZ,iBAAiB;KACjB,cAAc,eACV,IAAI,aAAa,aAAa,GAC9B;KACL,CAAC;;IAEJ;AAEF,SAAO;;;;;;;;;;;;;;;;;;;;;CAsBT,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,kBAAkB,QAC3B,OAAM,IAAI,MAAM,oBAAoB,KAAK,eAAe,YAAY;EAGtE,MAAM,cAAyB,OAAO,KAAK;AAK3C,MAAI,CAH8B,YAAY,OAAO,YACnD,cAAc,QAAQ,CACvB,CAEC,OAAM,IAAI,MAAM,gDAAgD;EAGlE,MAAM,gBAAgB,KAAK,0BACzB,YACD;EAGD,MAAM,kBAAkB,MAAM,QAAQ,IACpC,cAAc,IAAI,OAAO,sBAAsB;GAC7C,iBAAiB,MAAM,KAAK,uBAC1B,iBAAiB,gBAClB;GACD,cAAc,iBAAiB;GAC/B;GACD,EAAE,CACJ;EAID,MAAM,uBAAuB,MAAM,QAAQ,IACzC,gBAAgB,KAAK,eACnB,KAAK,wBAAwB;GAC3B,iBAAiB,WAAW;GAC5B,cAAc,WAAW;GACzB;GACD,CAAC,CACH,CACF;AAeD,SAAO,EACL,UAbe,MAAM,QAAQ,IAC7B,qBAAqB,KAAK,cACxB,KAAK,cAAc;GACjB,cAAc,UAAU;GACxB,aAAa;IACX,mBAAmB,UAAU;IAC7B,2BAA2B,UAAU;IACtC;GACF,CAAC,CACH,CACF,EAIA;;;;;;;;;;;;CAaH,MAAc,uBACZ,aACA,YACyC;EACzC,MAAM,gBAAgB,KAAK,qBAAqB,YAAY;EAE5D,MAAM,mBAAmB,KAAK,IAC3B,UAAU,CAAC,mCAAmC,CAAC,CAC/C,WAAW,EACV,eAAe,EAAE,MAAM,mCAAmC,MAAM,EACjE,CAAC;EAMJ,MAAM,MAAM,MAJE,iCAAiC,KAAK,iBAAiB,CAAC,KACpE,KAAK,iBACN,CAEuB,OACtB,EACE,cAAc,eACf,EACD,YAAY,SAAS,aAAa,CACnC;AAED,MACE,EACE,eAAe,OACf,0BAA0B,OAC1B,cAAc,KAGhB,OAAM,IAAI,MAAM,8BAA8B,KAAK,UAAU,IAAI,GAAG;EAGtE,MAAM,qBAAqB;EAG3B,MAAM,gBAAgB,MAAM,KAAK,yBAC/B,mBAAmB,SACpB;EACD,MAAM,eAAe,KAAK,uBAAuB,CAC/C,GAAG,mBAAmB,UACtB,GAAG,cACJ,CAAC;AAEF,SAAO;GACL,GAAG;GACH,UAAU;GACX;;;;;;;;;CAUH,MAAc,yBACZ,UACwB;AAaxB,UAXkC,MAAM,QAAQ,IAC9C,SAAS,IAAI,OAAO,YAAY;AAE9B,WADwB,MAAM,KAAK,UAAU,OAAO,QAAQ,EACrC;IACvB,CACH,EAEyD,KACvD,aAAa,SAAS,YACxB;;;;;;;;;;;;;;;CAkBH,MAAc,wBAAwB,EACpC,iBACA,cACA,cAK2C;EAC3C,MAAM,mBAAmB,KAAK,IAC3B,UAAU,CAAC,+BAA+B,CAAC,CAC3C,WAAW,EACV,eAAe,EAAE,MAAM,+BAA+B,MAAM,EAC7D,CAAC;EAEJ,MAAM,QAAQ,6BAA6B,KAAK,iBAAiB,CAAC,KAChE,KAAK,iBACN;AAED,MAAI,OAAO,cAAc,YAAY,SACnC,OAAM,IAAI,MAAM,uDAAuD;EAEzE,MAAM,MAAO,MAAM,MAAM,OACvB;GACE,kBAAkB,gBAAgB;GAClC,eAAe,cAAc,WAAW;GACxC,eAAe,gBAAgB,SAAS,KAAK,KAAK;GACnD,EACD,YAAY,SAAS,wBAAwB,CAC9C;AAcD,SAAO;GACL;GACA,mBATwB,MAAM,KAAK,0BAA0B;IAC7D,oBAAoB,gBAAgB;IACpC,2BAA2B,IAAI;IAC/B,cAAc,gBAAgB;IAC9B;IACD,CAAC;GAKA,2BAA2B,IAAI;GAChC;;;;;;;;;;;;;CAcH,MAAc,0BAA0B,EACtC,oBACA,2BACA,cACA,cAMkB;AAclB,SAT6B,MAJE,mCAAmC,KAChE,KAAK,IACN,CAAC,KAAK,KAAK,mBAAmB,CAE2B,OACxD;GACE,YAAY;GACZ,6BAA6B,0BAA0B,KAAK,KAAK;GACjE,eAAe,aAAa,KAAK,KAAK;GACvC,EACD,YAAY,SAAS,sBAAsB,CAC5C;;;;;;;;;;;;;;CAiBH,MAAc,cAAc,EAC1B,cACA,aACA,cAWkB;EAClB,MAAM,QAAQ,sBAAsB,KAAK,KAAK,IAAI,CAAC,KACjD,KAAK,mBACN;AAED,MAAI,OAAO,cAAc,YAAY,SACnC,OAAM,IAAI,MAAM,uDAAuD;AAWzE,SATY,MAAM,MAAM,OACtB;GACE,uBAAuB,YAAY,0BAA0B,KAAK,KAAK;GACvE,YAAY,YAAY;GACxB,cAAc,cAAc,WAAW;GACxC,EACD,YAAY,SAAS,iBAAiB,CACvC;;;;;;;;;;;;;CAgBH,OAAO,QACL,KACA,WACA,SAG8B;AAC9B,SAAO,IAAI,KAAK;GACd;GACA;GACA,GAAG;GACJ,CAAC"}
1
+ {"version":3,"file":"violation_of_expectations_chain.js","names":[],"sources":["../../../../src/experimental/chains/violation_of_expectations/violation_of_expectations_chain.ts"],"sourcesContent":["import type { BaseRetrieverInterface } from \"@langchain/core/retrievers\";\nimport { ChatOpenAI } from \"@langchain/openai\";\nimport {\n BaseMessage,\n HumanMessage,\n isBaseMessage,\n} from \"@langchain/core/messages\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { StringOutputParser } from \"@langchain/core/output_parsers\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { JsonOutputFunctionsParser } from \"../../../output_parsers/openai_functions.js\";\nimport { BaseChain, ChainInputs } from \"../../../chains/base.js\";\nimport {\n GetPredictionViolationsResponse,\n MessageChunkResult,\n PREDICTION_VIOLATIONS_FUNCTION,\n PREDICT_NEXT_USER_MESSAGE_FUNCTION,\n PredictNextUserMessageResponse,\n} from \"./types.js\";\nimport {\n GENERATE_FACTS_PROMPT,\n GENERATE_REVISED_PREDICTION_PROMPT,\n PREDICTION_VIOLATIONS_PROMPT,\n PREDICT_NEXT_USER_MESSAGE_PROMPT,\n} from \"./violation_of_expectations_prompt.js\";\n\n/**\n * Interface for the input parameters of the ViolationOfExpectationsChain class.\n */\nexport interface ViolationOfExpectationsChainInput extends ChainInputs {\n /**\n * The retriever to use for retrieving stored\n * thoughts and insights.\n */\n retriever: BaseRetrieverInterface;\n /**\n * The LLM to use\n */\n llm: ChatOpenAI;\n}\n\n/**\n * Chain that generates key insights/facts of a user based on a\n * a chat conversation with an AI.\n */\nexport class ViolationOfExpectationsChain\n extends BaseChain\n implements ViolationOfExpectationsChainInput\n{\n static lc_name() {\n return \"ViolationOfExpectationsChain\";\n }\n\n _chainType(): string {\n return \"violation_of_expectation_chain\";\n }\n\n chatHistoryKey = \"chat_history\";\n\n thoughtsKey = \"thoughts\";\n\n get inputKeys() {\n return [this.chatHistoryKey];\n }\n\n get outputKeys() {\n return [this.thoughtsKey];\n }\n\n retriever: BaseRetrieverInterface;\n\n llm: ChatOpenAI;\n\n jsonOutputParser: JsonOutputFunctionsParser;\n\n stringOutputParser: StringOutputParser;\n\n constructor(fields: ViolationOfExpectationsChainInput) {\n super(fields);\n this.retriever = fields.retriever;\n this.llm = fields.llm;\n this.jsonOutputParser = new JsonOutputFunctionsParser();\n this.stringOutputParser = new StringOutputParser();\n }\n\n getChatHistoryString(chatHistory: BaseMessage[]): string {\n return chatHistory\n .map((chatMessage) => {\n if (chatMessage._getType() === \"human\") {\n return `Human: ${chatMessage.content}`;\n } else if (chatMessage._getType() === \"ai\") {\n return `AI: ${chatMessage.content}`;\n } else {\n return `${chatMessage.content}`;\n }\n })\n .join(\"\\n\");\n }\n\n removeDuplicateStrings(strings: Array<string>): Array<string> {\n return [...new Set(strings)];\n }\n\n /**\n * This method breaks down the chat history into chunks of messages.\n * Each chunk consists of a sequence of messages ending with an AI message and the subsequent user response, if any.\n *\n * @param {BaseMessage[]} chatHistory - The chat history to be chunked.\n *\n * @returns {MessageChunkResult[]} An array of message chunks. Each chunk includes a sequence of messages and the subsequent user response.\n *\n * @description\n * The method iterates over the chat history and pushes each message into a temporary array.\n * When it encounters an AI message, it checks for a subsequent user message.\n * If a user message is found, it is considered as the user response to the AI message.\n * If no user message is found after the AI message, the user response is undefined.\n * The method then pushes the chunk (sequence of messages and user response) into the result array.\n * This process continues until all messages in the chat history have been processed.\n */\n chunkMessagesByAIResponse(chatHistory: BaseMessage[]): MessageChunkResult[] {\n const newArray: MessageChunkResult[] = [];\n const tempArray: BaseMessage[] = [];\n\n chatHistory.forEach((item, index) => {\n tempArray.push(item);\n if (item._getType() === \"ai\") {\n let userResponse: BaseMessage | undefined = chatHistory[index + 1];\n if (!userResponse || userResponse._getType() !== \"human\") {\n userResponse = undefined;\n }\n\n newArray.push({\n chunkedMessages: tempArray,\n userResponse: userResponse\n ? new HumanMessage(userResponse)\n : undefined,\n });\n }\n });\n\n return newArray;\n }\n\n /**\n * This method processes a chat history to generate insights about the user.\n *\n * @param {ChainValues} values - The input values for the chain. It should contain a key for chat history.\n * @param {CallbackManagerForChainRun} [runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<ChainValues>} A promise that resolves to a list of insights about the user.\n *\n * @throws {Error} If the chat history key is not found in the input values or if the chat history is not an array of BaseMessages.\n *\n * @description\n * The method performs the following steps:\n * 1. Checks if the chat history key is present in the input values and if the chat history is an array of BaseMessages.\n * 2. Breaks the chat history into chunks of messages.\n * 3. For each chunk, it generates an initial prediction for the user's next message.\n * 4. For each prediction, it generates insights and prediction violations, and regenerates the prediction based on the violations.\n * 5. For each set of messages, it generates a fact/insight about the user.\n * The method returns a list of these insights.\n */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n if (!(this.chatHistoryKey in values)) {\n throw new Error(`Chat history key ${this.chatHistoryKey} not found`);\n }\n\n const chatHistory: unknown[] = values[this.chatHistoryKey];\n\n const isEveryMessageBaseMessage = chatHistory.every((message) =>\n isBaseMessage(message)\n );\n if (!isEveryMessageBaseMessage) {\n throw new Error(\"Chat history must be an array of BaseMessages\");\n }\n\n const messageChunks = this.chunkMessagesByAIResponse(\n chatHistory as BaseMessage[]\n );\n\n // Generate the initial prediction for every user message.\n const userPredictions = await Promise.all(\n messageChunks.map(async (chatHistoryChunk) => ({\n userPredictions: await this.predictNextUserMessage(\n chatHistoryChunk.chunkedMessages\n ),\n userResponse: chatHistoryChunk.userResponse,\n runManager,\n }))\n );\n\n // Generate insights, and prediction violations for every user message.\n // This call also regenerates the prediction based on the violations.\n const predictionViolations = await Promise.all(\n userPredictions.map((prediction) =>\n this.getPredictionViolations({\n userPredictions: prediction.userPredictions,\n userResponse: prediction.userResponse,\n runManager,\n })\n )\n );\n\n // Generate a fact/insight about the user for every set of messages.\n const insights = await Promise.all(\n predictionViolations.map((violation) =>\n this.generateFacts({\n userResponse: violation.userResponse,\n predictions: {\n revisedPrediction: violation.revisedPrediction,\n explainedPredictionErrors: violation.explainedPredictionErrors,\n },\n })\n )\n );\n\n return {\n insights,\n };\n }\n\n /**\n * This method predicts the next user message based on the chat history.\n *\n * @param {BaseMessage[]} chatHistory - The chat history based on which the next user message is predicted.\n * @param {CallbackManagerForChainRun} [runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<PredictNextUserMessageResponse>} A promise that resolves to the predicted next user message, the user state, and any insights.\n *\n * @throws {Error} If the response from the language model does not contain the expected keys: 'userState', 'predictedUserMessage', and 'insights'.\n */\n private async predictNextUserMessage(\n chatHistory: BaseMessage[],\n runManager?: CallbackManagerForChainRun\n ): Promise<PredictNextUserMessageResponse> {\n const messageString = this.getChatHistoryString(chatHistory);\n\n const llmWithFunctions = this.llm\n .bindTools([PREDICT_NEXT_USER_MESSAGE_FUNCTION])\n .withConfig({\n function_call: { name: PREDICT_NEXT_USER_MESSAGE_FUNCTION.name },\n });\n\n const chain = PREDICT_NEXT_USER_MESSAGE_PROMPT.pipe(llmWithFunctions).pipe(\n this.jsonOutputParser\n );\n\n const res = await chain.invoke(\n {\n chat_history: messageString,\n },\n runManager?.getChild(\"prediction\")\n );\n\n if (\n !(\n \"userState\" in res &&\n \"predictedUserMessage\" in res &&\n \"insights\" in res\n )\n ) {\n throw new Error(`Invalid response from LLM: ${JSON.stringify(res)}`);\n }\n\n const predictionResponse = res as PredictNextUserMessageResponse;\n\n // Query the retriever for relevant insights. Use the generates insights as a query.\n const retrievedDocs = await this.retrieveRelevantInsights(\n predictionResponse.insights\n );\n const relevantDocs = this.removeDuplicateStrings([\n ...predictionResponse.insights,\n ...retrievedDocs,\n ]);\n\n return {\n ...predictionResponse,\n insights: relevantDocs,\n };\n }\n\n /**\n * Retrieves relevant insights based on the provided insights.\n *\n * @param {Array<string>} insights - An array of insights to be used for retrieving relevant documents.\n *\n * @returns {Promise<Array<string>>} A promise that resolves to an array of relevant insights content.\n */\n private async retrieveRelevantInsights(\n insights: Array<string>\n ): Promise<Array<string>> {\n // Only extract the first relevant doc from the retriever. We don't need more than one.\n const relevantInsightsDocuments = await Promise.all(\n insights.map(async (insight) => {\n const relevantInsight = await this.retriever.invoke(insight);\n return relevantInsight[0];\n })\n );\n\n const relevantInsightsContent = relevantInsightsDocuments.map(\n (document) => document.pageContent\n );\n\n return relevantInsightsContent;\n }\n\n /**\n * This method generates prediction violations based on the predicted and actual user responses.\n * It also generates a revised prediction based on the identified violations.\n *\n * @param {Object} params - The parameters for the method.\n * @param {PredictNextUserMessageResponse} params.userPredictions - The predicted user message, user state, and insights.\n * @param {BaseMessage} [params.userResponse] - The actual user response.\n * @param {CallbackManagerForChainRun} [params.runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<{ userResponse: BaseMessage | undefined; revisedPrediction: string; explainedPredictionErrors: Array<string>; }>} A promise that resolves to an object containing the actual user response, the revised prediction, and the explained prediction errors.\n *\n * @throws {Error} If the response from the language model does not contain the expected keys: 'violationExplanation', 'explainedPredictionErrors', and 'accuratePrediction'.\n */\n private async getPredictionViolations({\n userPredictions,\n userResponse,\n runManager,\n }: {\n userPredictions: PredictNextUserMessageResponse;\n userResponse?: BaseMessage;\n runManager?: CallbackManagerForChainRun;\n }): Promise<GetPredictionViolationsResponse> {\n const llmWithFunctions = this.llm\n .bindTools([PREDICTION_VIOLATIONS_FUNCTION])\n .withConfig({\n function_call: { name: PREDICTION_VIOLATIONS_FUNCTION.name },\n });\n\n const chain = PREDICTION_VIOLATIONS_PROMPT.pipe(llmWithFunctions).pipe(\n this.jsonOutputParser\n );\n\n if (typeof userResponse?.content !== \"string\") {\n throw new Error(\"This chain does not support non-string model output.\");\n }\n const res = (await chain.invoke(\n {\n predicted_output: userPredictions.predictedUserMessage,\n actual_output: userResponse?.content ?? \"\",\n user_insights: userPredictions.insights.join(\"\\n\"),\n },\n runManager?.getChild(\"prediction_violations\")\n )) as Awaited<{\n violationExplanation: string;\n explainedPredictionErrors: Array<string>;\n accuratePrediction: boolean;\n }>;\n\n // Generate a revised prediction based on violations.\n const revisedPrediction = await this.generateRevisedPrediction({\n originalPrediction: userPredictions.predictedUserMessage,\n explainedPredictionErrors: res.explainedPredictionErrors,\n userInsights: userPredictions.insights,\n runManager,\n });\n\n return {\n userResponse,\n revisedPrediction,\n explainedPredictionErrors: res.explainedPredictionErrors,\n };\n }\n\n /**\n * This method generates a revised prediction based on the original prediction, explained prediction errors, and user insights.\n *\n * @param {Object} params - The parameters for the method.\n * @param {string} params.originalPrediction - The original prediction made by the model.\n * @param {Array<string>} params.explainedPredictionErrors - An array of explained prediction errors.\n * @param {Array<string>} params.userInsights - An array of insights about the user.\n * @param {CallbackManagerForChainRun} [params.runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<string>} A promise that resolves to a revised prediction.\n */\n private async generateRevisedPrediction({\n originalPrediction,\n explainedPredictionErrors,\n userInsights,\n runManager,\n }: {\n originalPrediction: string;\n explainedPredictionErrors: Array<string>;\n userInsights: Array<string>;\n runManager?: CallbackManagerForChainRun;\n }): Promise<string> {\n const revisedPredictionChain = GENERATE_REVISED_PREDICTION_PROMPT.pipe(\n this.llm\n ).pipe(this.stringOutputParser);\n\n const revisedPredictionRes = await revisedPredictionChain.invoke(\n {\n prediction: originalPrediction,\n explained_prediction_errors: explainedPredictionErrors.join(\"\\n\"),\n user_insights: userInsights.join(\"\\n\"),\n },\n runManager?.getChild(\"prediction_revision\")\n );\n\n return revisedPredictionRes;\n }\n\n /**\n * This method generates facts or insights about the user based on the revised prediction, explained prediction errors, and the user's response.\n *\n * @param {Object} params - The parameters for the method.\n * @param {BaseMessage} [params.userResponse] - The actual user response.\n * @param {Object} params.predictions - The revised prediction and explained prediction errors.\n * @param {string} params.predictions.revisedPrediction - The revised prediction made by the model.\n * @param {Array<string>} params.predictions.explainedPredictionErrors - An array of explained prediction errors.\n * @param {CallbackManagerForChainRun} [params.runManager] - Optional callback manager for the chain run.\n *\n * @returns {Promise<string>} A promise that resolves to a string containing the generated facts or insights about the user.\n */\n private async generateFacts({\n userResponse,\n predictions,\n runManager,\n }: {\n userResponse?: BaseMessage;\n /**\n * Optional if the prediction was accurate.\n */\n predictions: {\n revisedPrediction: string;\n explainedPredictionErrors: Array<string>;\n };\n runManager?: CallbackManagerForChainRun;\n }): Promise<string> {\n const chain = GENERATE_FACTS_PROMPT.pipe(this.llm).pipe(\n this.stringOutputParser\n );\n\n if (typeof userResponse?.content !== \"string\") {\n throw new Error(\"This chain does not support non-string model output.\");\n }\n const res = await chain.invoke(\n {\n prediction_violations: predictions.explainedPredictionErrors.join(\"\\n\"),\n prediction: predictions.revisedPrediction,\n user_message: userResponse?.content ?? \"\",\n },\n runManager?.getChild(\"generate_facts\")\n );\n\n return res;\n }\n\n /**\n * Static method that creates a ViolationOfExpectationsChain instance from a\n * ChatOpenAI and retriever. It also accepts optional options\n * to customize the chain.\n *\n * @param llm The ChatOpenAI instance.\n * @param retriever The retriever used for similarity search.\n * @param options Optional options to customize the chain.\n *\n * @returns A new instance of ViolationOfExpectationsChain.\n */\n static fromLLM(\n llm: ChatOpenAI,\n retriever: BaseRetrieverInterface,\n options?: Partial<\n Omit<ViolationOfExpectationsChainInput, \"llm\" | \"retriever\">\n >\n ): ViolationOfExpectationsChain {\n return new this({\n retriever,\n llm,\n ...options,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;AA6CA,IAAa,+BAAb,cACU,UAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,aAAqB;AACnB,SAAO;;CAGT,iBAAiB;CAEjB,cAAc;CAEd,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,eAAe;;CAG9B,IAAI,aAAa;AACf,SAAO,CAAC,KAAK,YAAY;;CAG3B;CAEA;CAEA;CAEA;CAEA,YAAY,QAA2C;AACrD,QAAM,OAAO;AACb,OAAK,YAAY,OAAO;AACxB,OAAK,MAAM,OAAO;AAClB,OAAK,mBAAmB,IAAI,2BAA2B;AACvD,OAAK,qBAAqB,IAAI,oBAAoB;;CAGpD,qBAAqB,aAAoC;AACvD,SAAO,YACJ,KAAK,gBAAgB;AACpB,OAAI,YAAY,UAAU,KAAK,QAC7B,QAAO,UAAU,YAAY;YACpB,YAAY,UAAU,KAAK,KACpC,QAAO,OAAO,YAAY;OAE1B,QAAO,GAAG,YAAY;IAExB,CACD,KAAK,KAAK;;CAGf,uBAAuB,SAAuC;AAC5D,SAAO,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC;;;;;;;;;;;;;;;;;;CAmB9B,0BAA0B,aAAkD;EAC1E,MAAM,WAAiC,EAAE;EACzC,MAAM,YAA2B,EAAE;AAEnC,cAAY,SAAS,MAAM,UAAU;AACnC,aAAU,KAAK,KAAK;AACpB,OAAI,KAAK,UAAU,KAAK,MAAM;IAC5B,IAAI,eAAwC,YAAY,QAAQ;AAChE,QAAI,CAAC,gBAAgB,aAAa,UAAU,KAAK,QAC/C,gBAAe,KAAA;AAGjB,aAAS,KAAK;KACZ,iBAAiB;KACjB,cAAc,eACV,IAAI,aAAa,aAAa,GAC9B,KAAA;KACL,CAAC;;IAEJ;AAEF,SAAO;;;;;;;;;;;;;;;;;;;;;CAsBT,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,kBAAkB,QAC3B,OAAM,IAAI,MAAM,oBAAoB,KAAK,eAAe,YAAY;EAGtE,MAAM,cAAyB,OAAO,KAAK;AAK3C,MAAI,CAH8B,YAAY,OAAO,YACnD,cAAc,QAAQ,CACvB,CAEC,OAAM,IAAI,MAAM,gDAAgD;EAGlE,MAAM,gBAAgB,KAAK,0BACzB,YACD;EAGD,MAAM,kBAAkB,MAAM,QAAQ,IACpC,cAAc,IAAI,OAAO,sBAAsB;GAC7C,iBAAiB,MAAM,KAAK,uBAC1B,iBAAiB,gBAClB;GACD,cAAc,iBAAiB;GAC/B;GACD,EAAE,CACJ;EAID,MAAM,uBAAuB,MAAM,QAAQ,IACzC,gBAAgB,KAAK,eACnB,KAAK,wBAAwB;GAC3B,iBAAiB,WAAW;GAC5B,cAAc,WAAW;GACzB;GACD,CAAC,CACH,CACF;AAeD,SAAO,EACL,UAbe,MAAM,QAAQ,IAC7B,qBAAqB,KAAK,cACxB,KAAK,cAAc;GACjB,cAAc,UAAU;GACxB,aAAa;IACX,mBAAmB,UAAU;IAC7B,2BAA2B,UAAU;IACtC;GACF,CAAC,CACH,CACF,EAIA;;;;;;;;;;;;CAaH,MAAc,uBACZ,aACA,YACyC;EACzC,MAAM,gBAAgB,KAAK,qBAAqB,YAAY;EAE5D,MAAM,mBAAmB,KAAK,IAC3B,UAAU,CAAC,mCAAmC,CAAC,CAC/C,WAAW,EACV,eAAe,EAAE,MAAM,mCAAmC,MAAM,EACjE,CAAC;EAMJ,MAAM,MAAM,MAJE,iCAAiC,KAAK,iBAAiB,CAAC,KACpE,KAAK,iBACN,CAEuB,OACtB,EACE,cAAc,eACf,EACD,YAAY,SAAS,aAAa,CACnC;AAED,MACE,EACE,eAAe,OACf,0BAA0B,OAC1B,cAAc,KAGhB,OAAM,IAAI,MAAM,8BAA8B,KAAK,UAAU,IAAI,GAAG;EAGtE,MAAM,qBAAqB;EAG3B,MAAM,gBAAgB,MAAM,KAAK,yBAC/B,mBAAmB,SACpB;EACD,MAAM,eAAe,KAAK,uBAAuB,CAC/C,GAAG,mBAAmB,UACtB,GAAG,cACJ,CAAC;AAEF,SAAO;GACL,GAAG;GACH,UAAU;GACX;;;;;;;;;CAUH,MAAc,yBACZ,UACwB;AAaxB,UAXkC,MAAM,QAAQ,IAC9C,SAAS,IAAI,OAAO,YAAY;AAE9B,WADwB,MAAM,KAAK,UAAU,OAAO,QAAQ,EACrC;IACvB,CACH,EAEyD,KACvD,aAAa,SAAS,YACxB;;;;;;;;;;;;;;;CAkBH,MAAc,wBAAwB,EACpC,iBACA,cACA,cAK2C;EAC3C,MAAM,mBAAmB,KAAK,IAC3B,UAAU,CAAC,+BAA+B,CAAC,CAC3C,WAAW,EACV,eAAe,EAAE,MAAM,+BAA+B,MAAM,EAC7D,CAAC;EAEJ,MAAM,QAAQ,6BAA6B,KAAK,iBAAiB,CAAC,KAChE,KAAK,iBACN;AAED,MAAI,OAAO,cAAc,YAAY,SACnC,OAAM,IAAI,MAAM,uDAAuD;EAEzE,MAAM,MAAO,MAAM,MAAM,OACvB;GACE,kBAAkB,gBAAgB;GAClC,eAAe,cAAc,WAAW;GACxC,eAAe,gBAAgB,SAAS,KAAK,KAAK;GACnD,EACD,YAAY,SAAS,wBAAwB,CAC9C;AAcD,SAAO;GACL;GACA,mBATwB,MAAM,KAAK,0BAA0B;IAC7D,oBAAoB,gBAAgB;IACpC,2BAA2B,IAAI;IAC/B,cAAc,gBAAgB;IAC9B;IACD,CAAC;GAKA,2BAA2B,IAAI;GAChC;;;;;;;;;;;;;CAcH,MAAc,0BAA0B,EACtC,oBACA,2BACA,cACA,cAMkB;AAclB,SAT6B,MAJE,mCAAmC,KAChE,KAAK,IACN,CAAC,KAAK,KAAK,mBAAmB,CAE2B,OACxD;GACE,YAAY;GACZ,6BAA6B,0BAA0B,KAAK,KAAK;GACjE,eAAe,aAAa,KAAK,KAAK;GACvC,EACD,YAAY,SAAS,sBAAsB,CAC5C;;;;;;;;;;;;;;CAiBH,MAAc,cAAc,EAC1B,cACA,aACA,cAWkB;EAClB,MAAM,QAAQ,sBAAsB,KAAK,KAAK,IAAI,CAAC,KACjD,KAAK,mBACN;AAED,MAAI,OAAO,cAAc,YAAY,SACnC,OAAM,IAAI,MAAM,uDAAuD;AAWzE,SATY,MAAM,MAAM,OACtB;GACE,uBAAuB,YAAY,0BAA0B,KAAK,KAAK;GACvE,YAAY,YAAY;GACxB,cAAc,cAAc,WAAW;GACxC,EACD,YAAY,SAAS,iBAAiB,CACvC;;;;;;;;;;;;;CAgBH,OAAO,QACL,KACA,WACA,SAG8B;AAC9B,SAAO,IAAI,KAAK;GACd;GACA;GACA,GAAG;GACJ,CAAC"}
@@ -1,6 +1,5 @@
1
- const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
1
+ require("../../../_virtual/_rolldown/runtime.cjs");
2
2
  let _langchain_core_prompts = require("@langchain/core/prompts");
3
-
4
3
  //#region src/experimental/chains/violation_of_expectations/violation_of_expectations_prompt.ts
5
4
  const PREDICT_NEXT_USER_MESSAGE_PROMPT = /* @__PURE__ */ _langchain_core_prompts.PromptTemplate.fromTemplate(`
6
5
  You have been tasked with coming up with insights and data-points based on a chat history between a human and an AI.
@@ -43,10 +42,10 @@ Revised prediction: {prediction}
43
42
  Actual user message: {user_message}
44
43
  --------
45
44
  Relevant fact:`);
46
-
47
45
  //#endregion
48
46
  exports.GENERATE_FACTS_PROMPT = GENERATE_FACTS_PROMPT;
49
47
  exports.GENERATE_REVISED_PREDICTION_PROMPT = GENERATE_REVISED_PREDICTION_PROMPT;
50
48
  exports.PREDICTION_VIOLATIONS_PROMPT = PREDICTION_VIOLATIONS_PROMPT;
51
49
  exports.PREDICT_NEXT_USER_MESSAGE_PROMPT = PREDICT_NEXT_USER_MESSAGE_PROMPT;
50
+
52
51
  //# sourceMappingURL=violation_of_expectations_prompt.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"violation_of_expectations_prompt.cjs","names":[],"sources":["../../../../src/experimental/chains/violation_of_expectations/violation_of_expectations_prompt.ts"],"sourcesContent":["import { PromptTemplate } from \"@langchain/core/prompts\";\n\nexport const PREDICT_NEXT_USER_MESSAGE_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`\nYou have been tasked with coming up with insights and data-points based on a chat history between a human and an AI.\nGiven the user's chat history provide the following:\n- Concise reasoning about the users internal mental state.\n- Your prediction on how they will respond to the AI's most recent message.\n- A concise list of any additional insights that would be useful to improve prediction.\n--------\nChat History: {chat_history}`);\n\nexport const PREDICTION_VIOLATIONS_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`You have been given a prediction and an actual message from a human and AI conversation.\nUsing the prediction, actual message, and additional user insights, generate the following:\n- How exactly was the original prediction violated? Which parts were wrong? State the exact differences.\n- If there were errors with the prediction, what were they and why?\n--------\nPredicted Output: {predicted_output}\n--------\nActual Output: {actual_output}\n--------\nUser Insights: {user_insights}\n--------\n`);\n\nexport const GENERATE_REVISED_PREDICTION_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`\nYou have been tasked with revising a prediction on what a user might say in a chat conversation.\n--------\nYour previous prediction: {prediction}\n--------\nWays in which your prediction was off: {explained_prediction_errors}\n--------\nKey insights to the user: {user_insights}\n--------\nGiven the above, revise your prediction to be more accurate.\nRevised Prediction:`);\n\nexport const GENERATE_FACTS_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`\nGiven a user message, an LLM generated prediction of what that message might be, and a list of violations which the prediction made compared to the actual message, generate a fact about the user, relevant to the users message.\n--------\nPrediction violations: {prediction_violations}\n--------\nRevised prediction: {prediction}\n--------\nActual user message: {user_message}\n--------\nRelevant fact:`);\n"],"mappings":";;;;AAEA,MAAa,mCACK,uDAAe,aAAa;;;;;;;8BAOhB;AAE9B,MAAa,+BACK,uDAAe,aAAa;;;;;;;;;;;EAW5C;AAEF,MAAa,qCACK,uDAAe,aAAa;;;;;;;;;;qBAUzB;AAErB,MAAa,wBACK,uDAAe,aAAa;;;;;;;;;gBAS9B"}
1
+ {"version":3,"file":"violation_of_expectations_prompt.cjs","names":[],"sources":["../../../../src/experimental/chains/violation_of_expectations/violation_of_expectations_prompt.ts"],"sourcesContent":["import { PromptTemplate } from \"@langchain/core/prompts\";\n\nexport const PREDICT_NEXT_USER_MESSAGE_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`\nYou have been tasked with coming up with insights and data-points based on a chat history between a human and an AI.\nGiven the user's chat history provide the following:\n- Concise reasoning about the users internal mental state.\n- Your prediction on how they will respond to the AI's most recent message.\n- A concise list of any additional insights that would be useful to improve prediction.\n--------\nChat History: {chat_history}`);\n\nexport const PREDICTION_VIOLATIONS_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`You have been given a prediction and an actual message from a human and AI conversation.\nUsing the prediction, actual message, and additional user insights, generate the following:\n- How exactly was the original prediction violated? Which parts were wrong? State the exact differences.\n- If there were errors with the prediction, what were they and why?\n--------\nPredicted Output: {predicted_output}\n--------\nActual Output: {actual_output}\n--------\nUser Insights: {user_insights}\n--------\n`);\n\nexport const GENERATE_REVISED_PREDICTION_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`\nYou have been tasked with revising a prediction on what a user might say in a chat conversation.\n--------\nYour previous prediction: {prediction}\n--------\nWays in which your prediction was off: {explained_prediction_errors}\n--------\nKey insights to the user: {user_insights}\n--------\nGiven the above, revise your prediction to be more accurate.\nRevised Prediction:`);\n\nexport const GENERATE_FACTS_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`\nGiven a user message, an LLM generated prediction of what that message might be, and a list of violations which the prediction made compared to the actual message, generate a fact about the user, relevant to the users message.\n--------\nPrediction violations: {prediction_violations}\n--------\nRevised prediction: {prediction}\n--------\nActual user message: {user_message}\n--------\nRelevant fact:`);\n"],"mappings":";;;AAEA,MAAa,mCACK,wCAAA,eAAe,aAAa;;;;;;;8BAOhB;AAE9B,MAAa,+BACK,wCAAA,eAAe,aAAa;;;;;;;;;;;EAW5C;AAEF,MAAa,qCACK,wCAAA,eAAe,aAAa;;;;;;;;;;qBAUzB;AAErB,MAAa,wBACK,wCAAA,eAAe,aAAa;;;;;;;;;gBAS9B"}
@@ -1,5 +1,4 @@
1
1
  import { PromptTemplate } from "@langchain/core/prompts";
2
-
3
2
  //#region src/experimental/chains/violation_of_expectations/violation_of_expectations_prompt.ts
4
3
  const PREDICT_NEXT_USER_MESSAGE_PROMPT = /* @__PURE__ */ PromptTemplate.fromTemplate(`
5
4
  You have been tasked with coming up with insights and data-points based on a chat history between a human and an AI.
@@ -42,7 +41,7 @@ Revised prediction: {prediction}
42
41
  Actual user message: {user_message}
43
42
  --------
44
43
  Relevant fact:`);
45
-
46
44
  //#endregion
47
45
  export { GENERATE_FACTS_PROMPT, GENERATE_REVISED_PREDICTION_PROMPT, PREDICTION_VIOLATIONS_PROMPT, PREDICT_NEXT_USER_MESSAGE_PROMPT };
46
+
48
47
  //# sourceMappingURL=violation_of_expectations_prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"violation_of_expectations_prompt.js","names":[],"sources":["../../../../src/experimental/chains/violation_of_expectations/violation_of_expectations_prompt.ts"],"sourcesContent":["import { PromptTemplate } from \"@langchain/core/prompts\";\n\nexport const PREDICT_NEXT_USER_MESSAGE_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`\nYou have been tasked with coming up with insights and data-points based on a chat history between a human and an AI.\nGiven the user's chat history provide the following:\n- Concise reasoning about the users internal mental state.\n- Your prediction on how they will respond to the AI's most recent message.\n- A concise list of any additional insights that would be useful to improve prediction.\n--------\nChat History: {chat_history}`);\n\nexport const PREDICTION_VIOLATIONS_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`You have been given a prediction and an actual message from a human and AI conversation.\nUsing the prediction, actual message, and additional user insights, generate the following:\n- How exactly was the original prediction violated? Which parts were wrong? State the exact differences.\n- If there were errors with the prediction, what were they and why?\n--------\nPredicted Output: {predicted_output}\n--------\nActual Output: {actual_output}\n--------\nUser Insights: {user_insights}\n--------\n`);\n\nexport const GENERATE_REVISED_PREDICTION_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`\nYou have been tasked with revising a prediction on what a user might say in a chat conversation.\n--------\nYour previous prediction: {prediction}\n--------\nWays in which your prediction was off: {explained_prediction_errors}\n--------\nKey insights to the user: {user_insights}\n--------\nGiven the above, revise your prediction to be more accurate.\nRevised Prediction:`);\n\nexport const GENERATE_FACTS_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`\nGiven a user message, an LLM generated prediction of what that message might be, and a list of violations which the prediction made compared to the actual message, generate a fact about the user, relevant to the users message.\n--------\nPrediction violations: {prediction_violations}\n--------\nRevised prediction: {prediction}\n--------\nActual user message: {user_message}\n--------\nRelevant fact:`);\n"],"mappings":";;;AAEA,MAAa,mCACK,+BAAe,aAAa;;;;;;;8BAOhB;AAE9B,MAAa,+BACK,+BAAe,aAAa;;;;;;;;;;;EAW5C;AAEF,MAAa,qCACK,+BAAe,aAAa;;;;;;;;;;qBAUzB;AAErB,MAAa,wBACK,+BAAe,aAAa;;;;;;;;;gBAS9B"}
1
+ {"version":3,"file":"violation_of_expectations_prompt.js","names":[],"sources":["../../../../src/experimental/chains/violation_of_expectations/violation_of_expectations_prompt.ts"],"sourcesContent":["import { PromptTemplate } from \"@langchain/core/prompts\";\n\nexport const PREDICT_NEXT_USER_MESSAGE_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`\nYou have been tasked with coming up with insights and data-points based on a chat history between a human and an AI.\nGiven the user's chat history provide the following:\n- Concise reasoning about the users internal mental state.\n- Your prediction on how they will respond to the AI's most recent message.\n- A concise list of any additional insights that would be useful to improve prediction.\n--------\nChat History: {chat_history}`);\n\nexport const PREDICTION_VIOLATIONS_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`You have been given a prediction and an actual message from a human and AI conversation.\nUsing the prediction, actual message, and additional user insights, generate the following:\n- How exactly was the original prediction violated? Which parts were wrong? State the exact differences.\n- If there were errors with the prediction, what were they and why?\n--------\nPredicted Output: {predicted_output}\n--------\nActual Output: {actual_output}\n--------\nUser Insights: {user_insights}\n--------\n`);\n\nexport const GENERATE_REVISED_PREDICTION_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`\nYou have been tasked with revising a prediction on what a user might say in a chat conversation.\n--------\nYour previous prediction: {prediction}\n--------\nWays in which your prediction was off: {explained_prediction_errors}\n--------\nKey insights to the user: {user_insights}\n--------\nGiven the above, revise your prediction to be more accurate.\nRevised Prediction:`);\n\nexport const GENERATE_FACTS_PROMPT =\n /* #__PURE__ */ PromptTemplate.fromTemplate(`\nGiven a user message, an LLM generated prediction of what that message might be, and a list of violations which the prediction made compared to the actual message, generate a fact about the user, relevant to the users message.\n--------\nPrediction violations: {prediction_violations}\n--------\nRevised prediction: {prediction}\n--------\nActual user message: {user_message}\n--------\nRelevant fact:`);\n"],"mappings":";;AAEA,MAAa,mCACK,+BAAe,aAAa;;;;;;;8BAOhB;AAE9B,MAAa,+BACK,+BAAe,aAAa;;;;;;;;;;;EAW5C;AAEF,MAAa,qCACK,+BAAe,aAAa;;;;;;;;;;qBAUzB;AAErB,MAAa,wBACK,+BAAe,aAAa;;;;;;;;;gBAS9B"}
@@ -1,8 +1,7 @@
1
- const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
2
- const require_base = require('../../chains/base.cjs');
3
- const require_llm_chain = require('../../chains/llm_chain.cjs');
1
+ require("../../_virtual/_rolldown/runtime.cjs");
2
+ const require_base = require("../../chains/base.cjs");
3
+ const require_llm_chain = require("../../chains/llm_chain.cjs");
4
4
  let _langchain_core_prompts = require("@langchain/core/prompts");
5
-
6
5
  //#region src/experimental/generative_agents/generative_agent.ts
7
6
  /**
8
7
  * Implementation of a generative agent that can learn and form new memories over
@@ -300,7 +299,7 @@ ${this.summary}`;
300
299
  return this.longTermMemory.addMemory(memoryContent, now, metadata, callbacks);
301
300
  }
302
301
  };
303
-
304
302
  //#endregion
305
303
  exports.GenerativeAgent = GenerativeAgent;
304
+
306
305
  //# sourceMappingURL=generative_agent.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"generative_agent.cjs","names":["BaseChain","LLMChain","PromptTemplate"],"sources":["../../../src/experimental/generative_agents/generative_agent.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n CallbackManagerForChainRun,\n Callbacks,\n} from \"@langchain/core/callbacks/manager\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport { GenerativeAgentMemory } from \"./generative_agent_memory.js\";\nimport { BaseChain } from \"../../chains/base.js\";\n\n/**\n * Configuration for the GenerativeAgent class. Defines the character's\n * name, optional age, permanent traits, status, verbosity, and summary\n * refresh seconds.\n */\nexport type GenerativeAgentConfig = {\n name: string;\n age?: number;\n traits: string;\n status: string;\n verbose?: boolean;\n summaryRefreshSeconds?: number;\n // dailySummaries?: string[];\n};\n\n/**\n * Implementation of a generative agent that can learn and form new memories over\n * time. It extends the BaseChain class, which is a generic\n * sequence of calls to components, including other chains.\n * @example\n * ```typescript\n * const tommie: GenerativeAgent = new GenerativeAgent(\n * new OpenAI({ temperature: 0.9, maxTokens: 1500 }),\n * new GenerativeAgentMemory(\n * new ChatOpenAI({ model: \"gpt-4o-mini\" }),\n * new TimeWeightedVectorStoreRetriever({\n * vectorStore: new MemoryVectorStore(new OpenAIEmbeddings()),\n * otherScoreKeys: [\"importance\"],\n * k: 15,\n * }),\n * { reflectionThreshold: 8 },\n * ),\n * {\n * name: \"Tommie\",\n * age: 25,\n * traits: \"anxious, likes design, talkative\",\n * status: \"looking for a job\",\n * },\n * );\n *\n * await tommie.addMemory(\n * \"Tommie remembers his dog, Bruno, from when he was a kid\",\n * new Date(),\n * );\n * const summary = await tommie.getSummary({ forceRefresh: true });\n * const response = await tommie.generateDialogueResponse(\n * \"USER says Hello Tommie, how are you today?\",\n * );\n * ```\n */\nexport class GenerativeAgent extends BaseChain {\n static lc_name() {\n return \"GenerativeAgent\";\n }\n\n // a character with memory and innate characterisitics\n name: string; // the character's name\n\n age?: number; // the optional age of the character\n\n traits: string; // permanent traits to ascribe to the character\n\n status: string; // the traits of the character you wish not to change\n\n longTermMemory: GenerativeAgentMemory;\n\n llm: BaseLanguageModelInterface; // the underlying language model\n\n verbose: boolean; // false\n\n private summary: string; // stateful self-summary generated via reflection on the character's memory.\n\n private summaryRefreshSeconds = 3600;\n\n private lastRefreshed: Date; // the last time the character's summary was regenerated\n\n // TODO: Add support for daily summaries\n // private dailySummaries: string[] = []; // summary of the events in the plan that the agent took.\n\n _chainType(): string {\n return \"generative_agent_executor\";\n }\n\n get inputKeys(): string[] {\n return [\"observation\", \"suffix\", \"now\"];\n }\n\n get outputKeys(): string[] {\n return [\"output\", \"continue_dialogue\"];\n }\n\n constructor(\n llm: BaseLanguageModelInterface,\n longTermMemory: GenerativeAgentMemory,\n config: GenerativeAgentConfig\n ) {\n super();\n this.llm = llm;\n this.longTermMemory = longTermMemory;\n this.name = config.name;\n this.age = config.age;\n this.traits = config.traits;\n this.status = config.status;\n this.verbose = config.verbose ?? this.verbose;\n this.summary = \"\";\n this.summaryRefreshSeconds =\n config.summaryRefreshSeconds ?? this.summaryRefreshSeconds;\n this.lastRefreshed = new Date();\n // this.dailySummaries = config.dailySummaries ?? this.dailySummaries;\n }\n\n // LLM methods\n /**\n * Parses a newline-separated string into a list of strings.\n * @param text The string to parse.\n * @returns An array of strings parsed from the input text.\n */\n parseList(text: string): string[] {\n // parse a newline-seperated string into a list of strings\n const lines: string[] = text.trim().split(\"\\n\");\n const result: string[] = lines.map((line: string) =>\n line.replace(/^\\s*\\d+\\.\\s*/, \"\").trim()\n );\n return result;\n }\n\n /**\n * Creates a new LLMChain with the given prompt and the agent's language\n * model, verbosity, output key, and memory.\n * @param prompt The prompt to use for the LLMChain.\n * @returns A new LLMChain instance.\n */\n chain(prompt: PromptTemplate): LLMChain {\n const chain = new LLMChain({\n llm: this.llm,\n prompt,\n verbose: this.verbose,\n outputKey: \"output\", // new\n memory: this.longTermMemory,\n });\n return chain;\n }\n\n /**\n * Extracts the observed entity from the given observation.\n * @param observation The observation to extract the entity from.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The extracted entity as a string.\n */\n async getEntityFromObservations(\n observation: string,\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const prompt = PromptTemplate.fromTemplate(\n \"What is the observed entity in the following observation? {observation}\" +\n \"\\nEntity=\"\n );\n\n const result = await this.chain(prompt).call(\n {\n observation,\n },\n runManager?.getChild(\"entity_extractor\")\n );\n\n return result.output;\n }\n\n /**\n * Extracts the action of the given entity from the given observation.\n * @param observation The observation to extract the action from.\n * @param entityName The name of the entity to extract the action for.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The extracted action as a string.\n */\n async getEntityAction(\n observation: string,\n entityName: string,\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const prompt = PromptTemplate.fromTemplate(\n \"What is the {entity} doing in the following observation? {observation}\" +\n \"\\nThe {entity} is\"\n );\n\n const result = await this.chain(prompt).call(\n {\n entity: entityName,\n observation,\n },\n runManager?.getChild(\"entity_action_extractor\")\n );\n const trimmedResult = result.output.trim();\n return trimmedResult;\n }\n\n /**\n * Summarizes memories that are most relevant to an observation.\n * @param observation The observation to summarize related memories for.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The summarized memories as a string.\n */\n async summarizeRelatedMemories(\n observation: string,\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n // summarize memories that are most relevant to an observation\n const prompt = PromptTemplate.fromTemplate(\n `\n{q1}?\nContext from memory:\n{relevant_memories}\nRelevant context:`\n );\n const entityName = await this.getEntityFromObservations(\n observation,\n runManager\n );\n const entityAction = await this.getEntityAction(\n observation,\n entityName,\n runManager\n );\n const q1 = `What is the relationship between ${this.name} and ${entityName}`;\n const q2 = `${entityName} is ${entityAction}`;\n const response = await this.chain(prompt).call(\n {\n q1,\n queries: [q1, q2],\n },\n runManager?.getChild(\"entity_relationships\")\n );\n\n return response.output.trim(); // added output\n }\n\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const { observation, suffix, now } = values;\n // react to a given observation or dialogue act\n const prompt = PromptTemplate.fromTemplate(\n `{agent_summary_description}` +\n `\\nIt is {current_time}.` +\n `\\n{agent_name}'s status: {agent_status}` +\n `\\nSummary of relevant context from {agent_name}'s memory:` +\n \"\\n{relevant_memories}\" +\n `\\nMost recent observations: {most_recent_memories}` +\n `\\nObservation: {observation}` +\n `\\n\\n${suffix}`\n );\n\n const agentSummaryDescription = await this.getSummary({}, runManager); // now = now in param\n const relevantMemoriesStr = await this.summarizeRelatedMemories(\n observation,\n runManager\n );\n const currentTime = (now || new Date()).toLocaleString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n hour12: true,\n });\n const chainInputs: ChainValues = {\n agent_summary_description: agentSummaryDescription,\n current_time: currentTime,\n agent_name: this.name,\n observation,\n agent_status: this.status,\n most_recent_memories: \"\",\n };\n\n chainInputs[this.longTermMemory.getRelevantMemoriesKey()] =\n relevantMemoriesStr;\n\n const consumedTokens = await this.llm.getNumTokens(\n await prompt.format({ ...chainInputs })\n );\n\n chainInputs[this.longTermMemory.getMostRecentMemoriesTokenKey()] =\n consumedTokens;\n const response = await this.chain(prompt).call(\n chainInputs,\n runManager?.getChild(\"reaction_from_summary\")\n );\n\n const rawOutput = response.output;\n let output = rawOutput;\n let continue_dialogue = false;\n\n if (rawOutput.includes(\"REACT:\")) {\n const reaction = this._cleanResponse(rawOutput.split(\"REACT:\").pop());\n await this.addMemory(\n `${this.name} observed ${observation} and reacted by ${reaction}`,\n now,\n {},\n runManager?.getChild(\"memory\")\n );\n output = `${reaction}`;\n continue_dialogue = false;\n } else if (rawOutput.includes(\"SAY:\")) {\n const saidValue = this._cleanResponse(rawOutput.split(\"SAY:\").pop());\n await this.addMemory(\n `${this.name} observed ${observation} and said ${saidValue}`,\n now,\n {},\n runManager?.getChild(\"memory\")\n );\n output = `${this.name} said ${saidValue}`;\n continue_dialogue = true;\n } else if (rawOutput.includes(\"GOODBYE:\")) {\n const farewell = this._cleanResponse(\n rawOutput.split(\"GOODBYE:\").pop() ?? \"\"\n );\n await this.addMemory(\n `${this.name} observed ${observation} and said ${farewell}`,\n now,\n {},\n runManager?.getChild(\"memory\")\n );\n output = `${this.name} said ${farewell}`;\n continue_dialogue = false;\n }\n\n return { output, continue_dialogue };\n }\n\n private _cleanResponse(text: string | undefined): string {\n if (text === undefined) {\n return \"\";\n }\n const regex = new RegExp(`^${this.name} `);\n return text.replace(regex, \"\").trim();\n }\n\n /**\n * Generates a reaction to the given observation.\n * @param observation The observation to generate a reaction for.\n * @param now Optional current date.\n * @returns A boolean indicating whether to continue the dialogue and the output string.\n */\n async generateReaction(\n observation: string,\n now?: Date\n ): Promise<[boolean, string]> {\n const callToActionTemplate: string =\n `Should {agent_name} react to the observation, and if so,` +\n ` what would be an appropriate reaction? Respond in one line.` +\n ` If the action is to engage in dialogue, write:\\nSAY: \"what to say\"` +\n ` \\notherwise, write:\\nREACT: {agent_name}'s reaction (if anything).` +\n ` \\nEither do nothing, react, or say something but not both.\\n\\n`;\n\n const { output, continue_dialogue } = await this.call({\n observation,\n suffix: callToActionTemplate,\n now,\n });\n return [continue_dialogue, output];\n }\n\n /**\n * Generates a dialogue response to the given observation.\n * @param observation The observation to generate a dialogue response for.\n * @param now Optional current date.\n * @returns A boolean indicating whether to continue the dialogue and the output string.\n */\n async generateDialogueResponse(\n observation: string,\n now?: Date\n ): Promise<[boolean, string]> {\n const callToActionTemplate = `What would ${this.name} say? To end the conversation, write: GOODBYE: \"what to say\". Otherwise to continue the conversation, write: SAY: \"what to say next\"\\n\\n`;\n const { output, continue_dialogue } = await this.call({\n observation,\n suffix: callToActionTemplate,\n now,\n });\n return [continue_dialogue, output];\n }\n\n // Agent stateful' summary methods\n // Each dialog or response prompt includes a header\n // summarizing the agent's self-description. This is\n // updated periodically through probing it's memories\n /**\n * Gets the agent's summary, which includes the agent's name, age, traits,\n * and a summary of the agent's core characteristics. The summary is\n * updated periodically through probing the agent's memories.\n * @param config Optional configuration object with current date and a boolean to force refresh.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The agent's summary as a string.\n */\n async getSummary(\n config?: {\n now?: Date;\n forceRefresh?: boolean;\n },\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const { now = new Date(), forceRefresh = false } = config ?? {};\n\n const sinceRefresh = Math.floor(\n (now.getTime() - this.lastRefreshed.getTime()) / 1000\n );\n\n if (\n !this.summary ||\n sinceRefresh >= this.summaryRefreshSeconds ||\n forceRefresh\n ) {\n this.summary = await this.computeAgentSummary(runManager);\n this.lastRefreshed = now;\n }\n\n let age;\n if (this.age) {\n age = this.age;\n } else {\n age = \"N/A\";\n }\n\n return `Name: ${this.name} (age: ${age})\nInnate traits: ${this.traits}\n${this.summary}`;\n }\n\n /**\n * Computes the agent's summary by summarizing the agent's core\n * characteristics given the agent's relevant memories.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The computed summary as a string.\n */\n async computeAgentSummary(\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const prompt = PromptTemplate.fromTemplate(\n \"How would you summarize {name}'s core characteristics given the following statements:\\n\" +\n \"----------\" +\n \"{relevant_memories}\" +\n \"----------\" +\n \"Do not embellish.\" +\n \"\\n\\nSummary: \"\n );\n // the agent seeks to think about their core characterisitics\n const result = await this.chain(prompt).call(\n {\n name: this.name,\n queries: [`${this.name}'s core characteristics`],\n },\n runManager?.getChild(\"compute_agent_summary\")\n );\n return result.output.trim();\n }\n\n /**\n * Returns a full header of the agent's status, summary, and current time.\n * @param config Optional configuration object with current date and a boolean to force refresh.\n * @returns The full header as a string.\n */\n getFullHeader(\n config: {\n now?: Date;\n forceRefresh?: boolean;\n } = {}\n ): string {\n const { now = new Date(), forceRefresh = false } = config;\n // return a full header of the agent's status, summary, and current time.\n const summary = this.getSummary({ now, forceRefresh });\n const currentTimeString = now.toLocaleString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n hour12: true,\n });\n return `${summary}\\nIt is ${currentTimeString}.\\n${this.name}'s status: ${this.status}`;\n }\n\n /**\n * Adds a memory to the agent's long-term memory.\n * @param memoryContent The content of the memory to add.\n * @param now Optional current date.\n * @param metadata Optional metadata for the memory.\n * @param callbacks Optional Callbacks instance.\n * @returns The result of adding the memory to the agent's long-term memory.\n */\n async addMemory(\n memoryContent: string,\n now?: Date,\n metadata?: Record<string, unknown>,\n callbacks?: Callbacks\n ) {\n return this.longTermMemory.addMemory(\n memoryContent,\n now,\n metadata,\n callbacks\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"generative_agent.cjs","names":["BaseChain","LLMChain","PromptTemplate"],"sources":["../../../src/experimental/generative_agents/generative_agent.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n CallbackManagerForChainRun,\n Callbacks,\n} from \"@langchain/core/callbacks/manager\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport { GenerativeAgentMemory } from \"./generative_agent_memory.js\";\nimport { BaseChain } from \"../../chains/base.js\";\n\n/**\n * Configuration for the GenerativeAgent class. Defines the character's\n * name, optional age, permanent traits, status, verbosity, and summary\n * refresh seconds.\n */\nexport type GenerativeAgentConfig = {\n name: string;\n age?: number;\n traits: string;\n status: string;\n verbose?: boolean;\n summaryRefreshSeconds?: number;\n // dailySummaries?: string[];\n};\n\n/**\n * Implementation of a generative agent that can learn and form new memories over\n * time. It extends the BaseChain class, which is a generic\n * sequence of calls to components, including other chains.\n * @example\n * ```typescript\n * const tommie: GenerativeAgent = new GenerativeAgent(\n * new OpenAI({ temperature: 0.9, maxTokens: 1500 }),\n * new GenerativeAgentMemory(\n * new ChatOpenAI({ model: \"gpt-4o-mini\" }),\n * new TimeWeightedVectorStoreRetriever({\n * vectorStore: new MemoryVectorStore(new OpenAIEmbeddings()),\n * otherScoreKeys: [\"importance\"],\n * k: 15,\n * }),\n * { reflectionThreshold: 8 },\n * ),\n * {\n * name: \"Tommie\",\n * age: 25,\n * traits: \"anxious, likes design, talkative\",\n * status: \"looking for a job\",\n * },\n * );\n *\n * await tommie.addMemory(\n * \"Tommie remembers his dog, Bruno, from when he was a kid\",\n * new Date(),\n * );\n * const summary = await tommie.getSummary({ forceRefresh: true });\n * const response = await tommie.generateDialogueResponse(\n * \"USER says Hello Tommie, how are you today?\",\n * );\n * ```\n */\nexport class GenerativeAgent extends BaseChain {\n static lc_name() {\n return \"GenerativeAgent\";\n }\n\n // a character with memory and innate characterisitics\n name: string; // the character's name\n\n age?: number; // the optional age of the character\n\n traits: string; // permanent traits to ascribe to the character\n\n status: string; // the traits of the character you wish not to change\n\n longTermMemory: GenerativeAgentMemory;\n\n llm: BaseLanguageModelInterface; // the underlying language model\n\n verbose: boolean; // false\n\n private summary: string; // stateful self-summary generated via reflection on the character's memory.\n\n private summaryRefreshSeconds = 3600;\n\n private lastRefreshed: Date; // the last time the character's summary was regenerated\n\n // TODO: Add support for daily summaries\n // private dailySummaries: string[] = []; // summary of the events in the plan that the agent took.\n\n _chainType(): string {\n return \"generative_agent_executor\";\n }\n\n get inputKeys(): string[] {\n return [\"observation\", \"suffix\", \"now\"];\n }\n\n get outputKeys(): string[] {\n return [\"output\", \"continue_dialogue\"];\n }\n\n constructor(\n llm: BaseLanguageModelInterface,\n longTermMemory: GenerativeAgentMemory,\n config: GenerativeAgentConfig\n ) {\n super();\n this.llm = llm;\n this.longTermMemory = longTermMemory;\n this.name = config.name;\n this.age = config.age;\n this.traits = config.traits;\n this.status = config.status;\n this.verbose = config.verbose ?? this.verbose;\n this.summary = \"\";\n this.summaryRefreshSeconds =\n config.summaryRefreshSeconds ?? this.summaryRefreshSeconds;\n this.lastRefreshed = new Date();\n // this.dailySummaries = config.dailySummaries ?? this.dailySummaries;\n }\n\n // LLM methods\n /**\n * Parses a newline-separated string into a list of strings.\n * @param text The string to parse.\n * @returns An array of strings parsed from the input text.\n */\n parseList(text: string): string[] {\n // parse a newline-seperated string into a list of strings\n const lines: string[] = text.trim().split(\"\\n\");\n const result: string[] = lines.map((line: string) =>\n line.replace(/^\\s*\\d+\\.\\s*/, \"\").trim()\n );\n return result;\n }\n\n /**\n * Creates a new LLMChain with the given prompt and the agent's language\n * model, verbosity, output key, and memory.\n * @param prompt The prompt to use for the LLMChain.\n * @returns A new LLMChain instance.\n */\n chain(prompt: PromptTemplate): LLMChain {\n const chain = new LLMChain({\n llm: this.llm,\n prompt,\n verbose: this.verbose,\n outputKey: \"output\", // new\n memory: this.longTermMemory,\n });\n return chain;\n }\n\n /**\n * Extracts the observed entity from the given observation.\n * @param observation The observation to extract the entity from.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The extracted entity as a string.\n */\n async getEntityFromObservations(\n observation: string,\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const prompt = PromptTemplate.fromTemplate(\n \"What is the observed entity in the following observation? {observation}\" +\n \"\\nEntity=\"\n );\n\n const result = await this.chain(prompt).call(\n {\n observation,\n },\n runManager?.getChild(\"entity_extractor\")\n );\n\n return result.output;\n }\n\n /**\n * Extracts the action of the given entity from the given observation.\n * @param observation The observation to extract the action from.\n * @param entityName The name of the entity to extract the action for.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The extracted action as a string.\n */\n async getEntityAction(\n observation: string,\n entityName: string,\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const prompt = PromptTemplate.fromTemplate(\n \"What is the {entity} doing in the following observation? {observation}\" +\n \"\\nThe {entity} is\"\n );\n\n const result = await this.chain(prompt).call(\n {\n entity: entityName,\n observation,\n },\n runManager?.getChild(\"entity_action_extractor\")\n );\n const trimmedResult = result.output.trim();\n return trimmedResult;\n }\n\n /**\n * Summarizes memories that are most relevant to an observation.\n * @param observation The observation to summarize related memories for.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The summarized memories as a string.\n */\n async summarizeRelatedMemories(\n observation: string,\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n // summarize memories that are most relevant to an observation\n const prompt = PromptTemplate.fromTemplate(\n `\n{q1}?\nContext from memory:\n{relevant_memories}\nRelevant context:`\n );\n const entityName = await this.getEntityFromObservations(\n observation,\n runManager\n );\n const entityAction = await this.getEntityAction(\n observation,\n entityName,\n runManager\n );\n const q1 = `What is the relationship between ${this.name} and ${entityName}`;\n const q2 = `${entityName} is ${entityAction}`;\n const response = await this.chain(prompt).call(\n {\n q1,\n queries: [q1, q2],\n },\n runManager?.getChild(\"entity_relationships\")\n );\n\n return response.output.trim(); // added output\n }\n\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const { observation, suffix, now } = values;\n // react to a given observation or dialogue act\n const prompt = PromptTemplate.fromTemplate(\n `{agent_summary_description}` +\n `\\nIt is {current_time}.` +\n `\\n{agent_name}'s status: {agent_status}` +\n `\\nSummary of relevant context from {agent_name}'s memory:` +\n \"\\n{relevant_memories}\" +\n `\\nMost recent observations: {most_recent_memories}` +\n `\\nObservation: {observation}` +\n `\\n\\n${suffix}`\n );\n\n const agentSummaryDescription = await this.getSummary({}, runManager); // now = now in param\n const relevantMemoriesStr = await this.summarizeRelatedMemories(\n observation,\n runManager\n );\n const currentTime = (now || new Date()).toLocaleString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n hour12: true,\n });\n const chainInputs: ChainValues = {\n agent_summary_description: agentSummaryDescription,\n current_time: currentTime,\n agent_name: this.name,\n observation,\n agent_status: this.status,\n most_recent_memories: \"\",\n };\n\n chainInputs[this.longTermMemory.getRelevantMemoriesKey()] =\n relevantMemoriesStr;\n\n const consumedTokens = await this.llm.getNumTokens(\n await prompt.format({ ...chainInputs })\n );\n\n chainInputs[this.longTermMemory.getMostRecentMemoriesTokenKey()] =\n consumedTokens;\n const response = await this.chain(prompt).call(\n chainInputs,\n runManager?.getChild(\"reaction_from_summary\")\n );\n\n const rawOutput = response.output;\n let output = rawOutput;\n let continue_dialogue = false;\n\n if (rawOutput.includes(\"REACT:\")) {\n const reaction = this._cleanResponse(rawOutput.split(\"REACT:\").pop());\n await this.addMemory(\n `${this.name} observed ${observation} and reacted by ${reaction}`,\n now,\n {},\n runManager?.getChild(\"memory\")\n );\n output = `${reaction}`;\n continue_dialogue = false;\n } else if (rawOutput.includes(\"SAY:\")) {\n const saidValue = this._cleanResponse(rawOutput.split(\"SAY:\").pop());\n await this.addMemory(\n `${this.name} observed ${observation} and said ${saidValue}`,\n now,\n {},\n runManager?.getChild(\"memory\")\n );\n output = `${this.name} said ${saidValue}`;\n continue_dialogue = true;\n } else if (rawOutput.includes(\"GOODBYE:\")) {\n const farewell = this._cleanResponse(\n rawOutput.split(\"GOODBYE:\").pop() ?? \"\"\n );\n await this.addMemory(\n `${this.name} observed ${observation} and said ${farewell}`,\n now,\n {},\n runManager?.getChild(\"memory\")\n );\n output = `${this.name} said ${farewell}`;\n continue_dialogue = false;\n }\n\n return { output, continue_dialogue };\n }\n\n private _cleanResponse(text: string | undefined): string {\n if (text === undefined) {\n return \"\";\n }\n const regex = new RegExp(`^${this.name} `);\n return text.replace(regex, \"\").trim();\n }\n\n /**\n * Generates a reaction to the given observation.\n * @param observation The observation to generate a reaction for.\n * @param now Optional current date.\n * @returns A boolean indicating whether to continue the dialogue and the output string.\n */\n async generateReaction(\n observation: string,\n now?: Date\n ): Promise<[boolean, string]> {\n const callToActionTemplate: string =\n `Should {agent_name} react to the observation, and if so,` +\n ` what would be an appropriate reaction? Respond in one line.` +\n ` If the action is to engage in dialogue, write:\\nSAY: \"what to say\"` +\n ` \\notherwise, write:\\nREACT: {agent_name}'s reaction (if anything).` +\n ` \\nEither do nothing, react, or say something but not both.\\n\\n`;\n\n const { output, continue_dialogue } = await this.call({\n observation,\n suffix: callToActionTemplate,\n now,\n });\n return [continue_dialogue, output];\n }\n\n /**\n * Generates a dialogue response to the given observation.\n * @param observation The observation to generate a dialogue response for.\n * @param now Optional current date.\n * @returns A boolean indicating whether to continue the dialogue and the output string.\n */\n async generateDialogueResponse(\n observation: string,\n now?: Date\n ): Promise<[boolean, string]> {\n const callToActionTemplate = `What would ${this.name} say? To end the conversation, write: GOODBYE: \"what to say\". Otherwise to continue the conversation, write: SAY: \"what to say next\"\\n\\n`;\n const { output, continue_dialogue } = await this.call({\n observation,\n suffix: callToActionTemplate,\n now,\n });\n return [continue_dialogue, output];\n }\n\n // Agent stateful' summary methods\n // Each dialog or response prompt includes a header\n // summarizing the agent's self-description. This is\n // updated periodically through probing it's memories\n /**\n * Gets the agent's summary, which includes the agent's name, age, traits,\n * and a summary of the agent's core characteristics. The summary is\n * updated periodically through probing the agent's memories.\n * @param config Optional configuration object with current date and a boolean to force refresh.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The agent's summary as a string.\n */\n async getSummary(\n config?: {\n now?: Date;\n forceRefresh?: boolean;\n },\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const { now = new Date(), forceRefresh = false } = config ?? {};\n\n const sinceRefresh = Math.floor(\n (now.getTime() - this.lastRefreshed.getTime()) / 1000\n );\n\n if (\n !this.summary ||\n sinceRefresh >= this.summaryRefreshSeconds ||\n forceRefresh\n ) {\n this.summary = await this.computeAgentSummary(runManager);\n this.lastRefreshed = now;\n }\n\n let age;\n if (this.age) {\n age = this.age;\n } else {\n age = \"N/A\";\n }\n\n return `Name: ${this.name} (age: ${age})\nInnate traits: ${this.traits}\n${this.summary}`;\n }\n\n /**\n * Computes the agent's summary by summarizing the agent's core\n * characteristics given the agent's relevant memories.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The computed summary as a string.\n */\n async computeAgentSummary(\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const prompt = PromptTemplate.fromTemplate(\n \"How would you summarize {name}'s core characteristics given the following statements:\\n\" +\n \"----------\" +\n \"{relevant_memories}\" +\n \"----------\" +\n \"Do not embellish.\" +\n \"\\n\\nSummary: \"\n );\n // the agent seeks to think about their core characterisitics\n const result = await this.chain(prompt).call(\n {\n name: this.name,\n queries: [`${this.name}'s core characteristics`],\n },\n runManager?.getChild(\"compute_agent_summary\")\n );\n return result.output.trim();\n }\n\n /**\n * Returns a full header of the agent's status, summary, and current time.\n * @param config Optional configuration object with current date and a boolean to force refresh.\n * @returns The full header as a string.\n */\n getFullHeader(\n config: {\n now?: Date;\n forceRefresh?: boolean;\n } = {}\n ): string {\n const { now = new Date(), forceRefresh = false } = config;\n // return a full header of the agent's status, summary, and current time.\n const summary = this.getSummary({ now, forceRefresh });\n const currentTimeString = now.toLocaleString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n hour12: true,\n });\n return `${summary}\\nIt is ${currentTimeString}.\\n${this.name}'s status: ${this.status}`;\n }\n\n /**\n * Adds a memory to the agent's long-term memory.\n * @param memoryContent The content of the memory to add.\n * @param now Optional current date.\n * @param metadata Optional metadata for the memory.\n * @param callbacks Optional Callbacks instance.\n * @returns The result of adding the memory to the agent's long-term memory.\n */\n async addMemory(\n memoryContent: string,\n now?: Date,\n metadata?: Record<string, unknown>,\n callbacks?: Callbacks\n ) {\n return this.longTermMemory.addMemory(\n memoryContent,\n now,\n metadata,\n callbacks\n );\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { BaseChain } from "../../chains/base.js";
2
2
  import { LLMChain } from "../../chains/llm_chain.js";
3
3
  import { PromptTemplate } from "@langchain/core/prompts";
4
-
5
4
  //#region src/experimental/generative_agents/generative_agent.ts
6
5
  /**
7
6
  * Implementation of a generative agent that can learn and form new memories over
@@ -299,7 +298,7 @@ ${this.summary}`;
299
298
  return this.longTermMemory.addMemory(memoryContent, now, metadata, callbacks);
300
299
  }
301
300
  };
302
-
303
301
  //#endregion
304
302
  export { GenerativeAgent };
303
+
305
304
  //# sourceMappingURL=generative_agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generative_agent.js","names":[],"sources":["../../../src/experimental/generative_agents/generative_agent.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n CallbackManagerForChainRun,\n Callbacks,\n} from \"@langchain/core/callbacks/manager\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport { GenerativeAgentMemory } from \"./generative_agent_memory.js\";\nimport { BaseChain } from \"../../chains/base.js\";\n\n/**\n * Configuration for the GenerativeAgent class. Defines the character's\n * name, optional age, permanent traits, status, verbosity, and summary\n * refresh seconds.\n */\nexport type GenerativeAgentConfig = {\n name: string;\n age?: number;\n traits: string;\n status: string;\n verbose?: boolean;\n summaryRefreshSeconds?: number;\n // dailySummaries?: string[];\n};\n\n/**\n * Implementation of a generative agent that can learn and form new memories over\n * time. It extends the BaseChain class, which is a generic\n * sequence of calls to components, including other chains.\n * @example\n * ```typescript\n * const tommie: GenerativeAgent = new GenerativeAgent(\n * new OpenAI({ temperature: 0.9, maxTokens: 1500 }),\n * new GenerativeAgentMemory(\n * new ChatOpenAI({ model: \"gpt-4o-mini\" }),\n * new TimeWeightedVectorStoreRetriever({\n * vectorStore: new MemoryVectorStore(new OpenAIEmbeddings()),\n * otherScoreKeys: [\"importance\"],\n * k: 15,\n * }),\n * { reflectionThreshold: 8 },\n * ),\n * {\n * name: \"Tommie\",\n * age: 25,\n * traits: \"anxious, likes design, talkative\",\n * status: \"looking for a job\",\n * },\n * );\n *\n * await tommie.addMemory(\n * \"Tommie remembers his dog, Bruno, from when he was a kid\",\n * new Date(),\n * );\n * const summary = await tommie.getSummary({ forceRefresh: true });\n * const response = await tommie.generateDialogueResponse(\n * \"USER says Hello Tommie, how are you today?\",\n * );\n * ```\n */\nexport class GenerativeAgent extends BaseChain {\n static lc_name() {\n return \"GenerativeAgent\";\n }\n\n // a character with memory and innate characterisitics\n name: string; // the character's name\n\n age?: number; // the optional age of the character\n\n traits: string; // permanent traits to ascribe to the character\n\n status: string; // the traits of the character you wish not to change\n\n longTermMemory: GenerativeAgentMemory;\n\n llm: BaseLanguageModelInterface; // the underlying language model\n\n verbose: boolean; // false\n\n private summary: string; // stateful self-summary generated via reflection on the character's memory.\n\n private summaryRefreshSeconds = 3600;\n\n private lastRefreshed: Date; // the last time the character's summary was regenerated\n\n // TODO: Add support for daily summaries\n // private dailySummaries: string[] = []; // summary of the events in the plan that the agent took.\n\n _chainType(): string {\n return \"generative_agent_executor\";\n }\n\n get inputKeys(): string[] {\n return [\"observation\", \"suffix\", \"now\"];\n }\n\n get outputKeys(): string[] {\n return [\"output\", \"continue_dialogue\"];\n }\n\n constructor(\n llm: BaseLanguageModelInterface,\n longTermMemory: GenerativeAgentMemory,\n config: GenerativeAgentConfig\n ) {\n super();\n this.llm = llm;\n this.longTermMemory = longTermMemory;\n this.name = config.name;\n this.age = config.age;\n this.traits = config.traits;\n this.status = config.status;\n this.verbose = config.verbose ?? this.verbose;\n this.summary = \"\";\n this.summaryRefreshSeconds =\n config.summaryRefreshSeconds ?? this.summaryRefreshSeconds;\n this.lastRefreshed = new Date();\n // this.dailySummaries = config.dailySummaries ?? this.dailySummaries;\n }\n\n // LLM methods\n /**\n * Parses a newline-separated string into a list of strings.\n * @param text The string to parse.\n * @returns An array of strings parsed from the input text.\n */\n parseList(text: string): string[] {\n // parse a newline-seperated string into a list of strings\n const lines: string[] = text.trim().split(\"\\n\");\n const result: string[] = lines.map((line: string) =>\n line.replace(/^\\s*\\d+\\.\\s*/, \"\").trim()\n );\n return result;\n }\n\n /**\n * Creates a new LLMChain with the given prompt and the agent's language\n * model, verbosity, output key, and memory.\n * @param prompt The prompt to use for the LLMChain.\n * @returns A new LLMChain instance.\n */\n chain(prompt: PromptTemplate): LLMChain {\n const chain = new LLMChain({\n llm: this.llm,\n prompt,\n verbose: this.verbose,\n outputKey: \"output\", // new\n memory: this.longTermMemory,\n });\n return chain;\n }\n\n /**\n * Extracts the observed entity from the given observation.\n * @param observation The observation to extract the entity from.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The extracted entity as a string.\n */\n async getEntityFromObservations(\n observation: string,\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const prompt = PromptTemplate.fromTemplate(\n \"What is the observed entity in the following observation? {observation}\" +\n \"\\nEntity=\"\n );\n\n const result = await this.chain(prompt).call(\n {\n observation,\n },\n runManager?.getChild(\"entity_extractor\")\n );\n\n return result.output;\n }\n\n /**\n * Extracts the action of the given entity from the given observation.\n * @param observation The observation to extract the action from.\n * @param entityName The name of the entity to extract the action for.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The extracted action as a string.\n */\n async getEntityAction(\n observation: string,\n entityName: string,\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const prompt = PromptTemplate.fromTemplate(\n \"What is the {entity} doing in the following observation? {observation}\" +\n \"\\nThe {entity} is\"\n );\n\n const result = await this.chain(prompt).call(\n {\n entity: entityName,\n observation,\n },\n runManager?.getChild(\"entity_action_extractor\")\n );\n const trimmedResult = result.output.trim();\n return trimmedResult;\n }\n\n /**\n * Summarizes memories that are most relevant to an observation.\n * @param observation The observation to summarize related memories for.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The summarized memories as a string.\n */\n async summarizeRelatedMemories(\n observation: string,\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n // summarize memories that are most relevant to an observation\n const prompt = PromptTemplate.fromTemplate(\n `\n{q1}?\nContext from memory:\n{relevant_memories}\nRelevant context:`\n );\n const entityName = await this.getEntityFromObservations(\n observation,\n runManager\n );\n const entityAction = await this.getEntityAction(\n observation,\n entityName,\n runManager\n );\n const q1 = `What is the relationship between ${this.name} and ${entityName}`;\n const q2 = `${entityName} is ${entityAction}`;\n const response = await this.chain(prompt).call(\n {\n q1,\n queries: [q1, q2],\n },\n runManager?.getChild(\"entity_relationships\")\n );\n\n return response.output.trim(); // added output\n }\n\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const { observation, suffix, now } = values;\n // react to a given observation or dialogue act\n const prompt = PromptTemplate.fromTemplate(\n `{agent_summary_description}` +\n `\\nIt is {current_time}.` +\n `\\n{agent_name}'s status: {agent_status}` +\n `\\nSummary of relevant context from {agent_name}'s memory:` +\n \"\\n{relevant_memories}\" +\n `\\nMost recent observations: {most_recent_memories}` +\n `\\nObservation: {observation}` +\n `\\n\\n${suffix}`\n );\n\n const agentSummaryDescription = await this.getSummary({}, runManager); // now = now in param\n const relevantMemoriesStr = await this.summarizeRelatedMemories(\n observation,\n runManager\n );\n const currentTime = (now || new Date()).toLocaleString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n hour12: true,\n });\n const chainInputs: ChainValues = {\n agent_summary_description: agentSummaryDescription,\n current_time: currentTime,\n agent_name: this.name,\n observation,\n agent_status: this.status,\n most_recent_memories: \"\",\n };\n\n chainInputs[this.longTermMemory.getRelevantMemoriesKey()] =\n relevantMemoriesStr;\n\n const consumedTokens = await this.llm.getNumTokens(\n await prompt.format({ ...chainInputs })\n );\n\n chainInputs[this.longTermMemory.getMostRecentMemoriesTokenKey()] =\n consumedTokens;\n const response = await this.chain(prompt).call(\n chainInputs,\n runManager?.getChild(\"reaction_from_summary\")\n );\n\n const rawOutput = response.output;\n let output = rawOutput;\n let continue_dialogue = false;\n\n if (rawOutput.includes(\"REACT:\")) {\n const reaction = this._cleanResponse(rawOutput.split(\"REACT:\").pop());\n await this.addMemory(\n `${this.name} observed ${observation} and reacted by ${reaction}`,\n now,\n {},\n runManager?.getChild(\"memory\")\n );\n output = `${reaction}`;\n continue_dialogue = false;\n } else if (rawOutput.includes(\"SAY:\")) {\n const saidValue = this._cleanResponse(rawOutput.split(\"SAY:\").pop());\n await this.addMemory(\n `${this.name} observed ${observation} and said ${saidValue}`,\n now,\n {},\n runManager?.getChild(\"memory\")\n );\n output = `${this.name} said ${saidValue}`;\n continue_dialogue = true;\n } else if (rawOutput.includes(\"GOODBYE:\")) {\n const farewell = this._cleanResponse(\n rawOutput.split(\"GOODBYE:\").pop() ?? \"\"\n );\n await this.addMemory(\n `${this.name} observed ${observation} and said ${farewell}`,\n now,\n {},\n runManager?.getChild(\"memory\")\n );\n output = `${this.name} said ${farewell}`;\n continue_dialogue = false;\n }\n\n return { output, continue_dialogue };\n }\n\n private _cleanResponse(text: string | undefined): string {\n if (text === undefined) {\n return \"\";\n }\n const regex = new RegExp(`^${this.name} `);\n return text.replace(regex, \"\").trim();\n }\n\n /**\n * Generates a reaction to the given observation.\n * @param observation The observation to generate a reaction for.\n * @param now Optional current date.\n * @returns A boolean indicating whether to continue the dialogue and the output string.\n */\n async generateReaction(\n observation: string,\n now?: Date\n ): Promise<[boolean, string]> {\n const callToActionTemplate: string =\n `Should {agent_name} react to the observation, and if so,` +\n ` what would be an appropriate reaction? Respond in one line.` +\n ` If the action is to engage in dialogue, write:\\nSAY: \"what to say\"` +\n ` \\notherwise, write:\\nREACT: {agent_name}'s reaction (if anything).` +\n ` \\nEither do nothing, react, or say something but not both.\\n\\n`;\n\n const { output, continue_dialogue } = await this.call({\n observation,\n suffix: callToActionTemplate,\n now,\n });\n return [continue_dialogue, output];\n }\n\n /**\n * Generates a dialogue response to the given observation.\n * @param observation The observation to generate a dialogue response for.\n * @param now Optional current date.\n * @returns A boolean indicating whether to continue the dialogue and the output string.\n */\n async generateDialogueResponse(\n observation: string,\n now?: Date\n ): Promise<[boolean, string]> {\n const callToActionTemplate = `What would ${this.name} say? To end the conversation, write: GOODBYE: \"what to say\". Otherwise to continue the conversation, write: SAY: \"what to say next\"\\n\\n`;\n const { output, continue_dialogue } = await this.call({\n observation,\n suffix: callToActionTemplate,\n now,\n });\n return [continue_dialogue, output];\n }\n\n // Agent stateful' summary methods\n // Each dialog or response prompt includes a header\n // summarizing the agent's self-description. This is\n // updated periodically through probing it's memories\n /**\n * Gets the agent's summary, which includes the agent's name, age, traits,\n * and a summary of the agent's core characteristics. The summary is\n * updated periodically through probing the agent's memories.\n * @param config Optional configuration object with current date and a boolean to force refresh.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The agent's summary as a string.\n */\n async getSummary(\n config?: {\n now?: Date;\n forceRefresh?: boolean;\n },\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const { now = new Date(), forceRefresh = false } = config ?? {};\n\n const sinceRefresh = Math.floor(\n (now.getTime() - this.lastRefreshed.getTime()) / 1000\n );\n\n if (\n !this.summary ||\n sinceRefresh >= this.summaryRefreshSeconds ||\n forceRefresh\n ) {\n this.summary = await this.computeAgentSummary(runManager);\n this.lastRefreshed = now;\n }\n\n let age;\n if (this.age) {\n age = this.age;\n } else {\n age = \"N/A\";\n }\n\n return `Name: ${this.name} (age: ${age})\nInnate traits: ${this.traits}\n${this.summary}`;\n }\n\n /**\n * Computes the agent's summary by summarizing the agent's core\n * characteristics given the agent's relevant memories.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The computed summary as a string.\n */\n async computeAgentSummary(\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const prompt = PromptTemplate.fromTemplate(\n \"How would you summarize {name}'s core characteristics given the following statements:\\n\" +\n \"----------\" +\n \"{relevant_memories}\" +\n \"----------\" +\n \"Do not embellish.\" +\n \"\\n\\nSummary: \"\n );\n // the agent seeks to think about their core characterisitics\n const result = await this.chain(prompt).call(\n {\n name: this.name,\n queries: [`${this.name}'s core characteristics`],\n },\n runManager?.getChild(\"compute_agent_summary\")\n );\n return result.output.trim();\n }\n\n /**\n * Returns a full header of the agent's status, summary, and current time.\n * @param config Optional configuration object with current date and a boolean to force refresh.\n * @returns The full header as a string.\n */\n getFullHeader(\n config: {\n now?: Date;\n forceRefresh?: boolean;\n } = {}\n ): string {\n const { now = new Date(), forceRefresh = false } = config;\n // return a full header of the agent's status, summary, and current time.\n const summary = this.getSummary({ now, forceRefresh });\n const currentTimeString = now.toLocaleString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n hour12: true,\n });\n return `${summary}\\nIt is ${currentTimeString}.\\n${this.name}'s status: ${this.status}`;\n }\n\n /**\n * Adds a memory to the agent's long-term memory.\n * @param memoryContent The content of the memory to add.\n * @param now Optional current date.\n * @param metadata Optional metadata for the memory.\n * @param callbacks Optional Callbacks instance.\n * @returns The result of adding the memory to the agent's long-term memory.\n */\n async addMemory(\n memoryContent: string,\n now?: Date,\n metadata?: Record<string, unknown>,\n callbacks?: Callbacks\n ) {\n return this.longTermMemory.addMemory(\n memoryContent,\n now,\n metadata,\n callbacks\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"generative_agent.js","names":[],"sources":["../../../src/experimental/generative_agents/generative_agent.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n CallbackManagerForChainRun,\n Callbacks,\n} from \"@langchain/core/callbacks/manager\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport { GenerativeAgentMemory } from \"./generative_agent_memory.js\";\nimport { BaseChain } from \"../../chains/base.js\";\n\n/**\n * Configuration for the GenerativeAgent class. Defines the character's\n * name, optional age, permanent traits, status, verbosity, and summary\n * refresh seconds.\n */\nexport type GenerativeAgentConfig = {\n name: string;\n age?: number;\n traits: string;\n status: string;\n verbose?: boolean;\n summaryRefreshSeconds?: number;\n // dailySummaries?: string[];\n};\n\n/**\n * Implementation of a generative agent that can learn and form new memories over\n * time. It extends the BaseChain class, which is a generic\n * sequence of calls to components, including other chains.\n * @example\n * ```typescript\n * const tommie: GenerativeAgent = new GenerativeAgent(\n * new OpenAI({ temperature: 0.9, maxTokens: 1500 }),\n * new GenerativeAgentMemory(\n * new ChatOpenAI({ model: \"gpt-4o-mini\" }),\n * new TimeWeightedVectorStoreRetriever({\n * vectorStore: new MemoryVectorStore(new OpenAIEmbeddings()),\n * otherScoreKeys: [\"importance\"],\n * k: 15,\n * }),\n * { reflectionThreshold: 8 },\n * ),\n * {\n * name: \"Tommie\",\n * age: 25,\n * traits: \"anxious, likes design, talkative\",\n * status: \"looking for a job\",\n * },\n * );\n *\n * await tommie.addMemory(\n * \"Tommie remembers his dog, Bruno, from when he was a kid\",\n * new Date(),\n * );\n * const summary = await tommie.getSummary({ forceRefresh: true });\n * const response = await tommie.generateDialogueResponse(\n * \"USER says Hello Tommie, how are you today?\",\n * );\n * ```\n */\nexport class GenerativeAgent extends BaseChain {\n static lc_name() {\n return \"GenerativeAgent\";\n }\n\n // a character with memory and innate characterisitics\n name: string; // the character's name\n\n age?: number; // the optional age of the character\n\n traits: string; // permanent traits to ascribe to the character\n\n status: string; // the traits of the character you wish not to change\n\n longTermMemory: GenerativeAgentMemory;\n\n llm: BaseLanguageModelInterface; // the underlying language model\n\n verbose: boolean; // false\n\n private summary: string; // stateful self-summary generated via reflection on the character's memory.\n\n private summaryRefreshSeconds = 3600;\n\n private lastRefreshed: Date; // the last time the character's summary was regenerated\n\n // TODO: Add support for daily summaries\n // private dailySummaries: string[] = []; // summary of the events in the plan that the agent took.\n\n _chainType(): string {\n return \"generative_agent_executor\";\n }\n\n get inputKeys(): string[] {\n return [\"observation\", \"suffix\", \"now\"];\n }\n\n get outputKeys(): string[] {\n return [\"output\", \"continue_dialogue\"];\n }\n\n constructor(\n llm: BaseLanguageModelInterface,\n longTermMemory: GenerativeAgentMemory,\n config: GenerativeAgentConfig\n ) {\n super();\n this.llm = llm;\n this.longTermMemory = longTermMemory;\n this.name = config.name;\n this.age = config.age;\n this.traits = config.traits;\n this.status = config.status;\n this.verbose = config.verbose ?? this.verbose;\n this.summary = \"\";\n this.summaryRefreshSeconds =\n config.summaryRefreshSeconds ?? this.summaryRefreshSeconds;\n this.lastRefreshed = new Date();\n // this.dailySummaries = config.dailySummaries ?? this.dailySummaries;\n }\n\n // LLM methods\n /**\n * Parses a newline-separated string into a list of strings.\n * @param text The string to parse.\n * @returns An array of strings parsed from the input text.\n */\n parseList(text: string): string[] {\n // parse a newline-seperated string into a list of strings\n const lines: string[] = text.trim().split(\"\\n\");\n const result: string[] = lines.map((line: string) =>\n line.replace(/^\\s*\\d+\\.\\s*/, \"\").trim()\n );\n return result;\n }\n\n /**\n * Creates a new LLMChain with the given prompt and the agent's language\n * model, verbosity, output key, and memory.\n * @param prompt The prompt to use for the LLMChain.\n * @returns A new LLMChain instance.\n */\n chain(prompt: PromptTemplate): LLMChain {\n const chain = new LLMChain({\n llm: this.llm,\n prompt,\n verbose: this.verbose,\n outputKey: \"output\", // new\n memory: this.longTermMemory,\n });\n return chain;\n }\n\n /**\n * Extracts the observed entity from the given observation.\n * @param observation The observation to extract the entity from.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The extracted entity as a string.\n */\n async getEntityFromObservations(\n observation: string,\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const prompt = PromptTemplate.fromTemplate(\n \"What is the observed entity in the following observation? {observation}\" +\n \"\\nEntity=\"\n );\n\n const result = await this.chain(prompt).call(\n {\n observation,\n },\n runManager?.getChild(\"entity_extractor\")\n );\n\n return result.output;\n }\n\n /**\n * Extracts the action of the given entity from the given observation.\n * @param observation The observation to extract the action from.\n * @param entityName The name of the entity to extract the action for.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The extracted action as a string.\n */\n async getEntityAction(\n observation: string,\n entityName: string,\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const prompt = PromptTemplate.fromTemplate(\n \"What is the {entity} doing in the following observation? {observation}\" +\n \"\\nThe {entity} is\"\n );\n\n const result = await this.chain(prompt).call(\n {\n entity: entityName,\n observation,\n },\n runManager?.getChild(\"entity_action_extractor\")\n );\n const trimmedResult = result.output.trim();\n return trimmedResult;\n }\n\n /**\n * Summarizes memories that are most relevant to an observation.\n * @param observation The observation to summarize related memories for.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The summarized memories as a string.\n */\n async summarizeRelatedMemories(\n observation: string,\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n // summarize memories that are most relevant to an observation\n const prompt = PromptTemplate.fromTemplate(\n `\n{q1}?\nContext from memory:\n{relevant_memories}\nRelevant context:`\n );\n const entityName = await this.getEntityFromObservations(\n observation,\n runManager\n );\n const entityAction = await this.getEntityAction(\n observation,\n entityName,\n runManager\n );\n const q1 = `What is the relationship between ${this.name} and ${entityName}`;\n const q2 = `${entityName} is ${entityAction}`;\n const response = await this.chain(prompt).call(\n {\n q1,\n queries: [q1, q2],\n },\n runManager?.getChild(\"entity_relationships\")\n );\n\n return response.output.trim(); // added output\n }\n\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const { observation, suffix, now } = values;\n // react to a given observation or dialogue act\n const prompt = PromptTemplate.fromTemplate(\n `{agent_summary_description}` +\n `\\nIt is {current_time}.` +\n `\\n{agent_name}'s status: {agent_status}` +\n `\\nSummary of relevant context from {agent_name}'s memory:` +\n \"\\n{relevant_memories}\" +\n `\\nMost recent observations: {most_recent_memories}` +\n `\\nObservation: {observation}` +\n `\\n\\n${suffix}`\n );\n\n const agentSummaryDescription = await this.getSummary({}, runManager); // now = now in param\n const relevantMemoriesStr = await this.summarizeRelatedMemories(\n observation,\n runManager\n );\n const currentTime = (now || new Date()).toLocaleString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n hour12: true,\n });\n const chainInputs: ChainValues = {\n agent_summary_description: agentSummaryDescription,\n current_time: currentTime,\n agent_name: this.name,\n observation,\n agent_status: this.status,\n most_recent_memories: \"\",\n };\n\n chainInputs[this.longTermMemory.getRelevantMemoriesKey()] =\n relevantMemoriesStr;\n\n const consumedTokens = await this.llm.getNumTokens(\n await prompt.format({ ...chainInputs })\n );\n\n chainInputs[this.longTermMemory.getMostRecentMemoriesTokenKey()] =\n consumedTokens;\n const response = await this.chain(prompt).call(\n chainInputs,\n runManager?.getChild(\"reaction_from_summary\")\n );\n\n const rawOutput = response.output;\n let output = rawOutput;\n let continue_dialogue = false;\n\n if (rawOutput.includes(\"REACT:\")) {\n const reaction = this._cleanResponse(rawOutput.split(\"REACT:\").pop());\n await this.addMemory(\n `${this.name} observed ${observation} and reacted by ${reaction}`,\n now,\n {},\n runManager?.getChild(\"memory\")\n );\n output = `${reaction}`;\n continue_dialogue = false;\n } else if (rawOutput.includes(\"SAY:\")) {\n const saidValue = this._cleanResponse(rawOutput.split(\"SAY:\").pop());\n await this.addMemory(\n `${this.name} observed ${observation} and said ${saidValue}`,\n now,\n {},\n runManager?.getChild(\"memory\")\n );\n output = `${this.name} said ${saidValue}`;\n continue_dialogue = true;\n } else if (rawOutput.includes(\"GOODBYE:\")) {\n const farewell = this._cleanResponse(\n rawOutput.split(\"GOODBYE:\").pop() ?? \"\"\n );\n await this.addMemory(\n `${this.name} observed ${observation} and said ${farewell}`,\n now,\n {},\n runManager?.getChild(\"memory\")\n );\n output = `${this.name} said ${farewell}`;\n continue_dialogue = false;\n }\n\n return { output, continue_dialogue };\n }\n\n private _cleanResponse(text: string | undefined): string {\n if (text === undefined) {\n return \"\";\n }\n const regex = new RegExp(`^${this.name} `);\n return text.replace(regex, \"\").trim();\n }\n\n /**\n * Generates a reaction to the given observation.\n * @param observation The observation to generate a reaction for.\n * @param now Optional current date.\n * @returns A boolean indicating whether to continue the dialogue and the output string.\n */\n async generateReaction(\n observation: string,\n now?: Date\n ): Promise<[boolean, string]> {\n const callToActionTemplate: string =\n `Should {agent_name} react to the observation, and if so,` +\n ` what would be an appropriate reaction? Respond in one line.` +\n ` If the action is to engage in dialogue, write:\\nSAY: \"what to say\"` +\n ` \\notherwise, write:\\nREACT: {agent_name}'s reaction (if anything).` +\n ` \\nEither do nothing, react, or say something but not both.\\n\\n`;\n\n const { output, continue_dialogue } = await this.call({\n observation,\n suffix: callToActionTemplate,\n now,\n });\n return [continue_dialogue, output];\n }\n\n /**\n * Generates a dialogue response to the given observation.\n * @param observation The observation to generate a dialogue response for.\n * @param now Optional current date.\n * @returns A boolean indicating whether to continue the dialogue and the output string.\n */\n async generateDialogueResponse(\n observation: string,\n now?: Date\n ): Promise<[boolean, string]> {\n const callToActionTemplate = `What would ${this.name} say? To end the conversation, write: GOODBYE: \"what to say\". Otherwise to continue the conversation, write: SAY: \"what to say next\"\\n\\n`;\n const { output, continue_dialogue } = await this.call({\n observation,\n suffix: callToActionTemplate,\n now,\n });\n return [continue_dialogue, output];\n }\n\n // Agent stateful' summary methods\n // Each dialog or response prompt includes a header\n // summarizing the agent's self-description. This is\n // updated periodically through probing it's memories\n /**\n * Gets the agent's summary, which includes the agent's name, age, traits,\n * and a summary of the agent's core characteristics. The summary is\n * updated periodically through probing the agent's memories.\n * @param config Optional configuration object with current date and a boolean to force refresh.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The agent's summary as a string.\n */\n async getSummary(\n config?: {\n now?: Date;\n forceRefresh?: boolean;\n },\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const { now = new Date(), forceRefresh = false } = config ?? {};\n\n const sinceRefresh = Math.floor(\n (now.getTime() - this.lastRefreshed.getTime()) / 1000\n );\n\n if (\n !this.summary ||\n sinceRefresh >= this.summaryRefreshSeconds ||\n forceRefresh\n ) {\n this.summary = await this.computeAgentSummary(runManager);\n this.lastRefreshed = now;\n }\n\n let age;\n if (this.age) {\n age = this.age;\n } else {\n age = \"N/A\";\n }\n\n return `Name: ${this.name} (age: ${age})\nInnate traits: ${this.traits}\n${this.summary}`;\n }\n\n /**\n * Computes the agent's summary by summarizing the agent's core\n * characteristics given the agent's relevant memories.\n * @param runManager Optional CallbackManagerForChainRun instance.\n * @returns The computed summary as a string.\n */\n async computeAgentSummary(\n runManager?: CallbackManagerForChainRun\n ): Promise<string> {\n const prompt = PromptTemplate.fromTemplate(\n \"How would you summarize {name}'s core characteristics given the following statements:\\n\" +\n \"----------\" +\n \"{relevant_memories}\" +\n \"----------\" +\n \"Do not embellish.\" +\n \"\\n\\nSummary: \"\n );\n // the agent seeks to think about their core characterisitics\n const result = await this.chain(prompt).call(\n {\n name: this.name,\n queries: [`${this.name}'s core characteristics`],\n },\n runManager?.getChild(\"compute_agent_summary\")\n );\n return result.output.trim();\n }\n\n /**\n * Returns a full header of the agent's status, summary, and current time.\n * @param config Optional configuration object with current date and a boolean to force refresh.\n * @returns The full header as a string.\n */\n getFullHeader(\n config: {\n now?: Date;\n forceRefresh?: boolean;\n } = {}\n ): string {\n const { now = new Date(), forceRefresh = false } = config;\n // return a full header of the agent's status, summary, and current time.\n const summary = this.getSummary({ now, forceRefresh });\n const currentTimeString = now.toLocaleString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n hour12: true,\n });\n return `${summary}\\nIt is ${currentTimeString}.\\n${this.name}'s status: ${this.status}`;\n }\n\n /**\n * Adds a memory to the agent's long-term memory.\n * @param memoryContent The content of the memory to add.\n * @param now Optional current date.\n * @param metadata Optional metadata for the memory.\n * @param callbacks Optional Callbacks instance.\n * @returns The result of adding the memory to the agent's long-term memory.\n */\n async addMemory(\n memoryContent: string,\n now?: Date,\n metadata?: Record<string, unknown>,\n callbacks?: Callbacks\n ) {\n return this.longTermMemory.addMemory(\n memoryContent,\n now,\n metadata,\n callbacks\n );\n }\n}\n"],"mappings":"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"}
@@ -1,10 +1,9 @@
1
- const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
2
- const require_base = require('../../chains/base.cjs');
3
- const require_llm_chain = require('../../chains/llm_chain.cjs');
1
+ require("../../_virtual/_rolldown/runtime.cjs");
2
+ const require_base = require("../../chains/base.cjs");
3
+ const require_llm_chain = require("../../chains/llm_chain.cjs");
4
4
  let _langchain_core_prompts = require("@langchain/core/prompts");
5
5
  let _langchain_core_memory = require("@langchain/core/memory");
6
6
  let _langchain_core_documents = require("@langchain/core/documents");
7
-
8
7
  //#region src/experimental/generative_agents/generative_agent_memory.ts
9
8
  /**
10
9
  * Class that manages the memory of a generative agent in LangChain. It
@@ -349,7 +348,7 @@ var GenerativeAgentMemory = class extends _langchain_core_memory.BaseMemory {
349
348
  */
350
349
  clear() {}
351
350
  };
352
-
353
351
  //#endregion
354
352
  exports.GenerativeAgentMemory = GenerativeAgentMemory;
353
+
355
354
  //# sourceMappingURL=generative_agent_memory.cjs.map