@google/adk 0.2.5 → 0.4.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 (264) hide show
  1. package/dist/cjs/a2a/part_converter_utils.js +210 -0
  2. package/dist/cjs/agents/active_streaming_tool.js +1 -1
  3. package/dist/cjs/agents/base_agent.js +46 -24
  4. package/dist/cjs/agents/base_llm_processor.js +1 -1
  5. package/dist/cjs/agents/callback_context.js +5 -2
  6. package/dist/cjs/agents/content_processor_utils.js +16 -8
  7. package/dist/cjs/agents/functions.js +81 -30
  8. package/dist/cjs/agents/instructions.js +1 -1
  9. package/dist/cjs/agents/invocation_context.js +1 -1
  10. package/dist/cjs/agents/live_request_queue.js +1 -1
  11. package/dist/cjs/agents/llm_agent.js +106 -62
  12. package/dist/cjs/agents/loop_agent.js +3 -2
  13. package/dist/cjs/agents/parallel_agent.js +4 -5
  14. package/dist/cjs/agents/readonly_context.js +13 -1
  15. package/dist/cjs/agents/run_config.js +2 -1
  16. package/dist/cjs/agents/sequential_agent.js +1 -1
  17. package/dist/cjs/agents/transcription_entry.js +1 -1
  18. package/dist/cjs/artifacts/base_artifact_service.js +1 -1
  19. package/dist/cjs/artifacts/file_artifact_service.js +491 -0
  20. package/dist/cjs/artifacts/gcs_artifact_service.js +145 -58
  21. package/dist/cjs/artifacts/in_memory_artifact_service.js +72 -10
  22. package/dist/cjs/artifacts/registry.js +55 -0
  23. package/dist/cjs/auth/auth_credential.js +1 -1
  24. package/dist/cjs/auth/auth_handler.js +4 -2
  25. package/dist/cjs/auth/auth_schemes.js +1 -1
  26. package/dist/cjs/auth/auth_tool.js +1 -1
  27. package/dist/cjs/auth/credential_service/base_credential_service.js +1 -1
  28. package/dist/cjs/auth/credential_service/in_memory_credential_service.js +1 -1
  29. package/dist/cjs/auth/exchanger/base_credential_exchanger.js +1 -1
  30. package/dist/cjs/auth/exchanger/credential_exchanger_registry.js +1 -1
  31. package/dist/cjs/code_executors/base_code_executor.js +4 -2
  32. package/dist/cjs/code_executors/built_in_code_executor.js +8 -4
  33. package/dist/cjs/code_executors/code_execution_utils.js +1 -1
  34. package/dist/cjs/code_executors/code_executor_context.js +6 -6
  35. package/dist/cjs/common.js +18 -1
  36. package/dist/cjs/events/event.js +34 -7
  37. package/dist/cjs/events/event_actions.js +2 -2
  38. package/dist/cjs/events/structured_events.js +105 -0
  39. package/dist/cjs/examples/base_example_provider.js +1 -1
  40. package/dist/cjs/examples/example.js +1 -1
  41. package/dist/cjs/examples/example_util.js +1 -1
  42. package/dist/cjs/index.js +54 -83
  43. package/dist/cjs/index_web.js +1 -1
  44. package/dist/cjs/memory/base_memory_service.js +1 -1
  45. package/dist/cjs/memory/in_memory_memory_service.js +4 -2
  46. package/dist/cjs/memory/memory_entry.js +1 -1
  47. package/dist/cjs/models/apigee_llm.js +182 -0
  48. package/dist/cjs/models/base_llm.js +9 -5
  49. package/dist/cjs/models/base_llm_connection.js +1 -1
  50. package/dist/cjs/models/gemini_llm_connection.js +2 -1
  51. package/dist/cjs/models/google_llm.js +73 -54
  52. package/dist/cjs/models/llm_request.js +1 -1
  53. package/dist/cjs/models/llm_response.js +1 -1
  54. package/dist/cjs/models/registry.js +3 -1
  55. package/dist/cjs/plugins/base_plugin.js +13 -1
  56. package/dist/cjs/plugins/logging_plugin.js +51 -14
  57. package/dist/cjs/plugins/plugin_manager.js +57 -25
  58. package/dist/cjs/plugins/security_plugin.js +2 -2
  59. package/dist/cjs/runner/in_memory_runner.js +1 -1
  60. package/dist/cjs/runner/runner.js +142 -96
  61. package/dist/cjs/sessions/base_session_service.js +53 -3
  62. package/dist/cjs/sessions/database_session_service.js +364 -0
  63. package/dist/cjs/sessions/db/operations.js +114 -0
  64. package/dist/cjs/sessions/db/schema.js +204 -0
  65. package/dist/cjs/sessions/in_memory_session_service.js +60 -34
  66. package/dist/cjs/sessions/registry.js +49 -0
  67. package/dist/cjs/sessions/session.js +1 -1
  68. package/dist/cjs/sessions/state.js +1 -1
  69. package/dist/cjs/telemetry/google_cloud.js +8 -10
  70. package/dist/cjs/telemetry/setup.js +16 -8
  71. package/dist/cjs/telemetry/tracing.js +38 -16
  72. package/dist/cjs/tools/agent_tool.js +9 -5
  73. package/dist/cjs/tools/base_tool.js +5 -3
  74. package/dist/cjs/tools/base_toolset.js +1 -1
  75. package/dist/cjs/tools/forwarding_artifact_service.js +18 -2
  76. package/dist/cjs/tools/function_tool.js +2 -3
  77. package/dist/cjs/tools/google_search_tool.js +2 -3
  78. package/dist/cjs/tools/long_running_tool.js +1 -1
  79. package/dist/cjs/tools/mcp/mcp_session_manager.js +17 -11
  80. package/dist/cjs/tools/mcp/mcp_tool.js +2 -4
  81. package/dist/cjs/tools/mcp/mcp_toolset.js +2 -2
  82. package/dist/cjs/tools/tool_confirmation.js +1 -1
  83. package/dist/cjs/tools/tool_context.js +1 -1
  84. package/dist/cjs/utils/client_labels.js +1 -1
  85. package/dist/cjs/utils/env_aware_utils.js +11 -2
  86. package/dist/cjs/utils/gemini_schema_util.js +10 -5
  87. package/dist/cjs/utils/logger.js +48 -4
  88. package/dist/cjs/utils/model_name.js +1 -1
  89. package/dist/cjs/utils/object_notation_utils.js +78 -0
  90. package/dist/cjs/utils/simple_zod_to_json.js +101 -142
  91. package/dist/cjs/utils/variant_utils.js +3 -9
  92. package/dist/cjs/version.js +2 -2
  93. package/dist/esm/a2a/part_converter_utils.js +171 -0
  94. package/dist/esm/agents/base_agent.js +50 -24
  95. package/dist/esm/agents/callback_context.js +4 -1
  96. package/dist/esm/agents/content_processor_utils.js +25 -9
  97. package/dist/esm/agents/functions.js +84 -29
  98. package/dist/esm/agents/llm_agent.js +110 -62
  99. package/dist/esm/agents/loop_agent.js +2 -1
  100. package/dist/esm/agents/parallel_agent.js +3 -4
  101. package/dist/esm/agents/readonly_context.js +12 -0
  102. package/dist/esm/agents/run_config.js +1 -0
  103. package/dist/esm/artifacts/file_artifact_service.js +451 -0
  104. package/dist/esm/artifacts/gcs_artifact_service.js +144 -57
  105. package/dist/esm/artifacts/in_memory_artifact_service.js +69 -8
  106. package/dist/esm/artifacts/registry.js +28 -0
  107. package/dist/esm/auth/auth_handler.js +3 -1
  108. package/dist/esm/code_executors/base_code_executor.js +3 -1
  109. package/dist/esm/code_executors/built_in_code_executor.js +7 -3
  110. package/dist/esm/code_executors/code_executor_context.js +5 -5
  111. package/dist/esm/common.js +12 -2
  112. package/dist/esm/events/event.js +30 -5
  113. package/dist/esm/events/event_actions.js +1 -1
  114. package/dist/esm/events/structured_events.js +74 -0
  115. package/dist/esm/index.js +18 -88
  116. package/dist/esm/memory/in_memory_memory_service.js +3 -1
  117. package/dist/esm/models/apigee_llm.js +152 -0
  118. package/dist/esm/models/base_llm.js +8 -4
  119. package/dist/esm/models/gemini_llm_connection.js +1 -0
  120. package/dist/esm/models/google_llm.js +75 -53
  121. package/dist/esm/models/registry.js +2 -0
  122. package/dist/esm/plugins/base_plugin.js +12 -0
  123. package/dist/esm/plugins/logging_plugin.js +55 -14
  124. package/dist/esm/plugins/plugin_manager.js +56 -24
  125. package/dist/esm/plugins/security_plugin.js +1 -1
  126. package/dist/esm/runner/runner.js +145 -96
  127. package/dist/esm/sessions/base_session_service.js +49 -1
  128. package/dist/esm/sessions/database_session_service.js +350 -0
  129. package/dist/esm/sessions/db/operations.js +87 -0
  130. package/dist/esm/sessions/db/schema.js +172 -0
  131. package/dist/esm/sessions/in_memory_session_service.js +61 -33
  132. package/dist/esm/sessions/registry.js +25 -0
  133. package/dist/esm/telemetry/google_cloud.js +7 -9
  134. package/dist/esm/telemetry/setup.js +23 -9
  135. package/dist/esm/telemetry/tracing.js +37 -15
  136. package/dist/esm/tools/agent_tool.js +8 -4
  137. package/dist/esm/tools/base_tool.js +4 -2
  138. package/dist/esm/tools/forwarding_artifact_service.js +17 -1
  139. package/dist/esm/tools/function_tool.js +1 -2
  140. package/dist/esm/tools/google_search_tool.js +2 -5
  141. package/dist/esm/tools/long_running_tool.js +3 -1
  142. package/dist/esm/tools/mcp/mcp_session_manager.js +22 -12
  143. package/dist/esm/tools/mcp/mcp_tool.js +1 -3
  144. package/dist/esm/tools/mcp/mcp_toolset.js +1 -1
  145. package/dist/esm/utils/env_aware_utils.js +9 -1
  146. package/dist/esm/utils/gemini_schema_util.js +9 -4
  147. package/dist/esm/utils/logger.js +43 -2
  148. package/dist/esm/utils/object_notation_utils.js +47 -0
  149. package/dist/esm/utils/simple_zod_to_json.js +102 -141
  150. package/dist/esm/utils/variant_utils.js +1 -7
  151. package/dist/esm/version.js +1 -1
  152. package/dist/types/a2a/part_converter_utils.d.ts +47 -0
  153. package/dist/types/agents/base_agent.d.ts +2 -1
  154. package/dist/types/agents/callback_context.d.ts +1 -1
  155. package/dist/types/agents/llm_agent.d.ts +12 -12
  156. package/dist/types/agents/loop_agent.d.ts +1 -1
  157. package/dist/types/agents/parallel_agent.d.ts +1 -1
  158. package/dist/types/agents/readonly_context.d.ts +8 -0
  159. package/dist/types/agents/run_config.d.ts +6 -0
  160. package/dist/types/artifacts/base_artifact_service.d.ts +31 -0
  161. package/dist/types/artifacts/file_artifact_service.d.ts +43 -0
  162. package/dist/types/artifacts/gcs_artifact_service.d.ts +3 -1
  163. package/dist/types/artifacts/in_memory_artifact_service.d.ts +8 -5
  164. package/dist/types/artifacts/registry.d.ts +7 -0
  165. package/dist/types/code_executors/built_in_code_executor.d.ts +1 -1
  166. package/dist/types/code_executors/code_executor_context.d.ts +2 -4
  167. package/dist/types/common.d.ts +13 -3
  168. package/dist/types/events/event.d.ts +15 -1
  169. package/dist/types/events/event_actions.d.ts +1 -1
  170. package/dist/types/events/structured_events.d.ts +106 -0
  171. package/dist/types/index.d.ts +7 -3
  172. package/dist/types/models/apigee_llm.d.ts +59 -0
  173. package/dist/types/models/base_llm_connection.d.ts +1 -1
  174. package/dist/types/models/google_llm.d.ts +5 -2
  175. package/dist/types/models/llm_response.d.ts +1 -1
  176. package/dist/types/plugins/logging_plugin.d.ts +12 -12
  177. package/dist/types/plugins/plugin_manager.d.ts +12 -12
  178. package/dist/types/plugins/security_plugin.d.ts +1 -1
  179. package/dist/types/runner/runner.d.ts +16 -1
  180. package/dist/types/sessions/base_session_service.d.ts +20 -0
  181. package/dist/types/sessions/database_session_service.d.ts +31 -0
  182. package/dist/types/sessions/db/operations.d.ts +29 -0
  183. package/dist/types/sessions/db/schema.d.ts +45 -0
  184. package/dist/types/sessions/in_memory_session_service.d.ts +9 -6
  185. package/dist/types/sessions/registry.d.ts +7 -0
  186. package/dist/types/telemetry/setup.d.ts +1 -1
  187. package/dist/types/telemetry/tracing.d.ts +7 -6
  188. package/dist/types/tools/agent_tool.d.ts +1 -1
  189. package/dist/types/tools/base_tool.d.ts +1 -1
  190. package/dist/types/tools/base_toolset.d.ts +2 -1
  191. package/dist/types/tools/forwarding_artifact_service.d.ts +4 -2
  192. package/dist/types/tools/function_tool.d.ts +4 -3
  193. package/dist/types/tools/google_search_tool.d.ts +3 -3
  194. package/dist/types/tools/mcp/mcp_session_manager.d.ts +10 -3
  195. package/dist/types/tools/mcp/mcp_toolset.d.ts +1 -2
  196. package/dist/types/utils/env_aware_utils.d.ts +7 -0
  197. package/dist/types/utils/gemini_schema_util.d.ts +4 -12
  198. package/dist/types/utils/logger.d.ts +11 -10
  199. package/dist/types/utils/object_notation_utils.d.ts +21 -0
  200. package/dist/types/utils/simple_zod_to_json.d.ts +5 -4
  201. package/dist/types/version.d.ts +1 -1
  202. package/dist/web/a2a/part_converter_utils.js +171 -0
  203. package/dist/web/agents/base_agent.js +96 -35
  204. package/dist/web/agents/callback_context.js +4 -1
  205. package/dist/web/agents/content_processor_utils.js +25 -9
  206. package/dist/web/agents/functions.js +84 -29
  207. package/dist/web/agents/llm_agent.js +166 -83
  208. package/dist/web/agents/loop_agent.js +2 -1
  209. package/dist/web/agents/parallel_agent.js +3 -4
  210. package/dist/web/agents/readonly_context.js +12 -0
  211. package/dist/web/agents/run_config.js +2 -1
  212. package/dist/web/artifacts/file_artifact_service.js +506 -0
  213. package/dist/web/artifacts/gcs_artifact_service.js +139 -54
  214. package/dist/web/artifacts/in_memory_artifact_service.js +69 -8
  215. package/dist/web/artifacts/registry.js +28 -0
  216. package/dist/web/auth/auth_handler.js +3 -1
  217. package/dist/web/code_executors/base_code_executor.js +3 -1
  218. package/dist/web/code_executors/built_in_code_executor.js +7 -3
  219. package/dist/web/code_executors/code_executor_context.js +5 -5
  220. package/dist/web/common.js +12 -2
  221. package/dist/web/events/event.js +30 -5
  222. package/dist/web/events/event_actions.js +1 -1
  223. package/dist/web/events/structured_events.js +74 -0
  224. package/dist/web/index.js +18 -8
  225. package/dist/web/memory/in_memory_memory_service.js +3 -1
  226. package/dist/web/models/apigee_llm.js +219 -0
  227. package/dist/web/models/base_llm.js +8 -4
  228. package/dist/web/models/gemini_llm_connection.js +1 -0
  229. package/dist/web/models/google_llm.js +75 -50
  230. package/dist/web/models/registry.js +2 -0
  231. package/dist/web/plugins/base_plugin.js +12 -0
  232. package/dist/web/plugins/logging_plugin.js +55 -14
  233. package/dist/web/plugins/plugin_manager.js +56 -24
  234. package/dist/web/plugins/security_plugin.js +1 -1
  235. package/dist/web/runner/runner.js +192 -108
  236. package/dist/web/sessions/base_session_service.js +49 -1
  237. package/dist/web/sessions/database_session_service.js +368 -0
  238. package/dist/web/sessions/db/operations.js +87 -0
  239. package/dist/web/sessions/db/schema.js +172 -0
  240. package/dist/web/sessions/in_memory_session_service.js +61 -33
  241. package/dist/web/sessions/registry.js +25 -0
  242. package/dist/web/telemetry/google_cloud.js +7 -9
  243. package/dist/web/telemetry/setup.js +23 -9
  244. package/dist/web/telemetry/tracing.js +37 -15
  245. package/dist/web/tools/agent_tool.js +8 -4
  246. package/dist/web/tools/base_tool.js +4 -2
  247. package/dist/web/tools/forwarding_artifact_service.js +17 -1
  248. package/dist/web/tools/function_tool.js +1 -2
  249. package/dist/web/tools/google_search_tool.js +2 -5
  250. package/dist/web/tools/long_running_tool.js +3 -1
  251. package/dist/web/tools/mcp/mcp_session_manager.js +22 -12
  252. package/dist/web/tools/mcp/mcp_tool.js +1 -3
  253. package/dist/web/tools/mcp/mcp_toolset.js +1 -1
  254. package/dist/web/utils/env_aware_utils.js +9 -1
  255. package/dist/web/utils/gemini_schema_util.js +9 -4
  256. package/dist/web/utils/logger.js +43 -2
  257. package/dist/web/utils/object_notation_utils.js +47 -0
  258. package/dist/web/utils/simple_zod_to_json.js +102 -155
  259. package/dist/web/utils/variant_utils.js +1 -7
  260. package/dist/web/version.js +1 -1
  261. package/package.json +16 -5
  262. package/dist/cjs/index.js.map +0 -7
  263. package/dist/esm/index.js.map +0 -7
  264. package/dist/web/index.js.map +0 -7
