agent-starter-pack 0.10.0__py3-none-any.whl → 0.11.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 (46) hide show
  1. {agent_starter_pack-0.10.0.dist-info → agent_starter_pack-0.11.0.dist-info}/METADATA +2 -2
  2. {agent_starter_pack-0.10.0.dist-info → agent_starter_pack-0.11.0.dist-info}/RECORD +46 -45
  3. agents/adk_gemini_fullstack/.template/templateconfig.yaml +1 -0
  4. agents/crewai_coding_crew/.template/templateconfig.yaml +2 -2
  5. agents/crewai_coding_crew/tests/integration/test_agent.py +1 -1
  6. agents/langgraph_base_react/.template/templateconfig.yaml +1 -1
  7. agents/langgraph_base_react/tests/integration/test_agent.py +1 -1
  8. agents/live_api/tests/unit/test_server.py +2 -1
  9. src/base_template/deployment/terraform/dev/iam.tf +12 -11
  10. src/base_template/deployment/terraform/dev/variables.tf +2 -7
  11. src/base_template/deployment/terraform/github.tf +14 -0
  12. src/base_template/deployment/terraform/iam.tf +10 -7
  13. src/base_template/deployment/terraform/service_accounts.tf +4 -5
  14. src/base_template/deployment/terraform/variables.tf +2 -7
  15. src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %} +4 -2
  16. src/base_template/pyproject.toml +2 -2
  17. src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +1 -0
  18. src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +1 -0
  19. src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml +1 -0
  20. src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +1 -0
  21. src/cli/commands/create.py +232 -101
  22. src/cli/commands/enhance.py +248 -0
  23. src/cli/commands/list.py +23 -11
  24. src/cli/commands/setup_cicd.py +1 -1
  25. src/cli/main.py +2 -0
  26. src/cli/utils/logging.py +40 -0
  27. src/cli/utils/remote_template.py +55 -16
  28. src/cli/utils/template.py +212 -94
  29. src/deployment_targets/agent_engine/app/agent_engine_app.py +8 -0
  30. src/deployment_targets/cloud_run/app/server.py +1 -1
  31. src/deployment_targets/cloud_run/deployment/terraform/dev/service.tf +1 -1
  32. src/deployment_targets/cloud_run/deployment/terraform/service.tf +2 -2
  33. src/resources/locks/uv-adk_base-agent_engine.lock +312 -312
  34. src/resources/locks/uv-adk_base-cloud_run.lock +403 -404
  35. src/resources/locks/uv-adk_gemini_fullstack-agent_engine.lock +312 -312
  36. src/resources/locks/uv-adk_gemini_fullstack-cloud_run.lock +403 -404
  37. src/resources/locks/uv-agentic_rag-agent_engine.lock +371 -371
  38. src/resources/locks/uv-agentic_rag-cloud_run.lock +477 -478
  39. src/resources/locks/uv-crewai_coding_crew-agent_engine.lock +661 -591
  40. src/resources/locks/uv-crewai_coding_crew-cloud_run.lock +868 -760
  41. src/resources/locks/uv-langgraph_base_react-agent_engine.lock +496 -446
  42. src/resources/locks/uv-langgraph_base_react-cloud_run.lock +639 -565
  43. src/resources/locks/uv-live_api-cloud_run.lock +584 -510
  44. {agent_starter_pack-0.10.0.dist-info → agent_starter_pack-0.11.0.dist-info}/WHEEL +0 -0
  45. {agent_starter_pack-0.10.0.dist-info → agent_starter_pack-0.11.0.dist-info}/entry_points.txt +0 -0
  46. {agent_starter_pack-0.10.0.dist-info → agent_starter_pack-0.11.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-starter-pack
3
- Version: 0.10.0
3
+ Version: 0.11.0
4
4
  Summary: CLI to bootstrap production-ready Google Cloud GenAI agent projects from templates.
5
5
  Author-email: Google LLC <agent-starter-pack@google.com>
6
6
  License: Apache-2.0
@@ -39,7 +39,7 @@ Description-Content-Type: text/markdown
39
39
  </a> [![Launch in Cloud Shell](https://img.shields.io/badge/Launch-in_Cloud_Shell-white)](https://shell.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Feliasecchig%2Fasp-open-in-cloud-shell&cloudshell_print=open-in-cs) ![Stars](https://img.shields.io/github/stars/GoogleCloudPlatform/agent-starter-pack?color=yellow)
40
40
 
41
41
 
42
- The `agent-starter-pack` is a collection of production-ready Generative AI Agent templates built for Google Cloud. <br>
42
+ The `agent-starter-pack` is a Python package that provides a collection of production-ready Generative AI Agent templates built for Google Cloud. <br>
43
43
  It accelerates development by providing a holistic, production-ready solution, addressing common challenges (Deployment & Operations, Evaluation, Customization, Observability) in building and deploying GenAI agents.
44
44
 
45
45
  | ⚡️ Launch | 🧪 Experiment | ✅ Deploy | 🛠️ Customize |
@@ -6,7 +6,7 @@ agents/adk_base/notebooks/adk_app_testing.ipynb,sha256=wgFzBo7hX393NVzy3ZfZHncs1
6
6
  agents/adk_base/notebooks/evaluating_adk_agent.ipynb,sha256=OMTiT3gAFWPvE9pPL8z7tsDwOU-l8wem5wH-OXPPlvk,56805
7
7
  agents/adk_base/tests/integration/test_agent.py,sha256=VypgpEWrQegJBgc58V-BlIsbqh-Hii-hwmkwcz5feFw,1969
8
8
  agents/adk_gemini_fullstack/README.md,sha256=yQFFcESALj5Q6eweyIyPx__U74obUM88aCBJYNV2UWs,1674
9
- agents/adk_gemini_fullstack/.template/templateconfig.yaml,sha256=2YeSRfcuTHNdYU9smEMn4LPtorBaDUII3qIWRj8nX70,1716
9
+ agents/adk_gemini_fullstack/.template/templateconfig.yaml,sha256=BFlIFsm1g0xmIg4g0jkQ8MpW_EJPRXi4gPYjgIIsAEg,1745
10
10
  agents/adk_gemini_fullstack/app/agent.py,sha256=NXOkYFxDccJaSq55CTS-UYY8z5-WgBZqexII0Ybzk9c,22662
11
11
  agents/adk_gemini_fullstack/app/config.py,sha256=x--axECPKWW3oLANKz2_4zzHEBIU7if8iYNZRjlTNV0,1563
12
12
  agents/adk_gemini_fullstack/notebooks/adk_app_testing.ipynb,sha256=wgFzBo7hX393NVzy3ZfZHncs1ptiQbM_8he3XxJu4yM,9763
@@ -21,74 +21,75 @@ agents/agentic_rag/notebooks/adk_app_testing.ipynb,sha256=wgFzBo7hX393NVzy3ZfZHn
21
21
  agents/agentic_rag/notebooks/evaluating_adk_agent.ipynb,sha256=OMTiT3gAFWPvE9pPL8z7tsDwOU-l8wem5wH-OXPPlvk,56805
22
22
  agents/agentic_rag/tests/integration/test_agent.py,sha256=mxsKFyZrwXzIvAoxlqZv2JndM3VTVTKcugRYdF3APr4,2112
23
23
  agents/crewai_coding_crew/README.md,sha256=4No7sfHQVHELARGiT3fWANJzDR0NP48ow4ct3FoPwlA,1672
24
- agents/crewai_coding_crew/.template/templateconfig.yaml,sha256=q2KH2Hkq7MkGkVup9pIj2E3tosy7paQW2WiEHA2Qw_Y,1051
24
+ agents/crewai_coding_crew/.template/templateconfig.yaml,sha256=WjsvXcih4zqrhV0pX_3eH7PZIf3H1KHdcUAaD2n5I6U,1051
25
25
  agents/crewai_coding_crew/app/agent.py,sha256=yd-P2Jzx3Do4FQuhwDsok-YRNYFi9Vl8OTqSlbdn4Sw,3260
26
26
  agents/crewai_coding_crew/app/crew/crew.py,sha256=pqeeJ4txP-gcVT3PKEAw2zZ4x8g4cDlnFFbf0_zZRr4,2000
27
27
  agents/crewai_coding_crew/app/crew/config/agents.yaml,sha256=Cn9zTcP3C-8MvlV19cYdlxR0iIs2_FOy2gKOJLUpNRo,1154
28
28
  agents/crewai_coding_crew/app/crew/config/tasks.yaml,sha256=SSFuiSQPhi4dM0V5HdNuMqtN7JJr5RUCMhhBzUkPBpc,1511
29
29
  agents/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb,sha256=ifTn4RfrJeYQ8ell9n6VE65ZEfcnKGkMLFG8RBlPK70,57974
30
30
  agents/crewai_coding_crew/notebooks/evaluating_langgraph_agent.ipynb,sha256=PlW41fL-ji9NKkimW6u25YRLGWN2pgoX2G8w5nzIEPE,58737
31
- agents/crewai_coding_crew/tests/integration/test_agent.py,sha256=0uvfmM3FSdESIU7ICb2oqABsQqylQU2PE3UBwbpif-A,1629
31
+ agents/crewai_coding_crew/tests/integration/test_agent.py,sha256=hg6kqtVPtyCLmQkNr45JPM91VwmScco7-f_mXq_YBJw,1611
32
32
  agents/langgraph_base_react/README.md,sha256=KZQ0e8q9CqnIEiItH9Tc2Ceb2mC3sBcyQUo-ZAmO-zs,482
33
- agents/langgraph_base_react/.template/templateconfig.yaml,sha256=jHh3WDNT70KMbA2zy3Da_J_jIWeGfeiqIKfUs5B8OBk,1049
33
+ agents/langgraph_base_react/.template/templateconfig.yaml,sha256=58k6Lhkn_3mYOmUMFFQ_mMq6Df4LerCZVju9uM2RDuQ,1049
34
34
  agents/langgraph_base_react/app/agent.py,sha256=yzCc5JaOJgItoBiZOzHPiSy9aD2HGeGI_pH7nrysSmg,2505
35
35
  agents/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb,sha256=PlW41fL-ji9NKkimW6u25YRLGWN2pgoX2G8w5nzIEPE,58737
36
- agents/langgraph_base_react/tests/integration/test_agent.py,sha256=wg2Y8V4l7dh7rhWy7Z8zioDW5ILRsz7RZJ-mz0AhK3U,1619
36
+ agents/langgraph_base_react/tests/integration/test_agent.py,sha256=5aFkYL6XcnlihoDOpGhb49inK20Ljvx1tzhdwTS-1y4,1601
37
37
  agents/live_api/README.md,sha256=c3lu5WguOUBc5hO_UtNZfVhfYxvSzMXuGFICn9M38mU,2897
38
38
  agents/live_api/.template/templateconfig.yaml,sha256=DD_hihMsuqmd5VWS18vVGZ3ZGVVpFWVXJ2dU07eKb6k,964
39
39
  agents/live_api/app/agent.py,sha256=dYE2qd64OhL-fOgwzrjqN50LYXAgJ1TWbx6ohqtV5Rc,2434
40
40
  agents/live_api/app/server.py,sha256=ZXriNDl_zo7WDRBke85lyzMsy66qGzPaRXY1FMy4Fdw,7793
41
41
  agents/live_api/tests/integration/test_server_e2e.py,sha256=SBowHiVj-_Okbk1dqyITFVIG6yvr5BGNrfxHVpO4TFs,8635
42
42
  agents/live_api/tests/load_test/load_test.py,sha256=HHZyfC4gqiQtZVF_CbbxENGgWQccMLpwMv0IdoQ6cbQ,1275
43
- agents/live_api/tests/unit/test_server.py,sha256=_TjlgQgNkjerIaBGnu8P8_KB8ZlSolDcivALpUOn_Rw,4786
43
+ agents/live_api/tests/unit/test_server.py,sha256=zvNlbz_qOq28IFegq5X2tcwF1gCRnx7Si3d4az-nKT0,4829
44
44
  llm.txt,sha256=wvqbxa1A8kVRdQyOX-ZcN2rOp2314Kw1y4TTe9n9usI,13714
45
45
  src/base_template/.gitignore,sha256=Fq0w34x4sfbwP4RqDqh6hdHNYRUEsFNI-9XONzLWBIs,2580
46
46
  src/base_template/GEMINI.md,sha256=WzscHWlQeYkKORZ-453P8KM9IHuj1kAxW-69c7Ytuwk,133
47
47
  src/base_template/Makefile,sha256=Evt9HcJGBhyoYdVxj5AdfHsQ_vVnbh-g2IlUxM4PFP4,6149
48
48
  src/base_template/README.md,sha256=3okWVHq8Mnm9WwaLR88O9pUq3zUO8fmHilK7ulWHrB4,11342
49
- src/base_template/pyproject.toml,sha256=TEu9_gZT9tRuV6x8CcVIpC4Lcetbr0mHMPcJAab0aq4,2874
49
+ src/base_template/pyproject.toml,sha256=Ow_R0OhPbaACmJ9bgXqu703Q-tCL8FZhfyJ1xVwhveU,2874
50
50
  src/base_template/app/__init__.py,sha256=UyAgc2l8nkVIUPUzL9hKR7EgzCsc2jSYcOcjHNNmpMU,59
51
51
  src/base_template/app/utils/gcs.py,sha256=jKblaWOGQEigw3esaawcfX178shhZi2Fyk0fJSA4T68,1501
52
52
  src/base_template/app/utils/tracing.py,sha256=2rv1Ukh2jTBENDwoghCItJ28l-Sjz9gMlzdojlVgJa4,6052
53
53
  src/base_template/app/utils/typing.py,sha256=DP5OZC3IGvqA1XbvWt8kI3gyAK3ZjzUSL5Ca17wNeLI,4249
54
54
  src/base_template/deployment/README.md,sha256=gZJvSWdQh_Mi-bZ3dmuPv7fMezIw04fgN5tq7KgglPw,692
55
55
  src/base_template/deployment/terraform/apis.tf,sha256=KX8Oe2gjT-gh9Bkntz9yIAyRjPc1gZvwOhroJ6NZVp4,1513
56
- src/base_template/deployment/terraform/github.tf,sha256=HqM0gzSvJLoqlfdbBGLqJJ0RjUSRxZm8TgJ_icVH_Tk,10347
57
- src/base_template/deployment/terraform/iam.tf,sha256=IdZju8WsfjT_-CswYSGuAHjE8JsWArsAi2TbqTnphEU,5661
56
+ src/base_template/deployment/terraform/github.tf,sha256=KhfNBAzeUH9jDr8FOw_DiypesA5AEC8IZT1PRqntSt8,10838
57
+ src/base_template/deployment/terraform/iam.tf,sha256=1u0qY-4srkhRirRI9kuQE0GAAYBeP5cTztA-w2N4FH8,5657
58
58
  src/base_template/deployment/terraform/locals.tf,sha256=nvjlavqWRL6e-iIqfIRvsai5JY9l6KhRGcwJQFRdu_U,1653
59
59
  src/base_template/deployment/terraform/log_sinks.tf,sha256=eAGh_dCjOKUQjylkqp1fNM9cfE4QB9HSEovjD6_G9Lg,2971
60
60
  src/base_template/deployment/terraform/providers.tf,sha256=wNWvXJbpvV3njDYO8t4s6DdDkL0dQpWgkPsmJw61ABM,1167
61
- src/base_template/deployment/terraform/service_accounts.tf,sha256=KsM9g0dlXmO6-Hokzz09HP1oO3crc8uLJj_Z45d8fe0,1713
61
+ src/base_template/deployment/terraform/service_accounts.tf,sha256=iSRrRzxL16pZHel5cZDzC7m15IRTRv8qMxkcg4nd30o,1672
62
62
  src/base_template/deployment/terraform/storage.tf,sha256=W0l34U7Ql2wdegfWsWfKzaEooaMaTL2TkU18KM_Vuys,8695
63
- src/base_template/deployment/terraform/variables.tf,sha256=fyaif0z9hgmeEd581L6ilU-WZbjAoWynbmh6Bv48zpk,6981
63
+ src/base_template/deployment/terraform/variables.tf,sha256=RudiaEVsIrRSCIHDMWs857gMghenUeZR5g_34kDuoXY,6733
64
64
  src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'github_actions' %}wif.tf{% else %}unused_wif.tf{% endif %},sha256=rCupUnvaTVj75ahJOckNuzlQ-xcLTik_HpqXzVEEB5g,2666
65
- src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %},sha256=i38RbFSr7CrzsvvQzeX5VYHMZ90fzenR_R_I3vRR6QM,6713
65
+ src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %},sha256=wb8Frd95PF0PHDRoh9v3QF5kpF-Fi-GDcD7mKmTxGJ8,6813
66
66
  src/base_template/deployment/terraform/dev/apis.tf,sha256=R5fyLQGHsZy7JyDdFpuNzUBute6Rn9xR32zIMjkGxzc,1592
