@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.
- package/dist/cjs/agents/base_agent.js +52 -24
- package/dist/cjs/agents/callback_context.js +4 -1
- package/dist/cjs/agents/content_processor_utils.js +15 -7
- package/dist/cjs/agents/functions.js +79 -29
- package/dist/cjs/agents/invocation_context.js +3 -1
- package/dist/cjs/agents/llm_agent.js +188 -108
- package/dist/cjs/agents/loop_agent.js +18 -6
- package/dist/cjs/agents/parallel_agent.js +20 -7
- package/dist/cjs/agents/readonly_context.js +4 -1
- package/dist/cjs/agents/sequential_agent.js +34 -12
- package/dist/cjs/artifacts/gcs_artifact_service.js +28 -20
- package/dist/cjs/artifacts/in_memory_artifact_service.js +18 -4
- package/dist/cjs/auth/auth_handler.js +3 -1
- package/dist/cjs/code_executors/base_code_executor.js +14 -2
- package/dist/cjs/code_executors/built_in_code_executor.js +21 -5
- package/dist/cjs/code_executors/code_executor_context.js +5 -5
- package/dist/cjs/common.js +45 -0
- package/dist/cjs/events/event.js +1 -3
- package/dist/cjs/examples/base_example_provider.js +18 -2
- package/dist/cjs/examples/example_util.js +1 -1
- package/dist/cjs/index.js +19 -19
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/memory/in_memory_memory_service.js +3 -1
- package/dist/cjs/models/base_llm.js +8 -4
- package/dist/cjs/models/gemini_llm_connection.js +1 -0
- package/dist/cjs/models/google_llm.js +3 -3
- package/dist/cjs/plugins/base_plugin.js +71 -49
- package/dist/cjs/plugins/logging_plugin.js +50 -13
- package/dist/cjs/plugins/plugin_manager.js +56 -24
- package/dist/cjs/plugins/security_plugin.js +5 -2
- package/dist/cjs/runner/runner.js +126 -101
- package/dist/cjs/sessions/in_memory_session_service.js +38 -14
- package/dist/cjs/telemetry/google_cloud.js +7 -9
- package/dist/cjs/telemetry/setup.js +15 -7
- package/dist/cjs/telemetry/tracing.js +37 -15
- package/dist/cjs/tools/agent_tool.js +26 -13
- package/dist/cjs/tools/base_tool.js +19 -7
- package/dist/cjs/tools/forwarding_artifact_service.js +1 -1
- package/dist/cjs/tools/function_tool.js +15 -7
- package/dist/cjs/tools/google_search_tool.js +8 -4
- package/dist/cjs/tools/mcp/mcp_session_manager.js +16 -10
- package/dist/cjs/tools/mcp/mcp_tool.js +1 -3
- package/dist/cjs/tools/mcp/mcp_toolset.js +1 -1
- package/dist/cjs/tools/tool_context.js +4 -9
- package/dist/cjs/utils/env_aware_utils.js +1 -1
- package/dist/cjs/utils/gemini_schema_util.js +10 -4
- package/dist/cjs/utils/logger.js +47 -3
- package/dist/cjs/utils/simple_zod_to_json.js +100 -141
- package/dist/cjs/utils/variant_utils.js +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/agents/base_agent.js +57 -25
- package/dist/esm/agents/callback_context.js +4 -1
- package/dist/esm/agents/content_processor_utils.js +25 -9
- package/dist/esm/agents/functions.js +83 -29
- package/dist/esm/agents/invocation_context.js +3 -1
- package/dist/esm/agents/llm_agent.js +228 -116
- package/dist/esm/agents/loop_agent.js +16 -5
- package/dist/esm/agents/parallel_agent.js +18 -6
- package/dist/esm/agents/readonly_context.js +4 -1
- package/dist/esm/agents/sequential_agent.js +33 -12
- package/dist/esm/artifacts/gcs_artifact_service.js +28 -20
- package/dist/esm/artifacts/in_memory_artifact_service.js +18 -4
- package/dist/esm/auth/auth_handler.js +3 -1
- package/dist/esm/code_executors/base_code_executor.js +12 -1
- package/dist/esm/code_executors/built_in_code_executor.js +19 -4
- package/dist/esm/code_executors/code_executor_context.js +5 -5
- package/dist/esm/common.js +56 -11
- package/dist/esm/events/event.js +1 -3
- package/dist/esm/examples/base_example_provider.js +16 -1
- package/dist/esm/examples/example_util.js +4 -2
- package/dist/esm/index.js +19 -19
- package/dist/esm/index.js.map +4 -4
- package/dist/esm/memory/in_memory_memory_service.js +3 -1
- package/dist/esm/models/base_llm.js +8 -4
- package/dist/esm/models/gemini_llm_connection.js +1 -0
- package/dist/esm/models/google_llm.js +8 -4
- package/dist/esm/plugins/base_plugin.js +71 -49
- package/dist/esm/plugins/logging_plugin.js +55 -14
- package/dist/esm/plugins/plugin_manager.js +56 -24
- package/dist/esm/plugins/security_plugin.js +5 -2
- package/dist/esm/runner/runner.js +139 -105
- package/dist/esm/sessions/in_memory_session_service.js +41 -15
- package/dist/esm/telemetry/google_cloud.js +7 -9
- package/dist/esm/telemetry/setup.js +23 -9
- package/dist/esm/telemetry/tracing.js +37 -15
- package/dist/esm/tools/agent_tool.js +25 -13
- package/dist/esm/tools/base_tool.js +17 -6
- package/dist/esm/tools/forwarding_artifact_service.js +1 -1
- package/dist/esm/tools/function_tool.js +13 -8
- package/dist/esm/tools/google_search_tool.js +6 -3
- package/dist/esm/tools/long_running_tool.js +3 -1
- package/dist/esm/tools/mcp/mcp_session_manager.js +22 -12
- package/dist/esm/tools/mcp/mcp_tool.js +1 -3
- package/dist/esm/tools/mcp/mcp_toolset.js +1 -1
- package/dist/esm/tools/tool_context.js +4 -9
- package/dist/esm/utils/env_aware_utils.js +1 -1
- package/dist/esm/utils/gemini_schema_util.js +10 -4
- package/dist/esm/utils/logger.js +43 -2
- package/dist/esm/utils/simple_zod_to_json.js +102 -141
- package/dist/esm/utils/variant_utils.js +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/agents/base_agent.d.ts +16 -4
- package/dist/types/agents/callback_context.d.ts +1 -1
- package/dist/types/agents/invocation_context.d.ts +4 -2
- package/dist/types/agents/llm_agent.d.ts +43 -31
- package/dist/types/agents/loop_agent.d.ts +17 -1
- package/dist/types/agents/parallel_agent.d.ts +17 -1
- package/dist/types/agents/sequential_agent.d.ts +17 -1
- package/dist/types/artifacts/in_memory_artifact_service.d.ts +3 -3
- package/dist/types/auth/auth_schemes.d.ts +5 -2
- package/dist/types/code_executors/base_code_executor.d.ts +14 -0
- package/dist/types/code_executors/built_in_code_executor.d.ts +20 -1
- package/dist/types/code_executors/code_executor_context.d.ts +2 -4
- package/dist/types/common.d.ts +40 -15
- package/dist/types/examples/base_example_provider.d.ts +16 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/types/models/base_llm_connection.d.ts +1 -1
- package/dist/types/models/llm_response.d.ts +1 -1
- package/dist/types/plugins/base_plugin.d.ts +50 -40
- package/dist/types/plugins/logging_plugin.d.ts +12 -12
- package/dist/types/plugins/plugin_manager.d.ts +12 -12
- package/dist/types/plugins/security_plugin.d.ts +1 -1
- package/dist/types/runner/runner.d.ts +18 -10
- package/dist/types/sessions/in_memory_session_service.d.ts +5 -5
- package/dist/types/telemetry/setup.d.ts +1 -1
- package/dist/types/telemetry/tracing.d.ts +7 -6
- package/dist/types/tools/agent_tool.d.ts +15 -1
- package/dist/types/tools/base_tool.d.ts +15 -1
- package/dist/types/tools/base_toolset.d.ts +2 -1
- package/dist/types/tools/forwarding_artifact_service.d.ts +2 -2
- package/dist/types/tools/function_tool.d.ts +18 -4
- package/dist/types/tools/google_search_tool.d.ts +5 -6
- package/dist/types/tools/mcp/mcp_session_manager.d.ts +10 -3
- package/dist/types/tools/mcp/mcp_toolset.d.ts +1 -2
- package/dist/types/tools/tool_context.d.ts +1 -1
- package/dist/types/utils/gemini_schema_util.d.ts +4 -12
- package/dist/types/utils/logger.d.ts +11 -10
- package/dist/types/utils/simple_zod_to_json.d.ts +5 -4
- package/dist/types/version.d.ts +1 -1
- package/dist/web/agents/base_agent.js +103 -36
- package/dist/web/agents/callback_context.js +4 -1
- package/dist/web/agents/content_processor_utils.js +25 -9
- package/dist/web/agents/functions.js +83 -29
- package/dist/web/agents/invocation_context.js +3 -1
- package/dist/web/agents/llm_agent.js +282 -137
- package/dist/web/agents/loop_agent.js +16 -5
- package/dist/web/agents/parallel_agent.js +18 -6
- package/dist/web/agents/readonly_context.js +4 -1
- package/dist/web/agents/sequential_agent.js +33 -12
- package/dist/web/artifacts/gcs_artifact_service.js +25 -17
- package/dist/web/artifacts/in_memory_artifact_service.js +18 -4
- package/dist/web/auth/auth_handler.js +3 -1
- package/dist/web/code_executors/base_code_executor.js +12 -1
- package/dist/web/code_executors/built_in_code_executor.js +19 -4
- package/dist/web/code_executors/code_executor_context.js +5 -5
- package/dist/web/common.js +56 -11
- package/dist/web/events/event.js +1 -3
- package/dist/web/examples/base_example_provider.js +16 -1
- package/dist/web/examples/example_util.js +4 -2
- package/dist/web/index.js +1 -1
- package/dist/web/index.js.map +4 -4
- package/dist/web/memory/in_memory_memory_service.js +3 -1
- package/dist/web/models/base_llm.js +8 -4
- package/dist/web/models/gemini_llm_connection.js +1 -0
- package/dist/web/models/google_llm.js +8 -4
- package/dist/web/plugins/base_plugin.js +71 -49
- package/dist/web/plugins/logging_plugin.js +55 -14
- package/dist/web/plugins/plugin_manager.js +56 -24
- package/dist/web/plugins/security_plugin.js +5 -2
- package/dist/web/runner/runner.js +186 -119
- package/dist/web/sessions/in_memory_session_service.js +41 -15
- package/dist/web/telemetry/google_cloud.js +7 -9
- package/dist/web/telemetry/setup.js +23 -9
- package/dist/web/telemetry/tracing.js +37 -15
- package/dist/web/tools/agent_tool.js +25 -13
- package/dist/web/tools/base_tool.js +17 -6
- package/dist/web/tools/forwarding_artifact_service.js +1 -1
- package/dist/web/tools/function_tool.js +13 -8
- package/dist/web/tools/google_search_tool.js +6 -3
- package/dist/web/tools/long_running_tool.js +3 -1
- package/dist/web/tools/mcp/mcp_session_manager.js +22 -12
- package/dist/web/tools/mcp/mcp_tool.js +1 -3
- package/dist/web/tools/mcp/mcp_toolset.js +1 -1
- package/dist/web/tools/tool_context.js +4 -9
- package/dist/web/utils/env_aware_utils.js +1 -1
- package/dist/web/utils/gemini_schema_util.js +10 -4
- package/dist/web/utils/logger.js +43 -2
- package/dist/web/utils/simple_zod_to_json.js +102 -155
- package/dist/web/utils/variant_utils.js +1 -1
- package/dist/web/version.js +1 -1
- 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.
|
|
58
|
-
|
|
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 =
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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 =
|
|
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(
|
|
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(
|
|
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({
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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 (
|
|
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
|
-
|
|
171
|
-
|
|
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
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
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
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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(
|
|
357
|
+
const mergedEvent = mergeParallelFunctionResponseEvents(
|
|
358
|
+
functionResponseEvents
|
|
359
|
+
);
|
|
322
360
|
if (functionResponseEvents.length > 1) {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
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(
|
|
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(
|
|
50
|
+
throw new Error(
|
|
51
|
+
`Max number of llm calls limit of ${runConfig.maxLlmCalls} exceeded`
|
|
52
|
+
);
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
55
|
}
|