langchain 0.2.10 → 0.2.12

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 (345) hide show
  1. package/chat_models/universal.cjs +1 -0
  2. package/chat_models/universal.d.cts +1 -0
  3. package/chat_models/universal.d.ts +1 -0
  4. package/chat_models/universal.js +1 -0
  5. package/dist/chat_models/universal.cjs +600 -0
  6. package/dist/chat_models/universal.d.ts +115 -0
  7. package/dist/chat_models/universal.js +595 -0
  8. package/dist/document_loaders/web/assemblyai.cjs +9 -1
  9. package/dist/document_loaders/web/assemblyai.js +9 -1
  10. package/dist/experimental/chrome_ai/app/dist/bundle.cjs +1250 -0
  11. package/dist/experimental/chrome_ai/app/dist/bundle.d.ts +1 -0
  12. package/dist/experimental/chrome_ai/app/dist/bundle.js +1249 -0
  13. package/dist/load/import_constants.cjs +1 -0
  14. package/dist/load/import_constants.js +1 -0
  15. package/package.json +99 -43
  16. package/dist/agents/tests/agent.int.test.d.ts +0 -1
  17. package/dist/agents/tests/agent.int.test.js +0 -309
  18. package/dist/agents/tests/chat_convo_output_parser.test.d.ts +0 -1
  19. package/dist/agents/tests/chat_convo_output_parser.test.js +0 -91
  20. package/dist/agents/tests/create_openai_functions_agent.int.test.d.ts +0 -2
  21. package/dist/agents/tests/create_openai_functions_agent.int.test.js +0 -71
  22. package/dist/agents/tests/create_openai_tools_agent.int.test.d.ts +0 -1
  23. package/dist/agents/tests/create_openai_tools_agent.int.test.js +0 -75
  24. package/dist/agents/tests/create_react_agent.int.test.d.ts +0 -1
  25. package/dist/agents/tests/create_react_agent.int.test.js +0 -32
  26. package/dist/agents/tests/create_structured_chat_agent.int.test.d.ts +0 -1
  27. package/dist/agents/tests/create_structured_chat_agent.int.test.js +0 -32
  28. package/dist/agents/tests/create_tool_calling_agent.int.test.d.ts +0 -1
  29. package/dist/agents/tests/create_tool_calling_agent.int.test.js +0 -122
  30. package/dist/agents/tests/create_xml_agent.int.test.d.ts +0 -1
  31. package/dist/agents/tests/create_xml_agent.int.test.js +0 -32
  32. package/dist/agents/tests/json.test.d.ts +0 -1
  33. package/dist/agents/tests/json.test.js +0 -74
  34. package/dist/agents/tests/react.test.d.ts +0 -1
  35. package/dist/agents/tests/react.test.js +0 -44
  36. package/dist/agents/tests/runnable.int.test.d.ts +0 -1
  37. package/dist/agents/tests/runnable.int.test.js +0 -104
  38. package/dist/agents/tests/sql.test.d.ts +0 -1
  39. package/dist/agents/tests/sql.test.js +0 -133
  40. package/dist/agents/tests/structured_chat_output_parser.test.d.ts +0 -1
  41. package/dist/agents/tests/structured_chat_output_parser.test.js +0 -35
  42. package/dist/agents/tests/structured_chat_output_parser_with_retries.int.test.d.ts +0 -1
  43. package/dist/agents/tests/structured_chat_output_parser_with_retries.int.test.js +0 -44
  44. package/dist/agents/tests/structured_output_runnables.int.test.d.ts +0 -1
  45. package/dist/agents/tests/structured_output_runnables.int.test.js +0 -112
  46. package/dist/agents/toolkits/tests/conversational_retrieval.int.test.d.ts +0 -1
  47. package/dist/agents/toolkits/tests/conversational_retrieval.int.test.js +0 -41
  48. package/dist/cache/tests/file_system.int.test.d.ts +0 -1
  49. package/dist/cache/tests/file_system.int.test.js +0 -32
  50. package/dist/chains/openai_functions/tests/create_runnable_chains.int.test.d.ts +0 -1
  51. package/dist/chains/openai_functions/tests/create_runnable_chains.int.test.js +0 -139
  52. package/dist/chains/openai_functions/tests/extraction.int.test.d.ts +0 -1
  53. package/dist/chains/openai_functions/tests/extraction.int.test.js +0 -33
  54. package/dist/chains/openai_functions/tests/openapi.int.test.d.ts +0 -1
  55. package/dist/chains/openai_functions/tests/openapi.int.test.js +0 -130
  56. package/dist/chains/openai_functions/tests/openapi.test.d.ts +0 -1
  57. package/dist/chains/openai_functions/tests/openapi.test.js +0 -172
  58. package/dist/chains/openai_functions/tests/structured_output.int.test.d.ts +0 -1
  59. package/dist/chains/openai_functions/tests/structured_output.int.test.js +0 -40
  60. package/dist/chains/openai_functions/tests/structured_output.test.d.ts +0 -1
  61. package/dist/chains/openai_functions/tests/structured_output.test.js +0 -102
  62. package/dist/chains/openai_functions/tests/tagging.int.test.d.ts +0 -1
  63. package/dist/chains/openai_functions/tests/tagging.int.test.js +0 -21
  64. package/dist/chains/query_constructor/tests/query_chain.int.test.d.ts +0 -1
  65. package/dist/chains/query_constructor/tests/query_chain.int.test.js +0 -93
  66. package/dist/chains/query_constructor/tests/query_parser.test.d.ts +0 -1
  67. package/dist/chains/query_constructor/tests/query_parser.test.js +0 -28
  68. package/dist/chains/question_answering/tests/load.int.test.d.ts +0 -1
  69. package/dist/chains/question_answering/tests/load.int.test.js +0 -39
  70. package/dist/chains/router/tests/multi_prompt.int.test.d.ts +0 -1
  71. package/dist/chains/router/tests/multi_prompt.int.test.js +0 -45
  72. package/dist/chains/router/tests/multi_prompt.test.d.ts +0 -1
  73. package/dist/chains/router/tests/multi_prompt.test.js +0 -62
  74. package/dist/chains/router/tests/multi_retrieval_qa.int.test.d.ts +0 -1
  75. package/dist/chains/router/tests/multi_retrieval_qa.int.test.js +0 -67
  76. package/dist/chains/router/tests/multi_retrieval_qa.test.d.ts +0 -1
  77. package/dist/chains/router/tests/multi_retrieval_qa.test.js +0 -125
  78. package/dist/chains/summarization/tests/load.int.test.d.ts +0 -1
  79. package/dist/chains/summarization/tests/load.int.test.js +0 -37
  80. package/dist/chains/tests/api_chain.int.test.d.ts +0 -1
  81. package/dist/chains/tests/api_chain.int.test.js +0 -55
  82. package/dist/chains/tests/combine_docs_chain.int.test.d.ts +0 -1
  83. package/dist/chains/tests/combine_docs_chain.int.test.js +0 -50
  84. package/dist/chains/tests/combine_docs_chain.test.d.ts +0 -1
  85. package/dist/chains/tests/combine_docs_chain.test.js +0 -98
  86. package/dist/chains/tests/constitutional_chain.int.test.d.ts +0 -1
  87. package/dist/chains/tests/constitutional_chain.int.test.js +0 -30
  88. package/dist/chains/tests/constitutional_chain.test.d.ts +0 -1
  89. package/dist/chains/tests/constitutional_chain.test.js +0 -63
  90. package/dist/chains/tests/conversation_chain.int.test.d.ts +0 -1
  91. package/dist/chains/tests/conversation_chain.int.test.js +0 -9
  92. package/dist/chains/tests/conversational_retrieval_chain.int.test.d.ts +0 -1
  93. package/dist/chains/tests/conversational_retrieval_chain.int.test.js +0 -243
  94. package/dist/chains/tests/example_data/open_meteo_docs.d.ts +0 -1
  95. package/dist/chains/tests/example_data/open_meteo_docs.js +0 -29
  96. package/dist/chains/tests/history_aware_retriever.int.test.d.ts +0 -1
  97. package/dist/chains/tests/history_aware_retriever.int.test.js +0 -41
  98. package/dist/chains/tests/history_aware_retriever.test.d.ts +0 -1
  99. package/dist/chains/tests/history_aware_retriever.test.js +0 -27
  100. package/dist/chains/tests/llm_chain.int.test.d.ts +0 -1
  101. package/dist/chains/tests/llm_chain.int.test.js +0 -119
  102. package/dist/chains/tests/openai_moderation.int.test.d.ts +0 -1
  103. package/dist/chains/tests/openai_moderation.int.test.js +0 -30
  104. package/dist/chains/tests/retrieval_chain.int.test.d.ts +0 -1
  105. package/dist/chains/tests/retrieval_chain.int.test.js +0 -69
  106. package/dist/chains/tests/retrieval_chain.test.d.ts +0 -1
  107. package/dist/chains/tests/retrieval_chain.test.js +0 -36
  108. package/dist/chains/tests/sequential_chain.int.test.d.ts +0 -1
  109. package/dist/chains/tests/sequential_chain.int.test.js +0 -88
  110. package/dist/chains/tests/sequential_chain.test.d.ts +0 -1
  111. package/dist/chains/tests/sequential_chain.test.js +0 -295
  112. package/dist/chains/tests/simple_sequential_chain.int.test.d.ts +0 -1
  113. package/dist/chains/tests/simple_sequential_chain.int.test.js +0 -81
  114. package/dist/chains/tests/simple_sequential_chain.test.d.ts +0 -1
  115. package/dist/chains/tests/simple_sequential_chain.test.js +0 -128
  116. package/dist/chains/tests/sql_db_chain.int.test.d.ts +0 -1
  117. package/dist/chains/tests/sql_db_chain.int.test.js +0 -125
  118. package/dist/chains/tests/transform.test.d.ts +0 -1
  119. package/dist/chains/tests/transform.test.js +0 -12
  120. package/dist/chains/tests/vector_db_qa_chain.int.test.d.ts +0 -1
  121. package/dist/chains/tests/vector_db_qa_chain.int.test.js +0 -45
  122. package/dist/document_loaders/tests/assemblyai.int.test.d.ts +0 -1
  123. package/dist/document_loaders/tests/assemblyai.int.test.js +0 -111
  124. package/dist/document_loaders/tests/chatgpt-blob.test.d.ts +0 -1
  125. package/dist/document_loaders/tests/chatgpt-blob.test.js +0 -30
  126. package/dist/document_loaders/tests/chatgpt.test.d.ts +0 -1
  127. package/dist/document_loaders/tests/chatgpt.test.js +0 -29
  128. package/dist/document_loaders/tests/cheerio.int.test.d.ts +0 -1
  129. package/dist/document_loaders/tests/cheerio.int.test.js +0 -21
  130. package/dist/document_loaders/tests/college_confidential.int.test.d.ts +0 -1
  131. package/dist/document_loaders/tests/college_confidential.int.test.js +0 -6
  132. package/dist/document_loaders/tests/confluence.test.d.ts +0 -1
  133. package/dist/document_loaders/tests/confluence.test.js +0 -52
  134. package/dist/document_loaders/tests/couchbase.int.test.d.ts +0 -1
  135. package/dist/document_loaders/tests/couchbase.int.test.js +0 -28
  136. package/dist/document_loaders/tests/csv-blob.test.d.ts +0 -1
  137. package/dist/document_loaders/tests/csv-blob.test.js +0 -53
  138. package/dist/document_loaders/tests/csv.test.d.ts +0 -1
  139. package/dist/document_loaders/tests/csv.test.js +0 -41
  140. package/dist/document_loaders/tests/directory.test.d.ts +0 -1
  141. package/dist/document_loaders/tests/directory.test.js +0 -38
  142. package/dist/document_loaders/tests/docx.test.d.ts +0 -1
  143. package/dist/document_loaders/tests/docx.test.js +0 -11
  144. package/dist/document_loaders/tests/epub.test.d.ts +0 -1
  145. package/dist/document_loaders/tests/epub.test.js +0 -18
  146. package/dist/document_loaders/tests/example_data/github_api_responses.d.ts +0 -5
  147. package/dist/document_loaders/tests/example_data/github_api_responses.js +0 -91
  148. package/dist/document_loaders/tests/figma.int.test.d.ts +0 -1
  149. package/dist/document_loaders/tests/figma.int.test.js +0 -13
  150. package/dist/document_loaders/tests/firecrawl.int.test.d.ts +0 -1
  151. package/dist/document_loaders/tests/firecrawl.int.test.js +0 -30
  152. package/dist/document_loaders/tests/gitbook.int.test.d.ts +0 -1
  153. package/dist/document_loaders/tests/gitbook.int.test.js +0 -14
  154. package/dist/document_loaders/tests/github.int.test.d.ts +0 -1
  155. package/dist/document_loaders/tests/github.int.test.js +0 -86
  156. package/dist/document_loaders/tests/github.test.d.ts +0 -1
  157. package/dist/document_loaders/tests/github.test.js +0 -51
  158. package/dist/document_loaders/tests/hn.int.test.d.ts +0 -1
  159. package/dist/document_loaders/tests/hn.int.test.js +0 -6
  160. package/dist/document_loaders/tests/imsdb.test.d.ts +0 -1
  161. package/dist/document_loaders/tests/imsdb.test.js +0 -6
  162. package/dist/document_loaders/tests/json-blob.test.d.ts +0 -1
  163. package/dist/document_loaders/tests/json-blob.test.js +0 -91
  164. package/dist/document_loaders/tests/json.test.d.ts +0 -1
  165. package/dist/document_loaders/tests/json.test.js +0 -69
  166. package/dist/document_loaders/tests/jsonl-blob.test.d.ts +0 -1
  167. package/dist/document_loaders/tests/jsonl-blob.test.js +0 -46
  168. package/dist/document_loaders/tests/jsonl.test.d.ts +0 -1
  169. package/dist/document_loaders/tests/jsonl.test.js +0 -15
  170. package/dist/document_loaders/tests/multi_file.test.d.ts +0 -1
  171. package/dist/document_loaders/tests/multi_file.test.js +0 -49
  172. package/dist/document_loaders/tests/notion.test.d.ts +0 -1
  173. package/dist/document_loaders/tests/notion.test.js +0 -11
  174. package/dist/document_loaders/tests/notionapi.int.test.d.ts +0 -1
  175. package/dist/document_loaders/tests/notionapi.int.test.js +0 -80
  176. package/dist/document_loaders/tests/notionapi.test.d.ts +0 -1
  177. package/dist/document_loaders/tests/notionapi.test.js +0 -84
  178. package/dist/document_loaders/tests/notiondb.int.test.d.ts +0 -1
  179. package/dist/document_loaders/tests/notiondb.int.test.js +0 -13
  180. package/dist/document_loaders/tests/obsidian.test.d.ts +0 -1
  181. package/dist/document_loaders/tests/obsidian.test.js +0 -119
  182. package/dist/document_loaders/tests/pdf-blob.test.d.ts +0 -1
  183. package/dist/document_loaders/tests/pdf-blob.test.js +0 -44
  184. package/dist/document_loaders/tests/pdf.test.d.ts +0 -1
  185. package/dist/document_loaders/tests/pdf.test.js +0 -25
  186. package/dist/document_loaders/tests/playwright_web.int.test.d.ts +0 -1
  187. package/dist/document_loaders/tests/playwright_web.int.test.js +0 -27
  188. package/dist/document_loaders/tests/pptx.test.d.ts +0 -1
  189. package/dist/document_loaders/tests/pptx.test.js +0 -17
  190. package/dist/document_loaders/tests/puppeteer.int.test.d.ts +0 -1
  191. package/dist/document_loaders/tests/puppeteer.int.test.js +0 -47
  192. package/dist/document_loaders/tests/recursive_url.int.test.d.ts +0 -1
  193. package/dist/document_loaders/tests/recursive_url.int.test.js +0 -64
  194. package/dist/document_loaders/tests/s3.int.test.d.ts +0 -1
  195. package/dist/document_loaders/tests/s3.int.test.js +0 -48
  196. package/dist/document_loaders/tests/searchapi.test.d.ts +0 -1
  197. package/dist/document_loaders/tests/searchapi.test.js +0 -29
  198. package/dist/document_loaders/tests/serpapi.test.d.ts +0 -1
  199. package/dist/document_loaders/tests/serpapi.test.js +0 -21
  200. package/dist/document_loaders/tests/sitemap.int.test.d.ts +0 -1
  201. package/dist/document_loaders/tests/sitemap.int.test.js +0 -28
  202. package/dist/document_loaders/tests/sonix_audio.int.test.d.ts +0 -1
  203. package/dist/document_loaders/tests/sonix_audio.int.test.js +0 -55
  204. package/dist/document_loaders/tests/sort_xyz_blockchain.int.test.d.ts +0 -1
  205. package/dist/document_loaders/tests/sort_xyz_blockchain.int.test.js +0 -38
  206. package/dist/document_loaders/tests/srt-blob.test.d.ts +0 -1
  207. package/dist/document_loaders/tests/srt-blob.test.js +0 -18
  208. package/dist/document_loaders/tests/srt.test.d.ts +0 -1
  209. package/dist/document_loaders/tests/srt.test.js +0 -16
  210. package/dist/document_loaders/tests/text-blob.test.d.ts +0 -1
  211. package/dist/document_loaders/tests/text-blob.test.js +0 -14
  212. package/dist/document_loaders/tests/text.test.d.ts +0 -1
  213. package/dist/document_loaders/tests/text.test.js +0 -22
  214. package/dist/document_loaders/tests/unstructured.int.test.d.ts +0 -1
  215. package/dist/document_loaders/tests/unstructured.int.test.js +0 -58
  216. package/dist/document_loaders/tests/webpdf.int.test.d.ts +0 -1
  217. package/dist/document_loaders/tests/webpdf.int.test.js +0 -90
  218. package/dist/document_transformers/tests/openai_functions.int.test.d.ts +0 -1
  219. package/dist/document_transformers/tests/openai_functions.int.test.js +0 -40
  220. package/dist/embeddings/tests/cache.test.d.ts +0 -1
  221. package/dist/embeddings/tests/cache.test.js +0 -24
  222. package/dist/embeddings/tests/fake.test.d.ts +0 -1
  223. package/dist/embeddings/tests/fake.test.js +0 -34
  224. package/dist/evaluation/agents/tests/trajectory_eval_chain.int.test.d.ts +0 -1
  225. package/dist/evaluation/agents/tests/trajectory_eval_chain.int.test.js +0 -33
  226. package/dist/evaluation/comparison/tests/pairwise_eval_chain.int.test.d.ts +0 -1
  227. package/dist/evaluation/comparison/tests/pairwise_eval_chain.int.test.js +0 -46
  228. package/dist/evaluation/criteria/tests/criteria_eval_chain.int.test.d.ts +0 -1
  229. package/dist/evaluation/criteria/tests/criteria_eval_chain.int.test.js +0 -108
  230. package/dist/evaluation/embedding_distance/tests/embedding_distance_eval_chain.int.test.d.ts +0 -1
  231. package/dist/evaluation/embedding_distance/tests/embedding_distance_eval_chain.int.test.js +0 -26
  232. package/dist/evaluation/qa/tests/eval_chain.int.test.d.ts +0 -1
  233. package/dist/evaluation/qa/tests/eval_chain.int.test.js +0 -27
  234. package/dist/experimental/autogpt/tests/output_parser.test.d.ts +0 -1
  235. package/dist/experimental/autogpt/tests/output_parser.test.js +0 -8
  236. package/dist/experimental/autogpt/tests/prompt.test.d.ts +0 -1
  237. package/dist/experimental/autogpt/tests/prompt.test.js +0 -69
  238. package/dist/experimental/autogpt/tests/prompt_generator.test.d.ts +0 -1
  239. package/dist/experimental/autogpt/tests/prompt_generator.test.js +0 -91
  240. package/dist/experimental/chains/tests/violation_of_expectations_chain.int.test.d.ts +0 -1
  241. package/dist/experimental/chains/tests/violation_of_expectations_chain.int.test.js +0 -26
  242. package/dist/experimental/generative_agents/tests/generative_agent.int.test.d.ts +0 -1
  243. package/dist/experimental/generative_agents/tests/generative_agent.int.test.js +0 -304
  244. package/dist/experimental/masking/tests/masking-extended.test.d.ts +0 -1
  245. package/dist/experimental/masking/tests/masking-extended.test.js +0 -58
  246. package/dist/experimental/masking/tests/masking.test.d.ts +0 -1
  247. package/dist/experimental/masking/tests/masking.test.js +0 -388
  248. package/dist/experimental/openai_assistant/tests/openai_assistant.int.test.d.ts +0 -1
  249. package/dist/experimental/openai_assistant/tests/openai_assistant.int.test.js +0 -203
  250. package/dist/experimental/openai_files/tests/openai_file.int.test.d.ts +0 -1
  251. package/dist/experimental/openai_files/tests/openai_file.int.test.js +0 -87
  252. package/dist/experimental/plan_and_execute/tests/plan_and_execute.int.test.d.ts +0 -1
  253. package/dist/experimental/plan_and_execute/tests/plan_and_execute.int.test.js +0 -54
  254. package/dist/experimental/prompts/tests/handlebars.test.d.ts +0 -1
  255. package/dist/experimental/prompts/tests/handlebars.test.js +0 -24
  256. package/dist/experimental/tools/tests/pyinterpreter.int.test.d.ts +0 -1
  257. package/dist/experimental/tools/tests/pyinterpreter.int.test.js +0 -22
  258. package/dist/load/tests/cross_language.test.d.ts +0 -1
  259. package/dist/load/tests/cross_language.test.js +0 -83
  260. package/dist/load/tests/load.int.test.d.ts +0 -1
  261. package/dist/load/tests/load.int.test.js +0 -9
  262. package/dist/load/tests/load.test.d.ts +0 -1
  263. package/dist/load/tests/load.test.js +0 -412
  264. package/dist/memory/tests/buffer_memory.test.d.ts +0 -1
  265. package/dist/memory/tests/buffer_memory.test.js +0 -34
  266. package/dist/memory/tests/buffer_token_memory.int.test.d.ts +0 -1
  267. package/dist/memory/tests/buffer_token_memory.int.test.js +0 -47
  268. package/dist/memory/tests/buffer_window_memory.test.d.ts +0 -1
  269. package/dist/memory/tests/buffer_window_memory.test.js +0 -42
  270. package/dist/memory/tests/combined_memory.int.test.d.ts +0 -1
  271. package/dist/memory/tests/combined_memory.int.test.js +0 -74
  272. package/dist/memory/tests/entity_memory.int.test.d.ts +0 -1
  273. package/dist/memory/tests/entity_memory.int.test.js +0 -79
  274. package/dist/memory/tests/entity_memory.test.d.ts +0 -1
  275. package/dist/memory/tests/entity_memory.test.js +0 -48
  276. package/dist/memory/tests/summary.int.test.d.ts +0 -1
  277. package/dist/memory/tests/summary.int.test.js +0 -50
  278. package/dist/memory/tests/summary_buffer.int.test.d.ts +0 -1
  279. package/dist/memory/tests/summary_buffer.int.test.js +0 -55
  280. package/dist/memory/tests/vector_store_memory.int.test.d.ts +0 -1
  281. package/dist/memory/tests/vector_store_memory.int.test.js +0 -55
  282. package/dist/output_parsers/tests/combining.int.test.d.ts +0 -1
  283. package/dist/output_parsers/tests/combining.int.test.js +0 -26
  284. package/dist/output_parsers/tests/combining.test.d.ts +0 -1
  285. package/dist/output_parsers/tests/combining.test.js +0 -54
  286. package/dist/output_parsers/tests/datetime.test.d.ts +0 -1
  287. package/dist/output_parsers/tests/datetime.test.js +0 -14
  288. package/dist/output_parsers/tests/expression.test.d.ts +0 -1
  289. package/dist/output_parsers/tests/expression.test.js +0 -339
  290. package/dist/output_parsers/tests/http_response.test.d.ts +0 -1
  291. package/dist/output_parsers/tests/http_response.test.js +0 -39
  292. package/dist/output_parsers/tests/list.test.d.ts +0 -1
  293. package/dist/output_parsers/tests/list.test.js +0 -27
  294. package/dist/output_parsers/tests/openai_functions.int.test.d.ts +0 -1
  295. package/dist/output_parsers/tests/openai_functions.int.test.js +0 -89
  296. package/dist/output_parsers/tests/openai_tools.int.test.d.ts +0 -1
  297. package/dist/output_parsers/tests/openai_tools.int.test.js +0 -36
  298. package/dist/output_parsers/tests/structured.int.test.d.ts +0 -1
  299. package/dist/output_parsers/tests/structured.int.test.js +0 -150
  300. package/dist/prompts/tests/selectors.test.d.ts +0 -1
  301. package/dist/prompts/tests/selectors.test.js +0 -59
  302. package/dist/retrievers/self_query/tests/memory_self_query.int.test.d.ts +0 -1
  303. package/dist/retrievers/self_query/tests/memory_self_query.int.test.js +0 -330
  304. package/dist/retrievers/tests/chain_extract.int.test.d.ts +0 -1
  305. package/dist/retrievers/tests/chain_extract.int.test.js +0 -32
  306. package/dist/retrievers/tests/ensemble_retriever.int.test.d.ts +0 -1
  307. package/dist/retrievers/tests/ensemble_retriever.int.test.js +0 -74
  308. package/dist/retrievers/tests/hyde.int.test.d.ts +0 -1
  309. package/dist/retrievers/tests/hyde.int.test.js +0 -44
  310. package/dist/retrievers/tests/matryoshka_retriever.int.test.d.ts +0 -1
  311. package/dist/retrievers/tests/matryoshka_retriever.int.test.js +0 -113
  312. package/dist/retrievers/tests/multi_query.int.test.d.ts +0 -1
  313. package/dist/retrievers/tests/multi_query.int.test.js +0 -45
  314. package/dist/retrievers/tests/parent_document.int.test.d.ts +0 -1
  315. package/dist/retrievers/tests/parent_document.int.test.js +0 -122
  316. package/dist/retrievers/tests/score_threshold.int.test.d.ts +0 -1
  317. package/dist/retrievers/tests/score_threshold.int.test.js +0 -83
  318. package/dist/retrievers/tests/time_weighted.test.d.ts +0 -1
  319. package/dist/retrievers/tests/time_weighted.test.js +0 -320
  320. package/dist/retrievers/tests/vectorstores.test.d.ts +0 -1
  321. package/dist/retrievers/tests/vectorstores.test.js +0 -50
  322. package/dist/smith/tests/run_on_dataset.int.test.d.ts +0 -1
  323. package/dist/smith/tests/run_on_dataset.int.test.js +0 -257
  324. package/dist/smith/tests/runner_utils.int.test.d.ts +0 -9
  325. package/dist/smith/tests/runner_utils.int.test.js +0 -234
  326. package/dist/storage/tests/file_system.test.d.ts +0 -1
  327. package/dist/storage/tests/file_system.test.js +0 -81
  328. package/dist/tools/tests/chain.test.d.ts +0 -1
  329. package/dist/tools/tests/chain.test.js +0 -136
  330. package/dist/tools/tests/webbrowser.int.test.d.ts +0 -1
  331. package/dist/tools/tests/webbrowser.int.test.js +0 -80
  332. package/dist/tools/tests/webbrowser.test.d.ts +0 -1
  333. package/dist/tools/tests/webbrowser.test.js +0 -21
  334. package/dist/util/tests/async_caller.int.test.d.ts +0 -1
  335. package/dist/util/tests/async_caller.int.test.js +0 -34
  336. package/dist/util/tests/azure.test.d.ts +0 -1
  337. package/dist/util/tests/azure.test.js +0 -42
  338. package/dist/util/tests/openai-stream.test.d.ts +0 -1
  339. package/dist/util/tests/openai-stream.test.js +0 -135
  340. package/dist/util/tests/set.test.d.ts +0 -1
  341. package/dist/util/tests/set.test.js +0 -36
  342. package/dist/util/tests/sql_utils.test.d.ts +0 -1
  343. package/dist/util/tests/sql_utils.test.js +0 -50
  344. package/dist/vectorstores/tests/memory.test.d.ts +0 -1
  345. package/dist/vectorstores/tests/memory.test.js +0 -78
