agent-starter-pack 0.13.1__tar.gz → 0.14.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.claude/settings.local.json +3 -1
  2. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/GEMINI.md +1 -0
  3. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/Makefile +1 -0
  4. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/PKG-INFO +13 -4
  5. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/README.md +12 -3
  6. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/adk_base/notebooks/evaluating_adk_agent.ipynb +78 -71
  7. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/agentic_rag/notebooks/evaluating_adk_agent.ipynb +78 -71
  8. agent_starter_pack-0.14.1/docs/.vitepress/config.js +137 -0
  9. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/cli/enhance.md +24 -6
  10. agent_starter_pack-0.14.1/docs/guide/community-showcase.md +31 -0
  11. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/guide/development-guide.md +4 -0
  12. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/index.md +1 -0
  13. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/package-lock.json +3 -3
  14. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/llm.txt +87 -39
  15. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/pyproject.toml +1 -1
  16. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/Makefile +16 -1
  17. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/README.md +1 -1
  18. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/commands/create.py +27 -5
  19. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/commands/enhance.py +132 -6
  20. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/commands/setup_cicd.py +91 -69
  21. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/utils/cicd.py +105 -0
  22. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/utils/gcp.py +19 -13
  23. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/utils/logging.py +13 -1
  24. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/utils/template.py +3 -0
  25. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/package-lock.json +9 -9
  26. agent_starter_pack-0.14.1/src/frontends/live_api_react/frontend/src/App.tsx +65 -0
  27. agent_starter_pack-0.14.1/src/frontends/live_api_react/frontend/src/components/side-panel/SidePanel.tsx +510 -0
  28. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/components/side-panel/side-panel.scss +249 -2
  29. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/utils/multimodal-live-client.ts +4 -1
  30. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/docs/adk-cheatsheet.md +285 -38
  31. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/cicd/test_e2e_deployment.py +1 -1
  32. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/cli/commands/test_setup_cicd.py +129 -0
  33. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/integration/test_makefile_usability.py +6 -1
  34. agent_starter_pack-0.14.1/uv.lock +6707 -0
  35. agent_starter_pack-0.13.1/docs/.vitepress/config.js +0 -87
  36. agent_starter_pack-0.13.1/src/frontends/live_api_react/frontend/src/App.tsx +0 -206
  37. agent_starter_pack-0.13.1/src/frontends/live_api_react/frontend/src/components/control-tray/ControlTray.tsx +0 -217
  38. agent_starter_pack-0.13.1/src/frontends/live_api_react/frontend/src/components/control-tray/control-tray.scss +0 -201
  39. agent_starter_pack-0.13.1/src/frontends/live_api_react/frontend/src/components/side-panel/SidePanel.tsx +0 -161
  40. agent_starter_pack-0.13.1/uv.lock +0 -5905
  41. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/cd/test_e2e.yaml +0 -0
  42. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/ci/build_use_wheel.yaml +0 -0
  43. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/ci/lint.yaml +0 -0
  44. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/ci/lint_templated_agents.yaml +0 -0
  45. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/ci/test.yaml +0 -0
  46. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/ci/test_makefile.yaml +0 -0
  47. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/ci/test_pipeline_parity.yaml +0 -0
  48. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/ci/test_remote_template.yaml +0 -0
  49. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/ci/test_templated_agents.yaml +0 -0
  50. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/terraform/apis.tf +0 -0
  51. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/terraform/build_triggers.tf +0 -0
  52. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/terraform/service_account.tf +0 -0
  53. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/terraform/storage.tf +0 -0
  54. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.cloudbuild/terraform/variables.tf +0 -0
  55. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.github/workflows/docs.yml +0 -0
  56. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/.gitignore +0 -0
  57. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/CLAUDE.md +0 -0
  58. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/CODE_OF_CONDUCT.md +0 -0
  59. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/CONTRIBUTING.md +0 -0
  60. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/LICENSE +0 -0
  61. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/README.md +0 -0
  62. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/adk_base/.template/templateconfig.yaml +0 -0
  63. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/adk_base/README.md +0 -0
  64. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/adk_base/app/__init__.py +0 -0
  65. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/adk_base/app/agent.py +0 -0
  66. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/adk_base/notebooks/adk_app_testing.ipynb +0 -0
  67. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/adk_base/tests/integration/test_agent.py +0 -0
  68. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/agentic_rag/.template/templateconfig.yaml +0 -0
  69. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/agentic_rag/README.md +0 -0
  70. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/agentic_rag/app/__init__.py +0 -0
  71. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/agentic_rag/app/agent.py +0 -0
  72. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/agentic_rag/app/retrievers.py +0 -0
  73. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/agentic_rag/app/templates.py +0 -0
  74. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/agentic_rag/notebooks/adk_app_testing.ipynb +0 -0
  75. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/agentic_rag/tests/integration/test_agent.py +0 -0
  76. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/crewai_coding_crew/.template/templateconfig.yaml +0 -0
  77. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/crewai_coding_crew/README.md +0 -0
  78. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/crewai_coding_crew/app/agent.py +0 -0
  79. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/crewai_coding_crew/app/crew/config/agents.yaml +0 -0
  80. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/crewai_coding_crew/app/crew/config/tasks.yaml +0 -0
  81. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/crewai_coding_crew/app/crew/crew.py +0 -0
  82. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb +0 -0
  83. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/crewai_coding_crew/notebooks/evaluating_langgraph_agent.ipynb +0 -0
  84. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/crewai_coding_crew/tests/integration/test_agent.py +0 -0
  85. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/langgraph_base_react/.template/templateconfig.yaml +0 -0
  86. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/langgraph_base_react/README.md +0 -0
  87. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/langgraph_base_react/app/agent.py +0 -0
  88. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb +0 -0
  89. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/langgraph_base_react/tests/integration/test_agent.py +0 -0
  90. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/live_api/.template/templateconfig.yaml +0 -0
  91. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/live_api/README.md +0 -0
  92. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/live_api/app/agent.py +0 -0
  93. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/live_api/tests/integration/test_server_e2e.py +0 -0
  94. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/live_api/tests/load_test/load_test.py +0 -0
  95. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/agents/live_api/tests/unit/test_server.py +0 -0
  96. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/agents/overview.md +0 -0
  97. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/cli/create.md +0 -0
  98. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/cli/index.md +0 -0
  99. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/cli/list.md +0 -0
  100. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/cli/setup_cicd.md +0 -0
  101. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/guide/data-ingestion.md +0 -0
  102. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/guide/deploy-ui.md +0 -0
  103. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/guide/deployment.md +0 -0
  104. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/guide/getting-started.md +0 -0
  105. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/guide/installation.md +0 -0
  106. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/guide/observability.md +0 -0
  107. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/guide/template-config-reference.md +0 -0
  108. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/guide/troubleshooting.md +0 -0
  109. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/guide/video-tutorials.md +0 -0
  110. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/guide/why_starter_pack.md +0 -0
  111. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/images/adk_gemini_fullstack.gif +0 -0
  112. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/images/adk_gemini_fullstack_architecture.png +0 -0
  113. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/images/adk_logo.png +0 -0
  114. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/images/agent_starter_pack_screenshot.png +0 -0
  115. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/images/ags_high_level_architecture.png +0 -0
  116. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/images/icon.png +0 -0
  117. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/images/logo.png +0 -0
  118. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/images/prototype_to_prod.png +0 -0
  119. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/images/why_sp_edited.png +0 -0
  120. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/images/why_starter_pack.png +0 -0
  121. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/package.json +0 -0
  122. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/remote-templates/creating-remote-templates.md +0 -0
  123. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/remote-templates/index.md +0 -0
  124. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/docs/remote-templates/using-remote-templates.md +0 -0
  125. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/.gitignore +0 -0
  126. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/GEMINI.md +0 -0
  127. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/README.md +0 -0
  128. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/apis.tf +0 -0
  129. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/dev/apis.tf +0 -0
  130. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/dev/iam.tf +0 -0
  131. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/dev/log_sinks.tf +0 -0
  132. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/dev/providers.tf +0 -0
  133. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/dev/storage.tf +0 -0
  134. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/dev/variables.tf +0 -0
  135. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/dev/vars/env.tfvars +0 -0
  136. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/github.tf +0 -0
  137. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/iam.tf +0 -0
  138. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/locals.tf +0 -0
  139. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/log_sinks.tf +0 -0
  140. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/providers.tf +0 -0
  141. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/service_accounts.tf +0 -0
  142. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/storage.tf +0 -0
  143. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/variables.tf +0 -0
  144. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/vars/env.tfvars +0 -0
  145. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'github_actions' %}wif.tf{% else %}unused_wif.tf{% endif %} +0 -0
  146. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %} +0 -0
  147. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/pyproject.toml +0 -0
  148. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/tests/unit/test_dummy.py +0 -0
  149. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +0 -0
  150. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml +0 -0
  151. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +0 -0
  152. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml +0 -0
  153. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/pr_checks.yaml +0 -0
  154. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +0 -0
  155. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/{{cookiecutter.agent_directory}}/utils/gcs.py +0 -0
  156. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/{{cookiecutter.agent_directory}}/utils/tracing.py +0 -0
  157. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/base_template/{{cookiecutter.agent_directory}}/utils/typing.py +0 -0
  158. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/commands/list.py +0 -0
  159. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/main.py +0 -0
  160. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/utils/__init__.py +0 -0
  161. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/utils/datastores.py +0 -0
  162. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/utils/remote_template.py +0 -0
  163. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/cli/utils/version.py +0 -0
  164. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/data_ingestion/README.md +0 -0
  165. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/data_ingestion/data_ingestion_pipeline/components/ingest_data.py +0 -0
  166. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/data_ingestion/data_ingestion_pipeline/components/process_data.py +0 -0
  167. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/data_ingestion/data_ingestion_pipeline/pipeline.py +0 -0
  168. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/data_ingestion/data_ingestion_pipeline/submit_pipeline.py +0 -0
  169. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/data_ingestion/pyproject.toml +0 -0
  170. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/data_ingestion/uv.lock +0 -0
  171. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/agent_engine/deployment_metadata.json +0 -0
  172. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb +0 -0
  173. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +0 -0
  174. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/agent_engine/tests/load_test/.results/.placeholder +0 -0
  175. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/agent_engine/tests/load_test/README.md +0 -0
  176. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/agent_engine/tests/load_test/load_test.py +0 -0
  177. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/agent_engine_app.py +0 -0
  178. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/cloud_run/Dockerfile +0 -0
  179. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/cloud_run/deployment/terraform/dev/service.tf +0 -0
  180. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/cloud_run/deployment/terraform/service.tf +0 -0
  181. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +0 -0
  182. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +0 -0
  183. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/cloud_run/tests/load_test/README.md +0 -0
  184. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/cloud_run/tests/load_test/load_test.py +0 -0
  185. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}/server.py +0 -0
  186. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/package.json +0 -0
  187. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/public/favicon.ico +0 -0
  188. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/public/index.html +0 -0
  189. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/public/robots.txt +0 -0
  190. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/App.scss +0 -0
  191. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/App.test.tsx +0 -0
  192. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/components/audio-pulse/AudioPulse.tsx +0 -0
  193. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/components/audio-pulse/audio-pulse.scss +0 -0
  194. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/components/logger/Logger.tsx +0 -0
  195. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/components/logger/logger.scss +0 -0
  196. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/components/logger/mock-logs.ts +0 -0
  197. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/contexts/LiveAPIContext.tsx +0 -0
  198. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/hooks/use-live-api.ts +0 -0
  199. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/hooks/use-media-stream-mux.ts +0 -0
  200. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/hooks/use-screen-capture.ts +0 -0
  201. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/hooks/use-webcam.ts +0 -0
  202. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/index.css +0 -0
  203. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/index.tsx +0 -0
  204. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/multimodal-live-types.ts +0 -0
  205. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/react-app-env.d.ts +0 -0
  206. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/reportWebVitals.ts +0 -0
  207. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/setupTests.ts +0 -0
  208. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/utils/audio-recorder.ts +0 -0
  209. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/utils/audio-streamer.ts +0 -0
  210. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/utils/audioworklet-registry.ts +0 -0
  211. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/utils/store-logger.ts +0 -0
  212. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/utils/utils.ts +0 -0
  213. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/utils/worklets/audio-processing.ts +0 -0
  214. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/src/utils/worklets/vol-meter.ts +0 -0
  215. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/live_api_react/frontend/tsconfig.json +0 -0
  216. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/streamlit/frontend/side_bar.py +0 -0
  217. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/streamlit/frontend/streamlit_app.py +0 -0
  218. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/streamlit/frontend/style/app_markdown.py +0 -0
  219. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/streamlit/frontend/utils/chat_utils.py +0 -0
  220. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/streamlit/frontend/utils/local_chat_history.py +0 -0
  221. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/streamlit/frontend/utils/message_editing.py +0 -0
  222. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/streamlit/frontend/utils/multimodal_utils.py +0 -0
  223. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/streamlit/frontend/utils/stream_handler.py +0 -0
  224. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/frontends/streamlit/frontend/utils/title_summary.py +0 -0
  225. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/containers/data_processing/Dockerfile +0 -0
  226. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/containers/e2e-tests/Dockerfile +0 -0
  227. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/idx/.idx/dev.nix +0 -0
  228. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/idx/idx-template.json +0 -0
  229. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/idx/idx-template.nix +0 -0
  230. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/locks/uv-adk_base-agent_engine.lock +0 -0
  231. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/locks/uv-adk_base-cloud_run.lock +0 -0
  232. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/locks/uv-agentic_rag-agent_engine.lock +0 -0
  233. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/locks/uv-agentic_rag-cloud_run.lock +0 -0
  234. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/locks/uv-crewai_coding_crew-agent_engine.lock +0 -0
  235. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/locks/uv-crewai_coding_crew-cloud_run.lock +0 -0
  236. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/locks/uv-langgraph_base_react-agent_engine.lock +0 -0
  237. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/locks/uv-langgraph_base_react-cloud_run.lock +0 -0
  238. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/resources/locks/uv-live_api-cloud_run.lock +0 -0
  239. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/utils/generate_locks.py +0 -0
  240. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/utils/lock_utils.py +0 -0
  241. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/src/utils/watch_and_rebuild.py +0 -0
  242. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/__init__.py +0 -0
  243. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/cicd/example.env +0 -0
  244. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/cicd/scripts/delete_agent_engines.py +0 -0
  245. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/cicd/scripts/delete_alloydb_clusters.py +0 -0
  246. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/cicd/scripts/delete_vector_search.py +0 -0
  247. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/cli/commands/test_create.py +0 -0
  248. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/cli/commands/test_create_local.py +0 -0
  249. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/cli/commands/test_enhance.py +0 -0
  250. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/cli/commands/test_list.py +0 -0
  251. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/cli/utils/test_cicd.py +0 -0
  252. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/cli/utils/test_remote_template.py +0 -0
  253. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/integration/test_agent_directory_functionality.py +0 -0
  254. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/integration/test_pipeline_parity.py +0 -0
  255. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/integration/test_remote_templating.py +0 -0
  256. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/integration/test_template_linting.py +0 -0
  257. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/integration/test_templated_patterns.py +0 -0
  258. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/integration/utils.py +0 -0
  259. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/test_frontend/test_side_bar.py +0 -0
  260. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/test_frontend/test_streamlit_app.py +0 -0
  261. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/test_frontend/test_utils/test_chat_utils.py +0 -0
  262. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/test_frontend/test_utils/test_local_chat_history.py +0 -0
  263. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/test_frontend/test_utils/test_message_editing.py +0 -0
  264. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/test_frontend/test_utils/test_multimodal_utils.py +0 -0
  265. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/test_frontend/test_utils/test_stream_handler.py +0 -0
  266. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/utils/__init__.py +0 -0
  267. {agent_starter_pack-0.13.1 → agent_starter_pack-0.14.1}/tests/utils/get_agents.py +0 -0
