google-adk 0.0.1__py3-none-any.whl → 0.0.3__py3-none-any.whl

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 (345) hide show
  1. google/adk/._version.py +0 -0
  2. google/adk/__init__.py +20 -0
  3. google/adk/agents/__init__.py +32 -0
  4. google/adk/agents/active_streaming_tool.py +38 -0
  5. google/adk/agents/base_agent.py +345 -0
  6. google/adk/agents/callback_context.py +112 -0
  7. google/adk/agents/invocation_context.py +181 -0
  8. google/adk/agents/langgraph_agent.py +140 -0
  9. google/adk/agents/live_request_queue.py +64 -0
  10. google/adk/agents/llm_agent.py +376 -0
  11. google/adk/agents/loop_agent.py +62 -0
  12. google/adk/agents/parallel_agent.py +96 -0
  13. google/adk/agents/readonly_context.py +46 -0
  14. google/adk/agents/remote_agent.py +50 -0
  15. google/adk/agents/run_config.py +87 -0
  16. google/adk/agents/sequential_agent.py +45 -0
  17. google/adk/agents/transcription_entry.py +34 -0
  18. google/adk/artifacts/__init__.py +23 -0
  19. google/adk/artifacts/base_artifact_service.py +128 -0
  20. google/adk/artifacts/gcs_artifact_service.py +195 -0
  21. google/adk/artifacts/in_memory_artifact_service.py +133 -0
  22. google/adk/auth/__init__.py +22 -0
  23. google/adk/auth/auth_credential.py +220 -0
  24. google/adk/auth/auth_handler.py +268 -0
  25. google/adk/auth/auth_preprocessor.py +116 -0
  26. google/adk/auth/auth_schemes.py +67 -0
  27. google/adk/auth/auth_tool.py +55 -0
  28. google/adk/cli/__init__.py +15 -0
  29. google/adk/cli/__main__.py +18 -0
  30. google/adk/cli/agent_graph.py +148 -0
  31. google/adk/cli/browser/adk_favicon.svg +17 -0
  32. google/adk/cli/browser/assets/audio-processor.js +51 -0
  33. google/adk/cli/browser/assets/config/runtime-config.json +3 -0
  34. google/adk/cli/browser/index.html +33 -0
  35. google/adk/cli/browser/main-SY2WYYGV.js +75 -0
  36. google/adk/cli/browser/polyfills-FFHMD2TL.js +18 -0
  37. google/adk/cli/browser/styles-4VDSPQ37.css +17 -0
  38. google/adk/cli/cli.py +181 -0
  39. google/adk/cli/cli_deploy.py +181 -0
  40. google/adk/cli/cli_eval.py +282 -0
  41. google/adk/cli/cli_tools_click.py +524 -0
  42. google/adk/cli/fast_api.py +784 -0
  43. google/adk/cli/utils/__init__.py +49 -0
  44. google/adk/cli/utils/envs.py +57 -0
  45. google/adk/cli/utils/evals.py +93 -0
  46. google/adk/cli/utils/logs.py +72 -0
  47. google/adk/code_executors/__init__.py +49 -0
  48. google/adk/code_executors/base_code_executor.py +97 -0
  49. google/adk/code_executors/code_execution_utils.py +256 -0
  50. google/adk/code_executors/code_executor_context.py +202 -0
  51. google/adk/code_executors/container_code_executor.py +196 -0
  52. google/adk/code_executors/unsafe_local_code_executor.py +71 -0
  53. google/adk/code_executors/vertex_ai_code_executor.py +234 -0
  54. google/adk/docs/Makefile +20 -0
  55. google/adk/docs/build/doctrees/google-adk.doctree +0 -0
  56. google/adk/docs/build/html/_sources/google-adk.rst.txt +98 -0
  57. google/adk/docs/build/html/_sources/index.rst.txt +7 -0
  58. google/adk/docs/build/html/_static/autodoc_pydantic.css +27 -0
  59. google/adk/docs/build/html/_static/basic.css +925 -0
  60. google/adk/docs/build/html/_static/debug.css +85 -0
  61. google/adk/docs/build/html/_static/doctools.js +156 -0
  62. google/adk/docs/build/html/_static/documentation_options.js +29 -0
  63. google/adk/docs/build/html/_static/file.png +0 -0
  64. google/adk/docs/build/html/_static/language_data.js +199 -0
  65. google/adk/docs/build/html/_static/minus.png +0 -0
  66. google/adk/docs/build/html/_static/plus.png +0 -0
  67. google/adk/docs/build/html/_static/pygments.css +274 -0
  68. google/adk/docs/build/html/_static/scripts/furo-extensions.js +16 -0
  69. google/adk/docs/build/html/_static/scripts/furo.js +19 -0
  70. google/adk/docs/build/html/_static/scripts/furo.js.LICENSE.txt +7 -0
  71. google/adk/docs/build/html/_static/scripts/furo.js.map +1 -0
  72. google/adk/docs/build/html/_static/searchtools.js +620 -0
  73. google/adk/docs/build/html/_static/skeleton.css +312 -0
  74. google/adk/docs/build/html/_static/sphinx_highlight.js +170 -0
  75. google/adk/docs/build/html/_static/styles/furo-extensions.css +18 -0
  76. google/adk/docs/build/html/_static/styles/furo-extensions.css.map +1 -0
  77. google/adk/docs/build/html/_static/styles/furo.css +18 -0
  78. google/adk/docs/build/html/_static/styles/furo.css.map +1 -0
  79. google/adk/docs/build/html/genindex.html +861 -0
  80. google/adk/docs/build/html/google-adk.html +5461 -0
  81. google/adk/docs/build/html/index.html +567 -0
  82. google/adk/docs/build/html/objects.inv +0 -0
  83. google/adk/docs/build/html/py-modindex.html +373 -0
  84. google/adk/docs/build/html/search.html +333 -0
  85. google/adk/docs/build/html/searchindex.js +17 -0
  86. google/adk/docs/source/conf.py +133 -0
  87. google/adk/docs/source/google-adk.rst +98 -0
  88. google/adk/docs/source/index.rst +7 -0
  89. google/adk/evaluation/__init__.py +31 -0
  90. google/adk/evaluation/agent_evaluator.py +329 -0
  91. google/adk/evaluation/evaluation_constants.py +24 -0
  92. google/adk/evaluation/evaluation_generator.py +270 -0
  93. google/adk/evaluation/response_evaluator.py +135 -0
  94. google/adk/evaluation/trajectory_evaluator.py +184 -0
  95. google/adk/events/__init__.py +21 -0
  96. google/adk/events/event.py +130 -0
  97. google/adk/events/event_actions.py +55 -0
  98. google/adk/examples/__init__.py +28 -0
  99. google/adk/examples/base_example_provider.py +35 -0
  100. google/adk/examples/example.py +27 -0
  101. google/adk/examples/example_util.py +123 -0
  102. google/adk/examples/vertex_ai_example_store.py +104 -0
  103. google/adk/flows/__init__.py +14 -0
  104. google/adk/flows/llm_flows/__init__.py +20 -0
  105. google/adk/flows/llm_flows/_base_llm_processor.py +52 -0
  106. google/adk/flows/llm_flows/_code_execution.py +458 -0
  107. google/adk/flows/llm_flows/_nl_planning.py +129 -0
  108. google/adk/flows/llm_flows/agent_transfer.py +132 -0
  109. google/adk/flows/llm_flows/audio_transcriber.py +109 -0
  110. google/adk/flows/llm_flows/auto_flow.py +49 -0
  111. google/adk/flows/llm_flows/base_llm_flow.py +559 -0
  112. google/adk/flows/llm_flows/basic.py +72 -0
  113. google/adk/flows/llm_flows/contents.py +370 -0
  114. google/adk/flows/llm_flows/functions.py +486 -0
  115. google/adk/flows/llm_flows/identity.py +47 -0
  116. google/adk/flows/llm_flows/instructions.py +137 -0
  117. google/adk/flows/llm_flows/single_flow.py +57 -0
  118. google/adk/memory/__init__.py +35 -0
  119. google/adk/memory/base_memory_service.py +74 -0
  120. google/adk/memory/in_memory_memory_service.py +62 -0
  121. google/adk/memory/vertex_ai_rag_memory_service.py +177 -0
  122. google/adk/models/__init__.py +31 -0
  123. google/adk/models/anthropic_llm.py +243 -0
  124. google/adk/models/base_llm.py +87 -0
  125. google/adk/models/base_llm_connection.py +76 -0
  126. google/adk/models/gemini_llm_connection.py +200 -0
  127. google/adk/models/google_llm.py +331 -0
  128. google/adk/models/lite_llm.py +673 -0
  129. google/adk/models/llm_request.py +98 -0
  130. google/adk/models/llm_response.py +111 -0
  131. google/adk/models/registry.py +102 -0
  132. google/adk/planners/__init__.py +23 -0
  133. google/adk/planners/base_planner.py +66 -0
  134. google/adk/planners/built_in_planner.py +75 -0
  135. google/adk/planners/plan_re_act_planner.py +208 -0
  136. google/adk/runners.py +456 -0
  137. google/adk/sessions/__init__.py +41 -0
  138. google/adk/sessions/base_session_service.py +133 -0
  139. google/adk/sessions/database_session_service.py +522 -0
  140. google/adk/sessions/in_memory_session_service.py +206 -0
  141. google/adk/sessions/session.py +54 -0
  142. google/adk/sessions/state.py +71 -0
  143. google/adk/sessions/vertex_ai_session_service.py +356 -0
  144. google/adk/telemetry.py +189 -0
  145. google/adk/tests/__init__.py +14 -0
  146. google/adk/tests/integration/.env.example +10 -0
  147. google/adk/tests/integration/__init__.py +18 -0
  148. google/adk/tests/integration/conftest.py +119 -0
  149. google/adk/tests/integration/fixture/__init__.py +14 -0
  150. google/adk/tests/integration/fixture/agent_with_config/__init__.py +15 -0
  151. google/adk/tests/integration/fixture/agent_with_config/agent.py +88 -0
  152. google/adk/tests/integration/fixture/callback_agent/__init__.py +15 -0
  153. google/adk/tests/integration/fixture/callback_agent/agent.py +105 -0
  154. google/adk/tests/integration/fixture/context_update_test/OWNERS +1 -0
  155. google/adk/tests/integration/fixture/context_update_test/__init__.py +15 -0
  156. google/adk/tests/integration/fixture/context_update_test/agent.py +43 -0
  157. google/adk/tests/integration/fixture/context_update_test/successful_test.session.json +582 -0
  158. google/adk/tests/integration/fixture/context_variable_agent/__init__.py +15 -0
  159. google/adk/tests/integration/fixture/context_variable_agent/agent.py +115 -0
  160. google/adk/tests/integration/fixture/customer_support_ma/__init__.py +15 -0
  161. google/adk/tests/integration/fixture/customer_support_ma/agent.py +172 -0
  162. google/adk/tests/integration/fixture/ecommerce_customer_service_agent/__init__.py +15 -0
  163. google/adk/tests/integration/fixture/ecommerce_customer_service_agent/agent.py +338 -0
  164. google/adk/tests/integration/fixture/ecommerce_customer_service_agent/order_query.test.json +69 -0
  165. google/adk/tests/integration/fixture/ecommerce_customer_service_agent/test_config.json +6 -0
  166. google/adk/tests/integration/fixture/flow_complex_spark/__init__.py +15 -0
  167. google/adk/tests/integration/fixture/flow_complex_spark/agent.py +182 -0
  168. google/adk/tests/integration/fixture/flow_complex_spark/sample.session.json +190 -0
  169. google/adk/tests/integration/fixture/hello_world_agent/__init__.py +15 -0
  170. google/adk/tests/integration/fixture/hello_world_agent/agent.py +95 -0
  171. google/adk/tests/integration/fixture/hello_world_agent/roll_die.test.json +24 -0
  172. google/adk/tests/integration/fixture/hello_world_agent/test_config.json +6 -0
  173. google/adk/tests/integration/fixture/home_automation_agent/__init__.py +15 -0
  174. google/adk/tests/integration/fixture/home_automation_agent/agent.py +304 -0
  175. google/adk/tests/integration/fixture/home_automation_agent/simple_test.test.json +5 -0
  176. google/adk/tests/integration/fixture/home_automation_agent/simple_test2.test.json +5 -0
  177. google/adk/tests/integration/fixture/home_automation_agent/test_config.json +5 -0
  178. google/adk/tests/integration/fixture/home_automation_agent/test_files/dependent_tool_calls.test.json +18 -0
  179. google/adk/tests/integration/fixture/home_automation_agent/test_files/memorizing_past_events/eval_data.test.json +17 -0
  180. google/adk/tests/integration/fixture/home_automation_agent/test_files/memorizing_past_events/test_config.json +6 -0
  181. google/adk/tests/integration/fixture/home_automation_agent/test_files/simple_multi_turn_conversation.test.json +18 -0
  182. google/adk/tests/integration/fixture/home_automation_agent/test_files/simple_test.test.json +17 -0
  183. google/adk/tests/integration/fixture/home_automation_agent/test_files/simple_test2.test.json +5 -0
  184. google/adk/tests/integration/fixture/home_automation_agent/test_files/test_config.json +5 -0
  185. google/adk/tests/integration/fixture/tool_agent/__init__.py +15 -0
  186. google/adk/tests/integration/fixture/tool_agent/agent.py +218 -0
  187. google/adk/tests/integration/fixture/tool_agent/files/Agent_test_plan.pdf +0 -0
  188. google/adk/tests/integration/fixture/trip_planner_agent/__init__.py +15 -0
  189. google/adk/tests/integration/fixture/trip_planner_agent/agent.py +110 -0
  190. google/adk/tests/integration/fixture/trip_planner_agent/initial.session.json +13 -0
  191. google/adk/tests/integration/fixture/trip_planner_agent/test_config.json +5 -0
  192. google/adk/tests/integration/fixture/trip_planner_agent/test_files/initial.session.json +13 -0
  193. google/adk/tests/integration/fixture/trip_planner_agent/test_files/test_config.json +5 -0
  194. google/adk/tests/integration/fixture/trip_planner_agent/test_files/trip_inquiry_sub_agent.test.json +7 -0
  195. google/adk/tests/integration/fixture/trip_planner_agent/trip_inquiry.test.json +19 -0
  196. google/adk/tests/integration/models/__init__.py +14 -0
  197. google/adk/tests/integration/models/test_google_llm.py +65 -0
  198. google/adk/tests/integration/test_callback.py +70 -0
  199. google/adk/tests/integration/test_context_variable.py +67 -0
  200. google/adk/tests/integration/test_evalute_agent_in_fixture.py +76 -0
  201. google/adk/tests/integration/test_multi_agent.py +28 -0
  202. google/adk/tests/integration/test_multi_turn.py +42 -0
  203. google/adk/tests/integration/test_single_agent.py +23 -0
  204. google/adk/tests/integration/test_sub_agent.py +26 -0
  205. google/adk/tests/integration/test_system_instruction.py +177 -0
  206. google/adk/tests/integration/test_tools.py +287 -0
  207. google/adk/tests/integration/test_with_test_file.py +34 -0
  208. google/adk/tests/integration/tools/__init__.py +14 -0
  209. google/adk/tests/integration/utils/__init__.py +16 -0
  210. google/adk/tests/integration/utils/asserts.py +75 -0
  211. google/adk/tests/integration/utils/test_runner.py +97 -0
  212. google/adk/tests/unittests/__init__.py +14 -0
  213. google/adk/tests/unittests/agents/__init__.py +14 -0
  214. google/adk/tests/unittests/agents/test_base_agent.py +407 -0
  215. google/adk/tests/unittests/agents/test_langgraph_agent.py +191 -0
  216. google/adk/tests/unittests/agents/test_llm_agent_callbacks.py +138 -0
  217. google/adk/tests/unittests/agents/test_llm_agent_fields.py +231 -0
  218. google/adk/tests/unittests/agents/test_loop_agent.py +136 -0
  219. google/adk/tests/unittests/agents/test_parallel_agent.py +92 -0
  220. google/adk/tests/unittests/agents/test_sequential_agent.py +114 -0
  221. google/adk/tests/unittests/artifacts/__init__.py +14 -0
  222. google/adk/tests/unittests/artifacts/test_artifact_service.py +276 -0
  223. google/adk/tests/unittests/auth/test_auth_handler.py +575 -0
  224. google/adk/tests/unittests/conftest.py +73 -0
  225. google/adk/tests/unittests/fast_api/__init__.py +14 -0
  226. google/adk/tests/unittests/fast_api/test_fast_api.py +269 -0
  227. google/adk/tests/unittests/flows/__init__.py +14 -0
  228. google/adk/tests/unittests/flows/llm_flows/__init__.py +14 -0
  229. google/adk/tests/unittests/flows/llm_flows/_test_examples.py +142 -0
  230. google/adk/tests/unittests/flows/llm_flows/test_agent_transfer.py +311 -0
  231. google/adk/tests/unittests/flows/llm_flows/test_functions_long_running.py +244 -0
  232. google/adk/tests/unittests/flows/llm_flows/test_functions_request_euc.py +346 -0
  233. google/adk/tests/unittests/flows/llm_flows/test_functions_sequential.py +93 -0
  234. google/adk/tests/unittests/flows/llm_flows/test_functions_simple.py +258 -0
  235. google/adk/tests/unittests/flows/llm_flows/test_identity.py +66 -0
  236. google/adk/tests/unittests/flows/llm_flows/test_instructions.py +164 -0
  237. google/adk/tests/unittests/flows/llm_flows/test_model_callbacks.py +142 -0
  238. google/adk/tests/unittests/flows/llm_flows/test_other_configs.py +46 -0
  239. google/adk/tests/unittests/flows/llm_flows/test_tool_callbacks.py +269 -0
  240. google/adk/tests/unittests/models/__init__.py +14 -0
  241. google/adk/tests/unittests/models/test_google_llm.py +224 -0
  242. google/adk/tests/unittests/models/test_litellm.py +804 -0
  243. google/adk/tests/unittests/models/test_models.py +60 -0
  244. google/adk/tests/unittests/sessions/__init__.py +14 -0
  245. google/adk/tests/unittests/sessions/test_session_service.py +227 -0
  246. google/adk/tests/unittests/sessions/test_vertex_ai_session_service.py +246 -0
  247. google/adk/tests/unittests/streaming/__init__.py +14 -0
  248. google/adk/tests/unittests/streaming/test_streaming.py +50 -0
  249. google/adk/tests/unittests/tools/__init__.py +14 -0
  250. google/adk/tests/unittests/tools/apihub_tool/clients/test_apihub_client.py +499 -0
  251. google/adk/tests/unittests/tools/apihub_tool/test_apihub_toolset.py +204 -0
  252. google/adk/tests/unittests/tools/application_integration_tool/clients/test_connections_client.py +600 -0
  253. google/adk/tests/unittests/tools/application_integration_tool/clients/test_integration_client.py +630 -0
  254. google/adk/tests/unittests/tools/application_integration_tool/test_application_integration_toolset.py +345 -0
  255. google/adk/tests/unittests/tools/google_api_tool/__init__.py +13 -0
  256. google/adk/tests/unittests/tools/google_api_tool/test_googleapi_to_openapi_converter.py +657 -0
  257. google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_auto_auth_credential_exchanger.py +145 -0
  258. google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_base_auth_credential_exchanger.py +68 -0
  259. google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_oauth2_exchanger.py +153 -0
  260. google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_service_account_exchanger.py +196 -0
  261. google/adk/tests/unittests/tools/openapi_tool/auth/test_auth_helper.py +573 -0
  262. google/adk/tests/unittests/tools/openapi_tool/common/test_common.py +436 -0
  263. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test.yaml +1367 -0
  264. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_openapi_spec_parser.py +628 -0
  265. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_openapi_toolset.py +139 -0
  266. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_operation_parser.py +406 -0
  267. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_rest_api_tool.py +966 -0
  268. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_tool_auth_handler.py +201 -0
  269. google/adk/tests/unittests/tools/retrieval/__init__.py +14 -0
  270. google/adk/tests/unittests/tools/retrieval/test_vertex_ai_rag_retrieval.py +147 -0
  271. google/adk/tests/unittests/tools/test_agent_tool.py +167 -0
  272. google/adk/tests/unittests/tools/test_base_tool.py +141 -0
  273. google/adk/tests/unittests/tools/test_build_function_declaration.py +277 -0
  274. google/adk/tests/unittests/utils.py +304 -0
  275. google/adk/tools/__init__.py +51 -0
  276. google/adk/tools/_automatic_function_calling_util.py +346 -0
  277. google/adk/tools/agent_tool.py +176 -0
  278. google/adk/tools/apihub_tool/__init__.py +19 -0
  279. google/adk/tools/apihub_tool/apihub_toolset.py +209 -0
  280. google/adk/tools/apihub_tool/clients/__init__.py +13 -0
  281. google/adk/tools/apihub_tool/clients/apihub_client.py +332 -0
  282. google/adk/tools/apihub_tool/clients/secret_client.py +115 -0
  283. google/adk/tools/application_integration_tool/__init__.py +19 -0
  284. google/adk/tools/application_integration_tool/application_integration_toolset.py +230 -0
  285. google/adk/tools/application_integration_tool/clients/connections_client.py +903 -0
  286. google/adk/tools/application_integration_tool/clients/integration_client.py +253 -0
  287. google/adk/tools/base_tool.py +144 -0
  288. google/adk/tools/built_in_code_execution_tool.py +59 -0
  289. google/adk/tools/crewai_tool.py +72 -0
  290. google/adk/tools/example_tool.py +62 -0
  291. google/adk/tools/exit_loop_tool.py +23 -0
  292. google/adk/tools/function_parameter_parse_util.py +307 -0
  293. google/adk/tools/function_tool.py +87 -0
  294. google/adk/tools/get_user_choice_tool.py +28 -0
  295. google/adk/tools/google_api_tool/__init__.py +14 -0
  296. google/adk/tools/google_api_tool/google_api_tool.py +59 -0
  297. google/adk/tools/google_api_tool/google_api_tool_set.py +107 -0
  298. google/adk/tools/google_api_tool/google_api_tool_sets.py +55 -0
  299. google/adk/tools/google_api_tool/googleapi_to_openapi_converter.py +521 -0
  300. google/adk/tools/google_search_tool.py +68 -0
  301. google/adk/tools/langchain_tool.py +86 -0
  302. google/adk/tools/load_artifacts_tool.py +113 -0
  303. google/adk/tools/load_memory_tool.py +58 -0
  304. google/adk/tools/load_web_page.py +41 -0
  305. google/adk/tools/long_running_tool.py +39 -0
  306. google/adk/tools/mcp_tool/__init__.py +42 -0
  307. google/adk/tools/mcp_tool/conversion_utils.py +161 -0
  308. google/adk/tools/mcp_tool/mcp_tool.py +113 -0
  309. google/adk/tools/mcp_tool/mcp_toolset.py +272 -0
  310. google/adk/tools/openapi_tool/__init__.py +21 -0
  311. google/adk/tools/openapi_tool/auth/__init__.py +19 -0
  312. google/adk/tools/openapi_tool/auth/auth_helpers.py +498 -0
  313. google/adk/tools/openapi_tool/auth/credential_exchangers/__init__.py +25 -0
  314. google/adk/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.py +105 -0
  315. google/adk/tools/openapi_tool/auth/credential_exchangers/base_credential_exchanger.py +55 -0
  316. google/adk/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.py +117 -0
  317. google/adk/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.py +97 -0
  318. google/adk/tools/openapi_tool/common/__init__.py +19 -0
  319. google/adk/tools/openapi_tool/common/common.py +300 -0
  320. google/adk/tools/openapi_tool/openapi_spec_parser/__init__.py +32 -0
  321. google/adk/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.py +231 -0
  322. google/adk/tools/openapi_tool/openapi_spec_parser/openapi_toolset.py +144 -0
  323. google/adk/tools/openapi_tool/openapi_spec_parser/operation_parser.py +260 -0
  324. google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py +496 -0
  325. google/adk/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.py +268 -0
  326. google/adk/tools/preload_memory_tool.py +72 -0
  327. google/adk/tools/retrieval/__init__.py +36 -0
  328. google/adk/tools/retrieval/base_retrieval_tool.py +37 -0
  329. google/adk/tools/retrieval/files_retrieval.py +33 -0
  330. google/adk/tools/retrieval/llama_index_retrieval.py +41 -0
  331. google/adk/tools/retrieval/vertex_ai_rag_retrieval.py +107 -0
  332. google/adk/tools/tool_context.py +90 -0
  333. google/adk/tools/toolbox_tool.py +46 -0
  334. google/adk/tools/transfer_to_agent_tool.py +21 -0
  335. google/adk/tools/vertex_ai_search_tool.py +96 -0
  336. google/adk/version.py +16 -0
  337. google_adk-0.0.3.dist-info/METADATA +73 -0
  338. google_adk-0.0.3.dist-info/RECORD +340 -0
  339. {google_adk-0.0.1.dist-info → google_adk-0.0.3.dist-info}/WHEEL +1 -2
  340. google_adk-0.0.3.dist-info/entry_points.txt +3 -0
  341. agent_kit/__init__.py +0 -0
  342. google_adk-0.0.1.dist-info/LICENSE.txt +0 -170
  343. google_adk-0.0.1.dist-info/METADATA +0 -15
  344. google_adk-0.0.1.dist-info/RECORD +0 -6
  345. google_adk-0.0.1.dist-info/top_level.txt +0 -1