@@ -1,388 +0,0 @@
1
- /* eslint-disable no-promise-executor-return */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
- // yarn test:single src/experimental/masking/tests/masking.test.ts
4
- import { jest } from "@jest/globals";
5
- import { MaskingParser, RegexMaskingTransformer, } from "../index.js";
6
- describe("MaskingParser and PIIMaskingTransformer", () => {
7
- describe("Masking with Static Identifiers", () => {
8
- let maskingParser;
9
- let piiMaskingTransformer;
10
- const emailPattern = { regex: /\S+@\S+\.\S+/, replacement: "[email]" };
11
- const phonePattern = { regex: /\d{3}-\d{3}-\d{4}/, replacement: "[phone]" };
12
- beforeEach(() => {
13
- piiMaskingTransformer = new RegexMaskingTransformer({
14
- email: emailPattern,
15
- phone: phonePattern,
16
- });
17
- maskingParser = new MaskingParser();
18
- maskingParser.addTransformer(piiMaskingTransformer);
19
- });
20
- it("masks single occurrences of PII with static identifiers", async () => {
21
- const message = "Contact me at jane.doe@email.com or 555-123-4567.";
22
- const expectedMaskedMessage = "Contact me at [email] or [phone].";
23
- const maskedMessage = await maskingParser.mask(message);
24
- expect(maskedMessage).toBe(expectedMaskedMessage);
25
- });
26
- it("rehydrates static masked data to its original form", async () => {
27
- const maskedMessage = "Contact me at [email] or [phone].";
28
- const expectedOriginalMessage = "Contact me at jane.doe@email.com or 555-123-4567.";
29
- await maskingParser.mask(expectedOriginalMessage); // Masking original message
30
- const rehydratedMessage = await maskingParser.rehydrate(maskedMessage);
31
- expect(rehydratedMessage).toBe(expectedOriginalMessage);
32
- });
33
- function generateLargeMessage() {
34
- let largeMessage = "";
35
- for (let i = 0; i < 10000; i += 1) {
36
- // Adjust the number for desired message size
37
- largeMessage += `User${i}: jane.doe${i}@email.com, 555-123-${i
38
- .toString()
39
- .padStart(4, "0")}. `;
40
- }
41
- return largeMessage;
42
- }
43
- describe("Performance Testing", () => {
44
- it("efficiently processes large data sets", async () => {
45
- const largeMessage = generateLargeMessage();
46
- const startTime = performance.now();
47
- const maskedMessage = await maskingParser.mask(largeMessage);
48
- const endTime = performance.now();
49
- const someAcceptableDuration = 5000; // Set this to a duration you consider acceptable, e.g., 5000 milliseconds (5 seconds)
50
- expect(maskedMessage).toBeDefined();
51
- expect(endTime - startTime).toBeLessThan(someAcceptableDuration);
52
- });
53
- });
54
- });
55
- describe("Masking with Dynamic Identifiers", () => {
56
- let maskingParser;
57
- let piiMaskingTransformer;
58
- const emailMask = () => `[email-${Math.random().toString(16).slice(2)}]`;
59
- const phoneMask = () => `[phone-${Math.random().toString(16).slice(2)}]`;
60
- beforeEach(() => {
61
- piiMaskingTransformer = new RegexMaskingTransformer({
62
- email: { regex: /\S+@\S+\.\S+/g, mask: emailMask },
63
- phone: { regex: /\d{3}-\d{3}-\d{4}/g, mask: phoneMask },
64
- });
65
- maskingParser = new MaskingParser();
66
- maskingParser.addTransformer(piiMaskingTransformer);
67
- });
68
- it("masks multiple occurrences of different PII with unique identifiers", async () => {
69
- const message = "Contact me at jane.doe@email.com or 555-123-4567. Also reach me at john.smith@email.com";
70
- const maskedMessage = await maskingParser.mask(message);
71
- expect(maskedMessage).toMatch(/\[email-[a-f0-9]+\]/g);
72
- expect(maskedMessage).toMatch(/\[phone-[a-f0-9]+\]/g);
73
- expect((maskedMessage.match(/\[email-[a-f0-9]+\]/g) || []).length).toBe(2);
74
- expect((maskedMessage.match(/\[phone-[a-f0-9]+\]/g) || []).length).toBe(1);
75
- });
76
- it("rehydrates dynamic masked data to its original form", async () => {
77
- const originalMessage = "Contact me at jane.doe@email.com or 555-123-4567. Also reach me at john.smith@email.com";
78
- const maskedMessage = await maskingParser.mask(originalMessage);
79
- const rehydratedMessage = await maskingParser.rehydrate(maskedMessage);
80
- expect(rehydratedMessage).toBe(originalMessage);
81
- });
82
- it("masks identical PII with consistent dynamic identifiers", async () => {
83
- const message = "Contact me at jane.doe@email.com or 555-123-4567. Also reach me at john.smith@email.com and 555-123-4567";
84
- const maskedMessage = await maskingParser.mask(message);
85
- expect(maskedMessage).toMatch(/\[email-[a-f0-9]+\]/g);
86
- expect(maskedMessage).toMatch(/\[phone-[a-f0-9]+\]/g);
87
- expect((maskedMessage.match(/\[email-[a-f0-9]+\]/g) || []).length).toBe(2);
88
- expect((maskedMessage.match(/\[phone-[a-f0-9]+\]/g) || []).length).toBe(2);
89
- });
90
- });
91
- describe("PIIMaskingTransformer with Default Hash Function", () => {
92
- let maskingParser;
93
- let piiMaskingTransformer;
94
- const emailPattern = { regex: /\S+@\S+\.\S+/, replacement: "[email]" };
95
- const phonePattern = { regex: /\d{3}-\d{3}-\d{4}/, replacement: "[phone]" };
96
- beforeEach(() => {
97
- piiMaskingTransformer = new RegexMaskingTransformer({
98
- email: emailPattern,
99
- phone: phonePattern,
100
- });
101
- maskingParser = new MaskingParser();
102
- maskingParser.addTransformer(piiMaskingTransformer);
103
- });
104
- it("should mask email and phone using default hash function", async () => {
105
- const piiMaskingTransformer = new RegexMaskingTransformer({
106
- email: emailPattern,
107
- phone: phonePattern,
108
- });
109
- const maskingParser = new MaskingParser();
110
- maskingParser.addTransformer(piiMaskingTransformer);
111
- const message = "My email is jane.doe@email.com and phone is 555-123-4567.";
112
- const maskedMessage = await maskingParser.mask(message);
113
- expect(maskedMessage).toContain("[email]");
114
- expect(maskedMessage).toContain("[phone]");
115
- });
116
- });
117
- describe("PIIMaskingTransformer with Custom Hash Function", () => {
118
- const emailPattern = { regex: /\S+@\S+\.\S+/, replacement: "[email]" };
119
- const phonePattern = { regex: /\d{3}-\d{3}-\d{4}/, replacement: "[phone]" };
120
- let maskingParser;
121
- let piiMaskingTransformer;
122
- beforeEach(() => {
123
- piiMaskingTransformer = new RegexMaskingTransformer({
124
- email: emailPattern,
125
- phone: phonePattern,
126
- });
127
- maskingParser = new MaskingParser();
128
- maskingParser.addTransformer(piiMaskingTransformer);
129
- });
130
- // A simple hash function that creates a mock hash representation of the input.
131
- // This is just for demonstration purposes and not a secure hashing method.
132
- const customHashFunction = (input) => input
133
- .split("")
134
- .map(() => "*")
135
- .join("");
136
- it("should mask email and phone using custom hash function", async () => {
137
- const piiMaskingTransformer = new RegexMaskingTransformer({
138
- email: {
139
- regex: /\S+@\S+\.\S+/,
140
- mask: (match) => `custom-email-${customHashFunction(match)}`,
141
- },
142
- phone: {
143
- regex: /\d{3}-\d{3}-\d{4}/,
144
- mask: (match) => `custom-phone-${customHashFunction(match)}`,
145
- },
146
- }, customHashFunction);
147
- const maskingParser = new MaskingParser();
148
- maskingParser.addTransformer(piiMaskingTransformer);
149
- const message = "Contact me at jane.doe@email.com or 555-123-4567.";
150
- const maskedMessage = await maskingParser.mask(message);
151
- // The lengths of the masked parts should be equal to the lengths of the original email and phone number.
152
- const expectedEmailMask = `custom-email-${"*".repeat("jane.doe@email.com".length)}`;
153
- const expectedPhoneMask = `custom-phone-${"*".repeat("555-123-4567".length)}`;
154
- expect(maskedMessage).toContain(expectedEmailMask);
155
- expect(maskedMessage).toContain(expectedPhoneMask);
156
- });
157
- it("should rehydrate masked data correctly using custom hash function", async () => {
158
- const piiMaskingTransformer = new RegexMaskingTransformer({
159
- email: {
160
- regex: /\S+@\S+\.\S+/,
161
- mask: (match) => `custom-email-${customHashFunction(match)}`,
162
- },
163
- phone: {
164
- regex: /\d{3}-\d{3}-\d{4}/,
165
- mask: (match) => `custom-phone-${customHashFunction(match)}`,
166
- },
167
- }, customHashFunction);
168
- maskingParser.addTransformer(piiMaskingTransformer);
169
- const originalMessage = "Contact me at jane.doe@email.com or 555-123-4567.";
170
- const maskedMessage = await maskingParser.mask(originalMessage);
171
- const rehydratedMessage = await maskingParser.rehydrate(maskedMessage);
172
- expect(rehydratedMessage).toBe(originalMessage);
173
- });
174
- });
175
- describe("Error Handling in MaskingParser", () => {
176
- let maskingParser;
177
- let piiMaskingTransformer;
178
- beforeEach(() => {
179
- piiMaskingTransformer = new RegexMaskingTransformer({});
180
- maskingParser = new MaskingParser();
181
- });
182
- it("throws an error when no transformers are added and parse is called", async () => {
183
- const message = "Some message";
184
- await expect(maskingParser.mask(message)).rejects.toThrow("MaskingParser.mask Error: No transformers have been added. Please add at least one transformer before parsing.");
185
- });
186
- it("throws an error when no transformers are added and rehydrate is called", async () => {
187
- const message = "Some masked message";
188
- await expect(maskingParser.rehydrate(message)).rejects.toThrow("MaskingParser.rehydrate Error: No transformers have been added. Please add at least one transformer before rehydrating.");
189
- });
190
- it("throws an error for invalid message type in parse", async () => {
191
- const invalidMessage = 123; // intentionally incorrect type
192
- maskingParser.addTransformer(piiMaskingTransformer); // Add a transformer
193
- await expect(maskingParser.mask(invalidMessage)).rejects.toThrow("The 'message' argument must be a string.");
194
- });
195
- it("throws an error for invalid message type in rehydrate", async () => {
196
- const invalidMessage = 123; // intentionally incorrect type
197
- await expect(maskingParser.rehydrate(invalidMessage)).rejects.toThrow("The 'message' argument must be a string.");
198
- });
199
- });
200
- describe("Error Handling in PIIMaskingTransformer", () => {
201
- it("throws an error for invalid message type in transform", async () => {
202
- const transformer = new RegexMaskingTransformer({});
203
- const invalidMessage = 123; // intentionally incorrect type
204
- const state = new Map();
205
- await expect(transformer.transform(invalidMessage, state)).rejects.toThrow("The 'message' argument must be a string.");
206
- });
207
- it("throws an error for invalid state type in transform", async () => {
208
- const transformer = new RegexMaskingTransformer({});
209
- const message = "Some message";
210
- const invalidState = {}; // intentionally incorrect type
211
- await expect(transformer.transform(message, invalidState)).rejects.toThrow("The 'state' argument must be an instance of Map.");
212
- });
213
- it("throws an error when initialized with invalid regex pattern", () => {
214
- expect(() => {
215
- const transformer = new RegexMaskingTransformer({
216
- // @ts-expect-error Should throw with invalid regex
217
- invalid: { regex: null },
218
- });
219
- console.log(transformer);
220
- }).toThrow("Invalid pattern configuration.");
221
- });
222
- });
223
- describe("MaskingParser Hooks", () => {
224
- let maskingParser;
225
- let piiMaskingTransformer;
226
- const emailPattern = { regex: /\S+@\S+\.\S+/, replacement: "[email]" };
227
- beforeEach(() => {
228
- piiMaskingTransformer = new RegexMaskingTransformer({
229
- email: emailPattern,
230
- });
231
- });
232
- // Masking hooks
233
- it("handles synchronous onMaskingStart and onMaskingEnd hooks during parse", async () => {
234
- const onMaskingStart = jest.fn(); // Synchronous mock
235
- const onMaskingEnd = jest.fn(); // Synchronous mock
236
- maskingParser = new MaskingParser({
237
- transformers: [piiMaskingTransformer],
238
- onMaskingStart,
239
- onMaskingEnd,
240
- });
241
- const message = "Contact me at jane.doe@email.com";
242
- await maskingParser.mask(message);
243
- expect(onMaskingStart).toHaveBeenCalledWith(message);
244
- expect(onMaskingEnd).toHaveBeenCalled();
245
- });
246
- it("handles asynchronous onMaskingStart and onMaskingEnd hooks during parse", async () => {
247
- const onMaskingStart = jest.fn(() => Promise.resolve()); // Correctly mocked as an async function
248
- const onMaskingEnd = jest.fn(() => Promise.resolve()); // Correctly mocked as an async function
249
- maskingParser = new MaskingParser({
250
- transformers: [piiMaskingTransformer],
251
- onMaskingStart,
252
- onMaskingEnd,
253
- });
254
- const message = "Contact me at jane.doe@email.com";
255
- await maskingParser.mask(message);
256
- expect(onMaskingStart).toHaveBeenCalledWith(message);
257
- expect(onMaskingEnd).toHaveBeenCalled();
258
- });
259
- it("handles errors in synchronous onMaskingStart and onMaskingEnd hooks during parse", async () => {
260
- const error = new Error("Test Error");
261
- const onMaskingStart = jest.fn(() => {
262
- throw error;
263
- }); // Synchronous mock that throws an error
264
- const onMaskingEnd = jest.fn(() => {
265
- throw error;
266
- }); // Synchronous mock that throws an error
267
- maskingParser = new MaskingParser({
268
- transformers: [piiMaskingTransformer],
269
- onMaskingStart,
270
- onMaskingEnd,
271
- });
272
- const message = "Contact me at jane.doe@email.com";
273
- await expect(maskingParser.mask(message)).rejects.toThrow(error);
274
- expect(onMaskingStart).toHaveBeenCalledWith(message);
275
- // onMaskingEnd should not be called because an error is thrown in onMaskingStart
276
- expect(onMaskingEnd).not.toHaveBeenCalled();
277
- });
278
- it("handles errors in asynchronous onMaskingStart and onMaskingEnd hooks during parse", async () => {
279
- const error = new Error("Test Error");
280
- const onMaskingStart = jest.fn(() => Promise.reject(error)); // Asynchronous mock that rejects with an error
281
- const onMaskingEnd = jest.fn(() => Promise.reject(error)); // Asynchronous mock that rejects with an error
282
- maskingParser = new MaskingParser({
283
- transformers: [piiMaskingTransformer],
284
- onMaskingStart,
285
- onMaskingEnd,
286
- });
287
- const message = "Contact me at jane.doe@email.com";
288
- await expect(maskingParser.mask(message)).rejects.toThrow(error);
289
- expect(onMaskingStart).toHaveBeenCalledWith(message);
290
- // onMaskingEnd should not be called because an error is thrown in onMaskingStart
291
- expect(onMaskingEnd).not.toHaveBeenCalled();
292
- });
293
- // Rehydration hooks
294
- it("handles synchronous onRehydratingStart and onRehydratingEnd hooks during rehydrate", async () => {
295
- const onRehydratingStart = jest.fn(); // Synchronous mock
296
- const onRehydratingEnd = jest.fn(); // Synchronous mock
297
- maskingParser = new MaskingParser({
298
- transformers: [piiMaskingTransformer],
299
- onRehydratingStart,
300
- onRehydratingEnd,
301
- });
302
- const maskedMessage = await maskingParser.mask("Contact me at jane.doe@email.com");
303
- await maskingParser.rehydrate(maskedMessage);
304
- expect(onRehydratingStart).toHaveBeenCalledWith(maskedMessage);
305
- expect(onRehydratingEnd).toHaveBeenCalled();
306
- });
307
- it("handles asynchronous onRehydratingStart and onRehydratingEnd hooks during rehydrate", async () => {
308
- const onRehydratingStart = jest.fn(() => Promise.resolve()); // Asynchronous mock
309
- const onRehydratingEnd = jest.fn(() => Promise.resolve()); // Asynchronous mock
310
- maskingParser = new MaskingParser({
311
- transformers: [piiMaskingTransformer],
312
- onRehydratingStart,
313
- onRehydratingEnd,
314
- });
315
- const maskedMessage = await maskingParser.mask("Contact me at jane.doe@email.com");
316
- await maskingParser.rehydrate(maskedMessage);
317
- expect(onRehydratingStart).toHaveBeenCalledWith(maskedMessage);
318
- expect(onRehydratingEnd).toHaveBeenCalled();
319
- });
320
- it("handles errors in synchronous onRehydratingStart and onRehydratingEnd hooks during rehydrate", async () => {
321
- const error = new Error("Test Error");
322
- const onRehydratingStart = jest.fn(() => {
323
- throw error;
324
- }); // Synchronous mock that throws an error
325
- const onRehydratingEnd = jest.fn(() => {
326
- throw error;
327
- }); // Synchronous mock that throws an error
328
- maskingParser = new MaskingParser({
329
- transformers: [piiMaskingTransformer],
330
- onRehydratingStart,
331
- onRehydratingEnd,
332
- });
333
- const maskedMessage = await maskingParser.mask("Contact me at jane.doe@email.com");
334
- await expect(maskingParser.rehydrate(maskedMessage)).rejects.toThrow(error);
335
- expect(onRehydratingStart).toHaveBeenCalledWith(maskedMessage);
336
- // onRehydratingEnd should not be called because an error is thrown in onRehydratingStart
337
- expect(onRehydratingEnd).not.toHaveBeenCalled();
338
- });
339
- it("handles errors in asynchronous onRehydratingStart and onRehydratingEnd hooks during rehydrate", async () => {
340
- const error = new Error("Test Error");
341
- const onRehydratingStart = jest.fn(() => Promise.reject(error)); // Asynchronous mock that rejects with an error
342
- const onRehydratingEnd = jest.fn(() => Promise.reject(error)); // Asynchronous mock that rejects with an error
343
- maskingParser = new MaskingParser({
344
- transformers: [piiMaskingTransformer],
345
- onRehydratingStart,
346
- onRehydratingEnd,
347
- });
348
- const maskedMessage = await maskingParser.mask("Contact me at jane.doe@email.com");
349
- await expect(maskingParser.rehydrate(maskedMessage)).rejects.toThrow(error);
350
- expect(onRehydratingStart).toHaveBeenCalledWith(maskedMessage);
351
- // onRehydratingEnd should not be called because an error is thrown in onRehydratingStart
352
- expect(onRehydratingEnd).not.toHaveBeenCalled();
353
- });
354
- });
355
- describe("MaskingParser with Asynchronous Transformers", () => {
356
- let maskingParser;
357
- let asyncTransformer;
358
- beforeEach(() => {
359
- // Mock an asynchronous transformer
360
- asyncTransformer = {
361
- async transform(message, state) {
362
- // Simulate an asynchronous operation
363
- await new Promise((resolve) => setTimeout(resolve, 100));
364
- // Return transformed message and updated state
365
- const transformedMessage = message.replace(/sensitiveData/g, "[REDACTED]");
366
- const newState = new Map(state).set("redacted", "sensitive string :(");
367
- return [transformedMessage, newState];
368
- },
369
- // Mock or placeholder rehydrate method
370
- async rehydrate(message, _state) {
371
- return message;
372
- },
373
- };
374
- maskingParser = new MaskingParser({
375
- transformers: [asyncTransformer],
376
- // Add other configurations if necessary
377
- });
378
- });
379
- it("properly handles asynchronous transformations and state updates", async () => {
380
- const originalMessage = "This message contains sensitiveData that should be redacted.";
381
- const transformedMessage = await maskingParser.mask(originalMessage);
382
- // Check if the message is transformed correctly
383
- expect(transformedMessage).toBe("This message contains [REDACTED] that should be redacted.");
384
- // Check if the state is updated correctly
385
- expect(maskingParser.getState().get("redacted")).toBe("sensitive string :(");
386
- });
387
- });
388
- });
@@ -1,203 +0,0 @@
1
- /* eslint-disable no-process-env */
2
- /* eslint-disable @typescript-eslint/no-non-null-assertion */
3
- import { z } from "zod";
4
- import { StructuredTool } from "@langchain/core/tools";
5
- import { AgentExecutor } from "../../../agents/executor.js";
6
- import { OpenAIAssistantRunnable } from "../index.js";
7
- function getCurrentWeather(location, _unit = "fahrenheit") {
8
- if (location.toLowerCase().includes("tokyo")) {
9
- return JSON.stringify({ location, temperature: "10", unit: "celsius" });
10
- }
11
- else if (location.toLowerCase().includes("san francisco")) {
12
- return JSON.stringify({ location, temperature: "72", unit: "fahrenheit" });
13
- }
14
- else {
15
- return JSON.stringify({ location, temperature: "22", unit: "celsius" });
16
- }
17
- }
18
- function convertWeatherToHumanReadable(location, temperature) {
19
- if (temperature.length > 1) {
20
- return JSON.stringify({ location, temperature, readable: "warm" });
21
- }
22
- return JSON.stringify({ location, temperature, readable: "cold" });
23
- }
24
- class WeatherTool extends StructuredTool {
25
- constructor() {
26
- super(...arguments);
27
- Object.defineProperty(this, "schema", {
28
- enumerable: true,
29
- configurable: true,
30
- writable: true,
31
- value: z.object({
32
- location: z.string().describe("The city and state, e.g. San Francisco, CA"),
33
- unit: z.enum(["celsius", "fahrenheit"]).optional(),
34
- })
35
- });
36
- Object.defineProperty(this, "name", {
37
- enumerable: true,
38
- configurable: true,
39
- writable: true,
40
- value: "get_current_weather"
41
- });
42
- Object.defineProperty(this, "description", {
43
- enumerable: true,
44
- configurable: true,
45
- writable: true,
46
- value: "Get the current weather in a given location"
47
- });
48
- }
49
- async _call(input) {
50
- const { location, unit } = input;
51
- const result = getCurrentWeather(location, unit);
52
- return result;
53
- }
54
- }
55
- class HumanReadableChecker extends StructuredTool {
56
- constructor() {
57
- super(...arguments);
58
- Object.defineProperty(this, "schema", {
59
- enumerable: true,
60
- configurable: true,
61
- writable: true,
62
- value: z.object({
63
- location: z.string().describe("The city and state, e.g. San Francisco, CA"),
64
- temperature: z.string().describe("The temperature in degrees"),
65
- })
66
- });
67
- Object.defineProperty(this, "name", {
68
- enumerable: true,
69
- configurable: true,
70
- writable: true,
71
- value: "get_human_readable_weather"
72
- });
73
- Object.defineProperty(this, "description", {
74
- enumerable: true,
75
- configurable: true,
76
- writable: true,
77
- value: "Check whether or not the weather in a given location is warm or cold"
78
- });
79
- }
80
- async _call(input) {
81
- const { location, temperature } = input;
82
- const result = convertWeatherToHumanReadable(location, temperature);
83
- return result;
84
- }
85
- }
86
- test.skip("New OpenAIAssistantRunnable can be passed as an agent", async () => {
87
- const tools = [new WeatherTool(), new HumanReadableChecker()];
88
- const agent = await OpenAIAssistantRunnable.createAssistant({
89
- model: "gpt-3.5-turbo-1106",
90
- instructions: "You are a weather bot. Use the provided functions to answer questions.",
91
- name: "Weather Assistant",
92
- tools,
93
- asAgent: true,
94
- });
95
- const agentExecutor = AgentExecutor.fromAgentAndTools({
96
- agent,
97
- tools,
98
- });
99
- const assistantResponse = await agentExecutor.invoke({
100
- content: "What's the weather in San Francisco and Tokyo? And will it be warm or cold in those places?",
101
- });
102
- console.log(assistantResponse);
103
- /**
104
- {
105
- output: "The weather in San Francisco, CA is currently 72°F and it's warm. In Tokyo, Japan, the temperature is 10°C and it's also warm."
106
- }
107
- */
108
- });
109
- test("OpenAIAssistantRunnable create and delete assistant", async () => {
110
- const assistant = await OpenAIAssistantRunnable.createAssistant({
111
- name: "Personal Assistant",
112
- model: "gpt-4-1106-preview",
113
- });
114
- const deleteStatus = await assistant.deleteAssistant();
115
- expect(deleteStatus).toEqual({
116
- id: assistant.assistantId,
117
- object: "assistant.deleted",
118
- deleted: true,
119
- });
120
- console.log(deleteStatus);
121
- /**
122
- {
123
- id: 'asst_jwkJPzFkIL2ei9Kn1SZzmR6Y',
124
- object: 'assistant.deleted',
125
- deleted: true
126
- }
127
- */
128
- });
129
- test("OpenAIAssistantRunnable create and modify assistant", async () => {
130
- const assistant = await OpenAIAssistantRunnable.createAssistant({
131
- name: "Personal Assistant",
132
- model: "gpt-4-1106-preview",
133
- });
134
- const assistantResponse = await assistant.getAssistant();
135
- expect(assistantResponse.name).toEqual("Personal Assistant");
136
- const assistantResponseModified = await assistant.modifyAssistant({
137
- name: "Personal Assistant 2",
138
- });
139
- expect(assistantResponseModified.name).toEqual("Personal Assistant 2");
140
- expect(assistantResponseModified.model).toEqual("gpt-4-1106-preview");
141
- });
142
- test("OpenAIAssistantRunnable can be passed as an agent", async () => {
143
- const tools = [new WeatherTool(), new HumanReadableChecker()];
144
- const agent = new OpenAIAssistantRunnable({
145
- assistantId: process.env.TEST_OPENAI_ASSISTANT_ID,
146
- asAgent: true,
147
- });
148
- const agentExecutor = AgentExecutor.fromAgentAndTools({
149
- agent,
150
- tools,
151
- });
152
- const assistantResponse = await agentExecutor.invoke({
153
- content: "What's the weather in San Francisco and Tokyo? And will it be warm or cold in those places?",
154
- });
155
- console.log(assistantResponse);
156
- /**
157
- {
158
- output: "The weather in San Francisco, CA is currently 72°F and it's warm. In Tokyo, Japan, the temperature is 10°C and it's also warm."
159
- }
160
- */
161
- });
162
- test.skip("Created OpenAIAssistantRunnable is invokeable", async () => {
163
- const assistant = await OpenAIAssistantRunnable.createAssistant({
164
- model: "gpt-4",
165
- instructions: "You are a helpful assistant that provides answers to math problems.",
166
- name: "Math Assistant",
167
- tools: [{ type: "code_interpreter" }],
168
- });
169
- const assistantResponse = await assistant.invoke({
170
- content: "What's 10 - 4 raised to the 2.7",
171
- });
172
- console.log(assistantResponse);
173
- /**
174
- [
175
- {
176
- id: 'msg_egqSo3AZTWJ0DAelzR6DdKbs',
177
- object: 'thread.message',
178
- created_at: 1699409656,
179
- thread_id: 'thread_lAktOZkUetJ7Gl3hzMFdi42E',
180
- role: 'assistant',
181
- content: [ [Object] ],
182
- file_ids: [],
183
- assistant_id: 'asst_fPjLqVmN21EFGLNQb8iZckEy',
184
- run_id: 'run_orPmWI9ri1HnqBXmX7LCWWax',
185
- metadata: {}
186
- }
187
- ]
188
- */
189
- const content = // eslint-disable-next-line @typescript-eslint/no-explicit-any
190
- assistantResponse.flatMap((res) => res.content);
191
- console.log(content);
192
- /**
193
- [
194
- {
195
- type: 'text',
196
- text: {
197
- value: '10 - 4 raised to the 2.7 is approximately -32.22.',
198
- annotations: []
199
- }
200
- }
201
- ]
202
- */
203
- });