@paean-ai/adk 0.2.14 → 0.2.15

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 (254) hide show
  1. package/dist/cjs/index.js +11 -11
  2. package/dist/cjs/index.js.map +3 -3
  3. package/dist/esm/index.js +11 -11
  4. package/dist/esm/index.js.map +3 -3
  5. package/dist/types/agents/llm_agent.d.ts +4 -0
  6. package/dist/web/index.js +1 -1
  7. package/dist/web/index.js.map +3 -3
  8. package/package.json +1 -1
  9. package/dist/cjs/agents/active_streaming_tool.js +0 -44
  10. package/dist/cjs/agents/base_agent.js +0 -245
  11. package/dist/cjs/agents/base_llm_processor.js +0 -44
  12. package/dist/cjs/agents/callback_context.js +0 -98
  13. package/dist/cjs/agents/content_processor_utils.js +0 -346
  14. package/dist/cjs/agents/functions.js +0 -385
  15. package/dist/cjs/agents/instructions.js +0 -110
  16. package/dist/cjs/agents/invocation_context.js +0 -107
  17. package/dist/cjs/agents/live_request_queue.js +0 -136
  18. package/dist/cjs/agents/llm_agent.js +0 -1212
  19. package/dist/cjs/agents/loop_agent.js +0 -68
  20. package/dist/cjs/agents/parallel_agent.js +0 -78
  21. package/dist/cjs/agents/readonly_context.js +0 -68
  22. package/dist/cjs/agents/run_config.js +0 -70
  23. package/dist/cjs/agents/sequential_agent.js +0 -84
  24. package/dist/cjs/agents/transcription_entry.js +0 -27
  25. package/dist/cjs/artifacts/base_artifact_service.js +0 -27
  26. package/dist/cjs/artifacts/gcs_artifact_service.js +0 -140
  27. package/dist/cjs/artifacts/in_memory_artifact_service.js +0 -119
  28. package/dist/cjs/auth/auth_credential.js +0 -46
  29. package/dist/cjs/auth/auth_handler.js +0 -92
  30. package/dist/cjs/auth/auth_schemes.js +0 -62
  31. package/dist/cjs/auth/auth_tool.js +0 -27
  32. package/dist/cjs/auth/credential_service/base_credential_service.js +0 -27
  33. package/dist/cjs/auth/credential_service/in_memory_credential_service.js +0 -63
  34. package/dist/cjs/auth/exchanger/base_credential_exchanger.js +0 -40
  35. package/dist/cjs/auth/exchanger/credential_exchanger_registry.js +0 -59
  36. package/dist/cjs/code_executors/base_code_executor.js +0 -76
  37. package/dist/cjs/code_executors/built_in_code_executor.js +0 -58
  38. package/dist/cjs/code_executors/code_execution_utils.js +0 -142
  39. package/dist/cjs/code_executors/code_executor_context.js +0 -198
  40. package/dist/cjs/common.js +0 -181
  41. package/dist/cjs/events/event.js +0 -119
  42. package/dist/cjs/events/event_actions.js +0 -83
  43. package/dist/cjs/examples/base_example_provider.js +0 -40
  44. package/dist/cjs/examples/example.js +0 -27
  45. package/dist/cjs/examples/example_util.js +0 -107
  46. package/dist/cjs/index_web.js +0 -33
  47. package/dist/cjs/memory/base_memory_service.js +0 -27
  48. package/dist/cjs/memory/in_memory_memory_service.js +0 -97
  49. package/dist/cjs/memory/memory_entry.js +0 -27
  50. package/dist/cjs/models/base_llm.js +0 -95
  51. package/dist/cjs/models/base_llm_connection.js +0 -27
  52. package/dist/cjs/models/gemini_llm_connection.js +0 -132
  53. package/dist/cjs/models/google_llm.js +0 -559
  54. package/dist/cjs/models/llm_request.js +0 -82
  55. package/dist/cjs/models/llm_response.js +0 -71
  56. package/dist/cjs/models/registry.js +0 -121
  57. package/dist/cjs/plugins/base_plugin.js +0 -236
  58. package/dist/cjs/plugins/logging_plugin.js +0 -222
  59. package/dist/cjs/plugins/plugin_manager.js +0 -239
  60. package/dist/cjs/plugins/security_plugin.js +0 -153
  61. package/dist/cjs/runner/in_memory_runner.js +0 -58
  62. package/dist/cjs/runner/runner.js +0 -277
  63. package/dist/cjs/sessions/base_session_service.js +0 -71
  64. package/dist/cjs/sessions/in_memory_session_service.js +0 -184
  65. package/dist/cjs/sessions/session.js +0 -48
  66. package/dist/cjs/sessions/state.js +0 -101
  67. package/dist/cjs/telemetry/google_cloud.js +0 -85
  68. package/dist/cjs/telemetry/setup.js +0 -97
  69. package/dist/cjs/telemetry/tracing.js +0 -231
  70. package/dist/cjs/tools/agent_tool.js +0 -134
  71. package/dist/cjs/tools/base_tool.js +0 -107
  72. package/dist/cjs/tools/base_toolset.js +0 -76
  73. package/dist/cjs/tools/forwarding_artifact_service.js +0 -71
  74. package/dist/cjs/tools/function_tool.js +0 -101
  75. package/dist/cjs/tools/google_search_tool.js +0 -76
  76. package/dist/cjs/tools/long_running_tool.js +0 -63
  77. package/dist/cjs/tools/mcp/mcp_session_manager.js +0 -65
  78. package/dist/cjs/tools/mcp/mcp_tool.js +0 -65
  79. package/dist/cjs/tools/mcp/mcp_toolset.js +0 -61
  80. package/dist/cjs/tools/tool_confirmation.js +0 -49
  81. package/dist/cjs/tools/tool_context.js +0 -129
  82. package/dist/cjs/utils/client_labels.js +0 -56
  83. package/dist/cjs/utils/deep_clone.js +0 -44
  84. package/dist/cjs/utils/env_aware_utils.js +0 -83
  85. package/dist/cjs/utils/gemini_schema_util.js +0 -88
  86. package/dist/cjs/utils/logger.js +0 -121
  87. package/dist/cjs/utils/model_name.js +0 -76
  88. package/dist/cjs/utils/simple_zod_to_json.js +0 -191
  89. package/dist/cjs/utils/variant_utils.js +0 -55
  90. package/dist/cjs/version.js +0 -39
  91. package/dist/esm/agents/active_streaming_tool.js +0 -14
  92. package/dist/esm/agents/base_agent.js +0 -214
  93. package/dist/esm/agents/base_llm_processor.js +0 -13
  94. package/dist/esm/agents/callback_context.js +0 -68
  95. package/dist/esm/agents/content_processor_utils.js +0 -315
  96. package/dist/esm/agents/functions.js +0 -344
  97. package/dist/esm/agents/instructions.js +0 -80
  98. package/dist/esm/agents/invocation_context.js +0 -76
  99. package/dist/esm/agents/live_request_queue.js +0 -106
  100. package/dist/esm/agents/llm_agent.js +0 -1180
  101. package/dist/esm/agents/loop_agent.js +0 -38
  102. package/dist/esm/agents/parallel_agent.js +0 -48
  103. package/dist/esm/agents/readonly_context.js +0 -38
  104. package/dist/esm/agents/run_config.js +0 -39
  105. package/dist/esm/agents/sequential_agent.js +0 -54
  106. package/dist/esm/agents/transcription_entry.js +0 -5
  107. package/dist/esm/artifacts/base_artifact_service.js +0 -5
  108. package/dist/esm/artifacts/gcs_artifact_service.js +0 -110
  109. package/dist/esm/artifacts/in_memory_artifact_service.js +0 -89
  110. package/dist/esm/auth/auth_credential.js +0 -16
  111. package/dist/esm/auth/auth_handler.js +0 -62
  112. package/dist/esm/auth/auth_schemes.js +0 -31
  113. package/dist/esm/auth/auth_tool.js +0 -5
  114. package/dist/esm/auth/credential_service/base_credential_service.js +0 -5
  115. package/dist/esm/auth/credential_service/in_memory_credential_service.js +0 -33
  116. package/dist/esm/auth/exchanger/base_credential_exchanger.js +0 -10
  117. package/dist/esm/auth/exchanger/credential_exchanger_registry.js +0 -29
  118. package/dist/esm/code_executors/base_code_executor.js +0 -46
  119. package/dist/esm/code_executors/built_in_code_executor.js +0 -28
  120. package/dist/esm/code_executors/code_execution_utils.js +0 -108
  121. package/dist/esm/code_executors/code_executor_context.js +0 -168
  122. package/dist/esm/common.js +0 -98
  123. package/dist/esm/events/event.js +0 -83
  124. package/dist/esm/events/event_actions.js +0 -52
  125. package/dist/esm/examples/base_example_provider.js +0 -10
  126. package/dist/esm/examples/example.js +0 -5
  127. package/dist/esm/examples/example_util.js +0 -76
  128. package/dist/esm/index_web.js +0 -6
  129. package/dist/esm/memory/base_memory_service.js +0 -5
  130. package/dist/esm/memory/in_memory_memory_service.js +0 -67
  131. package/dist/esm/memory/memory_entry.js +0 -5
  132. package/dist/esm/models/base_llm.js +0 -64
  133. package/dist/esm/models/base_llm_connection.js +0 -5
  134. package/dist/esm/models/gemini_llm_connection.js +0 -102
  135. package/dist/esm/models/google_llm.js +0 -533
  136. package/dist/esm/models/llm_request.js +0 -50
  137. package/dist/esm/models/llm_response.js +0 -41
  138. package/dist/esm/models/registry.js +0 -91
  139. package/dist/esm/plugins/base_plugin.js +0 -206
  140. package/dist/esm/plugins/logging_plugin.js +0 -192
  141. package/dist/esm/plugins/plugin_manager.js +0 -209
  142. package/dist/esm/plugins/security_plugin.js +0 -119
  143. package/dist/esm/runner/in_memory_runner.js +0 -28
  144. package/dist/esm/runner/runner.js +0 -247
  145. package/dist/esm/sessions/base_session_service.js +0 -41
  146. package/dist/esm/sessions/in_memory_session_service.js +0 -154
  147. package/dist/esm/sessions/session.js +0 -18
  148. package/dist/esm/sessions/state.js +0 -71
  149. package/dist/esm/telemetry/google_cloud.js +0 -54
  150. package/dist/esm/telemetry/setup.js +0 -67
  151. package/dist/esm/telemetry/tracing.js +0 -195
  152. package/dist/esm/tools/agent_tool.js +0 -104
  153. package/dist/esm/tools/base_tool.js +0 -77
  154. package/dist/esm/tools/base_toolset.js +0 -46
  155. package/dist/esm/tools/forwarding_artifact_service.js +0 -41
  156. package/dist/esm/tools/function_tool.js +0 -71
  157. package/dist/esm/tools/google_search_tool.js +0 -46
  158. package/dist/esm/tools/long_running_tool.js +0 -33
  159. package/dist/esm/tools/mcp/mcp_session_manager.js +0 -35
  160. package/dist/esm/tools/mcp/mcp_tool.js +0 -35
  161. package/dist/esm/tools/mcp/mcp_toolset.js +0 -31
  162. package/dist/esm/tools/tool_confirmation.js +0 -19
  163. package/dist/esm/tools/tool_context.js +0 -99
  164. package/dist/esm/utils/client_labels.js +0 -26
  165. package/dist/esm/utils/deep_clone.js +0 -14
  166. package/dist/esm/utils/env_aware_utils.js +0 -49
  167. package/dist/esm/utils/gemini_schema_util.js +0 -58
  168. package/dist/esm/utils/logger.js +0 -89
  169. package/dist/esm/utils/model_name.js +0 -41
  170. package/dist/esm/utils/simple_zod_to_json.js +0 -160
  171. package/dist/esm/utils/variant_utils.js +0 -24
  172. package/dist/esm/version.js +0 -9
  173. package/dist/web/agents/active_streaming_tool.js +0 -14
  174. package/dist/web/agents/base_agent.js +0 -265
  175. package/dist/web/agents/base_llm_processor.js +0 -13
  176. package/dist/web/agents/callback_context.js +0 -68
  177. package/dist/web/agents/content_processor_utils.js +0 -315
  178. package/dist/web/agents/functions.js +0 -344
  179. package/dist/web/agents/instructions.js +0 -80
  180. package/dist/web/agents/invocation_context.js +0 -76
  181. package/dist/web/agents/live_request_queue.js +0 -124
  182. package/dist/web/agents/llm_agent.js +0 -1310
  183. package/dist/web/agents/loop_agent.js +0 -71
  184. package/dist/web/agents/parallel_agent.js +0 -83
  185. package/dist/web/agents/readonly_context.js +0 -38
  186. package/dist/web/agents/run_config.js +0 -54
  187. package/dist/web/agents/sequential_agent.js +0 -99
  188. package/dist/web/agents/transcription_entry.js +0 -5
  189. package/dist/web/artifacts/base_artifact_service.js +0 -5
  190. package/dist/web/artifacts/gcs_artifact_service.js +0 -126
  191. package/dist/web/artifacts/in_memory_artifact_service.js +0 -89
  192. package/dist/web/auth/auth_credential.js +0 -16
  193. package/dist/web/auth/auth_handler.js +0 -62
  194. package/dist/web/auth/auth_schemes.js +0 -31
  195. package/dist/web/auth/auth_tool.js +0 -5
  196. package/dist/web/auth/credential_service/base_credential_service.js +0 -5
  197. package/dist/web/auth/credential_service/in_memory_credential_service.js +0 -33
  198. package/dist/web/auth/exchanger/base_credential_exchanger.js +0 -10
  199. package/dist/web/auth/exchanger/credential_exchanger_registry.js +0 -29
  200. package/dist/web/code_executors/base_code_executor.js +0 -46
  201. package/dist/web/code_executors/built_in_code_executor.js +0 -28
  202. package/dist/web/code_executors/code_execution_utils.js +0 -105
  203. package/dist/web/code_executors/code_executor_context.js +0 -168
  204. package/dist/web/common.js +0 -98
  205. package/dist/web/events/event.js +0 -101
  206. package/dist/web/events/event_actions.js +0 -67
  207. package/dist/web/examples/base_example_provider.js +0 -10
  208. package/dist/web/examples/example.js +0 -5
  209. package/dist/web/examples/example_util.js +0 -75
  210. package/dist/web/index_web.js +0 -6
  211. package/dist/web/memory/base_memory_service.js +0 -5
  212. package/dist/web/memory/in_memory_memory_service.js +0 -67
  213. package/dist/web/memory/memory_entry.js +0 -5
  214. package/dist/web/models/base_llm.js +0 -64
  215. package/dist/web/models/base_llm_connection.js +0 -5
  216. package/dist/web/models/gemini_llm_connection.js +0 -120
  217. package/dist/web/models/google_llm.js +0 -574
  218. package/dist/web/models/llm_request.js +0 -50
  219. package/dist/web/models/llm_response.js +0 -41
  220. package/dist/web/models/registry.js +0 -91
  221. package/dist/web/plugins/base_plugin.js +0 -206
  222. package/dist/web/plugins/logging_plugin.js +0 -192
  223. package/dist/web/plugins/plugin_manager.js +0 -209
  224. package/dist/web/plugins/security_plugin.js +0 -119
  225. package/dist/web/runner/in_memory_runner.js +0 -28
  226. package/dist/web/runner/runner.js +0 -278
  227. package/dist/web/sessions/base_session_service.js +0 -41
  228. package/dist/web/sessions/in_memory_session_service.js +0 -154
  229. package/dist/web/sessions/session.js +0 -18
  230. package/dist/web/sessions/state.js +0 -87
  231. package/dist/web/telemetry/google_cloud.js +0 -54
  232. package/dist/web/telemetry/setup.js +0 -67
  233. package/dist/web/telemetry/tracing.js +0 -210
  234. package/dist/web/tools/agent_tool.js +0 -118
  235. package/dist/web/tools/base_tool.js +0 -77
  236. package/dist/web/tools/base_toolset.js +0 -46
  237. package/dist/web/tools/forwarding_artifact_service.js +0 -41
  238. package/dist/web/tools/function_tool.js +0 -71
  239. package/dist/web/tools/google_search_tool.js +0 -46
  240. package/dist/web/tools/long_running_tool.js +0 -50
  241. package/dist/web/tools/mcp/mcp_session_manager.js +0 -35
  242. package/dist/web/tools/mcp/mcp_tool.js +0 -35
  243. package/dist/web/tools/mcp/mcp_toolset.js +0 -31
  244. package/dist/web/tools/tool_confirmation.js +0 -19
  245. package/dist/web/tools/tool_context.js +0 -99
  246. package/dist/web/utils/client_labels.js +0 -26
  247. package/dist/web/utils/deep_clone.js +0 -14
  248. package/dist/web/utils/env_aware_utils.js +0 -49
  249. package/dist/web/utils/gemini_schema_util.js +0 -58
  250. package/dist/web/utils/logger.js +0 -89
  251. package/dist/web/utils/model_name.js +0 -41
  252. package/dist/web/utils/simple_zod_to_json.js +0 -174
  253. package/dist/web/utils/variant_utils.js +0 -24
  254. package/dist/web/version.js +0 -9
