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.
Files changed (255) hide show
  1. agent_starter_pack/agents/README.md +7 -0
  2. agents/langgraph_base_react/template/.templateconfig.yaml → agent_starter_pack/agents/adk_a2a_base/.template/templateconfig.yaml +5 -10
  3. agent_starter_pack/agents/adk_a2a_base/README.md +37 -0
  4. src/deployment_targets/cloud_run/Dockerfile → agent_starter_pack/agents/adk_a2a_base/app/__init__.py +2 -14
  5. agent_starter_pack/agents/adk_a2a_base/app/agent.py +70 -0
  6. agent_starter_pack/agents/adk_a2a_base/notebooks/adk_a2a_app_testing.ipynb +583 -0
  7. agents/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb → agent_starter_pack/agents/adk_a2a_base/notebooks/evaluating_adk_agent.ipynb +163 -199
  8. {agents/adk_base → agent_starter_pack/agents/adk_a2a_base}/tests/integration/test_agent.py +2 -2
  9. agents/adk_base/template/.templateconfig.yaml → agent_starter_pack/agents/adk_base/.template/templateconfig.yaml +4 -1
  10. {agents → agent_starter_pack/agents}/adk_base/README.md +1 -1
  11. agent_starter_pack/agents/adk_base/app/__init__.py +17 -0
  12. {agents → agent_starter_pack/agents}/adk_base/app/agent.py +5 -2
  13. {agents → agent_starter_pack/agents}/adk_base/notebooks/adk_app_testing.ipynb +128 -82
  14. agents/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb → agent_starter_pack/agents/adk_base/notebooks/evaluating_adk_agent.ipynb +181 -207
  15. agent_starter_pack/agents/adk_base/tests/integration/test_agent.py +58 -0
  16. agents/crewai_coding_crew/template/.templateconfig.yaml → agent_starter_pack/agents/adk_live/.template/templateconfig.yaml +5 -9
  17. agent_starter_pack/agents/adk_live/README.md +32 -0
  18. agent_starter_pack/agents/adk_live/app/__init__.py +17 -0
  19. agent_starter_pack/agents/adk_live/app/agent.py +51 -0
  20. agent_starter_pack/agents/adk_live/tests/unit/test_dummy.py +38 -0
  21. agents/agentic_rag/template/.templateconfig.yaml → agent_starter_pack/agents/agentic_rag/.template/templateconfig.yaml +7 -3
  22. {agents → agent_starter_pack/agents}/agentic_rag/README.md +1 -1
  23. agent_starter_pack/agents/agentic_rag/app/__init__.py +17 -0
  24. {agents → agent_starter_pack/agents}/agentic_rag/app/agent.py +8 -4
  25. {agents → agent_starter_pack/agents}/agentic_rag/notebooks/adk_app_testing.ipynb +128 -82
  26. agent_starter_pack/agents/agentic_rag/notebooks/evaluating_adk_agent.ipynb +1535 -0
  27. {agents → agent_starter_pack/agents}/agentic_rag/tests/integration/test_agent.py +3 -3
  28. agent_starter_pack/agents/langgraph_base/.template/templateconfig.yaml +31 -0
  29. agent_starter_pack/agents/langgraph_base/README.md +30 -0
  30. agent_starter_pack/agents/langgraph_base/app/__init__.py +17 -0
  31. agent_starter_pack/agents/langgraph_base/app/agent.py +34 -0
  32. {agents/crewai_coding_crew → agent_starter_pack/agents/langgraph_base}/notebooks/evaluating_langgraph_agent.ipynb +30 -17
  33. {agents/langgraph_base_react → agent_starter_pack/agents/langgraph_base}/tests/integration/test_agent.py +2 -2
  34. {src → agent_starter_pack}/base_template/.gitignore +5 -3
  35. agent_starter_pack/base_template/GEMINI.md +5 -0
  36. agent_starter_pack/base_template/Makefile +339 -0
  37. agent_starter_pack/base_template/README.md +267 -0
  38. agent_starter_pack/base_template/deployment/README.md +11 -0
  39. {src → agent_starter_pack}/base_template/deployment/terraform/apis.tf +2 -2
  40. {src → agent_starter_pack}/base_template/deployment/terraform/dev/apis.tf +6 -1
  41. {src → agent_starter_pack}/base_template/deployment/terraform/dev/iam.tf +12 -11
  42. {src → agent_starter_pack}/base_template/deployment/terraform/dev/providers.tf +5 -1
  43. {src → agent_starter_pack}/base_template/deployment/terraform/dev/storage.tf +1 -1
  44. {src → agent_starter_pack}/base_template/deployment/terraform/dev/variables.tf +10 -10
  45. agent_starter_pack/base_template/deployment/terraform/dev/{% if cookiecutter.is_adk %}telemetry.tf{% else %}unused_telemetry.tf{% endif %} +193 -0
  46. agent_starter_pack/base_template/deployment/terraform/github.tf +337 -0
  47. {src → agent_starter_pack}/base_template/deployment/terraform/iam.tf +20 -41
  48. {src → agent_starter_pack}/base_template/deployment/terraform/locals.tf +10 -3
  49. {src/resources/setup_cicd → agent_starter_pack/base_template/deployment/terraform}/providers.tf +8 -1
  50. {src → agent_starter_pack}/base_template/deployment/terraform/service_accounts.tf +7 -8
  51. agent_starter_pack/base_template/deployment/terraform/sql/completions.sql +138 -0
  52. {src → agent_starter_pack}/base_template/deployment/terraform/storage.tf +7 -16
  53. {src → agent_starter_pack}/base_template/deployment/terraform/variables.tf +61 -28
  54. {src → agent_starter_pack}/base_template/deployment/terraform/vars/env.tfvars +6 -1
  55. agent_starter_pack/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'github_actions' %}wif.tf{% else %}unused_wif.tf{% endif %} +43 -0
  56. 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
  57. agent_starter_pack/base_template/deployment/terraform/{% if cookiecutter.is_adk %}telemetry.tf{% else %}unused_telemetry.tf{% endif %} +206 -0
  58. {src → agent_starter_pack}/base_template/pyproject.toml +24 -37
  59. agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +132 -0
  60. agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml +65 -0
  61. agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +259 -0
  62. 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
  63. 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
  64. agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +322 -0
  65. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/telemetry.py +96 -0
  66. {src/base_template/app/utils → agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils}/typing.py +7 -9
  67. 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
  68. 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
  69. 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
  70. 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
  71. 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
  72. agent_starter_pack/cli/commands/create.py +1256 -0
  73. agent_starter_pack/cli/commands/enhance.py +611 -0
  74. agent_starter_pack/cli/commands/list.py +203 -0
  75. agent_starter_pack/cli/commands/register_gemini_enterprise.py +1070 -0
  76. agent_starter_pack/cli/commands/setup_cicd.py +862 -0
  77. {src → agent_starter_pack}/cli/main.py +10 -2
  78. {src → agent_starter_pack}/cli/utils/cicd.py +139 -48
  79. agent_starter_pack/cli/utils/gcp.py +263 -0
  80. agent_starter_pack/cli/utils/logging.py +103 -0
  81. agent_starter_pack/cli/utils/remote_template.py +677 -0
  82. agent_starter_pack/cli/utils/template.py +1466 -0
  83. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/components/process_data.py +1 -1
  84. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/submit_pipeline.py +20 -6
  85. {src → agent_starter_pack}/data_ingestion/pyproject.toml +1 -0
  86. {src → agent_starter_pack}/data_ingestion/uv.lock +602 -494
  87. agent_starter_pack/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +484 -0
  88. agent_starter_pack/deployment_targets/agent_engine/tests/load_test/README.md +84 -0
  89. agent_starter_pack/deployment_targets/agent_engine/tests/load_test/load_test.py +424 -0
  90. agent_starter_pack/deployment_targets/agent_engine/tests/{% if cookiecutter.is_a2a %}helpers.py{% else %}unused_helpers.py{% endif %} +138 -0
  91. agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/agent_engine_app.py +263 -0
  92. agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/app_utils/deploy.py +414 -0
  93. 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
  94. agent_starter_pack/deployment_targets/cloud_run/Dockerfile +51 -0
  95. agent_starter_pack/deployment_targets/cloud_run/deployment/terraform/dev/service.tf +243 -0
  96. agent_starter_pack/deployment_targets/cloud_run/deployment/terraform/service.tf +417 -0
  97. agent_starter_pack/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +705 -0
  98. agent_starter_pack/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +321 -0
  99. agent_starter_pack/deployment_targets/cloud_run/tests/load_test/README.md +165 -0
  100. agent_starter_pack/deployment_targets/cloud_run/tests/load_test/load_test.py +329 -0
  101. agent_starter_pack/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}/fast_api_app.py +556 -0
  102. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/package-lock.json +79 -1044
  103. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/package.json +1 -9
  104. agent_starter_pack/frontends/adk_live_react/frontend/src/App.tsx +65 -0
  105. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/Logger.tsx +8 -3
  106. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/logger.scss +26 -0
  107. agent_starter_pack/frontends/adk_live_react/frontend/src/components/side-panel/SidePanel.tsx +516 -0
  108. agent_starter_pack/frontends/adk_live_react/frontend/src/components/side-panel/side-panel.scss +563 -0
  109. agent_starter_pack/frontends/adk_live_react/frontend/src/components/transcription-preview/TranscriptionPreview.tsx +106 -0
  110. agent_starter_pack/frontends/adk_live_react/frontend/src/components/transcription-preview/transcription-preview.scss +150 -0
  111. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-live-api.ts +8 -2
  112. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/multimodal-live-types.ts +40 -2
  113. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audio-recorder.ts +1 -1
  114. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audio-streamer.ts +1 -1
  115. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/multimodal-live-client.ts +210 -24
  116. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/utils.ts +27 -5
  117. agent_starter_pack/resources/docs/adk-cheatsheet.md +1628 -0
  118. agent_starter_pack/resources/locks/uv-adk_a2a_base-agent_engine.lock +4966 -0
  119. agent_starter_pack/resources/locks/uv-adk_a2a_base-cloud_run.lock +5011 -0
  120. agent_starter_pack/resources/locks/uv-adk_base-agent_engine.lock +4946 -0
  121. agent_starter_pack/resources/locks/uv-adk_base-cloud_run.lock +4991 -0
  122. agent_starter_pack/resources/locks/uv-adk_live-agent_engine.lock +4963 -0
  123. agent_starter_pack/resources/locks/uv-adk_live-cloud_run.lock +5006 -0
  124. agent_starter_pack/resources/locks/uv-agentic_rag-agent_engine.lock +5487 -0
  125. agent_starter_pack/resources/locks/uv-agentic_rag-cloud_run.lock +5532 -0
  126. agent_starter_pack/resources/locks/uv-langgraph_base-agent_engine.lock +5788 -0
  127. agent_starter_pack/resources/locks/uv-langgraph_base-cloud_run.lock +5811 -0
  128. {src → agent_starter_pack}/utils/generate_locks.py +15 -12
  129. {src → agent_starter_pack}/utils/lock_utils.py +4 -7
  130. {src → agent_starter_pack}/utils/watch_and_rebuild.py +2 -2
  131. agent_starter_pack-0.21.0.dist-info/METADATA +182 -0
  132. agent_starter_pack-0.21.0.dist-info/RECORD +171 -0
  133. agent_starter_pack-0.21.0.dist-info/entry_points.txt +2 -0
  134. llm.txt +362 -0
  135. agent_starter_pack-0.3.3.dist-info/METADATA +0 -164
  136. agent_starter_pack-0.3.3.dist-info/RECORD +0 -176
  137. agent_starter_pack-0.3.3.dist-info/entry_points.txt +0 -2
  138. agents/crewai_coding_crew/README.md +0 -34
  139. agents/crewai_coding_crew/app/agent.py +0 -86
  140. agents/crewai_coding_crew/app/crew/config/agents.yaml +0 -39
  141. agents/crewai_coding_crew/app/crew/config/tasks.yaml +0 -37
  142. agents/crewai_coding_crew/app/crew/crew.py +0 -71
  143. agents/crewai_coding_crew/tests/integration/test_agent.py +0 -47
  144. agents/langgraph_base_react/README.md +0 -9
  145. agents/langgraph_base_react/app/agent.py +0 -73
  146. agents/live_api/README.md +0 -37
  147. agents/live_api/app/agent.py +0 -78
  148. agents/live_api/app/server.py +0 -196
  149. agents/live_api/app/templates.py +0 -51
  150. agents/live_api/app/vector_store.py +0 -55
  151. agents/live_api/template/.templateconfig.yaml +0 -29
  152. agents/live_api/tests/integration/test_server_e2e.py +0 -254
  153. agents/live_api/tests/load_test/load_test.py +0 -40
  154. agents/live_api/tests/unit/test_server.py +0 -143
  155. src/base_template/Makefile +0 -72
  156. src/base_template/README.md +0 -208
  157. src/base_template/app/__init__.py +0 -3
  158. src/base_template/app/utils/tracing.py +0 -155
  159. src/base_template/deployment/README.md +0 -126
  160. src/base_template/deployment/cd/staging.yaml +0 -216
  161. src/base_template/deployment/terraform/dev/log_sinks.tf +0 -63
  162. src/base_template/deployment/terraform/log_sinks.tf +0 -70
  163. src/base_template/deployment/terraform/providers.tf +0 -37
  164. src/cli/commands/create.py +0 -664
  165. src/cli/commands/setup_cicd.py +0 -829
  166. src/cli/utils/gcp.py +0 -117
  167. src/cli/utils/logging.py +0 -51
  168. src/cli/utils/template.py +0 -737
  169. src/deployment_targets/agent_engine/app/agent_engine_app.py +0 -336
  170. src/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb +0 -1025
  171. src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +0 -183
  172. src/deployment_targets/agent_engine/tests/load_test/README.md +0 -42
  173. src/deployment_targets/agent_engine/tests/load_test/load_test.py +0 -107
  174. src/deployment_targets/cloud_run/app/server.py +0 -154
  175. src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +0 -249
  176. src/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +0 -0
  177. src/deployment_targets/cloud_run/tests/load_test/README.md +0 -83
  178. src/deployment_targets/cloud_run/tests/load_test/load_test.py +0 -118
  179. src/deployment_targets/cloud_run/uv.lock +0 -6952
  180. src/frontends/live_api_react/frontend/src/App.tsx +0 -205
  181. src/frontends/live_api_react/frontend/src/components/control-tray/ControlTray.tsx +0 -217
  182. src/frontends/live_api_react/frontend/src/components/control-tray/control-tray.scss +0 -201
  183. src/frontends/live_api_react/frontend/src/components/side-panel/SidePanel.tsx +0 -161
  184. src/frontends/live_api_react/frontend/src/components/side-panel/side-panel.scss +0 -285
  185. src/frontends/streamlit/frontend/side_bar.py +0 -214
  186. src/frontends/streamlit/frontend/streamlit_app.py +0 -265
  187. src/frontends/streamlit/frontend/style/app_markdown.py +0 -37
  188. src/frontends/streamlit/frontend/utils/chat_utils.py +0 -67
  189. src/frontends/streamlit/frontend/utils/local_chat_history.py +0 -125
  190. src/frontends/streamlit/frontend/utils/message_editing.py +0 -59
  191. src/frontends/streamlit/frontend/utils/multimodal_utils.py +0 -217
  192. src/frontends/streamlit/frontend/utils/stream_handler.py +0 -301
  193. src/frontends/streamlit/frontend/utils/title_summary.py +0 -94
  194. src/frontends/streamlit_adk/frontend/side_bar.py +0 -214
  195. src/frontends/streamlit_adk/frontend/streamlit_app.py +0 -314
  196. src/frontends/streamlit_adk/frontend/style/app_markdown.py +0 -37
  197. src/frontends/streamlit_adk/frontend/utils/chat_utils.py +0 -84
  198. src/frontends/streamlit_adk/frontend/utils/local_chat_history.py +0 -110
  199. src/frontends/streamlit_adk/frontend/utils/message_editing.py +0 -61
  200. src/frontends/streamlit_adk/frontend/utils/multimodal_utils.py +0 -223
  201. src/frontends/streamlit_adk/frontend/utils/stream_handler.py +0 -311
  202. src/frontends/streamlit_adk/frontend/utils/title_summary.py +0 -129
  203. src/resources/containers/data_processing/Dockerfile +0 -27
  204. src/resources/containers/e2e-tests/Dockerfile +0 -19
  205. src/resources/idx/.idx/dev.nix +0 -57
  206. src/resources/idx/idx-template.json +0 -21
  207. src/resources/idx/idx-template.nix +0 -26
  208. src/resources/locks/uv-adk_base-agent_engine.lock +0 -5338
  209. src/resources/locks/uv-adk_base-cloud_run.lock +0 -5930
  210. src/resources/locks/uv-agentic_rag-agent_engine.lock +0 -5528
  211. src/resources/locks/uv-agentic_rag-cloud_run.lock +0 -6120
  212. src/resources/locks/uv-crewai_coding_crew-agent_engine.lock +0 -6231
  213. src/resources/locks/uv-crewai_coding_crew-cloud_run.lock +0 -6839
  214. src/resources/locks/uv-langgraph_base_react-agent_engine.lock +0 -5233
  215. src/resources/locks/uv-langgraph_base_react-cloud_run.lock +0 -5862
  216. src/resources/locks/uv-live_api-cloud_run.lock +0 -5832
  217. src/resources/setup_cicd/cicd_variables.tf +0 -41
  218. src/resources/setup_cicd/github.tf +0 -87
  219. {agents → agent_starter_pack/agents}/agentic_rag/app/retrievers.py +0 -0
  220. {agents → agent_starter_pack/agents}/agentic_rag/app/templates.py +0 -0
  221. {src → agent_starter_pack}/base_template/deployment/terraform/dev/vars/env.tfvars +0 -0
  222. {src → agent_starter_pack}/base_template/tests/unit/test_dummy.py +0 -0
  223. {src/deployment_targets/agent_engine/app/utils → agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils}/gcs.py +0 -0
  224. {src → agent_starter_pack}/cli/utils/__init__.py +0 -0
  225. {src → agent_starter_pack}/cli/utils/datastores.py +0 -0
  226. {src → agent_starter_pack}/cli/utils/version.py +0 -0
  227. {src → agent_starter_pack}/data_ingestion/README.md +0 -0
  228. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/components/ingest_data.py +0 -0
  229. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/pipeline.py +0 -0
  230. {src → agent_starter_pack}/deployment_targets/agent_engine/deployment_metadata.json +0 -0
  231. {src → agent_starter_pack}/deployment_targets/agent_engine/tests/load_test/.results/.placeholder +0 -0
  232. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/favicon.ico +0 -0
  233. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/index.html +0 -0
  234. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/robots.txt +0 -0
  235. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.scss +0 -0
  236. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.test.tsx +0 -0
  237. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/audio-pulse/AudioPulse.tsx +0 -0
  238. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/audio-pulse/audio-pulse.scss +0 -0
  239. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/mock-logs.ts +0 -0
  240. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/contexts/LiveAPIContext.tsx +0 -0
  241. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-media-stream-mux.ts +0 -0
  242. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-screen-capture.ts +0 -0
  243. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-webcam.ts +0 -0
  244. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/index.css +0 -0
  245. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/index.tsx +0 -0
  246. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/react-app-env.d.ts +0 -0
  247. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/reportWebVitals.ts +0 -0
  248. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/setupTests.ts +0 -0
  249. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audioworklet-registry.ts +0 -0
  250. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/store-logger.ts +0 -0
  251. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/worklets/audio-processing.ts +0 -0
  252. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/worklets/vol-meter.ts +0 -0
  253. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/tsconfig.json +0 -0
  254. {agent_starter_pack-0.3.3.dist-info → agent_starter_pack-0.21.0.dist-info}/WHEEL +0 -0
  255. {agent_starter_pack-0.3.3.dist-info → agent_starter_pack-0.21.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,337 @@
1
+ # Copyright 2025 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ provider "github" {
16
+ owner = var.repository_owner
17
+ }
18
+
19
+ # Try to get existing repo
20
+ data "github_repository" "existing_repo" {
21
+ count = var.create_repository ? 0 : 1
22
+ full_name = "${var.repository_owner}/${var.repository_name}"
23
+ }
24
+
25
+ # Only create GitHub repo if create_repository is true
26
+ resource "github_repository" "repo" {
27
+ count = var.create_repository ? 1 : 0
28
+ name = var.repository_name
29
+ description = "Repository created with goo.gle/agent-starter-pack"
30
+ visibility = "private"
31
+
32
+ has_issues = true
33
+ has_wiki = false
34
+ has_projects = false
35
+ has_downloads = false
36
+
37
+ allow_merge_commit = true
38
+ allow_squash_merge = true
39
+ allow_rebase_merge = true
40
+
41
+ auto_init = false
42
+ }
43
+
44
+ {% if cookiecutter.cicd_runner == 'github_actions' %}
45
+ resource "github_actions_variable" "gcp_project_number" {
46
+ repository = var.repository_name
47
+ variable_name = "GCP_PROJECT_NUMBER"
48
+ value = data.google_project.cicd_project.number
49
+ depends_on = [github_repository.repo]
50
+ }
51
+
52
+ resource "github_actions_secret" "wif_pool_id" {
53
+ repository = var.repository_name
54
+ secret_name = "WIF_POOL_ID"
55
+ plaintext_value = google_iam_workload_identity_pool.github_pool.workload_identity_pool_id
56
+ depends_on = [github_repository.repo, data.github_repository.existing_repo]
57
+ }
58
+
59
+ resource "github_actions_secret" "wif_provider_id" {
60
+ repository = var.repository_name
61
+ secret_name = "WIF_PROVIDER_ID"
62
+ plaintext_value = google_iam_workload_identity_pool_provider.github_provider.workload_identity_pool_provider_id
63
+ depends_on = [github_repository.repo, data.github_repository.existing_repo]
64
+ }
65
+
66
+ resource "github_actions_secret" "gcp_service_account" {
67
+ repository = var.repository_name
68
+ secret_name = "GCP_SERVICE_ACCOUNT"
69
+ plaintext_value = google_service_account.cicd_runner_sa.email
70
+ depends_on = [github_repository.repo, data.github_repository.existing_repo]
71
+ }
72
+
73
+ resource "github_actions_variable" "staging_project_id" {
74
+ repository = var.repository_name
75
+ variable_name = "STAGING_PROJECT_ID"
76
+ value = var.staging_project_id
77
+ depends_on = [github_repository.repo]
78
+ }
79
+
80
+ resource "github_actions_variable" "prod_project_id" {
81
+ repository = var.repository_name
82
+ variable_name = "PROD_PROJECT_ID"
83
+ value = var.prod_project_id
84
+ depends_on = [github_repository.repo]
85
+ }
86
+
87
+ resource "github_actions_variable" "region" {
88
+ repository = var.repository_name
89
+ variable_name = "REGION"
90
+ value = var.region
91
+ depends_on = [github_repository.repo]
92
+ }
93
+
94
+ resource "github_actions_variable" "cicd_project_id" {
95
+ repository = var.repository_name
96
+ variable_name = "CICD_PROJECT_ID"
97
+ value = var.cicd_runner_project_id
98
+ depends_on = [github_repository.repo]
99
+ }
100
+
101
+ resource "github_actions_variable" "app_sa_email_staging" {
102
+ repository = var.repository_name
103
+ variable_name = "APP_SA_EMAIL_STAGING"
104
+ value = google_service_account.app_sa["staging"].email
105
+ depends_on = [github_repository.repo]
106
+ }
107
+
108
+ resource "github_actions_variable" "app_sa_email_prod" {
109
+ repository = var.repository_name
110
+ variable_name = "APP_SA_EMAIL_PROD"
111
+ value = google_service_account.app_sa["prod"].email
112
+ depends_on = [github_repository.repo]
113
+ }
114
+
115
+ resource "github_actions_variable" "app_service_account_staging" {
116
+ repository = var.repository_name
117
+ variable_name = "APP_SERVICE_ACCOUNT_STAGING"
118
+ value = google_service_account.app_sa["staging"].email
119
+ depends_on = [github_repository.repo]
120
+ }
121
+
122
+ resource "github_actions_variable" "app_service_account_prod" {
123
+ repository = var.repository_name
124
+ variable_name = "APP_SERVICE_ACCOUNT_PROD"
125
+ value = google_service_account.app_sa["prod"].email
126
+ depends_on = [github_repository.repo]
127
+ }
128
+
129
+ resource "github_actions_variable" "logs_bucket_name_staging" {
130
+ repository = var.repository_name
131
+ variable_name = "LOGS_BUCKET_NAME_STAGING"
132
+ value = google_storage_bucket.logs_data_bucket[var.staging_project_id].name
133
+ depends_on = [github_repository.repo]
134
+ }
135
+
136
+ resource "github_actions_variable" "logs_bucket_name_prod" {
137
+ repository = var.repository_name
138
+ variable_name = "LOGS_BUCKET_NAME_PROD"
139
+ value = google_storage_bucket.logs_data_bucket[var.prod_project_id].name
140
+ depends_on = [github_repository.repo]
141
+ }
142
+
143
+ {% if cookiecutter.deployment_target == 'cloud_run' %}
144
+ resource "github_actions_variable" "container_name" {
145
+ repository = var.repository_name
146
+ variable_name = "CONTAINER_NAME"
147
+ value = var.project_name
148
+ depends_on = [github_repository.repo]
149
+ }
150
+
151
+ resource "github_actions_variable" "artifact_registry_repo_name" {
152
+ repository = var.repository_name
153
+ variable_name = "ARTIFACT_REGISTRY_REPO_NAME"
154
+ value = google_artifact_registry_repository.repo-artifacts-genai.repository_id
155
+ depends_on = [github_repository.repo]
156
+ }
157
+ {% endif %}
158
+
159
+ {% if cookiecutter.data_ingestion %}
160
+ resource "github_actions_variable" "pipeline_gcs_root_staging" {
161
+ repository = var.repository_name
162
+ variable_name = "PIPELINE_GCS_ROOT_STAGING"
163
+ value = "gs://${google_storage_bucket.data_ingestion_pipeline_gcs_root["staging"].name}"
164
+ depends_on = [github_repository.repo]
165
+ }
166
+
167
+ resource "github_actions_variable" "pipeline_gcs_root_prod" {
168
+ repository = var.repository_name
169
+ variable_name = "PIPELINE_GCS_ROOT_PROD"
170
+ value = "gs://${google_storage_bucket.data_ingestion_pipeline_gcs_root["prod"].name}"
171
+ depends_on = [github_repository.repo]
172
+ }
173
+
174
+ resource "github_actions_variable" "pipeline_sa_email_staging" {
175
+ repository = var.repository_name
176
+ variable_name = "PIPELINE_SA_EMAIL_STAGING"
177
+ value = google_service_account.vertexai_pipeline_app_sa["staging"].email
178
+ depends_on = [github_repository.repo]
179
+ }
180
+
181
+ resource "github_actions_variable" "pipeline_sa_email_prod" {
182
+ repository = var.repository_name
183
+ variable_name = "PIPELINE_SA_EMAIL_PROD"
184
+ value = google_service_account.vertexai_pipeline_app_sa["prod"].email
185
+ depends_on = [github_repository.repo]
186
+ }
187
+
188
+ resource "github_actions_variable" "pipeline_name" {
189
+ repository = var.repository_name
190
+ variable_name = "PIPELINE_NAME"
191
+ value = var.project_name
192
+ depends_on = [github_repository.repo]
193
+ }
194
+
195
+ resource "github_actions_variable" "pipeline_cron_schedule" {
196
+ repository = var.repository_name
197
+ variable_name = "PIPELINE_CRON_SCHEDULE"
198
+ value = var.pipeline_cron_schedule
199
+ depends_on = [github_repository.repo]
200
+ }
201
+
202
+ {% if cookiecutter.datastore_type == "vertex_ai_search" %}
203
+ resource "github_actions_variable" "data_store_id_staging" {
204
+ repository = var.repository_name
205
+ variable_name = "DATA_STORE_ID_STAGING"
206
+ value = google_discovery_engine_data_store.data_store_staging.data_store_id
207
+ depends_on = [github_repository.repo]
208
+ }
209
+
210
+ resource "github_actions_variable" "data_store_id_prod" {
211
+ repository = var.repository_name
212
+ variable_name = "DATA_STORE_ID_PROD"
213
+ value = google_discovery_engine_data_store.data_store_prod.data_store_id
214
+ depends_on = [github_repository.repo]
215
+ }
216
+
217
+ resource "github_actions_variable" "data_store_region" {
218
+ repository = var.repository_name
219
+ variable_name = "DATA_STORE_REGION"
220
+ value = var.data_store_region
221
+ depends_on = [github_repository.repo]
222
+ }
223
+ {% elif cookiecutter.datastore_type == "vertex_ai_vector_search" %}
224
+ resource "github_actions_variable" "vector_search_index_staging" {
225
+ repository = var.repository_name
226
+ variable_name = "VECTOR_SEARCH_INDEX_STAGING"
227
+ value = google_vertex_ai_index.vector_search_index_staging.id
228
+ depends_on = [github_repository.repo]
229
+ }
230
+
231
+ resource "github_actions_variable" "vector_search_index_prod" {
232
+ repository = var.repository_name
233
+ variable_name = "VECTOR_SEARCH_INDEX_PROD"
234
+ value = google_vertex_ai_index.vector_search_index_prod.id
235
+ depends_on = [github_repository.repo]
236
+ }
237
+
238
+ resource "github_actions_variable" "vector_search_index_endpoint_staging" {
239
+ repository = var.repository_name
240
+ variable_name = "VECTOR_SEARCH_INDEX_ENDPOINT_STAGING"
241
+ value = google_vertex_ai_index_endpoint.vector_search_index_endpoint_staging.id
242
+ depends_on = [github_repository.repo]
243
+ }
244
+
245
+ resource "github_actions_variable" "vector_search_index_endpoint_prod" {
246
+ repository = var.repository_name
247
+ variable_name = "VECTOR_SEARCH_INDEX_ENDPOINT_PROD"
248
+ value = google_vertex_ai_index_endpoint.vector_search_index_endpoint_prod.id
249
+ depends_on = [github_repository.repo]
250
+ }
251
+
252
+ resource "github_actions_variable" "vector_search_bucket_staging" {
253
+ repository = var.repository_name
254
+ variable_name = "VECTOR_SEARCH_BUCKET_STAGING"
255
+ value = google_storage_bucket.vector_search_data_bucket["staging"].url
256
+ depends_on = [github_repository.repo]
257
+ }
258
+
259
+ resource "github_actions_variable" "vector_search_bucket_prod" {
260
+ repository = var.repository_name
261
+ variable_name = "VECTOR_SEARCH_BUCKET_PROD"
262
+ value = google_storage_bucket.vector_search_data_bucket["prod"].url
263
+ depends_on = [github_repository.repo]
264
+ }
265
+ {% endif %}
266
+ {% endif %}
267
+
268
+ resource "github_repository_environment" "production_environment" {
269
+ repository = var.repository_name
270
+ environment = "production"
271
+ depends_on = [github_repository.repo, data.github_repository.existing_repo]
272
+
273
+ deployment_branch_policy {
274
+ protected_branches = false
275
+ custom_branch_policies = true
276
+ }
277
+ }
278
+ {% else %}
279
+
280
+ # Reference existing GitHub PAT secret created by gcloud CLI
281
+ data "google_secret_manager_secret" "github_pat" {
282
+ project = var.cicd_runner_project_id
283
+ secret_id = var.github_pat_secret_id
284
+ }
285
+
286
+ # Get CICD project data for Cloud Build service account
287
+ data "google_project" "cicd_project" {
288
+ project_id = var.cicd_runner_project_id
289
+ }
290
+
291
+ # Grant Cloud Build service account access to GitHub PAT secret
292
+ resource "google_secret_manager_secret_iam_member" "cloudbuild_secret_accessor" {
293
+ project = var.cicd_runner_project_id
294
+ secret_id = data.google_secret_manager_secret.github_pat.secret_id
295
+ role = "roles/secretmanager.secretAccessor"
296
+ member = "serviceAccount:service-${data.google_project.cicd_project.number}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
297
+ depends_on = [resource.google_project_service.cicd_services]
298
+ }
299
+
300
+ # Create the GitHub connection (fallback for manual Terraform usage)
301
+ resource "google_cloudbuildv2_connection" "github_connection" {
302
+ count = var.create_cb_connection ? 0 : 1
303
+ project = var.cicd_runner_project_id
304
+ location = var.region
305
+ name = var.host_connection_name
306
+
307
+ github_config {
308
+ app_installation_id = var.github_app_installation_id
309
+ authorizer_credential {
310
+ oauth_token_secret_version = "${data.google_secret_manager_secret.github_pat.id}/versions/latest"
311
+ }
312
+ }
313
+ depends_on = [
314
+ resource.google_project_service.cicd_services,
315
+ resource.google_project_service.deploy_project_services,
316
+ resource.google_secret_manager_secret_iam_member.cloudbuild_secret_accessor
317
+ ]
318
+ }
319
+
320
+
321
+ resource "google_cloudbuildv2_repository" "repo" {
322
+ project = var.cicd_runner_project_id
323
+ location = var.region
324
+ name = var.repository_name
325
+
326
+ # Use existing connection ID when it exists, otherwise use the created connection
327
+ parent_connection = var.create_cb_connection ? "projects/${var.cicd_runner_project_id}/locations/${var.region}/connections/${var.host_connection_name}" : google_cloudbuildv2_connection.github_connection[0].id
328
+ remote_uri = "https://github.com/${var.repository_owner}/${var.repository_name}.git"
329
+ depends_on = [
330
+ resource.google_project_service.cicd_services,
331
+ resource.google_project_service.deploy_project_services,
332
+ data.github_repository.existing_repo,
333
+ github_repository.repo,
334
+ google_cloudbuildv2_connection.github_connection,
335
+ ]
336
+ }
337
+ {% endif %}
@@ -25,7 +25,7 @@ resource "google_project_iam_member" "cicd_project_roles" {
25
25
  project = var.cicd_runner_project_id
26
26
  role = each.value
27
27
  member = "serviceAccount:${resource.google_service_account.cicd_runner_sa.email}"
28
- depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.shared_services]
28
+ depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.deploy_project_services]
29
29
 
