@google/adk 0.2.4 → 0.3.0

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 (191) hide show
  1. package/dist/cjs/agents/base_agent.js +52 -24
  2. package/dist/cjs/agents/callback_context.js +4 -1
  3. package/dist/cjs/agents/content_processor_utils.js +15 -7
  4. package/dist/cjs/agents/functions.js +79 -29
  5. package/dist/cjs/agents/invocation_context.js +3 -1
  6. package/dist/cjs/agents/llm_agent.js +188 -108
  7. package/dist/cjs/agents/loop_agent.js +18 -6
  8. package/dist/cjs/agents/parallel_agent.js +20 -7
  9. package/dist/cjs/agents/readonly_context.js +4 -1
  10. package/dist/cjs/agents/sequential_agent.js +34 -12
  11. package/dist/cjs/artifacts/gcs_artifact_service.js +28 -20
  12. package/dist/cjs/artifacts/in_memory_artifact_service.js +18 -4
  13. package/dist/cjs/auth/auth_handler.js +3 -1
  14. package/dist/cjs/code_executors/base_code_executor.js +14 -2
  15. package/dist/cjs/code_executors/built_in_code_executor.js +21 -5
  16. package/dist/cjs/code_executors/code_executor_context.js +5 -5
  17. package/dist/cjs/common.js +45 -0
  18. package/dist/cjs/events/event.js +1 -3
  19. package/dist/cjs/examples/base_example_provider.js +18 -2
  20. package/dist/cjs/examples/example_util.js +1 -1
  21. package/dist/cjs/index.js +19 -19
  22. package/dist/cjs/index.js.map +4 -4
  23. package/dist/cjs/memory/in_memory_memory_service.js +3 -1
  24. package/dist/cjs/models/base_llm.js +8 -4
  25. package/dist/cjs/models/gemini_llm_connection.js +1 -0
  26. package/dist/cjs/models/google_llm.js +3 -3
  27. package/dist/cjs/plugins/base_plugin.js +71 -49
  28. package/dist/cjs/plugins/logging_plugin.js +50 -13
  29. package/dist/cjs/plugins/plugin_manager.js +56 -24
  30. package/dist/cjs/plugins/security_plugin.js +5 -2
  31. package/dist/cjs/runner/runner.js +126 -101
  32. package/dist/cjs/sessions/in_memory_session_service.js +38 -14
  33. package/dist/cjs/telemetry/google_cloud.js +7 -9
  34. package/dist/cjs/telemetry/setup.js +15 -7
  35. package/dist/cjs/telemetry/tracing.js +37 -15
  36. package/dist/cjs/tools/agent_tool.js +26 -13
  37. package/dist/cjs/tools/base_tool.js +19 -7
  38. package/dist/cjs/tools/forwarding_artifact_service.js +1 -1
  39. package/dist/cjs/tools/function_tool.js +15 -7
  40. package/dist/cjs/tools/google_search_tool.js +8 -4
  41. package/dist/cjs/tools/mcp/mcp_session_manager.js +16 -10
  42. package/dist/cjs/tools/mcp/mcp_tool.js +1 -3
  43. package/dist/cjs/tools/mcp/mcp_toolset.js +1 -1
  44. package/dist/cjs/tools/tool_context.js +4 -9
  45. package/dist/cjs/utils/env_aware_utils.js +1 -1
  46. package/dist/cjs/utils/gemini_schema_util.js +10 -4
  47. package/dist/cjs/utils/logger.js +47 -3
  48. package/dist/cjs/utils/simple_zod_to_json.js +100 -141
  49. package/dist/cjs/utils/variant_utils.js +1 -1
  50. package/dist/cjs/version.js +1 -1
  51. package/dist/esm/agents/base_agent.js +57 -25
  52. package/dist/esm/agents/callback_context.js +4 -1
  53. package/dist/esm/agents/content_processor_utils.js +25 -9
  54. package/dist/esm/agents/functions.js +83 -29
  55. package/dist/esm/agents/invocation_context.js +3 -1
  56. package/dist/esm/agents/llm_agent.js +228 -116
  57. package/dist/esm/agents/loop_agent.js +16 -5
  58. package/dist/esm/agents/parallel_agent.js +18 -6
  59. package/dist/esm/agents/readonly_context.js +4 -1
  60. package/dist/esm/agents/sequential_agent.js +33 -12
  61. package/dist/esm/artifacts/gcs_artifact_service.js +28 -20
  62. package/dist/esm/artifacts/in_memory_artifact_service.js +18 -4
  63. package/dist/esm/auth/auth_handler.js +3 -1
  64. package/dist/esm/code_executors/base_code_executor.js +12 -1
  65. package/dist/esm/code_executors/built_in_code_executor.js +19 -4
  66. package/dist/esm/code_executors/code_executor_context.js +5 -5
  67. package/dist/esm/common.js +56 -11
  68. package/dist/esm/events/event.js +1 -3
  69. package/dist/esm/examples/base_example_provider.js +16 -1
  70. package/dist/esm/examples/example_util.js +4 -2
  71. package/dist/esm/index.js +19 -19
  72. package/dist/esm/index.js.map +4 -4
  73. package/dist/esm/memory/in_memory_memory_service.js +3 -1
  74. package/dist/esm/models/base_llm.js +8 -4
  75. package/dist/esm/models/gemini_llm_connection.js +1 -0
  76. package/dist/esm/models/google_llm.js +8 -4
  77. package/dist/esm/plugins/base_plugin.js +71 -49
  78. package/dist/esm/plugins/logging_plugin.js +55 -14
  79. package/dist/esm/plugins/plugin_manager.js +56 -24
  80. package/dist/esm/plugins/security_plugin.js +5 -2
  81. package/dist/esm/runner/runner.js +139 -105
  82. package/dist/esm/sessions/in_memory_session_service.js +41 -15
  83. package/dist/esm/telemetry/google_cloud.js +7 -9
  84. package/dist/esm/telemetry/setup.js +23 -9
  85. package/dist/esm/telemetry/tracing.js +37 -15
  86. package/dist/esm/tools/agent_tool.js +25 -13
  87. package/dist/esm/tools/base_tool.js +17 -6
  88. package/dist/esm/tools/forwarding_artifact_service.js +1 -1
  89. package/dist/esm/tools/function_tool.js +13 -8
  90. package/dist/esm/tools/google_search_tool.js +6 -3
  91. package/dist/esm/tools/long_running_tool.js +3 -1
  92. package/dist/esm/tools/mcp/mcp_session_manager.js +22 -12
  93. package/dist/esm/tools/mcp/mcp_tool.js +1 -3
  94. package/dist/esm/tools/mcp/mcp_toolset.js +1 -1
  95. package/dist/esm/tools/tool_context.js +4 -9
  96. package/dist/esm/utils/env_aware_utils.js +1 -1
  97. package/dist/esm/utils/gemini_schema_util.js +10 -4
  98. package/dist/esm/utils/logger.js +43 -2
  99. package/dist/esm/utils/simple_zod_to_json.js +102 -141
  100. package/dist/esm/utils/variant_utils.js +1 -1
  101. package/dist/esm/version.js +1 -1
  102. package/dist/types/agents/base_agent.d.ts +16 -4
  103. package/dist/types/agents/callback_context.d.ts +1 -1
  104. package/dist/types/agents/invocation_context.d.ts +4 -2
  105. package/dist/types/agents/llm_agent.d.ts +43 -31
  106. package/dist/types/agents/loop_agent.d.ts +17 -1
  107. package/dist/types/agents/parallel_agent.d.ts +17 -1
  108. package/dist/types/agents/sequential_agent.d.ts +17 -1
  109. package/dist/types/artifacts/in_memory_artifact_service.d.ts +3 -3
  110. package/dist/types/auth/auth_schemes.d.ts +5 -2
  111. package/dist/types/code_executors/base_code_executor.d.ts +14 -0
  112. package/dist/types/code_executors/built_in_code_executor.d.ts +20 -1
  113. package/dist/types/code_executors/code_executor_context.d.ts +2 -4
  114. package/dist/types/common.d.ts +40 -15
  115. package/dist/types/examples/base_example_provider.d.ts +16 -0
  116. package/dist/types/index.d.ts +3 -3
  117. package/dist/types/models/base_llm_connection.d.ts +1 -1
  118. package/dist/types/models/llm_response.d.ts +1 -1
  119. package/dist/types/plugins/base_plugin.d.ts +50 -40
  120. package/dist/types/plugins/logging_plugin.d.ts +12 -12
  121. package/dist/types/plugins/plugin_manager.d.ts +12 -12
  122. package/dist/types/plugins/security_plugin.d.ts +1 -1
  123. package/dist/types/runner/runner.d.ts +18 -10
  124. package/dist/types/sessions/in_memory_session_service.d.ts +5 -5
  125. package/dist/types/telemetry/setup.d.ts +1 -1
  126. package/dist/types/telemetry/tracing.d.ts +7 -6
  127. package/dist/types/tools/agent_tool.d.ts +15 -1
  128. package/dist/types/tools/base_tool.d.ts +15 -1
  129. package/dist/types/tools/base_toolset.d.ts +2 -1
  130. package/dist/types/tools/forwarding_artifact_service.d.ts +2 -2
  131. package/dist/types/tools/function_tool.d.ts +18 -4
  132. package/dist/types/tools/google_search_tool.d.ts +5 -6
  133. package/dist/types/tools/mcp/mcp_session_manager.d.ts +10 -3
  134. package/dist/types/tools/mcp/mcp_toolset.d.ts +1 -2
  135. package/dist/types/tools/tool_context.d.ts +1 -1
  136. package/dist/types/utils/gemini_schema_util.d.ts +4 -12
  137. package/dist/types/utils/logger.d.ts +11 -10
  138. package/dist/types/utils/simple_zod_to_json.d.ts +5 -4
  139. package/dist/types/version.d.ts +1 -1
  140. package/dist/web/agents/base_agent.js +103 -36
  141. package/dist/web/agents/callback_context.js +4 -1
  142. package/dist/web/agents/content_processor_utils.js +25 -9
  143. package/dist/web/agents/functions.js +83 -29
  144. package/dist/web/agents/invocation_context.js +3 -1
  145. package/dist/web/agents/llm_agent.js +282 -137
  146. package/dist/web/agents/loop_agent.js +16 -5
  147. package/dist/web/agents/parallel_agent.js +18 -6
  148. package/dist/web/agents/readonly_context.js +4 -1
  149. package/dist/web/agents/sequential_agent.js +33 -12
  150. package/dist/web/artifacts/gcs_artifact_service.js +25 -17
  151. package/dist/web/artifacts/in_memory_artifact_service.js +18 -4
  152. package/dist/web/auth/auth_handler.js +3 -1
  153. package/dist/web/code_executors/base_code_executor.js +12 -1
  154. package/dist/web/code_executors/built_in_code_executor.js +19 -4
  155. package/dist/web/code_executors/code_executor_context.js +5 -5
  156. package/dist/web/common.js +56 -11
  157. package/dist/web/events/event.js +1 -3
  158. package/dist/web/examples/base_example_provider.js +16 -1
  159. package/dist/web/examples/example_util.js +4 -2
  160. package/dist/web/index.js +1 -1
  161. package/dist/web/index.js.map +4 -4
  162. package/dist/web/memory/in_memory_memory_service.js +3 -1
  163. package/dist/web/models/base_llm.js +8 -4
  164. package/dist/web/models/gemini_llm_connection.js +1 -0
  165. package/dist/web/models/google_llm.js +8 -4
  166. package/dist/web/plugins/base_plugin.js +71 -49
  167. package/dist/web/plugins/logging_plugin.js +55 -14
  168. package/dist/web/plugins/plugin_manager.js +56 -24
  169. package/dist/web/plugins/security_plugin.js +5 -2
  170. package/dist/web/runner/runner.js +186 -119
  171. package/dist/web/sessions/in_memory_session_service.js +41 -15
  172. package/dist/web/telemetry/google_cloud.js +7 -9
  173. package/dist/web/telemetry/setup.js +23 -9
  174. package/dist/web/telemetry/tracing.js +37 -15
  175. package/dist/web/tools/agent_tool.js +25 -13
  176. package/dist/web/tools/base_tool.js +17 -6
  177. package/dist/web/tools/forwarding_artifact_service.js +1 -1
  178. package/dist/web/tools/function_tool.js +13 -8
  179. package/dist/web/tools/google_search_tool.js +6 -3
  180. package/dist/web/tools/long_running_tool.js +3 -1
  181. package/dist/web/tools/mcp/mcp_session_manager.js +22 -12
  182. package/dist/web/tools/mcp/mcp_tool.js +1 -3
  183. package/dist/web/tools/mcp/mcp_toolset.js +1 -1
  184. package/dist/web/tools/tool_context.js +4 -9
  185. package/dist/web/utils/env_aware_utils.js +1 -1
  186. package/dist/web/utils/gemini_schema_util.js +10 -4
  187. package/dist/web/utils/logger.js +43 -2
  188. package/dist/web/utils/simple_zod_to_json.js +102 -155
  189. package/dist/web/utils/variant_utils.js +1 -1
  190. package/dist/web/version.js +1 -1
  191. package/package.json +5 -3
