@librechat/agents 2.4.322 → 3.0.0-rc2

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 (266) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +218 -0
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -0
  3. package/dist/cjs/common/enum.cjs +14 -5
  4. package/dist/cjs/common/enum.cjs.map +1 -1
  5. package/dist/cjs/events.cjs +10 -6
  6. package/dist/cjs/events.cjs.map +1 -1
  7. package/dist/cjs/graphs/Graph.cjs +309 -212
  8. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  9. package/dist/cjs/graphs/MultiAgentGraph.cjs +422 -0
  10. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -0
  11. package/dist/cjs/llm/anthropic/index.cjs +54 -9
  12. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  13. package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
  14. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +52 -6
  15. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  16. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +22 -2
  17. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  18. package/dist/cjs/llm/anthropic/utils/tools.cjs +29 -0
  19. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -0
  20. package/dist/cjs/llm/google/index.cjs +144 -0
  21. package/dist/cjs/llm/google/index.cjs.map +1 -0
  22. package/dist/cjs/llm/google/utils/common.cjs +477 -0
  23. package/dist/cjs/llm/google/utils/common.cjs.map +1 -0
  24. package/dist/cjs/llm/ollama/index.cjs +67 -0
  25. package/dist/cjs/llm/ollama/index.cjs.map +1 -0
  26. package/dist/cjs/llm/ollama/utils.cjs +158 -0
  27. package/dist/cjs/llm/ollama/utils.cjs.map +1 -0
  28. package/dist/cjs/llm/openai/index.cjs +389 -3
  29. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  30. package/dist/cjs/llm/openai/utils/index.cjs +672 -0
  31. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -0
  32. package/dist/cjs/llm/providers.cjs +15 -15
  33. package/dist/cjs/llm/providers.cjs.map +1 -1
  34. package/dist/cjs/llm/text.cjs +14 -3
  35. package/dist/cjs/llm/text.cjs.map +1 -1
  36. package/dist/cjs/llm/vertexai/index.cjs +330 -0
  37. package/dist/cjs/llm/vertexai/index.cjs.map +1 -0
  38. package/dist/cjs/main.cjs +11 -0
  39. package/dist/cjs/main.cjs.map +1 -1
  40. package/dist/cjs/run.cjs +120 -81
  41. package/dist/cjs/run.cjs.map +1 -1
  42. package/dist/cjs/stream.cjs +85 -51
  43. package/dist/cjs/stream.cjs.map +1 -1
  44. package/dist/cjs/tools/ToolNode.cjs +10 -4
  45. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  46. package/dist/cjs/tools/handlers.cjs +119 -13
  47. package/dist/cjs/tools/handlers.cjs.map +1 -1
  48. package/dist/cjs/tools/search/anthropic.cjs +40 -0
  49. package/dist/cjs/tools/search/anthropic.cjs.map +1 -0
  50. package/dist/cjs/tools/search/firecrawl.cjs +55 -9
  51. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  52. package/dist/cjs/tools/search/format.cjs +6 -6
  53. package/dist/cjs/tools/search/format.cjs.map +1 -1
  54. package/dist/cjs/tools/search/rerankers.cjs +7 -29
  55. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  56. package/dist/cjs/tools/search/search.cjs +86 -16
  57. package/dist/cjs/tools/search/search.cjs.map +1 -1
  58. package/dist/cjs/tools/search/tool.cjs +4 -2
  59. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  60. package/dist/cjs/tools/search/utils.cjs +1 -1
  61. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  62. package/dist/cjs/utils/events.cjs +31 -0
  63. package/dist/cjs/utils/events.cjs.map +1 -0
  64. package/dist/cjs/utils/title.cjs +57 -21
  65. package/dist/cjs/utils/title.cjs.map +1 -1
  66. package/dist/cjs/utils/tokens.cjs +54 -7
  67. package/dist/cjs/utils/tokens.cjs.map +1 -1
  68. package/dist/esm/agents/AgentContext.mjs +216 -0
  69. package/dist/esm/agents/AgentContext.mjs.map +1 -0
  70. package/dist/esm/common/enum.mjs +15 -6
  71. package/dist/esm/common/enum.mjs.map +1 -1
  72. package/dist/esm/events.mjs +10 -6
  73. package/dist/esm/events.mjs.map +1 -1
  74. package/dist/esm/graphs/Graph.mjs +311 -214
  75. package/dist/esm/graphs/Graph.mjs.map +1 -1
  76. package/dist/esm/graphs/MultiAgentGraph.mjs +420 -0
  77. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -0
  78. package/dist/esm/llm/anthropic/index.mjs +54 -9
  79. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  80. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  81. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +52 -6
  82. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  83. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +22 -2
  84. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  85. package/dist/esm/llm/anthropic/utils/tools.mjs +27 -0
  86. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -0
  87. package/dist/esm/llm/google/index.mjs +142 -0
  88. package/dist/esm/llm/google/index.mjs.map +1 -0
  89. package/dist/esm/llm/google/utils/common.mjs +471 -0
  90. package/dist/esm/llm/google/utils/common.mjs.map +1 -0
  91. package/dist/esm/llm/ollama/index.mjs +65 -0
  92. package/dist/esm/llm/ollama/index.mjs.map +1 -0
  93. package/dist/esm/llm/ollama/utils.mjs +155 -0
  94. package/dist/esm/llm/ollama/utils.mjs.map +1 -0
  95. package/dist/esm/llm/openai/index.mjs +388 -4
  96. package/dist/esm/llm/openai/index.mjs.map +1 -1
  97. package/dist/esm/llm/openai/utils/index.mjs +666 -0
  98. package/dist/esm/llm/openai/utils/index.mjs.map +1 -0
  99. package/dist/esm/llm/providers.mjs +5 -5
  100. package/dist/esm/llm/providers.mjs.map +1 -1
  101. package/dist/esm/llm/text.mjs +14 -3
  102. package/dist/esm/llm/text.mjs.map +1 -1
  103. package/dist/esm/llm/vertexai/index.mjs +328 -0
  104. package/dist/esm/llm/vertexai/index.mjs.map +1 -0
  105. package/dist/esm/main.mjs +6 -5
  106. package/dist/esm/main.mjs.map +1 -1
  107. package/dist/esm/run.mjs +121 -83
  108. package/dist/esm/run.mjs.map +1 -1
  109. package/dist/esm/stream.mjs +87 -54
  110. package/dist/esm/stream.mjs.map +1 -1
  111. package/dist/esm/tools/ToolNode.mjs +10 -4
  112. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  113. package/dist/esm/tools/handlers.mjs +119 -15
  114. package/dist/esm/tools/handlers.mjs.map +1 -1
  115. package/dist/esm/tools/search/anthropic.mjs +37 -0
  116. package/dist/esm/tools/search/anthropic.mjs.map +1 -0
  117. package/dist/esm/tools/search/firecrawl.mjs +55 -9
  118. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  119. package/dist/esm/tools/search/format.mjs +7 -7
  120. package/dist/esm/tools/search/format.mjs.map +1 -1
  121. package/dist/esm/tools/search/rerankers.mjs +7 -29
  122. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  123. package/dist/esm/tools/search/search.mjs +86 -16
  124. package/dist/esm/tools/search/search.mjs.map +1 -1
  125. package/dist/esm/tools/search/tool.mjs +4 -2
  126. package/dist/esm/tools/search/tool.mjs.map +1 -1
  127. package/dist/esm/tools/search/utils.mjs +1 -1
  128. package/dist/esm/tools/search/utils.mjs.map +1 -1
  129. package/dist/esm/utils/events.mjs +29 -0
  130. package/dist/esm/utils/events.mjs.map +1 -0
  131. package/dist/esm/utils/title.mjs +57 -22
  132. package/dist/esm/utils/title.mjs.map +1 -1
  133. package/dist/esm/utils/tokens.mjs +54 -8
  134. package/dist/esm/utils/tokens.mjs.map +1 -1
  135. package/dist/types/agents/AgentContext.d.ts +91 -0
  136. package/dist/types/common/enum.d.ts +15 -6
  137. package/dist/types/events.d.ts +5 -4
  138. package/dist/types/graphs/Graph.d.ts +64 -67
  139. package/dist/types/graphs/MultiAgentGraph.d.ts +37 -0
  140. package/dist/types/graphs/index.d.ts +1 -0
  141. package/dist/types/llm/anthropic/index.d.ts +11 -0
  142. package/dist/types/llm/anthropic/types.d.ts +9 -3
  143. package/dist/types/llm/anthropic/utils/message_inputs.d.ts +1 -1
  144. package/dist/types/llm/anthropic/utils/output_parsers.d.ts +4 -4
  145. package/dist/types/llm/anthropic/utils/tools.d.ts +3 -0
  146. package/dist/types/llm/google/index.d.ts +13 -0
  147. package/dist/types/llm/google/types.d.ts +32 -0
  148. package/dist/types/llm/google/utils/common.d.ts +19 -0
  149. package/dist/types/llm/google/utils/tools.d.ts +10 -0
  150. package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +14 -0
  151. package/dist/types/llm/ollama/index.d.ts +7 -0
  152. package/dist/types/llm/ollama/utils.d.ts +7 -0
  153. package/dist/types/llm/openai/index.d.ts +72 -3
  154. package/dist/types/llm/openai/types.d.ts +10 -0
  155. package/dist/types/llm/openai/utils/index.d.ts +20 -0
  156. package/dist/types/llm/text.d.ts +1 -1
  157. package/dist/types/llm/vertexai/index.d.ts +293 -0
  158. package/dist/types/messages/reducer.d.ts +9 -0
  159. package/dist/types/run.d.ts +19 -12
  160. package/dist/types/scripts/ant_web_search.d.ts +1 -0
  161. package/dist/types/scripts/args.d.ts +2 -1
  162. package/dist/types/scripts/handoff-test.d.ts +1 -0
  163. package/dist/types/scripts/multi-agent-conditional.d.ts +1 -0
  164. package/dist/types/scripts/multi-agent-parallel.d.ts +1 -0
  165. package/dist/types/scripts/multi-agent-sequence.d.ts +1 -0
  166. package/dist/types/scripts/multi-agent-supervisor.d.ts +1 -0
  167. package/dist/types/scripts/multi-agent-test.d.ts +1 -0
  168. package/dist/types/scripts/test-custom-prompt-key.d.ts +2 -0
  169. package/dist/types/scripts/test-handoff-input.d.ts +2 -0
  170. package/dist/types/scripts/test-multi-agent-list-handoff.d.ts +2 -0
  171. package/dist/types/stream.d.ts +10 -3
  172. package/dist/types/tools/CodeExecutor.d.ts +2 -2
  173. package/dist/types/tools/ToolNode.d.ts +1 -1
  174. package/dist/types/tools/handlers.d.ts +17 -4
  175. package/dist/types/tools/search/anthropic.d.ts +16 -0
  176. package/dist/types/tools/search/firecrawl.d.ts +15 -0
  177. package/dist/types/tools/search/rerankers.d.ts +0 -1
  178. package/dist/types/tools/search/types.d.ts +30 -9
  179. package/dist/types/types/graph.d.ts +129 -15
  180. package/dist/types/types/llm.d.ts +24 -10
  181. package/dist/types/types/run.d.ts +46 -8
  182. package/dist/types/types/stream.d.ts +16 -2
  183. package/dist/types/types/tools.d.ts +1 -1
  184. package/dist/types/utils/events.d.ts +6 -0
  185. package/dist/types/utils/title.d.ts +2 -1
  186. package/dist/types/utils/tokens.d.ts +24 -0
  187. package/package.json +37 -17
  188. package/src/agents/AgentContext.ts +315 -0
  189. package/src/common/enum.ts +14 -5
  190. package/src/events.ts +24 -13
  191. package/src/graphs/Graph.ts +495 -312
  192. package/src/graphs/MultiAgentGraph.ts +498 -0
  193. package/src/graphs/index.ts +2 -1
  194. package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
  195. package/src/llm/anthropic/index.ts +78 -13
  196. package/src/llm/anthropic/llm.spec.ts +491 -115
  197. package/src/llm/anthropic/types.ts +39 -3
  198. package/src/llm/anthropic/utils/message_inputs.ts +67 -11
  199. package/src/llm/anthropic/utils/message_outputs.ts +21 -2
  200. package/src/llm/anthropic/utils/output_parsers.ts +25 -6
  201. package/src/llm/anthropic/utils/tools.ts +29 -0
  202. package/src/llm/google/index.ts +218 -0
  203. package/src/llm/google/types.ts +43 -0
  204. package/src/llm/google/utils/common.ts +646 -0
  205. package/src/llm/google/utils/tools.ts +160 -0
  206. package/src/llm/google/utils/zod_to_genai_parameters.ts +86 -0
  207. package/src/llm/ollama/index.ts +89 -0
  208. package/src/llm/ollama/utils.ts +193 -0
  209. package/src/llm/openai/index.ts +600 -14
  210. package/src/llm/openai/types.ts +24 -0
  211. package/src/llm/openai/utils/index.ts +912 -0
  212. package/src/llm/openai/utils/isReasoningModel.test.ts +90 -0
  213. package/src/llm/providers.ts +10 -9
  214. package/src/llm/text.ts +26 -7
  215. package/src/llm/vertexai/index.ts +360 -0
  216. package/src/messages/reducer.ts +80 -0
  217. package/src/run.ts +181 -112
  218. package/src/scripts/ant_web_search.ts +158 -0
  219. package/src/scripts/args.ts +12 -8
  220. package/src/scripts/cli4.ts +29 -21
  221. package/src/scripts/cli5.ts +29 -21
  222. package/src/scripts/code_exec.ts +54 -23
  223. package/src/scripts/code_exec_files.ts +48 -17
  224. package/src/scripts/code_exec_simple.ts +46 -27
  225. package/src/scripts/handoff-test.ts +135 -0
  226. package/src/scripts/image.ts +52 -20
  227. package/src/scripts/multi-agent-conditional.ts +220 -0
  228. package/src/scripts/multi-agent-example-output.md +110 -0
  229. package/src/scripts/multi-agent-parallel.ts +341 -0
  230. package/src/scripts/multi-agent-sequence.ts +212 -0
  231. package/src/scripts/multi-agent-supervisor.ts +361 -0
  232. package/src/scripts/multi-agent-test.ts +186 -0
  233. package/src/scripts/search.ts +1 -9
  234. package/src/scripts/simple.ts +25 -10
  235. package/src/scripts/test-custom-prompt-key.ts +145 -0
  236. package/src/scripts/test-handoff-input.ts +110 -0
  237. package/src/scripts/test-multi-agent-list-handoff.ts +258 -0
  238. package/src/scripts/tools.ts +48 -18
  239. package/src/specs/anthropic.simple.test.ts +150 -34
  240. package/src/specs/azure.simple.test.ts +325 -0
  241. package/src/specs/openai.simple.test.ts +140 -33
  242. package/src/specs/openrouter.simple.test.ts +107 -0
  243. package/src/specs/prune.test.ts +4 -9
  244. package/src/specs/reasoning.test.ts +80 -44
  245. package/src/specs/token-memoization.test.ts +39 -0
  246. package/src/stream.test.ts +94 -0
  247. package/src/stream.ts +139 -60
  248. package/src/tools/ToolNode.ts +21 -7
  249. package/src/tools/handlers.ts +192 -18
  250. package/src/tools/search/anthropic.ts +51 -0
  251. package/src/tools/search/firecrawl.ts +69 -20
  252. package/src/tools/search/format.ts +6 -8
  253. package/src/tools/search/rerankers.ts +7 -40
  254. package/src/tools/search/search.ts +97 -16
  255. package/src/tools/search/tool.ts +5 -2
  256. package/src/tools/search/types.ts +30 -10
  257. package/src/tools/search/utils.ts +1 -1
  258. package/src/types/graph.ts +315 -103
  259. package/src/types/llm.ts +25 -12
  260. package/src/types/run.ts +51 -13
  261. package/src/types/stream.ts +22 -1
  262. package/src/types/tools.ts +16 -10
  263. package/src/utils/events.ts +32 -0
  264. package/src/utils/llmConfig.ts +19 -7
  265. package/src/utils/title.ts +104 -30
  266. package/src/utils/tokens.ts +69 -10