30
30
  }
31
31
 
@@ -42,24 +42,12 @@ resource "google_project_iam_member" "other_projects_roles" {
42
42
  project = each.value.project_id
43
43
  role = each.value.role
44
44
  member = "serviceAccount:${resource.google_service_account.cicd_runner_sa.email}"
45
- depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.shared_services]
45
+ depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.deploy_project_services]
46
46
  }
47
- {% if cookiecutter.deployment_target == 'cloud_run' %}
48
- # 3. Allow Cloud Run service SA to pull containers stored in the CICD project
49
- resource "google_project_iam_member" "cicd_run_invoker_artifact_registry_reader" {
50
- for_each = local.deploy_project_ids
51
- project = var.cicd_runner_project_id
52
-
53
- role = "roles/artifactregistry.reader"
54
- member = "serviceAccount:service-${data.google_project.projects[each.key].number}@serverless-robot-prod.iam.gserviceaccount.com"
55
- depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.shared_services]
56
-
57
- }
58
-
59
- # 4. Grant Cloud Run SA the required permissions to run the application
60
- resource "google_project_iam_member" "cloud_run_app_sa_roles" {
47
+ # 3. Grant application SA the required permissions to run the application
48
+ resource "google_project_iam_member" "app_sa_roles" {
61
49
  for_each = {
62
- for pair in setproduct(keys(local.deploy_project_ids), var.cloud_run_app_roles) :
50
+ for pair in setproduct(keys(local.deploy_project_ids), var.app_sa_roles) :
63
51
  join(",", pair) => {
64
52
  project = local.deploy_project_ids[pair[0]]
65
53
  role = pair[1]
@@ -68,47 +56,38 @@ resource "google_project_iam_member" "cloud_run_app_sa_roles" {
68
56
 
69
57
  project = each.value.project
70
58
  role = each.value.role
71
- member = "serviceAccount:${google_service_account.cloud_run_app_sa[split(",", each.key)[0]].email}"
72
- depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.shared_services]
59
+ member = "serviceAccount:${google_service_account.app_sa[split(",", each.key)[0]].email}"
60
+ depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.deploy_project_services]
73
61
  }
74
- {% elif cookiecutter.deployment_target == 'agent_engine' %}
75
- resource "google_project_service_identity" "vertex_sa" {
62
+
63
+ {% if cookiecutter.deployment_target == 'cloud_run' %}
64
+ # 4. Allow Cloud Run service SA to pull containers stored in the CICD project
65
+ resource "google_project_iam_member" "cicd_run_invoker_artifact_registry_reader" {
76
66
  for_each = local.deploy_project_ids
77
- provider = google-beta
78
- project = each.value
79
- service = "aiplatform.googleapis.com"
80
- }
67
+ project = var.cicd_runner_project_id
81
68
 
82
- # 3. Grant required permissions to Vertex AI Service Agent SA
83
- resource "google_project_iam_member" "vertex_ai_sa_permissions" {
84
- for_each = {
85
- for pair in setproduct(keys(local.deploy_project_ids), var.agentengine_sa_roles) :
86
- "${pair[0]}_${pair[1]}" => {
87
- project = local.deploy_project_ids[pair[0]]
88
- role = pair[1]
89
- }
90
- }
69
+ role = "roles/artifactregistry.reader"
70
+ member = "serviceAccount:service-${data.google_project.projects[each.key].number}@serverless-robot-prod.iam.gserviceaccount.com"
71
+ depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.deploy_project_services]
91
72
 
92
- project = each.value.project
93
- role = each.value.role
94
- member = "serviceAccount:service-${data.google_project.projects[split("_", each.key)[0]].number}@gcp-sa-aiplatform-re.iam.gserviceaccount.com"
95
- depends_on = [resource.google_project_service.shared_services, resource.google_project_service_identity.vertex_sa]
96
73
  }
74
+
97
75
  {% endif %}
98
76
 
77
+
99
78
  # Special assignment: Allow the CICD SA to create tokens
100
79
  resource "google_service_account_iam_member" "cicd_run_invoker_token_creator" {
101
80
  service_account_id = google_service_account.cicd_runner_sa.name
102
81
  role = "roles/iam.serviceAccountTokenCreator"
103
82
  member = "serviceAccount:${resource.google_service_account.cicd_runner_sa.email}"
104
- depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.shared_services]
83
+ depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.deploy_project_services]
105
84
  }