67
- src/base_template/deployment/terraform/dev/iam.tf,sha256=ZHFs4TMvq6mqD90n8ecXndzW3pyu4EbZO4iJis88BH0,3394
67
+ src/base_template/deployment/terraform/dev/iam.tf,sha256=q8dfqbMNSpgMXW96hP7rnApFoNaAUzZgUXs5HIl7ZFI,3329
68
68
  src/base_template/deployment/terraform/dev/log_sinks.tf,sha256=uVdMtDdd8MnxtKhqzVaYqadE11P3r4fs2IdgNecxM4I,2671
69
69
  src/base_template/deployment/terraform/dev/providers.tf,sha256=1S9jCh48d6ailVZ1e14EHsUUDSp7DyGZGExJwViFCkM,900
70
70
  src/base_template/deployment/terraform/dev/storage.tf,sha256=1mgLs21SUhfcoRICqd7BqUlEVAVGeN3kMsQ4UAQLOh8,4654
71
- src/base_template/deployment/terraform/dev/variables.tf,sha256=7uQeqzN6IR14h1iThXf-3M1pbWKpKxCddDs78r49yuo,4324
71
+ src/base_template/deployment/terraform/dev/variables.tf,sha256=JMo3BQ57t8OTRiNUb9cz1zoWYCOMMhi67Hx0UZ_kZko,4072
72
72
  src/base_template/deployment/terraform/dev/vars/env.tfvars,sha256=LoQMjh1AAMR-MGfaSCsVMjdoYTk2T4oS4D9vMH54CdQ,714
