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.
- google/adk/._version.py +0 -0
- google/adk/__init__.py +20 -0
- google/adk/agents/__init__.py +32 -0
- google/adk/agents/active_streaming_tool.py +38 -0
- google/adk/agents/base_agent.py +345 -0
- google/adk/agents/callback_context.py +112 -0
- google/adk/agents/invocation_context.py +181 -0
- google/adk/agents/langgraph_agent.py +140 -0
- google/adk/agents/live_request_queue.py +64 -0
- google/adk/agents/llm_agent.py +376 -0
- google/adk/agents/loop_agent.py +62 -0
- google/adk/agents/parallel_agent.py +96 -0
- google/adk/agents/readonly_context.py +46 -0
- google/adk/agents/remote_agent.py +50 -0
- google/adk/agents/run_config.py +87 -0
- google/adk/agents/sequential_agent.py +45 -0
- google/adk/agents/transcription_entry.py +34 -0
- google/adk/artifacts/__init__.py +23 -0
- google/adk/artifacts/base_artifact_service.py +128 -0
- google/adk/artifacts/gcs_artifact_service.py +195 -0
- google/adk/artifacts/in_memory_artifact_service.py +133 -0
- google/adk/auth/__init__.py +22 -0
- google/adk/auth/auth_credential.py +220 -0
- google/adk/auth/auth_handler.py +268 -0
- google/adk/auth/auth_preprocessor.py +116 -0
- google/adk/auth/auth_schemes.py +67 -0
- google/adk/auth/auth_tool.py +55 -0
- google/adk/cli/__init__.py +15 -0
- google/adk/cli/__main__.py +18 -0
- google/adk/cli/agent_graph.py +148 -0
- google/adk/cli/browser/adk_favicon.svg +17 -0
- google/adk/cli/browser/assets/audio-processor.js +51 -0
- google/adk/cli/browser/assets/config/runtime-config.json +3 -0
- google/adk/cli/browser/index.html +33 -0
- google/adk/cli/browser/main-SY2WYYGV.js +75 -0
- google/adk/cli/browser/polyfills-FFHMD2TL.js +18 -0
- google/adk/cli/browser/styles-4VDSPQ37.css +17 -0
- google/adk/cli/cli.py +181 -0
- google/adk/cli/cli_deploy.py +181 -0
- google/adk/cli/cli_eval.py +282 -0
- google/adk/cli/cli_tools_click.py +524 -0
- google/adk/cli/fast_api.py +784 -0
- google/adk/cli/utils/__init__.py +49 -0
- google/adk/cli/utils/envs.py +57 -0
- google/adk/cli/utils/evals.py +93 -0
- google/adk/cli/utils/logs.py +72 -0
- google/adk/code_executors/__init__.py +49 -0
- google/adk/code_executors/base_code_executor.py +97 -0
- google/adk/code_executors/code_execution_utils.py +256 -0
- google/adk/code_executors/code_executor_context.py +202 -0
- google/adk/code_executors/container_code_executor.py +196 -0
- google/adk/code_executors/unsafe_local_code_executor.py +71 -0
- google/adk/code_executors/vertex_ai_code_executor.py +234 -0
- google/adk/docs/Makefile +20 -0
- google/adk/docs/build/doctrees/google-adk.doctree +0 -0
- google/adk/docs/build/html/_sources/google-adk.rst.txt +98 -0
- google/adk/docs/build/html/_sources/index.rst.txt +7 -0
- google/adk/docs/build/html/_static/autodoc_pydantic.css +27 -0
- google/adk/docs/build/html/_static/basic.css +925 -0
- google/adk/docs/build/html/_static/debug.css +85 -0
- google/adk/docs/build/html/_static/doctools.js +156 -0
- google/adk/docs/build/html/_static/documentation_options.js +29 -0
- google/adk/docs/build/html/_static/file.png +0 -0
- google/adk/docs/build/html/_static/language_data.js +199 -0
- google/adk/docs/build/html/_static/minus.png +0 -0
- google/adk/docs/build/html/_static/plus.png +0 -0
- google/adk/docs/build/html/_static/pygments.css +274 -0
- google/adk/docs/build/html/_static/scripts/furo-extensions.js +16 -0
- google/adk/docs/build/html/_static/scripts/furo.js +19 -0
- google/adk/docs/build/html/_static/scripts/furo.js.LICENSE.txt +7 -0
- google/adk/docs/build/html/_static/scripts/furo.js.map +1 -0
- google/adk/docs/build/html/_static/searchtools.js +620 -0
- google/adk/docs/build/html/_static/skeleton.css +312 -0
- google/adk/docs/build/html/_static/sphinx_highlight.js +170 -0
- google/adk/docs/build/html/_static/styles/furo-extensions.css +18 -0
- google/adk/docs/build/html/_static/styles/furo-extensions.css.map +1 -0
- google/adk/docs/build/html/_static/styles/furo.css +18 -0
- google/adk/docs/build/html/_static/styles/furo.css.map +1 -0
- google/adk/docs/build/html/genindex.html +861 -0
- google/adk/docs/build/html/google-adk.html +5461 -0
- google/adk/docs/build/html/index.html +567 -0
- google/adk/docs/build/html/objects.inv +0 -0
- google/adk/docs/build/html/py-modindex.html +373 -0
- google/adk/docs/build/html/search.html +333 -0
- google/adk/docs/build/html/searchindex.js +17 -0
- google/adk/docs/source/conf.py +133 -0
- google/adk/docs/source/google-adk.rst +98 -0
- google/adk/docs/source/index.rst +7 -0
- google/adk/evaluation/__init__.py +31 -0
- google/adk/evaluation/agent_evaluator.py +329 -0
- google/adk/evaluation/evaluation_constants.py +24 -0
- google/adk/evaluation/evaluation_generator.py +270 -0
- google/adk/evaluation/response_evaluator.py +135 -0
- google/adk/evaluation/trajectory_evaluator.py +184 -0
- google/adk/events/__init__.py +21 -0
- google/adk/events/event.py +130 -0
- google/adk/events/event_actions.py +55 -0
- google/adk/examples/__init__.py +28 -0
- google/adk/examples/base_example_provider.py +35 -0
- google/adk/examples/example.py +27 -0
- google/adk/examples/example_util.py +123 -0
- google/adk/examples/vertex_ai_example_store.py +104 -0
- google/adk/flows/__init__.py +14 -0
- google/adk/flows/llm_flows/__init__.py +20 -0
- google/adk/flows/llm_flows/_base_llm_processor.py +52 -0
- google/adk/flows/llm_flows/_code_execution.py +458 -0
- google/adk/flows/llm_flows/_nl_planning.py +129 -0
- google/adk/flows/llm_flows/agent_transfer.py +132 -0
- google/adk/flows/llm_flows/audio_transcriber.py +109 -0
- google/adk/flows/llm_flows/auto_flow.py +49 -0
- google/adk/flows/llm_flows/base_llm_flow.py +559 -0
- google/adk/flows/llm_flows/basic.py +72 -0
- google/adk/flows/llm_flows/contents.py +370 -0
- google/adk/flows/llm_flows/functions.py +486 -0
- google/adk/flows/llm_flows/identity.py +47 -0
- google/adk/flows/llm_flows/instructions.py +137 -0
- google/adk/flows/llm_flows/single_flow.py +57 -0
- google/adk/memory/__init__.py +35 -0
- google/adk/memory/base_memory_service.py +74 -0
- google/adk/memory/in_memory_memory_service.py +62 -0
- google/adk/memory/vertex_ai_rag_memory_service.py +177 -0
- google/adk/models/__init__.py +31 -0
- google/adk/models/anthropic_llm.py +243 -0
- google/adk/models/base_llm.py +87 -0
- google/adk/models/base_llm_connection.py +76 -0
- google/adk/models/gemini_llm_connection.py +200 -0
- google/adk/models/google_llm.py +331 -0
- google/adk/models/lite_llm.py +673 -0
- google/adk/models/llm_request.py +98 -0
- google/adk/models/llm_response.py +111 -0
- google/adk/models/registry.py +102 -0
- google/adk/planners/__init__.py +23 -0
- google/adk/planners/base_planner.py +66 -0
- google/adk/planners/built_in_planner.py +75 -0
- google/adk/planners/plan_re_act_planner.py +208 -0
- google/adk/runners.py +456 -0
- google/adk/sessions/__init__.py +41 -0
- google/adk/sessions/base_session_service.py +133 -0
- google/adk/sessions/database_session_service.py +522 -0
- google/adk/sessions/in_memory_session_service.py +206 -0
- google/adk/sessions/session.py +54 -0
- google/adk/sessions/state.py +71 -0
- google/adk/sessions/vertex_ai_session_service.py +356 -0
- google/adk/telemetry.py +189 -0
- google/adk/tests/__init__.py +14 -0
- google/adk/tests/integration/.env.example +10 -0
- google/adk/tests/integration/__init__.py +18 -0
- google/adk/tests/integration/conftest.py +119 -0
- google/adk/tests/integration/fixture/__init__.py +14 -0
- google/adk/tests/integration/fixture/agent_with_config/__init__.py +15 -0
- google/adk/tests/integration/fixture/agent_with_config/agent.py +88 -0
- google/adk/tests/integration/fixture/callback_agent/__init__.py +15 -0
- google/adk/tests/integration/fixture/callback_agent/agent.py +105 -0
- google/adk/tests/integration/fixture/context_update_test/OWNERS +1 -0
- google/adk/tests/integration/fixture/context_update_test/__init__.py +15 -0
- google/adk/tests/integration/fixture/context_update_test/agent.py +43 -0
- google/adk/tests/integration/fixture/context_update_test/successful_test.session.json +582 -0
- google/adk/tests/integration/fixture/context_variable_agent/__init__.py +15 -0
- google/adk/tests/integration/fixture/context_variable_agent/agent.py +115 -0
- google/adk/tests/integration/fixture/customer_support_ma/__init__.py +15 -0
- google/adk/tests/integration/fixture/customer_support_ma/agent.py +172 -0
- google/adk/tests/integration/fixture/ecommerce_customer_service_agent/__init__.py +15 -0
- google/adk/tests/integration/fixture/ecommerce_customer_service_agent/agent.py +338 -0
- google/adk/tests/integration/fixture/ecommerce_customer_service_agent/order_query.test.json +69 -0
- google/adk/tests/integration/fixture/ecommerce_customer_service_agent/test_config.json +6 -0
- google/adk/tests/integration/fixture/flow_complex_spark/__init__.py +15 -0
- google/adk/tests/integration/fixture/flow_complex_spark/agent.py +182 -0
- google/adk/tests/integration/fixture/flow_complex_spark/sample.session.json +190 -0
- google/adk/tests/integration/fixture/hello_world_agent/__init__.py +15 -0
- google/adk/tests/integration/fixture/hello_world_agent/agent.py +95 -0
- google/adk/tests/integration/fixture/hello_world_agent/roll_die.test.json +24 -0
- google/adk/tests/integration/fixture/hello_world_agent/test_config.json +6 -0
- google/adk/tests/integration/fixture/home_automation_agent/__init__.py +15 -0
- google/adk/tests/integration/fixture/home_automation_agent/agent.py +304 -0
- google/adk/tests/integration/fixture/home_automation_agent/simple_test.test.json +5 -0
- google/adk/tests/integration/fixture/home_automation_agent/simple_test2.test.json +5 -0
- google/adk/tests/integration/fixture/home_automation_agent/test_config.json +5 -0
- google/adk/tests/integration/fixture/home_automation_agent/test_files/dependent_tool_calls.test.json +18 -0
- google/adk/tests/integration/fixture/home_automation_agent/test_files/memorizing_past_events/eval_data.test.json +17 -0
- google/adk/tests/integration/fixture/home_automation_agent/test_files/memorizing_past_events/test_config.json +6 -0
- google/adk/tests/integration/fixture/home_automation_agent/test_files/simple_multi_turn_conversation.test.json +18 -0
- google/adk/tests/integration/fixture/home_automation_agent/test_files/simple_test.test.json +17 -0
- google/adk/tests/integration/fixture/home_automation_agent/test_files/simple_test2.test.json +5 -0
- google/adk/tests/integration/fixture/home_automation_agent/test_files/test_config.json +5 -0
- google/adk/tests/integration/fixture/tool_agent/__init__.py +15 -0
- google/adk/tests/integration/fixture/tool_agent/agent.py +218 -0
- google/adk/tests/integration/fixture/tool_agent/files/Agent_test_plan.pdf +0 -0
- google/adk/tests/integration/fixture/trip_planner_agent/__init__.py +15 -0
- google/adk/tests/integration/fixture/trip_planner_agent/agent.py +110 -0
- google/adk/tests/integration/fixture/trip_planner_agent/initial.session.json +13 -0
- google/adk/tests/integration/fixture/trip_planner_agent/test_config.json +5 -0
- google/adk/tests/integration/fixture/trip_planner_agent/test_files/initial.session.json +13 -0
- google/adk/tests/integration/fixture/trip_planner_agent/test_files/test_config.json +5 -0
- google/adk/tests/integration/fixture/trip_planner_agent/test_files/trip_inquiry_sub_agent.test.json +7 -0
- google/adk/tests/integration/fixture/trip_planner_agent/trip_inquiry.test.json +19 -0
- google/adk/tests/integration/models/__init__.py +14 -0
- google/adk/tests/integration/models/test_google_llm.py +65 -0
- google/adk/tests/integration/test_callback.py +70 -0
- google/adk/tests/integration/test_context_variable.py +67 -0
- google/adk/tests/integration/test_evalute_agent_in_fixture.py +76 -0
- google/adk/tests/integration/test_multi_agent.py +28 -0
- google/adk/tests/integration/test_multi_turn.py +42 -0
- google/adk/tests/integration/test_single_agent.py +23 -0
- google/adk/tests/integration/test_sub_agent.py +26 -0
- google/adk/tests/integration/test_system_instruction.py +177 -0
- google/adk/tests/integration/test_tools.py +287 -0
- google/adk/tests/integration/test_with_test_file.py +34 -0
- google/adk/tests/integration/tools/__init__.py +14 -0
- google/adk/tests/integration/utils/__init__.py +16 -0
- google/adk/tests/integration/utils/asserts.py +75 -0
- google/adk/tests/integration/utils/test_runner.py +97 -0
- google/adk/tests/unittests/__init__.py +14 -0
- google/adk/tests/unittests/agents/__init__.py +14 -0
- google/adk/tests/unittests/agents/test_base_agent.py +407 -0
- google/adk/tests/unittests/agents/test_langgraph_agent.py +191 -0
- google/adk/tests/unittests/agents/test_llm_agent_callbacks.py +138 -0
- google/adk/tests/unittests/agents/test_llm_agent_fields.py +231 -0
- google/adk/tests/unittests/agents/test_loop_agent.py +136 -0
- google/adk/tests/unittests/agents/test_parallel_agent.py +92 -0
- google/adk/tests/unittests/agents/test_sequential_agent.py +114 -0
- google/adk/tests/unittests/artifacts/__init__.py +14 -0
- google/adk/tests/unittests/artifacts/test_artifact_service.py +276 -0
- google/adk/tests/unittests/auth/test_auth_handler.py +575 -0
- google/adk/tests/unittests/conftest.py +73 -0
- google/adk/tests/unittests/fast_api/__init__.py +14 -0
- google/adk/tests/unittests/fast_api/test_fast_api.py +269 -0
- google/adk/tests/unittests/flows/__init__.py +14 -0
- google/adk/tests/unittests/flows/llm_flows/__init__.py +14 -0
- google/adk/tests/unittests/flows/llm_flows/_test_examples.py +142 -0
- google/adk/tests/unittests/flows/llm_flows/test_agent_transfer.py +311 -0
- google/adk/tests/unittests/flows/llm_flows/test_functions_long_running.py +244 -0
- google/adk/tests/unittests/flows/llm_flows/test_functions_request_euc.py +346 -0
- google/adk/tests/unittests/flows/llm_flows/test_functions_sequential.py +93 -0
- google/adk/tests/unittests/flows/llm_flows/test_functions_simple.py +258 -0
- google/adk/tests/unittests/flows/llm_flows/test_identity.py +66 -0
- google/adk/tests/unittests/flows/llm_flows/test_instructions.py +164 -0
- google/adk/tests/unittests/flows/llm_flows/test_model_callbacks.py +142 -0
- google/adk/tests/unittests/flows/llm_flows/test_other_configs.py +46 -0
- google/adk/tests/unittests/flows/llm_flows/test_tool_callbacks.py +269 -0
- google/adk/tests/unittests/models/__init__.py +14 -0
- google/adk/tests/unittests/models/test_google_llm.py +224 -0
- google/adk/tests/unittests/models/test_litellm.py +804 -0
- google/adk/tests/unittests/models/test_models.py +60 -0
- google/adk/tests/unittests/sessions/__init__.py +14 -0
- google/adk/tests/unittests/sessions/test_session_service.py +227 -0
- google/adk/tests/unittests/sessions/test_vertex_ai_session_service.py +246 -0
- google/adk/tests/unittests/streaming/__init__.py +14 -0
- google/adk/tests/unittests/streaming/test_streaming.py +50 -0
- google/adk/tests/unittests/tools/__init__.py +14 -0
- google/adk/tests/unittests/tools/apihub_tool/clients/test_apihub_client.py +499 -0
- google/adk/tests/unittests/tools/apihub_tool/test_apihub_toolset.py +204 -0
- google/adk/tests/unittests/tools/application_integration_tool/clients/test_connections_client.py +600 -0
- google/adk/tests/unittests/tools/application_integration_tool/clients/test_integration_client.py +630 -0
- google/adk/tests/unittests/tools/application_integration_tool/test_application_integration_toolset.py +345 -0
- google/adk/tests/unittests/tools/google_api_tool/__init__.py +13 -0
- google/adk/tests/unittests/tools/google_api_tool/test_googleapi_to_openapi_converter.py +657 -0
- google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_auto_auth_credential_exchanger.py +145 -0
- google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_base_auth_credential_exchanger.py +68 -0
- google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_oauth2_exchanger.py +153 -0
- google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_service_account_exchanger.py +196 -0
- google/adk/tests/unittests/tools/openapi_tool/auth/test_auth_helper.py +573 -0
- google/adk/tests/unittests/tools/openapi_tool/common/test_common.py +436 -0
- google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test.yaml +1367 -0
- google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_openapi_spec_parser.py +628 -0
- google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_openapi_toolset.py +139 -0
- google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_operation_parser.py +406 -0
- google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_rest_api_tool.py +966 -0
- google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_tool_auth_handler.py +201 -0
- google/adk/tests/unittests/tools/retrieval/__init__.py +14 -0
- google/adk/tests/unittests/tools/retrieval/test_vertex_ai_rag_retrieval.py +147 -0
- google/adk/tests/unittests/tools/test_agent_tool.py +167 -0
- google/adk/tests/unittests/tools/test_base_tool.py +141 -0
- google/adk/tests/unittests/tools/test_build_function_declaration.py +277 -0
- google/adk/tests/unittests/utils.py +304 -0
- google/adk/tools/__init__.py +51 -0
- google/adk/tools/_automatic_function_calling_util.py +346 -0
- google/adk/tools/agent_tool.py +176 -0
- google/adk/tools/apihub_tool/__init__.py +19 -0
- google/adk/tools/apihub_tool/apihub_toolset.py +209 -0
- google/adk/tools/apihub_tool/clients/__init__.py +13 -0
- google/adk/tools/apihub_tool/clients/apihub_client.py +332 -0
- google/adk/tools/apihub_tool/clients/secret_client.py +115 -0
- google/adk/tools/application_integration_tool/__init__.py +19 -0
- google/adk/tools/application_integration_tool/application_integration_toolset.py +230 -0
- google/adk/tools/application_integration_tool/clients/connections_client.py +903 -0
- google/adk/tools/application_integration_tool/clients/integration_client.py +253 -0
- google/adk/tools/base_tool.py +144 -0
- google/adk/tools/built_in_code_execution_tool.py +59 -0
- google/adk/tools/crewai_tool.py +72 -0
- google/adk/tools/example_tool.py +62 -0
- google/adk/tools/exit_loop_tool.py +23 -0
- google/adk/tools/function_parameter_parse_util.py +307 -0
- google/adk/tools/function_tool.py +87 -0
- google/adk/tools/get_user_choice_tool.py +28 -0
- google/adk/tools/google_api_tool/__init__.py +14 -0
- google/adk/tools/google_api_tool/google_api_tool.py +59 -0
- google/adk/tools/google_api_tool/google_api_tool_set.py +107 -0
- google/adk/tools/google_api_tool/google_api_tool_sets.py +55 -0
- google/adk/tools/google_api_tool/googleapi_to_openapi_converter.py +521 -0
- google/adk/tools/google_search_tool.py +68 -0
- google/adk/tools/langchain_tool.py +86 -0
- google/adk/tools/load_artifacts_tool.py +113 -0
- google/adk/tools/load_memory_tool.py +58 -0
- google/adk/tools/load_web_page.py +41 -0
- google/adk/tools/long_running_tool.py +39 -0
- google/adk/tools/mcp_tool/__init__.py +42 -0
- google/adk/tools/mcp_tool/conversion_utils.py +161 -0
- google/adk/tools/mcp_tool/mcp_tool.py +113 -0
- google/adk/tools/mcp_tool/mcp_toolset.py +272 -0
- google/adk/tools/openapi_tool/__init__.py +21 -0
- google/adk/tools/openapi_tool/auth/__init__.py +19 -0
- google/adk/tools/openapi_tool/auth/auth_helpers.py +498 -0
- google/adk/tools/openapi_tool/auth/credential_exchangers/__init__.py +25 -0
- google/adk/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.py +105 -0
- google/adk/tools/openapi_tool/auth/credential_exchangers/base_credential_exchanger.py +55 -0
- google/adk/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.py +117 -0
- google/adk/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.py +97 -0
- google/adk/tools/openapi_tool/common/__init__.py +19 -0
- google/adk/tools/openapi_tool/common/common.py +300 -0
- google/adk/tools/openapi_tool/openapi_spec_parser/__init__.py +32 -0
- google/adk/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.py +231 -0
- google/adk/tools/openapi_tool/openapi_spec_parser/openapi_toolset.py +144 -0
- google/adk/tools/openapi_tool/openapi_spec_parser/operation_parser.py +260 -0
- google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py +496 -0
- google/adk/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.py +268 -0
- google/adk/tools/preload_memory_tool.py +72 -0
- google/adk/tools/retrieval/__init__.py +36 -0
- google/adk/tools/retrieval/base_retrieval_tool.py +37 -0
- google/adk/tools/retrieval/files_retrieval.py +33 -0
- google/adk/tools/retrieval/llama_index_retrieval.py +41 -0
- google/adk/tools/retrieval/vertex_ai_rag_retrieval.py +107 -0
- google/adk/tools/tool_context.py +90 -0
- google/adk/tools/toolbox_tool.py +46 -0
- google/adk/tools/transfer_to_agent_tool.py +21 -0
- google/adk/tools/vertex_ai_search_tool.py +96 -0
- google/adk/version.py +16 -0
- google_adk-0.0.3.dist-info/METADATA +73 -0
- google_adk-0.0.3.dist-info/RECORD +340 -0
- {google_adk-0.0.1.dist-info → google_adk-0.0.3.dist-info}/WHEEL +1 -2
- google_adk-0.0.3.dist-info/entry_points.txt +3 -0
- agent_kit/__init__.py +0 -0
- google_adk-0.0.1.dist-info/LICENSE.txt +0 -170
- google_adk-0.0.1.dist-info/METADATA +0 -15
- google_adk-0.0.1.dist-info/RECORD +0 -6
- 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)
|