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,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 os
16
+ import sys
17
+
18
+ from google.adk import Agent
19
+
20
+ DEVICE_DB = {
21
+ "device_1": {"status": "ON", "location": "Living Room"},
22
+ "device_2": {"status": "OFF", "location": "Bedroom"},
23
+ "device_3": {"status": "OFF", "location": "Kitchen"},
24
+ }
25
+
26
+ TEMPERATURE_DB = {
27
+ "Living Room": 22,
28
+ "Bedroom": 20,
29
+ "Kitchen": 24,
30
+ }
31
+
32
+ SCHEDULE_DB = {
33
+ "device_1": {"time": "18:00", "status": "ON"},
34
+ "device_2": {"time": "22:00", "status": "OFF"},
35
+ }
36
+
37
+ USER_PREFERENCES_DB = {
38
+ "user_x": {"preferred_temp": 21, "location": "Bedroom"},
39
+ "user_x": {"preferred_temp": 21, "location": "Living Room"},
40
+ "user_y": {"preferred_temp": 23, "location": "Living Room"},
41
+ }
42
+
43
+
44
+ def reset_data():
45
+ global DEVICE_DB
46
+ global TEMPERATURE_DB
47
+ global SCHEDULE_DB
48
+ global USER_PREFERENCES_DB
49
+ DEVICE_DB = {
50
+ "device_1": {"status": "ON", "location": "Living Room"},
51
+ "device_2": {"status": "OFF", "location": "Bedroom"},
52
+ "device_3": {"status": "OFF", "location": "Kitchen"},
53
+ }
54
+
55
+ TEMPERATURE_DB = {
56
+ "Living Room": 22,
57
+ "Bedroom": 20,
58
+ "Kitchen": 24,
59
+ }
60
+
61
+ SCHEDULE_DB = {
62
+ "device_1": {"time": "18:00", "status": "ON"},
63
+ "device_2": {"time": "22:00", "status": "OFF"},
64
+ }
65
+
66
+ USER_PREFERENCES_DB = {
67
+ "user_x": {"preferred_temp": 21, "location": "Bedroom"},
68
+ "user_x": {"preferred_temp": 21, "location": "Living Room"},
69
+ "user_y": {"preferred_temp": 23, "location": "Living Room"},
70
+ }
71
+
72
+
73
+ def get_device_info(device_id: str) -> dict:
74
+ """Get the current status and location of a AC device.
75
+
76
+ Args:
77
+ device_id (str): The unique identifier of the device.
78
+
79
+ Returns:
80
+ dict: A dictionary containing the following fields, or 'Device not found'
81
+ if the device_id does not exist:
82
+ - status: The current status of the device (e.g., 'ON', 'OFF')
83
+ - location: The location where the device is installed (e.g., 'Living
84
+ Room', 'Bedroom', ''Kitchen')
85
+ """
86
+ return DEVICE_DB.get(device_id, "Device not found")
87
+
88
+
89
+ # def set_device_info(device_id: str, updates: dict) -> str:
90
+ # """Update the information of a AC device, specifically its status and/or location.
91
+
92
+ # Args:
93
+ # device_id (str): Required. The unique identifier of the device.
94
+ # updates (dict): Required. A dictionary containing the fields to be
95
+ # updated. Supported keys: - "status" (str): The new status to set for the
96
+ # device. Accepted values: 'ON', 'OFF'. **Only these values are allowed.**
97
+ # - "location" (str): The new location to set for the device. Accepted
98
+ # values: 'Living Room', 'Bedroom', 'Kitchen'. **Only these values are
99
+ # allowed.**
100
+
101
+
102
+ # Returns:
103
+ # str: A message indicating whether the device information was successfully
104
+ # updated.
105
+ # """
106
+ # if device_id in DEVICE_DB:
107
+ # if "status" in updates:
108
+ # DEVICE_DB[device_id]["status"] = updates["status"]
109
+ # if "location" in updates:
110
+ # DEVICE_DB[device_id]["location"] = updates["location"]
111
+ # return f"Device {device_id} information updated: {updates}."
112
+ # return "Device not found"
113
+ def set_device_info(
114
+ device_id: str, status: str = "", location: str = ""
115
+ ) -> str:
116
+ """Update the information of a AC device, specifically its status and/or location.
117
+
118
+ Args:
119
+ device_id (str): Required. The unique identifier of the device.
120
+ status (str): The new status to set for the
121
+ device. Accepted values: 'ON', 'OFF'. **Only these values are allowed.**
122
+ location (str): The new location to set for the device. Accepted
123
+ values: 'Living Room', 'Bedroom', 'Kitchen'. **Only these values are
124
+ allowed.**
125
+
126
+ Returns:
127
+ str: A message indicating whether the device information was successfully
128
+ updated.
129
+ """
130
+ if device_id in DEVICE_DB:
131
+ if status:
132
+ DEVICE_DB[device_id]["status"] = status
133
+ return f"Device {device_id} information updated: status -> {status}."
134
+ if location:
135
+ DEVICE_DB[device_id]["location"] = location
136
+ return f"Device {device_id} information updated: location -> {location}."
137
+ return "Device not found"
138
+
139
+
140
+ def get_temperature(location: str) -> int:
141
+ """Get the current temperature in celsius of a location (e.g., 'Living Room', 'Bedroom', 'Kitchen').
142
+
143
+ Args:
144
+ location (str): The location for which to retrieve the temperature (e.g.,
145
+ 'Living Room', 'Bedroom', 'Kitchen').
146
+
147
+ Returns:
148
+ int: The current temperature in celsius in the specified location, or
149
+ 'Location not found' if the location does not exist.
150
+ """
151
+ return TEMPERATURE_DB.get(location, "Location not found")
152
+
153
+
154
+ def set_temperature(location: str, temperature: int) -> str:
155
+ """Set the desired temperature in celsius for a location.
156
+
157
+ Acceptable range of temperature: 18-30 celsius. If it's out of the range, do
158
+ not call this tool.
159
+
160
+ Args:
161
+ location (str): The location where the temperature should be set.
162
+ temperature (int): The desired temperature as integer to set in celsius.
163
+ Acceptable range: 18-30 celsius.
164
+
165
+ Returns:
166
+ str: A message indicating whether the temperature was successfully set.
167
+ """
168
+ if location in TEMPERATURE_DB:
169
+ TEMPERATURE_DB[location] = temperature
170
+ return f"Temperature in {location} set to {temperature}°C."
171
+ return "Location not found"
172
+
173
+
174
+ def get_user_preferences(user_id: str) -> dict:
175
+ """Get the temperature preferences and preferred location of a user_id.
176
+
177
+ user_id must be provided.
178
+
179
+ Args:
180
+ user_id (str): The unique identifier of the user.
181
+
182
+ Returns:
183
+ dict: A dictionary containing the following fields, or 'User not found' if
184
+ the user_id does not exist:
185
+ - preferred_temp: The user's preferred temperature.
186
+ - location: The location where the user prefers to be.
187
+ """
188
+ return USER_PREFERENCES_DB.get(user_id, "User not found")
189
+
190
+
191
+ def set_device_schedule(device_id: str, time: str, status: str) -> str:
192
+ """Schedule a device to change its status at a specific time.
193
+
194
+ Args:
195
+ device_id (str): The unique identifier of the device.
196
+ time (str): The time at which the device should change its status (format:
197
+ 'HH:MM').
198
+ status (str): The status to set for the device at the specified time
199
+ (e.g., 'ON', 'OFF').
200
+
201
+ Returns:
202
+ str: A message indicating whether the schedule was successfully set.
203
+ """
204
+ if device_id in DEVICE_DB:
205
+ SCHEDULE_DB[device_id] = {"time": time, "status": status}
206
+ return f"Device {device_id} scheduled to turn {status} at {time}."
207
+ return "Device not found"
208
+
209
+
210
+ def get_device_schedule(device_id: str) -> dict:
211
+ """Retrieve the schedule of a device.
212
+
213
+ Args:
214
+ device_id (str): The unique identifier of the device.
215
+
216
+ Returns:
217
+ dict: A dictionary containing the following fields, or 'Schedule not
218
+ found' if the device_id does not exist:
219
+ - time: The scheduled time for the device to change its status (format:
220
+ 'HH:MM').
221
+ - status: The status that will be set at the scheduled time (e.g., 'ON',
222
+ 'OFF').
223
+ """
224
+ return SCHEDULE_DB.get(device_id, "Schedule not found")
225
+
226
+
227
+ def celsius_to_fahrenheit(celsius: int) -> float:
228
+ """Convert Celsius to Fahrenheit.
229
+
230
+ You must call this to do the conversion of temperature, so you can get the
231
+ precise number in required format.
232
+
233
+ Args:
234
+ celsius (int): Temperature in Celsius.
235
+
236
+ Returns:
237
+ float: Temperature in Fahrenheit.
238
+ """
239
+ return (celsius * 9 / 5) + 32
240
+
241
+
242
+ def fahrenheit_to_celsius(fahrenheit: float) -> int:
243
+ """Convert Fahrenheit to Celsius.
244
+
245
+ You must call this to do the conversion of temperature, so you can get the
246
+ precise number in required format.
247
+
248
+ Args:
249
+ fahrenheit (float): Temperature in Fahrenheit.
250
+
251
+ Returns:
252
+ int: Temperature in Celsius.
253
+ """
254
+ return int((fahrenheit - 32) * 5 / 9)
255
+
256
+
257
+ def list_devices(status: str = "", location: str = "") -> list:
258
+ """Retrieve a list of AC devices, filtered by status and/or location when provided.
259
+
260
+ For cost efficiency, always apply as many filters (status and location) as
261
+ available in the input arguments.
262
+
263
+ Args:
264
+ status (str, optional): The status to filter devices by (e.g., 'ON',
265
+ 'OFF'). Defaults to None.
266
+ location (str, optional): The location to filter devices by (e.g., 'Living
267
+ Room', 'Bedroom', ''Kitchen'). Defaults to None.
268
+
269
+ Returns:
270
+ list: A list of dictionaries, each containing the device ID, status, and
271
+ location, or an empty list if no devices match the criteria.
272
+ """
273
+ devices = []
274
+ for device_id, info in DEVICE_DB.items():
275
+ if ((not status) or info["status"] == status) and (
276
+ (not location) or info["location"] == location
277
+ ):
278
+ devices.append({
279
+ "device_id": device_id,
280
+ "status": info["status"],
281
+ "location": info["location"],
282
+ })
283
+ return devices if devices else "No devices found matching the criteria."
284
+
285
+
286
+ root_agent = Agent(
287
+ model="gemini-2.0-flash-001",
288
+ name="Home_automation_agent",
289
+ instruction="""
290
+ You are Home Automation Agent. You are responsible for controlling the devices in the home.
291
+ """,
292
+ tools=[
293
+ get_device_info,
294
+ set_device_info,
295
+ get_temperature,
296
+ set_temperature,
297
+ get_user_preferences,
298
+ set_device_schedule,
299
+ get_device_schedule,
300
+ celsius_to_fahrenheit,
301
+ fahrenheit_to_celsius,
302
+ list_devices,
303
+ ],
304
+ )
@@ -0,0 +1,5 @@
1
+ [{
2
+ "query": "Turn off device_2 in the Bedroom.",
3
+ "expected_tool_use": [{"tool_name": "set_device_info", "tool_input": {"location": "Bedroom", "device_id": "device_2", "status": "OFF"}}],
4
+ "reference": "I have set the device_2 status to off."
5
+ }]
@@ -0,0 +1,5 @@
1
+ [{
2
+ "query": "Turn off device_3 in the Bedroom.",
3
+ "expected_tool_use": [{"tool_name": "set_device_info", "tool_input": {"location": "Bedroom", "device_id": "device_3", "status": "OFF"}}],
4
+ "reference": "I have set the device_3 status to off."
5
+ }]
@@ -0,0 +1,5 @@
1
+ {
2
+ "criteria": {
3
+ "tool_trajectory_avg_score": 1.0
4
+ }
5
+ }
@@ -0,0 +1,18 @@
1
+ [
2
+ {
3
+ "query": "Turn off device_2 in the Bedroom.",
4
+ "expected_tool_use": [{
5
+ "tool_name": "set_device_info",
6
+ "tool_input": {"location": "Bedroom", "status": "OFF", "device_id": "device_2"}
7
+ }],
8
+ "reference": "I have set the device 2 status to off."
9
+ },
10
+ {
11
+ "query": "What's the status of device_2 in the Bedroom?",
12
+ "expected_tool_use": [{
13
+ "tool_name": "get_device_info",
14
+ "tool_input": {"device_id": "device_2"}
15
+ }],
16
+ "reference": "Status of device_2 is off."
17
+ }
18
+ ]
@@ -0,0 +1,17 @@
1
+ [
2
+ {
3
+ "query": "Turn off device_2 in the Bedroom.",
4
+ "expected_tool_use": [
5
+ {
6
+ "tool_name": "set_device_info",
7
+ "tool_input": {"location": "Bedroom", "device_id": "device_2", "status": "OFF"}
8
+ }
9
+ ],
10
+ "reference": "OK. I've turned off device_2 in the Bedroom. Anything else?\n"
11
+ },
12
+ {
13
+ "query": "What's the command I just issued?",
14
+ "expected_tool_use": [],
15
+ "reference": "You asked me to turn off device_2 in the Bedroom.\n"
16
+ }
17
+ ]
@@ -0,0 +1,6 @@
1
+ {
2
+ "criteria": {
3
+ "tool_trajectory_avg_score": 1.0,
4
+ "response_match_score": 0.5
5
+ }
6
+ }
@@ -0,0 +1,18 @@
1
+ [
2
+ {
3
+ "query": "Turn off device_2 in the Bedroom.",
4
+ "expected_tool_use": [{
5
+ "tool_name": "set_device_info",
6
+ "tool_input": {"location": "Bedroom", "device_id": "device_2", "status": "OFF"}
7
+ }],
8
+ "reference": "I have set the device 2 status to off."
9
+ },
10
+ {
11
+ "query": "Turn on device_2 in the Bedroom.",
12
+ "expected_tool_use": [{
13
+ "tool_name": "set_device_info",
14
+ "tool_input": {"location": "Bedroom", "status": "ON", "device_id": "device_2"}
15
+ }],
16
+ "reference": "I have set the device 2 status to on."
17
+ }
18
+ ]
@@ -0,0 +1,17 @@
1
+ [
2
+ {
3
+ "query": "Turn off device_2 in the Bedroom.",
4
+ "expected_tool_use": [
5
+ {
6
+ "tool_name": "set_device_info",
7
+ "tool_input": {"location": "Bedroom", "device_id": "device_2", "status": "OFF"}
8
+ }
9
+ ],
10
+ "reference": "OK. I've turned off device_2 in the Bedroom. Anything else?\n"
11
+ },
12
+ {
13
+ "query": "What's the command I just issued?",
14
+ "expected_tool_use": [],
15
+ "reference": "You asked me to turn off device_2 in the Bedroom.\n"
16
+ }
17
+ ]
@@ -0,0 +1,5 @@
1
+ [{
2
+ "query": "Turn off device_3 in the Bedroom.",
3
+ "expected_tool_use": [{"tool_name": "set_device_info", "tool_input": {"location": "Bedroom", "device_id": "device_3", "status": "OFF"}}],
4
+ "reference": "I have set the device_3 status to off."
5
+ }]
@@ -0,0 +1,5 @@
1
+ {
2
+ "criteria": {
3
+ "tool_trajectory_avg_score": 1.0
4
+ }
5
+ }
@@ -0,0 +1,15 @@
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 agent
@@ -0,0 +1,218 @@
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 os
16
+ from typing import Any
17
+
18
+ from crewai_tools import DirectoryReadTool
19
+ from google.adk import Agent
20
+ from google.adk.tools.agent_tool import AgentTool
21
+ from google.adk.tools.crewai_tool import CrewaiTool
22
+ from google.adk.tools.langchain_tool import LangchainTool
23
+ from google.adk.tools.retrieval.files_retrieval import FilesRetrieval
24
+ from google.adk.tools.retrieval.vertex_ai_rag_retrieval import VertexAiRagRetrieval
25
+ from langchain_community.tools import ShellTool
26
+ from pydantic import BaseModel
27
+
28
+
29
+ class TestCase(BaseModel):
30
+ case: str
31
+
32
+
33
+ class Test(BaseModel):
34
+ test_title: list[str]
35
+
36
+
37
+ def simple_function(param: str) -> str:
38
+ if isinstance(param, str):
39
+ return "Called simple function successfully"
40
+ return "Called simple function with wrong param type"
41
+
42
+
43
+ def no_param_function() -> str:
44
+ return "Called no param function successfully"
45
+
46
+
47
+ def no_output_function(param: str):
48
+ return
49
+
50
+
51
+ def multiple_param_types_function(
52
+ param1: str, param2: int, param3: float, param4: bool
53
+ ) -> str:
54
+ if (
55
+ isinstance(param1, str)
56
+ and isinstance(param2, int)
57
+ and isinstance(param3, float)
58
+ and isinstance(param4, bool)
59
+ ):
60
+ return "Called multiple param types function successfully"
61
+ return "Called multiple param types function with wrong param types"
62
+
63
+
64
+ def throw_error_function(param: str) -> str:
65
+ raise ValueError("Error thrown by throw_error_function")
66
+
67
+
68
+ def list_str_param_function(param: list[str]) -> str:
69
+ if isinstance(param, list) and all(isinstance(item, str) for item in param):
70
+ return "Called list str param function successfully"
71
+ return "Called list str param function with wrong param type"
72
+
73
+
74
+ def return_list_str_function(param: str) -> list[str]:
75
+ return ["Called return list str function successfully"]
76
+
77
+
78
+ def complex_function_list_dict(
79
+ param1: dict[str, Any], param2: list[dict[str, Any]]
80
+ ) -> list[Test]:
81
+ if (
82
+ isinstance(param1, dict)
83
+ and isinstance(param2, list)
84
+ and all(isinstance(item, dict) for item in param2)
85
+ ):
86
+ return [
87
+ Test(test_title=["function test 1", "function test 2"]),
88
+ Test(test_title=["retrieval test"]),
89
+ ]
90
+ raise ValueError("Wrong param")
91
+
92
+
93
+ def repetive_call_1(param: str):
94
+ return f"Call repetive_call_2 tool with param {param + '_repetive'}"
95
+
96
+
97
+ def repetive_call_2(param: str):
98
+ return param
99
+
100
+
101
+ test_case_retrieval = FilesRetrieval(
102
+ name="test_case_retrieval",
103
+ description="General guidence for agent test cases",
104
+ input_dir=os.path.join(os.path.dirname(__file__), "files"),
105
+ )
106
+
107
+ valid_rag_retrieval = VertexAiRagRetrieval(
108
+ name="valid_rag_retrieval",
109
+ rag_corpora=[
110
+ "projects/1096655024998/locations/us-central1/ragCorpora/4985766262475849728"
111
+ ],
112
+ description="General guidence for agent test cases",
113
+ )
114
+
115
+ invalid_rag_retrieval = VertexAiRagRetrieval(
116
+ name="invalid_rag_retrieval",
117
+ rag_corpora=[
118
+ "projects/1096655024998/locations/us-central1/InValidRagCorporas/4985766262475849728"
119
+ ],
120
+ description="Invalid rag retrieval resource name",
121
+ )
122
+
123
+ non_exist_rag_retrieval = VertexAiRagRetrieval(
124
+ name="non_exist_rag_retrieval",
125
+ rag_corpora=[
126
+ "projects/1096655024998/locations/us-central1/RagCorpora/1234567"
127
+ ],
128
+ description="Non exist rag retrieval resource name",
129
+ )
130
+
131
+ shell_tool = LangchainTool(ShellTool())
132
+
133
+ docs_tool = CrewaiTool(
134
+ name="direcotry_read_tool",
135
+ description="use this to find files for you.",
136
+ tool=DirectoryReadTool(directory="."),
137
+ )
138
+
139
+ no_schema_agent = Agent(
140
+ model="gemini-1.5-flash",
141
+ name="no_schema_agent",
142
+ instruction="""Just say 'Hi'
143
+ """,
144
+ )
145
+
146
+ schema_agent = Agent(
147
+ model="gemini-1.5-flash",
148
+ name="schema_agent",
149
+ instruction="""
150
+ You will be given a test case.
151
+ Return a list of the received test case appended with '_success' and '_failure' as test_titles
152
+ """,
153
+ input_schema=TestCase,
154
+ output_schema=Test,
155
+ )
156
+
157
+ no_input_schema_agent = Agent(
158
+ model="gemini-1.5-flash",
159
+ name="no_input_schema_agent",
160
+ instruction="""
161
+ Just return ['Tools_success, Tools_failure']
162
+ """,
163
+ output_schema=Test,
164
+ )
165
+
166
+ no_output_schema_agent = Agent(
167
+ model="gemini-1.5-flash",
168
+ name="no_output_schema_agent",
169
+ instruction="""
170
+ Just say 'Hi'
171
+ """,
172
+ input_schema=TestCase,
173
+ )
174
+
175
+ single_function_agent = Agent(
176
+ model="gemini-1.5-flash",
177
+ name="single_function_agent",
178
+ description="An agent that calls a single function",
179
+ instruction="When calling tools, just return what the tool returns.",
180
+ tools=[simple_function],
181
+ )
182
+
183
+ root_agent = Agent(
184
+ model="gemini-1.5-flash",
185
+ name="tool_agent",
186
+ description="An agent that can call other tools",
187
+ instruction="When calling tools, just return what the tool returns.",
188
+ tools=[
189
+ simple_function,
190
+ no_param_function,
191
+ no_output_function,
192
+ multiple_param_types_function,
193
+ throw_error_function,
194
+ list_str_param_function,
195
+ return_list_str_function,
196
+ # complex_function_list_dict,
197
+ repetive_call_1,
198
+ repetive_call_2,
199
+ test_case_retrieval,
200
+ valid_rag_retrieval,
201
+ invalid_rag_retrieval,
202
+ non_exist_rag_retrieval,
203
+ shell_tool,
204
+ docs_tool,
205
+ AgentTool(
206
+ agent=no_schema_agent,
207
+ ),
208
+ AgentTool(
209
+ agent=schema_agent,
210
+ ),
211
+ AgentTool(
212
+ agent=no_input_schema_agent,
213
+ ),
214
+ AgentTool(
215
+ agent=no_output_schema_agent,
216
+ ),
217
+ ],
218
+ )
@@ -0,0 +1,15 @@
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 agent