agent-starter-pack 0.15.7__py3-none-any.whl → 0.17.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.

Potentially problematic release.


This version of agent-starter-pack might be problematic. Click here for more details.

Files changed (195) hide show
  1. {agents → agent_starter_pack/agents}/adk_base/.template/templateconfig.yaml +1 -1
  2. {agents/live_api → agent_starter_pack/agents/adk_live}/.template/templateconfig.yaml +5 -7
  3. agent_starter_pack/agents/adk_live/README.md +32 -0
  4. agent_starter_pack/agents/adk_live/app/agent.py +48 -0
  5. agent_starter_pack/agents/adk_live/tests/unit/test_dummy.py +38 -0
  6. {agents → agent_starter_pack/agents}/agentic_rag/.template/templateconfig.yaml +1 -1
  7. agent_starter_pack/agents/crewai_coding_crew/app/agent.py +47 -0
  8. agent_starter_pack/agents/langgraph_base_react/app/agent.py +34 -0
  9. {src → agent_starter_pack}/base_template/GEMINI.md +1 -1
  10. {src → agent_starter_pack}/base_template/Makefile +130 -61
  11. {src → agent_starter_pack}/base_template/README.md +6 -6
  12. {src → agent_starter_pack}/base_template/deployment/terraform/dev/apis.tf +1 -1
  13. {src → agent_starter_pack}/base_template/deployment/terraform/dev/log_sinks.tf +31 -25
  14. {src → agent_starter_pack}/base_template/deployment/terraform/dev/providers.tf +1 -1
  15. {src → agent_starter_pack}/base_template/deployment/terraform/dev/variables.tf +1 -1
  16. {src → agent_starter_pack}/base_template/deployment/terraform/github.tf +14 -0
  17. {src → agent_starter_pack}/base_template/deployment/terraform/locals.tf +1 -1
  18. {src → agent_starter_pack}/base_template/deployment/terraform/log_sinks.tf +37 -28
  19. {src → agent_starter_pack}/base_template/deployment/terraform/providers.tf +1 -1
  20. {src → agent_starter_pack}/base_template/deployment/terraform/variables.tf +1 -1
  21. {src → agent_starter_pack}/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %} +4 -2
  22. {src → agent_starter_pack}/base_template/pyproject.toml +22 -21
  23. {src → agent_starter_pack}/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +5 -5
  24. {src → agent_starter_pack}/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml +3 -3
  25. {src → agent_starter_pack}/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +74 -11
  26. {src → agent_starter_pack}/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml +6 -6
  27. {src → agent_starter_pack}/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/pr_checks.yaml +4 -4
  28. {src → agent_starter_pack}/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +95 -13
  29. {src → agent_starter_pack}/base_template/{{cookiecutter.agent_directory}}/utils/tracing.py +1 -1
  30. {src → agent_starter_pack}/base_template/{{cookiecutter.agent_directory}}/utils/typing.py +4 -4
  31. {src → agent_starter_pack}/cli/commands/setup_cicd.py +1 -1
  32. {src → agent_starter_pack}/cli/main.py +2 -2
  33. {src → agent_starter_pack}/cli/utils/gcp.py +1 -1
  34. {src → agent_starter_pack}/cli/utils/remote_template.py +12 -9
  35. {src → agent_starter_pack}/cli/utils/template.py +19 -15
  36. agent_starter_pack/deployment_targets/agent_engine/deployment/terraform/{% if not cookiecutter.is_adk_live %}service.tf{% else %}unused_service.tf{% endif %} +82 -0
  37. agent_starter_pack/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +387 -0
  38. agent_starter_pack/deployment_targets/agent_engine/tests/load_test/README.md +84 -0
  39. agent_starter_pack/deployment_targets/agent_engine/tests/load_test/load_test.py +255 -0
  40. {src → agent_starter_pack}/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/agent_engine_app.py +40 -14
  41. {src → agent_starter_pack}/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/utils/deployment.py +13 -4
  42. agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/utils/{% if cookiecutter.is_adk_live %}expose_app.py{% else %}unused_expose_app.py{% endif %} +520 -0
  43. {src → agent_starter_pack}/deployment_targets/cloud_run/Dockerfile +3 -3
  44. {src → agent_starter_pack}/deployment_targets/cloud_run/deployment/terraform/dev/service.tf +4 -4
  45. {src → agent_starter_pack}/deployment_targets/cloud_run/deployment/terraform/service.tf +7 -7
  46. {src → agent_starter_pack}/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +207 -5
  47. {src → agent_starter_pack}/deployment_targets/cloud_run/tests/load_test/README.md +82 -0
  48. agent_starter_pack/deployment_targets/cloud_run/tests/load_test/load_test.py +249 -0
  49. {src → agent_starter_pack}/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}/server.py +190 -146
  50. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/package-lock.json +39 -1007
  51. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/package.json +1 -9
  52. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.tsx +1 -1
  53. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/Logger.tsx +8 -3
  54. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/logger.scss +26 -0
  55. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/side-panel/SidePanel.tsx +11 -5
  56. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/side-panel/side-panel.scss +146 -115
  57. agent_starter_pack/frontends/adk_live_react/frontend/src/components/transcription-preview/TranscriptionPreview.tsx +106 -0
  58. agent_starter_pack/frontends/adk_live_react/frontend/src/components/transcription-preview/transcription-preview.scss +150 -0
  59. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-live-api.ts +8 -2
  60. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/multimodal-live-types.ts +38 -2
  61. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audio-recorder.ts +1 -1
  62. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audio-streamer.ts +1 -1
  63. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/multimodal-live-client.ts +204 -23
  64. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/utils.ts +27 -5
  65. {src → agent_starter_pack}/frontends/streamlit/frontend/utils/local_chat_history.py +2 -0
  66. {src → agent_starter_pack}/resources/docs/adk-cheatsheet.md +5 -5
  67. agent_starter_pack/resources/idx/.idx/dev.nix +64 -0
  68. agent_starter_pack/resources/idx/idx-template.json +6 -0
  69. {src → agent_starter_pack}/resources/idx/idx-template.nix +2 -3
  70. {src → agent_starter_pack}/resources/locks/uv-adk_base-agent_engine.lock +1079 -954
  71. {src → agent_starter_pack}/resources/locks/uv-adk_base-cloud_run.lock +1441 -1309
  72. agent_starter_pack/resources/locks/uv-adk_live-agent_engine.lock +4229 -0
  73. agent_starter_pack/resources/locks/uv-adk_live-cloud_run.lock +4822 -0
  74. {src → agent_starter_pack}/resources/locks/uv-agentic_rag-agent_engine.lock +1107 -997
  75. {src → agent_starter_pack}/resources/locks/uv-agentic_rag-cloud_run.lock +1485 -1368
  76. {src → agent_starter_pack}/resources/locks/uv-crewai_coding_crew-agent_engine.lock +1294 -1297
  77. {src → agent_starter_pack}/resources/locks/uv-crewai_coding_crew-cloud_run.lock +2028 -1807
  78. {src → agent_starter_pack}/resources/locks/uv-langgraph_base_react-agent_engine.lock +1176 -1197
  79. {src → agent_starter_pack}/resources/locks/uv-langgraph_base_react-cloud_run.lock +1947 -1679
  80. {src → agent_starter_pack}/utils/generate_locks.py +12 -7
  81. {src → agent_starter_pack}/utils/lock_utils.py +2 -2
  82. {src → agent_starter_pack}/utils/watch_and_rebuild.py +1 -1
  83. {agent_starter_pack-0.15.7.dist-info → agent_starter_pack-0.17.0.dist-info}/METADATA +17 -18
  84. agent_starter_pack-0.17.0.dist-info/RECORD +179 -0
  85. agent_starter_pack-0.17.0.dist-info/entry_points.txt +2 -0
  86. llm.txt +1 -1
  87. agent_starter_pack-0.15.7.dist-info/RECORD +0 -176
  88. agent_starter_pack-0.15.7.dist-info/entry_points.txt +0 -2
  89. agents/crewai_coding_crew/app/agent.py +0 -86
  90. agents/langgraph_base_react/app/agent.py +0 -73
  91. agents/live_api/README.md +0 -37
  92. agents/live_api/app/agent.py +0 -72
  93. agents/live_api/tests/integration/test_server_e2e.py +0 -260
  94. agents/live_api/tests/load_test/load_test.py +0 -40
  95. agents/live_api/tests/unit/test_server.py +0 -144
  96. src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +0 -186
  97. src/deployment_targets/agent_engine/tests/load_test/README.md +0 -37
  98. src/deployment_targets/agent_engine/tests/load_test/load_test.py +0 -126
  99. src/deployment_targets/cloud_run/tests/load_test/load_test.py +0 -122
  100. src/resources/idx/.idx/dev.nix +0 -50
  101. src/resources/idx/idx-template.json +0 -21
  102. src/resources/locks/uv-live_api-cloud_run.lock +0 -6118
  103. {agents → agent_starter_pack/agents}/README.md +0 -0
  104. {agents → agent_starter_pack/agents}/adk_base/README.md +0 -0
  105. {agents → agent_starter_pack/agents}/adk_base/app/__init__.py +0 -0
  106. {agents → agent_starter_pack/agents}/adk_base/app/agent.py +0 -0
  107. {agents → agent_starter_pack/agents}/adk_base/notebooks/adk_app_testing.ipynb +0 -0
  108. {agents → agent_starter_pack/agents}/adk_base/notebooks/evaluating_adk_agent.ipynb +0 -0
  109. {agents → agent_starter_pack/agents}/adk_base/tests/integration/test_agent.py +0 -0
  110. {agents → agent_starter_pack/agents}/agentic_rag/README.md +0 -0
  111. {agents → agent_starter_pack/agents}/agentic_rag/app/__init__.py +0 -0
  112. {agents → agent_starter_pack/agents}/agentic_rag/app/agent.py +0 -0
  113. {agents → agent_starter_pack/agents}/agentic_rag/app/retrievers.py +0 -0
  114. {agents → agent_starter_pack/agents}/agentic_rag/app/templates.py +0 -0
  115. {agents → agent_starter_pack/agents}/agentic_rag/notebooks/adk_app_testing.ipynb +0 -0
  116. {agents → agent_starter_pack/agents}/agentic_rag/notebooks/evaluating_adk_agent.ipynb +0 -0
  117. {agents → agent_starter_pack/agents}/agentic_rag/tests/integration/test_agent.py +0 -0
  118. {agents → agent_starter_pack/agents}/crewai_coding_crew/.template/templateconfig.yaml +0 -0
  119. {agents → agent_starter_pack/agents}/crewai_coding_crew/README.md +0 -0
  120. {agents → agent_starter_pack/agents}/crewai_coding_crew/app/crew/config/agents.yaml +0 -0
  121. {agents → agent_starter_pack/agents}/crewai_coding_crew/app/crew/config/tasks.yaml +0 -0
  122. {agents → agent_starter_pack/agents}/crewai_coding_crew/app/crew/crew.py +0 -0
  123. {agents → agent_starter_pack/agents}/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb +0 -0
  124. {agents → agent_starter_pack/agents}/crewai_coding_crew/notebooks/evaluating_langgraph_agent.ipynb +0 -0
  125. {agents → agent_starter_pack/agents}/crewai_coding_crew/tests/integration/test_agent.py +0 -0
  126. {agents → agent_starter_pack/agents}/langgraph_base_react/.template/templateconfig.yaml +0 -0
  127. {agents → agent_starter_pack/agents}/langgraph_base_react/README.md +0 -0
  128. {agents → agent_starter_pack/agents}/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb +0 -0
  129. {agents → agent_starter_pack/agents}/langgraph_base_react/tests/integration/test_agent.py +0 -0
  130. {src → agent_starter_pack}/base_template/.gitignore +0 -0
  131. {src → agent_starter_pack}/base_template/deployment/README.md +0 -0
  132. {src → agent_starter_pack}/base_template/deployment/terraform/apis.tf +0 -0
  133. {src → agent_starter_pack}/base_template/deployment/terraform/dev/iam.tf +0 -0
  134. {src → agent_starter_pack}/base_template/deployment/terraform/dev/storage.tf +0 -0
  135. {src → agent_starter_pack}/base_template/deployment/terraform/dev/vars/env.tfvars +0 -0
  136. {src → agent_starter_pack}/base_template/deployment/terraform/iam.tf +0 -0
  137. {src → agent_starter_pack}/base_template/deployment/terraform/service_accounts.tf +0 -0
  138. {src → agent_starter_pack}/base_template/deployment/terraform/storage.tf +0 -0
  139. {src → agent_starter_pack}/base_template/deployment/terraform/vars/env.tfvars +0 -0
  140. {src → agent_starter_pack}/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'github_actions' %}wif.tf{% else %}unused_wif.tf{% endif %} +0 -0
  141. {src → agent_starter_pack}/base_template/tests/unit/test_dummy.py +0 -0
  142. {src → agent_starter_pack}/base_template/{{cookiecutter.agent_directory}}/utils/gcs.py +0 -0
  143. {src → agent_starter_pack}/cli/commands/create.py +0 -0
  144. {src → agent_starter_pack}/cli/commands/enhance.py +0 -0
  145. {src → agent_starter_pack}/cli/commands/list.py +0 -0
  146. {src → agent_starter_pack}/cli/utils/__init__.py +0 -0
  147. {src → agent_starter_pack}/cli/utils/cicd.py +0 -0
  148. {src → agent_starter_pack}/cli/utils/datastores.py +0 -0
  149. {src → agent_starter_pack}/cli/utils/logging.py +0 -0
  150. {src → agent_starter_pack}/cli/utils/version.py +0 -0
  151. {src → agent_starter_pack}/data_ingestion/README.md +0 -0
  152. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/components/ingest_data.py +0 -0
  153. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/components/process_data.py +0 -0
  154. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/pipeline.py +0 -0
  155. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/submit_pipeline.py +0 -0
  156. {src → agent_starter_pack}/data_ingestion/pyproject.toml +0 -0
  157. {src → agent_starter_pack}/data_ingestion/uv.lock +0 -0
  158. {src → agent_starter_pack}/deployment_targets/agent_engine/deployment_metadata.json +0 -0
  159. {src → agent_starter_pack}/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb +0 -0
  160. {src → agent_starter_pack}/deployment_targets/agent_engine/tests/load_test/.results/.placeholder +0 -0
  161. {src → agent_starter_pack}/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +0 -0
  162. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/favicon.ico +0 -0
  163. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/index.html +0 -0
  164. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/robots.txt +0 -0
  165. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.scss +0 -0
  166. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.test.tsx +0 -0
  167. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/audio-pulse/AudioPulse.tsx +0 -0
  168. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/audio-pulse/audio-pulse.scss +0 -0
  169. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/mock-logs.ts +0 -0
  170. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/contexts/LiveAPIContext.tsx +0 -0
  171. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-media-stream-mux.ts +0 -0
  172. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-screen-capture.ts +0 -0
  173. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-webcam.ts +0 -0
  174. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/index.css +0 -0
  175. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/index.tsx +0 -0
  176. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/react-app-env.d.ts +0 -0
  177. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/reportWebVitals.ts +0 -0
  178. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/setupTests.ts +0 -0
  179. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audioworklet-registry.ts +0 -0
  180. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/store-logger.ts +0 -0
  181. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/worklets/audio-processing.ts +0 -0
  182. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/worklets/vol-meter.ts +0 -0
  183. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/tsconfig.json +0 -0
  184. {src → agent_starter_pack}/frontends/streamlit/frontend/side_bar.py +0 -0
  185. {src → agent_starter_pack}/frontends/streamlit/frontend/streamlit_app.py +0 -0
  186. {src → agent_starter_pack}/frontends/streamlit/frontend/style/app_markdown.py +0 -0
  187. {src → agent_starter_pack}/frontends/streamlit/frontend/utils/chat_utils.py +0 -0
  188. {src → agent_starter_pack}/frontends/streamlit/frontend/utils/message_editing.py +0 -0
  189. {src → agent_starter_pack}/frontends/streamlit/frontend/utils/multimodal_utils.py +0 -0
  190. {src → agent_starter_pack}/frontends/streamlit/frontend/utils/stream_handler.py +0 -0
  191. {src → agent_starter_pack}/frontends/streamlit/frontend/utils/title_summary.py +0 -0
  192. {src → agent_starter_pack}/resources/containers/data_processing/Dockerfile +0 -0
  193. {src → agent_starter_pack}/resources/containers/e2e-tests/Dockerfile +0 -0
  194. {agent_starter_pack-0.15.7.dist-info → agent_starter_pack-0.17.0.dist-info}/WHEEL +0 -0
  195. {agent_starter_pack-0.15.7.dist-info → agent_starter_pack-0.17.0.dist-info}/licenses/LICENSE +0 -0
