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.
- {agents → agent_starter_pack/agents}/adk_base/.template/templateconfig.yaml +1 -1
- {agents/live_api → agent_starter_pack/agents/adk_live}/.template/templateconfig.yaml +5 -7
- agent_starter_pack/agents/adk_live/README.md +32 -0
- agent_starter_pack/agents/adk_live/app/agent.py +48 -0
- agent_starter_pack/agents/adk_live/tests/unit/test_dummy.py +38 -0
- {agents → agent_starter_pack/agents}/agentic_rag/.template/templateconfig.yaml +1 -1
- agent_starter_pack/agents/crewai_coding_crew/app/agent.py +47 -0
- agent_starter_pack/agents/langgraph_base_react/app/agent.py +34 -0
- {src → agent_starter_pack}/base_template/GEMINI.md +1 -1
- {src → agent_starter_pack}/base_template/Makefile +130 -61
- {src → agent_starter_pack}/base_template/README.md +6 -6
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/apis.tf +1 -1
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/log_sinks.tf +31 -25
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/providers.tf +1 -1
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/variables.tf +1 -1
- {src → agent_starter_pack}/base_template/deployment/terraform/github.tf +14 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/locals.tf +1 -1
- {src → agent_starter_pack}/base_template/deployment/terraform/log_sinks.tf +37 -28
- {src → agent_starter_pack}/base_template/deployment/terraform/providers.tf +1 -1
- {src → agent_starter_pack}/base_template/deployment/terraform/variables.tf +1 -1
- {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
- {src → agent_starter_pack}/base_template/pyproject.toml +22 -21
- {src → agent_starter_pack}/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +5 -5
- {src → agent_starter_pack}/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml +3 -3
- {src → agent_starter_pack}/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +74 -11
- {src → agent_starter_pack}/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml +6 -6
- {src → agent_starter_pack}/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/pr_checks.yaml +4 -4
- {src → agent_starter_pack}/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +95 -13
- {src → agent_starter_pack}/base_template/{{cookiecutter.agent_directory}}/utils/tracing.py +1 -1
- {src → agent_starter_pack}/base_template/{{cookiecutter.agent_directory}}/utils/typing.py +4 -4
- {src → agent_starter_pack}/cli/commands/setup_cicd.py +1 -1
- {src → agent_starter_pack}/cli/main.py +2 -2
- {src → agent_starter_pack}/cli/utils/gcp.py +1 -1
- {src → agent_starter_pack}/cli/utils/remote_template.py +12 -9
- {src → agent_starter_pack}/cli/utils/template.py +19 -15
- agent_starter_pack/deployment_targets/agent_engine/deployment/terraform/{% if not cookiecutter.is_adk_live %}service.tf{% else %}unused_service.tf{% endif %} +82 -0
- agent_starter_pack/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +387 -0
- agent_starter_pack/deployment_targets/agent_engine/tests/load_test/README.md +84 -0
- agent_starter_pack/deployment_targets/agent_engine/tests/load_test/load_test.py +255 -0
- {src → agent_starter_pack}/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/agent_engine_app.py +40 -14
- {src → agent_starter_pack}/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/utils/deployment.py +13 -4
- 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
- {src → agent_starter_pack}/deployment_targets/cloud_run/Dockerfile +3 -3
- {src → agent_starter_pack}/deployment_targets/cloud_run/deployment/terraform/dev/service.tf +4 -4
- {src → agent_starter_pack}/deployment_targets/cloud_run/deployment/terraform/service.tf +7 -7
- {src → agent_starter_pack}/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +207 -5
- {src → agent_starter_pack}/deployment_targets/cloud_run/tests/load_test/README.md +82 -0
- agent_starter_pack/deployment_targets/cloud_run/tests/load_test/load_test.py +249 -0
- {src → agent_starter_pack}/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}/server.py +190 -146
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/package-lock.json +39 -1007
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/package.json +1 -9
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.tsx +1 -1
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/Logger.tsx +8 -3
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/logger.scss +26 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/side-panel/SidePanel.tsx +11 -5
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/side-panel/side-panel.scss +146 -115
- agent_starter_pack/frontends/adk_live_react/frontend/src/components/transcription-preview/TranscriptionPreview.tsx +106 -0
- agent_starter_pack/frontends/adk_live_react/frontend/src/components/transcription-preview/transcription-preview.scss +150 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-live-api.ts +8 -2
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/multimodal-live-types.ts +38 -2
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audio-recorder.ts +1 -1
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audio-streamer.ts +1 -1
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/multimodal-live-client.ts +204 -23
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/utils.ts +27 -5
- {src → agent_starter_pack}/frontends/streamlit/frontend/utils/local_chat_history.py +2 -0
- {src → agent_starter_pack}/resources/docs/adk-cheatsheet.md +5 -5
- agent_starter_pack/resources/idx/.idx/dev.nix +64 -0
- agent_starter_pack/resources/idx/idx-template.json +6 -0
- {src → agent_starter_pack}/resources/idx/idx-template.nix +2 -3
- {src → agent_starter_pack}/resources/locks/uv-adk_base-agent_engine.lock +1079 -954
- {src → agent_starter_pack}/resources/locks/uv-adk_base-cloud_run.lock +1441 -1309
- agent_starter_pack/resources/locks/uv-adk_live-agent_engine.lock +4229 -0
- agent_starter_pack/resources/locks/uv-adk_live-cloud_run.lock +4822 -0
- {src → agent_starter_pack}/resources/locks/uv-agentic_rag-agent_engine.lock +1107 -997
- {src → agent_starter_pack}/resources/locks/uv-agentic_rag-cloud_run.lock +1485 -1368
- {src → agent_starter_pack}/resources/locks/uv-crewai_coding_crew-agent_engine.lock +1294 -1297
- {src → agent_starter_pack}/resources/locks/uv-crewai_coding_crew-cloud_run.lock +2028 -1807
- {src → agent_starter_pack}/resources/locks/uv-langgraph_base_react-agent_engine.lock +1176 -1197
- {src → agent_starter_pack}/resources/locks/uv-langgraph_base_react-cloud_run.lock +1947 -1679
- {src → agent_starter_pack}/utils/generate_locks.py +12 -7
- {src → agent_starter_pack}/utils/lock_utils.py +2 -2
- {src → agent_starter_pack}/utils/watch_and_rebuild.py +1 -1
- {agent_starter_pack-0.15.7.dist-info → agent_starter_pack-0.17.0.dist-info}/METADATA +17 -18
- agent_starter_pack-0.17.0.dist-info/RECORD +179 -0
- agent_starter_pack-0.17.0.dist-info/entry_points.txt +2 -0
- llm.txt +1 -1
- agent_starter_pack-0.15.7.dist-info/RECORD +0 -176
- agent_starter_pack-0.15.7.dist-info/entry_points.txt +0 -2
- agents/crewai_coding_crew/app/agent.py +0 -86
- agents/langgraph_base_react/app/agent.py +0 -73
- agents/live_api/README.md +0 -37
- agents/live_api/app/agent.py +0 -72
- agents/live_api/tests/integration/test_server_e2e.py +0 -260
- agents/live_api/tests/load_test/load_test.py +0 -40
- agents/live_api/tests/unit/test_server.py +0 -144
- src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +0 -186
- src/deployment_targets/agent_engine/tests/load_test/README.md +0 -37
- src/deployment_targets/agent_engine/tests/load_test/load_test.py +0 -126
- src/deployment_targets/cloud_run/tests/load_test/load_test.py +0 -122
- src/resources/idx/.idx/dev.nix +0 -50
- src/resources/idx/idx-template.json +0 -21
- src/resources/locks/uv-live_api-cloud_run.lock +0 -6118
- {agents → agent_starter_pack/agents}/README.md +0 -0
- {agents → agent_starter_pack/agents}/adk_base/README.md +0 -0
- {agents → agent_starter_pack/agents}/adk_base/app/__init__.py +0 -0
- {agents → agent_starter_pack/agents}/adk_base/app/agent.py +0 -0
- {agents → agent_starter_pack/agents}/adk_base/notebooks/adk_app_testing.ipynb +0 -0
- {agents → agent_starter_pack/agents}/adk_base/notebooks/evaluating_adk_agent.ipynb +0 -0
- {agents → agent_starter_pack/agents}/adk_base/tests/integration/test_agent.py +0 -0
- {agents → agent_starter_pack/agents}/agentic_rag/README.md +0 -0
- {agents → agent_starter_pack/agents}/agentic_rag/app/__init__.py +0 -0
- {agents → agent_starter_pack/agents}/agentic_rag/app/agent.py +0 -0
- {agents → agent_starter_pack/agents}/agentic_rag/app/retrievers.py +0 -0
- {agents → agent_starter_pack/agents}/agentic_rag/app/templates.py +0 -0
- {agents → agent_starter_pack/agents}/agentic_rag/notebooks/adk_app_testing.ipynb +0 -0
- {agents → agent_starter_pack/agents}/agentic_rag/notebooks/evaluating_adk_agent.ipynb +0 -0
- {agents → agent_starter_pack/agents}/agentic_rag/tests/integration/test_agent.py +0 -0
- {agents → agent_starter_pack/agents}/crewai_coding_crew/.template/templateconfig.yaml +0 -0
- {agents → agent_starter_pack/agents}/crewai_coding_crew/README.md +0 -0
- {agents → agent_starter_pack/agents}/crewai_coding_crew/app/crew/config/agents.yaml +0 -0
- {agents → agent_starter_pack/agents}/crewai_coding_crew/app/crew/config/tasks.yaml +0 -0
- {agents → agent_starter_pack/agents}/crewai_coding_crew/app/crew/crew.py +0 -0
- {agents → agent_starter_pack/agents}/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb +0 -0
- {agents → agent_starter_pack/agents}/crewai_coding_crew/notebooks/evaluating_langgraph_agent.ipynb +0 -0
- {agents → agent_starter_pack/agents}/crewai_coding_crew/tests/integration/test_agent.py +0 -0
- {agents → agent_starter_pack/agents}/langgraph_base_react/.template/templateconfig.yaml +0 -0
- {agents → agent_starter_pack/agents}/langgraph_base_react/README.md +0 -0
- {agents → agent_starter_pack/agents}/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb +0 -0
- {agents → agent_starter_pack/agents}/langgraph_base_react/tests/integration/test_agent.py +0 -0
- {src → agent_starter_pack}/base_template/.gitignore +0 -0
- {src → agent_starter_pack}/base_template/deployment/README.md +0 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/apis.tf +0 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/iam.tf +0 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/storage.tf +0 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/dev/vars/env.tfvars +0 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/iam.tf +0 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/service_accounts.tf +0 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/storage.tf +0 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/vars/env.tfvars +0 -0
- {src → agent_starter_pack}/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'github_actions' %}wif.tf{% else %}unused_wif.tf{% endif %} +0 -0
- {src → agent_starter_pack}/base_template/tests/unit/test_dummy.py +0 -0
- {src → agent_starter_pack}/base_template/{{cookiecutter.agent_directory}}/utils/gcs.py +0 -0
- {src → agent_starter_pack}/cli/commands/create.py +0 -0
- {src → agent_starter_pack}/cli/commands/enhance.py +0 -0
- {src → agent_starter_pack}/cli/commands/list.py +0 -0
- {src → agent_starter_pack}/cli/utils/__init__.py +0 -0
- {src → agent_starter_pack}/cli/utils/cicd.py +0 -0
- {src → agent_starter_pack}/cli/utils/datastores.py +0 -0
- {src → agent_starter_pack}/cli/utils/logging.py +0 -0
- {src → agent_starter_pack}/cli/utils/version.py +0 -0
- {src → agent_starter_pack}/data_ingestion/README.md +0 -0
- {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/components/ingest_data.py +0 -0
- {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/components/process_data.py +0 -0
- {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/pipeline.py +0 -0
- {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/submit_pipeline.py +0 -0
- {src → agent_starter_pack}/data_ingestion/pyproject.toml +0 -0
- {src → agent_starter_pack}/data_ingestion/uv.lock +0 -0
- {src → agent_starter_pack}/deployment_targets/agent_engine/deployment_metadata.json +0 -0
- {src → agent_starter_pack}/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb +0 -0
- {src → agent_starter_pack}/deployment_targets/agent_engine/tests/load_test/.results/.placeholder +0 -0
- {src → agent_starter_pack}/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/favicon.ico +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/index.html +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/robots.txt +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.scss +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.test.tsx +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/audio-pulse/AudioPulse.tsx +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/audio-pulse/audio-pulse.scss +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/mock-logs.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/contexts/LiveAPIContext.tsx +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-media-stream-mux.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-screen-capture.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-webcam.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/index.css +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/index.tsx +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/react-app-env.d.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/reportWebVitals.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/setupTests.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audioworklet-registry.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/store-logger.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/worklets/audio-processing.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/worklets/vol-meter.ts +0 -0
- {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/tsconfig.json +0 -0
- {src → agent_starter_pack}/frontends/streamlit/frontend/side_bar.py +0 -0
- {src → agent_starter_pack}/frontends/streamlit/frontend/streamlit_app.py +0 -0
- {src → agent_starter_pack}/frontends/streamlit/frontend/style/app_markdown.py +0 -0
- {src → agent_starter_pack}/frontends/streamlit/frontend/utils/chat_utils.py +0 -0
- {src → agent_starter_pack}/frontends/streamlit/frontend/utils/message_editing.py +0 -0
- {src → agent_starter_pack}/frontends/streamlit/frontend/utils/multimodal_utils.py +0 -0
- {src → agent_starter_pack}/frontends/streamlit/frontend/utils/stream_handler.py +0 -0
- {src → agent_starter_pack}/frontends/streamlit/frontend/utils/title_summary.py +0 -0
- {src → agent_starter_pack}/resources/containers/data_processing/Dockerfile +0 -0
- {src → agent_starter_pack}/resources/containers/e2e-tests/Dockerfile +0 -0
- {agent_starter_pack-0.15.7.dist-info → agent_starter_pack-0.17.0.dist-info}/WHEEL +0 -0
- {agent_starter_pack-0.15.7.dist-info → agent_starter_pack-0.17.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -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
|
|
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
|
|
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
|
-
|
|
33
|
+
resource "google_logging_project_sink" "feedback_export_to_bigquery" {
|
|
42
34
|
for_each = local.deploy_project_ids
|
|
43
35
|
|
|
44
|
-
|
|
45
|
-
|
|
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.
|
|
46
|
+
depends_on = [google_bigquery_dataset.feedback_dataset]
|
|
55
47
|
}
|
|
56
48
|
|
|
57
|
-
|
|
49
|
+
resource "google_logging_project_sink" "log_export_to_bigquery" {
|
|
58
50
|
for_each = local.deploy_project_ids
|
|
59
51
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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.
|
|
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
|
}
|
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
13
|
-
{%- if
|
|
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]
|
|
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]
|
|
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
|
|
42
|
+
{% if not cookiecutter.is_adk %}
|
|
42
43
|
streamlit = [
|
|
43
|
-
"streamlit
|
|
44
|
-
"streamlit-extras
|
|
45
|
-
"extra-streamlit-components
|
|
46
|
-
"streamlit-feedback
|
|
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
|
|
51
|
+
"jupyter>=1.0.0,<2.0.0",
|
|
51
52
|
]
|
|
52
53
|
lint = [
|
|
53
|
-
"ruff>=0.4.6",
|
|
54
|
-
"mypy
|
|
55
|
-
"codespell
|
|
56
|
-
"types-pyyaml
|
|
57
|
-
"types-requests
|
|
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.
|
|
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.
|
|
47
|
+
- name: Set up Python 3.12
|
|
48
48
|
uses: actions/setup-python@v4
|
|
49
49
|
with:
|
|
50
|
-
python-version: '3.
|
|
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.
|
|
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.
|
|
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
|
-
--
|
|
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.
|
|
51
|
+
- name: Set up Python 3.12
|
|
52
52
|
uses: actions/setup-python@v4
|
|
53
53
|
with:
|
|
54
|
-
python-version: '3.
|
|
54
|
+
python-version: '3.12'
|
|
55
55
|
|
|
56
56
|
- name: Install uv and dependencies
|
|
57
57
|
run: |
|
|
58
|
-
pip install uv==0.
|
|
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.
|
|
39
|
+
- name: Set up Python 3.12
|
|
40
40
|
uses: actions/setup-python@v4
|
|
41
41
|
with:
|
|
42
|
-
python-version: '3.
|
|
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.
|
|
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.
|
|
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
|
-
--
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
--
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
39
|
+
- name: "python:3.12-slim"
|
|
40
40
|
id: integration-tests
|
|
41
41
|
entrypoint: /bin/bash
|
|
42
42
|
args:
|