@@ -8,7 +8,6 @@ import type * as t from '@/types';
8
8
  import { ModelEndHandler, ToolEndHandler } from '@/events';
9
9
  import { ChatModelStreamHandler } from '@/stream';
10
10
 
11
-
12
11
  import { getArgs } from '@/scripts/args';
13
12
  import { Run } from '@/run';
14
13
  import { GraphEvents, Callback, Providers } from '@/common';
@@ -25,31 +24,35 @@ async function testStandardStreaming(): Promise<void> {
25
24
  handle: (_event: string, data: t.StreamEventData): void => {
26
25
  console.log('====== ON_RUN_STEP_COMPLETED ======');
27
26
  console.dir(data, { depth: null });
28
- }
27
+ },
29
28
  },
30
29
  [GraphEvents.ON_RUN_STEP]: {
31
30
  handle: (_event: string, data: t.StreamEventData): void => {
32
31
  console.log('====== ON_RUN_STEP ======');
33
32
  console.dir(data, { depth: null });
34
- }
33
+ },
35
34
  },
36
35
  [GraphEvents.ON_RUN_STEP_DELTA]: {
37
36
  handle: (_event: string, data: t.StreamEventData): void => {
38
37
  console.log('====== ON_RUN_STEP_DELTA ======');
39
38
  console.dir(data, { depth: null });
40
- }
39
+ },
41
40
  },