106
85
  # Special assignment: Allow the CICD SA to impersonate himself for trigger creation
107
86
  resource "google_service_account_iam_member" "cicd_run_invoker_account_user" {
108
87
  service_account_id = google_service_account.cicd_runner_sa.name
109
88
  role = "roles/iam.serviceAccountUser"
110
89
  member = "serviceAccount:${resource.google_service_account.cicd_runner_sa.email}"
111
- depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.shared_services]
90
+ depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.deploy_project_services]
112
91
  }
113
92
 
114
93
  {%- if cookiecutter.data_ingestion %}
@@ -125,6 +104,6 @@ resource "google_project_iam_member" "vertexai_pipeline_sa_roles" {
125
104
  project = each.value.project
126
105
  role = each.value.role
127
106
  member = "serviceAccount:${google_service_account.vertexai_pipeline_app_sa[split(",", each.key)[0]].email}"
128
- depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.shared_services]
107
+ depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.deploy_project_services]
129
108
  }
130
109
  {%- endif %}
@@ -20,10 +20,13 @@ locals {
20
20
  "serviceusage.googleapis.com",
21
21
  "bigquery.googleapis.com",
22
22
  "cloudresourcemanager.googleapis.com",
23
- "cloudtrace.googleapis.com"
23
+ "cloudtrace.googleapis.com",
24
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
25
+ "sqladmin.googleapis.com",
26
+ {%- endif %}
24
27
  ]
