@paean-ai/adk 0.2.17 → 0.2.19

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 (253) hide show
  1. package/dist/cjs/index.js +3 -3
  2. package/dist/cjs/index.js.map +3 -3
  3. package/dist/esm/index.js +3 -3
  4. package/dist/esm/index.js.map +3 -3
  5. package/dist/web/index.js +1 -1
  6. package/dist/web/index.js.map +3 -3
  7. package/package.json +2 -2
  8. package/dist/cjs/agents/active_streaming_tool.js +0 -44
  9. package/dist/cjs/agents/base_agent.js +0 -245
  10. package/dist/cjs/agents/base_llm_processor.js +0 -44
  11. package/dist/cjs/agents/callback_context.js +0 -98
  12. package/dist/cjs/agents/content_processor_utils.js +0 -346
  13. package/dist/cjs/agents/functions.js +0 -424
  14. package/dist/cjs/agents/instructions.js +0 -110
  15. package/dist/cjs/agents/invocation_context.js +0 -107
  16. package/dist/cjs/agents/live_request_queue.js +0 -136
  17. package/dist/cjs/agents/llm_agent.js +0 -1247
  18. package/dist/cjs/agents/loop_agent.js +0 -68
  19. package/dist/cjs/agents/parallel_agent.js +0 -78
  20. package/dist/cjs/agents/readonly_context.js +0 -68
  21. package/dist/cjs/agents/run_config.js +0 -70
  22. package/dist/cjs/agents/sequential_agent.js +0 -84
  23. package/dist/cjs/agents/transcription_entry.js +0 -27
  24. package/dist/cjs/artifacts/base_artifact_service.js +0 -27
  25. package/dist/cjs/artifacts/gcs_artifact_service.js +0 -140
  26. package/dist/cjs/artifacts/in_memory_artifact_service.js +0 -119
  27. package/dist/cjs/auth/auth_credential.js +0 -46
  28. package/dist/cjs/auth/auth_handler.js +0 -92
  29. package/dist/cjs/auth/auth_schemes.js +0 -62
  30. package/dist/cjs/auth/auth_tool.js +0 -27
  31. package/dist/cjs/auth/credential_service/base_credential_service.js +0 -27
  32. package/dist/cjs/auth/credential_service/in_memory_credential_service.js +0 -63
  33. package/dist/cjs/auth/exchanger/base_credential_exchanger.js +0 -40
  34. package/dist/cjs/auth/exchanger/credential_exchanger_registry.js +0 -59
  35. package/dist/cjs/code_executors/base_code_executor.js +0 -76
  36. package/dist/cjs/code_executors/built_in_code_executor.js +0 -58
  37. package/dist/cjs/code_executors/code_execution_utils.js +0 -142
  38. package/dist/cjs/code_executors/code_executor_context.js +0 -198
  39. package/dist/cjs/common.js +0 -181
  40. package/dist/cjs/events/event.js +0 -119
  41. package/dist/cjs/events/event_actions.js +0 -83
  42. package/dist/cjs/examples/base_example_provider.js +0 -40
  43. package/dist/cjs/examples/example.js +0 -27
  44. package/dist/cjs/examples/example_util.js +0 -107
  45. package/dist/cjs/index_web.js +0 -33
  46. package/dist/cjs/memory/base_memory_service.js +0 -27
  47. package/dist/cjs/memory/in_memory_memory_service.js +0 -97
  48. package/dist/cjs/memory/memory_entry.js +0 -27
  49. package/dist/cjs/models/base_llm.js +0 -95
  50. package/dist/cjs/models/base_llm_connection.js +0 -27
  51. package/dist/cjs/models/gemini_llm_connection.js +0 -132
  52. package/dist/cjs/models/google_llm.js +0 -559
  53. package/dist/cjs/models/llm_request.js +0 -82
  54. package/dist/cjs/models/llm_response.js +0 -71
  55. package/dist/cjs/models/registry.js +0 -121
  56. package/dist/cjs/plugins/base_plugin.js +0 -236
  57. package/dist/cjs/plugins/logging_plugin.js +0 -222
  58. package/dist/cjs/plugins/plugin_manager.js +0 -239
  59. package/dist/cjs/plugins/security_plugin.js +0 -153
  60. package/dist/cjs/runner/in_memory_runner.js +0 -58
  61. package/dist/cjs/runner/runner.js +0 -277
  62. package/dist/cjs/sessions/base_session_service.js +0 -71
  63. package/dist/cjs/sessions/in_memory_session_service.js +0 -184
  64. package/dist/cjs/sessions/session.js +0 -48
  65. package/dist/cjs/sessions/state.js +0 -101
  66. package/dist/cjs/telemetry/google_cloud.js +0 -85
  67. package/dist/cjs/telemetry/setup.js +0 -97
  68. package/dist/cjs/telemetry/tracing.js +0 -231
  69. package/dist/cjs/tools/agent_tool.js +0 -134
  70. package/dist/cjs/tools/base_tool.js +0 -107
  71. package/dist/cjs/tools/base_toolset.js +0 -76
  72. package/dist/cjs/tools/forwarding_artifact_service.js +0 -71
  73. package/dist/cjs/tools/function_tool.js +0 -101
  74. package/dist/cjs/tools/google_search_tool.js +0 -77
  75. package/dist/cjs/tools/long_running_tool.js +0 -63
  76. package/dist/cjs/tools/mcp/mcp_session_manager.js +0 -65
  77. package/dist/cjs/tools/mcp/mcp_tool.js +0 -65
  78. package/dist/cjs/tools/mcp/mcp_toolset.js +0 -61
  79. package/dist/cjs/tools/tool_confirmation.js +0 -49
  80. package/dist/cjs/tools/tool_context.js +0 -129
  81. package/dist/cjs/utils/client_labels.js +0 -56
  82. package/dist/cjs/utils/deep_clone.js +0 -44
  83. package/dist/cjs/utils/env_aware_utils.js +0 -83
  84. package/dist/cjs/utils/gemini_schema_util.js +0 -88
  85. package/dist/cjs/utils/logger.js +0 -121
  86. package/dist/cjs/utils/model_name.js +0 -76
  87. package/dist/cjs/utils/simple_zod_to_json.js +0 -191
  88. package/dist/cjs/utils/variant_utils.js +0 -55
  89. package/dist/cjs/version.js +0 -39
  90. package/dist/esm/agents/active_streaming_tool.js +0 -14
  91. package/dist/esm/agents/base_agent.js +0 -214
  92. package/dist/esm/agents/base_llm_processor.js +0 -13
  93. package/dist/esm/agents/callback_context.js +0 -68
  94. package/dist/esm/agents/content_processor_utils.js +0 -315
  95. package/dist/esm/agents/functions.js +0 -383
  96. package/dist/esm/agents/instructions.js +0 -80
  97. package/dist/esm/agents/invocation_context.js +0 -76
  98. package/dist/esm/agents/live_request_queue.js +0 -106
  99. package/dist/esm/agents/llm_agent.js +0 -1215
  100. package/dist/esm/agents/loop_agent.js +0 -38
  101. package/dist/esm/agents/parallel_agent.js +0 -48
  102. package/dist/esm/agents/readonly_context.js +0 -38
  103. package/dist/esm/agents/run_config.js +0 -39
  104. package/dist/esm/agents/sequential_agent.js +0 -54
  105. package/dist/esm/agents/transcription_entry.js +0 -5
  106. package/dist/esm/artifacts/base_artifact_service.js +0 -5
  107. package/dist/esm/artifacts/gcs_artifact_service.js +0 -110
  108. package/dist/esm/artifacts/in_memory_artifact_service.js +0 -89
  109. package/dist/esm/auth/auth_credential.js +0 -16
  110. package/dist/esm/auth/auth_handler.js +0 -62
  111. package/dist/esm/auth/auth_schemes.js +0 -31
  112. package/dist/esm/auth/auth_tool.js +0 -5
  113. package/dist/esm/auth/credential_service/base_credential_service.js +0 -5
  114. package/dist/esm/auth/credential_service/in_memory_credential_service.js +0 -33
  115. package/dist/esm/auth/exchanger/base_credential_exchanger.js +0 -10
  116. package/dist/esm/auth/exchanger/credential_exchanger_registry.js +0 -29
  117. package/dist/esm/code_executors/base_code_executor.js +0 -46
  118. package/dist/esm/code_executors/built_in_code_executor.js +0 -28
  119. package/dist/esm/code_executors/code_execution_utils.js +0 -108
  120. package/dist/esm/code_executors/code_executor_context.js +0 -168
  121. package/dist/esm/common.js +0 -98
  122. package/dist/esm/events/event.js +0 -83
  123. package/dist/esm/events/event_actions.js +0 -52
  124. package/dist/esm/examples/base_example_provider.js +0 -10
  125. package/dist/esm/examples/example.js +0 -5
  126. package/dist/esm/examples/example_util.js +0 -76
  127. package/dist/esm/index_web.js +0 -6
  128. package/dist/esm/memory/base_memory_service.js +0 -5
  129. package/dist/esm/memory/in_memory_memory_service.js +0 -67
  130. package/dist/esm/memory/memory_entry.js +0 -5
  131. package/dist/esm/models/base_llm.js +0 -64
  132. package/dist/esm/models/base_llm_connection.js +0 -5
  133. package/dist/esm/models/gemini_llm_connection.js +0 -102
  134. package/dist/esm/models/google_llm.js +0 -533
  135. package/dist/esm/models/llm_request.js +0 -50
  136. package/dist/esm/models/llm_response.js +0 -41
  137. package/dist/esm/models/registry.js +0 -91
  138. package/dist/esm/plugins/base_plugin.js +0 -206
  139. package/dist/esm/plugins/logging_plugin.js +0 -192
  140. package/dist/esm/plugins/plugin_manager.js +0 -209
  141. package/dist/esm/plugins/security_plugin.js +0 -119
  142. package/dist/esm/runner/in_memory_runner.js +0 -28
  143. package/dist/esm/runner/runner.js +0 -247
  144. package/dist/esm/sessions/base_session_service.js +0 -41
  145. package/dist/esm/sessions/in_memory_session_service.js +0 -154
  146. package/dist/esm/sessions/session.js +0 -18
  147. package/dist/esm/sessions/state.js +0 -71
  148. package/dist/esm/telemetry/google_cloud.js +0 -54
  149. package/dist/esm/telemetry/setup.js +0 -67
  150. package/dist/esm/telemetry/tracing.js +0 -195
  151. package/dist/esm/tools/agent_tool.js +0 -104
  152. package/dist/esm/tools/base_tool.js +0 -77
  153. package/dist/esm/tools/base_toolset.js +0 -46
  154. package/dist/esm/tools/forwarding_artifact_service.js +0 -41
  155. package/dist/esm/tools/function_tool.js +0 -71
  156. package/dist/esm/tools/google_search_tool.js +0 -47
  157. package/dist/esm/tools/long_running_tool.js +0 -33
  158. package/dist/esm/tools/mcp/mcp_session_manager.js +0 -35
  159. package/dist/esm/tools/mcp/mcp_tool.js +0 -35
  160. package/dist/esm/tools/mcp/mcp_toolset.js +0 -31
  161. package/dist/esm/tools/tool_confirmation.js +0 -19
  162. package/dist/esm/tools/tool_context.js +0 -99
  163. package/dist/esm/utils/client_labels.js +0 -26
  164. package/dist/esm/utils/deep_clone.js +0 -14
  165. package/dist/esm/utils/env_aware_utils.js +0 -49
  166. package/dist/esm/utils/gemini_schema_util.js +0 -58
  167. package/dist/esm/utils/logger.js +0 -89
  168. package/dist/esm/utils/model_name.js +0 -41
  169. package/dist/esm/utils/simple_zod_to_json.js +0 -160
  170. package/dist/esm/utils/variant_utils.js +0 -24
  171. package/dist/esm/version.js +0 -9
  172. package/dist/web/agents/active_streaming_tool.js +0 -14
  173. package/dist/web/agents/base_agent.js +0 -265
  174. package/dist/web/agents/base_llm_processor.js +0 -13
  175. package/dist/web/agents/callback_context.js +0 -68
  176. package/dist/web/agents/content_processor_utils.js +0 -315
  177. package/dist/web/agents/functions.js +0 -383
  178. package/dist/web/agents/instructions.js +0 -80
  179. package/dist/web/agents/invocation_context.js +0 -76
  180. package/dist/web/agents/live_request_queue.js +0 -124
  181. package/dist/web/agents/llm_agent.js +0 -1345
  182. package/dist/web/agents/loop_agent.js +0 -71
  183. package/dist/web/agents/parallel_agent.js +0 -83
  184. package/dist/web/agents/readonly_context.js +0 -38
  185. package/dist/web/agents/run_config.js +0 -54
  186. package/dist/web/agents/sequential_agent.js +0 -99
  187. package/dist/web/agents/transcription_entry.js +0 -5
  188. package/dist/web/artifacts/base_artifact_service.js +0 -5
  189. package/dist/web/artifacts/gcs_artifact_service.js +0 -126
  190. package/dist/web/artifacts/in_memory_artifact_service.js +0 -89
  191. package/dist/web/auth/auth_credential.js +0 -16
  192. package/dist/web/auth/auth_handler.js +0 -62
  193. package/dist/web/auth/auth_schemes.js +0 -31
  194. package/dist/web/auth/auth_tool.js +0 -5
  195. package/dist/web/auth/credential_service/base_credential_service.js +0 -5
  196. package/dist/web/auth/credential_service/in_memory_credential_service.js +0 -33
  197. package/dist/web/auth/exchanger/base_credential_exchanger.js +0 -10
  198. package/dist/web/auth/exchanger/credential_exchanger_registry.js +0 -29
  199. package/dist/web/code_executors/base_code_executor.js +0 -46
  200. package/dist/web/code_executors/built_in_code_executor.js +0 -28
  201. package/dist/web/code_executors/code_execution_utils.js +0 -105
  202. package/dist/web/code_executors/code_executor_context.js +0 -168
  203. package/dist/web/common.js +0 -98
  204. package/dist/web/events/event.js +0 -101
  205. package/dist/web/events/event_actions.js +0 -67
  206. package/dist/web/examples/base_example_provider.js +0 -10
  207. package/dist/web/examples/example.js +0 -5
  208. package/dist/web/examples/example_util.js +0 -75
  209. package/dist/web/index_web.js +0 -6
  210. package/dist/web/memory/base_memory_service.js +0 -5
  211. package/dist/web/memory/in_memory_memory_service.js +0 -67
  212. package/dist/web/memory/memory_entry.js +0 -5
  213. package/dist/web/models/base_llm.js +0 -64
  214. package/dist/web/models/base_llm_connection.js +0 -5
  215. package/dist/web/models/gemini_llm_connection.js +0 -120
  216. package/dist/web/models/google_llm.js +0 -574
  217. package/dist/web/models/llm_request.js +0 -50
  218. package/dist/web/models/llm_response.js +0 -41
  219. package/dist/web/models/registry.js +0 -91
  220. package/dist/web/plugins/base_plugin.js +0 -206
  221. package/dist/web/plugins/logging_plugin.js +0 -192
  222. package/dist/web/plugins/plugin_manager.js +0 -209
  223. package/dist/web/plugins/security_plugin.js +0 -119
  224. package/dist/web/runner/in_memory_runner.js +0 -28
  225. package/dist/web/runner/runner.js +0 -278
  226. package/dist/web/sessions/base_session_service.js +0 -41
  227. package/dist/web/sessions/in_memory_session_service.js +0 -154
  228. package/dist/web/sessions/session.js +0 -18
  229. package/dist/web/sessions/state.js +0 -87
  230. package/dist/web/telemetry/google_cloud.js +0 -54
  231. package/dist/web/telemetry/setup.js +0 -67
  232. package/dist/web/telemetry/tracing.js +0 -210
  233. package/dist/web/tools/agent_tool.js +0 -118
  234. package/dist/web/tools/base_tool.js +0 -77
  235. package/dist/web/tools/base_toolset.js +0 -46
  236. package/dist/web/tools/forwarding_artifact_service.js +0 -41
  237. package/dist/web/tools/function_tool.js +0 -71
  238. package/dist/web/tools/google_search_tool.js +0 -47
  239. package/dist/web/tools/long_running_tool.js +0 -50
  240. package/dist/web/tools/mcp/mcp_session_manager.js +0 -35
  241. package/dist/web/tools/mcp/mcp_tool.js +0 -35
  242. package/dist/web/tools/mcp/mcp_toolset.js +0 -31
  243. package/dist/web/tools/tool_confirmation.js +0 -19
  244. package/dist/web/tools/tool_context.js +0 -99
  245. package/dist/web/utils/client_labels.js +0 -26
  246. package/dist/web/utils/deep_clone.js +0 -14
  247. package/dist/web/utils/env_aware_utils.js +0 -49
  248. package/dist/web/utils/gemini_schema_util.js +0 -58
  249. package/dist/web/utils/logger.js +0 -89
  250. package/dist/web/utils/model_name.js +0 -41
  251. package/dist/web/utils/simple_zod_to_json.js +0 -174
  252. package/dist/web/utils/variant_utils.js +0 -24
  253. 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 ${i + 1}/${contents.length}: role=${content.role}, hasFunctionCalls=true, hasThought=${hasThought}, hasSignature=${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 ${j}: functionCall=${part.functionCall.name}, hasSignature=${!!part.thoughtSignature}`
58
- );
59
- } else if (part.thought) {
60
- logger.info(
61
- `[getContents] Part ${j}: thought=true, hasSignature=${!!part.thoughtSignature}`
62
- );
63
- }
64
- }
65
- }
66
- }
67
- if (hasFunctionCallWithoutSignature) {
68
- logger.warn(
69
- `[getContents] WARNING: Content block ${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: `[${event.author}] said: ${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: `[${event.author}] called tool \`${part.functionCall.name}\` with parameters: ${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: `[${event.author}] tool \`${part.functionResponse.name}\` returned result: ${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 : ${Array.from(functionCallIds).join(", ")}, function response ids provided: ${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: ${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,383 +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 `${AF_FUNCTION_CALL_ID_PREFIX}${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 resolveToolName(name, toolsDict) {
45
- if (name in toolsDict) {
46
- return name;
47
- }
48
- const colonIndex = name.indexOf(":");
49
- if (colonIndex > 0) {
50
- const baseName = name.substring(0, colonIndex);
51
- if (baseName in toolsDict) {
52
- logger.info(
53
- `Resolved Gemini 3 function name "${name}" to tool "${baseName}"`
54
- );
55
- return baseName;
56
- }
57
- }
58
- return void 0;
59
- }
60
- function getLongRunningFunctionCalls(functionCalls, toolsDict) {
61
- const longRunningToolIds = /* @__PURE__ */ new Set();
62
- for (const functionCall of functionCalls) {
63
- if (!functionCall.name || !functionCall.id) continue;
64
- const resolvedName = resolveToolName(functionCall.name, toolsDict);
65
- if (resolvedName && toolsDict[resolvedName].isLongRunning) {
66
- longRunningToolIds.add(functionCall.id);
67
- }
68
- }
69
- return longRunningToolIds;
70
- }
71
- function generateAuthEvent(invocationContext, functionResponseEvent) {
72
- var _a;
73
- if (!((_a = functionResponseEvent.actions) == null ? void 0 : _a.requestedAuthConfigs)) {
74
- return void 0;
75
- }
76
- const parts = [];
77
- const longRunningToolIds = /* @__PURE__ */ new Set();
78
- for (const [functionCallId, authConfig] of Object.entries(
79
- functionResponseEvent.actions.requestedAuthConfigs
80
- )) {
81
- const requestEucFunctionCall = {
82
- name: REQUEST_EUC_FUNCTION_CALL_NAME,
83
- args: {
84
- "function_call_id": functionCallId,
85
- "auth_config": authConfig
86
- },
87
- id: generateClientFunctionCallId()
88
- };
89
- longRunningToolIds.add(requestEucFunctionCall.id);
90
- parts.push({ functionCall: requestEucFunctionCall });
91
- }
92
- return createEvent({
93
- invocationId: invocationContext.invocationId,
94
- author: invocationContext.agent.name,
95
- branch: invocationContext.branch,
96
- content: {
97
- parts,
98
- role: functionResponseEvent.content.role
99
- },
100
- longRunningToolIds: Array.from(longRunningToolIds)
101
- });
102
- }
103
- function generateRequestConfirmationEvent({
104
- invocationContext,
105
- functionCallEvent,
106
- functionResponseEvent
107
- }) {
108
- var _a, _b;
109
- if (!((_a = functionResponseEvent.actions) == null ? void 0 : _a.requestedToolConfirmations)) {
110
- return;
111
- }
112
- const parts = [];
113
- const longRunningToolIds = /* @__PURE__ */ new Set();
114
- const functionCalls = getFunctionCalls(functionCallEvent);
115
- for (const [functionCallId, toolConfirmation] of Object.entries(
116
- functionResponseEvent.actions.requestedToolConfirmations
117
- )) {
118
- const originalFunctionCall = (_b = functionCalls.find((call) => call.id === functionCallId)) != null ? _b : void 0;
119
- if (!originalFunctionCall) {
120
- continue;
121
- }
122
- const requestConfirmationFunctionCall = {
123
- name: REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,
124
- args: {
125
- "originalFunctionCall": originalFunctionCall,
126
- "toolConfirmation": toolConfirmation
127
- },
128
- id: generateClientFunctionCallId()
129
- };
130
- longRunningToolIds.add(requestConfirmationFunctionCall.id);
131
- parts.push({ functionCall: requestConfirmationFunctionCall });
132
- }
133
- return createEvent({
134
- invocationId: invocationContext.invocationId,
135
- author: invocationContext.agent.name,
136
- branch: invocationContext.branch,
137
- content: {
138
- parts,
139
- role: functionResponseEvent.content.role
140
- },
141
- longRunningToolIds: Array.from(longRunningToolIds)
142
- });
143
- }
144
- async function callToolAsync(tool, args, toolContext) {
145
- logger.debug(`callToolAsync ${tool.name}`);
146
- return await tool.runAsync({ args, toolContext });
147
- }
148
- async function handleFunctionCallsAsync({
149
- invocationContext,
150
- functionCallEvent,
151
- toolsDict,
152
- beforeToolCallbacks,
153
- afterToolCallbacks,
154
- filters,
155
- toolConfirmationDict
156
- }) {
157
- const functionCalls = getFunctionCalls(functionCallEvent);
158
- return await handleFunctionCallList({
159
- invocationContext,
160
- functionCalls,
161
- toolsDict,
162
- beforeToolCallbacks,
163
- afterToolCallbacks,
164
- filters,
165
- toolConfirmationDict
166
- });
167
- }
168
- async function handleFunctionCallList({
169
- invocationContext,
170
- functionCalls,
171
- toolsDict,
172
- beforeToolCallbacks,
173
- afterToolCallbacks,
174
- filters,
175
- toolConfirmationDict
176
- }) {
177
- var _a, _b, _c;
178
- const functionResponseEvents = [];
179
- const filteredFunctionCalls = functionCalls.filter((functionCall) => {
180
- return !filters || functionCall.id && filters.has(functionCall.id);
181
- });
182
- for (const functionCall of filteredFunctionCalls) {
183
- let toolConfirmation = void 0;
184
- if (toolConfirmationDict && functionCall.id) {
185
- toolConfirmation = toolConfirmationDict[functionCall.id];
186
- }
187
- const toolAndContext = getToolAndContext(
188
- {
189
- invocationContext,
190
- functionCall,
191
- toolsDict,
192
- toolConfirmation
193
- }
194
- );
195
- if (!toolAndContext) {
196
- logger.warn(
197
- `Function ${functionCall.name} is not found in the toolsDict. Returning error response to LLM.`
198
- );
199
- const errorResponseEvent = createEvent({
200
- invocationId: invocationContext.invocationId,
201
- author: invocationContext.agent.name,
202
- content: createUserContent({
203
- functionResponse: {
204
- id: functionCall.id || void 0,
205
- name: (_a = functionCall.name) != null ? _a : "unknown",
206
- response: {
207
- error: `Function ${functionCall.name} is not available. If this tool belongs to a lazy-loaded group, call loadToolGroup first in a SEPARATE step, then retry.`
208
- }
209
- }
210
- }),
211
- branch: invocationContext.branch
212
- });
213
- functionResponseEvents.push(errorResponseEvent);
214
- continue;
215
- }
216
- const { tool, toolContext } = toolAndContext;
217
- logger.debug(`execute_tool ${tool.name}`);
218
- const functionArgs = (_b = functionCall.args) != null ? _b : {};
219
- let functionResponse = null;
220
- let functionResponseError;
221
- functionResponse = await invocationContext.pluginManager.runBeforeToolCallback({
222
- tool,
223
- toolArgs: functionArgs,
224
- toolContext
225
- });
226
- if (functionResponse == null) {
227
- for (const callback of beforeToolCallbacks) {
228
- functionResponse = await callback({
229
- tool,
230
- args: functionArgs,
231
- context: toolContext
232
- });
233
- if (functionResponse) {
234
- break;
235
- }
236
- }
237
- }
238
- if (functionResponse == null) {
239
- try {
240
- functionResponse = await callToolAsync(
241
- tool,
242
- functionArgs,
243
- toolContext
244
- );
245
- } catch (e) {
246
- if (e instanceof Error) {
247
- const onToolErrorResponse = await invocationContext.pluginManager.runOnToolErrorCallback(
248
- {
249
- tool,
250
- toolArgs: functionArgs,
251
- toolContext,
252
- error: e
253
- }
254
- );
255
- if (onToolErrorResponse) {
256
- functionResponse = onToolErrorResponse;
257
- } else {
258
- functionResponseError = e.message;
259
- }
260
- } else {
261
- functionResponseError = e;
262
- }
263
- }
264
- }
265
- let alteredFunctionResponse = await invocationContext.pluginManager.runAfterToolCallback({
266
- tool,
267
- toolArgs: functionArgs,
268
- toolContext,
269
- result: functionResponse
270
- });
271
- if (alteredFunctionResponse == null) {
272
- for (const callback of afterToolCallbacks) {
273
- alteredFunctionResponse = await callback({
274
- tool,
275
- args: functionArgs,
276
- context: toolContext,
277
- response: functionResponse
278
- });
279
- if (alteredFunctionResponse) {
280
- break;
281
- }
282
- }
283
- }
284
- if (alteredFunctionResponse != null) {
285
- functionResponse = alteredFunctionResponse;
286
- }
287
- if (tool.isLongRunning && !functionResponse) {
288
- continue;
289
- }
290
- if (functionResponseError) {
291
- functionResponse = { error: functionResponseError };
292
- } else if (typeof functionResponse !== "object" || functionResponse == null) {
293
- functionResponse = { result: functionResponse };
294
- }
295
- const functionResponseEvent = createEvent({
296
- invocationId: invocationContext.invocationId,
297
- author: invocationContext.agent.name,
298
- content: createUserContent({
299
- functionResponse: {
300
- id: toolContext.functionCallId,
301
- name: (_c = functionCall.name) != null ? _c : tool.name,
302
- response: functionResponse
303
- }
304
- }),
305
- actions: toolContext.actions,
306
- branch: invocationContext.branch
307
- });
308
- logger.debug("traceToolCall", {
309
- tool: tool.name,
310
- args: functionArgs,
311
- functionResponseEvent: functionResponseEvent.id
312
- });
313
- functionResponseEvents.push(functionResponseEvent);
314
- }
315
- if (!functionResponseEvents.length) {
316
- return null;
317
- }
318
- const mergedEvent = mergeParallelFunctionResponseEvents(functionResponseEvents);
319
- if (functionResponseEvents.length > 1) {
320
- logger.debug("execute_tool (merged)");
321
- logger.debug("traceMergedToolCalls", {
322
- responseEventId: mergedEvent.id,
323
- functionResponseEvent: mergedEvent.id
324
- });
325
- }
326
- return mergedEvent;
327
- }
328
- function getToolAndContext({
329
- invocationContext,
330
- functionCall,
331
- toolsDict,
332
- toolConfirmation
333
- }) {
334
- const resolvedName = functionCall.name ? resolveToolName(functionCall.name, toolsDict) : void 0;
335
- if (!resolvedName) {
336
- return null;
337
- }
338
- const toolContext = new ToolContext({
339
- invocationContext,
340
- functionCallId: functionCall.id || void 0,
341
- toolConfirmation
342
- });
343
- const tool = toolsDict[resolvedName];
344
- return { tool, toolContext };
345
- }
346
- function mergeParallelFunctionResponseEvents(functionResponseEvents) {
347
- if (!functionResponseEvents.length) {
348
- throw new Error("No function response events provided.");
349
- }
350
- if (functionResponseEvents.length === 1) {
351
- return functionResponseEvents[0];
352
- }
353
- const mergedParts = [];
354
- for (const event of functionResponseEvents) {
355
- if (event.content && event.content.parts) {
356
- mergedParts.push(...event.content.parts);
357
- }
358
- }
359
- const baseEvent = functionResponseEvents[0];
360
- const actionsList = functionResponseEvents.map((event) => event.actions || {});
361
- const mergedActions = mergeEventActions(actionsList);
362
- return createEvent({
363
- author: baseEvent.author,
364
- branch: baseEvent.branch,
365
- content: { role: "user", parts: mergedParts },
366
- actions: mergedActions,
367
- timestamp: baseEvent.timestamp
368
- });
369
- }
370
- export {
371
- REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,
372
- REQUEST_EUC_FUNCTION_CALL_NAME,
373
- functionsExportedForTestingOnly,
374
- generateAuthEvent,
375
- generateClientFunctionCallId,
376
- generateRequestConfirmationEvent,
377
- getLongRunningFunctionCalls,
378
- handleFunctionCallList,
379
- handleFunctionCallsAsync,
380
- mergeParallelFunctionResponseEvents,
381
- populateClientFunctionCallId,
382
- removeClientFunctionCallId
383
- };