42
41
  [GraphEvents.ON_MESSAGE_DELTA]: {
43
42
  handle: (_event: string, data: t.StreamEventData): void => {
44
43
  console.log('====== ON_MESSAGE_DELTA ======');
45
44
  console.dir(data, { depth: null });
46
- }
45
+ },
47
46
  },
48
47
  [GraphEvents.TOOL_START]: {
49
- handle: (_event: string, data: t.StreamEventData, metadata?: Record<string, unknown>): void => {
48
+ handle: (
49
+ _event: string,
50
+ data: t.StreamEventData,
51
+ metadata?: Record<string, unknown>
52
+ ): void => {
50
53
  console.log('====== TOOL_START ======');
51
54
  console.dir(data, { depth: null });
52
- }
55
+ },
53
56
  },
54
57
  // [GraphEvents.LLM_STREAM]: new LLMStreamHandler(),
55
58
  // [GraphEvents.LLM_START]: {
@@ -90,11 +93,12 @@ async function testStandardStreaming(): Promise<void> {
90
93
  // const llmConfig = getLLMConfig(provider);
91
94
  let llmConfig = getLLMConfig(Providers.OPENAI);
92
95
 
93
- const graphConfig: t.StandardGraphConfig = {
96
+ const graphConfig: t.LegacyGraphConfig = {
94
97
  type: 'standard',
95
98
  llmConfig,
96
99
  tools: [new TavilySearchResults()],
97
- instructions: 'You are a friendly AI assistant. Always address the user by their name.',
100
+ instructions:
101
+ 'You are a friendly AI assistant. Always address the user by their name.',
98
102
  additional_instructions: `The user's name is ${userName} and they are located in ${location}.`,
99
103
  };
100
104
 
@@ -116,21 +120,25 @@ async function testStandardStreaming(): Promise<void> {
116
120
  console.log(' Test 1: OpenAI Tool Usage');
117
121
 
118
122
  // conversationHistory.push(new HumanMessage(`Hi I'm ${userName}.`));
119
- conversationHistory.push(new HumanMessage(`search for good sunrise hikes near ${location}
120
- then search weather in ${location} for today which is ${currentDate}`));
123
+ conversationHistory.push(
124
+ new HumanMessage(`search for good sunrise hikes near ${location}
125
+ then search weather in ${location} for today which is ${currentDate}`)
126
+ );
121
127
  let inputs = {
122
128
  messages: conversationHistory,
123
129
  };
124
- const contentParts = await run.processStream(inputs, config,
125
- // {
126
- // [Callback.TOOL_START]: (graph, ...args) => {
127
- // console.log('TOOL_START callback');
128
- // },
129
- // [Callback.TOOL_END]: (graph, ...args) => {
130
- // console.log('TOOL_END callback');
131
- // },
132
- // }
133
- );
130
+ const contentParts = await run.processStream(
131
+ inputs,
132
+ config
133
+ // {
134
+ // [Callback.TOOL_START]: (graph, ...args) => {
135
+ // console.log('TOOL_START callback');
136
+ // },
137
+ // [Callback.TOOL_END]: (graph, ...args) => {
138
+ // console.log('TOOL_END callback');
139
+ // },
140
+ // }
141
+ );
134
142
  const finalMessages = run.getRunMessages();
135
143
  if (finalMessages) {
136
144
  conversationHistory.push(...finalMessages);
@@ -8,7 +8,6 @@ import type * as t from '@/types';
8
8
  import { ModelEndHandler, ToolEndHandler } from '@/events';
9
9
  import { ChatModelStreamHandler } from '@/stream';
10
10
 
11
-
12
11
  import { getArgs } from '@/scripts/args';
13
12
  import { Run } from '@/run';
14
13
  import { GraphEvents, Callback, Providers } from '@/common';
@@ -25,31 +24,35 @@ async function testStandardStreaming(): Promise<void> {
25
24
  handle: (_event: string, data: t.StreamEventData): void => {
26
25
  console.log('====== ON_RUN_STEP_COMPLETED ======');
27
26
  console.dir(data, { depth: null });
28
- }
27
+ },
29
28
  },
30
29
  [GraphEvents.ON_RUN_STEP]: {
31
30
  handle: (_event: string, data: t.StreamEventData): void => {
32
31
  console.log('====== ON_RUN_STEP ======');
33
32
  console.dir(data, { depth: null });
34
- }
33
+ },
35
34
  },
36
35
  [GraphEvents.ON_RUN_STEP_DELTA]: {
37
36
  handle: (_event: string, data: t.StreamEventData): void => {
38
37
  console.log('====== ON_RUN_STEP_DELTA ======');
39
38
  console.dir(data, { depth: null });
40
- }
39
+ },
41
40
  },
42
41
  [GraphEvents.ON_MESSAGE_DELTA]: {
43
42
  handle: (_event: string, data: t.StreamEventData): void => {
44
43
  console.log('====== ON_MESSAGE_DELTA ======');
45
44
  console.dir(data, { depth: null });
46
- }
45
+ },
47
46
  },