@@ -0,0 +1,277 @@
1
+ # Copyright 2025 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from typing import Dict
16
+ from typing import List
17
+
18
+ from google.adk.tools import _automatic_function_calling_util
19
+ from google.adk.tools.agent_tool import ToolContext
20
+ from google.adk.tools.langchain_tool import LangchainTool
21
+ # TODO: crewai requires python 3.10 as minimum
22
+ # from crewai_tools import FileReadTool
23
+ from langchain_community.tools import ShellTool
24
+ from pydantic import BaseModel
25
+ import pytest
26
+
27
+
28
+ def test_unsupported_variant():
29
+ def simple_function(input_str: str) -> str:
30
+ return {'result': input_str}
31
+
32
+ with pytest.raises(ValueError):
33
+ _automatic_function_calling_util.build_function_declaration(
34
+ func=simple_function, variant='Unsupported'
35
+ )
36
+
37
+
38
+ def test_string_input():
39
+ def simple_function(input_str: str) -> str:
40
+ return {'result': input_str}
41
+
42
+ function_decl = _automatic_function_calling_util.build_function_declaration(
43
+ func=simple_function
44
+ )
45
+
46
+ assert function_decl.name == 'simple_function'
47
+ assert function_decl.parameters.type == 'OBJECT'
48
+ assert function_decl.parameters.properties['input_str'].type == 'STRING'
49
+
50
+
51
+ def test_int_input():
52
+ def simple_function(input_str: int) -> str:
53
+ return {'result': input_str}
54
+
55
+ function_decl = _automatic_function_calling_util.build_function_declaration(
56
+ func=simple_function
57
+ )
58
+
59
+ assert function_decl.name == 'simple_function'
60
+ assert function_decl.parameters.type == 'OBJECT'
61
+ assert function_decl.parameters.properties['input_str'].type == 'INTEGER'
62
+
63
+
64
+ def test_float_input():
65
+ def simple_function(input_str: float) -> str:
66
+ return {'result': input_str}
67
+
68
+ function_decl = _automatic_function_calling_util.build_function_declaration(
69
+ func=simple_function
70
+ )
71
+
72
+ assert function_decl.name == 'simple_function'
73
+ assert function_decl.parameters.type == 'OBJECT'
74
+ assert function_decl.parameters.properties['input_str'].type == 'NUMBER'
75
+
76
+
77
+ def test_bool_input():
78
+ def simple_function(input_str: bool) -> str:
79
+ return {'result': input_str}
80
+
81
+ function_decl = _automatic_function_calling_util.build_function_declaration(
82
+ func=simple_function
83
+ )
84
+
85
+ assert function_decl.name == 'simple_function'
86
+ assert function_decl.parameters.type == 'OBJECT'
87
+ assert function_decl.parameters.properties['input_str'].type == 'BOOLEAN'
88
+
89
+
90
+ def test_array_input():
91
+ def simple_function(input_str: List[str]) -> str:
92
+ return {'result': input_str}
93
+
94
+ function_decl = _automatic_function_calling_util.build_function_declaration(
95
+ func=simple_function
96
+ )
97
+
98
+ assert function_decl.name == 'simple_function'
99
+ assert function_decl.parameters.type == 'OBJECT'
100
+ assert function_decl.parameters.properties['input_str'].type == 'ARRAY'
101
+
102
+
103
+ def test_dict_input():
104
+ def simple_function(input_str: Dict[str, str]) -> str:
105
+ return {'result': input_str}
106
+
107
+ function_decl = _automatic_function_calling_util.build_function_declaration(
108
+ func=simple_function
109
+ )
110
+
111
+ assert function_decl.name == 'simple_function'
112
+ assert function_decl.parameters.type == 'OBJECT'
113
+ assert function_decl.parameters.properties['input_str'].type == 'OBJECT'
114
+
115
+
116
+ def test_basemodel_input():
117
+ class CustomInput(BaseModel):
118
+ input_str: str
119
+
120
+ def simple_function(input: CustomInput) -> str:
121
+ return {'result': input}
122
+
123
+ function_decl = _automatic_function_calling_util.build_function_declaration(
124
+ func=simple_function
125
+ )
126
+
127
+ assert function_decl.name == 'simple_function'
128
+ assert function_decl.parameters.type == 'OBJECT'
129
+ assert function_decl.parameters.properties['input'].type == 'OBJECT'
130
+ assert (
131
+ function_decl.parameters.properties['input'].properties['input_str'].type
132
+ == 'STRING'
133
+ )
134
+
135
+
136
+ def test_toolcontext_ignored():
137
+ def simple_function(input_str: str, tool_context: ToolContext) -> str:
138
+ return {'result': input_str}
139
+
140
+ function_decl = _automatic_function_calling_util.build_function_declaration(
141
+ func=simple_function, ignore_params=['tool_context']
142
+ )
143
+
144
+ assert function_decl.name == 'simple_function'
145
+ assert function_decl.parameters.type == 'OBJECT'
146
+ assert function_decl.parameters.properties['input_str'].type == 'STRING'
147
+ assert 'tool_context' not in function_decl.parameters.properties
148
+
149
+
150
+ def test_basemodel():
151
+ class SimpleFunction(BaseModel):
152
+ input_str: str
153
+ custom_input: int
154
+
155
+ function_decl = _automatic_function_calling_util.build_function_declaration(
156
+ func=SimpleFunction, ignore_params=['custom_input']
157
+ )
158
+
159
+ assert function_decl.name == 'SimpleFunction'
160
+ assert function_decl.parameters.type == 'OBJECT'
161
+ assert function_decl.parameters.properties['input_str'].type == 'STRING'
162
+ assert 'custom_input' not in function_decl.parameters.properties
163
+
164
+
165
+ def test_nested_basemodel_input():
166
+ class ChildInput(BaseModel):
167
+ input_str: str
168
+
169
+ class CustomInput(BaseModel):
170
+ child: ChildInput
171
+
172
+ def simple_function(input: CustomInput) -> str:
173
+ return {'result': input}
174
+
175
+ function_decl = _automatic_function_calling_util.build_function_declaration(
176
+ func=simple_function
177
+ )
178
+
179
+ assert function_decl.name == 'simple_function'
180
+ assert function_decl.parameters.type == 'OBJECT'
181
+ assert function_decl.parameters.properties['input'].type == 'OBJECT'
182
+ assert (
183
+ function_decl.parameters.properties['input'].properties['child'].type
184
+ == 'OBJECT'
185
+ )
186
+ assert (
187
+ function_decl.parameters.properties['input']
188
+ .properties['child']
189
+ .properties['input_str']
190
+ .type
191
+ == 'STRING'
192
+ )
193
+
194
+
195
+ def test_basemodel_with_nested_basemodel():
196
+ class ChildInput(BaseModel):
197
+ input_str: str
198
+
199
+ class CustomInput(BaseModel):
200
+ child: ChildInput
201
+
202
+ function_decl = _automatic_function_calling_util.build_function_declaration(
203
+ func=CustomInput, ignore_params=['custom_input']
204
+ )
205
+
206
+ assert function_decl.name == 'CustomInput'
207
+ assert function_decl.parameters.type == 'OBJECT'
208
+ assert function_decl.parameters.properties['child'].type == 'OBJECT'
209
+ assert (
210
+ function_decl.parameters.properties['child'].properties['input_str'].type
211
+ == 'STRING'
212
+ )
213
+ assert 'custom_input' not in function_decl.parameters.properties
214
+
215
+
216
+ def test_list():
217
+ def simple_function(
218
+ input_str: List[str], input_dir: List[Dict[str, str]]
219
+ ) -> str:
220
+ return {'result': input_str}
221
+
222
+ function_decl = _automatic_function_calling_util.build_function_declaration(
223
+ func=simple_function
224
+ )
225
+
226
+ assert function_decl.name == 'simple_function'
227
+ assert function_decl.parameters.type == 'OBJECT'
228
+ assert function_decl.parameters.properties['input_str'].type == 'ARRAY'
229
+ assert function_decl.parameters.properties['input_str'].items.type == 'STRING'
230
+ assert function_decl.parameters.properties['input_dir'].type == 'ARRAY'
231
+ assert function_decl.parameters.properties['input_dir'].items.type == 'OBJECT'
232
+
233
+
234
+ def test_basemodel_list():
235
+ class ChildInput(BaseModel):
236
+ input_str: str
237
+
238
+ class CustomInput(BaseModel):
239
+ child: ChildInput
240
+
241
+ def simple_function(input_str: List[CustomInput]) -> str:
242
+ return {'result': input_str}
243
+
244
+ function_decl = _automatic_function_calling_util.build_function_declaration(
245
+ func=simple_function
246
+ )
247
+
248
+ assert function_decl.name == 'simple_function'
249
+ assert function_decl.parameters.type == 'OBJECT'
250
+ assert function_decl.parameters.properties['input_str'].type == 'ARRAY'
251
+ assert function_decl.parameters.properties['input_str'].items.type == 'OBJECT'
252
+ assert (
253
+ function_decl.parameters.properties['input_str']
254
+ .items.properties['child']
255
+ .type
256
+ == 'OBJECT'
257
+ )
258
+ assert (
259
+ function_decl.parameters.properties['input_str']
260
+ .items.properties['child']
261
+ .properties['input_str']
262
+ .type
263
+ == 'STRING'
264
+ )
265
+
266
+
267
+ # TODO: comment out this test for now as crewai requires python 3.10 as minimum
268
+ # def test_crewai_tool():
269
+ # docs_tool = CrewaiTool(
270
+ # name='direcotry_read_tool',
271
+ # description='use this to find files for you.',
272
+ # tool=FileReadTool(),
273
+ # )
274
+ # function_decl = docs_tool.get_declaration()
275
+ # assert function_decl.name == 'direcotry_read_tool'
276
+ # assert function_decl.parameters.type == 'OBJECT'
277
+ # assert function_decl.parameters.properties['file_path'].type == 'STRING'
@@ -0,0 +1,304 @@
1
+ # Copyright 2025 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ import asyncio
16
+ import contextlib
17
+ from typing import AsyncGenerator
18
+ from typing import Generator
19
+ from typing import Union
20
+
21
+ from google.adk.agents.invocation_context import InvocationContext
22
+ from google.adk.agents.live_request_queue import LiveRequestQueue
23
+ from google.adk.agents.llm_agent import Agent
24
+ from google.adk.agents.llm_agent import LlmAgent
25
+ from google.adk.agents.run_config import RunConfig
26
+ from google.adk.artifacts import InMemoryArtifactService
27
+ from google.adk.events.event import Event
28
+ from google.adk.memory.in_memory_memory_service import InMemoryMemoryService
29
+ from google.adk.models.base_llm import BaseLlm
30
+ from google.adk.models.base_llm_connection import BaseLlmConnection
31
+ from google.adk.models.llm_request import LlmRequest
32
+ from google.adk.models.llm_response import LlmResponse
33
+ from google.adk.runners import InMemoryRunner as AfInMemoryRunner
34
+ from google.adk.runners import Runner
35
+ from google.adk.sessions.in_memory_session_service import InMemorySessionService
36
+ from google.adk.sessions.session import Session
37
+ from google.genai import types
38
+ from google.genai.types import Part
39
+ from typing_extensions import override
40
+
41
+
42
+ class UserContent(types.Content):
43
+
44
+ def __init__(self, text_or_part: str):
45
+ parts = [
46
+ types.Part.from_text(text=text_or_part)
47
+ if isinstance(text_or_part, str)
48
+ else text_or_part
49
+ ]
50
+ super().__init__(role='user', parts=parts)
51
+
52
+
53
+ class ModelContent(types.Content):
54
+
55
+ def __init__(self, parts: list[types.Part]):
56
+ super().__init__(role='model', parts=parts)
57
+
58
+
59
+ def create_invocation_context(agent: Agent, user_content: str = ''):
60
+ invocation_id = 'test_id'
61
+ artifact_service = InMemoryArtifactService()
62
+ session_service = InMemorySessionService()
63
+ memory_service = InMemoryMemoryService()
64
+ invocation_context = InvocationContext(
65
+ artifact_service=artifact_service,
66
+ session_service=session_service,
67
+ memory_service=memory_service,
68
+ invocation_id=invocation_id,
69
+ agent=agent,
70
+ session=session_service.create_session(
71
+ app_name='test_app', user_id='test_user'
72
+ ),
73
+ user_content=types.Content(
74
+ role='user', parts=[types.Part.from_text(text=user_content)]
75
+ ),
76
+ run_config=RunConfig(),
77
+ )
78
+ if user_content:
79
+ append_user_content(
80
+ invocation_context, [types.Part.from_text(text=user_content)]
81
+ )
82
+ return invocation_context
83
+
84
+
85
+ def append_user_content(
86
+ invocation_context: InvocationContext, parts: list[types.Part]
87
+ ) -> Event:
88
+ session = invocation_context.session
89
+ event = Event(
90
+ invocation_id=invocation_context.invocation_id,
91
+ author='user',
92
+ content=types.Content(role='user', parts=parts),
93
+ )
94
+ session.events.append(event)
95
+ return event
96
+
97
+
98
+ # Extracts the contents from the events and transform them into a list of
99
+ # (author, simplified_content) tuples.
100
+ def simplify_events(events: list[Event]) -> list[(str, types.Part)]:
101
+ return [(event.author, simplify_content(event.content)) for event in events]
102
+
103
+
104
+ # Simplifies the contents into a list of (author, simplified_content) tuples.
105
+ def simplify_contents(contents: list[types.Content]) -> list[(str, types.Part)]:
106
+ return [(content.role, simplify_content(content)) for content in contents]
107
+
108
+
109
+ # Simplifies the content so it's easier to assert.
110
+ # - If there is only one part, return part
111
+ # - If the only part is pure text, return stripped_text
112
+ # - If there are multiple parts, return parts
113
+ # - remove function_call_id if it exists
114
+ def simplify_content(
115
+ content: types.Content,
116
+ ) -> Union[str, types.Part, list[types.Part]]:
117
+ for part in content.parts:
118
+ if part.function_call and part.function_call.id:
119
+ part.function_call.id = None
120
+ if part.function_response and part.function_response.id:
121
+ part.function_response.id = None
122
+ if len(content.parts) == 1:
123
+ if content.parts[0].text:
124
+ return content.parts[0].text.strip()
125
+ else:
126
+ return content.parts[0]
127
+ return content.parts
128
+
129
+
130
+ def get_user_content(message: types.ContentUnion) -> types.Content:
131
+ return message if isinstance(message, types.Content) else UserContent(message)
132
+
133
+
134
+ class TestInMemoryRunner(AfInMemoryRunner):
135
+ """InMemoryRunner that is tailored for tests, features async run method.
136
+
137
+ app_name is hardcoded as InMemoryRunner in the parent class.
138
+ """
139
+
140
+ async def run_async_with_new_session(
141
+ self, new_message: types.ContentUnion
142
+ ) -> list[Event]:
143
+
144
+ session = self.session_service.create_session(
145
+ app_name='InMemoryRunner', user_id='test_user'
146
+ )
147
+ collected_events = []
148
+
149
+ async for event in self.run_async(
150
+ user_id=session.user_id,
151
+ session_id=session.id,
152
+ new_message=get_user_content(new_message),
153
+ ):
154
+ collected_events.append(event)
155
+
156
+ return collected_events
157
+
158
+
159
+ class InMemoryRunner:
160
+ """InMemoryRunner that is tailored for tests."""
161
+
162
+ def __init__(
163
+ self,
164
+ root_agent: Union[Agent, LlmAgent],
165
+ response_modalities: list[str] = None,
166
+ ):
167
+ self.root_agent = root_agent
168
+ self.runner = Runner(
169
+ app_name='test_app',
170
+ agent=root_agent,
171
+ artifact_service=InMemoryArtifactService(),
172
+ session_service=InMemorySessionService(),
173
+ memory_service=InMemoryMemoryService(),
174
+ )
175
+ self.session_id = self.runner.session_service.create_session(
176
+ app_name='test_app', user_id='test_user'
177
+ ).id
178
+
179
+ @property
180
+ def session(self) -> Session:
181
+ return self.runner.session_service.get_session(
182
+ app_name='test_app', user_id='test_user', session_id=self.session_id
183
+ )
184
+
185
+ def run(self, new_message: types.ContentUnion) -> list[Event]:
186
+ return list(
187
+ self.runner.run(
188
+ user_id=self.session.user_id,
189
+ session_id=self.session.id,
190
+ new_message=get_user_content(new_message),
191
+ )
192
+ )
193
+
194
+ def run_live(self, live_request_queue: LiveRequestQueue) -> list[Event]:
195
+ collected_responses = []
196
+
197
+ async def consume_responses():
198
+ run_res = self.runner.run_live(
199
+ session=self.session,
200
+ live_request_queue=live_request_queue,
201
+ )
202
+
203
+ async for response in run_res:
204
+ collected_responses.append(response)
205
+ # When we have enough response, we should return
206
+ if len(collected_responses) >= 1:
207
+ return
208
+
209
+ try:
210
+ asyncio.run(consume_responses())
211
+ except asyncio.TimeoutError:
212
+ print('Returning any partial results collected so far.')
213
+
214
+ return collected_responses
215
+
216
+
217
+ class MockModel(BaseLlm):
218
+ model: str = 'mock'
219
+
220
+ requests: list[LlmRequest] = []
221
+ responses: list[LlmResponse]
222
+ response_index: int = -1
223
+
224
+ @classmethod
225
+ def create(
226
+ cls,
227
+ responses: Union[
228
+ list[types.Part], list[LlmResponse], list[str], list[list[types.Part]]
229
+ ],
230
+ ):
231
+ if not responses:
232
+ return cls(responses=[])
233
+ elif isinstance(responses[0], LlmResponse):
234
+ # reponses is list[LlmResponse]
235
+ return cls(responses=responses)
236
+ else:
237
+ responses = [
238
+ LlmResponse(content=ModelContent(item))
239
+ if isinstance(item, list) and isinstance(item[0], types.Part)
240
+ # responses is list[list[Part]]
241
+ else LlmResponse(
242
+ content=ModelContent(
243
+ # responses is list[str] or list[Part]
244
+ [Part(text=item) if isinstance(item, str) else item]
245
+ )
246
+ )
247
+ for item in responses
248
+ if item
249
+ ]
250
+
251
+ return cls(responses=responses)
252
+
253
+ @staticmethod
254
+ def supported_models() -> list[str]:
255
+ return ['mock']
256
+
257
+ def generate_content(
258
+ self, llm_request: LlmRequest, stream: bool = False
259
+ ) -> Generator[LlmResponse, None, None]:
260
+ # Increasement of the index has to happen before the yield.
261
+ self.response_index += 1
262
+ self.requests.append(llm_request)
263
+ # yield LlmResponse(content=self.responses[self.response_index])
264
+ yield self.responses[self.response_index]
265
+
266
+ @override
267
+ async def generate_content_async(
268
+ self, llm_request: LlmRequest, stream: bool = False
269
+ ) -> AsyncGenerator[LlmResponse, None]:
270
+ # Increasement of the index has to happen before the yield.
271
+ self.response_index += 1
272
+ self.requests.append(llm_request)
273
+ yield self.responses[self.response_index]
274
+
275
+ @contextlib.asynccontextmanager
276
+ async def connect(self, llm_request: LlmRequest) -> BaseLlmConnection:
277
+ """Creates a live connection to the LLM."""
278
+ yield MockLlmConnection(self.responses)
279
+
280
+
281
+ class MockLlmConnection(BaseLlmConnection):
282
+
283
+ def __init__(self, llm_responses: list[LlmResponse]):
284
+ self.llm_responses = llm_responses
285
+
286
+ async def send_history(self, history: list[types.Content]):
287
+ pass
288
+
289
+ async def send_content(self, content: types.Content):
290
+ pass
291
+
292
+ async def send(self, data):
293
+ pass
294
+
295
+ async def send_realtime(self, blob: types.Blob):
296
+ pass
297
+
298
+ async def receive(self) -> AsyncGenerator[LlmResponse, None]:
299
+ """Yield each of the pre-defined LlmResponses."""
300
+ for response in self.llm_responses:
301
+ yield response
302
+
303
+ async def close(self):
304
+ pass
@@ -0,0 +1,51 @@
1
+ # Copyright 2025 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # pylint: disable=g-bad-import-order
15
+ from .base_tool import BaseTool
16
+
17
+ from ..auth.auth_tool import AuthToolArguments
18
+ from .apihub_tool.apihub_toolset import APIHubToolset
19
+ from .built_in_code_execution_tool import built_in_code_execution
20
+ from .google_search_tool import google_search
21
+ from .vertex_ai_search_tool import VertexAiSearchTool
22
+ from .example_tool import ExampleTool
23
+ from .exit_loop_tool import exit_loop
24
+ from .function_tool import FunctionTool
25
+ from .get_user_choice_tool import get_user_choice_tool as get_user_choice
26
+ from .load_artifacts_tool import load_artifacts_tool as load_artifacts
27
+ from .load_memory_tool import load_memory_tool as load_memory
28
+ from .long_running_tool import LongRunningFunctionTool
29
+ from .preload_memory_tool import preload_memory_tool as preload_memory
30
+ from .tool_context import ToolContext
31
+ from .transfer_to_agent_tool import transfer_to_agent
32
+
33
+
34
+ __all__ = [
35
+ 'APIHubToolset',
36
+ 'AuthToolArguments',
37
+ 'BaseTool',
38
+ 'built_in_code_execution',
39
+ 'google_search',
40
+ 'VertexAiSearchTool',
41
+ 'ExampleTool',
42
+ 'exit_loop',
43
+ 'FunctionTool',
44
+ 'get_user_choice',
45
+ 'load_artifacts',
46
+ 'load_memory',
47
+ 'LongRunningFunctionTool',
48
+ 'preload_memory',
49
+ 'ToolContext',
50
+ 'transfer_to_agent',
51
+ ]