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
Binary file
google/adk/__init__.py ADDED
@@ -0,0 +1,20 @@
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 . import version
16
+ from .agents.llm_agent import Agent
17
+ from .runners import Runner
18
+
19
+ __version__ = version.__version__
20
+ __all__ = ["Agent", "Runner"]
@@ -0,0 +1,32 @@
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 .base_agent import BaseAgent
16
+ from .live_request_queue import LiveRequest
17
+ from .live_request_queue import LiveRequestQueue
18
+ from .llm_agent import Agent
19
+ from .llm_agent import LlmAgent
20
+ from .loop_agent import LoopAgent
21
+ from .parallel_agent import ParallelAgent
22
+ from .run_config import RunConfig
23
+ from .sequential_agent import SequentialAgent
24
+
25
+ __all__ = [
26
+ 'Agent',
27
+ 'BaseAgent',
28
+ 'LlmAgent',
29
+ 'LoopAgent',
30
+ 'ParallelAgent',
31
+ 'SequentialAgent',
32
+ ]
@@ -0,0 +1,38 @@
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 __future__ import annotations
16
+
17
+ import asyncio
18
+ from typing import Optional
19
+
20
+ from pydantic import BaseModel
21
+ from pydantic import ConfigDict
22
+
23
+ from .live_request_queue import LiveRequestQueue
24
+
25
+
26
+ class ActiveStreamingTool(BaseModel):
27
+ """Manages streaming tool related resources during invocation."""
28
+
29
+ model_config = ConfigDict(
30
+ arbitrary_types_allowed=True,
31
+ extra='forbid',
32
+ )
33
+
34
+ task: Optional[asyncio.Task] = None
35
+ """The active task of this streaming tool."""
36
+
37
+ stream: Optional[LiveRequestQueue] = None
38
+ """The active (input) streams of this streaming tool."""
@@ -0,0 +1,345 @@
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 __future__ import annotations
16
+
17
+ from typing import Any
18
+ from typing import AsyncGenerator
19
+ from typing import Callable
20
+ from typing import final
21
+ from typing import Optional
22
+ from typing import TYPE_CHECKING
23
+
24
+ from google.genai import types
25
+ from opentelemetry import trace
26
+ from pydantic import BaseModel
27
+ from pydantic import ConfigDict
28
+ from pydantic import Field
29
+ from pydantic import field_validator
30
+ from typing_extensions import override
31
+
32
+ from ..events.event import Event
33
+ from .callback_context import CallbackContext
34
+
35
+ if TYPE_CHECKING:
36
+ from .invocation_context import InvocationContext
37
+
38
+ tracer = trace.get_tracer('gcp.vertex.agent')
39
+
40
+ BeforeAgentCallback = Callable[[CallbackContext], Optional[types.Content]]
41
+ """Callback signature that is invoked before the agent run.
42
+
43
+ Args:
44
+ callback_context: MUST be named 'callback_context' (enforced).
45
+
46
+ Returns:
47
+ The content to return to the user. When set, the agent run will skipped and
48
+ the provided content will be returned to user.
49
+ """
50
+
51
+ AfterAgentCallback = Callable[[CallbackContext], Optional[types.Content]]
52
+ """Callback signature that is invoked after the agent run.
53
+
54
+ Args:
55
+ callback_context: MUST be named 'callback_context' (enforced).
56
+
57
+ Returns:
58
+ The content to return to the user. When set, the agent run will skipped and
59
+ the provided content will be appended to event history as agent response.
60
+ """
61
+
62
+
63
+ class BaseAgent(BaseModel):
64
+ """Base class for all agents in Agent Development Kit."""
65
+
66
+ model_config = ConfigDict(
67
+ arbitrary_types_allowed=True,
68
+ extra='forbid',
69
+ )
70
+
71
+ name: str
72
+ """The agent's name.
73
+
74
+ Agent name must be a Python identifier and unique within the agent tree.
75
+ Agent name cannot be "user", since it's reserved for end-user's input.
76
+ """
77
+
78
+ description: str = ''
79
+ """Description about the agent's capability.
80
+
81
+ The model uses this to determine whether to delegate control to the agent.
82
+ One-line description is enough and preferred.
83
+ """
84
+
85
+ parent_agent: Optional[BaseAgent] = Field(default=None, init=False)
86
+ """The parent agent of this agent.
87
+
88
+ Note that an agent can ONLY be added as sub-agent once.
89
+
90
+ If you want to add one agent twice as sub-agent, consider to create two agent
91
+ instances with identical config, but with different name and add them to the
92
+ agent tree.
93
+ """
94
+ sub_agents: list[BaseAgent] = Field(default_factory=list)
95
+ """The sub-agents of this agent."""
96
+
97
+ before_agent_callback: Optional[BeforeAgentCallback] = None
98
+ """Callback signature that is invoked before the agent run.
99
+
100
+ Args:
101
+ callback_context: MUST be named 'callback_context' (enforced).
102
+
103
+ Returns:
104
+ The content to return to the user. When set, the agent run will skipped and
105
+ the provided content will be returned to user.
106
+ """
107
+ after_agent_callback: Optional[AfterAgentCallback] = None
108
+ """Callback signature that is invoked after the agent run.
109
+
110
+ Args:
111
+ callback_context: MUST be named 'callback_context' (enforced).
112
+
113
+ Returns:
114
+ The content to return to the user. When set, the agent run will skipped and
115
+ the provided content will be appended to event history as agent response.
116
+ """
117
+
118
+ @final
119
+ async def run_async(
120
+ self,
121
+ parent_context: InvocationContext,
122
+ ) -> AsyncGenerator[Event, None]:
123
+ """Entry method to run an agent via text-based conversaction.
124
+
125
+ Args:
126
+ parent_context: InvocationContext, the invocation context of the parent
127
+ agent.
128
+
129
+ Yields:
130
+ Event: the events generated by the agent.
131
+ """
132
+
133
+ with tracer.start_as_current_span(f'agent_run [{self.name}]'):
134
+ ctx = self._create_invocation_context(parent_context)
135
+
136
+ if event := self.__handle_before_agent_callback(ctx):
137
+ yield event
138
+ if ctx.end_invocation:
139
+ return
140
+
141
+ async for event in self._run_async_impl(ctx):
142
+ yield event
143
+
144
+ if ctx.end_invocation:
145
+ return
146
+
147
+ if event := self.__handle_after_agent_callback(ctx):
148
+ yield event
149
+
150
+ @final
151
+ async def run_live(
152
+ self,
153
+ parent_context: InvocationContext,
154
+ ) -> AsyncGenerator[Event, None]:
155
+ """Entry method to run an agent via video/audio-based conversaction.
156
+
157
+ Args:
158
+ parent_context: InvocationContext, the invocation context of the parent
159
+ agent.
160
+
161
+ Yields:
162
+ Event: the events generated by the agent.
163
+ """
164
+ with tracer.start_as_current_span(f'agent_run [{self.name}]'):
165
+ ctx = self._create_invocation_context(parent_context)
166
+ # TODO(hangfei): support before/after_agent_callback
167
+
168
+ async for event in self._run_live_impl(ctx):
169
+ yield event
170
+
171
+ async def _run_async_impl(
172
+ self, ctx: InvocationContext
173
+ ) -> AsyncGenerator[Event, None]:
174
+ """Core logic to run this agent via text-based conversaction.
175
+
176
+ Args:
177
+ ctx: InvocationContext, the invocation context for this agent.
178
+
179
+ Yields:
180
+ Event: the events generated by the agent.
181
+ """
182
+ raise NotImplementedError(
183
+ f'_run_async_impl for {type(self)} is not implemented.'
184
+ )
185
+ yield # AsyncGenerator requires having at least one yield statement
186
+
187
+ async def _run_live_impl(
188
+ self, ctx: InvocationContext
189
+ ) -> AsyncGenerator[Event, None]:
190
+ """Core logic to run this agent via video/audio-based conversaction.
191
+
192
+ Args:
193
+ ctx: InvocationContext, the invocation context for this agent.
194
+
195
+ Yields:
196
+ Event: the events generated by the agent.
197
+ """
198
+ raise NotImplementedError(
199
+ f'_run_live_impl for {type(self)} is not implemented.'
200
+ )
201
+ yield # AsyncGenerator requires having at least one yield statement
202
+
203
+ @property
204
+ def root_agent(self) -> BaseAgent:
205
+ """Gets the root agent of this agent."""
206
+ root_agent = self
207
+ while root_agent.parent_agent is not None:
208
+ root_agent = root_agent.parent_agent
209
+ return root_agent
210
+
211
+ def find_agent(self, name: str) -> Optional[BaseAgent]:
212
+ """Finds the agent with the given name in this agent and its descendants.
213
+
214
+ Args:
215
+ name: The name of the agent to find.
216
+
217
+ Returns:
218
+ The agent with the matching name, or None if no such agent is found.
219
+ """
220
+ if self.name == name:
221
+ return self
222
+ return self.find_sub_agent(name)
223
+
224
+ def find_sub_agent(self, name: str) -> Optional[BaseAgent]:
225
+ """Finds the agent with the given name in this agent's descendants.
226
+
227
+ Args:
228
+ name: The name of the agent to find.
229
+
230
+ Returns:
231
+ The agent with the matching name, or None if no such agent is found.
232
+ """
233
+ for sub_agent in self.sub_agents:
234
+ if result := sub_agent.find_agent(name):
235
+ return result
236
+ return None
237
+
238
+ def _create_invocation_context(
239
+ self, parent_context: InvocationContext
240
+ ) -> InvocationContext:
241
+ """Creates a new invocation context for this agent."""
242
+ invocation_context = parent_context.model_copy(update={'agent': self})
243
+ if parent_context.branch:
244
+ invocation_context.branch = f'{parent_context.branch}.{self.name}'
245
+ return invocation_context
246
+
247
+ def __handle_before_agent_callback(
248
+ self, ctx: InvocationContext
249
+ ) -> Optional[Event]:
250
+ """Runs the before_agent_callback if it exists.
251
+
252
+ Returns:
253
+ Optional[Event]: an event if callback provides content or changed state.
254
+ """
255
+ ret_event = None
256
+
257
+ if not isinstance(self.before_agent_callback, Callable):
258
+ return ret_event
259
+
260
+ callback_context = CallbackContext(ctx)
261
+ before_agent_callback_content = self.before_agent_callback(
262
+ callback_context=callback_context
263
+ )
264
+
265
+ if before_agent_callback_content:
266
+ ret_event = Event(
267
+ invocation_id=ctx.invocation_id,
268
+ author=self.name,
269
+ branch=ctx.branch,
270
+ content=before_agent_callback_content,
271
+ actions=callback_context._event_actions,
272
+ )
273
+ ctx.end_invocation = True
274
+ return ret_event
275
+
276
+ if callback_context.state.has_delta():
277
+ ret_event = Event(
278
+ invocation_id=ctx.invocation_id,
279
+ author=self.name,
280
+ branch=ctx.branch,
281
+ actions=callback_context._event_actions,
282
+ )
283
+
284
+ return ret_event
285
+
286
+ def __handle_after_agent_callback(
287
+ self, invocation_context: InvocationContext
288
+ ) -> Optional[Event]:
289
+ """Runs the after_agent_callback if it exists.
290
+
291
+ Returns:
292
+ Optional[Event]: an event if callback provides content or changed state.
293
+ """
294
+ ret_event = None
295
+
296
+ if not isinstance(self.after_agent_callback, Callable):
297
+ return ret_event
298
+
299
+ callback_context = CallbackContext(invocation_context)
300
+ after_agent_callback_content = self.after_agent_callback(
301
+ callback_context=callback_context
302
+ )
303
+
304
+ if after_agent_callback_content or callback_context.state.has_delta():
305
+ ret_event = Event(
306
+ invocation_id=invocation_context.invocation_id,
307
+ author=self.name,
308
+ branch=invocation_context.branch,
309
+ content=after_agent_callback_content,
310
+ actions=callback_context._event_actions,
311
+ )
312
+
313
+ return ret_event
314
+
315
+ @override
316
+ def model_post_init(self, __context: Any) -> None:
317
+ self.__set_parent_agent_for_sub_agents()
318
+
319
+ @field_validator('name', mode='after')
320
+ @classmethod
321
+ def __validate_name(cls, value: str):
322
+ if not value.isidentifier():
323
+ raise ValueError(
324
+ f'Found invalid agent name: `{value}`.'
325
+ ' Agent name must be a valid identifier. It should start with a'
326
+ ' letter (a-z, A-Z) or an underscore (_), and can only contain'
327
+ ' letters, digits (0-9), and underscores.'
328
+ )
329
+ if value == 'user':
330
+ raise ValueError(
331
+ "Agent name cannot be `user`. `user` is reserved for end-user's"
332
+ ' input.'
333
+ )
334
+ return value
335
+
336
+ def __set_parent_agent_for_sub_agents(self) -> BaseAgent:
337
+ for sub_agent in self.sub_agents:
338
+ if sub_agent.parent_agent is not None:
339
+ raise ValueError(
340
+ f'Agent `{sub_agent.name}` already has a parent agent, current'
341
+ f' parent: `{sub_agent.parent_agent.name}`, trying to add:'
342
+ f' `{self.name}`'
343
+ )
344
+ sub_agent.parent_agent = self
345
+ return self
@@ -0,0 +1,112 @@
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 __future__ import annotations
16
+
17
+ from typing import Optional, TYPE_CHECKING
18
+
19
+ from typing_extensions import override
20
+
21
+ from .readonly_context import ReadonlyContext
22
+
23
+ if TYPE_CHECKING:
24
+ from google.genai import types
25
+
26
+ from ..events.event import Event
27
+ from ..events.event_actions import EventActions
28
+ from ..sessions.state import State
29
+ from .invocation_context import InvocationContext
30
+
31
+
32
+ class CallbackContext(ReadonlyContext):
33
+ """The context of various callbacks within an agent run."""
34
+
35
+ def __init__(
36
+ self,
37
+ invocation_context: InvocationContext,
38
+ *,
39
+ event_actions: Optional[EventActions] = None,
40
+ ) -> None:
41
+ super().__init__(invocation_context)
42
+
43
+ from ..events.event_actions import EventActions
44
+ from ..sessions.state import State
45
+
46
+ # TODO(weisun): make this public for Agent Development Kit, but private for
47
+ # users.
48
+ self._event_actions = event_actions or EventActions()
49
+ self._state = State(
50
+ value=invocation_context.session.state,
51
+ delta=self._event_actions.state_delta,
52
+ )
53
+
54
+ @property
55
+ @override
56
+ def state(self) -> State:
57
+ """The delta-aware state of the current session.
58
+
59
+ For any state change, you can mutate this object directly,
60
+ e.g. `ctx.state['foo'] = 'bar'`
61
+ """
62
+ return self._state
63
+
64
+ @property
65
+ def user_content(self) -> Optional[types.Content]:
66
+ """The user content that started this invocation. READONLY field."""
67
+ return self._invocation_context.user_content
68
+
69
+ def load_artifact(
70
+ self, filename: str, version: Optional[int] = None
71
+ ) -> Optional[types.Part]:
72
+ """Loads an artifact attached to the current session.
73
+
74
+ Args:
75
+ filename: The filename of the artifact.
76
+ version: The version of the artifact. If None, the latest version will be
77
+ returned.
78
+
79
+ Returns:
80
+ The artifact.
81
+ """
82
+ if self._invocation_context.artifact_service is None:
83
+ raise ValueError("Artifact service is not initialized.")
84
+ return self._invocation_context.artifact_service.load_artifact(
85
+ app_name=self._invocation_context.app_name,
86
+ user_id=self._invocation_context.user_id,
87
+ session_id=self._invocation_context.session.id,
88
+ filename=filename,
89
+ version=version,
90
+ )
91
+
92
+ def save_artifact(self, filename: str, artifact: types.Part) -> int:
93
+ """Saves an artifact and records it as delta for the current session.
94
+
95
+ Args:
96
+ filename: The filename of the artifact.
97
+ artifact: The artifact to save.
98
+
99
+ Returns:
100
+ The version of the artifact.
101
+ """
102
+ if self._invocation_context.artifact_service is None:
103
+ raise ValueError("Artifact service is not initialized.")
104
+ version = self._invocation_context.artifact_service.save_artifact(
105
+ app_name=self._invocation_context.app_name,
106
+ user_id=self._invocation_context.user_id,
107
+ session_id=self._invocation_context.session.id,
108
+ filename=filename,
109
+ artifact=artifact,
110
+ )
111
+ self._event_actions.artifact_delta[filename] = version
112
+ return version