25
28
 
26
- shared_services = [
29
+ deploy_project_services = [
27
30
  "aiplatform.googleapis.com",
28
31
  "run.googleapis.com",
29
32
  "discoveryengine.googleapis.com",
@@ -32,7 +35,11 @@ locals {
32
35
  "bigquery.googleapis.com",
33
36
  "serviceusage.googleapis.com",
34
37
  "logging.googleapis.com",
35
- "cloudtrace.googleapis.com"
38
+ "cloudtrace.googleapis.com",
39
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
40
+ "sqladmin.googleapis.com",
41
+ "secretmanager.googleapis.com"
42
+ {%- endif %}
36
43
  ]
37
44
 
38
45
  deploy_project_ids = {
@@ -12,28 +12,35 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+
15
16
  terraform {
16
17
  required_version = ">= 1.0.0"
17
18
  required_providers {
18
19
  google = {
19
20
  source = "hashicorp/google"
20
- version = "< 7.0.0"
21
+ version = "~> 7.10.0"
21
22
  }
22
23
  github = {
23
24
  source = "integrations/github"
24
25
  version = "~> 6.5.0"
25
26
  }
27
+ random = {
28
+ source = "hashicorp/random"
29
+ version = "~> 3.7.0"
30
+ }
26
31
  }
27
32
  }
28
33
 
29
34
  provider "google" {
30
35
  alias = "staging_billing_override"
31
36
  billing_project = var.staging_project_id
37
+ region = var.region
32
38
  user_project_override = true
33
39
  }
34
40
 
35
41
  provider "google" {
36
42
  alias = "prod_billing_override"
37
43
  billing_project = var.prod_project_id
44
+ region = var.region
38
45
  user_project_override = true
39
46
  }
@@ -16,18 +16,17 @@ resource "google_service_account" "cicd_runner_sa" {
16
16
  account_id = "${var.project_name}-cb"
17
17
  display_name = "CICD Runner SA"
18
18
  project = var.cicd_runner_project_id
19
- depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.shared_services]
19
+ depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.deploy_project_services]
20
20
  }
21
- {% if cookiecutter.deployment_target == 'cloud_run' %}
22
- resource "google_service_account" "cloud_run_app_sa" {
21
+ # Agent service account
22
+ resource "google_service_account" "app_sa" {
23
23
  for_each = local.deploy_project_ids
24
24
 
25
- account_id = "${var.project_name}-cr"
26
- display_name = "Cloud Run Generative AI app SA"
25
+ account_id = "${var.project_name}-app"
26
+ display_name = "${var.project_name} Agent Service Account"
27
27
  project = each.value
28
- depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.shared_services]
28
+ depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.deploy_project_services]
29
29
  }