@@ -1,315 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { createEvent, getFunctionCalls, getFunctionResponses } from "../events/event.js";
7
- import { deepClone } from "../utils/deep_clone.js";
8
- import { logger } from "../utils/logger.js";
9
- import { removeClientFunctionCallId, REQUEST_CONFIRMATION_FUNCTION_CALL_NAME, REQUEST_EUC_FUNCTION_CALL_NAME } from "./functions.js";
10
- function getContents(events, agentName, currentBranch) {
11
- var _a, _b, _c, _d, _e, _f;
12
- const filteredEvents = [];
13
- for (const event of events) {
14
- if (!((_a = event.content) == null ? void 0 : _a.role) || !((_b = event.content.parts) == null ? void 0 : _b.length)) {
15
- continue;
16
- }
17
- if (currentBranch && event.branch && !currentBranch.startsWith(event.branch)) {
18
- continue;
19
- }
20
- if (isAuthEvent(event)) {
21
- continue;
22
- }
23
- if (isToolConfirmationEvent(event)) {
24
- continue;
25
- }
26
- filteredEvents.push(
27
- isEventFromAnotherAgent(agentName, event) ? convertForeignEvent(event) : event
28
- );
29
- }
30
- let resultEvents = rearrangeEventsForLatestFunctionResponse(filteredEvents);
31
- resultEvents = rearrangeEventsForAsyncFunctionResponsesInHistory(resultEvents);
32
- const contents = [];
33
- for (const event of resultEvents) {
34
- const content = deepClone(event.content);
35
- removeClientFunctionCallId(content);
36
- contents.push(content);
37
- }
38
- let hasFunctionCallWithoutSignature = false;
39
- let problematicBlockIndex = -1;
40
- for (let i = 0; i < contents.length; i++) {
41
- const content = contents[i];
42
- const hasFunctionCalls = (_c = content.parts) == null ? void 0 : _c.some((p) => p.functionCall);
43
- const hasThoughtSignature = (_d = content.parts) == null ? void 0 : _d.some((p) => p.thoughtSignature);
44
- const hasThought = (_e = content.parts) == null ? void 0 : _e.some((p) => p.thought);
45
- if (hasFunctionCalls) {
46
- logger.info(
47
- "[getContents] Content block ".concat(i + 1, "/").concat(contents.length, ": role=").concat(content.role, ", ") + "hasFunctionCalls=true, hasThought=".concat(hasThought, ", hasSignature=").concat(hasThoughtSignature)
48
- );
49
- if (!hasThoughtSignature && content.role === "model") {
50
- hasFunctionCallWithoutSignature = true;
51
- problematicBlockIndex = i + 1;
52
- }
53
- for (let j = 0; j < (((_f = content.parts) == null ? void 0 : _f.length) || 0); j++) {
54
- const part = content.parts[j];
55
- if (part.functionCall) {
56
- logger.info(
57
- "[getContents] Part ".concat(j, ": functionCall=").concat(part.functionCall.name, ", ") + "hasSignature=".concat(!!part.thoughtSignature)
58
- );
59
- } else if (part.thought) {
60
- logger.info(
61
- "[getContents] Part ".concat(j, ": thought=true, hasSignature=").concat(!!part.thoughtSignature)
62
- );
63
- }
64
- }
65
- }
66
- }
67
- if (hasFunctionCallWithoutSignature) {
68
- logger.warn(
69
- "[getContents] WARNING: Content block ".concat(problematicBlockIndex, " has model function calls but NO thoughtSignature! ") + "This will likely cause a 400 error from Gemini 3 API."
70
- );
71
- }
72
- return contents;
73
- }
74
- function getCurrentTurnContents(events, agentName, currentBranch) {
75
- for (let i = events.length - 1; i >= 0; i--) {
76
- const event = events[i];
77
- if (event.author === "user" || isEventFromAnotherAgent(agentName, event)) {
78
- return getContents(events.slice(i), agentName, currentBranch);
79
- }
80
- }
81
- return [];
82
- }
83
- function isAuthEvent(event) {
84
- var _a, _b, _c;
85
- if (!((_a = event.content) == null ? void 0 : _a.parts)) {
86
- return false;
87
- }
88
- for (const part of event.content.parts) {
89
- if (((_b = part.functionCall) == null ? void 0 : _b.name) === REQUEST_EUC_FUNCTION_CALL_NAME || ((_c = part.functionResponse) == null ? void 0 : _c.name) === REQUEST_EUC_FUNCTION_CALL_NAME) {
90
- return true;
91
- }
92
- }
93
- return false;
94
- }
95
- function isToolConfirmationEvent(event) {
96
- var _a, _b, _c;
97
- if (!((_a = event.content) == null ? void 0 : _a.parts)) {
98
- return false;
99
- }
100
- for (const part of event.content.parts) {
101
- if (((_b = part.functionCall) == null ? void 0 : _b.name) === REQUEST_CONFIRMATION_FUNCTION_CALL_NAME || ((_c = part.functionResponse) == null ? void 0 : _c.name) === REQUEST_CONFIRMATION_FUNCTION_CALL_NAME) {
102
- return true;
103
- }
104
- }
105
- return false;
106
- }
107
- function isEventFromAnotherAgent(agentName, event) {
108
- return !!agentName && event.author !== agentName && event.author !== "user";
109
- }
110
- function convertForeignEvent(event) {
111
- var _a, _b, _c, _d, _e, _f;
112
- if (!((_b = (_a = event.content) == null ? void 0 : _a.parts) == null ? void 0 : _b.length)) {
113
- return event;
114
- }
115
- const content = {
116
- role: "user",
117
- parts: [{
118
- text: "For context:"
119
- }]
120
- };
121
- for (const part of event.content.parts) {
122
- if (part.text && !part.thought) {
123
- (_c = content.parts) == null ? void 0 : _c.push({
124
- text: "[".concat(event.author, "] said: ").concat(part.text)
125
- });
126
- } else if (part.functionCall) {
127
- const argsText = safeStringify(part.functionCall.args);
128
- (_d = content.parts) == null ? void 0 : _d.push({
129
- text: "[".concat(event.author, "] called tool `").concat(part.functionCall.name, "` with parameters: ").concat(argsText)
130
- });
131
- } else if (part.functionResponse) {
132
- const responseText = safeStringify(part.functionResponse.response);
133
- (_e = content.parts) == null ? void 0 : _e.push({
134
- text: "[".concat(event.author, "] tool `").concat(part.functionResponse.name, "` returned result: ").concat(responseText)
135
- });
136
- } else {
137
- (_f = content.parts) == null ? void 0 : _f.push(part);
138
- }
139
- }
140
- return createEvent({
141
- invocationId: event.invocationId,
142
- author: "user",
143
- content,
144
- branch: event.branch,
145
- timestamp: event.timestamp
146
- });
147
- }
148
- function mergeFunctionResponseEvents(events) {
149
- var _a;
150
- if (events.length === 0) {
151
- throw new Error("Cannot merge an empty list of events.");
152
- }
153
- const mergedEvent = createEvent(events[0]);
154
- const partsInMergedEvent = ((_a = mergedEvent.content) == null ? void 0 : _a.parts) || [];
155
- if (partsInMergedEvent.length === 0) {
156
- throw new Error("There should be at least one function_response part.");
157
- }
158
- const partIndicesInMergedEvent = {};
159
- for (let i = 0; i < partsInMergedEvent.length; i++) {
160
- const part = partsInMergedEvent[i];
161
- if (part.functionResponse && part.functionResponse.id) {
162
- partIndicesInMergedEvent[part.functionResponse.id] = i;
163
- }
164
- }
165
- for (const event of events.slice(1)) {
166
- if (!event.content || !event.content.parts) {
167
- throw new Error("There should be at least one function_response part.");
168
- }
169
- for (const part of event.content.parts) {
170
- if (part.functionResponse && part.functionResponse.id) {
171
- const functionCallId = part.functionResponse.id;
172
- if (functionCallId in partIndicesInMergedEvent) {
173
- partsInMergedEvent[partIndicesInMergedEvent[functionCallId]] = part;
174
- } else {
175
- partsInMergedEvent.push(part);
176
- partIndicesInMergedEvent[functionCallId] = partsInMergedEvent.length - 1;
177
- }
178
- } else {
179
- partsInMergedEvent.push(part);
180
- }
181
- }
182
- }
183
- return mergedEvent;
184
- }
185
- function rearrangeEventsForLatestFunctionResponse(events) {
186
- if (events.length === 0) {
187
- return events;
188
- }
189
- const latestEvent = events[events.length - 1];
190
- const functionResponses = getFunctionResponses(latestEvent);
191
- if (!(functionResponses == null ? void 0 : functionResponses.length)) {
192
- return events;
193
- }
194
- let functionResponsesIds = new Set(
195
- functionResponses.filter((response) => !!response.id).map((response) => response.id)
196
- );
197
- const secondLatestEvent = events.at(-2);
198
- if (secondLatestEvent) {
199
- const functionCallsFromSecondLatest = getFunctionCalls(secondLatestEvent);
200
- if (functionCallsFromSecondLatest) {
201
- for (const functionCall of functionCallsFromSecondLatest) {
202
- if (functionCall.id && functionResponsesIds.has(functionCall.id)) {
203
- return events;
204
- }
205
- }
206
- }
207
- }
208
- let functionCallEventIdx = -1;
209
- for (let idx = events.length - 2; idx >= 0; idx--) {
210
- const event = events[idx];
211
- const functionCalls = getFunctionCalls(event);
212
- if (!(functionCalls == null ? void 0 : functionCalls.length)) {
213
- continue;
214
- }
215
- for (const functionCall of functionCalls) {
216
- if (functionCall.id && functionResponsesIds.has(functionCall.id)) {
217
- functionCallEventIdx = idx;
218
- const functionCallIds = new Set(
219
- functionCalls.map((fc) => fc.id).filter((id) => !!id)
220
- );
221
- const isSubset = Array.from(functionResponsesIds).every((id) => functionCallIds.has(id));
222
- if (!isSubset) {
223
- throw new Error(
224
- "Last response event should only contain the responses for the function calls in the same function call event. Function" + " call ids found : ".concat(Array.from(functionCallIds).join(", "), ", function response") + " ids provided: ".concat(Array.from(functionResponsesIds).join(", "))
225
- );
226
- }
227
- functionResponsesIds = functionCallIds;
228
- break;
229
- }
230
- }
231
- }
232
- if (functionCallEventIdx === -1) {
233
- throw new Error(
234
- "No function call event found for function responses ids: ".concat(Array.from(
235
- functionResponsesIds
236
- ).join(", "))
237
- );
238
- }
239
- const functionResponseEvents = [];
240
- for (let idx = functionCallEventIdx + 1; idx < events.length - 1; idx++) {
241
- const event = events[idx];
242
- const responses = getFunctionResponses(event);
243
- if (responses && responses.some(
244
- (response) => response.id && functionResponsesIds.has(response.id)
245
- )) {
246
- functionResponseEvents.push(event);
247
- }
248
- }
249
- functionResponseEvents.push(events[events.length - 1]);
250
- const resultEvents = events.slice(0, functionCallEventIdx + 1);
251
- resultEvents.push(mergeFunctionResponseEvents(functionResponseEvents));
252
- return resultEvents;
253
- }
254
- function rearrangeEventsForAsyncFunctionResponsesInHistory(events) {
255
- const functionCallIdToResponseEventIndex = /* @__PURE__ */ new Map();
256
- for (let i = 0; i < events.length; i++) {
257
- const event = events[i];
258
- const functionResponses = getFunctionResponses(event);
259
- if (functionResponses == null ? void 0 : functionResponses.length) {
260
- for (const functionResponse of functionResponses) {
261
- if (!functionResponse.id) {
262
- continue;
263
- }
264
- functionCallIdToResponseEventIndex.set(functionResponse.id, i);
265
- }
266
- }
267
- }
268
- const resultEvents = [];
269
- for (const event of events) {
270
- if (getFunctionResponses(event).length > 0) {
271
- continue;
272
- }
273
- const functionCalls = getFunctionCalls(event);
274
- if (functionCalls == null ? void 0 : functionCalls.length) {
275
- const functionResponseEventsIndices = /* @__PURE__ */ new Set();
276
- for (const functionCall of functionCalls) {
277
- const functionCallId = functionCall.id;
278
- if (functionCallId && functionCallIdToResponseEventIndex.has(functionCallId)) {
279
- functionResponseEventsIndices.add(
280
- functionCallIdToResponseEventIndex.get(functionCallId)
281
- );
282
- }
283
- }
284
- resultEvents.push(event);
285
- if (functionResponseEventsIndices.size === 0) {
286
- continue;
287
- }
288
- if (functionResponseEventsIndices.size === 1) {
289
- const [responseIndex] = [...functionResponseEventsIndices];
290
- resultEvents.push(events[responseIndex]);
291
- } else {
292
- const indicesArray = Array.from(functionResponseEventsIndices).sort((a, b) => a - b);
293
- const eventsToMerge = indicesArray.map((index) => events[index]);
294
- resultEvents.push(mergeFunctionResponseEvents(eventsToMerge));
295
- }
296
- } else {
297
- resultEvents.push(event);
298
- }
299
- }
300
- return resultEvents;
301
- }
302
- function safeStringify(obj) {
303
- if (typeof obj === "string") {
304
- return obj;
305
- }
306
- try {
307
- return JSON.stringify(obj);
308
- } catch (e) {
309
- return String(obj);
310
- }
311
- }
312
- export {
313
- getContents,
314
- getCurrentTurnContents
315
- };
@@ -1,344 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { createUserContent } from "@google/genai";
7
- import { createEvent, getFunctionCalls } from "../events/event.js";
8
- import { mergeEventActions } from "../events/event_actions.js";
9
- import { ToolContext } from "../tools/tool_context.js";
10
- import { randomUUID } from "../utils/env_aware_utils.js";
11
- import { logger } from "../utils/logger.js";
12
- const AF_FUNCTION_CALL_ID_PREFIX = "adk-";
13
- const REQUEST_EUC_FUNCTION_CALL_NAME = "adk_request_credential";
14
- const REQUEST_CONFIRMATION_FUNCTION_CALL_NAME = "adk_request_confirmation";
15
- const functionsExportedForTestingOnly = {
16
- handleFunctionCallList
17
- };
18
- function generateClientFunctionCallId() {
19
- return "".concat(AF_FUNCTION_CALL_ID_PREFIX).concat(randomUUID());
20
- }
21
- function populateClientFunctionCallId(modelResponseEvent) {
22
- const functionCalls = getFunctionCalls(modelResponseEvent);
23
- if (!functionCalls) {
24
- return;
25
- }
26
- for (const functionCall of functionCalls) {
27
- if (!functionCall.id) {
28
- functionCall.id = generateClientFunctionCallId();
29
- }
30
- }
31
- }
32
- function removeClientFunctionCallId(content) {
33
- if (content && content.parts) {
34
- for (const part of content.parts) {
35
- if (part.functionCall && part.functionCall.id && part.functionCall.id.startsWith(AF_FUNCTION_CALL_ID_PREFIX)) {
36
- part.functionCall.id = void 0;
37
- }
38
- if (part.functionResponse && part.functionResponse.id && part.functionResponse.id.startsWith(AF_FUNCTION_CALL_ID_PREFIX)) {
39
- part.functionResponse.id = void 0;
40
- }
41
- }
42
- }
43
- }
44
- function getLongRunningFunctionCalls(functionCalls, toolsDict) {
45
- const longRunningToolIds = /* @__PURE__ */ new Set();
46
- for (const functionCall of functionCalls) {
47
- if (functionCall.name && functionCall.name in toolsDict && toolsDict[functionCall.name].isLongRunning && functionCall.id) {
48
- longRunningToolIds.add(functionCall.id);
49
- }
50
- }
51
- return longRunningToolIds;
52
- }
53
- function generateAuthEvent(invocationContext, functionResponseEvent) {
54
- var _a;
55
- if (!((_a = functionResponseEvent.actions) == null ? void 0 : _a.requestedAuthConfigs)) {
56
- return void 0;
57
- }
58
- const parts = [];
59
- const longRunningToolIds = /* @__PURE__ */ new Set();
60
- for (const [functionCallId, authConfig] of Object.entries(
61
- functionResponseEvent.actions.requestedAuthConfigs
62
- )) {
63
- const requestEucFunctionCall = {
64
- name: REQUEST_EUC_FUNCTION_CALL_NAME,
65
- args: {
66
- "function_call_id": functionCallId,
67
- "auth_config": authConfig
68
- },
69
- id: generateClientFunctionCallId()
70
- };
71
- longRunningToolIds.add(requestEucFunctionCall.id);
72
- parts.push({ functionCall: requestEucFunctionCall });
73
- }
74
- return createEvent({
75
- invocationId: invocationContext.invocationId,
76
- author: invocationContext.agent.name,
77
- branch: invocationContext.branch,
78
- content: {
79
- parts,
80
- role: functionResponseEvent.content.role
81
- },
82
- longRunningToolIds: Array.from(longRunningToolIds)
83
- });
84
- }
85
- function generateRequestConfirmationEvent({
86
- invocationContext,
87
- functionCallEvent,
88
- functionResponseEvent
89
- }) {
90
- var _a, _b;
91
- if (!((_a = functionResponseEvent.actions) == null ? void 0 : _a.requestedToolConfirmations)) {
92
- return;
93
- }
94
- const parts = [];
95
- const longRunningToolIds = /* @__PURE__ */ new Set();
96
- const functionCalls = getFunctionCalls(functionCallEvent);
97
- for (const [functionCallId, toolConfirmation] of Object.entries(
98
- functionResponseEvent.actions.requestedToolConfirmations
99
- )) {
100
- const originalFunctionCall = (_b = functionCalls.find((call) => call.id === functionCallId)) != null ? _b : void 0;
101
- if (!originalFunctionCall) {
102
- continue;
103
- }
104
- const requestConfirmationFunctionCall = {
105
- name: REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,
106
- args: {
107
- "originalFunctionCall": originalFunctionCall,
108
- "toolConfirmation": toolConfirmation
109
- },
110
- id: generateClientFunctionCallId()
111
- };
112
- longRunningToolIds.add(requestConfirmationFunctionCall.id);
113
- parts.push({ functionCall: requestConfirmationFunctionCall });
114
- }
115
- return createEvent({
116
- invocationId: invocationContext.invocationId,
117
- author: invocationContext.agent.name,
118
- branch: invocationContext.branch,
119
- content: {
120
- parts,
121
- role: functionResponseEvent.content.role
122
- },
123
- longRunningToolIds: Array.from(longRunningToolIds)
124
- });
125
- }
126
- async function callToolAsync(tool, args, toolContext) {
127
- logger.debug("callToolAsync ".concat(tool.name));
128
- return await tool.runAsync({ args, toolContext });
129
- }
130
- async function handleFunctionCallsAsync({
131
- invocationContext,
132
- functionCallEvent,
133
- toolsDict,
134
- beforeToolCallbacks,
135
- afterToolCallbacks,
136
- filters,
137
- toolConfirmationDict
138
- }) {
139
- const functionCalls = getFunctionCalls(functionCallEvent);
140
- return await handleFunctionCallList({
141
- invocationContext,
142
- functionCalls,
143
- toolsDict,
144
- beforeToolCallbacks,
145
- afterToolCallbacks,
146
- filters,
147
- toolConfirmationDict
148
- });
149
- }
150
- async function handleFunctionCallList({
151
- invocationContext,
152
- functionCalls,
153
- toolsDict,
154
- beforeToolCallbacks,
155
- afterToolCallbacks,
156
- filters,
157
- toolConfirmationDict
158
- }) {
159
- var _a;
160
- const functionResponseEvents = [];
161
- const filteredFunctionCalls = functionCalls.filter((functionCall) => {
162
- return !filters || functionCall.id && filters.has(functionCall.id);
163
- });
164
- for (const functionCall of filteredFunctionCalls) {
165
- let toolConfirmation = void 0;
166
- if (toolConfirmationDict && functionCall.id) {
167
- toolConfirmation = toolConfirmationDict[functionCall.id];
168
- }
169
- const { tool, toolContext } = getToolAndContext(
170
- {
171
- invocationContext,
172
- functionCall,
173
- toolsDict,
174
- toolConfirmation
175
- }
176
- );
177
- logger.debug("execute_tool ".concat(tool.name));
178
- const functionArgs = (_a = functionCall.args) != null ? _a : {};
179
- let functionResponse = null;
180
- let functionResponseError;
181
- functionResponse = await invocationContext.pluginManager.runBeforeToolCallback({
182
- tool,
183
- toolArgs: functionArgs,
184
- toolContext
185
- });
186
- if (functionResponse == null) {
187
- for (const callback of beforeToolCallbacks) {
188
- functionResponse = await callback({
189
- tool,
190
- args: functionArgs,
191
- context: toolContext
192
- });
193
- if (functionResponse) {
194
- break;
195
- }
196
- }
197
- }
198
- if (functionResponse == null) {
199
- try {
200
- functionResponse = await callToolAsync(
201
- tool,
202
- functionArgs,
203
- toolContext
204
- );
205
- } catch (e) {
206
- if (e instanceof Error) {
207
- const onToolErrorResponse = await invocationContext.pluginManager.runOnToolErrorCallback(
208
- {
209
- tool,
210
- toolArgs: functionArgs,
211
- toolContext,
212
- error: e
213
- }
214
- );
215
- if (onToolErrorResponse) {
216
- functionResponse = onToolErrorResponse;
217
- } else {
218
- functionResponseError = e.message;
219
- }
220
- } else {
221
- functionResponseError = e;
222
- }
223
- }
224
- }
225
- let alteredFunctionResponse = await invocationContext.pluginManager.runAfterToolCallback({
226
- tool,
227
- toolArgs: functionArgs,
228
- toolContext,
229
- result: functionResponse
230
- });
231
- if (alteredFunctionResponse == null) {
232
- for (const callback of afterToolCallbacks) {
233
- alteredFunctionResponse = await callback({
234
- tool,
235
- args: functionArgs,
236
- context: toolContext,
237
- response: functionResponse
238
- });
239
- if (alteredFunctionResponse) {
240
- break;
241
- }
242
- }
243
- }
244
- if (alteredFunctionResponse != null) {
245
- functionResponse = alteredFunctionResponse;
246
- }
247
- if (tool.isLongRunning && !functionResponse) {
248
- continue;
249
- }
250
- if (functionResponseError) {
251
- functionResponse = { error: functionResponseError };
252
- } else if (typeof functionResponse !== "object" || functionResponse == null) {
253
- functionResponse = { result: functionResponse };
254
- }
255
- const functionResponseEvent = createEvent({
256
- invocationId: invocationContext.invocationId,
257
- author: invocationContext.agent.name,
258
- content: createUserContent({
259
- functionResponse: {
260
- id: toolContext.functionCallId,
261
- name: tool.name,
262
- response: functionResponse
263
- }
264
- }),
265
- actions: toolContext.actions,
266
- branch: invocationContext.branch
267
- });
268
- logger.debug("traceToolCall", {
269
- tool: tool.name,
270
- args: functionArgs,
271
- functionResponseEvent: functionResponseEvent.id
272
- });
273
- functionResponseEvents.push(functionResponseEvent);
274
- }
275
- if (!functionResponseEvents.length) {
276
- return null;
277
- }
278
- const mergedEvent = mergeParallelFunctionResponseEvents(functionResponseEvents);
279
- if (functionResponseEvents.length > 1) {
280
- logger.debug("execute_tool (merged)");
281
- logger.debug("traceMergedToolCalls", {
282
- responseEventId: mergedEvent.id,
283
- functionResponseEvent: mergedEvent.id
284
- });
285
- }
286
- return mergedEvent;
287
- }
288
- function getToolAndContext({
289
- invocationContext,
290
- functionCall,
291
- toolsDict,
292
- toolConfirmation
293
- }) {
294
- if (!functionCall.name || !(functionCall.name in toolsDict)) {
295
- throw new Error(
296
- "Function ".concat(functionCall.name, " is not found in the toolsDict.")
297
- );
298
- }
299
- const toolContext = new ToolContext({
300
- invocationContext,
301
- functionCallId: functionCall.id || void 0,
302
- toolConfirmation
303
- });
304
- const tool = toolsDict[functionCall.name];
305
- return { tool, toolContext };
306
- }
307
- function mergeParallelFunctionResponseEvents(functionResponseEvents) {
308
- if (!functionResponseEvents.length) {
309
- throw new Error("No function response events provided.");
310
- }
311
- if (functionResponseEvents.length === 1) {
312
- return functionResponseEvents[0];
313
- }
314
- const mergedParts = [];
315
- for (const event of functionResponseEvents) {
316
- if (event.content && event.content.parts) {
317
- mergedParts.push(...event.content.parts);
318
- }
319
- }
320
- const baseEvent = functionResponseEvents[0];
321
- const actionsList = functionResponseEvents.map((event) => event.actions || {});
322
- const mergedActions = mergeEventActions(actionsList);
323
- return createEvent({
324
- author: baseEvent.author,
325
- branch: baseEvent.branch,
326
- content: { role: "user", parts: mergedParts },
327
- actions: mergedActions,
328
- timestamp: baseEvent.timestamp
329
- });
330
- }
331
- export {
332
- REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,
333
- REQUEST_EUC_FUNCTION_CALL_NAME,
334
- functionsExportedForTestingOnly,
335
- generateAuthEvent,
336
- generateClientFunctionCallId,
337
- generateRequestConfirmationEvent,
338
- getLongRunningFunctionCalls,
339
- handleFunctionCallList,
340
- handleFunctionCallsAsync,
341
- mergeParallelFunctionResponseEvents,
342
- populateClientFunctionCallId,
343
- removeClientFunctionCallId
344
- };