@@ -8,7 +8,9 @@
8
8
  "Bash(gcloud compute networks vpc-access connectors list --project=agent-starter-pack-e2e-dev --region=europe-west1)",
9
9
  "Bash(gcloud alpha network-services address-reservations list --project=agent-starter-pack-e2e-dev --location=europe-west1)",
10
10
  "Bash(gcloud beta serverless address-reservations list --project=agent-starter-pack-e2e-dev --location=europe-west1)",
11
- "Bash(gcloud run services delete test-797fa619-1755528509 --region=europe-west1 --project=agent-starter-pack-e2e-dev --quiet)"
11
+ "Bash(gcloud run services delete test-797fa619-1755528509 --region=europe-west1 --project=agent-starter-pack-e2e-dev --quiet)",
12
+ "Bash(make test)",
13
+ "WebFetch(domain:github.com)"
12
14
  ],
13
15
  "deny": [],
14
16
  "ask": []
@@ -151,6 +151,7 @@ Test changes across multiple dimensions:
151
151
  - Agent types (live_api, adk_base, etc.)
152
152
  - Deployment targets (cloud_run, agent_engine)
153
153
  - Feature combinations (data_ingestion, frontend_type)
154
+ - Example command for testing the starter pack creation - from the root of the repo run: `uv run agent-starter-pack create myagent-$(date +%s) --output-dir target`
154
155
 