@@ -31,6 +31,7 @@ __export(base_agent_exports, {
31
31
  module.exports = __toCommonJS(base_agent_exports);
32
32
  var import_api = require("@opentelemetry/api");
33
33
  var import_event = require("../events/event.js");
34
+ var import_tracing = require("../telemetry/tracing.js");
34
35
  var import_callback_context = require("./callback_context.js");
35
36
  var import_invocation_context = require("./invocation_context.js");
36
37
  /**
@@ -54,11 +55,19 @@ class BaseAgent {
54
55
  this.description = config.description;
55
56
  this.parentAgent = config.parentAgent;
56
57
  this.subAgents = config.subAgents || [];
57
- this.rootAgent = getRootAgent(this);
58
- this.beforeAgentCallback = getCannonicalCallback(config.beforeAgentCallback);
58
+ this.beforeAgentCallback = getCannonicalCallback(
59
+ config.beforeAgentCallback
60
+ );
59
61
  this.afterAgentCallback = getCannonicalCallback(config.afterAgentCallback);
60
62
  this.setParentAgentForSubAgents();
61
63
  }
64
+ /**
65
+ * Root agent of this agent.
66
+ * Computed dynamically by traversing up the parent chain.
67
+ */
68
+ get rootAgent() {
69
+ return getRootAgent(this);
70
+ }
62
71
  /**
63
72
  * Entry method to run an agent via text-based conversation.
64
73
  *
@@ -67,26 +76,34 @@ class BaseAgent {
67
76
  * @returns An AsyncGenerator that yields the events generated by the agent.
68
77
  */
69
78
  async *runAsync(parentContext) {
70
- const span = import_api.trace.getTracer("gcp.vertex.agent").startSpan(`agent_run [${this.name}]`);
79
+ const span = import_tracing.tracer.startSpan(`invoke_agent ${this.name}`);
80
+ const ctx = import_api.trace.setSpan(import_api.context.active(), span);
71
81
  try {
72
- const context = this.createInvocationContext(parentContext);
73
- const beforeAgentCallbackEvent = await this.handleBeforeAgentCallback(context);
74
- if (beforeAgentCallbackEvent) {
75
- yield beforeAgentCallbackEvent;
76
- }
77
- if (context.endInvocation) {
78
- return;
79
- }
80
- for await (const event of this.runAsyncImpl(context)) {
81
- yield event;
82
- }
83
- if (context.endInvocation) {
84
- return;
85
- }
86
- const afterAgentCallbackEvent = await this.handleAfterAgentCallback(context);
87
- if (afterAgentCallbackEvent) {
88
- yield afterAgentCallbackEvent;
89
- }
82
+ yield* (0, import_tracing.runAsyncGeneratorWithOtelContext)(
83
+ ctx,
84
+ this,
85
+ async function* () {
86
+ const context2 = this.createInvocationContext(parentContext);
87
+ const beforeAgentCallbackEvent = await this.handleBeforeAgentCallback(context2);
88
+ if (beforeAgentCallbackEvent) {
89
+ yield beforeAgentCallbackEvent;
90
+ }
91
+ if (context2.endInvocation) {
92
+ return;
93
+ }
94
+ (0, import_tracing.traceAgentInvocation)({ agent: this, invocationContext: context2 });
95
+ for await (const event of this.runAsyncImpl(context2)) {
96
+ yield event;
97
+ }
98
+ if (context2.endInvocation) {
99
+ return;
100
+ }
101
+ const afterAgentCallbackEvent = await this.handleAfterAgentCallback(context2);
102
+ if (afterAgentCallbackEvent) {
103
+ yield afterAgentCallbackEvent;
104
+ }
105
+ }
106
+ );
90
107
  } finally {
91
108
  span.end();
92
109
  }
@@ -99,8 +116,15 @@ class BaseAgent {
99
116
  * @returns An AsyncGenerator that yields the events generated by the agent.
100
117
  */
101
118
  async *runLive(parentContext) {
102
- const span = import_api.trace.getTracer("gcp.vertex.agent").startSpan(`agent_run [${this.name}]`);
119
+ const span = import_tracing.tracer.startSpan(`invoke_agent ${this.name}`);
120
+ const ctx = import_api.trace.setSpan(import_api.context.active(), span);
103
121
  try {
122
+ yield* (0, import_tracing.runAsyncGeneratorWithOtelContext)(
123
+ ctx,
124
+ this,
125
+ async function* () {
126
+ }
127
+ );
104
128
  throw new Error("Live mode is not implemented yet.");
105
129
  } finally {
106
130
  span.end();
@@ -217,7 +241,9 @@ class BaseAgent {
217
241
  setParentAgentForSubAgents() {
218
242
  for (const subAgent of this.subAgents) {
219
243
  if (subAgent.parentAgent) {
220
- throw new Error(`Agent "${subAgent.name}" already has a parent agent, current parent: "${subAgent.parentAgent.name}", trying to add: "${this.name}"`);
244
+ throw new Error(
245
+ `Agent "${subAgent.name}" already has a parent agent, current parent: "${subAgent.parentAgent.name}", trying to add: "${this.name}"`
246
+ );
221
247
  }
222
248
  subAgent.parentAgent = this;
223
249
  }
@@ -225,7 +251,9 @@ class BaseAgent {
225
251
  }
226
252
  function validateAgentName(name) {
227
253
  if (!isIdentifier(name)) {
228
- throw new Error(`Found invalid agent name: "${name}". Agent name must be a valid identifier. It should start with a letter (a-z, A-Z) or an underscore (_), and can only contain letters, digits (0-9), and underscores.`);
254
+ throw new Error(
255
+ `Found invalid agent name: "${name}". Agent name must be a valid identifier. It should start with a letter (a-z, A-Z) or an underscore (_), and can only contain letters, digits (0-9), and underscores.`
256
+ );
229
257
  }
230
258
  if (name === "user") {
231
259
  throw new Error(
@@ -36,7 +36,10 @@ var import_readonly_context = require("./readonly_context.js");
36
36
  * SPDX-License-Identifier: Apache-2.0
37
37
  */
38
38
  class CallbackContext extends import_readonly_context.ReadonlyContext {
39
- constructor({ invocationContext, eventActions }) {
39
+ constructor({
40
+ invocationContext,
41
+ eventActions
42
+ }) {
40
43
  super(invocationContext);
41
44
  this.eventActions = eventActions || (0, import_event_actions.createEventActions)();
42
45
  this._state = new import_state.State(
@@ -109,9 +109,11 @@ function convertForeignEvent(event) {
109
109
  }
110
110
  const content = {
111
111
  role: "user",
112
- parts: [{
113
- text: "For context:"
114
- }]
112
+ parts: [
113
+ {
114
+ text: "For context:"
115
+ }
116
+ ]
115
117
  };
116
118
  for (const part of event.content.parts) {
117
119
  if (part.text && !part.thought) {
@@ -213,10 +215,14 @@ function rearrangeEventsForLatestFunctionResponse(events) {
213
215
  const functionCallIds = new Set(
214
216
  functionCalls.map((fc) => fc.id).filter((id) => !!id)
215
217
  );
216
- const isSubset = Array.from(functionResponsesIds).every((id) => functionCallIds.has(id));
218
+ const isSubset = Array.from(functionResponsesIds).every(
219
+ (id) => functionCallIds.has(id)
220
+ );
217
221
  if (!isSubset) {
218
222
  throw new Error(
219
- `Last response event should only contain the responses for the function calls in the same function call event. Function call ids found : ${Array.from(functionCallIds).join(", ")}, function response ids provided: ${Array.from(functionResponsesIds).join(", ")}`
223
+ `Last response event should only contain the responses for the function calls in the same function call event. Function call ids found : ${Array.from(functionCallIds).join(
224
+ ", "
225
+ )}, function response ids provided: ${Array.from(functionResponsesIds).join(", ")}`
220
226
  );
221
227
  }
222
228
  functionResponsesIds = functionCallIds;
@@ -284,7 +290,9 @@ function rearrangeEventsForAsyncFunctionResponsesInHistory(events) {
284
290
  const [responseIndex] = [...functionResponseEventsIndices];
285
291
  resultEvents.push(events[responseIndex]);
286
292
  } else {
287
- const indicesArray = Array.from(functionResponseEventsIndices).sort((a, b) => a - b);
293
+ const indicesArray = Array.from(functionResponseEventsIndices).sort(
294
+ (a, b) => a - b
295
+ );
288
296
  const eventsToMerge = indicesArray.map((index) => events[index]);
289
297
  resultEvents.push(mergeFunctionResponseEvents(eventsToMerge));
290
298
  }
@@ -300,7 +308,7 @@ function safeStringify(obj) {
300
308
  }
301
309
  try {
302
310
  return JSON.stringify(obj);
303
- } catch (e) {
311
+ } catch (_e) {
304
312
  return String(obj);
305
313
  }
306
314
  }
@@ -45,6 +45,7 @@ var import_event_actions = require("../events/event_actions.js");
45
45
  var import_tool_context = require("../tools/tool_context.js");
46
46
  var import_env_aware_utils = require("../utils/env_aware_utils.js");
47
47
  var import_logger = require("../utils/logger.js");
48
+ var import_tracing = require("../telemetry/tracing.js");
48
49
  /**
49
50
  * @license
50
51
  * Copyright 2025 Google LLC
@@ -167,8 +168,51 @@ function generateRequestConfirmationEvent({
167
168
  });
168
169
  }
169
170
  async function callToolAsync(tool, args, toolContext) {
170
- import_logger.logger.debug(`callToolAsync ${tool.name}`);
171
- return await tool.runAsync({ args, toolContext });
171
+ return import_tracing.tracer.startActiveSpan(`execute_tool ${tool.name}`, async (span) => {
172
+ try {
173
+ import_logger.logger.debug(`callToolAsync ${tool.name}`);
174
+ const result = await tool.runAsync({ args, toolContext });
175
+ (0, import_tracing.traceToolCall)({
176
+ tool,
177
+ args,
178
+ functionResponseEvent: buildResponseEvent(
179
+ tool,
180
+ result,
181
+ toolContext,
182
+ toolContext.invocationContext
183
+ )
184
+ });
185
+ return result;
186
+ } finally {
187
+ span.end();
188
+ }
189
+ });
190
+ }
191
+ function buildResponseEvent(tool, functionResult, toolContext, invocationContext) {
192
+ let responseResult;
193
+ if (typeof functionResult !== "object" || functionResult == null) {
194
+ responseResult = { result: functionResult };
195
+ } else {
196
+ responseResult = functionResult;
197
+ }
198
+ const partFunctionResponse = {
199
+ functionResponse: {
200
+ name: tool.name,
201
+ response: responseResult,
202
+ id: toolContext.functionCallId
203
+ }
204
+ };
205
+ const content = {
206
+ role: "user",
207
+ parts: [partFunctionResponse]
208
+ };
209
+ return (0, import_event.createEvent)({
210
+ invocationId: invocationContext.invocationId,
211
+ author: invocationContext.agent.name,
212
+ content,
213
+ actions: toolContext.actions,
214
+ branch: invocationContext.branch
215
+ });
172
216
  }
173
217
  async function handleFunctionCallsAsync({
174
218
  invocationContext,
@@ -209,14 +253,12 @@ async function handleFunctionCallList({
209
253
  if (toolConfirmationDict && functionCall.id) {
210
254
  toolConfirmation = toolConfirmationDict[functionCall.id];
211
255
  }
212
- const { tool, toolContext } = getToolAndContext(
213
- {
214
- invocationContext,
215
- functionCall,
216
- toolsDict,
217
- toolConfirmation
218
- }
219
- );
256
+ const { tool, toolContext } = getToolAndContext({
257
+ invocationContext,
258
+ functionCall,
259
+ toolsDict,
260
+ toolConfirmation
261
+ });
220
262
  import_logger.logger.debug(`execute_tool ${tool.name}`);
221
263
  const functionArgs = (_a = functionCall.args) != null ? _a : {};
222
264
  let functionResponse = null;
@@ -240,21 +282,15 @@ async function handleFunctionCallList({
240
282
  }
241
283
  if (functionResponse == null) {
242
284
  try {
243
- functionResponse = await callToolAsync(
244
- tool,
245
- functionArgs,
246
- toolContext
247
- );
285
+ functionResponse = await callToolAsync(tool, functionArgs, toolContext);
248
286
  } catch (e) {
249
287
  if (e instanceof Error) {
250
- const onToolErrorResponse = await invocationContext.pluginManager.runOnToolErrorCallback(
251
- {
252
- tool,
253
- toolArgs: functionArgs,
254
- toolContext,
255
- error: e
256
- }
257
- );
288
+ const onToolErrorResponse = await invocationContext.pluginManager.runOnToolErrorCallback({
289
+ tool,
290
+ toolArgs: functionArgs,
291
+ toolContext,
292
+ error: e
293
+ });
258
294
  if (onToolErrorResponse) {
259
295
  functionResponse = onToolErrorResponse;
260
296
  } else {
@@ -318,12 +354,24 @@ async function handleFunctionCallList({
318
354
  if (!functionResponseEvents.length) {
319
355
  return null;
320
356
  }
321
- const mergedEvent = mergeParallelFunctionResponseEvents(functionResponseEvents);
357
+ const mergedEvent = mergeParallelFunctionResponseEvents(
358
+ functionResponseEvents
359
+ );
322
360
  if (functionResponseEvents.length > 1) {
323
- import_logger.logger.debug("execute_tool (merged)");
324
- import_logger.logger.debug("traceMergedToolCalls", {
325
- responseEventId: mergedEvent.id,
326
- functionResponseEvent: mergedEvent.id
361
+ import_tracing.tracer.startActiveSpan("execute_tool (merged)", (span) => {
362
+ try {
363
+ import_logger.logger.debug("execute_tool (merged)");
364
+ import_logger.logger.debug("traceMergedToolCalls", {
365
+ responseEventId: mergedEvent.id,
366
+ functionResponseEvent: mergedEvent.id
367
+ });
368
+ (0, import_tracing.traceMergedToolCalls)({
369
+ responseEventId: mergedEvent.id,
370
+ functionResponseEvent: mergedEvent
371
+ });
372
+ } finally {
373
+ span.end();
374
+ }
327
375
  });
328
376
  }
329
377
  return mergedEvent;
@@ -361,7 +409,9 @@ function mergeParallelFunctionResponseEvents(functionResponseEvents) {
361
409
  }
362
410
  }
363
411
  const baseEvent = functionResponseEvents[0];
364
- const actionsList = functionResponseEvents.map((event) => event.actions || {});
412
+ const actionsList = functionResponseEvents.map(
413
+ (event) => event.actions || {}
414
+ );
365
415
  const mergedActions = (0, import_event_actions.mergeEventActions)(actionsList);
366
416
  return (0, import_event.createEvent)({
367
417
  author: baseEvent.author,
@@ -47,7 +47,9 @@ class InvocationCostManager {
47
47
  incrementAndEnforceLlmCallsLimit(runConfig) {
48
48
  this.numberOfLlmCalls++;
49
49
  if (runConfig && runConfig.maxLlmCalls > 0 && this.numberOfLlmCalls > runConfig.maxLlmCalls) {
50
- throw new Error(`Max number of llm calls limit of ${runConfig.maxLlmCalls} exceeded`);
50
+ throw new Error(
51
+ `Max number of llm calls limit of ${runConfig.maxLlmCalls} exceeded`
52
+ );
51
53
  }
52
54
  }
53
55
  }