73
73
  src/base_template/deployment/terraform/vars/env.tfvars,sha256=Jyc36pt-0xNMwQsoXucad0QAWFMeGe67fdimCKXx-tw,1411
74
74
  src/base_template/tests/unit/test_dummy.py,sha256=2exfCH8qhkZrLWvK04ZxNTO9MV3fdTbZkJN3uK6zvok,850
75
- src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml,sha256=nOP8Lr4IEYmcdaWPWeKx9T-HLlbWSx3fxmBgzYjRQM0,5584
75
+ src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml,sha256=A9NbH0l-NqbwfPI5d2SxxKuMuwcAUbbErhTxYWYsSxc,5667
76
76
  src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml,sha256=vy51dSiRFEFlFq9eEWuUsemG0jXj3VL4lCRMcodPiok,1981
77
- src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml,sha256=BvZk0rquC0eP49b07kWp0NkwbGLuGlUJLFJL2-A0q1Q,8408
78
- src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml,sha256=jOgmEj4v0xILIzq4dXqyu07wWZjpBaow2jNJyYdbINU,3651
77
+ src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml,sha256=fYX-IBKHD-gSoFNLpAJUM0v2okL32AbMTn-eJpstSqU,8494
78
+ src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml,sha256=Zv3oE3YC8P2iYJ2_ie1PPo0HjNLxiMkY3IwJrS0bFcM,3703
79
79
  src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/pr_checks.yaml,sha256=VFdF6q_-zETCMlJkJ0znW8T7gCYE59BZNliNPz2Bh18,1517