48
47
  [GraphEvents.TOOL_START]: {
49
- handle: (_event: string, data: t.StreamEventData, metadata?: Record<string, unknown>): void => {
48
+ handle: (
49
+ _event: string,
50
+ data: t.StreamEventData,
51
+ metadata?: Record<string, unknown>
52
+ ): void => {
50
53
  console.log('====== TOOL_START ======');
51
54
  console.dir(data, { depth: null });
52
- }
55
+ },
53
56
  },
54
57
  // [GraphEvents.LLM_STREAM]: new LLMStreamHandler(),
55
58
  // [GraphEvents.LLM_START]: {
@@ -90,11 +93,12 @@ async function testStandardStreaming(): Promise<void> {
90
93
  // const llmConfig = getLLMConfig(provider);
91
94
  let llmConfig = getLLMConfig(Providers.ANTHROPIC);
92
95
 
93
- const graphConfig: t.StandardGraphConfig = {
96
+ const graphConfig: t.LegacyGraphConfig = {
94
97
  type: 'standard',
95
98
  llmConfig,
96
99
  tools: [new TavilySearchResults()],
97
- instructions: 'You are a friendly AI assistant. Always address the user by their name.',
100
+ instructions:
101
+ 'You are a friendly AI assistant. Always address the user by their name.',
98
102
  additional_instructions: `The user's name is ${userName} and they are located in ${location}.`,
99
103
  };
100
104
 
@@ -116,21 +120,25 @@ async function testStandardStreaming(): Promise<void> {
116
120
  console.log(' Test 1: Anthropic Tool Usage');
117
121
 
118
122
  // conversationHistory.push(new HumanMessage(`Hi I'm ${userName}.`));
119
- conversationHistory.push(new HumanMessage(`search for good sunrise hikes near ${location}
120
- then search weather in ${location} for today which is ${currentDate}`));
123
+ conversationHistory.push(
124
+ new HumanMessage(`search for good sunrise hikes near ${location}
125
+ then search weather in ${location} for today which is ${currentDate}`)
126
+ );
121
127
  let inputs = {
122
128
  messages: conversationHistory,
123
129
  };
124
- const contentParts = await run.processStream(inputs, config,
125
- // {
126
- // [Callback.TOOL_START]: (graph, ...args) => {
127
- // console.log('TOOL_START callback');
128
- // },
129
- // [Callback.TOOL_END]: (graph, ...args) => {
130
- // console.log('TOOL_END callback');
131
- // },
132
- // }
133
- );
130
+ const contentParts = await run.processStream(
131
+ inputs,
132
+ config
133
+ // {
134
+ // [Callback.TOOL_START]: (graph, ...args) => {
135
+ // console.log('TOOL_START callback');
136
+ // },
137
+ // [Callback.TOOL_END]: (graph, ...args) => {
138
+ // console.log('TOOL_END callback');
139
+ // },
140
+ // }
141
+ );
134
142
  const finalMessages = run.getRunMessages();
135
143
  if (finalMessages) {
136
144
  conversationHistory.push(...finalMessages);
@@ -6,7 +6,11 @@ import { TavilySearchResults } from '@langchain/community/tools/tavily_search';
6
6
  import type { RunnableConfig } from '@langchain/core/runnables';
7
7
  import type * as t from '@/types';
8
8
  import { ChatModelStreamHandler, createContentAggregator } from '@/stream';
9
- import { ToolEndHandler, ModelEndHandler, createMetadataAggregator } from '@/events';
9
+ import {
10
+ ToolEndHandler,
11
+ ModelEndHandler,
12
+ createMetadataAggregator,
13
+ } from '@/events';
10
14
  import { getLLMConfig } from '@/utils/llmConfig';
11
15
  import { getArgs } from '@/scripts/args';
12
16
  import { GraphEvents } from '@/common';
@@ -23,38 +27,57 @@ async function testCodeExecution(): Promise<void> {
23
27
  [GraphEvents.CHAT_MODEL_END]: new ModelEndHandler(),
24
28
  [GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
25
29
  [GraphEvents.ON_RUN_STEP_COMPLETED]: {
26
- handle: (event: GraphEvents.ON_RUN_STEP_COMPLETED, data: t.StreamEventData): void => {
30
+ handle: (
31
+ event: GraphEvents.ON_RUN_STEP_COMPLETED,
32
+ data: t.StreamEventData
33
+ ): void => {
27
34
  console.log('====== ON_RUN_STEP_COMPLETED ======');
28
35
  console.dir(data, { depth: null });
29
- aggregateContent({ event, data: data as unknown as { result: t.ToolEndEvent } });
30
- }
36
+ aggregateContent({
37
+ event,
38
+ data: data as unknown as { result: t.ToolEndEvent },
39
+ });
40
+ },
31
41
  },
32
42
  [GraphEvents.ON_RUN_STEP]: {
33
- handle: (event: GraphEvents.ON_RUN_STEP, data: t.StreamEventData): void => {
43
+ handle: (
44
+ event: GraphEvents.ON_RUN_STEP,
45
+ data: t.StreamEventData
46
+ ): void => {
34
47
  console.log('====== ON_RUN_STEP ======');
35
48
  console.dir(data, { depth: null });
36
49
  aggregateContent({ event, data: data as t.RunStep });
37
- }
50
+ },
38
51
  },
39
52
  [GraphEvents.ON_RUN_STEP_DELTA]: {
40
- handle: (event: GraphEvents.ON_RUN_STEP_DELTA, data: t.StreamEventData): void => {
41
- console.log('====== ON_RUN_STEP_DELTA ======');
42
- console.dir(data, { depth: null });
53
+ handle: (
54
+ event: GraphEvents.ON_RUN_STEP_DELTA,
55
+ data: t.StreamEventData
56
+ ): void => {
57
+ // console.log('====== ON_RUN_STEP_DELTA ======');
58
+ // console.dir(data, { depth: null });
43
59
  aggregateContent({ event, data: data as t.RunStepDeltaEvent });
44
- }
60
+ },
45
61
  },
46
62
  [GraphEvents.ON_MESSAGE_DELTA]: {
47
- handle: (event: GraphEvents.ON_MESSAGE_DELTA, data: t.StreamEventData): void => {
48
- console.log('====== ON_MESSAGE_DELTA ======');
49
- console.dir(data, { depth: null });
63
+ handle: (
64
+ event: GraphEvents.ON_MESSAGE_DELTA,
65
+ data: t.StreamEventData
66
+ ): void => {
67
+ // console.log('====== ON_MESSAGE_DELTA ======');
68
+ // console.dir(data, { depth: null });
50
69
  aggregateContent({ event, data: data as t.MessageDeltaEvent });
51
- }
70
+ },
52
71
  },
53
72
  [GraphEvents.TOOL_START]: {
54
- handle: (_event: string, data: t.StreamEventData, metadata?: Record<string, unknown>): void => {
73
+ handle: (
74
+ _event: string,
75
+ data: t.StreamEventData,
76
+ metadata?: Record<string, unknown>
77
+ ): void => {
55
78
  console.log('====== TOOL_START ======');
56
79
  console.dir(data, { depth: null });
57
- }
80
+ },
58
81
  },
59
82
  };
60
83
 
@@ -66,14 +89,19 @@ async function testCodeExecution(): Promise<void> {
66
89
  type: 'standard',
67
90
  llmConfig,
68
91
  tools: [new TavilySearchResults(), createCodeExecutionTool()],
69
- instructions: 'You are a friendly AI assistant with coding capabilities. Always address the user by their name.',
92
+ instructions:
93
+ 'You are a friendly AI assistant with coding capabilities. Always address the user by their name.',
70
94
  additional_instructions: `The user's name is ${userName} and they are located in ${location}.`,
71
95
  },
72
96
  returnContent: true,
73
97
  customHandlers,
74
98
  });
75
99
 
76
- const config: Partial<RunnableConfig> & { version: 'v1' | 'v2'; run_id?: string; streamMode: string } = {
100
+ const config: Partial<RunnableConfig> & {
101
+ version: 'v1' | 'v2';
102
+ run_id?: string;
103
+ streamMode: string;
104
+ } = {
77
105
  configurable: {
78
106
  provider,
79
107
  thread_id: 'conversation-num-1',
@@ -148,16 +176,19 @@ async function testCodeExecution(): Promise<void> {
148
176
  conversationHistory.push(...finalMessages2);
149
177
  }
150
178
  console.log('\n\n====================\n\n');
151
- console.dir(contentParts, { depth: null });
179
+ console.dir(finalContentParts2, { depth: null });
152
180
 
153
181
  const { handleLLMEnd, collected } = createMetadataAggregator();
154
182
  const titleResult = await run.generateTitle({
183
+ provider,
155
184
  inputText: userMessage2,
156
185
  contentParts,
157
186
  chainOptions: {
158
- callbacks: [{
159
- handleLLMEnd,
160
- }],
187
+ callbacks: [
188
+ {
189
+ handleLLMEnd,
190
+ },
191
+ ],
161
192
  },
162
193
  });
163
194
  console.log('Generated Title:', titleResult);
@@ -180,4 +211,4 @@ testCodeExecution().catch((err) => {
180
211
  console.log('Conversation history:');
181
212
  console.dir(conversationHistory, { depth: null });
182
213
  process.exit(1);
183
- });
214
+ });
@@ -5,7 +5,11 @@ import { HumanMessage, BaseMessage } from '@langchain/core/messages';
5
5
  import type { RunnableConfig } from '@langchain/core/runnables';
6
6
  import type * as t from '@/types';
7
7
  import { ChatModelStreamHandler, createContentAggregator } from '@/stream';
8
- import { ToolEndHandler, ModelEndHandler, createMetadataAggregator } from '@/events';
8
+ import {
9
+ ToolEndHandler,
10
+ ModelEndHandler,
11
+ createMetadataAggregator,
12
+ } from '@/events';
9
13
  import { getLLMConfig } from '@/utils/llmConfig';
10
14
  import { getArgs } from '@/scripts/args';
11
15
  import { GraphEvents } from '@/common';
@@ -22,38 +26,57 @@ async function testCodeExecution(): Promise<void> {
22
26
  [GraphEvents.CHAT_MODEL_END]: new ModelEndHandler(),
23
27
  [GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
24
28
  [GraphEvents.ON_RUN_STEP_COMPLETED]: {
25
- handle: (event: GraphEvents.ON_RUN_STEP_COMPLETED, data: t.StreamEventData): void => {
29
+ handle: (
30
+ event: GraphEvents.ON_RUN_STEP_COMPLETED,
31
+ data: t.StreamEventData
32
+ ): void => {
26
33
  console.log('====== ON_RUN_STEP_COMPLETED ======');
27
34
  console.dir(data, { depth: null });
28
- aggregateContent({ event, data: data as unknown as { result: t.ToolEndEvent } });
29
- }
35
+ aggregateContent({
36
+ event,
37
+ data: data as unknown as { result: t.ToolEndEvent },
38
+ });
39
+ },
30
40
  },
31
41
  [GraphEvents.ON_RUN_STEP]: {
32
- handle: (event: GraphEvents.ON_RUN_STEP, data: t.StreamEventData): void => {
42
+ handle: (
43
+ event: GraphEvents.ON_RUN_STEP,
44
+ data: t.StreamEventData
45
+ ): void => {
33
46
  console.log('====== ON_RUN_STEP ======');
34
47
  console.dir(data, { depth: null });
35
48
  aggregateContent({ event, data: data as t.RunStep });
36
- }
49
+ },
37
50
  },
38
51
  [GraphEvents.ON_RUN_STEP_DELTA]: {
39
- handle: (event: GraphEvents.ON_RUN_STEP_DELTA, data: t.StreamEventData): void => {
52
+ handle: (
53
+ event: GraphEvents.ON_RUN_STEP_DELTA,
54
+ data: t.StreamEventData
55
+ ): void => {
40
56
  console.log('====== ON_RUN_STEP_DELTA ======');
41
57
  console.dir(data, { depth: null });
42
58
  aggregateContent({ event, data: data as t.RunStepDeltaEvent });
43
- }
59
+ },
44
60
  },
45
61
  [GraphEvents.ON_MESSAGE_DELTA]: {
46
- handle: (event: GraphEvents.ON_MESSAGE_DELTA, data: t.StreamEventData): void => {
62
+ handle: (
63
+ event: GraphEvents.ON_MESSAGE_DELTA,
64
+ data: t.StreamEventData
65
+ ): void => {
47
66
  console.log('====== ON_MESSAGE_DELTA ======');
48
67
  console.dir(data, { depth: null });
49
68
  aggregateContent({ event, data: data as t.MessageDeltaEvent });
50
- }
69
+ },
51
70
  },
52
71
  [GraphEvents.TOOL_START]: {
53
- handle: (_event: string, data: t.StreamEventData, metadata?: Record<string, unknown>): void => {
72
+ handle: (
73
+ _event: string,
74
+ data: t.StreamEventData,
75
+ metadata?: Record<string, unknown>
76
+ ): void => {
54
77
  console.log('====== TOOL_START ======');
55
78
  console.dir(data, { depth: null });
56
- }
79
+ },
57
80
  },
58
81
  };
59
82
 
@@ -65,14 +88,19 @@ async function testCodeExecution(): Promise<void> {
65
88
  type: 'standard',
66
89
  llmConfig,
67
90
  tools: [createCodeExecutionTool()],
68
- instructions: 'You are a friendly AI assistant with coding capabilities. Always address the user by their name.',
91
+ instructions:
92
+ 'You are a friendly AI assistant with coding capabilities. Always address the user by their name.',
69
93
  additional_instructions: `The user's name is ${userName} and they are located in ${location}. The current date is ${currentDate}.`,
70
94
  },
71
95
  returnContent: true,
72
96
  customHandlers,
73
97
  });
74
98
 
75
- const config: Partial<RunnableConfig> & { version: 'v1' | 'v2'; run_id?: string; streamMode: string } = {
99
+ const config: Partial<RunnableConfig> & {
100
+ version: 'v1' | 'v2';
101
+ run_id?: string;
102
+ streamMode: string;
103
+ } = {
76
104
  configurable: {
77
105
  provider,
78
106
  thread_id: 'conversation-num-1',
@@ -131,12 +159,15 @@ async function testCodeExecution(): Promise<void> {
131
159
 
132
160
  const { handleLLMEnd, collected } = createMetadataAggregator();
133
161
  const titleResult = await run.generateTitle({
162
+ provider,
134
163
  inputText: userMessage2,
135
164
  contentParts,
136
165
  chainOptions: {
137
- callbacks: [{
138
- handleLLMEnd,
139
- }],
166
+ callbacks: [
167
+ {
168
+ handleLLMEnd,
169
+ },
170
+ ],
140
171
  },
141
172
  });
142
173
  console.log('Generated Title:', titleResult);
@@ -23,45 +23,74 @@ async function testCodeExecution(): Promise<void> {
23
23
  [GraphEvents.CHAT_MODEL_END]: new ModelEndHandler(),
24
24
  [GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
25
25
  [GraphEvents.ON_RUN_STEP_COMPLETED]: {
26
- handle: (event: GraphEvents.ON_RUN_STEP_COMPLETED, data: t.StreamEventData): void => {
26
+ handle: (
27
+ event: GraphEvents.ON_RUN_STEP_COMPLETED,
28
+ data: t.StreamEventData
29
+ ): void => {
27
30
  console.log('====== ON_RUN_STEP_COMPLETED ======');
28
31
  console.dir(data, { depth: null });
29
- aggregateContent({ event, data: data as unknown as { result: t.ToolEndEvent } });
30
- }
32
+ aggregateContent({
33
+ event,
34
+ data: data as unknown as { result: t.ToolEndEvent },
35
+ });
36
+ },
31
37
  },
32
38
  [GraphEvents.ON_RUN_STEP]: {
33
- handle: (event: GraphEvents.ON_RUN_STEP, data: t.StreamEventData): void => {
39
+ handle: (
40
+ event: GraphEvents.ON_RUN_STEP,
41
+ data: t.StreamEventData
42
+ ): void => {
34
43
  console.log('====== ON_RUN_STEP ======');
35
44
  console.dir(data, { depth: null });
36
45
  aggregateContent({ event, data: data as t.RunStep });
37
- }
46
+ },
38
47
  },
39
48
  [GraphEvents.ON_RUN_STEP_DELTA]: {
40
- handle: (event: GraphEvents.ON_RUN_STEP_DELTA, data: t.StreamEventData): void => {
49
+ handle: (
50
+ event: GraphEvents.ON_RUN_STEP_DELTA,
51
+ data: t.StreamEventData
52
+ ): void => {
41
53
  console.log('====== ON_RUN_STEP_DELTA ======');
42
54
  console.dir(data, { depth: null });
43
55
  aggregateContent({ event, data: data as t.RunStepDeltaEvent });
44
- }
56
+ },
45
57
  },
46
58
  [GraphEvents.ON_MESSAGE_DELTA]: {
47
- handle: (event: GraphEvents.ON_MESSAGE_DELTA, data: t.StreamEventData): void => {
59
+ handle: (
60
+ event: GraphEvents.ON_MESSAGE_DELTA,
61
+ data: t.StreamEventData
62
+ ): void => {
48
63
  console.log('====== ON_MESSAGE_DELTA ======');
49
64
  console.dir(data, { depth: null });
50
65
  aggregateContent({ event, data: data as t.MessageDeltaEvent });
51
- }
66
+ },
52
67
  },
53
68
  [GraphEvents.TOOL_START]: {
54
- handle: (_event: string, data: t.StreamEventData, metadata?: Record<string, unknown>): void => {
69
+ handle: (
70
+ _event: string,
71
+ data: t.StreamEventData,
72
+ metadata?: Record<string, unknown>
73
+ ): void => {
55
74
  console.log('====== TOOL_START ======');
56
75
  console.dir(data, { depth: null });
57
- }
76
+ },
58
77
  },
59
78
  };
60
79
 
61
80
  const llmConfig = getLLMConfig(provider);
62
- const instructions = 'You are a friendly AI assistant with coding capabilities. Always address the user by their name.';
81
+ const instructions =
82
+ 'You are a friendly AI assistant with coding capabilities. Always address the user by their name.';
63
83
  const additional_instructions = `The user's name is ${userName} and they are located in ${location}.`;
64
84
 
85
+ // const userMessage1 = `how much memory is this (its in bytes) in MB? 31192000`;
86
+ // const userMessage1 = `can you show me a good use case for rscript by running some code`;
87
+ const userMessage1 = `Run hello world in french and in english, using python. please run 2 parallel code executions.`;
88
+ const humanMessage = new HumanMessage(userMessage1);
89
+ const tokenCounter = await createTokenCounter();
90
+ const indexTokenCountMap = {
91
+ 0: tokenCounter(humanMessage),
92
+ };
93
+
65
94
  const runConfig: t.RunConfig = {
66
95
  runId: 'message-num-1',
67
96
  graphConfig: {
@@ -70,9 +99,12 @@ async function testCodeExecution(): Promise<void> {
70
99
  tools: [new TavilySearchResults(), createCodeExecutionTool()],
71
100
  instructions,
72
101
  additional_instructions,
102
+ maxContextTokens: 8000,
73
103
  },
74
104
  returnContent: true,
75
105
  customHandlers,
106
+ indexTokenCountMap,
107
+ tokenCounter,
76
108
  };
77
109
  const run = await Run.create<t.IState>(runConfig);
78
110
 
@@ -87,25 +119,12 @@ async function testCodeExecution(): Promise<void> {
87
119
 
88
120
  console.log('Test 1: Simple Code Execution');
89
121
 
90
- // const userMessage1 = `how much memory is this (its in bytes) in MB? 31192000`;
91
- // const userMessage1 = `can you show me a good use case for rscript by running some code`;
92
- const userMessage1 = `Run hello world in french and in english, using python. please run 2 parallel code executions.`;
93
- const humanMessage = new HumanMessage(userMessage1);
94
- const tokenCounter = await createTokenCounter();
95
- const indexTokenCountMap = {
96
- 0: tokenCounter(humanMessage),
97
- };
98
-
99
122
  conversationHistory.push(humanMessage);
100
123
 
101
124
  let inputs = {
102
125
  messages: conversationHistory,
103
126
  };
104
- const finalContentParts1 = await run.processStream(inputs, config, {
105
- maxContextTokens: 8000,
106
- indexTokenCountMap,
107
- tokenCounter,
108
- });
127
+ const finalContentParts1 = await run.processStream(inputs, config);
109
128
  const finalMessages1 = run.getRunMessages();
110
129
  if (finalMessages1) {
111
130
  conversationHistory.push(...finalMessages1);
@@ -126,4 +145,4 @@ testCodeExecution().catch((err) => {
126
145
  console.log('Conversation history:');
127
146
  console.dir(conversationHistory, { depth: null });
128
147
  process.exit(1);
129
- });
148
+ });