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,181 @@
|
|
1
|
+
# Copyright 2025 Google LLC
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
from typing import Optional
|
18
|
+
import uuid
|
19
|
+
|
20
|
+
from google.genai import types
|
21
|
+
from pydantic import BaseModel
|
22
|
+
from pydantic import ConfigDict
|
23
|
+
|
24
|
+
from ..artifacts.base_artifact_service import BaseArtifactService
|
25
|
+
from ..memory.base_memory_service import BaseMemoryService
|
26
|
+
from ..sessions.base_session_service import BaseSessionService
|
27
|
+
from ..sessions.session import Session
|
28
|
+
from .active_streaming_tool import ActiveStreamingTool
|
29
|
+
from .base_agent import BaseAgent
|
30
|
+
from .live_request_queue import LiveRequestQueue
|
31
|
+
from .run_config import RunConfig
|
32
|
+
from .transcription_entry import TranscriptionEntry
|
33
|
+
|
34
|
+
|
35
|
+
class LlmCallsLimitExceededError(Exception):
|
36
|
+
"""Error thrown when the number of LLM calls exceed the limit."""
|
37
|
+
|
38
|
+
|
39
|
+
class _InvocationCostManager(BaseModel):
|
40
|
+
"""A container to keep track of the cost of invocation.
|
41
|
+
|
42
|
+
While we don't expected the metrics captured here to be a direct
|
43
|
+
representatative of monetary cost incurred in executing the current
|
44
|
+
invocation, but they, in someways have an indirect affect.
|
45
|
+
"""
|
46
|
+
|
47
|
+
_number_of_llm_calls: int = 0
|
48
|
+
"""A counter that keeps track of number of llm calls made."""
|
49
|
+
|
50
|
+
def increment_and_enforce_llm_calls_limit(
|
51
|
+
self, run_config: Optional[RunConfig]
|
52
|
+
):
|
53
|
+
"""Increments _number_of_llm_calls and enforces the limit."""
|
54
|
+
# We first increment the counter and then check the conditions.
|
55
|
+
self._number_of_llm_calls += 1
|
56
|
+
|
57
|
+
if (
|
58
|
+
run_config
|
59
|
+
and run_config.max_llm_calls > 0
|
60
|
+
and self._number_of_llm_calls > run_config.max_llm_calls
|
61
|
+
):
|
62
|
+
# We only enforce the limit if the limit is a positive number.
|
63
|
+
raise LlmCallsLimitExceededError(
|
64
|
+
"Max number of llm calls limit of"
|
65
|
+
f" `{run_config.max_llm_calls}` exceeded"
|
66
|
+
)
|
67
|
+
|
68
|
+
|
69
|
+
class InvocationContext(BaseModel):
|
70
|
+
"""An invocation context represents the data of a single invocation of an agent.
|
71
|
+
|
72
|
+
An invocation:
|
73
|
+
1. Starts with a user message and ends with a final response.
|
74
|
+
2. Can contain one or multiple agent calls.
|
75
|
+
3. Is handled by runner.run_async().
|
76
|
+
|
77
|
+
An invocation runs an agent until it does not request to transfer to another
|
78
|
+
agent.
|
79
|
+
|
80
|
+
An agent call:
|
81
|
+
1. Is handled by agent.run().
|
82
|
+
2. Ends when agent.run() ends.
|
83
|
+
|
84
|
+
An LLM agent call is an agent with a BaseLLMFlow.
|
85
|
+
An LLM agent call can contain one or multiple steps.
|
86
|
+
|
87
|
+
An LLM agent runs steps in a loop until:
|
88
|
+
1. A final response is generated.
|
89
|
+
2. The agent transfers to another agent.
|
90
|
+
3. The end_invocation is set to true by any callbacks or tools.
|
91
|
+
|
92
|
+
A step:
|
93
|
+
1. Calls the LLM only once and yields its response.
|
94
|
+
2. Calls the tools and yields their responses if requested.
|
95
|
+
|
96
|
+
The summarization of the function response is considered another step, since
|
97
|
+
it is another llm call.
|
98
|
+
A step ends when it's done calling llm and tools, or if the end_invocation
|
99
|
+
is set to true at any time.
|
100
|
+
|
101
|
+
```
|
102
|
+
┌─────────────────────── invocation ──────────────────────────┐
|
103
|
+
┌──────────── llm_agent_call_1 ────────────┐ ┌─ agent_call_2 ─┐
|
104
|
+
┌──── step_1 ────────┐ ┌───── step_2 ──────┐
|
105
|
+
[call_llm] [call_tool] [call_llm] [transfer]
|
106
|
+
```
|
107
|
+
"""
|
108
|
+
|
109
|
+
model_config = ConfigDict(
|
110
|
+
arbitrary_types_allowed=True,
|
111
|
+
extra="forbid",
|
112
|
+
)
|
113
|
+
|
114
|
+
artifact_service: Optional[BaseArtifactService] = None
|
115
|
+
session_service: BaseSessionService
|
116
|
+
memory_service: Optional[BaseMemoryService] = None
|
117
|
+
|
118
|
+
invocation_id: str
|
119
|
+
"""The id of this invocation context. Readonly."""
|
120
|
+
branch: Optional[str] = None
|
121
|
+
"""The branch of the invocation context.
|
122
|
+
|
123
|
+
The format is like agent_1.agent_2.agent_3, where agent_1 is the parent of
|
124
|
+
agent_2, and agent_2 is the parent of agent_3.
|
125
|
+
|
126
|
+
Branch is used when multiple sub-agents shouldn't see their peer agents'
|
127
|
+
conversaction history.
|
128
|
+
"""
|
129
|
+
agent: BaseAgent
|
130
|
+
"""The current agent of this invocation context. Readonly."""
|
131
|
+
user_content: Optional[types.Content] = None
|
132
|
+
"""The user content that started this invocation. Readonly."""
|
133
|
+
session: Session
|
134
|
+
"""The current session of this invocation context. Readonly."""
|
135
|
+
|
136
|
+
end_invocation: bool = False
|
137
|
+
"""Whether to end this invocation.
|
138
|
+
|
139
|
+
Set to True in callbacks or tools to terminate this invocation."""
|
140
|
+
|
141
|
+
live_request_queue: Optional[LiveRequestQueue] = None
|
142
|
+
"""The queue to receive live requests."""
|
143
|
+
|
144
|
+
active_streaming_tools: Optional[dict[str, ActiveStreamingTool]] = None
|
145
|
+
"""The running streaming tools of this invocation."""
|
146
|
+
|
147
|
+
transcription_cache: Optional[list[TranscriptionEntry]] = None
|
148
|
+
"""Caches necessary, data audio or contents, that are needed by transcription."""
|
149
|
+
|
150
|
+
run_config: Optional[RunConfig] = None
|
151
|
+
"""Configurations for live agents under this invocation."""
|
152
|
+
|
153
|
+
_invocation_cost_manager: _InvocationCostManager = _InvocationCostManager()
|
154
|
+
"""A container to keep track of different kinds of costs incurred as a part
|
155
|
+
of this invocation.
|
156
|
+
"""
|
157
|
+
|
158
|
+
def increment_llm_call_count(
|
159
|
+
self,
|
160
|
+
):
|
161
|
+
"""Tracks number of llm calls made.
|
162
|
+
|
163
|
+
Raises:
|
164
|
+
LlmCallsLimitExceededError: If number of llm calls made exceed the set
|
165
|
+
threshold.
|
166
|
+
"""
|
167
|
+
self._invocation_cost_manager.increment_and_enforce_llm_calls_limit(
|
168
|
+
self.run_config
|
169
|
+
)
|
170
|
+
|
171
|
+
@property
|
172
|
+
def app_name(self) -> str:
|
173
|
+
return self.session.app_name
|
174
|
+
|
175
|
+
@property
|
176
|
+
def user_id(self) -> str:
|
177
|
+
return self.session.user_id
|
178
|
+
|
179
|
+
|
180
|
+
def new_invocation_context_id() -> str:
|
181
|
+
return "e-" + str(uuid.uuid4())
|
@@ -0,0 +1,140 @@
|
|
1
|
+
# Copyright 2025 Google LLC
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
from typing import AsyncGenerator
|
16
|
+
from typing import Union
|
17
|
+
|
18
|
+
from google.genai import types
|
19
|
+
from langchain_core.messages import AIMessage
|
20
|
+
from langchain_core.messages import HumanMessage
|
21
|
+
from langchain_core.messages import SystemMessage
|
22
|
+
from langchain_core.runnables.config import RunnableConfig
|
23
|
+
from langgraph.graph.graph import CompiledGraph
|
24
|
+
from pydantic import ConfigDict
|
25
|
+
from typing_extensions import override
|
26
|
+
|
27
|
+
from ..events.event import Event
|
28
|
+
from .base_agent import BaseAgent
|
29
|
+
from .invocation_context import InvocationContext
|
30
|
+
|
31
|
+
|
32
|
+
def _get_last_human_messages(events: list[Event]) -> list[HumanMessage]:
|
33
|
+
"""Extracts last human messages from given list of events.
|
34
|
+
|
35
|
+
Args:
|
36
|
+
events: the list of events
|
37
|
+
|
38
|
+
Returns:
|
39
|
+
list of last human messages
|
40
|
+
"""
|
41
|
+
messages = []
|
42
|
+
for event in reversed(events):
|
43
|
+
if messages and event.author != 'user':
|
44
|
+
break
|
45
|
+
if event.author == 'user' and event.content and event.content.parts:
|
46
|
+
messages.append(HumanMessage(content=event.content.parts[0].text))
|
47
|
+
return list(reversed(messages))
|
48
|
+
|
49
|
+
|
50
|
+
class LangGraphAgent(BaseAgent):
|
51
|
+
"""Currently a concept implementation, supports single and multi-turn."""
|
52
|
+
|
53
|
+
model_config = ConfigDict(
|
54
|
+
arbitrary_types_allowed=True,
|
55
|
+
)
|
56
|
+
|
57
|
+
graph: CompiledGraph
|
58
|
+
|
59
|
+
instruction: str = ''
|
60
|
+
|
61
|
+
@override
|
62
|
+
async def _run_async_impl(
|
63
|
+
self,
|
64
|
+
ctx: InvocationContext,
|
65
|
+
) -> AsyncGenerator[Event, None]:
|
66
|
+
|
67
|
+
# Needed for langgraph checkpointer (for subsequent invocations; multi-turn)
|
68
|
+
config: RunnableConfig = {'configurable': {'thread_id': ctx.session.id}}
|
69
|
+
|
70
|
+
# Add instruction as SystemMessage if graph state is empty
|
71
|
+
current_graph_state = self.graph.get_state(config)
|
72
|
+
graph_messages = (
|
73
|
+
current_graph_state.values.get('messages', [])
|
74
|
+
if current_graph_state.values
|
75
|
+
else []
|
76
|
+
)
|
77
|
+
messages = (
|
78
|
+
[SystemMessage(content=self.instruction)]
|
79
|
+
if self.instruction and not graph_messages
|
80
|
+
else []
|
81
|
+
)
|
82
|
+
# Add events to messages (evaluating the memory used; parent agent vs checkpointer)
|
83
|
+
messages += self._get_messages(ctx.session.events)
|
84
|
+
|
85
|
+
# Use the Runnable
|
86
|
+
final_state = self.graph.invoke({'messages': messages}, config)
|
87
|
+
result = final_state['messages'][-1].content
|
88
|
+
|
89
|
+
result_event = Event(
|
90
|
+
invocation_id=ctx.invocation_id,
|
91
|
+
author=self.name,
|
92
|
+
branch=ctx.branch,
|
93
|
+
content=types.Content(
|
94
|
+
role='model',
|
95
|
+
parts=[types.Part.from_text(text=result)],
|
96
|
+
),
|
97
|
+
)
|
98
|
+
yield result_event
|
99
|
+
|
100
|
+
def _get_messages(
|
101
|
+
self, events: list[Event]
|
102
|
+
) -> list[Union[HumanMessage, AIMessage]]:
|
103
|
+
"""Extracts messages from given list of events.
|
104
|
+
|
105
|
+
If the developer provides their own memory within langgraph, we return the
|
106
|
+
last user messages only. Otherwise, we return all messages between the user
|
107
|
+
and the agent.
|
108
|
+
|
109
|
+
Args:
|
110
|
+
events: the list of events
|
111
|
+
|
112
|
+
Returns:
|
113
|
+
list of messages
|
114
|
+
"""
|
115
|
+
if self.graph.checkpointer:
|
116
|
+
return _get_last_human_messages(events)
|
117
|
+
else:
|
118
|
+
return self._get_conversation_with_agent(events)
|
119
|
+
|
120
|
+
def _get_conversation_with_agent(
|
121
|
+
self, events: list[Event]
|
122
|
+
) -> list[Union[HumanMessage, AIMessage]]:
|
123
|
+
"""Extracts messages from given list of events.
|
124
|
+
|
125
|
+
Args:
|
126
|
+
events: the list of events
|
127
|
+
|
128
|
+
Returns:
|
129
|
+
list of messages
|
130
|
+
"""
|
131
|
+
|
132
|
+
messages = []
|
133
|
+
for event in events:
|
134
|
+
if not event.content or not event.content.parts:
|
135
|
+
continue
|
136
|
+
if event.author == 'user':
|
137
|
+
messages.append(HumanMessage(content=event.content.parts[0].text))
|
138
|
+
elif event.author == self.name:
|
139
|
+
messages.append(AIMessage(content=event.content.parts[0].text))
|
140
|
+
return messages
|
@@ -0,0 +1,64 @@
|
|
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 typing import Optional
|
17
|
+
|
18
|
+
from google.genai import types
|
19
|
+
from pydantic import BaseModel
|
20
|
+
from pydantic import ConfigDict
|
21
|
+
|
22
|
+
|
23
|
+
class LiveRequest(BaseModel):
|
24
|
+
"""Request send to live agents."""
|
25
|
+
|
26
|
+
model_config = ConfigDict(ser_json_bytes='base64', val_json_bytes='base64')
|
27
|
+
|
28
|
+
content: Optional[types.Content] = None
|
29
|
+
"""If set, send the content to the model in turn-by-turn mode."""
|
30
|
+
blob: Optional[types.Blob] = None
|
31
|
+
"""If set, send the blob to the model in realtime mode."""
|
32
|
+
close: bool = False
|
33
|
+
"""If set, close the queue. queue.shutdown() is only supported in Python 3.13+."""
|
34
|
+
|
35
|
+
|
36
|
+
class LiveRequestQueue:
|
37
|
+
"""Queue used to send LiveRequest in a live(bidirectional streaming) way."""
|
38
|
+
|
39
|
+
def __init__(self):
|
40
|
+
# Ensure there's an event loop available in this thread
|
41
|
+
try:
|
42
|
+
asyncio.get_running_loop()
|
43
|
+
except RuntimeError:
|
44
|
+
# No running loop, create one
|
45
|
+
loop = asyncio.new_event_loop()
|
46
|
+
asyncio.set_event_loop(loop)
|
47
|
+
|
48
|
+
# Now create the queue (it will use the event loop we just ensured exists)
|
49
|
+
self._queue = asyncio.Queue()
|
50
|
+
|
51
|
+
def close(self):
|
52
|
+
self._queue.put_nowait(LiveRequest(close=True))
|
53
|
+
|
54
|
+
def send_content(self, content: types.Content):
|
55
|
+
self._queue.put_nowait(LiveRequest(content=content))
|
56
|
+
|
57
|
+
def send_realtime(self, blob: types.Blob):
|
58
|
+
self._queue.put_nowait(LiveRequest(blob=blob))
|
59
|
+
|
60
|
+
def send(self, req: LiveRequest):
|
61
|
+
self._queue.put_nowait(req)
|
62
|
+
|
63
|
+
async def get(self) -> LiveRequest:
|
64
|
+
return await self._queue.get()
|