@@ -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,7 +52,7 @@ 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";
55
+ import { context, trace } from "@opentelemetry/api";
25
56
  import {
26
57
  InvocationContext,
27
58
  newInvocationContextId
@@ -35,6 +66,10 @@ import {
35
66
  import { createEvent, getFunctionCalls } from "../events/event.js";
36
67
  import { createEventActions } from "../events/event_actions.js";
37
68
  import { PluginManager } from "../plugins/plugin_manager.js";
69
+ import {
70
+ runAsyncGeneratorWithOtelContext,
71
+ tracer
72
+ } from "../telemetry/tracing.js";
38
73
  import { logger } from "../utils/logger.js";
39
74
  import { isGemini2OrAbove } from "../utils/model_name.js";
40
75
  class Runner {
@@ -48,6 +83,39 @@ class Runner {
48
83
  this.memoryService = input.memoryService;
49
84
  this.credentialService = input.credentialService;
50
85
  }
86
+ /**
87
+ * Runs the agent with a new, ephemeral session.
88
+ *
89
+ * @param params.userId The user ID of the session.
90
+ * @param params.newMessage A new message to append to the session.
91
+ * @param params.stateDelta An optional state delta to apply to the session.
92
+ * @param params.runConfig The run config for the agent.
93
+ * @yields The Events generated by the agent.
94
+ */
95
+ runEphemeral(params) {
96
+ return __asyncGenerator(this, null, function* () {
97
+ const session = yield new __await(this.sessionService.createSession({
98
+ appName: this.appName,
99
+ userId: params.userId
100
+ }));
101
+ const sessionId = session.id;
102
+ try {
103
+ yield* __yieldStar(this.runAsync({
104
+ userId: params.userId,
105
+ sessionId,
106
+ newMessage: params.newMessage,
107
+ stateDelta: params.stateDelta,
108
+ runConfig: params.runConfig
109
+ }));
110
+ } finally {
111
+ yield new __await(this.sessionService.deleteSession({
112
+ appName: this.appName,
113
+ userId: params.userId,
114
+ sessionId
115
+ }));
116
+ }
117
+ });
118
+ }
51
119
  /**
52
120
  * Runs the agent with the given message, and returns an async generator of
53
121
  * events.
@@ -62,121 +130,137 @@ class Runner {
62
130
  // TODO - b/425992518: user, sessionId, and runConfig can be internalized.
63
131
  runAsync(params) {
64
132
  return __asyncGenerator(this, null, function* () {
65
- var _a;
66
133
  const { userId, sessionId, stateDelta } = params;
67
134
  const runConfig = createRunConfig(params.runConfig);
68
135
  let newMessage = params.newMessage;
69
- const span = trace.getTracer("gcp.vertex.agent").startSpan("invocation");
136
+ const span = tracer.startSpan("invocation");
137
+ const ctx = trace.setSpan(context.active(), span);
70
138
  try {
71
- const session = yield new __await(this.sessionService.getSession({
72
- appName: this.appName,
73
- userId,
74
- sessionId
75
- }));
76
- if (!session) {
77
- if (!this.appName) {
78
- throw new Error(
79
- "Session lookup failed: appName must be provided in runner constructor"
80
- );
81
- }
82
- throw new Error("Session not found: ".concat(sessionId));
83
- }
84
- if (runConfig.supportCfc && isLlmAgent(this.agent)) {
85
- const modelName = this.agent.canonicalModel.model;
86
- if (!isGemini2OrAbove(modelName)) {
87
- throw new Error(
88
- "CFC is not supported for model: ".concat(modelName, " in agent: ").concat(this.agent.name)
89
- );
90
- }
91
- if (!isBuiltInCodeExecutor(this.agent.codeExecutor)) {
92
- this.agent.codeExecutor = new BuiltInCodeExecutor();
93
- }
94
- }
95
- const invocationContext = new InvocationContext({
96
- artifactService: this.artifactService,
97
- sessionService: this.sessionService,
98
- memoryService: this.memoryService,
99
- credentialService: this.credentialService,
100
- invocationId: newInvocationContextId(),
101
- agent: this.agent,
102
- session,
103
- userContent: newMessage,
104
- runConfig,
105
- pluginManager: this.pluginManager
106
- });
107
- const pluginUserMessage = yield new __await(this.pluginManager.runOnUserMessageCallback({
108
- userMessage: newMessage,
109
- invocationContext
110
- }));
111
- if (pluginUserMessage) {
112
- newMessage = pluginUserMessage;
113
- }
114
- if (newMessage) {
115
- if (!((_a = newMessage.parts) == null ? void 0 : _a.length)) {
116
- throw new Error("No parts in the newMessage.");
117
- }
118
- if (runConfig.saveInputBlobsAsArtifacts) {
119
- yield new __await(this.saveArtifacts(
120
- invocationContext.invocationId,
121
- session.userId,
122
- session.id,
123
- newMessage
124
- ));
125
- }
126
- yield new __await(this.sessionService.appendEvent({
127
- session,
128
- event: createEvent({
129
- invocationId: invocationContext.invocationId,
130
- author: "user",
131
- actions: stateDelta ? createEventActions({ stateDelta }) : void 0,
132
- content: newMessage
133
- })
134
- }));
135
- }
136
- invocationContext.agent = this.determineAgentForResumption(
137
- session,
138
- this.agent
139
- );
140
- const beforeRunCallbackResponse = yield new __await(this.pluginManager.runBeforeRunCallback({ invocationContext }));
141
- if (beforeRunCallbackResponse) {
142
- const earlyExitEvent = createEvent({
143
- invocationId: invocationContext.invocationId,
144
- author: "model",
145
- content: beforeRunCallbackResponse
146
- });
147
- yield new __await(this.sessionService.appendEvent({ session, event: earlyExitEvent }));
148
- yield earlyExitEvent;
149
- } else {
150
- try {
151
- for (var iter = __forAwait(invocationContext.agent.runAsync(
152
- invocationContext
153
- )), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
154
- const event = temp.value;
155
- if (!event.partial) {
156
- yield new __await(this.sessionService.appendEvent({ session, event }));
139
+ yield* __yieldStar(runAsyncGeneratorWithOtelContext(
140
+ ctx,
141
+ this,
142
+ function() {
143
+ return __asyncGenerator(this, null, function* () {
144
+ var _a;
145
+ const session = yield new __await(this.sessionService.getSession({
146
+ appName: this.appName,
147
+ userId,
148
+ sessionId
149
+ }));
150
+ if (!session) {
151
+ if (!this.appName) {
152
+ throw new Error(
153
+ "Session lookup failed: appName must be provided in runner constructor"
154
+ );
155
+ }
156
+ throw new Error("Session not found: ".concat(sessionId));
157
+ }
158
+ if (runConfig.supportCfc && isLlmAgent(this.agent)) {
159
+ const modelName = this.agent.canonicalModel.model;
160
+ if (!isGemini2OrAbove(modelName)) {
161
+ throw new Error(
162
+ "CFC is not supported for model: ".concat(modelName, " in agent: ").concat(this.agent.name)
163
+ );
164
+ }
165
+ if (!isBuiltInCodeExecutor(this.agent.codeExecutor)) {
166
+ this.agent.codeExecutor = new BuiltInCodeExecutor();
167
+ }
157
168
  }
158
- const modifiedEvent = yield new __await(this.pluginManager.runOnEventCallback({
159
- invocationContext,
160
- event
169
+ const invocationContext = new InvocationContext({
170
+ artifactService: this.artifactService,
171
+ sessionService: this.sessionService,
172
+ memoryService: this.memoryService,
173
+ credentialService: this.credentialService,
174
+ invocationId: newInvocationContextId(),
175
+ agent: this.agent,
176
+ session,
177
+ userContent: newMessage,
178
+ runConfig,
179
+ pluginManager: this.pluginManager
180
+ });
181
+ const pluginUserMessage = yield new __await(this.pluginManager.runOnUserMessageCallback({
182
+ userMessage: newMessage,
183
+ invocationContext
161
184
  }));
162
- if (modifiedEvent) {
163
- yield modifiedEvent;
164
- } else {
165
- yield event;
185
+ if (pluginUserMessage) {
186
+ newMessage = pluginUserMessage;
187
+ }
188
+ if (newMessage) {
189
+ if (!((_a = newMessage.parts) == null ? void 0 : _a.length)) {
190
+ throw new Error("No parts in the newMessage.");
191
+ }
192
+ if (runConfig.saveInputBlobsAsArtifacts) {
193
+ yield new __await(this.saveArtifacts(
194
+ invocationContext.invocationId,
195
+ session.userId,
196
+ session.id,
197
+ newMessage
198
+ ));
199
+ }
200
+ yield new __await(this.sessionService.appendEvent({
201
+ session,
202
+ event: createEvent({
203
+ invocationId: invocationContext.invocationId,
204
+ author: "user",
205
+ actions: stateDelta ? createEventActions({ stateDelta }) : void 0,
206
+ content: newMessage
207
+ })
208
+ }));
209
+ }
210
+ invocationContext.agent = this.determineAgentForResumption(
211
+ session,
212
+ this.agent
213
+ );
214
+ if (newMessage) {
215
+ const beforeRunCallbackResponse = yield new __await(this.pluginManager.runBeforeRunCallback({
216
+ invocationContext
217
+ }));
218
+ if (beforeRunCallbackResponse) {
219
+ const earlyExitEvent = createEvent({
220
+ invocationId: invocationContext.invocationId,
221
+ author: "model",
222
+ content: beforeRunCallbackResponse
223
+ });
224
+ yield new __await(this.sessionService.appendEvent({
225
+ session,
226
+ event: earlyExitEvent
227
+ }));
228
+ yield earlyExitEvent;
229
+ } else {
230
+ try {
231
+ for (var iter = __forAwait(invocationContext.agent.runAsync(
232
+ invocationContext
233
+ )), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
234
+ const event = temp.value;
235
+ if (!event.partial) {
236
+ yield new __await(this.sessionService.appendEvent({ session, event }));
237
+ }
238
+ const modifiedEvent = yield new __await(this.pluginManager.runOnEventCallback({
239
+ invocationContext,
240
+ event
241
+ }));
242
+ if (modifiedEvent) {
243
+ yield modifiedEvent;
244
+ } else {
245
+ yield event;
246
+ }
247
+ }
248
+ } catch (temp) {
249
+ error = [temp];
250
+ } finally {
251
+ try {
252
+ more && (temp = iter.return) && (yield new __await(temp.call(iter)));
253
+ } finally {
254
+ if (error)
255
+ throw error[0];
256
+ }
257
+ }
258
+ yield new __await(this.pluginManager.runAfterRunCallback({ invocationContext }));
259
+ }
166
260
  }
167
- }
168
- } catch (temp) {
169
- error = [temp];
170
- } finally {
171
- try {
172
- more && (temp = iter.return) && (yield new __await(temp.call(iter)));
173
- } finally {
174
- if (error)
175
- throw error[0];
176
- }
261
+ });
177
262
  }
178
- }
179
- yield new __await(this.pluginManager.runAfterRunCallback({ invocationContext }));
263
+ ));
180
264
  } finally {
181
265
  span.end();
182
266
  }
@@ -3,8 +3,29 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { cloneDeep } from "lodash-es";
6
7
  import { State } from "./state.js";
7
8
  class BaseSessionService {
9
+ /**
10
+ * Gets a session or creates one if it doesn't exist.
11
+ *
12
+ * @param request The request to get or create a session.
13
+ * @return A promise that resolves to the session instance.
14
+ */
15
+ async getOrCreateSession(request) {
16
+ if (!request.sessionId) {
17
+ return this.createSession(request);
18
+ }
19
+ const session = await this.getSession({
20
+ appName: request.appName,
21
+ userId: request.userId,
22
+ sessionId: request.sessionId
23
+ });
24
+ if (session) {
25
+ return session;
26
+ }
27
+ return this.createSession(request);
28
+ }
8
29
  /**
9
30
  * Appends an event to a session.
10
31
  *
@@ -15,6 +36,7 @@ class BaseSessionService {
15
36
  if (event.partial) {
16
37
  return event;
17
38
  }
39
+ event = trimTempDeltaState(event);
18
40
  this.updateSessionState({ session, event });
19
41
  session.events.push(event);
20
42
  return event;
@@ -36,6 +58,32 @@ class BaseSessionService {
36
58
  }
37
59
  }
38
60
  }
61
+ function trimTempDeltaState(event) {
62
+ if (!event.actions || !event.actions.stateDelta) {
63
+ return event;
64
+ }
65
+ const stateDelta = event.actions.stateDelta;
66
+ const filteredStateDelta = {};
67
+ for (const [key, value] of Object.entries(stateDelta)) {
68
+ if (!key.startsWith(State.TEMP_PREFIX)) {
69
+ filteredStateDelta[key] = value;
70
+ }
71
+ }
72
+ event.actions.stateDelta = filteredStateDelta;
73
+ return event;
74
+ }
75
+ function mergeStates(appState = {}, userState = {}, sessionState = {}) {
76
+ const merged = cloneDeep(sessionState);
77
+ for (const [k, v] of Object.entries(appState)) {
78
+ merged[State.APP_PREFIX + k] = v;
79
+ }
80
+ for (const [k, v] of Object.entries(userState)) {
81
+ merged[State.USER_PREFIX + k] = v;
82
+ }
83
+ return merged;
84
+ }
39
85
  export {
40
- BaseSessionService
86
+ BaseSessionService,
87
+ mergeStates,
88
+ trimTempDeltaState
41
89
  };