80
- src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml,sha256=o7EuMwJJkXI3xNtBubvqyVDTVFRFjNYyv5v6aixVoVU,7312
81
- src/cli/main.py,sha256=fyJKjU1gvRQmuqS-J6sExvqXo0-z7n6Bce8PSbDPa6E,1769
82
- src/cli/commands/create.py,sha256=EFFDEHBZ_O_g24gwTknpq_92c1OPKG2ECmnOiAS4aoU,39201
83
- src/cli/commands/list.py,sha256=xlH7w_c_CO2XiFrYyDeBCE_JkUY3f3g4o0HbBIl5fqE,5056
84
- src/cli/commands/setup_cicd.py,sha256=rNJN8HFWYf8Q6Wr9bLy1KHodiJJCG3T2JGVYIQskJaE,32232
80
+ src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml,sha256=Spy8ziGCHUtY5hqSIiIDTTywjmSoUw8N1YlwGo0aL04,7367
81
+ src/cli/main.py,sha256=Dya7Sw3ozMTaGDcwMh_-W7udkGZHGzgAj8aBdSZaZxI,1832
82
+ src/cli/commands/create.py,sha256=mUFukCCpuFV6bgS-JmQEZ6D-zB-_ddxmTMeuygrhogI,43876
83
+ src/cli/commands/enhance.py,sha256=Evi4UigR8zMUwP99D116w1W-ZKmlIy1hXRPWz4EH_E4,9372
84
+ src/cli/commands/list.py,sha256=qey_XDoJkjBvvuVMilFqjMUdBRmbHkSyqGeM23E3xHM,5502
85
+ src/cli/commands/setup_cicd.py,sha256=ZgpMrYHXg3B_u5h5PxvVuC4T7Q2uQTYMNMwBBOlcKmg,32250
85
86
  src/cli/utils/__init__.py,sha256=_cTmsXGPqOtK0q8UW5164QTltbJRJFR_Efxq_BRL1-o,1311
86
87
  src/cli/utils/cicd.py,sha256=9s_OcusQznT_pSjFP60BfDBoZ5V6bwPE0QWbWdMaVlY,26515
87
88
  src/cli/utils/datastores.py,sha256=gv1V6eDcOEKx4MRNG5C3Y-VfixYq1AzQuaYMLp8QRNo,1058
88
89
  src/cli/utils/gcp.py,sha256=cnuCyN144eiyYc9aJNEK9JnyWN66rdevugoMdDYC1UU,4032
89
- src/cli/utils/logging.py,sha256=0lHe4EPi1A8sOx9xkA7gS4UNl0GsIyp2ahydkkuCzLY,1570
90
- src/cli/utils/remote_template.py,sha256=iJDocC9AiQd0yfqzj6F0pDrt2QHMPKU66FLlWFkNfqM,10526
91
- src/cli/utils/template.py,sha256=oVRY0qaNynrSadvVDJHrth3m-_yw4uisGhuKEdm9PbM,36059
90
+ src/cli/utils/logging.py,sha256=MYPxQYXXaKCqBVOfrhEMe8lFKzpzZWjOVP2Km81X5Mk,3007
91
+ src/cli/utils/remote_template.py,sha256=1o3MloLycoO3Mjm_SA6cXc4dFGtvF9c1CNnnThPu-3w,12165
92
+ src/cli/utils/template.py,sha256=_rAaQxxETT7ucJAwbGoZVSF8mN7iDXCr1iNpMS08h8k,42649
92
93
  src/cli/utils/version.py,sha256=F4udQmzniPStqWZFIgnv3Qg3l9non4mfy2An-Oveqmc,2916
93
94
  src/data_ingestion/README.md,sha256=LNxSQoJW9JozK-TbyGQLj5L_MGWNwrfLk6V6RmQ2oBQ,4032
94
95
  src/data_ingestion/pyproject.toml,sha256=-1Mf2QB8K70ICQV5UPZDpf-fN3UwEQLVzQyxfakCSTY,445
@@ -98,16 +99,16 @@ src/data_ingestion/data_ingestion_pipeline/submit_pipeline.py,sha256=tWGqL0zUB3V
98
99
  src/data_ingestion/data_ingestion_pipeline/components/ingest_data.py,sha256=QbPmk6V7JPGo5Yc1BhL-1W_t9CXEN0iY5NKaGWlfSbM,10667
99
100
  src/data_ingestion/data_ingestion_pipeline/components/process_data.py,sha256=8vubxkykRpx-d89H1XYGO3yXz4hxhihhGDgDR3s-XZ4,22045