@@ -17,7 +17,7 @@ terraform {
17
17
  required_providers {
18
18
  google = {
19
19
  source = "hashicorp/google"
20
- version = "< 7.0.0"
20
+ version = "> 7.0.0"
21
21
  }
22
22
  }
23
23
  }
@@ -32,7 +32,7 @@ variable "region" {
32
32
  variable "telemetry_logs_filter" {
33
33
  type = string
34
34
  description = "Log Sink filter for capturing telemetry data. Captures logs with the `traceloop.association.properties.log_type` attribute set to `tracing`."
35
- {%- if "adk" in cookiecutter.tags %}
35
+ {%- if cookiecutter.is_adk %}
36
36
  default = "labels.service_name=\"{{cookiecutter.project_name}}\" labels.type=\"agent_telemetry\""
37
37
  {%- else %}
38
38
  default = "jsonPayload.attributes.\"traceloop.association.properties.log_type\"=\"tracing\" jsonPayload.resource.attributes.\"service.name\"=\"{{cookiecutter.project_name}}\""
@@ -119,6 +119,20 @@ resource "github_actions_variable" "app_sa_email_prod" {
119
119
  depends_on = [github_repository.repo]
120
120
  }
121
121
 
122
+ resource "github_actions_variable" "logs_bucket_name_staging" {
123
+ repository = var.repository_name
124
+ variable_name = "LOGS_BUCKET_NAME_STAGING"
125
+ value = google_storage_bucket.logs_data_bucket[var.staging_project_id].url
126
+ depends_on = [github_repository.repo]
127
+ }
128
+
129
+ resource "github_actions_variable" "logs_bucket_name_prod" {
130
+ repository = var.repository_name
131
+ variable_name = "LOGS_BUCKET_NAME_PROD"
132
+ value = google_storage_bucket.logs_data_bucket[var.prod_project_id].url
133
+ depends_on = [github_repository.repo]
134
+ }
135
+
122
136
  {% if cookiecutter.deployment_target == 'cloud_run' %}
123
137
  resource "github_actions_variable" "container_name" {
124
138
  repository = var.repository_name
@@ -33,7 +33,7 @@ locals {
33
33
  "serviceusage.googleapis.com",
34
34
  "logging.googleapis.com",
35
35
  "cloudtrace.googleapis.com",
36
- {%- if "adk" in cookiecutter.tags and cookiecutter.session_type == "alloydb" %}
36
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "alloydb" %}
37
37
  "compute.googleapis.com",
38
38
  "servicenetworking.googleapis.com",
39
39
  "alloydb.googleapis.com",
@@ -12,14 +12,6 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- resource "google_project_iam_member" "bigquery_data_editor" {
16
- for_each = local.deploy_project_ids
17
-
18
- project = each.value
19
- role = "roles/bigquery.dataEditor"
20
- member = module.log_export_to_bigquery[each.key].writer_identity
21
- }
22
-
23
15
  resource "google_bigquery_dataset" "feedback_dataset" {
24
16
  for_each = local.deploy_project_ids
25
17
  project = each.value
@@ -38,33 +30,50 @@ resource "google_bigquery_dataset" "telemetry_logs_dataset" {
38
30
  depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.deploy_project_services]
39
31
  }
40
32
 
41
- module "log_export_to_bigquery" {
33
+ resource "google_logging_project_sink" "feedback_export_to_bigquery" {
42
34
  for_each = local.deploy_project_ids
43
35
 
44
- source = "terraform-google-modules/log-export/google"
45
- version = "10.0.0"
36
+ name = "${var.project_name}_feedback"
37
+ project = each.value
38
+ destination = "bigquery.googleapis.com/projects/${each.value}/datasets/${google_bigquery_dataset.feedback_dataset[each.key].dataset_id}"
39
+ filter = var.feedback_logs_filter
40
+
41
+ bigquery_options {
42
+ use_partitioned_tables = true
43
+ }
46
44
 
47
- log_sink_name = "${var.project_name}_telemetry"
48
- parent_resource_type = "project"
49
- parent_resource_id = each.value
50
- destination_uri = "bigquery.googleapis.com/projects/${each.value}/datasets/${google_bigquery_dataset.telemetry_logs_dataset[each.key].dataset_id}"
51
- filter = var.telemetry_logs_filter
52
- bigquery_options = { use_partitioned_tables = true }
53
45
  unique_writer_identity = true
54
- depends_on = [google_bigquery_dataset.telemetry_logs_dataset]
46
+ depends_on = [google_bigquery_dataset.feedback_dataset]
55
47
  }
56
48
 
57
- module "feedback_export_to_bigquery" {
49
+ resource "google_logging_project_sink" "log_export_to_bigquery" {
58
50
  for_each = local.deploy_project_ids
59
51
 
60
- source = "terraform-google-modules/log-export/google"
61
- version = "10.0.0"
62
- log_sink_name = "${var.project_name}_feedback"
63
- parent_resource_type = "project"
64
- parent_resource_id = each.value
65
- destination_uri = "bigquery.googleapis.com/projects/${each.value}/datasets/${google_bigquery_dataset.feedback_dataset[each.key].dataset_id}"
66
- filter = var.feedback_logs_filter
67
- bigquery_options = { use_partitioned_tables = true }
52
+ name = "${var.project_name}_telemetry"
53
+ project = each.value
54
+ destination = "bigquery.googleapis.com/projects/${each.value}/datasets/${google_bigquery_dataset.telemetry_logs_dataset[each.key].dataset_id}"
55
+ filter = var.telemetry_logs_filter
56
+
57
+ bigquery_options {
58
+ use_partitioned_tables = true
59
+ }
60
+
68
61
  unique_writer_identity = true
69
- depends_on = [google_bigquery_dataset.feedback_dataset]
62
+ depends_on = [google_bigquery_dataset.telemetry_logs_dataset]
63
+ }
64
+
65
+ resource "google_project_iam_member" "bigquery_data_editor" {
66
+ for_each = local.deploy_project_ids
67
+
68
+ project = each.value
69
+ role = "roles/bigquery.dataEditor"
70
+ member = google_logging_project_sink.log_export_to_bigquery[each.key].writer_identity
71
+ }
72
+
73
+ resource "google_project_iam_member" "feedback_bigquery_data_editor" {
74
+ for_each = local.deploy_project_ids
75
+
76
+ project = each.value
77
+ role = "roles/bigquery.dataEditor"
78
+ member = google_logging_project_sink.feedback_export_to_bigquery[each.key].writer_identity
70
79
  }
@@ -18,7 +18,7 @@ terraform {
18
18
  required_providers {
19
19
  google = {
20
20
  source = "hashicorp/google"
21
- version = "< 7.0.0"
21
+ version = "> 7.0.0"
22
22
  }
23
23
  github = {
24
24
  source = "integrations/github"
@@ -53,7 +53,7 @@ variable "repository_name" {
53
53
  variable "telemetry_logs_filter" {
54
54
  type = string
55
55
  description = "Log Sink filter for capturing telemetry data. Captures logs with the `traceloop.association.properties.log_type` attribute set to `tracing`."
56
- {%- if "adk" in cookiecutter.tags %}
56
+ {%- if cookiecutter.is_adk %}
57
57
  default = "labels.service_name=\"{{cookiecutter.project_name}}\" labels.type=\"agent_telemetry\""
58
58
  {%- else %}
59
59
  default = "jsonPayload.attributes.\"traceloop.association.properties.log_type\"=\"tracing\" jsonPayload.resource.attributes.\"service.name\"=\"{{cookiecutter.project_name}}\""
@@ -74,12 +74,13 @@ resource "google_cloudbuild_trigger" "cd_pipeline" {
74
74
  substitutions = {
75
75
  _STAGING_PROJECT_ID = var.staging_project_id
76
76
  _BUCKET_NAME_LOAD_TEST_RESULTS = resource.google_storage_bucket.bucket_load_test_results.name
77
+ _LOGS_BUCKET_NAME_STAGING = resource.google_storage_bucket.logs_data_bucket[var.staging_project_id].url
77
78
  _REGION = var.region
78
79
  {% if cookiecutter.deployment_target == 'cloud_run' %}
79
80
  _CONTAINER_NAME = var.project_name
80
81
  _ARTIFACT_REGISTRY_REPO_NAME = resource.google_artifact_registry_repository.repo-artifacts-genai.repository_id
81
82
  {% elif cookiecutter.deployment_target == 'agent_engine' %}
82
- _APP_SA_EMAIL_STAGING = resource.google_service_account.app_sa["staging"].email
83
+
83
84
  {% endif %}
84
85
  {% if cookiecutter.data_ingestion %}
85
86
  _PIPELINE_GCS_ROOT_STAGING = "gs://${resource.google_storage_bucket.data_ingestion_pipeline_gcs_root["staging"].name}"
@@ -123,12 +124,13 @@ resource "google_cloudbuild_trigger" "deploy_to_prod_pipeline" {
123
124
  }
124
125
  substitutions = {
125
126
  _PROD_PROJECT_ID = var.prod_project_id
127
+ _LOGS_BUCKET_NAME_PROD = resource.google_storage_bucket.logs_data_bucket[var.prod_project_id].url
126
128
  _REGION = var.region
127
129
  {% if cookiecutter.deployment_target == 'cloud_run' %}
128
130
  _CONTAINER_NAME = var.project_name
129
131
  _ARTIFACT_REGISTRY_REPO_NAME = resource.google_artifact_registry_repository.repo-artifacts-genai.repository_id
130
132
  {% elif cookiecutter.deployment_target == 'agent_engine' %}
131
- _APP_SA_EMAIL_PROD = resource.google_service_account.app_sa["prod"].email
133
+
132
134
  {% endif %}
133
135
  {% if cookiecutter.data_ingestion %}
134
136
  _PIPELINE_GCS_ROOT_PROD = "gs://${resource.google_storage_bucket.data_ingestion_pipeline_gcs_root["prod"].name}"
@@ -9,19 +9,20 @@ dependencies = [
9
9
  {%- for dep in cookiecutter.extra_dependencies %}
10
10
  "{{ dep }}",
11
11
  {%- endfor %}
12
- "opentelemetry-exporter-gcp-trace~=1.9.0",
13
- {%- if "adk" not in cookiecutter.tags %}
12
+ "opentelemetry-exporter-gcp-trace>=1.9.0,<2.0.0",
13
+ {%- if not cookiecutter.is_adk %}
14
14
  "langchain-core~=0.3.9",
15
15
  "traceloop-sdk~=0.38.7",
16
16
  {%- endif %}
17
- "google-cloud-logging>=3.12.0",
17
+ "google-cloud-logging>=3.12.0,<4.0.0",
18
18
  {%- if cookiecutter.deployment_target == 'cloud_run' %}
19
- "google-cloud-aiplatform[evaluation]~=1.116.0",
19
+ "google-cloud-aiplatform[evaluation]>=1.118.0,<2.0.0",
20
20
  "fastapi~=0.115.8",
21
21
  "uvicorn~=0.34.0",
22
- "psycopg2-binary>=2.9.10",
22
+ "psycopg2-binary>=2.9.10,<3.0.0",
23
23
  {%- elif cookiecutter.deployment_target == 'agent_engine' %}
24
- "google-cloud-aiplatform[evaluation,agent-engines]~=1.116.0"
24
+ "google-cloud-aiplatform[evaluation,agent-engines]>=1.118.0,<2.0.0",
25
+ "protobuf>=6.31.1,<7.0.0"
25
26
  {%- endif %}
26
27
  ]
27
28
  {% if cookiecutter.deployment_target == 'cloud_run' %}
@@ -32,29 +33,29 @@ requires-python = ">=3.10,<3.13"
32
33
 
33
34
  [dependency-groups]
34
35
  dev = [
35
- "pytest>=8.3.4",
36
- "pytest-asyncio>=0.23.8",
37
- "nest-asyncio>=1.6.0",
36
+ "pytest>=8.3.4,<9.0.0",
37
+ "pytest-asyncio>=0.23.8,<1.0.0",
38
+ "nest-asyncio>=1.6.0,<2.0.0",
38
39
  ]
39
40
 
40
41
  [project.optional-dependencies]
41
- {% if cookiecutter.agent_name != 'live_api' and "adk" not in cookiecutter.tags %}
42
+ {% if not cookiecutter.is_adk %}
42
43
  streamlit = [
43
- "streamlit~=1.42.0",
44
- "streamlit-extras~=0.4.3",
45
- "extra-streamlit-components~=0.1.71",
46
- "streamlit-feedback~=0.1.3",
44
+ "streamlit>=1.42.0,<2.0.0",
45
+ "streamlit-extras>=0.4.3,<1.0.0",
46
+ "extra-streamlit-components>=0.1.71,<1.0.0",
47
+ "streamlit-feedback>=0.1.3,<1.0.0",
47
48
  ]
48
49
  {% endif %}
49
50
  jupyter = [
50
- "jupyter~=1.0.0",
51
+ "jupyter>=1.0.0,<2.0.0",
51
52
  ]
52
53
  lint = [
53
- "ruff>=0.4.6",
54
- "mypy~=1.15.0",
55
- "codespell~=2.2.0",
56
- "types-pyyaml~=6.0.12.20240917",
57
- "types-requests~=2.32.0.20240914",
54
+ "ruff>=0.4.6,<1.0.0",
55
+ "mypy>=1.15.0,<2.0.0",
56
+ "codespell>=2.2.0,<3.0.0",
57
+ "types-pyyaml>=6.0.12.20240917,<7.0.0",
58
+ "types-requests>=2.32.0.20240914,<3.0.0",
58
59
  ]
59
60
 
60
61
  [tool.ruff]
@@ -92,7 +93,7 @@ follow_imports = "silent"
92
93
  ignore_missing_imports = true
93
94
  explicit_package_bases = true
94
95
  disable_error_code = ["misc", "no-untyped-call", "no-any-return"]
95
- {% if cookiecutter.agent_name == 'live_api' %}
96
+ {% if cookiecutter.is_adk_live %}
96
97
  exclude = [".venv","./frontend"]
97
98
  {% else %}
98
99
  exclude = [".venv"]
@@ -44,10 +44,10 @@ jobs:
44
44
  - name: Checkout code
45
45
  uses: actions/checkout@v4
46
46
 
47
- - name: Set up Python 3.11
47
+ - name: Set up Python 3.12
48
48
  uses: actions/setup-python@v4
49
49
  with:
50
- python-version: '3.11'
50
+ python-version: '3.12'
51
51
 
52
52
  - id: 'auth'
53
53
  name: 'Authenticate to Google Cloud'
@@ -67,14 +67,14 @@ jobs:
67
67
  {%- if cookiecutter.deployment_target == 'agent_engine' %}
68
68
  - name: Install uv and dependencies
69
69
  run: |
70
- pip install uv==0.6.12
70
+ pip install uv==0.8.13
71
71
  uv sync --locked
72
72
  {%- endif %}
73
73
 
74
74
  {%- if cookiecutter.data_ingestion %}
75
75
  - name: Deploy data ingestion pipeline (Production)
76
76
  run: |
77
- cd data_ingestion && pip install uv==0.6.12 && cd data_ingestion_pipeline && \
77
+ cd data_ingestion && pip install uv==0.8.13 && cd data_ingestion_pipeline && \
78
78
  uv sync --locked && uv run python submit_pipeline.py
79
79
  env:
80
80
  PIPELINE_ROOT: {% raw %}${{ vars.PIPELINE_GCS_ROOT_PROD }}{% endraw %}
@@ -111,7 +111,7 @@ jobs:
111
111
  uv run {{cookiecutter.agent_directory}}/agent_engine_app.py \
112
112
  --project {% raw %}${{ vars.PROD_PROJECT_ID }}{% endraw %} \
113
113
  --location {% raw %}${{ vars.REGION }}{% endraw %} \
114
- --service-account {% raw %}${{ vars.APP_SA_EMAIL_PROD }}{% endraw %} \
114
+ --artifacts-bucket-name {% raw %}${{ vars.LOGS_BUCKET_NAME_PROD }}{% endraw %} \
115
115
  --set-env-vars="COMMIT_SHA={% raw %}${{ github.sha }}{% endraw %}{%- if cookiecutter.data_ingestion %}{%- if cookiecutter.datastore_type == "vertex_ai_search" %},DATA_STORE_ID={% raw %}${{ vars.DATA_STORE_ID_PROD }}{% endraw %},DATA_STORE_REGION={% raw %}${{ vars.DATA_STORE_REGION }}{% endraw %}{%- elif cookiecutter.datastore_type == "vertex_ai_vector_search" %},VECTOR_SEARCH_INDEX={% raw %}${{ vars.VECTOR_SEARCH_INDEX_PROD }}{% endraw %},VECTOR_SEARCH_INDEX_ENDPOINT={% raw %}${{ vars.VECTOR_SEARCH_INDEX_ENDPOINT_PROD }}{% endraw %},VECTOR_SEARCH_BUCKET={% raw %}${{ vars.VECTOR_SEARCH_BUCKET_PROD }}{% endraw %}{%- endif %}{%- endif %}"
116
116
  {%- endif %}
117
117
 
@@ -48,14 +48,14 @@ jobs:
48
48
  project_id: {% raw %}${{ vars.CICD_PROJECT_ID }}{% endraw %}
49
49
 
50
50
 
51
- - name: Set up Python 3.11
51
+ - name: Set up Python 3.12
52
52
  uses: actions/setup-python@v4
53
53
  with:
54
- python-version: '3.11'
54
+ python-version: '3.12'
55
55
 
56
56
  - name: Install uv and dependencies
57
57
  run: |
58
- pip install uv==0.6.12
58
+ pip install uv==0.8.13
59
59
  uv sync --locked
60
60
 
61
61
  - name: Run unit tests
@@ -36,10 +36,10 @@ jobs:
36
36
  - name: Checkout code
37
37
  uses: actions/checkout@v4
38
38
 
39
- - name: Set up Python 3.11
39
+ - name: Set up Python 3.12
40
40
  uses: actions/setup-python@v4
41
41
  with:
42
- python-version: '3.11'
42
+ python-version: '3.12'
43
43
 
44
44
  - id: 'auth'
45
45
  name: 'Authenticate to Google Cloud'
@@ -58,7 +58,7 @@ jobs:
58
58
 
59
59
  - name: Deploy data ingestion pipeline (Staging)
60
60
  run: |
61
- cd data_ingestion && pip install uv==0.6.12 && cd data_ingestion_pipeline && \
61
+ cd data_ingestion && pip install uv==0.8.13 && cd data_ingestion_pipeline && \
62
62
  uv sync --locked && uv run python submit_pipeline.py
63
63
  env:
64
64
  PIPELINE_ROOT: {% raw %}${{ vars.PIPELINE_GCS_ROOT_STAGING }}{% endraw %}
@@ -113,7 +113,7 @@ jobs:
113
113
 
114
114
  - name: Install uv and dependencies
115
115
  run: |
116
- pip install uv==0.6.12
116
+ pip install uv==0.8.13
117
117
  uv sync --locked
118
118
 
119
119
  - name: Deploy to Staging (Agent Engine)
@@ -122,7 +122,7 @@ jobs:
122
122
  uv run {{cookiecutter.agent_directory}}/agent_engine_app.py \
123
123
  --project {% raw %}${{ vars.STAGING_PROJECT_ID }}{% endraw %} \
124
124
  --location {% raw %}${{ vars.REGION }}{% endraw %} \
125
- --service-account {% raw %}${{ vars.APP_SA_EMAIL_STAGING }}{% endraw %} \
125
+ --artifacts-bucket-name {% raw %}${{ vars.LOGS_BUCKET_NAME_STAGING }}{% endraw %} \
126
126
  --set-env-vars="COMMIT_SHA={% raw %}${{ github.sha }}{% endraw %}{%- if cookiecutter.data_ingestion %}{%- if cookiecutter.datastore_type == "vertex_ai_search" %},DATA_STORE_ID={% raw %}${{ vars.DATA_STORE_ID_STAGING }}{% endraw %},DATA_STORE_REGION={% raw %}${{ vars.DATA_STORE_REGION }}{% endraw %}{%- elif cookiecutter.datastore_type == "vertex_ai_vector_search" %},VECTOR_SEARCH_INDEX={% raw %}${{ vars.VECTOR_SEARCH_INDEX_STAGING }}{% endraw %},VECTOR_SEARCH_INDEX_ENDPOINT={% raw %}${{ vars.VECTOR_SEARCH_INDEX_ENDPOINT_STAGING }}{% endraw %},VECTOR_SEARCH_BUCKET={% raw %}${{ vars.VECTOR_SEARCH_BUCKET_STAGING }}{% endraw %}{%- endif %}{%- endif %}"
127
127
 
128
128
  - name: Fetch Auth Token
@@ -135,23 +135,86 @@ jobs:
135
135
 
136
136
  - name: Run load test
137
137
  run: |
138
- {%- if cookiecutter.deployment_target == 'cloud_run' %}
138
+ {%- if cookiecutter.deployment_target == 'cloud_run' and cookiecutter.agent_name == 'adk_live' %}
139
+ # Install dependencies for load test
140
+ pip install locust==2.31.1 websockets
141
+
142
+ # Install Cloud Run proxy component
143
+ gcloud components install cloud-run-proxy --quiet
144
+
145
+ # Start Cloud Run proxy in background
146
+ gcloud run services proxy {{cookiecutter.project_name}} \
147
+ --port=8080 \
148
+ --region {% raw %}${{ vars.REGION }}{% endraw %} \
149
+ --project {% raw %}${{ vars.STAGING_PROJECT_ID }}{% endraw %} \
150
+ --quiet &
151
+ PROXY_PID=$!
152
+
153
+ # Wait for proxy to be ready
154
+ echo "Waiting for proxy to start..."
155
+ sleep 10
156
+
157
+ # Run load test and capture exit code
158
+ locust -f tests/load_test/load_test.py \
159
+ --headless \
160
+ -H http://127.0.0.1:8080 \
161
+ -t 30s -u 2 -r 2 \
162
+ --csv=tests/load_test/.results/results \
163
+ --html=tests/load_test/.results/report.html
164
+ LOCUST_EXIT_CODE=$?
165
+
166
+ # Clean up proxy
167
+ kill $PROXY_PID || true
168
+
169
+ # Exit with load test result to fail build if tests failed
170
+ if [ $LOCUST_EXIT_CODE -ne 0 ]; then
171
+ echo "Load test failed with exit code $LOCUST_EXIT_CODE"
172
+ exit $LOCUST_EXIT_CODE
173
+ fi
174
+ {%- elif cookiecutter.deployment_target == 'cloud_run' %}
139
175
  export _ID_TOKEN="{% raw %}${{ steps.fetch-token.outputs._id_token }}{% endraw %}"
140
176
  export _STAGING_URL="{% raw %}${{ steps.fetch-url.outputs._staging_url }}{% endraw %}"
141
- {%- elif cookiecutter.deployment_target == 'agent_engine' %}
142
- export _AUTH_TOKEN="{% raw %}${{ steps.fetch-token.outputs._auth_token }}{% endraw %}"
143
- {%- endif %}
144
177
  pip install locust==2.31.1
145
178
  locust -f tests/load_test/load_test.py \
146
179
  --headless \
147
- {%- if cookiecutter.deployment_target == 'cloud_run' %}
148
180
  -H ${_STAGING_URL} \
149
181
  -t 30s -u 10 -r 0.5 \
182
+ --csv=tests/load_test/.results/results \
183
+ --html=tests/load_test/.results/report.html
184
+ {%- elif cookiecutter.deployment_target == 'agent_engine' and cookiecutter.is_adk_live %}
185
+ # Start expose app in remote mode (uses deployment_metadata.json by default)
186
+ uv run python -m {{cookiecutter.agent_directory}}.utils.expose_app --mode remote &
187
+ EXPOSE_PID=$!
188
+
189
+ # Wait for expose app to be ready
190
+ sleep 10
191
+
192
+ # Run load test against local expose app
193
+ uv run --with locust==2.31.1 --with websockets locust -f tests/load_test/load_test.py \
194
+ -H http://127.0.0.1:8000 \
195
+ --headless \
196
+ -t 30s -u 2 -r 1 \
197
+ --csv=tests/load_test/.results/results \
198
+ --html=tests/load_test/.results/report.html
199
+ LOCUST_EXIT_CODE=$?
200
+
201
+ # Stop expose app
202
+ kill $EXPOSE_PID
203
+
204
+ # Exit with error if locust test failed
205
+ if [ $LOCUST_EXIT_CODE -ne 0 ]; then
206
+ echo "Load test failed with exit code $LOCUST_EXIT_CODE"
207
+ exit $LOCUST_EXIT_CODE
208
+ fi
150
209
  {%- elif cookiecutter.deployment_target == 'agent_engine' %}
210
+ export _AUTH_TOKEN="{% raw %}${{ steps.fetch-token.outputs._auth_token }}{% endraw %}"
211
+ pip install locust==2.31.1
212
+ locust -f tests/load_test/load_test.py \
213
+ --headless \
151
214
  -t 30s -u 2 -r 0.5 \
152
- {%- endif %}
153
215
  --csv=tests/load_test/.results/results \
154
216
  --html=tests/load_test/.results/report.html
217
+ {%- endif %}
155
218
 
156
219
  - name: Export Load Test Results to GCS
157
220
  run: |
@@ -14,13 +14,13 @@
14
14
 
15
15
  steps:
16
16
  {%- if cookiecutter.data_ingestion %}
17
- - name: "python:3.11-slim"
17
+ - name: "python:3.12-slim"
18
18
  id: deploy-data-ingestion-pipeline-prod
19
19
  entrypoint: bash
20
20
  args:
21
21
  - -c
22
22
  - |
23
- cd data_ingestion && pip install uv==0.6.12 --user && cd data_ingestion_pipeline && \
23
+ cd data_ingestion && pip install uv==0.8.13 --user && cd data_ingestion_pipeline && \
24
24
  uv sync --locked && uv run python submit_pipeline.py
25
25
  env:
26
26
  - "PIPELINE_ROOT=${_PIPELINE_GCS_ROOT_PROD}"
@@ -57,17 +57,17 @@ steps:
57
57
  - $_PROD_PROJECT_ID
58
58
 
59
59
  {%- elif cookiecutter.deployment_target == 'agent_engine' %}
60
- - name: "python:3.11-slim"
60
+ - name: "python:3.12-slim"
61
61
  id: install-dependencies
62
62
  entrypoint: /bin/bash
63
63
  args:
64
64
  - "-c"
65
65
  - |
66
- pip install uv==0.6.12 --user && uv sync --locked
66
+ pip install uv==0.8.13 --user && uv sync --locked
67
67
  env:
68
68
  - 'PATH=/usr/local/bin:/usr/bin:~/.local/bin'
69
69
 
70
- - name: "python:3.11-slim"
70
+ - name: "python:3.12-slim"
71
71
  id: trigger-deployment
72
72
  entrypoint: /bin/bash
73
73
  args:
@@ -77,7 +77,7 @@ steps:
77
77
  uv run {{cookiecutter.agent_directory}}/agent_engine_app.py \
78
78
  --project ${_PROD_PROJECT_ID} \
79
79
  --location ${_REGION} \
80
- --service-account ${_APP_SA_EMAIL_PROD} \
80
+ --artifacts-bucket-name ${_LOGS_BUCKET_NAME_PROD} \
81
81
  --set-env-vars="COMMIT_SHA=${COMMIT_SHA}{%- if cookiecutter.data_ingestion %}{%- if cookiecutter.datastore_type == "vertex_ai_search" %},DATA_STORE_ID=${_DATA_STORE_ID_PROD},DATA_STORE_REGION=${_DATA_STORE_REGION}{%- elif cookiecutter.datastore_type == "vertex_ai_vector_search" %},VECTOR_SEARCH_INDEX=${_VECTOR_SEARCH_INDEX_PROD},VECTOR_SEARCH_INDEX_ENDPOINT=${_VECTOR_SEARCH_INDEX_ENDPOINT_PROD},VECTOR_SEARCH_BUCKET=${_VECTOR_SEARCH_BUCKET_PROD}{%- endif %}{%- endif %}"
82
82
  env:
83
83
  - 'PATH=/usr/local/bin:/usr/bin:~/.local/bin'
@@ -14,18 +14,18 @@
14
14
 
15
15
  steps:
16
16
  # Install uv package manager and sync dependencies
17
- - name: "python:3.11-slim"
17
+ - name: "python:3.12-slim"
18
18
  id: install-dependencies
19
19
  entrypoint: /bin/bash
20
20
  args:
21
21
  - "-c"
22
22
  - |
23
- pip install uv==0.6.12 --user && uv sync --locked
23
+ pip install uv==0.8.13 --user && uv sync --locked
24
24
  env:
25
25
  - 'PATH=/usr/local/bin:/usr/bin:~/.local/bin'
26
26
 
27
27
  # Run unit tests using pytest
28
- - name: "python:3.11-slim"
28
+ - name: "python:3.12-slim"
29
29
  id: unit-tests
30
30
  entrypoint: /bin/bash
31
31
  args:
@@ -36,7 +36,7 @@ steps:
36
36
  - 'PATH=/usr/local/bin:/usr/bin:~/.local/bin'
37
37
 
38
38
  # Run integration tests
39
- - name: "python:3.11-slim"
39
+ - name: "python:3.12-slim"
40
40
  id: integration-tests
41
41
  entrypoint: /bin/bash
42
42
  args: