@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
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
2
|
+
var __typeError = (msg) => {
|
|
3
|
+
throw TypeError(msg);
|
|
4
|
+
};
|
|
2
5
|
var __await = function(promise, isYieldStar) {
|
|
3
6
|
this[0] = promise;
|
|
4
7
|
this[1] = isYieldStar;
|
|
@@ -14,6 +17,34 @@ var __asyncGenerator = (__this, __arguments, generator) => {
|
|
|
14
17
|
}, method = (k) => it[k] = (x) => new Promise((yes, no) => resume(k, x, yes, no)), it = {};
|
|
15
18
|
return generator = generator.apply(__this, __arguments), it[__knownSymbol("asyncIterator")] = () => it, method("next"), method("throw"), method("return"), it;
|
|
16
19
|
};
|
|
20
|
+
var __yieldStar = (value) => {
|
|
21
|
+
var obj = value[__knownSymbol("asyncIterator")], isAwait = false, method, it = {};
|
|
22
|
+
if (obj == null) {
|
|
23
|
+
obj = value[__knownSymbol("iterator")]();
|
|
24
|
+
method = (k) => it[k] = (x) => obj[k](x);
|
|
25
|
+
} else {
|
|
26
|
+
obj = obj.call(value);
|
|
27
|
+
method = (k) => it[k] = (v) => {
|
|
28
|
+
if (isAwait) {
|
|
29
|
+
isAwait = false;
|
|
30
|
+
if (k === "throw") throw v;
|
|
31
|
+
return v;
|
|
32
|
+
}
|
|
33
|
+
isAwait = true;
|
|
34
|
+
return {
|
|
35
|
+
done: false,
|
|
36
|
+
value: new __await(new Promise((resolve) => {
|
|
37
|
+
var x = obj[k](v);
|
|
38
|
+
if (!(x instanceof Object)) __typeError("Object expected");
|
|
39
|
+
resolve(x);
|
|
40
|
+
}), 1)
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return it[__knownSymbol("iterator")] = () => it, method("next"), "throw" in obj ? method("throw") : it.throw = (x) => {
|
|
45
|
+
throw x;
|
|
46
|
+
}, "return" in obj && method("return"), it;
|
|
47
|
+
};
|
|
17
48
|
var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it);
|
|
18
49
|
/**
|
|
19
50
|
* @license
|
|
@@ -21,14 +52,24 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
21
52
|
* SPDX-License-Identifier: Apache-2.0
|
|
22
53
|
*/
|
|
23
54
|
import { createPartFromText } from "@google/genai";
|
|
24
|
-
import { trace } from "@opentelemetry/api";
|
|
25
|
-
import {
|
|
26
|
-
|
|
55
|
+
import { context, trace } from "@opentelemetry/api";
|
|
56
|
+
import {
|
|
57
|
+
InvocationContext,
|
|
58
|
+
newInvocationContextId
|
|
59
|
+
} from "../agents/invocation_context.js";
|
|
60
|
+
import { isLlmAgent } from "../agents/llm_agent.js";
|
|
27
61
|
import { createRunConfig } from "../agents/run_config.js";
|
|
28
|
-
import {
|
|
62
|
+
import {
|
|
63
|
+
BuiltInCodeExecutor,
|
|
64
|
+
isBuiltInCodeExecutor
|
|
65
|
+
} from "../code_executors/built_in_code_executor.js";
|
|
29
66
|
import { createEvent, getFunctionCalls } from "../events/event.js";
|
|
30
67
|
import { createEventActions } from "../events/event_actions.js";
|
|
31
68
|
import { PluginManager } from "../plugins/plugin_manager.js";
|
|
69
|
+
import {
|
|
70
|
+
runAsyncGeneratorWithOtelContext,
|
|
71
|
+
tracer
|
|
72
|
+
} from "../telemetry/tracing.js";
|
|
32
73
|
import { logger } from "../utils/logger.js";
|
|
33
74
|
import { isGemini2OrAbove } from "../utils/model_name.js";
|
|
34
75
|
class Runner {
|
|
@@ -46,125 +87,147 @@ class Runner {
|
|
|
46
87
|
* Runs the agent with the given message, and returns an async generator of
|
|
47
88
|
* events.
|
|
48
89
|
*
|
|
49
|
-
* @param userId The user ID of the session.
|
|
50
|
-
* @param sessionId The session ID of the session.
|
|
51
|
-
* @param newMessage A new message to append to the session.
|
|
52
|
-
* @param stateDelta An optional state delta to apply to the session.
|
|
53
|
-
* @param runConfig The run config for the agent.
|
|
90
|
+
* @param params.userId The user ID of the session.
|
|
91
|
+
* @param params.sessionId The session ID of the session.
|
|
92
|
+
* @param params.newMessage A new message to append to the session.
|
|
93
|
+
* @param params.stateDelta An optional state delta to apply to the session.
|
|
94
|
+
* @param params.runConfig The run config for the agent.
|
|
54
95
|
* @yields The events generated by the agent.
|
|
55
96
|
*/
|
|
56
97
|
// TODO - b/425992518: user, sessionId, and runConfig can be internalized.
|
|
57
|
-
runAsync(
|
|
58
|
-
return __asyncGenerator(this,
|
|
59
|
-
userId,
|
|
60
|
-
|
|
61
|
-
newMessage
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}) {
|
|
65
|
-
var _a;
|
|
66
|
-
runConfig = createRunConfig(runConfig);
|
|
67
|
-
const span = trace.getTracer("gcp.vertex.agent").startSpan("invocation");
|
|
98
|
+
runAsync(params) {
|
|
99
|
+
return __asyncGenerator(this, null, function* () {
|
|
100
|
+
const { userId, sessionId, stateDelta } = params;
|
|
101
|
+
const runConfig = createRunConfig(params.runConfig);
|
|
102
|
+
let newMessage = params.newMessage;
|
|
103
|
+
const span = tracer.startSpan("invocation");
|
|
104
|
+
const ctx = trace.setSpan(context.active(), span);
|
|
68
105
|
try {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
try {
|
|
140
|
-
for (var iter = __forAwait(invocationContext.agent.runAsync(
|
|
141
|
-
invocationContext
|
|
142
|
-
)), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
|
|
143
|
-
const event = temp.value;
|
|
144
|
-
if (!event.partial) {
|
|
145
|
-
yield new __await(this.sessionService.appendEvent({ session, event }));
|
|
106
|
+
yield* __yieldStar(runAsyncGeneratorWithOtelContext(
|
|
107
|
+
ctx,
|
|
108
|
+
this,
|
|
109
|
+
function() {
|
|
110
|
+
return __asyncGenerator(this, null, function* () {
|
|
111
|
+
var _a;
|
|
112
|
+
const session = yield new __await(this.sessionService.getSession({
|
|
113
|
+
appName: this.appName,
|
|
114
|
+
userId,
|
|
115
|
+
sessionId
|
|
116
|
+
}));
|
|
117
|
+
if (!session) {
|
|
118
|
+
if (!this.appName) {
|
|
119
|
+
throw new Error(
|
|
120
|
+
"Session lookup failed: appName must be provided in runner constructor"
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
throw new Error("Session not found: ".concat(sessionId));
|
|
124
|
+
}
|
|
125
|
+
if (runConfig.supportCfc && isLlmAgent(this.agent)) {
|
|
126
|
+
const modelName = this.agent.canonicalModel.model;
|
|
127
|
+
if (!isGemini2OrAbove(modelName)) {
|
|
128
|
+
throw new Error(
|
|
129
|
+
"CFC is not supported for model: ".concat(modelName, " in agent: ").concat(this.agent.name)
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
if (!isBuiltInCodeExecutor(this.agent.codeExecutor)) {
|
|
133
|
+
this.agent.codeExecutor = new BuiltInCodeExecutor();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const invocationContext = new InvocationContext({
|
|
137
|
+
artifactService: this.artifactService,
|
|
138
|
+
sessionService: this.sessionService,
|
|
139
|
+
memoryService: this.memoryService,
|
|
140
|
+
credentialService: this.credentialService,
|
|
141
|
+
invocationId: newInvocationContextId(),
|
|
142
|
+
agent: this.agent,
|
|
143
|
+
session,
|
|
144
|
+
userContent: newMessage,
|
|
145
|
+
runConfig,
|
|
146
|
+
pluginManager: this.pluginManager
|
|
147
|
+
});
|
|
148
|
+
const pluginUserMessage = yield new __await(this.pluginManager.runOnUserMessageCallback({
|
|
149
|
+
userMessage: newMessage,
|
|
150
|
+
invocationContext
|
|
151
|
+
}));
|
|
152
|
+
if (pluginUserMessage) {
|
|
153
|
+
newMessage = pluginUserMessage;
|
|
154
|
+
}
|
|
155
|
+
if (newMessage) {
|
|
156
|
+
if (!((_a = newMessage.parts) == null ? void 0 : _a.length)) {
|
|
157
|
+
throw new Error("No parts in the newMessage.");
|
|
158
|
+
}
|
|
159
|
+
if (runConfig.saveInputBlobsAsArtifacts) {
|
|
160
|
+
yield new __await(this.saveArtifacts(
|
|
161
|
+
invocationContext.invocationId,
|
|
162
|
+
session.userId,
|
|
163
|
+
session.id,
|
|
164
|
+
newMessage
|
|
165
|
+
));
|
|
166
|
+
}
|
|
167
|
+
yield new __await(this.sessionService.appendEvent({
|
|
168
|
+
session,
|
|
169
|
+
event: createEvent({
|
|
170
|
+
invocationId: invocationContext.invocationId,
|
|
171
|
+
author: "user",
|
|
172
|
+
actions: stateDelta ? createEventActions({ stateDelta }) : void 0,
|
|
173
|
+
content: newMessage
|
|
174
|
+
})
|
|
175
|
+
}));
|
|
146
176
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
177
|
+
invocationContext.agent = this.determineAgentForResumption(
|
|
178
|
+
session,
|
|
179
|
+
this.agent
|
|
180
|
+
);
|
|
181
|
+
if (newMessage) {
|
|
182
|
+
const beforeRunCallbackResponse = yield new __await(this.pluginManager.runBeforeRunCallback({
|
|
183
|
+
invocationContext
|
|
184
|
+
}));
|
|
185
|
+
if (beforeRunCallbackResponse) {
|
|
186
|
+
const earlyExitEvent = createEvent({
|
|
187
|
+
invocationId: invocationContext.invocationId,
|
|
188
|
+
author: "model",
|
|
189
|
+
content: beforeRunCallbackResponse
|
|
190
|
+
});
|
|
191
|
+
yield new __await(this.sessionService.appendEvent({
|
|
192
|
+
session,
|
|
193
|
+
event: earlyExitEvent
|
|
194
|
+
}));
|
|
195
|
+
yield earlyExitEvent;
|
|
196
|
+
} else {
|
|
197
|
+
try {
|
|
198
|
+
for (var iter = __forAwait(invocationContext.agent.runAsync(
|
|
199
|
+
invocationContext
|
|
200
|
+
)), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
|
|
201
|
+
const event = temp.value;
|
|
202
|
+
if (!event.partial) {
|
|
203
|
+
yield new __await(this.sessionService.appendEvent({ session, event }));
|
|
204
|
+
}
|
|
205
|
+
const modifiedEvent = yield new __await(this.pluginManager.runOnEventCallback({
|
|
206
|
+
invocationContext,
|
|
207
|
+
event
|
|
208
|
+
}));
|
|
209
|
+
if (modifiedEvent) {
|
|
210
|
+
yield modifiedEvent;
|
|
211
|
+
} else {
|
|
212
|
+
yield event;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
} catch (temp) {
|
|
216
|
+
error = [temp];
|
|
217
|
+
} finally {
|
|
218
|
+
try {
|
|
219
|
+
more && (temp = iter.return) && (yield new __await(temp.call(iter)));
|
|
220
|
+
} finally {
|
|
221
|
+
if (error)
|
|
222
|
+
throw error[0];
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
yield new __await(this.pluginManager.runAfterRunCallback({ invocationContext }));
|
|
226
|
+
}
|
|
154
227
|
}
|
|
155
|
-
}
|
|
156
|
-
} catch (temp) {
|
|
157
|
-
error = [temp];
|
|
158
|
-
} finally {
|
|
159
|
-
try {
|
|
160
|
-
more && (temp = iter.return) && (yield new __await(temp.call(iter)));
|
|
161
|
-
} finally {
|
|
162
|
-
if (error)
|
|
163
|
-
throw error[0];
|
|
164
|
-
}
|
|
228
|
+
});
|
|
165
229
|
}
|
|
166
|
-
|
|
167
|
-
yield new __await(this.pluginManager.runAfterRunCallback({ invocationContext }));
|
|
230
|
+
));
|
|
168
231
|
} finally {
|
|
169
232
|
span.end();
|
|
170
233
|
}
|
|
@@ -224,7 +287,9 @@ class Runner {
|
|
|
224
287
|
}
|
|
225
288
|
const agent = rootAgent.findSubAgent(event2.author);
|
|
226
289
|
if (!agent) {
|
|
227
|
-
logger.warn(
|
|
290
|
+
logger.warn(
|
|
291
|
+
"Event from an unknown agent: ".concat(event2.author, ", event id: ").concat(event2.id)
|
|
292
|
+
);
|
|
228
293
|
continue;
|
|
229
294
|
}
|
|
230
295
|
if (this.isRoutableLlmAgent(agent)) {
|
|
@@ -247,7 +312,7 @@ class Runner {
|
|
|
247
312
|
isRoutableLlmAgent(agentToRun) {
|
|
248
313
|
let agent = agentToRun;
|
|
249
314
|
while (agent) {
|
|
250
|
-
if (!(agent
|
|
315
|
+
if (!isLlmAgent(agent)) {
|
|
251
316
|
return false;
|
|
252
317
|
}
|
|
253
318
|
if (agent.disallowTransferToParent) {
|
|
@@ -265,7 +330,9 @@ function findEventByLastFunctionResponseId(events) {
|
|
|
265
330
|
return null;
|
|
266
331
|
}
|
|
267
332
|
const lastEvent = events[events.length - 1];
|
|
268
|
-
const functionCallId = (_d = (_c = (_b = (_a = lastEvent.content) == null ? void 0 : _a.parts) == null ? void 0 : _b.find(
|
|
333
|
+
const functionCallId = (_d = (_c = (_b = (_a = lastEvent.content) == null ? void 0 : _a.parts) == null ? void 0 : _b.find(
|
|
334
|
+
(part) => part.functionResponse
|
|
335
|
+
)) == null ? void 0 : _c.functionResponse) == null ? void 0 : _d.id;
|
|
269
336
|
if (!functionCallId) {
|
|
270
337
|
return null;
|
|
271
338
|
}
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
import { cloneDeep } from "lodash-es";
|
|
7
7
|
import { randomUUID } from "../utils/env_aware_utils.js";
|
|
8
8
|
import { logger } from "../utils/logger.js";
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
BaseSessionService
|
|
11
|
+
} from "./base_session_service.js";
|
|
10
12
|
import { createSession } from "./session.js";
|
|
11
13
|
import { State } from "./state.js";
|
|
12
14
|
class InMemorySessionService extends BaseSessionService {
|
|
@@ -26,7 +28,12 @@ class InMemorySessionService extends BaseSessionService {
|
|
|
26
28
|
*/
|
|
27
29
|
this.appState = {};
|
|
28
30
|
}
|
|
29
|
-
createSession({
|
|
31
|
+
createSession({
|
|
32
|
+
appName,
|
|
33
|
+
userId,
|
|
34
|
+
state,
|
|
35
|
+
sessionId
|
|
36
|
+
}) {
|
|
30
37
|
const session = createSession({
|
|
31
38
|
id: sessionId || randomUUID(),
|
|
32
39
|
appName,
|
|
@@ -46,7 +53,12 @@ class InMemorySessionService extends BaseSessionService {
|
|
|
46
53
|
this.mergeState(appName, userId, cloneDeep(session))
|
|
47
54
|
);
|
|
48
55
|
}
|
|
49
|
-
getSession({
|
|
56
|
+
getSession({
|
|
57
|
+
appName,
|
|
58
|
+
userId,
|
|
59
|
+
sessionId,
|
|
60
|
+
config
|
|
61
|
+
}) {
|
|
50
62
|
if (!this.sessions[appName] || !this.sessions[appName][userId] || !this.sessions[appName][userId][sessionId]) {
|
|
51
63
|
return Promise.resolve(void 0);
|
|
52
64
|
}
|
|
@@ -54,7 +66,9 @@ class InMemorySessionService extends BaseSessionService {
|
|
|
54
66
|
const copiedSession = cloneDeep(session);
|
|
55
67
|
if (config) {
|
|
56
68
|
if (config.numRecentEvents) {
|
|
57
|
-
copiedSession.events = copiedSession.events.slice(
|
|
69
|
+
copiedSession.events = copiedSession.events.slice(
|
|
70
|
+
-config.numRecentEvents
|
|
71
|
+
);
|
|
58
72
|
}
|
|
59
73
|
if (config.afterTimestamp) {
|
|
60
74
|
let i = copiedSession.events.length - 1;
|
|
@@ -71,31 +85,43 @@ class InMemorySessionService extends BaseSessionService {
|
|
|
71
85
|
}
|
|
72
86
|
return Promise.resolve(this.mergeState(appName, userId, copiedSession));
|
|
73
87
|
}
|
|
74
|
-
listSessions({
|
|
88
|
+
listSessions({
|
|
89
|
+
appName,
|
|
90
|
+
userId
|
|
91
|
+
}) {
|
|
75
92
|
if (!this.sessions[appName] || !this.sessions[appName][userId]) {
|
|
76
93
|
return Promise.resolve({ sessions: [] });
|
|
77
94
|
}
|
|
78
95
|
const sessionsWithoutEvents = [];
|
|
79
96
|
for (const session of Object.values(this.sessions[appName][userId])) {
|
|
80
|
-
sessionsWithoutEvents.push(
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
97
|
+
sessionsWithoutEvents.push(
|
|
98
|
+
createSession({
|
|
99
|
+
id: session.id,
|
|
100
|
+
appName: session.appName,
|
|
101
|
+
userId: session.userId,
|
|
102
|
+
state: {},
|
|
103
|
+
events: [],
|
|
104
|
+
lastUpdateTime: session.lastUpdateTime
|
|
105
|
+
})
|
|
106
|
+
);
|
|
88
107
|
}
|
|
89
108
|
return Promise.resolve({ sessions: sessionsWithoutEvents });
|
|
90
109
|
}
|
|
91
|
-
async deleteSession({
|
|
110
|
+
async deleteSession({
|
|
111
|
+
appName,
|
|
112
|
+
userId,
|
|
113
|
+
sessionId
|
|
114
|
+
}) {
|
|
92
115
|
const session = await this.getSession({ appName, userId, sessionId });
|
|
93
116
|
if (!session) {
|
|
94
117
|
return;
|
|
95
118
|
}
|
|
96
119
|
delete this.sessions[appName][userId][sessionId];
|
|
97
120
|
}
|
|
98
|
-
async appendEvent({
|
|
121
|
+
async appendEvent({
|
|
122
|
+
session,
|
|
123
|
+
event
|
|
124
|
+
}) {
|
|
99
125
|
await super.appendEvent({ session, event });
|
|
100
126
|
session.lastUpdateTime = event.timestamp;
|
|
101
127
|
const appName = session.appName;
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
|
|
8
|
-
import { detectResources } from "@opentelemetry/resources";
|
|
9
|
-
import { gcpDetector } from "@opentelemetry/resource-detector-gcp";
|
|
6
|
+
import { MetricExporter } from "@google-cloud/opentelemetry-cloud-monitoring-exporter";
|
|
10
7
|
import { TraceExporter } from "@google-cloud/opentelemetry-cloud-trace-exporter";
|
|
8
|
+
import { gcpDetector } from "@opentelemetry/resource-detector-gcp";
|
|
9
|
+
import { detectResources } from "@opentelemetry/resources";
|
|
10
|
+
import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
|
|
11
11
|
import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
12
|
-
import {
|
|
12
|
+
import { GoogleAuth } from "google-auth-library";
|
|
13
13
|
import { logger } from "../utils/logger.js";
|
|
14
14
|
const GCP_PROJECT_ERROR_MESSAGE = "Cannot determine GCP Project. OTel GCP Exporters cannot be set up. Please make sure to log into correct GCP Project.";
|
|
15
15
|
async function getGcpProjectId() {
|
|
@@ -17,7 +17,7 @@ async function getGcpProjectId() {
|
|
|
17
17
|
const auth = new GoogleAuth();
|
|
18
18
|
const projectId = await auth.getProjectId();
|
|
19
19
|
return projectId || void 0;
|
|
20
|
-
} catch (
|
|
20
|
+
} catch (_e) {
|
|
21
21
|
return void 0;
|
|
22
22
|
}
|
|
23
23
|
}
|
|
@@ -33,9 +33,7 @@ async function getGcpExporters(config = {}) {
|
|
|
33
33
|
return {};
|
|
34
34
|
}
|
|
35
35
|
return {
|
|
36
|
-
spanProcessors: enableTracing ? [
|
|
37
|
-
new BatchSpanProcessor(new TraceExporter({ projectId }))
|
|
38
|
-
] : [],
|
|
36
|
+
spanProcessors: enableTracing ? [new BatchSpanProcessor(new TraceExporter({ projectId }))] : [],
|
|
39
37
|
metricReaders: enableMetrics ? [
|
|
40
38
|
new PeriodicExportingMetricReader({
|
|
41
39
|
exporter: new MetricExporter({ projectId }),
|
|
@@ -3,22 +3,32 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { metrics, trace } from "@opentelemetry/api";
|
|
7
7
|
import { logs } from "@opentelemetry/api-logs";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
|
|
9
|
+
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
|
|
10
|
+
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
10
11
|
import { detectResources } from "@opentelemetry/resources";
|
|
12
|
+
import {
|
|
13
|
+
BatchLogRecordProcessor,
|
|
14
|
+
LoggerProvider
|
|
15
|
+
} from "@opentelemetry/sdk-logs";
|
|
16
|
+
import {
|
|
17
|
+
MeterProvider,
|
|
18
|
+
PeriodicExportingMetricReader
|
|
19
|
+
} from "@opentelemetry/sdk-metrics";
|
|
11
20
|
import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
12
21
|
import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
|
|
13
|
-
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
14
|
-
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
|
|
15
|
-
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
|
|
16
22
|
function maybeSetOtelProviders(otelHooksToSetup = [], otelResource) {
|
|
17
23
|
const resource = otelResource || getOtelResource();
|
|
18
24
|
const allHooks = [...otelHooksToSetup, getOtelExporters()];
|
|
19
|
-
const spanProcessors = allHooks.flatMap(
|
|
25
|
+
const spanProcessors = allHooks.flatMap(
|
|
26
|
+
(hooks) => hooks.spanProcessors || []
|
|
27
|
+
);
|
|
20
28
|
const metricReaders = allHooks.flatMap((hooks) => hooks.metricReaders || []);
|
|
21
|
-
const logRecordProcessors = allHooks.flatMap(
|
|
29
|
+
const logRecordProcessors = allHooks.flatMap(
|
|
30
|
+
(hooks) => hooks.logRecordProcessors || []
|
|
31
|
+
);
|
|
22
32
|
if (spanProcessors.length > 0) {
|
|
23
33
|
const tracerProvider = new NodeTracerProvider({
|
|
24
34
|
resource,
|
|
@@ -58,7 +68,11 @@ function getOtelExporters(config = getOtelExportersConfig()) {
|
|
|
58
68
|
const { enableTracing, enableMetrics, enableLogging } = config;
|
|
59
69
|
return {
|
|
60
70
|
spanProcessors: enableTracing ? [new BatchSpanProcessor(new OTLPTraceExporter())] : [],
|
|
61
|
-
metricReaders: enableMetrics ? [
|
|
71
|
+
metricReaders: enableMetrics ? [
|
|
72
|
+
new PeriodicExportingMetricReader({
|
|
73
|
+
exporter: new OTLPMetricExporter()
|
|
74
|
+
})
|
|
75
|
+
] : [],
|
|
62
76
|
logRecordProcessors: enableLogging ? [new BatchLogRecordProcessor(new OTLPLogExporter())] : []
|
|
63
77
|
};
|
|
64
78
|
}
|