100
101
  src/deployment_targets/agent_engine/deployment_metadata.json,sha256=G_t_n-UNrFsBgH1Xrw5-ZqYzUGwZ4X6ipsIm_yiSq-w,72
101
- src/deployment_targets/agent_engine/app/agent_engine_app.py,sha256=aPXSg4K-Vo3z9qMPa0mYT5kB2Py1JhJfW2D0kOxdjjg,12229
102
+ src/deployment_targets/agent_engine/app/agent_engine_app.py,sha256=NKwghQ2vMai3bx0XDjrNve6pNDMAPjZ7zPjksoPapKM,12507
102
103
  src/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb,sha256=RE6Gp-bu4bHtNBngfkt_CF5emy5YcOWQ5rMYW_Cv8_w,48809
103
104
  src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py,sha256=3mEHdnenqT1RrQpndnQWZSMnn8kSLH85rPDhbxH6_lk,5978
104
105
  src/deployment_targets/agent_engine/tests/load_test/README.md,sha256=aQP7nDAqd2jKBET4noI39HC9PVHpgpned7cxucWpVJo,1302
105
106
  src/deployment_targets/agent_engine/tests/load_test/load_test.py,sha256=USzS89bQ4qHVoQynDRSRShKzeXf1MJ0MBV4FpV40vrI,4249
106
107
  src/deployment_targets/agent_engine/tests/load_test/.results/.placeholder,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
108
  src/deployment_targets/cloud_run/Dockerfile,sha256=CuhR3MuaRO2R7XrKPgNc5Oi7pv5JpJqgR8Nid0Tnsag,891
108
- src/deployment_targets/cloud_run/app/server.py,sha256=4e4BuTMOneQKxStQOMwBHPXWSKNhVGpVOtgKn2bhoZE,6630
109
- src/deployment_targets/cloud_run/deployment/terraform/service.tf,sha256=TwprbgxUGBbPLQH8vjTtYoC0F2S8105AC_VsNqNrAvs,10342
110
- src/deployment_targets/cloud_run/deployment/terraform/dev/service.tf,sha256=3AUsT5d8YaFtRa1Skrq5l8tlGEIb8Kk94TolykqmQxg,6591
109
+ src/deployment_targets/cloud_run/app/server.py,sha256=57S0SyDskDQnj6sMGx4ain-K2YVSCGplr4zp4mSlRPk,6656
110
+ src/deployment_targets/cloud_run/deployment/terraform/service.tf,sha256=w3iEnyScbO0sjLPQEYfs3GmPpHTUMGeG1ghi09wSY24,10322
111
+ src/deployment_targets/cloud_run/deployment/terraform/dev/service.tf,sha256=VegAzMcl2ohxMvtq6bcSXfCHYzQW68usyA839oULpgk,6581
111
112
  src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py,sha256=6gtRbCxlrsnvHdOFq8c_B_xowo49CJxThUeVjtQdTew,9238
112
113
  src/deployment_targets/cloud_run/tests/load_test/README.md,sha256=k-PBN6HE9wgSRFb81sSiXA8h5Li6KYyIUSwDj6yntHU,2740
113
114
  src/deployment_targets/cloud_run/tests/load_test/load_test.py,sha256=eVhqX8GtiDsIuZxMJAF2ivXML0xHDWDbriYsHZjAQZE,4212
@@ -189,22 +190,22 @@ src/resources/docs/adk-cheatsheet.md,sha256=C3xb_dEWWp7iROLRVb0iTBGmJ9uAbreF1j6V
189
190
  src/resources/idx/idx-template.json,sha256=07OQZCPp45Iqor2O7Tm1e1Gmsdd-AmmUofSvA7y-oRs,793
190
191
  src/resources/idx/idx-template.nix,sha256=sesHGev_PYtVDg0J5tHkg0OO7IR1Bz2iAtl_if3Ar3M,892
191
192
  src/resources/idx/.idx/dev.nix,sha256=XQ4T1xt5I-8SVwnI37v56RFFlxa58Ko-a9G2-oelYAI,1602
192
- src/resources/locks/uv-adk_base-agent_engine.lock,sha256=CEtUg1T6MD5lcFlrjCVc7GH6EqFFhK_zlg9HAXackd0,485260
193
- src/resources/locks/uv-adk_base-cloud_run.lock,sha256=bHEgHHev67STvqa8-qiwRMqqXEIsae_yzUwO0PLUhoQ,639696
194
- src/resources/locks/uv-adk_gemini_fullstack-agent_engine.lock,sha256=CEtUg1T6MD5lcFlrjCVc7GH6EqFFhK_zlg9HAXackd0,485260
195
- src/resources/locks/uv-adk_gemini_fullstack-cloud_run.lock,sha256=bHEgHHev67STvqa8-qiwRMqqXEIsae_yzUwO0PLUhoQ,639696
196
- src/resources/locks/uv-agentic_rag-agent_engine.lock,sha256=mT5kX6pvH3e6IpwAh9PGP1-p0UqeRO8ErjlVZdpAhQw,543152
197
- src/resources/locks/uv-agentic_rag-cloud_run.lock,sha256=5-VNslpOWkZtDUeHIrT8xDt8egWUWY9m1URvbV7by_o,717269
198
- src/resources/locks/uv-crewai_coding_crew-agent_engine.lock,sha256=s60k9WkDVfhrnGEZk822Htf0q6_F0UcUiHNc22h0jYo,800736
199
- src/resources/locks/uv-crewai_coding_crew-cloud_run.lock,sha256=RERjilGiy-u4qfbvWhGF3dM67eV3q_2TgtdCzMi-gxA,1047819
200
- src/resources/locks/uv-langgraph_base_react-agent_engine.lock,sha256=s8WYziB641WMfPVS-O_DXnOpdcFNRMEIIdF5RM2XUek,683711
201
- src/resources/locks/uv-langgraph_base_react-cloud_run.lock,sha256=zeCX1ofox1kok8AsNRARfDuDb2kE9Ok9TXyCL1VdUyw,901626
202
- src/resources/locks/uv-live_api-cloud_run.lock,sha256=w6Zd77jiEPsWLYZcNscE_jFA_eOzYeEa360zRRGI20M,822206
193
+ src/resources/locks/uv-adk_base-agent_engine.lock,sha256=XRegoR8TO1MDfCWQzjoBK9CuaC8wdUCs6cWet6c1J40,486277
194
+ src/resources/locks/uv-adk_base-cloud_run.lock,sha256=RowuQWgvz2W-sMG1hSp1QCswn2POYmGKCAln_aY2tpI,640556
195
+ src/resources/locks/uv-adk_gemini_fullstack-agent_engine.lock,sha256=XRegoR8TO1MDfCWQzjoBK9CuaC8wdUCs6cWet6c1J40,486277
196
+ src/resources/locks/uv-adk_gemini_fullstack-cloud_run.lock,sha256=RowuQWgvz2W-sMG1hSp1QCswn2POYmGKCAln_aY2tpI,640556
197
+ src/resources/locks/uv-agentic_rag-agent_engine.lock,sha256=grapMSoXHRsI9HFBz2M1XQ5eicwNvd1vf1ay2oaj_-o,544169
198
+ src/resources/locks/uv-agentic_rag-cloud_run.lock,sha256=rhRWMB1SXniMFjT0p0yBrVskyDvZDxjWEtHlGJji0vs,718129
199
+ src/resources/locks/uv-crewai_coding_crew-agent_engine.lock,sha256=mmZGeSNBAG3QJEeHbFFaXGh4vvhs2NNCce3kx-E55Lo,814252
200
+ src/resources/locks/uv-crewai_coding_crew-cloud_run.lock,sha256=xX1Wh5CfY0T_m5DNUrQjB9NlU4M9pOw08Vost0iWGB0,1071769
201
+ src/resources/locks/uv-langgraph_base_react-agent_engine.lock,sha256=pItAia1C5B6aKU7eewW7ktqnLx60qK49g7CJOA08HEM,694504
202
+ src/resources/locks/uv-langgraph_base_react-cloud_run.lock,sha256=3LUeFAOXbNpLZBdxSBY21DxXUDLkIBIJAFV2GyO6w18,918987
203
+ src/resources/locks/uv-live_api-cloud_run.lock,sha256=xOPEAiyHooNT2nMP1wbnJ2ekODdI5H0lM8h_byau1Xg,839570
203
204
  src/utils/generate_locks.py,sha256=6V1B8V2BEuevWnXUsxZVTrLjXwFRII8UfsIGrQqZxVs,4320
