agent-starter-pack 0.3.3__py3-none-any.whl → 0.21.0__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.
- agent_starter_pack/agents/README.md +7 -0
- agents/langgraph_base_react/template/.templateconfig.yaml → agent_starter_pack/agents/adk_a2a_base/.template/templateconfig.yaml +5 -10
- agent_starter_pack/agents/adk_a2a_base/README.md +37 -0
- src/deployment_targets/cloud_run/Dockerfile → agent_starter_pack/agents/adk_a2a_base/app/__init__.py +2 -14
- agent_starter_pack/agents/adk_a2a_base/app/agent.py +70 -0
- agent_starter_pack/agents/adk_a2a_base/notebooks/adk_a2a_app_testing.ipynb +583 -0
- agents/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb → agent_starter_pack/agents/adk_a2a_base/notebooks/evaluating_adk_agent.ipynb +163 -199
- {agents/adk_base → agent_starter_pack/agents/adk_a2a_base}/tests/integration/test_agent.py +2 -2
- agents/adk_base/template/.templateconfig.yaml → agent_starter_pack/agents/adk_base/.template/templateconfig.yaml +4 -1
- {agents → agent_starter_pack/agents}/adk_base/README.md +1 -1
- agent_starter_pack/agents/adk_base/app/__init__.py +17 -0
- {agents → agent_starter_pack/agents}/adk_base/app/agent.py +5 -2
- {agents → agent_starter_pack/agents}/adk_base/notebooks/adk_app_testing.ipynb +128 -82
- agents/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb → agent_starter_pack/agents/adk_base/notebooks/evaluating_adk_agent.ipynb +181 -207
- agent_starter_pack/agents/adk_base/tests/integration/test_agent.py +58 -0
- agents/crewai_coding_crew/template/.templateconfig.yaml → agent_starter_pack/agents/adk_live/.template/templateconfig.yaml +5 -9
- agent_starter_pack/agents/adk_live/README.md +32 -0
- agent_starter_pack/agents/adk_live/app/__init__.py +17 -0
- agent_starter_pack/agents/adk_live/app/agent.py +51 -0
- agent_starter_pack/agents/adk_live/tests/unit/test_dummy.py +38 -0
- agents/agentic_rag/template/.templateconfig.yaml → agent_starter_pack/agents/agentic_rag/.template/templateconfig.yaml +7 -3
- {agents → agent_starter_pack/agents}/agentic_rag/README.md +1 -1
- agent_starter_pack/agents/agentic_rag/app/__init__.py +17 -0
- {agents → agent_starter_pack/agents}/agentic_rag/app/agent.py +8 -4
- {agents → agent_starter_pack/agents}/agentic_rag/notebooks/adk_app_testing.ipynb +128 -82
- agent_starter_pack/agents/agentic_rag/notebooks/evaluating_adk_agent.ipynb +1535 -0
- {agents → agent_starter_pack/agents}/agentic_rag/tests/integration/test_agent.py +3 -3
- agent_starter_pack/agents/langgraph_base/.template/templateconfig.yaml +31 -0
- agent_starter_pack/agents/langgraph_base/README.md +30 -0
- agent_starter_pack/agents/langgraph_base/app/__init__.py +17 -0
- agent_starter_pack/agents/langgraph_base/app/agent.py +34 -0
- {agents/crewai_coding_crew → agent_starter_pack/agents/langgraph_base}/notebooks/evaluating_langgraph_agent.ipynb +30 -17
- {agents/langgraph_base_react → agent_starter_pack/agents/langgraph_base}/tests/integration/test_agent.py +2 -2
- {src → agent_starter_pack}/base_template/.gitignore +5 -3
- agent_starter_pack/base_template/GEMINI.md +5 -0
- agent_starter_pack/base_template/Makefile +339 -0
- agent_starter_pack/base_template/README.md +267 -0
- agent_starter_pack/base_template/deployment/README.md +11 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/apis.tf +2 -2
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/apis.tf +6 -1
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/iam.tf +12 -11
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/providers.tf +5 -1
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/storage.tf +1 -1
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/variables.tf +10 -10
- agent_starter_pack/base_template/deployment/terraform/dev/{% if cookiecutter.is_adk %}telemetry.tf{% else %}unused_telemetry.tf{% endif %} +193 -0
- agent_starter_pack/base_template/deployment/terraform/github.tf +337 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/iam.tf +20 -41
- {src → agent_starter_pack}/base_template/deployment/terraform/locals.tf +10 -3
- {src/resources/setup_cicd → agent_starter_pack/base_template/deployment/terraform}/providers.tf +8 -1
- {src → agent_starter_pack}/base_template/deployment/terraform/service_accounts.tf +7 -8
- agent_starter_pack/base_template/deployment/terraform/sql/completions.sql +138 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/storage.tf +7 -16
- {src → agent_starter_pack}/base_template/deployment/terraform/variables.tf +61 -28
- {src → agent_starter_pack}/base_template/deployment/terraform/vars/env.tfvars +6 -1
- agent_starter_pack/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'github_actions' %}wif.tf{% else %}unused_wif.tf{% endif %} +43 -0
- src/base_template/deployment/terraform/build_triggers.tf → agent_starter_pack/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %} +55 -38
- agent_starter_pack/base_template/deployment/terraform/{% if cookiecutter.is_adk %}telemetry.tf{% else %}unused_telemetry.tf{% endif %} +206 -0
- {src → agent_starter_pack}/base_template/pyproject.toml +24 -37
- agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +132 -0
- agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml +65 -0
- agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +259 -0
- src/base_template/deployment/cd/deploy-to-prod.yaml → agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml +38 -30
- src/base_template/deployment/ci/pr_checks.yaml → agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/pr_checks.yaml +5 -5
- agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +322 -0
- agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/telemetry.py +96 -0
- {src/base_template/app/utils → agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils}/typing.py +7 -9
- agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}converters{% else %}unused_converters{% endif %}/__init__.py +25 -0
- agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}converters{% else %}unused_converters{% endif %}/part_converter.py +138 -0
- agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}executor{% else %}unused_executor{% endif %}/__init__.py +13 -0
- agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}executor{% else %}unused_executor{% endif %}/a2a_agent_executor.py +265 -0
- agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}executor{% else %}unused_executor{% endif %}/task_result_aggregator.py +152 -0
- agent_starter_pack/cli/commands/create.py +1256 -0
- agent_starter_pack/cli/commands/enhance.py +611 -0
- agent_starter_pack/cli/commands/list.py +203 -0
- agent_starter_pack/cli/commands/register_gemini_enterprise.py +1070 -0
- agent_starter_pack/cli/commands/setup_cicd.py +862 -0
- {src → agent_starter_pack}/cli/main.py +10 -2
- {src → agent_starter_pack}/cli/utils/cicd.py +139 -48
- agent_starter_pack/cli/utils/gcp.py +263 -0
- agent_starter_pack/cli/utils/logging.py +103 -0
- agent_starter_pack/cli/utils/remote_template.py +677 -0
- agent_starter_pack/cli/utils/template.py +1466 -0
- {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/components/process_data.py +1 -1
- {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/submit_pipeline.py +20 -6
- {src → agent_starter_pack}/data_ingestion/pyproject.toml +1 -0
- {src → agent_starter_pack}/data_ingestion/uv.lock +602 -494
- agent_starter_pack/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +484 -0
- agent_starter_pack/deployment_targets/agent_engine/tests/load_test/README.md +84 -0
- agent_starter_pack/deployment_targets/agent_engine/tests/load_test/load_test.py +424 -0
- agent_starter_pack/deployment_targets/agent_engine/tests/{% if cookiecutter.is_a2a %}helpers.py{% else %}unused_helpers.py{% endif %} +138 -0
- agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/agent_engine_app.py +263 -0
- agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/app_utils/deploy.py +414 -0
- agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_adk_live %}expose_app.py{% else %}unused_expose_app.py{% endif %} +519 -0
- agent_starter_pack/deployment_targets/cloud_run/Dockerfile +51 -0
- agent_starter_pack/deployment_targets/cloud_run/deployment/terraform/dev/service.tf +243 -0
- agent_starter_pack/deployment_targets/cloud_run/deployment/terraform/service.tf +417 -0
- agent_starter_pack/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +705 -0
- agent_starter_pack/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +321 -0
- agent_starter_pack/deployment_targets/cloud_run/tests/load_test/README.md +165 -0
- agent_starter_pack/deployment_targets/cloud_run/tests/load_test/load_test.py +329 -0
- agent_starter_pack/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}/fast_api_app.py +556 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/package-lock.json +79 -1044
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/package.json +1 -9
- agent_starter_pack/frontends/adk_live_react/frontend/src/App.tsx +65 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/Logger.tsx +8 -3
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/logger.scss +26 -0
- agent_starter_pack/frontends/adk_live_react/frontend/src/components/side-panel/SidePanel.tsx +516 -0
- agent_starter_pack/frontends/adk_live_react/frontend/src/components/side-panel/side-panel.scss +563 -0
- agent_starter_pack/frontends/adk_live_react/frontend/src/components/transcription-preview/TranscriptionPreview.tsx +106 -0
- agent_starter_pack/frontends/adk_live_react/frontend/src/components/transcription-preview/transcription-preview.scss +150 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-live-api.ts +8 -2
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/multimodal-live-types.ts +40 -2
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audio-recorder.ts +1 -1
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audio-streamer.ts +1 -1
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/multimodal-live-client.ts +210 -24
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/utils.ts +27 -5
- agent_starter_pack/resources/docs/adk-cheatsheet.md +1628 -0
- agent_starter_pack/resources/locks/uv-adk_a2a_base-agent_engine.lock +4966 -0
- agent_starter_pack/resources/locks/uv-adk_a2a_base-cloud_run.lock +5011 -0
- agent_starter_pack/resources/locks/uv-adk_base-agent_engine.lock +4946 -0
- agent_starter_pack/resources/locks/uv-adk_base-cloud_run.lock +4991 -0
- agent_starter_pack/resources/locks/uv-adk_live-agent_engine.lock +4963 -0
- agent_starter_pack/resources/locks/uv-adk_live-cloud_run.lock +5006 -0
- agent_starter_pack/resources/locks/uv-agentic_rag-agent_engine.lock +5487 -0
- agent_starter_pack/resources/locks/uv-agentic_rag-cloud_run.lock +5532 -0
- agent_starter_pack/resources/locks/uv-langgraph_base-agent_engine.lock +5788 -0
- agent_starter_pack/resources/locks/uv-langgraph_base-cloud_run.lock +5811 -0
- {src → agent_starter_pack}/utils/generate_locks.py +15 -12
- {src → agent_starter_pack}/utils/lock_utils.py +4 -7
- {src → agent_starter_pack}/utils/watch_and_rebuild.py +2 -2
- agent_starter_pack-0.21.0.dist-info/METADATA +182 -0
- agent_starter_pack-0.21.0.dist-info/RECORD +171 -0
- agent_starter_pack-0.21.0.dist-info/entry_points.txt +2 -0
- llm.txt +362 -0
- agent_starter_pack-0.3.3.dist-info/METADATA +0 -164
- agent_starter_pack-0.3.3.dist-info/RECORD +0 -176
- agent_starter_pack-0.3.3.dist-info/entry_points.txt +0 -2
- agents/crewai_coding_crew/README.md +0 -34
- agents/crewai_coding_crew/app/agent.py +0 -86
- agents/crewai_coding_crew/app/crew/config/agents.yaml +0 -39
- agents/crewai_coding_crew/app/crew/config/tasks.yaml +0 -37
- agents/crewai_coding_crew/app/crew/crew.py +0 -71
- agents/crewai_coding_crew/tests/integration/test_agent.py +0 -47
- agents/langgraph_base_react/README.md +0 -9
- agents/langgraph_base_react/app/agent.py +0 -73
- agents/live_api/README.md +0 -37
- agents/live_api/app/agent.py +0 -78
- agents/live_api/app/server.py +0 -196
- agents/live_api/app/templates.py +0 -51
- agents/live_api/app/vector_store.py +0 -55
- agents/live_api/template/.templateconfig.yaml +0 -29
- agents/live_api/tests/integration/test_server_e2e.py +0 -254
- agents/live_api/tests/load_test/load_test.py +0 -40
- agents/live_api/tests/unit/test_server.py +0 -143
- src/base_template/Makefile +0 -72
- src/base_template/README.md +0 -208
- src/base_template/app/__init__.py +0 -3
- src/base_template/app/utils/tracing.py +0 -155
- src/base_template/deployment/README.md +0 -126
- src/base_template/deployment/cd/staging.yaml +0 -216
- src/base_template/deployment/terraform/dev/log_sinks.tf +0 -63
- src/base_template/deployment/terraform/log_sinks.tf +0 -70
- src/base_template/deployment/terraform/providers.tf +0 -37
- src/cli/commands/create.py +0 -664
- src/cli/commands/setup_cicd.py +0 -829
- src/cli/utils/gcp.py +0 -117
- src/cli/utils/logging.py +0 -51
- src/cli/utils/template.py +0 -737
- src/deployment_targets/agent_engine/app/agent_engine_app.py +0 -336
- src/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb +0 -1025
- src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +0 -183
- src/deployment_targets/agent_engine/tests/load_test/README.md +0 -42
- src/deployment_targets/agent_engine/tests/load_test/load_test.py +0 -107
- src/deployment_targets/cloud_run/app/server.py +0 -154
- src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +0 -249
- src/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +0 -0
- src/deployment_targets/cloud_run/tests/load_test/README.md +0 -83
- src/deployment_targets/cloud_run/tests/load_test/load_test.py +0 -118
- src/deployment_targets/cloud_run/uv.lock +0 -6952
- src/frontends/live_api_react/frontend/src/App.tsx +0 -205
- src/frontends/live_api_react/frontend/src/components/control-tray/ControlTray.tsx +0 -217
- src/frontends/live_api_react/frontend/src/components/control-tray/control-tray.scss +0 -201
- src/frontends/live_api_react/frontend/src/components/side-panel/SidePanel.tsx +0 -161
- src/frontends/live_api_react/frontend/src/components/side-panel/side-panel.scss +0 -285
- src/frontends/streamlit/frontend/side_bar.py +0 -214
- src/frontends/streamlit/frontend/streamlit_app.py +0 -265
- src/frontends/streamlit/frontend/style/app_markdown.py +0 -37
- src/frontends/streamlit/frontend/utils/chat_utils.py +0 -67
- src/frontends/streamlit/frontend/utils/local_chat_history.py +0 -125
- src/frontends/streamlit/frontend/utils/message_editing.py +0 -59
- src/frontends/streamlit/frontend/utils/multimodal_utils.py +0 -217
- src/frontends/streamlit/frontend/utils/stream_handler.py +0 -301
- src/frontends/streamlit/frontend/utils/title_summary.py +0 -94
- src/frontends/streamlit_adk/frontend/side_bar.py +0 -214
- src/frontends/streamlit_adk/frontend/streamlit_app.py +0 -314
- src/frontends/streamlit_adk/frontend/style/app_markdown.py +0 -37
- src/frontends/streamlit_adk/frontend/utils/chat_utils.py +0 -84
- src/frontends/streamlit_adk/frontend/utils/local_chat_history.py +0 -110
- src/frontends/streamlit_adk/frontend/utils/message_editing.py +0 -61
- src/frontends/streamlit_adk/frontend/utils/multimodal_utils.py +0 -223
- src/frontends/streamlit_adk/frontend/utils/stream_handler.py +0 -311
- src/frontends/streamlit_adk/frontend/utils/title_summary.py +0 -129
- src/resources/containers/data_processing/Dockerfile +0 -27
- src/resources/containers/e2e-tests/Dockerfile +0 -19
- src/resources/idx/.idx/dev.nix +0 -57
- src/resources/idx/idx-template.json +0 -21
- src/resources/idx/idx-template.nix +0 -26
- src/resources/locks/uv-adk_base-agent_engine.lock +0 -5338
- src/resources/locks/uv-adk_base-cloud_run.lock +0 -5930
- src/resources/locks/uv-agentic_rag-agent_engine.lock +0 -5528
- src/resources/locks/uv-agentic_rag-cloud_run.lock +0 -6120
- src/resources/locks/uv-crewai_coding_crew-agent_engine.lock +0 -6231
- src/resources/locks/uv-crewai_coding_crew-cloud_run.lock +0 -6839
- src/resources/locks/uv-langgraph_base_react-agent_engine.lock +0 -5233
- src/resources/locks/uv-langgraph_base_react-cloud_run.lock +0 -5862
- src/resources/locks/uv-live_api-cloud_run.lock +0 -5832
- src/resources/setup_cicd/cicd_variables.tf +0 -41
- src/resources/setup_cicd/github.tf +0 -87
- {agents → agent_starter_pack/agents}/agentic_rag/app/retrievers.py +0 -0
- {agents → agent_starter_pack/agents}/agentic_rag/app/templates.py +0 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/vars/env.tfvars +0 -0
- {src → agent_starter_pack}/base_template/tests/unit/test_dummy.py +0 -0
- {src/deployment_targets/agent_engine/app/utils → agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils}/gcs.py +0 -0
- {src → agent_starter_pack}/cli/utils/__init__.py +0 -0
- {src → agent_starter_pack}/cli/utils/datastores.py +0 -0
- {src → agent_starter_pack}/cli/utils/version.py +0 -0
- {src → agent_starter_pack}/data_ingestion/README.md +0 -0
- {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/components/ingest_data.py +0 -0
- {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/pipeline.py +0 -0
- {src → agent_starter_pack}/deployment_targets/agent_engine/deployment_metadata.json +0 -0
- {src → agent_starter_pack}/deployment_targets/agent_engine/tests/load_test/.results/.placeholder +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/favicon.ico +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/index.html +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/robots.txt +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.scss +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.test.tsx +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/audio-pulse/AudioPulse.tsx +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/audio-pulse/audio-pulse.scss +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/mock-logs.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/contexts/LiveAPIContext.tsx +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-media-stream-mux.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-screen-capture.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-webcam.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/index.css +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/index.tsx +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/react-app-env.d.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/reportWebVitals.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/setupTests.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audioworklet-registry.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/store-logger.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/worklets/audio-processing.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/worklets/vol-meter.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/tsconfig.json +0 -0
- {agent_starter_pack-0.3.3.dist-info → agent_starter_pack-0.21.0.dist-info}/WHEEL +0 -0
- {agent_starter_pack-0.3.3.dist-info → agent_starter_pack-0.21.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
"outputs": [],
|
|
10
10
|
"source": [
|
|
11
|
-
"# Copyright
|
|
11
|
+
"# Copyright 2025 Google LLC\n",
|
|
12
12
|
"#\n",
|
|
13
13
|
"# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
|
|
14
14
|
"# you may not use this file except in compliance with the License.\n",
|
|
@@ -29,26 +29,26 @@
|
|
|
29
29
|
"id": "JAPoU8Sm5E6e"
|
|
30
30
|
},
|
|
31
31
|
"source": [
|
|
32
|
-
"#
|
|
32
|
+
"# Evaluate your ADK agent using Vertex AI Gen AI Evaluation service\n",
|
|
33
33
|
"\n",
|
|
34
34
|
"<table align=\"left\">\n",
|
|
35
35
|
" <td style=\"text-align: center\">\n",
|
|
36
|
-
" <a href=\"https://colab.research.google.com/github/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/
|
|
36
|
+
" <a href=\"https://colab.research.google.com/github/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/evaluating_adk_agent.ipynb\">\n",
|
|
37
37
|
" <img width=\"32px\" src=\"https://www.gstatic.com/pantheon/images/bigquery/welcome_page/colab-logo.svg\" alt=\"Google Colaboratory logo\"><br> Open in Colab\n",
|
|
38
38
|
" </a>\n",
|
|
39
39
|
" </td>\n",
|
|
40
40
|
" <td style=\"text-align: center\">\n",
|
|
41
|
-
" <a href=\"https://console.cloud.google.com/vertex-ai/colab/import/https:%2F%2Fraw.githubusercontent.com%2FGoogleCloudPlatform%2Fgenerative-ai%2Fmain%2Fgemini%2Fevaluation%
|
|
41
|
+
" <a href=\"https://console.cloud.google.com/vertex-ai/colab/import/https:%2F%2Fraw.githubusercontent.com%2FGoogleCloudPlatform%2Fgenerative-ai%2Fmain%2Fgemini%2Fevaluation%2Fevaluating_adk_agent.ipynb\">\n",
|
|
42
42
|
" <img width=\"32px\" src=\"https://lh3.googleusercontent.com/JmcxdQi-qOpctIvWKgPtrzZdJJK-J3sWE1RsfjZNwshCFgE_9fULcNpuXYTilIR2hjwN\" alt=\"Google Cloud Colab Enterprise logo\"><br> Open in Colab Enterprise\n",
|
|
43
43
|
" </a>\n",
|
|
44
44
|
" </td>\n",
|
|
45
45
|
" <td style=\"text-align: center\">\n",
|
|
46
|
-
" <a href=\"https://console.cloud.google.com/vertex-ai/workbench/deploy-notebook?download_url=https://raw.githubusercontent.com/GoogleCloudPlatform/generative-ai/main/gemini/evaluation/
|
|
46
|
+
" <a href=\"https://console.cloud.google.com/vertex-ai/workbench/deploy-notebook?download_url=https://raw.githubusercontent.com/GoogleCloudPlatform/generative-ai/main/gemini/evaluation/evaluating_adk_agent.ipynb\">\n",
|
|
47
47
|
" <img src=\"https://www.gstatic.com/images/branding/gcpiconscolors/vertexai/v1/32px.svg\" alt=\"Vertex AI logo\"><br> Open in Vertex AI Workbench\n",
|
|
48
48
|
" </a>\n",
|
|
49
49
|
" </td>\n",
|
|
50
50
|
" <td style=\"text-align: center\">\n",
|
|
51
|
-
" <a href=\"https://github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/
|
|
51
|
+
" <a href=\"https://github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/evaluating_adk_agent.ipynb\">\n",
|
|
52
52
|
" <img width=\"32px\" src=\"https://www.svgrepo.com/download/217753/github.svg\" alt=\"GitHub logo\"><br> View on GitHub\n",
|
|
53
53
|
" </a>\n",
|
|
54
54
|
" </td>\n",
|
|
@@ -58,23 +58,23 @@
|
|
|
58
58
|
"\n",
|
|
59
59
|
"<b>Share to:</b>\n",
|
|
60
60
|
"\n",
|
|
61
|
-
"<a href=\"https://www.linkedin.com/sharing/share-offsite/?url=https%3A//github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/
|
|
61
|
+
"<a href=\"https://www.linkedin.com/sharing/share-offsite/?url=https%3A//github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/evaluating_adk_agent.ipynb\" target=\"_blank\">\n",
|
|
62
62
|
" <img width=\"20px\" src=\"https://upload.wikimedia.org/wikipedia/commons/8/81/LinkedIn_icon.svg\" alt=\"LinkedIn logo\">\n",
|
|
63
63
|
"</a>\n",
|
|
64
64
|
"\n",
|
|
65
|
-
"<a href=\"https://bsky.app/intent/compose?text=https%3A//github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/
|
|
65
|
+
"<a href=\"https://bsky.app/intent/compose?text=https%3A//github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/evaluating_adk_agent.ipynb\" target=\"_blank\">\n",
|
|
66
66
|
" <img width=\"20px\" src=\"https://upload.wikimedia.org/wikipedia/commons/7/7a/Bluesky_Logo.svg\" alt=\"Bluesky logo\">\n",
|
|
67
67
|
"</a>\n",
|
|
68
68
|
"\n",
|
|
69
|
-
"<a href=\"https://twitter.com/intent/tweet?url=https%3A//github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/
|
|
69
|
+
"<a href=\"https://twitter.com/intent/tweet?url=https%3A//github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/evaluating_adk_agent.ipynb\" target=\"_blank\">\n",
|
|
70
70
|
" <img width=\"20px\" src=\"https://upload.wikimedia.org/wikipedia/commons/5/5a/X_icon_2.svg\" alt=\"X logo\">\n",
|
|
71
71
|
"</a>\n",
|
|
72
72
|
"\n",
|
|
73
|
-
"<a href=\"https://reddit.com/submit?url=https%3A//github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/
|
|
73
|
+
"<a href=\"https://reddit.com/submit?url=https%3A//github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/evaluating_adk_agent.ipynb\" target=\"_blank\">\n",
|
|
74
74
|
" <img width=\"20px\" src=\"https://redditinc.com/hubfs/Reddit%20Inc/Brand/Reddit_Logo.png\" alt=\"Reddit logo\">\n",
|
|
75
75
|
"</a>\n",
|
|
76
76
|
"\n",
|
|
77
|
-
"<a href=\"https://www.facebook.com/sharer/sharer.php?u=https%3A//github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/
|
|
77
|
+
"<a href=\"https://www.facebook.com/sharer/sharer.php?u=https%3A//github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/evaluation/evaluating_adk_agent.ipynb\" target=\"_blank\">\n",
|
|
78
78
|
" <img width=\"20px\" src=\"https://upload.wikimedia.org/wikipedia/commons/5/51/Facebook_f_logo_%282019%29.svg\" alt=\"Facebook logo\">\n",
|
|
79
79
|
"</a>"
|
|
80
80
|
]
|
|
@@ -85,9 +85,9 @@
|
|
|
85
85
|
"id": "84f0f73a0f76"
|
|
86
86
|
},
|
|
87
87
|
"source": [
|
|
88
|
-
"|
|
|
89
|
-
"
|
|
90
|
-
"|
|
|
88
|
+
"| Author(s) |\n",
|
|
89
|
+
"| --- |\n",
|
|
90
|
+
"| [Ivan Nardini](https://github.com/inardini) |"
|
|
91
91
|
]
|
|
92
92
|
},
|
|
93
93
|
{
|
|
@@ -98,23 +98,17 @@
|
|
|
98
98
|
"source": [
|
|
99
99
|
"## Overview\n",
|
|
100
100
|
"\n",
|
|
101
|
-
"
|
|
101
|
+
"Agent Development Kit (ADK in short) is a flexible and modular open source framework for developing and deploying AI agents. While ADK has its own evaluation module, using Vertex AI Gen AI Evaluation provides a toolkit of quality controlled and explainable methods and metrics to evaluate any generative model or application, including agents, and benchmark the evaluation results against your own judgment, using your own evaluation criteria.\n",
|
|
102
102
|
"\n",
|
|
103
|
-
"
|
|
104
|
-
"\n",
|
|
105
|
-
"This tutorial shows how to evaluate a LangGraph agent using Vertex AI Gen AI Evaluation for agent evaluation.\n",
|
|
106
|
-
"\n",
|
|
107
|
-
"The tutorial uses the following Google Cloud services and resources:\n",
|
|
108
|
-
"\n",
|
|
109
|
-
"* Vertex AI Gen AI Evaluation\n",
|
|
103
|
+
"This tutorial shows how to evaluate an ADK agent using Vertex AI Gen AI Evaluation for agent evaluation.\n",
|
|
110
104
|
"\n",
|
|
111
105
|
"The steps performed include:\n",
|
|
112
106
|
"\n",
|
|
113
|
-
"* Build local agent using
|
|
107
|
+
"* Build local agent using ADK\n",
|
|
114
108
|
"* Prepare Agent Evaluation dataset\n",
|
|
115
109
|
"* Single tool usage evaluation\n",
|
|
116
110
|
"* Trajectory evaluation\n",
|
|
117
|
-
"* Response evaluation
|
|
111
|
+
"* Response evaluation"
|
|
118
112
|
]
|
|
119
113
|
},
|
|
120
114
|
{
|
|
@@ -132,7 +126,7 @@
|
|
|
132
126
|
"id": "No17Cw5hgx12"
|
|
133
127
|
},
|
|
134
128
|
"source": [
|
|
135
|
-
"### Install
|
|
129
|
+
"### Install Google Gen AI SDK and other required packages\n"
|
|
136
130
|
]
|
|
137
131
|
},
|
|
138
132
|
{
|
|
@@ -143,50 +137,8 @@
|
|
|
143
137
|
},
|
|
144
138
|
"outputs": [],
|
|
145
139
|
"source": [
|
|
146
|
-
"%pip install --upgrade --
|
|
147
|
-
"
|
|
148
|
-
" \"langgraph\" \\\n",
|
|
149
|
-
" \"cloudpickle==3.0.0\" \\\n",
|
|
150
|
-
" \"pydantic==2.7.4\" \\\n",
|
|
151
|
-
" \"requests\""
|
|
152
|
-
]
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
"cell_type": "markdown",
|
|
156
|
-
"metadata": {
|
|
157
|
-
"id": "R5Xep4W9lq-Z"
|
|
158
|
-
},
|
|
159
|
-
"source": [
|
|
160
|
-
"### Restart runtime\n",
|
|
161
|
-
"\n",
|
|
162
|
-
"To use the newly installed packages in this Jupyter runtime, you must restart the runtime. You can do this by running the cell below, which restarts the current kernel.\n",
|
|
163
|
-
"\n",
|
|
164
|
-
"The restart might take a minute or longer. After it's restarted, continue to the next step."
|
|
165
|
-
]
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
"cell_type": "code",
|
|
169
|
-
"execution_count": null,
|
|
170
|
-
"metadata": {
|
|
171
|
-
"id": "XRvKdaPDTznN"
|
|
172
|
-
},
|
|
173
|
-
"outputs": [],
|
|
174
|
-
"source": [
|
|
175
|
-
"import IPython\n",
|
|
176
|
-
"\n",
|
|
177
|
-
"app = IPython.Application.instance()\n",
|
|
178
|
-
"app.kernel.do_shutdown(True)"
|
|
179
|
-
]
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
"cell_type": "markdown",
|
|
183
|
-
"metadata": {
|
|
184
|
-
"id": "SbmM4z7FOBpM"
|
|
185
|
-
},
|
|
186
|
-
"source": [
|
|
187
|
-
"<div class=\"alert alert-block alert-warning\">\n",
|
|
188
|
-
"<b>⚠️ The kernel is going to restart. In Colab or Colab Enterprise, you might see an error message that says \"Your session crashed for an unknown reason.\" This is expected. Wait until it's finished before continuing to the next step. ⚠️</b>\n",
|
|
189
|
-
"</div>\n"
|
|
140
|
+
"%pip install --upgrade --quiet 'google-adk'\n",
|
|
141
|
+
"%pip install --upgrade --quiet 'google-cloud-aiplatform[evaluation]'"
|
|
190
142
|
]
|
|
191
143
|
},
|
|
192
144
|
{
|
|
@@ -222,7 +174,7 @@
|
|
|
222
174
|
"id": "DF4l8DTdWgPY"
|
|
223
175
|
},
|
|
224
176
|
"source": [
|
|
225
|
-
"### Set Google Cloud project information
|
|
177
|
+
"### Set Google Cloud project information\n",
|
|
226
178
|
"\n",
|
|
227
179
|
"To get started using Vertex AI, you must have an existing Google Cloud project and [enable the Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n",
|
|
228
180
|
"\n",
|
|
@@ -243,13 +195,21 @@
|
|
|
243
195
|
"import vertexai\n",
|
|
244
196
|
"\n",
|
|
245
197
|
"PROJECT_ID = \"[your-project-id]\" # @param {type: \"string\", placeholder: \"[your-project-id]\", isTemplate: true}\n",
|
|
246
|
-
"\n",
|
|
247
198
|
"if not PROJECT_ID or PROJECT_ID == \"[your-project-id]\":\n",
|
|
248
199
|
" PROJECT_ID = str(os.environ.get(\"GOOGLE_CLOUD_PROJECT\"))\n",
|
|
249
200
|
"\n",
|
|
250
201
|
"LOCATION = os.environ.get(\"GOOGLE_CLOUD_REGION\", \"us-central1\")\n",
|
|
251
202
|
"\n",
|
|
252
|
-
"
|
|
203
|
+
"BUCKET_NAME = \"[your-bucket-name]\" # @param {type: \"string\", placeholder: \"[your-bucket-name]\", isTemplate: true}\n",
|
|
204
|
+
"BUCKET_URI = f\"gs://{BUCKET_NAME}\"\n",
|
|
205
|
+
"\n",
|
|
206
|
+
"!gsutil mb -l {LOCATION} {BUCKET_URI}\n",
|
|
207
|
+
"\n",
|
|
208
|
+
"os.environ[\"GOOGLE_CLOUD_PROJECT\"] = PROJECT_ID\n",
|
|
209
|
+
"os.environ[\"GOOGLE_CLOUD_LOCATION\"] = LOCATION\n",
|
|
210
|
+
"os.environ[\"GOOGLE_GENAI_USE_VERTEXAI\"] = \"True\"\n",
|
|
211
|
+
"\n",
|
|
212
|
+
"EXPERIMENT_NAME = \"evaluate-adk-agent\" # @param {type:\"string\"}\n",
|
|
253
213
|
"\n",
|
|
254
214
|
"vertexai.init(project=PROJECT_ID, location=LOCATION, experiment=EXPERIMENT_NAME)"
|
|
255
215
|
]
|
|
@@ -273,23 +233,25 @@
|
|
|
273
233
|
},
|
|
274
234
|
"outputs": [],
|
|
275
235
|
"source": [
|
|
236
|
+
"import json\n",
|
|
237
|
+
"import asyncio\n",
|
|
238
|
+
"\n",
|
|
276
239
|
"# General\n",
|
|
277
240
|
"import random\n",
|
|
278
241
|
"import string\n",
|
|
279
|
-
"from typing import
|
|
242
|
+
"from typing import Any\n",
|
|
280
243
|
"\n",
|
|
281
244
|
"from IPython.display import HTML, Markdown, display\n",
|
|
245
|
+
"from google.adk.agents import Agent\n",
|
|
246
|
+
"\n",
|
|
247
|
+
"# Build agent with adk\n",
|
|
248
|
+
"from google.adk.events import Event\n",
|
|
249
|
+
"from google.adk.runners import Runner\n",
|
|
250
|
+
"from google.adk.sessions import InMemorySessionService\n",
|
|
282
251
|
"\n",
|
|
283
252
|
"# Evaluate agent\n",
|
|
284
253
|
"from google.cloud import aiplatform\n",
|
|
285
|
-
"from
|
|
286
|
-
"\n",
|
|
287
|
-
"# Build agent\n",
|
|
288
|
-
"from langchain_core.messages import BaseMessage, HumanMessage\n",
|
|
289
|
-
"from langchain_core.tools import tool\n",
|
|
290
|
-
"from langchain_google_vertexai import ChatVertexAI\n",
|
|
291
|
-
"from langgraph.graph import END, MessageGraph\n",
|
|
292
|
-
"from langgraph.prebuilt import ToolNode\n",
|
|
254
|
+
"from google.genai import types\n",
|
|
293
255
|
"import pandas as pd\n",
|
|
294
256
|
"import plotly.graph_objects as go\n",
|
|
295
257
|
"from vertexai.preview.evaluation import EvalTask\n",
|
|
@@ -324,65 +286,62 @@
|
|
|
324
286
|
" return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n",
|
|
325
287
|
"\n",
|
|
326
288
|
"\n",
|
|
327
|
-
"def
|
|
328
|
-
" \"\"\"
|
|
289
|
+
"def parse_adk_output_to_dictionary(events: list[Event], *, as_json: bool = False):\n",
|
|
290
|
+
" \"\"\"\n",
|
|
291
|
+
" Parse ADK event output into a structured dictionary format,\n",
|
|
292
|
+
" with the predicted trajectory dumped as a JSON string.\n",
|
|
329
293
|
"\n",
|
|
330
|
-
"
|
|
331
|
-
" \"response\": \"No AI response found in the message history.\",\n",
|
|
332
|
-
" \"predicted_trajectory\": [],\n",
|
|
333
|
-
" }\n",
|
|
294
|
+
" \"\"\"\n",
|
|
334
295
|
"\n",
|
|
335
|
-
"
|
|
336
|
-
"
|
|
337
|
-
" for message in messages:\n",
|
|
338
|
-
" # Check if it's a Tool message which contains the actual response\n",
|
|
339
|
-
" if message.get(\"type\") == \"constructor\" and \"ToolMessage\" in message.get(\n",
|
|
340
|
-
" \"id\", []\n",
|
|
341
|
-
" ):\n",
|
|
342
|
-
" final_output[\"response\"] = message[\"kwargs\"][\"content\"]\n",
|
|
296
|
+
" final_response = \"\"\n",
|
|
297
|
+
" trajectory = []\n",
|
|
343
298
|
"\n",
|
|
344
|
-
"
|
|
345
|
-
"
|
|
346
|
-
" \
|
|
347
|
-
"
|
|
348
|
-
"
|
|
349
|
-
"
|
|
350
|
-
"
|
|
351
|
-
"
|
|
352
|
-
"
|
|
353
|
-
"
|
|
354
|
-
"
|
|
355
|
-
"
|
|
356
|
-
"
|
|
299
|
+
" for event in events:\n",
|
|
300
|
+
" if not getattr(event, \"content\", None) or not getattr(event.content, \"parts\", None):\n",
|
|
301
|
+
" continue\n",
|
|
302
|
+
" for part in event.content.parts:\n",
|
|
303
|
+
" if getattr(part, \"function_call\", None):\n",
|
|
304
|
+
" info = {\n",
|
|
305
|
+
" \"tool_name\": part.function_call.name,\n",
|
|
306
|
+
" \"tool_input\": dict(part.function_call.args),\n",
|
|
307
|
+
" }\n",
|
|
308
|
+
" if info not in trajectory:\n",
|
|
309
|
+
" trajectory.append(info)\n",
|
|
310
|
+
" if event.content.role == \"model\" and getattr(part, \"text\", None):\n",
|
|
311
|
+
" final_response = part.text.strip()\n",
|
|
312
|
+
"\n",
|
|
313
|
+
" if as_json:\n",
|
|
314
|
+
" trajectory_out = json.dumps(trajectory)\n",
|
|
315
|
+
" else:\n",
|
|
316
|
+
" trajectory_out = trajectory\n",
|
|
357
317
|
"\n",
|
|
358
|
-
"
|
|
359
|
-
" return final_output\n",
|
|
318
|
+
" return {\"response\": final_response, \"predicted_trajectory\": trajectory_out}\n",
|
|
360
319
|
"\n",
|
|
361
320
|
"\n",
|
|
362
321
|
"def format_output_as_markdown(output: dict) -> str:\n",
|
|
363
322
|
" \"\"\"Convert the output dictionary to a formatted markdown string.\"\"\"\n",
|
|
364
|
-
" markdown = \"### AI Response\\n\"\n",
|
|
365
|
-
" markdown += f\"{output['response']}\\n\\n\"\n",
|
|
366
|
-
"\n",
|
|
323
|
+
" markdown = \"### AI Response\\n\" + output[\"response\"] + \"\\n\\n\"\n",
|
|
367
324
|
" if output[\"predicted_trajectory\"]:\n",
|
|
368
325
|
" markdown += \"### Function Calls\\n\"\n",
|
|
369
326
|
" for call in output[\"predicted_trajectory\"]:\n",
|
|
370
327
|
" markdown += f\"- **Function**: `{call['tool_name']}`\\n\"\n",
|
|
371
|
-
" markdown += \" - **Arguments
|
|
328
|
+
" markdown += \" - **Arguments**\\n\"\n",
|
|
372
329
|
" for key, value in call[\"tool_input\"].items():\n",
|
|
373
330
|
" markdown += f\" - `{key}`: `{value}`\\n\"\n",
|
|
374
|
-
"\n",
|
|
375
331
|
" return markdown\n",
|
|
376
332
|
"\n",
|
|
377
333
|
"\n",
|
|
378
334
|
"def display_eval_report(eval_result: pd.DataFrame) -> None:\n",
|
|
379
335
|
" \"\"\"Display the evaluation results.\"\"\"\n",
|
|
380
|
-
" metrics_df = pd.DataFrame.from_dict(eval_result.summary_metrics, orient=\"index\").T\n",
|
|
381
336
|
" display(Markdown(\"### Summary Metrics\"))\n",
|
|
382
|
-
" display(
|
|
383
|
-
"\n",
|
|
384
|
-
"
|
|
385
|
-
"
|
|
337
|
+
" display(\n",
|
|
338
|
+
" pd.DataFrame(\n",
|
|
339
|
+
" eval_result.summary_metrics.items(), columns=[\"metric\", \"value\"]\n",
|
|
340
|
+
" )\n",
|
|
341
|
+
" )\n",
|
|
342
|
+
" if getattr(eval_result, \"metrics_table\", None) is not None:\n",
|
|
343
|
+
" display(Markdown(\"### Row‑wise Metrics\"))\n",
|
|
344
|
+
" display(eval_result.metrics_table.head())\n",
|
|
386
345
|
"\n",
|
|
387
346
|
"\n",
|
|
388
347
|
"def display_drilldown(row: pd.Series) -> None:\n",
|
|
@@ -528,9 +487,9 @@
|
|
|
528
487
|
"id": "bDaa2Mtsifmq"
|
|
529
488
|
},
|
|
530
489
|
"source": [
|
|
531
|
-
"## Build
|
|
490
|
+
"## Build ADK agent\n",
|
|
532
491
|
"\n",
|
|
533
|
-
"Build your application using
|
|
492
|
+
"Build your application using ADK, including the Gemini model and custom tools that you define."
|
|
534
493
|
]
|
|
535
494
|
},
|
|
536
495
|
{
|
|
@@ -552,7 +511,6 @@
|
|
|
552
511
|
},
|
|
553
512
|
"outputs": [],
|
|
554
513
|
"source": [
|
|
555
|
-
"@tool\n",
|
|
556
514
|
"def get_product_details(product_name: str):\n",
|
|
557
515
|
" \"\"\"Gathers basic details about a product.\"\"\"\n",
|
|
558
516
|
" details = {\n",
|
|
@@ -565,7 +523,6 @@
|
|
|
565
523
|
" return details.get(product_name, \"Product details not found.\")\n",
|
|
566
524
|
"\n",
|
|
567
525
|
"\n",
|
|
568
|
-
"@tool\n",
|
|
569
526
|
"def get_product_price(product_name: str):\n",
|
|
570
527
|
" \"\"\"Gathers price about a product.\"\"\"\n",
|
|
571
528
|
" details = {\n",
|
|
@@ -578,45 +535,6 @@
|
|
|
578
535
|
" return details.get(product_name, \"Product price not found.\")"
|
|
579
536
|
]
|
|
580
537
|
},
|
|
581
|
-
{
|
|
582
|
-
"cell_type": "markdown",
|
|
583
|
-
"metadata": {
|
|
584
|
-
"id": "be70714d9fae"
|
|
585
|
-
},
|
|
586
|
-
"source": [
|
|
587
|
-
"### Define router\n",
|
|
588
|
-
"\n",
|
|
589
|
-
"Set up a router to direct conversation flow by selecting the appropriate tool based on user input or interaction state.\n"
|
|
590
|
-
]
|
|
591
|
-
},
|
|
592
|
-
{
|
|
593
|
-
"cell_type": "code",
|
|
594
|
-
"execution_count": null,
|
|
595
|
-
"metadata": {
|
|
596
|
-
"id": "516b5108d327"
|
|
597
|
-
},
|
|
598
|
-
"outputs": [],
|
|
599
|
-
"source": [
|
|
600
|
-
"def router(\n",
|
|
601
|
-
" state: list[BaseMessage],\n",
|
|
602
|
-
") -> Literal[\"get_product_details\", \"get_product_price\", \"__end__\"]:\n",
|
|
603
|
-
" \"\"\"Initiates product details or price retrieval if the user asks for a product.\"\"\"\n",
|
|
604
|
-
" # Get the tool_calls from the last message in the conversation history.\n",
|
|
605
|
-
" tool_calls = state[-1].tool_calls\n",
|
|
606
|
-
"\n",
|
|
607
|
-
" # If there are any tool_calls\n",
|
|
608
|
-
" if tool_calls:\n",
|
|
609
|
-
" # Check the function name in the first tool call\n",
|
|
610
|
-
" function_name = tool_calls[0].get(\"name\")\n",
|
|
611
|
-
" if function_name == \"get_product_price\":\n",
|
|
612
|
-
" return \"get_product_price\"\n",
|
|
613
|
-
" else:\n",
|
|
614
|
-
" return \"get_product_details\"\n",
|
|
615
|
-
" else:\n",
|
|
616
|
-
" # End the conversation flow.\n",
|
|
617
|
-
" return \"__end__\""
|
|
618
|
-
]
|
|
619
|
-
},
|
|
620
538
|
{
|
|
621
539
|
"cell_type": "markdown",
|
|
622
540
|
"metadata": {
|
|
@@ -636,7 +554,7 @@
|
|
|
636
554
|
},
|
|
637
555
|
"outputs": [],
|
|
638
556
|
"source": [
|
|
639
|
-
"
|
|
557
|
+
"model = \"gemini-2.0-flash\""
|
|
640
558
|
]
|
|
641
559
|
},
|
|
642
560
|
{
|
|
@@ -656,30 +574,53 @@
|
|
|
656
574
|
"cell_type": "code",
|
|
657
575
|
"execution_count": null,
|
|
658
576
|
"metadata": {
|
|
659
|
-
"id": "
|
|
577
|
+
"id": "gD5OB44g4sc3"
|
|
660
578
|
},
|
|
661
579
|
"outputs": [],
|
|
662
580
|
"source": [
|
|
663
|
-
"def agent_parsed_outcome(
|
|
664
|
-
"\n",
|
|
665
|
-
"
|
|
666
|
-
"
|
|
667
|
-
"\n",
|
|
668
|
-
"
|
|
669
|
-
"
|
|
670
|
-
"
|
|
671
|
-
"
|
|
672
|
-
"
|
|
673
|
-
"
|
|
674
|
-
"
|
|
675
|
-
"
|
|
676
|
-
"\n",
|
|
677
|
-
"
|
|
678
|
-
"
|
|
679
|
-
"\n",
|
|
680
|
-
"
|
|
681
|
-
"
|
|
682
|
-
"
|
|
581
|
+
"async def agent_parsed_outcome(query):\n",
|
|
582
|
+
" app_name = \"product_research_app\"\n",
|
|
583
|
+
" user_id = \"user_one\"\n",
|
|
584
|
+
" session_id = \"session_one\"\n",
|
|
585
|
+
" \n",
|
|
586
|
+
" product_research_agent = Agent(\n",
|
|
587
|
+
" name=\"ProductResearchAgent\",\n",
|
|
588
|
+
" model=model,\n",
|
|
589
|
+
" description=\"An agent that performs product research.\",\n",
|
|
590
|
+
" instruction=f\"\"\"\n",
|
|
591
|
+
" Analyze this user request: '{query}'.\n",
|
|
592
|
+
" If the request is about price, use get_product_price tool.\n",
|
|
593
|
+
" Otherwise, use get_product_details tool to get product information.\n",
|
|
594
|
+
" \"\"\",\n",
|
|
595
|
+
" tools=[get_product_details, get_product_price],\n",
|
|
596
|
+
" )\n",
|
|
597
|
+
"\n",
|
|
598
|
+
" session_service = InMemorySessionService()\n",
|
|
599
|
+
" await session_service.create_session(\n",
|
|
600
|
+
" app_name=app_name, user_id=user_id, session_id=session_id\n",
|
|
601
|
+
" )\n",
|
|
602
|
+
"\n",
|
|
603
|
+
" runner = Runner(\n",
|
|
604
|
+
" agent=product_research_agent, app_name=app_name, session_service=session_service\n",
|
|
605
|
+
" )\n",
|
|
606
|
+
"\n",
|
|
607
|
+
" content = types.Content(role=\"user\", parts=[types.Part(text=query)])\n",
|
|
608
|
+
" events = [event async for event in runner.run_async(user_id=user_id, session_id=session_id, new_message=content)]\n",
|
|
609
|
+
" \n",
|
|
610
|
+
" return parse_adk_output_to_dictionary(events)\n"
|
|
611
|
+
]
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
"cell_type": "code",
|
|
615
|
+
"execution_count": null,
|
|
616
|
+
"metadata": {},
|
|
617
|
+
"outputs": [],
|
|
618
|
+
"source": [
|
|
619
|
+
"# --- Sync wrapper for Vertex‑AI evaluation\n",
|
|
620
|
+
"def agent_parsed_outcome_sync(prompt: str):\n",
|
|
621
|
+
" result = asyncio.run(agent_parsed_outcome(prompt))\n",
|
|
622
|
+
" result[\"predicted_trajectory\"] = json.dumps(result[\"predicted_trajectory\"])\n",
|
|
623
|
+
" return result"
|
|
683
624
|
]
|
|
684
625
|
},
|
|
685
626
|
{
|
|
@@ -701,7 +642,7 @@
|
|
|
701
642
|
},
|
|
702
643
|
"outputs": [],
|
|
703
644
|
"source": [
|
|
704
|
-
"response = agent_parsed_outcome(
|
|
645
|
+
"response = await agent_parsed_outcome(query=\"Get product details for shoes\")\n",
|
|
705
646
|
"display(Markdown(format_output_as_markdown(response)))"
|
|
706
647
|
]
|
|
707
648
|
},
|
|
@@ -713,7 +654,7 @@
|
|
|
713
654
|
},
|
|
714
655
|
"outputs": [],
|
|
715
656
|
"source": [
|
|
716
|
-
"response = agent_parsed_outcome(
|
|
657
|
+
"response = await agent_parsed_outcome(query=\"Get product price for shoes\")\n",
|
|
717
658
|
"display(Markdown(format_output_as_markdown(response)))"
|
|
718
659
|
]
|
|
719
660
|
},
|
|
@@ -723,7 +664,7 @@
|
|
|
723
664
|
"id": "aOGPePsorpUl"
|
|
724
665
|
},
|
|
725
666
|
"source": [
|
|
726
|
-
"## Evaluating a
|
|
667
|
+
"## Evaluating a ADK agent with Vertex AI Gen AI Evaluation\n",
|
|
727
668
|
"\n",
|
|
728
669
|
"When working with AI agents, it's important to keep track of their performance and how well they're working. You can look at this in two main ways: **monitoring** and **observability**.\n",
|
|
729
670
|
"\n",
|
|
@@ -777,7 +718,7 @@
|
|
|
777
718
|
" \"Get product details and price for shoes\",\n",
|
|
778
719
|
" \"Get product details for speaker?\",\n",
|
|
779
720
|
" ],\n",
|
|
780
|
-
" \"
|
|
721
|
+
" \"predicted_trajectory\": [\n",
|
|
781
722
|
" [\n",
|
|
782
723
|
" {\n",
|
|
783
724
|
" \"tool_name\": \"get_product_price\",\n",
|
|
@@ -899,10 +840,11 @@
|
|
|
899
840
|
" dataset=eval_sample_dataset,\n",
|
|
900
841
|
" metrics=single_tool_usage_metrics,\n",
|
|
901
842
|
" experiment=EXPERIMENT_NAME,\n",
|
|
843
|
+
" output_uri_prefix=BUCKET_URI + \"/single-metric-eval\",\n",
|
|
902
844
|
")\n",
|
|
903
845
|
"\n",
|
|
904
846
|
"single_tool_call_eval_result = single_tool_call_eval_task.evaluate(\n",
|
|
905
|
-
" runnable=
|
|
847
|
+
" runnable=agent_parsed_outcome_sync, experiment_run_name=EXPERIMENT_RUN\n",
|
|
906
848
|
")\n",
|
|
907
849
|
"\n",
|
|
908
850
|
"display_eval_report(single_tool_call_eval_result)"
|
|
@@ -1003,11 +945,14 @@
|
|
|
1003
945
|
"EXPERIMENT_RUN = f\"trajectory-{get_id()}\"\n",
|
|
1004
946
|
"\n",
|
|
1005
947
|
"trajectory_eval_task = EvalTask(\n",
|
|
1006
|
-
" dataset=eval_sample_dataset
|
|
948
|
+
" dataset=eval_sample_dataset,\n",
|
|
949
|
+
" metrics=trajectory_metrics,\n",
|
|
950
|
+
" experiment=EXPERIMENT_NAME,\n",
|
|
951
|
+
" output_uri_prefix=BUCKET_URI + \"/multiple-metric-eval\",\n",
|
|
1007
952
|
")\n",
|
|
1008
953
|
"\n",
|
|
1009
954
|
"trajectory_eval_result = trajectory_eval_task.evaluate(\n",
|
|
1010
|
-
" runnable=
|
|
955
|
+
" runnable=agent_parsed_outcome_sync, experiment_run_name=EXPERIMENT_RUN\n",
|
|
1011
956
|
")\n",
|
|
1012
957
|
"\n",
|
|
1013
958
|
"display_eval_report(trajectory_eval_result)"
|
|
@@ -1028,7 +973,7 @@
|
|
|
1028
973
|
"cell_type": "code",
|
|
1029
974
|
"execution_count": null,
|
|
1030
975
|
"metadata": {
|
|
1031
|
-
"id": "
|
|
976
|
+
"id": "z7-LdM3mLBtk"
|
|
1032
977
|
},
|
|
1033
978
|
"outputs": [],
|
|
1034
979
|
"source": [
|
|
@@ -1039,7 +984,7 @@
|
|
|
1039
984
|
"cell_type": "code",
|
|
1040
985
|
"execution_count": null,
|
|
1041
986
|
"metadata": {
|
|
1042
|
-
"id": "
|
|
987
|
+
"id": "sLVRdN5llA0h"
|
|
1043
988
|
},
|
|
1044
989
|
"outputs": [],
|
|
1045
990
|
"source": [
|
|
@@ -1107,11 +1052,14 @@
|
|
|
1107
1052
|
"EXPERIMENT_RUN = f\"response-{get_id()}\"\n",
|
|
1108
1053
|
"\n",
|
|
1109
1054
|
"response_eval_task = EvalTask(\n",
|
|
1110
|
-
" dataset=eval_sample_dataset
|
|
1055
|
+
" dataset=eval_sample_dataset,\n",
|
|
1056
|
+
" metrics=response_metrics,\n",
|
|
1057
|
+
" experiment=EXPERIMENT_NAME,\n",
|
|
1058
|
+
" output_uri_prefix=BUCKET_URI + \"/response-metric-eval\",\n",
|
|
1111
1059
|
")\n",
|
|
1112
1060
|
"\n",
|
|
1113
1061
|
"response_eval_result = response_eval_task.evaluate(\n",
|
|
1114
|
-
" runnable=
|
|
1062
|
+
" runnable=agent_parsed_outcome_sync, experiment_run_name=EXPERIMENT_RUN\n",
|
|
1115
1063
|
")\n",
|
|
1116
1064
|
"\n",
|
|
1117
1065
|
"display_eval_report(response_eval_result)"
|
|
@@ -1120,7 +1068,7 @@
|
|
|
1120
1068
|
{
|
|
1121
1069
|
"cell_type": "markdown",
|
|
1122
1070
|
"metadata": {
|
|
1123
|
-
"id": "
|
|
1071
|
+
"id": "JtewTwiwg9qH"
|
|
1124
1072
|
},
|
|
1125
1073
|
"source": [
|
|
1126
1074
|
"#### Visualize evaluation results\n",
|
|
@@ -1292,10 +1240,13 @@
|
|
|
1292
1240
|
" dataset=eval_sample_dataset,\n",
|
|
1293
1241
|
" metrics=response_tool_metrics,\n",
|
|
1294
1242
|
" experiment=EXPERIMENT_NAME,\n",
|
|
1243
|
+
" output_uri_prefix=BUCKET_URI + \"/reasoning-metric-eval\",\n",
|
|
1295
1244
|
")\n",
|
|
1296
1245
|
"\n",
|
|
1297
1246
|
"response_eval_tool_result = response_eval_tool_task.evaluate(\n",
|
|
1298
|
-
"
|
|
1247
|
+
" # Uncomment the line below if you are providing the agent with an unparsed dataset\n",
|
|
1248
|
+
" #runnable=agent_parsed_outcome_sync, \n",
|
|
1249
|
+
" experiment_run_name=EXPERIMENT_RUN\n",
|
|
1299
1250
|
")\n",
|
|
1300
1251
|
"\n",
|
|
1301
1252
|
"display_eval_report(response_eval_tool_result)"
|
|
@@ -1323,6 +1274,21 @@
|
|
|
1323
1274
|
"display_dataframe_rows(response_eval_tool_result.metrics_table, num_rows=3)"
|
|
1324
1275
|
]
|
|
1325
1276
|
},
|
|
1277
|
+
{
|
|
1278
|
+
"cell_type": "code",
|
|
1279
|
+
"execution_count": null,
|
|
1280
|
+
"metadata": {
|
|
1281
|
+
"id": "tdVhCURXMdLG"
|
|
1282
|
+
},
|
|
1283
|
+
"outputs": [],
|
|
1284
|
+
"source": [
|
|
1285
|
+
"plot_bar_plot(\n",
|
|
1286
|
+
" response_eval_tool_result,\n",
|
|
1287
|
+
" title=\"Response Metrics\",\n",
|
|
1288
|
+
" metrics=[f\"{metric}/mean\" for metric in response_tool_metrics],\n",
|
|
1289
|
+
")"
|
|
1290
|
+
]
|
|
1291
|
+
},
|
|
1326
1292
|
{
|
|
1327
1293
|
"cell_type": "markdown",
|
|
1328
1294
|
"metadata": {
|
|
@@ -1436,15 +1402,22 @@
|
|
|
1436
1402
|
" ],\n",
|
|
1437
1403
|
" ],\n",
|
|
1438
1404
|
" \"response\": [\n",
|
|
1439
|
-
" 500,\n",
|
|
1440
|
-
" 50,\n",
|
|
1405
|
+
" \"500\",\n",
|
|
1406
|
+
" \"50\",\n",
|
|
1441
1407
|
" \"A super fast and light usb charger\",\n",
|
|
1442
|
-
" 100,\n",
|
|
1408
|
+
" \"100\",\n",
|
|
1443
1409
|
" \"A voice-controlled smart speaker that plays music, sets alarms, and controls smart home devices.\",\n",
|
|
1444
1410
|
" ],\n",
|
|
1445
1411
|
"}\n",
|
|
1446
1412
|
"\n",
|
|
1447
|
-
"byod_eval_sample_dataset = pd.DataFrame(byod_eval_data)"
|
|
1413
|
+
"byod_eval_sample_dataset = pd.DataFrame(byod_eval_data)\n",
|
|
1414
|
+
"byod_eval_sample_dataset[\"predicted_trajectory\"] = byod_eval_sample_dataset[\n",
|
|
1415
|
+
" \"predicted_trajectory\"\n",
|
|
1416
|
+
"].apply(json.dumps)\n",
|
|
1417
|
+
"byod_eval_sample_dataset[\"reference_trajectory\"] = byod_eval_sample_dataset[\n",
|
|
1418
|
+
" \"reference_trajectory\"\n",
|
|
1419
|
+
"].apply(json.dumps)\n",
|
|
1420
|
+
"byod_eval_sample_dataset[\"response\"] = byod_eval_sample_dataset[\"response\"].apply(json.dumps)"
|
|
1448
1421
|
]
|
|
1449
1422
|
},
|
|
1450
1423
|
{
|
|
@@ -1472,6 +1445,7 @@
|
|
|
1472
1445
|
" dataset=byod_eval_sample_dataset,\n",
|
|
1473
1446
|
" metrics=response_tool_metrics,\n",
|
|
1474
1447
|
" experiment=EXPERIMENT_NAME,\n",
|
|
1448
|
+
" output_uri_prefix=BUCKET_URI + \"/byod-eval\",\n",
|
|
1475
1449
|
")\n",
|
|
1476
1450
|
"\n",
|
|
1477
1451
|
"byod_response_eval_tool_result = byod_response_eval_tool_task.evaluate(\n",
|
|
@@ -1487,7 +1461,7 @@
|
|
|
1487
1461
|
"id": "9eU3LG6r7q-3"
|
|
1488
1462
|
},
|
|
1489
1463
|
"source": [
|
|
1490
|
-
"
|
|
1464
|
+
"### Visualize evaluation results\n",
|
|
1491
1465
|
"\n",
|
|
1492
1466
|
"Visualize evaluation result sample."
|
|
1493
1467
|
]
|
|
@@ -1507,13 +1481,13 @@
|
|
|
1507
1481
|
"cell_type": "code",
|
|
1508
1482
|
"execution_count": null,
|
|
1509
1483
|
"metadata": {
|
|
1510
|
-
"id": "
|
|
1484
|
+
"id": "84HiPDOkPseW"
|
|
1511
1485
|
},
|
|
1512
1486
|
"outputs": [],
|
|
1513
1487
|
"source": [
|
|
1514
1488
|
"display_radar_plot(\n",
|
|
1515
1489
|
" byod_response_eval_tool_result,\n",
|
|
1516
|
-
" title=\"
|
|
1490
|
+
" title=\"ADK agent evaluation\",\n",
|
|
1517
1491
|
" metrics=[f\"{metric}/mean\" for metric in response_tool_metrics],\n",
|
|
1518
1492
|
")"
|
|
1519
1493
|
]
|
|
@@ -1521,7 +1495,7 @@
|
|
|
1521
1495
|
{
|
|
1522
1496
|
"cell_type": "markdown",
|
|
1523
1497
|
"metadata": {
|
|
1524
|
-
"id": "
|
|
1498
|
+
"id": "fIppkS2jq_Dn"
|
|
1525
1499
|
},
|
|
1526
1500
|
"source": [
|
|
1527
1501
|
"## Cleaning up\n"
|
|
@@ -1548,7 +1522,7 @@
|
|
|
1548
1522
|
],
|
|
1549
1523
|
"metadata": {
|
|
1550
1524
|
"colab": {
|
|
1551
|
-
"name": "
|
|
1525
|
+
"name": "evaluating_adk_agent.ipynb",
|
|
1552
1526
|
"toc_visible": true
|
|
1553
1527
|
},
|
|
1554
1528
|
"kernelspec": {
|