30
- {% endif %}
31
30
 
32
31
  {% if cookiecutter.data_ingestion %}
33
32
  # Service account to run Vertex AI pipeline
@@ -37,6 +36,6 @@ resource "google_service_account" "vertexai_pipeline_app_sa" {
37
36
  account_id = "${var.project_name}-rag"
38
37
  display_name = "Vertex AI Pipeline app SA"
39
38
  project = each.value
40
- depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.shared_services]
39
+ depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.deploy_project_services]
41
40
  }
42
41
  {% endif %}
@@ -0,0 +1,138 @@
1
+ -- Optimized join of Cloud Logging data with GCS-stored prompt/response data.
2
+ -- This query extracts both input and output messages referenced in logs.
3
+ -- Note: Input files contain full conversation history, so messages may appear multiple times.
4
+
5
+ -- Extract message references from Cloud Logging (scan once, extract both input/output)
6
+ WITH log_refs AS (
7
+ SELECT
8
+ insert_id,
9
+ timestamp,
10
+ labels,
11
+ trace,
12
+ span_id,
13
+ JSON_VALUE(labels, '$.\"gen_ai.input.messages_ref\"') AS input_ref,
14
+ JSON_VALUE(labels, '$.\"gen_ai.output.messages_ref\"') AS output_ref
15
+ FROM `${project_id}.${logs_link_id}._AllLogs`
16
+ WHERE JSON_VALUE(labels, '$.\"gen_ai.input.messages_ref\"') IS NOT NULL
17
+ OR JSON_VALUE(labels, '$.\"gen_ai.output.messages_ref\"') IS NOT NULL
18
+ ),
19
+
20
+ -- Unpivot to get one row per message reference
21
+ unpivoted_refs AS (
22
+ SELECT
23
+ insert_id,
24
+ timestamp,
25
+ labels,
26
+ trace,
27
+ span_id,
28
+ input_ref AS messages_ref_uri,
29
+ 'input' AS message_type
30
+ FROM log_refs
31
+ WHERE input_ref IS NOT NULL
32
+
33
+ UNION ALL
34
+
35
+ SELECT
36
+ insert_id,
37
+ timestamp,
38
+ labels,
39
+ trace,
40
+ span_id,
41
+ output_ref AS messages_ref_uri,
42
+ 'output' AS message_type
43
+ FROM log_refs
44
+ WHERE output_ref IS NOT NULL
45
+ ),
46
+
47
+ -- Join with completions external table and extract api_call_id once
48
+ joined_data AS (
49
+ SELECT
50
+ lr.insert_id,
51
+ lr.timestamp,
52
+ lr.labels,
53
+ lr.trace,
54
+ lr.span_id,
55
+ lr.messages_ref_uri,
56
+ lr.message_type,
57
+ SPLIT(REGEXP_EXTRACT(lr.messages_ref_uri, r'/([^/]+)\.jsonl'), '_')[OFFSET(0)] AS api_call_id,
58
+ c.role,
59
+ c.parts,
60
+ c.index AS message_idx
61
+ FROM unpivoted_refs lr
62
+ JOIN `${project_id}.${dataset_id}.${completions_external_table}` c
63
+ ON lr.messages_ref_uri = c._FILE_NAME
64
+ ),
65
+
66
+ -- Flatten the parts array
67
+ flattened AS (
68
+ SELECT
69
+ insert_id,
70
+ timestamp,
71
+ labels,
72
+ trace,
73
+ span_id,
74
+ messages_ref_uri,
75
+ message_type,
76
+ api_call_id,
77
+ role,
78
+ message_idx,
79
+ part_idx,
80
+ part.type AS part_type,
81
+ part.content,
82
+ part.uri,
83
+ part.mime_type,
84
+ TO_HEX(MD5(part.data)) AS data_md5_hex,
85
+ part.id AS tool_id,
86
+ part.name AS tool_name,
87
+ part.arguments AS tool_args,
88
+ part.response AS tool_response
89
+ FROM joined_data
90
+ CROSS JOIN UNNEST(parts) AS part WITH OFFSET AS part_idx
91
+ ),
92
+
93
+ -- Deduplicate by trace: keep only the latest log entry per trace
94
+ -- (Tool calls create multiple log entries with same trace but different timestamps)
95
+ deduplicated AS (
96
+ SELECT
97
+ *,
98
+ ROW_NUMBER() OVER (
99
+ PARTITION BY trace, message_type, role, message_idx, part_idx
100
+ ORDER BY timestamp DESC
101
+ ) AS row_num
102
+ FROM flattened
103
+ )
104
+
105
+ SELECT
106
+ -- Core identifiers and timestamps
107
+ timestamp,
108
+ insert_id,
109
+ trace,
110
+ span_id,
111
+ api_call_id,
112
+
113
+ -- Message metadata
114
+ message_type,
115
+ role,
116
+ message_idx,
117
+ part_idx,
118
+
119
+ -- Message content
120
+ content,
121
+
122
+ -- Tool/function calling
123
+ part_type,
124
+ tool_name,
125
+ tool_args,
126
+ tool_response,
127
+
128
+ -- Additional metadata
129
+ uri,
130
+ mime_type,
131
+ data_md5_hex,
132
+
133
+ -- Raw fields
134
+ labels,
135
+ messages_ref_uri
136
+ FROM deduplicated
137
+ WHERE row_num = 1 -- Keep only the latest entry per trace/message/part
138
+ ORDER BY trace ASC, message_type ASC, message_idx ASC, part_idx ASC