204
205
  src/utils/lock_utils.py,sha256=IFOMUWtb-ypm2Y8w8J5y2oI_-MaPuwPF_JOAAlnNudA,2275
205
206
  src/utils/watch_and_rebuild.py,sha256=vP4yIiA7E_lj5sfQdJUl8TXas6V7msDg8XWUutAC05Q,6679
206
- agent_starter_pack-0.10.0.dist-info/METADATA,sha256=EV90lF4GnBQ0AsEv4iU0KbexfsVzF58rxOd52y7ASa4,11178
207
- agent_starter_pack-0.10.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
208
- agent_starter_pack-0.10.0.dist-info/entry_points.txt,sha256=U7uCxR7YulIhZ0L8R8Hui0Bsy6J7oyESBeDYJYMrQjA,56
209
- agent_starter_pack-0.10.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
210
- agent_starter_pack-0.10.0.dist-info/RECORD,,
207
+ agent_starter_pack-0.11.0.dist-info/METADATA,sha256=I6ucqd79L2lMuuIQTi4hn1BXKD587zEHizRnB8mtvGU,11209
208
+ agent_starter_pack-0.11.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
209
+ agent_starter_pack-0.11.0.dist-info/entry_points.txt,sha256=U7uCxR7YulIhZ0L8R8Hui0Bsy6J7oyESBeDYJYMrQjA,56
210
+ agent_starter_pack-0.11.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
211
+ agent_starter_pack-0.11.0.dist-info/RECORD,,
@@ -21,6 +21,7 @@ settings:
21
21
  extra_dependencies: ["google-adk~=1.8.0"]
22
22
  tags: ["adk"]
23
23
  frontend_type: "adk_gemini_fullstack"
24
+ interactive_command: "dev"
24
25
  commands:
25
26
  override:
26
27
  install: "uv sync --dev --extra jupyter && npm --prefix frontend install"
@@ -21,7 +21,7 @@ settings:
21
21
  "langchain~=0.3.14",
22
22
  "langchain-community~=0.3.17",
23
23
  "langchain-openai~=0.3.5",
24
- "langgraph~=0.4.8",
25
- "crewai~=0.140.0"
24
+ "langgraph~=0.6.2",
25
+ "crewai~=0.152.0"
26
26
  ]
27
27
  example_question: "How can I implement a function to sort a list in Python?"
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- # mypy: disable-error-code="union-attr"
15
+ # mypy: ignore-errors
16
16
  from app.agent import agent
17
17
 
18
18
 
@@ -19,7 +19,7 @@ settings:
19
19
  extra_dependencies: [
20
20
  "langchain-google-vertexai~=2.0.7",
21
21
  "langchain~=0.3.14",
22
- "langgraph~=0.4.8",
22
+ "langgraph~=0.6.2",
23
23
  "langchain-google-vertexai~=2.0.22",
24
24
  "langchain~=0.3.14",
25
25
  "langchain-community~=0.3.17",
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- # mypy: disable-error-code="union-attr"
15
+ # mypy: ignore-errors
16
16
  from app.agent import agent
17
17
 
18
18
 
@@ -126,10 +126,11 @@ async def test_websocket_endpoint() -> None:
126
126
  # Verify mock interactions
127
127
  mock_genai.aio.live.connect.assert_called_once()
128
128
  assert mock_session._ws.recv.called
129
+ await mock_session._ws.recv.aclose()
129
130
 
130
131
 
131
132
  @pytest.mark.asyncio
132
- async def test_websocket_error_handling() -> None:
133
+ def test_websocket_error_handling() -> None:
133
134
  """Test websocket error handling."""
134
135
  from app.server import app
135
136
 
@@ -32,18 +32,18 @@ resource "google_project_iam_member" "default_compute_sa_storage_object_creator"
32
32
  depends_on = [resource.google_project_service.services]
33
33
  }
34
34
 
