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,524 @@
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
+ from contextlib import asynccontextmanager
17
+ from datetime import datetime
18
+ import logging
19
+ import os
20
+ import tempfile
21
+ from typing import Optional
22
+
23
+ import click
24
+ from fastapi import FastAPI
25
+ import uvicorn
26
+
27
+ from . import cli_deploy
28
+ from .cli import run_cli
29
+ from .cli_eval import MISSING_EVAL_DEPENDENCIES_MESSAGE
30
+ from .fast_api import get_fast_api_app
31
+ from .utils import envs
32
+ from .utils import logs
33
+
34
+ logger = logging.getLogger(__name__)
35
+
36
+
37
+ @click.group(context_settings={"max_content_width": 240})
38
+ def main():
39
+ """Agent Development Kit CLI tools."""
40
+ pass
41
+
42
+
43
+ @main.group()
44
+ def deploy():
45
+ """Deploy Agent."""
46
+ pass
47
+
48
+
49
+ @main.command("run")
50
+ @click.option(
51
+ "--save_session",
52
+ type=bool,
53
+ is_flag=True,
54
+ show_default=True,
55
+ default=False,
56
+ help="Optional. Whether to save the session to a json file on exit.",
57
+ )
58
+ @click.argument(
59
+ "agent",
60
+ type=click.Path(
61
+ exists=True, dir_okay=True, file_okay=False, resolve_path=True
62
+ ),
63
+ )
64
+ def cli_run(agent: str, save_session: bool):
65
+ """Run an interactive CLI for a certain agent.
66
+
67
+ AGENT: The path to the agent source code folder.
68
+
69
+ Example:
70
+
71
+ adk run path/to/my_agent
72
+ """
73
+ logs.log_to_tmp_folder()
74
+
75
+ agent_parent_folder = os.path.dirname(agent)
76
+ agent_folder_name = os.path.basename(agent)
77
+
78
+ asyncio.run(
79
+ run_cli(
80
+ agent_parent_dir=agent_parent_folder,
81
+ agent_folder_name=agent_folder_name,
82
+ save_session=save_session,
83
+ )
84
+ )
85
+
86
+
87
+ @main.command("eval")
88
+ @click.argument(
89
+ "agent_module_file_path",
90
+ type=click.Path(
91
+ exists=True, dir_okay=True, file_okay=False, resolve_path=True
92
+ ),
93
+ )
94
+ @click.argument("eval_set_file_path", nargs=-1)
95
+ @click.option("--config_file_path", help="Optional. The path to config file.")
96
+ @click.option(
97
+ "--print_detailed_results",
98
+ is_flag=True,
99
+ show_default=True,
100
+ default=False,
101
+ help="Optional. Whether to print detailed results on console or not.",
102
+ )
103
+ def eval_command(
104
+ agent_module_file_path: str,
105
+ eval_set_file_path: tuple[str],
106
+ config_file_path: str,
107
+ print_detailed_results: bool,
108
+ ):
109
+ """Evaluates an agent given the eval sets.
110
+
111
+ AGENT_MODULE_FILE_PATH: The path to the __init__.py file that contains a
112
+ module by the name "agent". "agent" module contains a root_agent.
113
+
114
+ EVAL_SET_FILE_PATH: You can specify one or more eval set file paths.
115
+
116
+ For each file, all evals will be run by default.
117
+
118
+ If you want to run only specific evals from a eval set, first create a comma
119
+ separated list of eval names and then add that as a suffix to the eval set
120
+ file name, demarcated by a `:`.
121
+
122
+ For example,
123
+
124
+ sample_eval_set_file.json:eval_1,eval_2,eval_3
125
+
126
+ This will only run eval_1, eval_2 and eval_3 from sample_eval_set_file.json.
127
+
128
+ CONFIG_FILE_PATH: The path to config file.
129
+
130
+ PRINT_DETAILED_RESULTS: Prints detailed results on the console.
131
+ """
132
+ envs.load_dotenv_for_agent(agent_module_file_path, ".")
133
+
134
+ try:
135
+ from .cli_eval import EvalMetric
136
+ from .cli_eval import EvalResult
137
+ from .cli_eval import EvalStatus
138
+ from .cli_eval import get_evaluation_criteria_or_default
139
+ from .cli_eval import get_root_agent
140
+ from .cli_eval import parse_and_get_evals_to_run
141
+ from .cli_eval import run_evals
142
+ from .cli_eval import try_get_reset_func
143
+ except ModuleNotFoundError:
144
+ raise click.ClickException(MISSING_EVAL_DEPENDENCIES_MESSAGE)
145
+
146
+ evaluation_criteria = get_evaluation_criteria_or_default(config_file_path)
147
+ eval_metrics = []
148
+ for metric_name, threshold in evaluation_criteria.items():
149
+ eval_metrics.append(
150
+ EvalMetric(metric_name=metric_name, threshold=threshold)
151
+ )
152
+
153
+ print(f"Using evaluation creiteria: {evaluation_criteria}")
154
+
155
+ root_agent = get_root_agent(agent_module_file_path)
156
+ reset_func = try_get_reset_func(agent_module_file_path)
157
+
158
+ eval_set_to_evals = parse_and_get_evals_to_run(eval_set_file_path)
159
+
160
+ try:
161
+ eval_results = list(
162
+ run_evals(
163
+ eval_set_to_evals,
164
+ root_agent,
165
+ reset_func,
166
+ eval_metrics,
167
+ print_detailed_results=print_detailed_results,
168
+ )
169
+ )
170
+ except ModuleNotFoundError:
171
+ raise click.ClickException(MISSING_EVAL_DEPENDENCIES_MESSAGE)
172
+
173
+ print("*********************************************************************")
174
+ eval_run_summary = {}
175
+
176
+ for eval_result in eval_results:
177
+ eval_result: EvalResult
178
+
179
+ if eval_result.eval_set_file not in eval_run_summary:
180
+ eval_run_summary[eval_result.eval_set_file] = [0, 0]
181
+
182
+ if eval_result.final_eval_status == EvalStatus.PASSED:
183
+ eval_run_summary[eval_result.eval_set_file][0] += 1
184
+ else:
185
+ eval_run_summary[eval_result.eval_set_file][1] += 1
186
+ print("Eval Run Summary")
187
+ for eval_set_file, pass_fail_count in eval_run_summary.items():
188
+ print(
189
+ f"{eval_set_file}:\n Tests passed: {pass_fail_count[0]}\n Tests"
190
+ f" failed: {pass_fail_count[1]}"
191
+ )
192
+
193
+
194
+ @main.command("web")
195
+ @click.option(
196
+ "--session_db_url",
197
+ help=(
198
+ "Optional. The database URL to store the session.\n\n - Use"
199
+ " 'agentengine://<agent_engine_resource_id>' to connect to Vertex"
200
+ " managed session service.\n\n - Use 'sqlite://<path_to_sqlite_file>'"
201
+ " to connect to a SQLite DB.\n\n - See"
202
+ " https://docs.sqlalchemy.org/en/20/core/engines.html#backend-specific-urls"
203
+ " for more details on supported DB URLs."
204
+ ),
205
+ )
206
+ @click.option(
207
+ "--port",
208
+ type=int,
209
+ help="Optional. The port of the server",
210
+ default=8000,
211
+ )
212
+ @click.option(
213
+ "--allow_origins",
214
+ help="Optional. Any additional origins to allow for CORS.",
215
+ multiple=True,
216
+ )
217
+ @click.option(
218
+ "--log_level",
219
+ type=click.Choice(
220
+ ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], case_sensitive=False
221
+ ),
222
+ default="INFO",
223
+ help="Optional. Set the logging level",
224
+ )
225
+ @click.option(
226
+ "--log_to_tmp",
227
+ is_flag=True,
228
+ show_default=True,
229
+ default=False,
230
+ help=(
231
+ "Optional. Whether to log to system temp folder instead of console."
232
+ " This is useful for local debugging."
233
+ ),
234
+ )
235
+ @click.option(
236
+ "--trace_to_cloud",
237
+ is_flag=True,
238
+ show_default=True,
239
+ default=False,
240
+ help="Optional. Whether to enable cloud trace for telemetry.",
241
+ )
242
+ @click.argument(
243
+ "agents_dir",
244
+ type=click.Path(
245
+ exists=True, dir_okay=True, file_okay=False, resolve_path=True
246
+ ),
247
+ default=os.getcwd(),
248
+ )
249
+ def web(
250
+ agents_dir: str,
251
+ log_to_tmp: bool,
252
+ session_db_url: str = "",
253
+ log_level: str = "INFO",
254
+ allow_origins: Optional[list[str]] = None,
255
+ port: int = 8000,
256
+ trace_to_cloud: bool = False,
257
+ ):
258
+ """Start a FastAPI server with web UI for a certain agent.
259
+
260
+ AGENTS_DIR: The directory of agents, where each sub-directory is a single
261
+ agent, containing at least `__init__.py` and `agent.py` files.
262
+
263
+ Example:
264
+
265
+ adk web --session_db_url=[db_url] --port=[port] path/to/agents_dir
266
+ """
267
+ if log_to_tmp:
268
+ logs.log_to_tmp_folder()
269
+ else:
270
+ logs.log_to_stderr()
271
+
272
+ logging.getLogger().setLevel(log_level)
273
+
274
+ @asynccontextmanager
275
+ async def _lifespan(app: FastAPI):
276
+ click.secho(
277
+ f"""\
278
+ +-----------------------------------------------------------------------------+
279
+ | ADK Web Server started |
280
+ | |
281
+ | For local testing, access at http://localhost:{port}.{" "*(29 - len(str(port)))}|
282
+ +-----------------------------------------------------------------------------+
283
+ """,
284
+ fg="green",
285
+ )
286
+ yield # Startup is done, now app is running
287
+ click.secho(
288
+ """\
289
+ +-----------------------------------------------------------------------------+
290
+ | ADK Web Server shutting down... |
291
+ +-----------------------------------------------------------------------------+
292
+ """,
293
+ fg="green",
294
+ )
295
+
296
+ app = get_fast_api_app(
297
+ agent_dir=agents_dir,
298
+ session_db_url=session_db_url,
299
+ allow_origins=allow_origins,
300
+ web=True,
301
+ trace_to_cloud=trace_to_cloud,
302
+ lifespan=_lifespan,
303
+ )
304
+ config = uvicorn.Config(
305
+ app,
306
+ host="0.0.0.0",
307
+ port=port,
308
+ reload=True,
309
+ )
310
+
311
+ server = uvicorn.Server(config)
312
+ server.run()
313
+
314
+
315
+ @main.command("api_server")
316
+ @click.option(
317
+ "--session_db_url",
318
+ help=(
319
+ "Optional. The database URL to store the session.\n\n - Use"
320
+ " 'agentengine://<agent_engine_resource_id>' to connect to Vertex"
321
+ " managed session service.\n\n - Use 'sqlite://<path_to_sqlite_file>'"
322
+ " to connect to a SQLite DB.\n\n - See"
323
+ " https://docs.sqlalchemy.org/en/20/core/engines.html#backend-specific-urls"
324
+ " for more details on supported DB URLs."
325
+ ),
326
+ )
327
+ @click.option(
328
+ "--port",
329
+ type=int,
330
+ help="Optional. The port of the server",
331
+ default=8000,
332
+ )
333
+ @click.option(
334
+ "--allow_origins",
335
+ help="Optional. Any additional origins to allow for CORS.",
336
+ multiple=True,
337
+ )
338
+ @click.option(
339
+ "--log_level",
340
+ type=click.Choice(
341
+ ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], case_sensitive=False
342
+ ),
343
+ default="INFO",
344
+ help="Optional. Set the logging level",
345
+ )
346
+ @click.option(
347
+ "--log_to_tmp",
348
+ is_flag=True,
349
+ show_default=True,
350
+ default=False,
351
+ help=(
352
+ "Optional. Whether to log to system temp folder instead of console."
353
+ " This is useful for local debugging."
354
+ ),
355
+ )
356
+ @click.option(
357
+ "--trace_to_cloud",
358
+ is_flag=True,
359
+ show_default=True,
360
+ default=False,
361
+ help="Optional. Whether to enable cloud trace for telemetry.",
362
+ )
363
+ # The directory of agents, where each sub-directory is a single agent.
364
+ # By default, it is the current working directory
365
+ @click.argument(
366
+ "agents_dir",
367
+ type=click.Path(
368
+ exists=True, dir_okay=True, file_okay=False, resolve_path=True
369
+ ),
370
+ default=os.getcwd(),
371
+ )
372
+ def cli_api_server(
373
+ agents_dir: str,
374
+ log_to_tmp: bool,
375
+ session_db_url: str = "",
376
+ log_level: str = "INFO",
377
+ allow_origins: Optional[list[str]] = None,
378
+ port: int = 8000,
379
+ trace_to_cloud: bool = False,
380
+ ):
381
+ """Start an api server for a certain agent.
382
+
383
+ AGENTS_DIR: The directory of agents, where each sub-directory is a single
384
+ agent, containing at least `__init__.py` and `agent.py` files.
385
+
386
+ Example:
387
+
388
+ adk api_server --session_db_url=[db_url] --port=[port] path/to/agents_dir
389
+ """
390
+ if log_to_tmp:
391
+ logs.log_to_tmp_folder()
392
+ else:
393
+ logs.log_to_stderr()
394
+
395
+ logging.getLogger().setLevel(log_level)
396
+
397
+ config = uvicorn.Config(
398
+ get_fast_api_app(
399
+ agent_dir=agents_dir,
400
+ session_db_url=session_db_url,
401
+ allow_origins=allow_origins,
402
+ web=False,
403
+ trace_to_cloud=trace_to_cloud,
404
+ ),
405
+ host="0.0.0.0",
406
+ port=port,
407
+ reload=True,
408
+ )
409
+ server = uvicorn.Server(config)
410
+ server.run()
411
+
412
+
413
+ @deploy.command("cloud_run")
414
+ @click.option(
415
+ "--project",
416
+ type=str,
417
+ help=(
418
+ "Required. Google Cloud project to deploy the agent. When absent,"
419
+ " default project from gcloud config is used."
420
+ ),
421
+ )
422
+ @click.option(
423
+ "--region",
424
+ type=str,
425
+ help=(
426
+ "Required. Google Cloud region to deploy the agent. When absent,"
427
+ " gcloud run deploy will prompt later."
428
+ ),
429
+ )
430
+ @click.option(
431
+ "--service_name",
432
+ type=str,
433
+ default="adk-default-service-name",
434
+ help=(
435
+ "Optional. The service name to use in Cloud Run (default:"
436
+ " 'adk-default-service-name')."
437
+ ),
438
+ )
439
+ @click.option(
440
+ "--app_name",
441
+ type=str,
442
+ default="",
443
+ help=(
444
+ "Optional. App name of the ADK API server (default: the folder name"
445
+ " of the AGENT source code)."
446
+ ),
447
+ )
448
+ @click.option(
449
+ "--port",
450
+ type=int,
451
+ default=8000,
452
+ help="Optional. The port of the ADK API server (default: 8000).",
453
+ )
454
+ @click.option(
455
+ "--with_cloud_trace",
456
+ type=bool,
457
+ is_flag=True,
458
+ show_default=True,
459
+ default=False,
460
+ help="Optional. Whether to enable Cloud Trace for cloud run.",
461
+ )
462
+ @click.option(
463
+ "--with_ui",
464
+ type=bool,
465
+ is_flag=True,
466
+ show_default=True,
467
+ default=False,
468
+ help=(
469
+ "Optional. Deploy ADK Web UI if set. (default: deploy ADK API server"
470
+ " only)"
471
+ ),
472
+ )
473
+ @click.option(
474
+ "--temp_folder",
475
+ type=str,
476
+ default=os.path.join(
477
+ tempfile.gettempdir(),
478
+ "cloud_run_deploy_src",
479
+ datetime.now().strftime("%Y%m%d_%H%M%S"),
480
+ ),
481
+ help=(
482
+ "Optional. Temp folder for the generated Cloud Run source files"
483
+ " (default: a timestamped folder in the system temp directory)."
484
+ ),
485
+ )
486
+ @click.argument(
487
+ "agent",
488
+ type=click.Path(
489
+ exists=True, dir_okay=True, file_okay=False, resolve_path=True
490
+ ),
491
+ )
492
+ def deploy_to_cloud_run(
493
+ agent: str,
494
+ project: Optional[str],
495
+ region: Optional[str],
496
+ service_name: str,
497
+ app_name: str,
498
+ temp_folder: str,
499
+ port: int,
500
+ with_cloud_trace: bool,
501
+ with_ui: bool,
502
+ ):
503
+ """Deploys agent to Cloud Run.
504
+
505
+ AGENT: The path to the agent source code folder.
506
+
507
+ Example:
508
+
509
+ adk deploy cloud_run --project=[project] --region=[region] path/to/my_agent
510
+ """
511
+ try:
512
+ cli_deploy.to_cloud_run(
513
+ agent_folder=agent,
514
+ project=project,
515
+ region=region,
516
+ service_name=service_name,
517
+ app_name=app_name,
518
+ temp_folder=temp_folder,
519
+ port=port,
520
+ with_cloud_trace=with_cloud_trace,
521
+ with_ui=with_ui,
522
+ )
523
+ except Exception as e:
524
+ click.secho(f"Deploy failed: {e}", fg="red", err=True)