155
156
  ### Common Pitfalls
156
157
  - **Hardcoded URLs**: Use relative paths for frontend connections
@@ -11,6 +11,7 @@ generate-lock:
11
11
  uv run src/utils/generate_locks.py
12
12
 
13
13
  lint:
14
+ uv sync --dev --extra lint
14
15
  uv run ruff check . --config pyproject.toml --diff
15
16
  uv run ruff format . --check --config pyproject.toml --diff
16
17
  uv run mypy --config-file pyproject.toml ./src/cli ./tests ./src/frontends/streamlit
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-starter-pack
3
- Version: 0.13.1
3
+ Version: 0.14.1
4
4
  Summary: CLI to bootstrap production-ready Google Cloud GenAI agent projects from templates.
5
5
  Author-email: Google LLC <agent-starter-pack@google.com>
6
6
  License: Apache-2.0
@@ -69,7 +69,7 @@ agent-starter-pack create my-awesome-agent
69
69
 
70
70
  If you have [`uv`](https://github.com/astral-sh/uv) installed, you can create and set up your project with a single command:
71
71
  ```bash
72
- uvx agent-starter-pack create my-fullstack-agent
72
+ uvx agent-starter-pack create my-awesome-agent
73
73
  ```
74
74
  This command handles creating the project without needing to pre-install the package into a virtual environment.
75
75
  </details>
@@ -78,10 +78,10 @@ This command handles creating the project without needing to pre-install the pac
78
78
 
79
79
  ### 🔧 Enhance Existing Agents
80
80
 
81
- Already have an agent? Add production-ready deployment and infrastructure:
81
+ Already have an agent? Add production-ready deployment and infrastructure by running this command in your project's root folder:
82
82
 
83
83
  ```bash
84
- agent-starter-pack enhance my-existing-agent
84
+ uvx agent-starter-pack enhance
85
85
  ```
86
86
 
87
87
  See [Installation Guide](https://googlecloudplatform.github.io/agent-starter-pack/guide/installation) for more options, or try with zero setup in [Firebase Studio](https://studio.firebase.google.com/new?template=https%3A%2F%2Fgithub.com%2FGoogleCloudPlatform%2Fagent-starter-pack%2Ftree%2Fmain%2Fsrc%2Fresources%2Fidx) or [Cloud Shell](https://shell.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Feliasecchig%2Fasp-open-in-cloud-shell&cloudshell_print=open-in-cs).
@@ -104,6 +104,14 @@ See [Installation Guide](https://googlecloudplatform.github.io/agent-starter-pac
104
104
 
105
105
  Looking to explore more ADK examples? Check out the [ADK Samples Repository](https://github.com/google/adk-samples) for additional examples and use cases demonstrating ADK's capabilities.
106
106
 
107
+ ---
108
+
109
+ ## 🌟 Community Showcase
110
+
111
+ Explore amazing projects built with the Agent Starter Pack!
112
+
113
+ **[View Community Showcase →](https://googlecloudplatform.github.io/agent-starter-pack/guide/community-showcase)**
114
+
107
115
  #### Extra Features
108
116
 
109
117
  The `agent-starter-pack` offers two key features to accelerate and simplify the development of your agent:
@@ -125,6 +133,7 @@ This starter pack covers all aspects of Agent development, from prototyping and
125
133
  - Python 3.10+
126
134
  - [Google Cloud SDK](https://cloud.google.com/sdk/docs/install)
127
135
  - [Terraform](https://developer.hashicorp.com/terraform/downloads) (for deployment)
136
+ - [Make](https://www.gnu.org/software/make/) (for development tasks)
128
137
 
129
138
 
130
139
  ## 📚 Documentation
@@ -45,7 +45,7 @@ agent-starter-pack create my-awesome-agent
45
45
 
46
46
  If you have [`uv`](https://github.com/astral-sh/uv) installed, you can create and set up your project with a single command:
47
47
  ```bash
48
- uvx agent-starter-pack create my-fullstack-agent
48
+ uvx agent-starter-pack create my-awesome-agent
49
49
  ```
50
50
  This command handles creating the project without needing to pre-install the package into a virtual environment.
51
51
  </details>
@@ -54,10 +54,10 @@ This command handles creating the project without needing to pre-install the pac
54
54
 
55
55
  ### 🔧 Enhance Existing Agents
56
56
 
57
- Already have an agent? Add production-ready deployment and infrastructure:
57
+ Already have an agent? Add production-ready deployment and infrastructure by running this command in your project's root folder:
58
58
 
59
59
  ```bash
60
- agent-starter-pack enhance my-existing-agent
60
+ uvx agent-starter-pack enhance
61
61
  ```
62
62
 
63
63
  See [Installation Guide](https://googlecloudplatform.github.io/agent-starter-pack/guide/installation) for more options, or try with zero setup in [Firebase Studio](https://studio.firebase.google.com/new?template=https%3A%2F%2Fgithub.com%2FGoogleCloudPlatform%2Fagent-starter-pack%2Ftree%2Fmain%2Fsrc%2Fresources%2Fidx) or [Cloud Shell](https://shell.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Feliasecchig%2Fasp-open-in-cloud-shell&cloudshell_print=open-in-cs).
@@ -80,6 +80,14 @@ See [Installation Guide](https://googlecloudplatform.github.io/agent-starter-pac
80
80
 
81
81
  Looking to explore more ADK examples? Check out the [ADK Samples Repository](https://github.com/google/adk-samples) for additional examples and use cases demonstrating ADK's capabilities.
82
82
 
83
+ ---
84
+
85
+ ## 🌟 Community Showcase
86
+
87
+ Explore amazing projects built with the Agent Starter Pack!
88
+
89
+ **[View Community Showcase →](https://googlecloudplatform.github.io/agent-starter-pack/guide/community-showcase)**
90
+
83
91
  #### Extra Features
84
92
 
85
93
  The `agent-starter-pack` offers two key features to accelerate and simplify the development of your agent:
@@ -101,6 +109,7 @@ This starter pack covers all aspects of Agent development, from prototyping and
101
109
  - Python 3.10+
102
110
  - [Google Cloud SDK](https://cloud.google.com/sdk/docs/install)
103
111
  - [Terraform](https://developer.hashicorp.com/terraform/downloads) (for deployment)
112
+ - [Make](https://www.gnu.org/software/make/) (for development tasks)
104
113
 
105
114
 
106
115
  ## 📚 Documentation
@@ -234,6 +234,7 @@
234
234
  "outputs": [],
235
235
  "source": [
236
236
  "import json\n",
237
+ "import asyncio\n",
237
238
  "\n",
238
239
  "# General\n",
239
240
  "import random\n",
@@ -285,7 +286,7 @@
285
286
  " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n",
286
287
  "\n",
287
288
  "\n",
288
- "def parse_adk_output_to_dictionary(events: list[Event]) -> dict[str, Any]:\n",
289
+ "def parse_adk_output_to_dictionary(events: list[Event], *, as_json: bool = False):\n",
289
290
  " \"\"\"\n",
290
291
  " Parse ADK event output into a structured dictionary format,\n",
291
292
  " with the predicted trajectory dumped as a JSON string.\n",
@@ -293,63 +294,54 @@
293
294
  " \"\"\"\n",
294
295
  "\n",
295
296
  " final_response = \"\"\n",
296
- " predicted_trajectory_list = []\n",
297
+ " trajectory = []\n",
297
298
  "\n",
298
299
  " for event in events:\n",
299
- " # Ensure content and parts exist before accessing them\n",
300
- " if not event.content or not event.content.parts:\n",
300
+ " if not getattr(event, \"content\", None) or not getattr(event.content, \"parts\", None):\n",
301
301
  " continue\n",
302
- "\n",
303
- " # Iterate through ALL parts in the event's content\n",
304
302
  " for part in event.content.parts:\n",
305
- " if part.function_call:\n",
306
- " tool_info = {\n",
303
+ " if getattr(part, \"function_call\", None):\n",
304
+ " info = {\n",
307
305
  " \"tool_name\": part.function_call.name,\n",
308
306
  " \"tool_input\": dict(part.function_call.args),\n",
309
307
  " }\n",
310
- " # Ensure we don't add duplicates if the same call appears somehow\n",
311
- " if tool_info not in predicted_trajectory_list:\n",
312
- " predicted_trajectory_list.append(tool_info)\n",
313
- "\n",
314
- " # The final text response is usually in the last event from the model\n",
315
- " if event.content.role == \"model\" and part.text:\n",
316
- " # Overwrite response; the last text response found is likely the final one\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",
317
311
  " final_response = part.text.strip()\n",
318
312
  "\n",
319
- " # Dump the collected trajectory list into a JSON string\n",
320
- " final_output = {\n",
321
- " \"response\": str(final_response),\n",
322
- " \"predicted_trajectory\": json.dumps(predicted_trajectory_list),\n",
323
- " }\n",
313
+ " if as_json:\n",
314
+ " trajectory_out = json.dumps(trajectory)\n",
315
+ " else:\n",
316
+ " trajectory_out = trajectory\n",
324
317
  "\n",
325
- " return final_output\n",
318
+ " return {\"response\": final_response, \"predicted_trajectory\": trajectory_out}\n",
326
319
  "\n",
327
320
  "\n",
328
321
  "def format_output_as_markdown(output: dict) -> str:\n",
329
322
  " \"\"\"Convert the output dictionary to a formatted markdown string.\"\"\"\n",
330
- " markdown = \"### AI Response\\n\"\n",
331
- " markdown += f\"{output['response']}\\n\\n\"\n",
332
- "\n",
323
+ " markdown = \"### AI Response\\n\" + output[\"response\"] + \"\\n\\n\"\n",
333
324
  " if output[\"predicted_trajectory\"]:\n",
334
- " output[\"predicted_trajectory\"] = json.loads(output[\"predicted_trajectory\"])\n",
335
325
  " markdown += \"### Function Calls\\n\"\n",
336
326
  " for call in output[\"predicted_trajectory\"]:\n",
337
327
  " markdown += f\"- **Function**: `{call['tool_name']}`\\n\"\n",
338
- " markdown += \" - **Arguments**:\\n\"\n",
328
+ " markdown += \" - **Arguments**\\n\"\n",
339
329
  " for key, value in call[\"tool_input\"].items():\n",
340
330
  " markdown += f\" - `{key}`: `{value}`\\n\"\n",
341
- "\n",
342
331
  " return markdown\n",
343
332
  "\n",
344
333
  "\n",
345
334
  "def display_eval_report(eval_result: pd.DataFrame) -> None:\n",
346
335
  " \"\"\"Display the evaluation results.\"\"\"\n",
347
- " metrics_df = pd.DataFrame.from_dict(eval_result.summary_metrics, orient=\"index\").T\n",
348
336
  " display(Markdown(\"### Summary Metrics\"))\n",
349
- " display(metrics_df)\n",
350
- "\n",
351
- " display(Markdown(\"### Row-wise Metrics\"))\n",
352
- " display(eval_result.metrics_table)\n",
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",
353
345
  "\n",
354
346
  "\n",
355
347
  "def display_drilldown(row: pd.Series) -> None:\n",
@@ -586,37 +578,49 @@
586
578
  },
587
579
  "outputs": [],
588
580
  "source": [
589
- "def agent_parsed_outcome(query):\n",
590
- "\n",
591
- " app_name = \"product_research_app\"\n",
592
- " user_id = \"user_one\"\n",
593
- " session_id = \"session_one\"\n",
594
- "\n",
595
- " product_research_agent = Agent(\n",
596
- " name=\"ProductResearchAgent\",\n",
597
- " model=model,\n",
598
- " description=\"An agent that performs product research.\",\n",
599
- " instruction=f\"\"\"\n",
600
- " Analyze this user request: '{query}'.\n",
601
- " If the request is about price, use get_product_price tool.\n",
602
- " Otherwise, use get_product_details tool to get product information.\n",
603
- " \"\"\",\n",
604
- " tools=[get_product_details, get_product_price],\n",
605
- " )\n",
606
- "\n",
607
- " session_service = InMemorySessionService()\n",
608
- " _ = session_service.create_session(\n",
609
- " app_name=app_name, user_id=user_id, session_id=session_id\n",
610
- " )\n",
611
- " runner = Runner(\n",
612
- " agent=product_research_agent, app_name=app_name, session_service=session_service\n",
613
- " )\n",
614
- "\n",
615
- " content = types.Content(role=\"user\", parts=[types.Part(text=query)])\n",
616
- " events = list(\n",
617
- " runner.run(user_id=user_id, session_id=session_id, new_message=content)\n",
618
- " )\n",
619
- " return parse_adk_output_to_dictionary(events)"
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"
620
624
  ]
621
625
  },
622
626
  {
@@ -638,7 +642,7 @@
638
642
  },
639
643
  "outputs": [],
640
644
  "source": [
641
- "response = agent_parsed_outcome(query=\"Get product details for shoes\")\n",
645
+ "response = await agent_parsed_outcome(query=\"Get product details for shoes\")\n",
642
646
  "display(Markdown(format_output_as_markdown(response)))"
643
647
  ]
644
648
  },
@@ -650,7 +654,7 @@
650
654
  },
651
655
  "outputs": [],
652
656
  "source": [
653
- "response = agent_parsed_outcome(query=\"Get product price for shoes\")\n",
657
+ "response = await agent_parsed_outcome(query=\"Get product price for shoes\")\n",
654
658
  "display(Markdown(format_output_as_markdown(response)))"
655
659
  ]
656
660
  },
@@ -714,7 +718,7 @@
714
718
  " \"Get product details and price for shoes\",\n",
715
719
  " \"Get product details for speaker?\",\n",
716
720
  " ],\n",
717
- " \"reference_trajectory\": [\n",
721
+ " \"predicted_trajectory\": [\n",
718
722
  " [\n",
719
723
  " {\n",
720
724
  " \"tool_name\": \"get_product_price\",\n",
@@ -840,7 +844,7 @@
840
844
  ")\n",
841
845
  "\n",
842
846
  "single_tool_call_eval_result = single_tool_call_eval_task.evaluate(\n",
843
- " runnable=agent_parsed_outcome, experiment_run_name=EXPERIMENT_RUN\n",
847
+ " runnable=agent_parsed_outcome_sync, experiment_run_name=EXPERIMENT_RUN\n",
844
848
  ")\n",
845
849
  "\n",
846
850
  "display_eval_report(single_tool_call_eval_result)"
@@ -948,7 +952,7 @@
948
952
  ")\n",
949
953
  "\n",
950
954
  "trajectory_eval_result = trajectory_eval_task.evaluate(\n",
951
- " runnable=agent_parsed_outcome, experiment_run_name=EXPERIMENT_RUN\n",
955
+ " runnable=agent_parsed_outcome_sync, experiment_run_name=EXPERIMENT_RUN\n",
952
956
  ")\n",
953
957
  "\n",
954
958
  "display_eval_report(trajectory_eval_result)"
@@ -1055,7 +1059,7 @@
1055
1059
  ")\n",
1056
1060
  "\n",
1057
1061
  "response_eval_result = response_eval_task.evaluate(\n",
1058
- " runnable=agent_parsed_outcome, experiment_run_name=EXPERIMENT_RUN\n",
1062
+ " runnable=agent_parsed_outcome_sync, experiment_run_name=EXPERIMENT_RUN\n",
1059
1063
  ")\n",
1060
1064
  "\n",
1061
1065
  "display_eval_report(response_eval_result)"
@@ -1240,7 +1244,9 @@
1240
1244
  ")\n",
1241
1245
  "\n",
1242
1246
  "response_eval_tool_result = response_eval_tool_task.evaluate(\n",
1243
- " runnable=agent_parsed_outcome, experiment_run_name=EXPERIMENT_RUN\n",
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",
1244
1250
  ")\n",
1245
1251
  "\n",
1246
1252
  "display_eval_report(response_eval_tool_result)"
@@ -1410,7 +1416,8 @@
1410
1416
  "].apply(json.dumps)\n",
1411
1417
  "byod_eval_sample_dataset[\"reference_trajectory\"] = byod_eval_sample_dataset[\n",
1412
1418
  " \"reference_trajectory\"\n",
1413
- "].apply(json.dumps)"
1419
+ "].apply(json.dumps)\n",
1420
+ "byod_eval_sample_dataset[\"response\"] = byod_eval_sample_dataset[\"response\"].apply(json.dumps)"
1414
1421
  ]
1415
1422
  },
1416
1423
  {
@@ -234,6 +234,7 @@
234
234
  "outputs": [],
235
235
  "source": [
236
236
  "import json\n",
237
+ "import asyncio\n",
237
238
  "\n",
238
239
  "# General\n",
239
240
  "import random\n",
@@ -285,7 +286,7 @@
285
286
  " return \"\".join(random.choices(string.ascii_lowercase + string.digits, k=length))\n",
286
287
  "\n",
287
288
  "\n",
288
- "def parse_adk_output_to_dictionary(events: list[Event]) -> dict[str, Any]:\n",
289
+ "def parse_adk_output_to_dictionary(events: list[Event], *, as_json: bool = False):\n",
289
290
  " \"\"\"\n",
290
291
  " Parse ADK event output into a structured dictionary format,\n",
291
292
  " with the predicted trajectory dumped as a JSON string.\n",
@@ -293,63 +294,54 @@
293
294
  " \"\"\"\n",
294
295
  "\n",
295
296
  " final_response = \"\"\n",
296
- " predicted_trajectory_list = []\n",
297
+ " trajectory = []\n",
297
298
  "\n",
298
299
  " for event in events:\n",
299
- " # Ensure content and parts exist before accessing them\n",
300
- " if not event.content or not event.content.parts:\n",
300
+ " if not getattr(event, \"content\", None) or not getattr(event.content, \"parts\", None):\n",
301
301
  " continue\n",
302
- "\n",
303
- " # Iterate through ALL parts in the event's content\n",
304
302
  " for part in event.content.parts:\n",
305
- " if part.function_call:\n",
306
- " tool_info = {\n",
303
+ " if getattr(part, \"function_call\", None):\n",
304
+ " info = {\n",
307
305
  " \"tool_name\": part.function_call.name,\n",
308
306
  " \"tool_input\": dict(part.function_call.args),\n",
309
307
  " }\n",
310
- " # Ensure we don't add duplicates if the same call appears somehow\n",
311
- " if tool_info not in predicted_trajectory_list:\n",
312
- " predicted_trajectory_list.append(tool_info)\n",
313
- "\n",
314
- " # The final text response is usually in the last event from the model\n",
315
- " if event.content.role == \"model\" and part.text:\n",
316
- " # Overwrite response; the last text response found is likely the final one\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",
317
311
  " final_response = part.text.strip()\n",
318
312
  "\n",
319
- " # Dump the collected trajectory list into a JSON string\n",
320
- " final_output = {\n",
321
- " \"response\": str(final_response),\n",
322
- " \"predicted_trajectory\": json.dumps(predicted_trajectory_list),\n",
323
- " }\n",
313
+ " if as_json:\n",
314
+ " trajectory_out = json.dumps(trajectory)\n",
315
+ " else:\n",
316
+ " trajectory_out = trajectory\n",
324
317
  "\n",
325
- " return final_output\n",
318
+ " return {\"response\": final_response, \"predicted_trajectory\": trajectory_out}\n",
326
319
  "\n",
327
320
  "\n",
328
321
  "def format_output_as_markdown(output: dict) -> str:\n",
329
322
  " \"\"\"Convert the output dictionary to a formatted markdown string.\"\"\"\n",
330
- " markdown = \"### AI Response\\n\"\n",
331
- " markdown += f\"{output['response']}\\n\\n\"\n",
332
- "\n",
323
+ " markdown = \"### AI Response\\n\" + output[\"response\"] + \"\\n\\n\"\n",
333
324
  " if output[\"predicted_trajectory\"]:\n",
334
- " output[\"predicted_trajectory\"] = json.loads(output[\"predicted_trajectory\"])\n",
335
325
  " markdown += \"### Function Calls\\n\"\n",
336
326
  " for call in output[\"predicted_trajectory\"]:\n",
337
327
  " markdown += f\"- **Function**: `{call['tool_name']}`\\n\"\n",
338
- " markdown += \" - **Arguments**:\\n\"\n",
328
+ " markdown += \" - **Arguments**\\n\"\n",
339
329
  " for key, value in call[\"tool_input\"].items():\n",
340
330
  " markdown += f\" - `{key}`: `{value}`\\n\"\n",
341
- "\n",
342
331
  " return markdown\n",
343
332
  "\n",
344
333
  "\n",
345
334
  "def display_eval_report(eval_result: pd.DataFrame) -> None:\n",
346
335
  " \"\"\"Display the evaluation results.\"\"\"\n",
347
- " metrics_df = pd.DataFrame.from_dict(eval_result.summary_metrics, orient=\"index\").T\n",
348
336
  " display(Markdown(\"### Summary Metrics\"))\n",
349
- " display(metrics_df)\n",
350
- "\n",
351
- " display(Markdown(\"### Row-wise Metrics\"))\n",
352
- " display(eval_result.metrics_table)\n",
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",
353
345
  "\n",
354
346
  "\n",
355
347
  "def display_drilldown(row: pd.Series) -> None:\n",
@@ -586,37 +578,49 @@
586
578
  },
587
579
  "outputs": [],
588
580
  "source": [
589
- "def agent_parsed_outcome(query):\n",
590
- "\n",
591
- " app_name = \"product_research_app\"\n",
592
- " user_id = \"user_one\"\n",
593
- " session_id = \"session_one\"\n",
594
- "\n",
595
- " product_research_agent = Agent(\n",
596
- " name=\"ProductResearchAgent\",\n",
597
- " model=model,\n",
598
- " description=\"An agent that performs product research.\",\n",
599
- " instruction=f\"\"\"\n",
600
- " Analyze this user request: '{query}'.\n",
601
- " If the request is about price, use get_product_price tool.\n",
602
- " Otherwise, use get_product_details tool to get product information.\n",
603
- " \"\"\",\n",
604
- " tools=[get_product_details, get_product_price],\n",
605
- " )\n",
606
- "\n",
607
- " session_service = InMemorySessionService()\n",
608
- " _ = session_service.create_session(\n",
609
- " app_name=app_name, user_id=user_id, session_id=session_id\n",
610
- " )\n",
611
- " runner = Runner(\n",
612
- " agent=product_research_agent, app_name=app_name, session_service=session_service\n",
613
- " )\n",
614
- "\n",
615
- " content = types.Content(role=\"user\", parts=[types.Part(text=query)])\n",
616
- " events = list(\n",
617
- " runner.run(user_id=user_id, session_id=session_id, new_message=content)\n",
618
- " )\n",
619
- " return parse_adk_output_to_dictionary(events)"
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"
620
624
  ]
621
625
  },
622
626
  {
@@ -638,7 +642,7 @@
638
642
  },
639
643
  "outputs": [],
640
644
  "source": [
641
- "response = agent_parsed_outcome(query=\"Get product details for shoes\")\n",
645
+ "response = await agent_parsed_outcome(query=\"Get product details for shoes\")\n",
642
646
  "display(Markdown(format_output_as_markdown(response)))"
643
647
  ]
644
648
  },
@@ -650,7 +654,7 @@
650
654
  },
651
655
  "outputs": [],
652
656
  "source": [
653
- "response = agent_parsed_outcome(query=\"Get product price for shoes\")\n",
657
+ "response = await agent_parsed_outcome(query=\"Get product price for shoes\")\n",
654
658
  "display(Markdown(format_output_as_markdown(response)))"
655
659
  ]
656
660
  },
@@ -714,7 +718,7 @@
714
718
  " \"Get product details and price for shoes\",\n",
715
719
  " \"Get product details for speaker?\",\n",
716
720
  " ],\n",
717
- " \"reference_trajectory\": [\n",
721
+ " \"predicted_trajectory\": [\n",
718
722
  " [\n",
719
723
  " {\n",
720
724
  " \"tool_name\": \"get_product_price\",\n",
@@ -840,7 +844,7 @@
840
844
  ")\n",
841
845
  "\n",
842
846
  "single_tool_call_eval_result = single_tool_call_eval_task.evaluate(\n",
843
- " runnable=agent_parsed_outcome, experiment_run_name=EXPERIMENT_RUN\n",
847
+ " runnable=agent_parsed_outcome_sync, experiment_run_name=EXPERIMENT_RUN\n",
844
848
  ")\n",
845
849
  "\n",
846
850
  "display_eval_report(single_tool_call_eval_result)"
@@ -948,7 +952,7 @@
948
952
  ")\n",
949
953
  "\n",
950
954
  "trajectory_eval_result = trajectory_eval_task.evaluate(\n",
951
- " runnable=agent_parsed_outcome, experiment_run_name=EXPERIMENT_RUN\n",
955
+ " runnable=agent_parsed_outcome_sync, experiment_run_name=EXPERIMENT_RUN\n",
952
956
  ")\n",
953
957
  "\n",
954
958
  "display_eval_report(trajectory_eval_result)"
@@ -1055,7 +1059,7 @@
1055
1059
  ")\n",
1056
1060
  "\n",
1057
1061
  "response_eval_result = response_eval_task.evaluate(\n",
1058
- " runnable=agent_parsed_outcome, experiment_run_name=EXPERIMENT_RUN\n",
1062
+ " runnable=agent_parsed_outcome_sync, experiment_run_name=EXPERIMENT_RUN\n",
1059
1063
  ")\n",
1060
1064
  "\n",
1061
1065
  "display_eval_report(response_eval_result)"
@@ -1240,7 +1244,9 @@
1240
1244
  ")\n",
1241
1245
  "\n",
1242
1246
  "response_eval_tool_result = response_eval_tool_task.evaluate(\n",
1243
- " runnable=agent_parsed_outcome, experiment_run_name=EXPERIMENT_RUN\n",
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",
1244
1250
  ")\n",
1245
1251
  "\n",
1246
1252
  "display_eval_report(response_eval_tool_result)"
@@ -1410,7 +1416,8 @@
1410
1416
  "].apply(json.dumps)\n",
1411
1417
  "byod_eval_sample_dataset[\"reference_trajectory\"] = byod_eval_sample_dataset[\n",
1412
1418
  " \"reference_trajectory\"\n",
1413
- "].apply(json.dumps)"
1419
+ "].apply(json.dumps)\n",
1420
+ "byod_eval_sample_dataset[\"response\"] = byod_eval_sample_dataset[\"response\"].apply(json.dumps)"
1414
1421
  ]
1415
1422
  },
1416
1423
  {