35
- {% if cookiecutter.deployment_target == 'cloud_run' %}
36
- resource "google_service_account" "cloud_run_app_sa" {
37
- account_id = "${var.project_name}-cr"
38
- display_name = "${var.project_name} Cloud Run App Service Account"
35
+ # Agent service account
36
+ resource "google_service_account" "app_sa" {
37
+ account_id = "${var.project_name}-app"
38
+ display_name = "${var.project_name} Agent Service Account"
39
39
  project = var.dev_project_id
40
40
  depends_on = [resource.google_project_service.services]
41
41
  }
42
42
 
43
- # Grant Cloud Run SA the required permissions to run the application
44
- resource "google_project_iam_member" "cloud_run_app_sa_roles" {
43
+ # Grant application SA the required permissions to run the application
44
+ resource "google_project_iam_member" "app_sa_roles" {
45
45
  for_each = {
46
- for pair in setproduct(keys(local.project_ids), var.cloud_run_app_roles) :
46
+ for pair in setproduct(keys(local.project_ids), var.app_sa_roles) :
47
47
  join(",", pair) => {
48
48
  project = local.project_ids[pair[0]]
49
49
  role = pair[1]
@@ -52,14 +52,15 @@ resource "google_project_iam_member" "cloud_run_app_sa_roles" {
52
52
 
53
53
  project = each.value.project
54
54
  role = each.value.role
55
- member = "serviceAccount:${google_service_account.cloud_run_app_sa.email}"
55
+ member = "serviceAccount:${google_service_account.app_sa.email}"
56
56
  depends_on = [resource.google_project_service.services]
57
57
  }
58
- {% elif cookiecutter.deployment_target == 'agent_engine' %}
59
- # Grant required permissions to Vertex AI service account
58
+
59
+ {% if cookiecutter.deployment_target == 'agent_engine' %}
60
+ # Grant required permissions to Vertex AI service account for Agent Engine
60
61
  resource "google_project_iam_member" "vertex_ai_sa_permissions" {
61
62
  for_each = {
62
- for pair in setproduct(keys(local.project_ids), var.agentengine_sa_roles) :
63
+ for pair in setproduct(keys(local.project_ids), var.app_sa_roles) :
63
64
  join(",", pair) => pair[1]
64
65
  }
65
66
 
@@ -45,13 +45,8 @@ variable "feedback_logs_filter" {
45
45
  default = "jsonPayload.log_type=\"feedback\" jsonPayload.service_name=\"{{cookiecutter.project_name}}\""
46
46
  }
47
47
 
48
- {% if cookiecutter.deployment_target == 'cloud_run' %}
49
- variable "cloud_run_app_roles" {
50
- description = "List of roles to assign to the Cloud Run app service account"
51
- {% elif cookiecutter.deployment_target == 'agent_engine' %}
52
- variable "agentengine_sa_roles" {
53
- description = "List of roles to assign to the Agent Engine app service account"
54
- {% endif %}
48
+ variable "app_sa_roles" {
49
+ description = "List of roles to assign to the application service account"
55
50
  type = list(string)
56
51
  default = [
57
52
  {%- if "adk" in cookiecutter.tags and cookiecutter.session_type == "alloydb" %}
@@ -105,6 +105,20 @@ resource "github_actions_variable" "bucket_name_load_test_results" {
105
105
  depends_on = [github_repository.repo]
106
106
  }
107
107
 
108
+ resource "github_actions_variable" "app_sa_email_staging" {
109
+ repository = var.repository_name
110
+ variable_name = "APP_SA_EMAIL_STAGING"
111
+ value = google_service_account.app_sa["staging"].email
112
+ depends_on = [github_repository.repo]
113
+ }
114
+
115
+ resource "github_actions_variable" "app_sa_email_prod" {
116
+ repository = var.repository_name
117
+ variable_name = "APP_SA_EMAIL_PROD"
118
+ value = google_service_account.app_sa["prod"].email
119
+ depends_on = [github_repository.repo]
120
+ }
121
+
108
122
  {% if cookiecutter.deployment_target == 'cloud_run' %}
109
123
  resource "github_actions_variable" "container_name" {
110
124
  repository = var.repository_name
@@ -56,10 +56,10 @@ resource "google_project_iam_member" "cicd_run_invoker_artifact_registry_reader"
56
56
 
57
57
  }
58
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" {
59
+ # 4. Grant application SA the required permissions to run the application
60
+ resource "google_project_iam_member" "app_sa_roles" {
61
61
  for_each = {
62
- for pair in setproduct(keys(local.deploy_project_ids), var.cloud_run_app_roles) :
62
+ for pair in setproduct(keys(local.deploy_project_ids), var.app_sa_roles) :
63
63
  join(",", pair) => {
64
64
  project = local.deploy_project_ids[pair[0]]
65
65
  role = pair[1]
@@ -68,10 +68,13 @@ resource "google_project_iam_member" "cloud_run_app_sa_roles" {
68
68
 
69
69
  project = each.value.project
70
70
  role = each.value.role
71
- member = "serviceAccount:${google_service_account.cloud_run_app_sa[split(",", each.key)[0]].email}"
71
+ member = "serviceAccount:${google_service_account.app_sa[split(",", each.key)[0]].email}"
72
72
  depends_on = [resource.google_project_service.cicd_services, resource.google_project_service.deploy_project_services]
73
73
  }
74
- {% elif cookiecutter.deployment_target == 'agent_engine' %}
74
+
75
+ {% endif %}
76
+
77
+ {% if cookiecutter.deployment_target == 'agent_engine' %}
75
78
  resource "google_project_service_identity" "vertex_sa" {
76
79
  for_each = local.deploy_project_ids
77
80
  provider = google-beta
@@ -79,10 +82,10 @@ resource "google_project_service_identity" "vertex_sa" {
79
82
  service = "aiplatform.googleapis.com"
80
83
  }
81
84
 
82
- # 3. Grant required permissions to Vertex AI Service Agent SA
85
+ # 5. Grant required permissions to Vertex AI Service Agent SA for Agent Engine
83
86
  resource "google_project_iam_member" "vertex_ai_sa_permissions" {
84
87
  for_each = {
85
- for pair in setproduct(keys(local.deploy_project_ids), var.agentengine_sa_roles) :
88
+ for pair in setproduct(keys(local.deploy_project_ids), var.app_sa_roles) :
86
89
  "${pair[0]}_${pair[1]}" => {
87
90
  project = local.deploy_project_ids[pair[0]]
88
91
  role = pair[1]
@@ -18,16 +18,15 @@ resource "google_service_account" "cicd_runner_sa" {
18
18
  project = var.cicd_runner_project_id
19
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
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
@@ -66,13 +66,8 @@ variable "feedback_logs_filter" {
66
66
  default = "jsonPayload.log_type=\"feedback\""
67
67
  }
68
68
 
69
- {% if cookiecutter.deployment_target == 'cloud_run' %}
70
- variable "cloud_run_app_roles" {
71
- description = "List of roles to assign to the Cloud Run app service account"
72
- {% elif cookiecutter.deployment_target == 'agent_engine' %}
73
- variable "agentengine_sa_roles" {
74
- description = "List of roles to assign to the Agent Engine service account"
75
- {% endif %}
69
+ variable "app_sa_roles" {
70
+ description = "List of roles to assign to the application service account"
76
71
  type = list(string)
77
72
  default = [
78
73
  {%- if cookiecutter.deployment_target == 'cloud_run' %}
@@ -78,7 +78,8 @@ resource "google_cloudbuild_trigger" "cd_pipeline" {
78
78
  {% if cookiecutter.deployment_target == 'cloud_run' %}
79
79
  _CONTAINER_NAME = var.project_name
80
80
  _ARTIFACT_REGISTRY_REPO_NAME = resource.google_artifact_registry_repository.repo-artifacts-genai.repository_id
81
- _CLOUD_RUN_APP_SA_EMAIL = resource.google_service_account.cloud_run_app_sa["staging"].email
81
+ {% elif cookiecutter.deployment_target == 'agent_engine' %}
82
+ _APP_SA_EMAIL_STAGING = resource.google_service_account.app_sa["staging"].email
82
83
  {% endif %}
83
84
  {% if cookiecutter.data_ingestion %}
84
85
  _PIPELINE_GCS_ROOT_STAGING = "gs://${resource.google_storage_bucket.data_ingestion_pipeline_gcs_root["staging"].name}"
@@ -126,7 +127,8 @@ resource "google_cloudbuild_trigger" "deploy_to_prod_pipeline" {
126
127
  {% if cookiecutter.deployment_target == 'cloud_run' %}
127
128
  _CONTAINER_NAME = var.project_name
128
129
  _ARTIFACT_REGISTRY_REPO_NAME = resource.google_artifact_registry_repository.repo-artifacts-genai.repository_id
129
- _CLOUD_RUN_APP_SA_EMAIL = resource.google_service_account.cloud_run_app_sa["prod"].email
130
+ {% elif cookiecutter.deployment_target == 'agent_engine' %}
131
+ _APP_SA_EMAIL_PROD = resource.google_service_account.app_sa["prod"].email
130
132
  {% endif %}
131
133
  {% if cookiecutter.data_ingestion %}
132
134
  _PIPELINE_GCS_ROOT_PROD = "gs://${resource.google_storage_bucket.data_ingestion_pipeline_gcs_root["prod"].name}"
@@ -16,12 +16,12 @@ dependencies = [
16
16
  {%- endif %}
17
17
  "google-cloud-logging~=3.11.4",
18
18
  {%- if cookiecutter.deployment_target == 'cloud_run' %}
19
- "google-cloud-aiplatform[evaluation]~=1.103.0",
19
+ "google-cloud-aiplatform[evaluation]~=1.106.0",
20
20
  "fastapi~=0.115.8",
21
21
  "uvicorn~=0.34.0",
22
22
  "psycopg2-binary>=2.9.10",
23
23
  {%- elif cookiecutter.deployment_target == 'agent_engine' %}
24
- "google-cloud-aiplatform[evaluation,agent-engines]~=1.103.0"
24
+ "google-cloud-aiplatform[evaluation,agent-engines]~=1.106.0"
25
25
  {%- endif %}
26
26
  ]
27
27
  {% if cookiecutter.deployment_target == 'cloud_run' %}
@@ -109,6 +109,7 @@ jobs:
109
109
  uv run app/agent_engine_app.py \
110
110
  --project {% raw %}${{ vars.PROD_PROJECT_ID }}{% endraw %} \
111
111
  --location {% raw %}${{ vars.REGION }}{% endraw %} \
112
+ --service-account {% raw %}${{ vars.APP_SA_EMAIL_PROD }}{% endraw %} \
112
113
  --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 %}"
113
114
  {%- endif %}
114
115
 
@@ -122,6 +122,7 @@ jobs:
122
122
  uv run app/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
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 %}"
126
127
 
127
128
  - name: Fetch Auth Token
@@ -77,6 +77,7 @@ steps:
77
77
  uv run app/agent_engine_app.py \
78
78
  --project ${_PROD_PROJECT_ID} \
79
79
  --location ${_REGION} \
80
+ --service-account ${_APP_SA_EMAIL_PROD} \
80
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 %}"
81
82
  env:
82
83
  - 'PATH=/usr/local/bin:/usr/bin:~/.local/bin'
@@ -111,6 +111,7 @@ steps:
111
111
  uv run app/agent_engine_app.py \
112
112
  --project ${_STAGING_PROJECT_ID} \
113
113
  --location ${_REGION} \
114
+ --service-account ${_APP_SA_EMAIL_STAGING} \
114
115
  --set-env-vars="COMMIT_SHA=${COMMIT_SHA}{%- if cookiecutter.data_ingestion %}{%- if cookiecutter.datastore_type == "vertex_ai_search" %},DATA_STORE_ID=${_DATA_STORE_ID_STAGING},DATA_STORE_REGION=${_DATA_STORE_REGION}{%- elif cookiecutter.datastore_type == "vertex_ai_vector_search" %},VECTOR_SEARCH_INDEX=${_VECTOR_SEARCH_INDEX_STAGING},VECTOR_SEARCH_INDEX_ENDPOINT=${_VECTOR_SEARCH_INDEX_ENDPOINT_STAGING},VECTOR_SEARCH_BUCKET=${_VECTOR_SEARCH_BUCKET_STAGING}{%- endif %}{%- endif %}"
115
116
  env:
116
117
  - 'PATH=/usr/local/bin:/usr/bin:~/.local/bin'