agent-starter-pack 0.10.1__py3-none-any.whl → 0.11.1__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 (50) hide show
  1. {agent_starter_pack-0.10.1.dist-info → agent_starter_pack-0.11.1.dist-info}/METADATA +10 -3
  2. {agent_starter_pack-0.10.1.dist-info → agent_starter_pack-0.11.1.dist-info}/RECORD +43 -49
  3. agents/crewai_coding_crew/.template/templateconfig.yaml +2 -2
  4. agents/crewai_coding_crew/tests/integration/test_agent.py +1 -1
  5. agents/langgraph_base_react/.template/templateconfig.yaml +1 -1
  6. agents/langgraph_base_react/tests/integration/test_agent.py +1 -1
  7. src/base_template/deployment/terraform/dev/iam.tf +12 -11
  8. src/base_template/deployment/terraform/dev/variables.tf +2 -7
  9. src/base_template/deployment/terraform/github.tf +14 -0
  10. src/base_template/deployment/terraform/iam.tf +10 -7
  11. src/base_template/deployment/terraform/service_accounts.tf +4 -5
  12. src/base_template/deployment/terraform/variables.tf +2 -7
  13. src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %} +4 -2
  14. src/base_template/pyproject.toml +2 -2
  15. src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +3 -0
  16. src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +1 -0
  17. src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml +1 -0
  18. src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +1 -0
  19. src/cli/commands/create.py +202 -100
  20. src/cli/commands/enhance.py +302 -0
  21. src/cli/commands/list.py +23 -11
  22. src/cli/main.py +2 -0
  23. src/cli/utils/logging.py +40 -0
  24. src/cli/utils/remote_template.py +55 -16
  25. src/cli/utils/template.py +212 -94
  26. src/deployment_targets/agent_engine/app/agent_engine_app.py +8 -0
  27. src/deployment_targets/cloud_run/app/server.py +1 -1
  28. src/deployment_targets/cloud_run/deployment/terraform/dev/service.tf +1 -1
  29. src/deployment_targets/cloud_run/deployment/terraform/service.tf +2 -2
  30. src/resources/locks/uv-adk_base-agent_engine.lock +312 -312
  31. src/resources/locks/uv-adk_base-cloud_run.lock +403 -404
  32. src/resources/locks/uv-adk_gemini_fullstack-agent_engine.lock +312 -312
  33. src/resources/locks/uv-adk_gemini_fullstack-cloud_run.lock +403 -404
  34. src/resources/locks/uv-agentic_rag-agent_engine.lock +371 -371
  35. src/resources/locks/uv-agentic_rag-cloud_run.lock +477 -478
  36. src/resources/locks/uv-crewai_coding_crew-agent_engine.lock +661 -591
  37. src/resources/locks/uv-crewai_coding_crew-cloud_run.lock +868 -760
  38. src/resources/locks/uv-langgraph_base_react-agent_engine.lock +496 -446
  39. src/resources/locks/uv-langgraph_base_react-cloud_run.lock +639 -565
  40. src/resources/locks/uv-live_api-cloud_run.lock +584 -510
  41. agents/adk_gemini_fullstack/.template/templateconfig.yaml +0 -39
  42. agents/adk_gemini_fullstack/README.md +0 -27
  43. agents/adk_gemini_fullstack/app/agent.py +0 -412
  44. agents/adk_gemini_fullstack/app/config.py +0 -46
  45. agents/adk_gemini_fullstack/notebooks/adk_app_testing.ipynb +0 -355
  46. agents/adk_gemini_fullstack/notebooks/evaluating_adk_agent.ipynb +0 -1528
  47. agents/adk_gemini_fullstack/tests/integration/test_agent.py +0 -58
  48. {agent_starter_pack-0.10.1.dist-info → agent_starter_pack-0.11.1.dist-info}/WHEEL +0 -0
  49. {agent_starter_pack-0.10.1.dist-info → agent_starter_pack-0.11.1.dist-info}/entry_points.txt +0 -0
  50. {agent_starter_pack-0.10.1.dist-info → agent_starter_pack-0.11.1.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.1
3
+ Version: 0.11.1
4
4
  Summary: CLI to bootstrap production-ready Google Cloud GenAI agent projects from templates.
5
5
  Author-email: Google LLC <agent-starter-pack@google.com>
6
6
  License: Apache-2.0
@@ -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 |
@@ -75,6 +75,14 @@ This command handles creating the project without needing to pre-install the pac
75
75
 
76
76
  **That's it!** You now have a fully functional agent project—complete with backend, frontend, and deployment infrastructure—ready for you to explore and customize.
77
77
 
78
+ ### 🔧 Enhance Existing Agents
79
+
80
+ Already have an agent? Add production-ready deployment and infrastructure:
81
+
82
+ ```bash
83
+ agent-starter-pack enhance my-existing-agent
84
+ ```
85
+
78
86
  See [Installation Guide](https://googlecloudplatform.github.io/agent-starter-pack/guide/installation) for more options, or try with zero setup in [Firebase Studio](https://studio.firebase.google.com/new?template=https%3A%2F%2Fgithub.com%2FGoogleCloudPlatform%2Fagent-starter-pack%2Ftree%2Fmain%2Fsrc%2Fresources%2Fidx) or [Cloud Shell](https://shell.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Feliasecchig%2Fasp-open-in-cloud-shell&cloudshell_print=open-in-cs).
79
87
 
80
88
  ---
@@ -84,7 +92,6 @@ See [Installation Guide](https://googlecloudplatform.github.io/agent-starter-pac
84
92
  | Agent Name | Description |
85
93
  |-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
86
94
  | `adk_base` | A base ReAct agent implemented using Google's [Agent Development Kit](https://github.com/google/adk-python) |
87
- | `adk_gemini_fullstack` | A production-ready fullstack research agent with Gemini that demonstrates complex agentic workflows, modular agent design, and Human-in-the-Loop steps. [ADK Samples](https://github.com/google/adk-samples/tree/main/python/agents/gemini-fullstack) |
88
95
  | `agentic_rag` | A RAG agent for document retrieval and Q&A. Supporting [Vertex AI Search](https://cloud.google.com/generative-ai-app-builder/docs/enterprise-search-introduction) and [Vector Search](https://cloud.google.com/vertex-ai/docs/vector-search/overview). |
89
96
  | `langgraph_base_react` | An agent implementing a base ReAct agent using LangGraph |
90
97
  | `crewai_coding_crew` | A multi-agent system implemented with CrewAI created to support coding activities |
@@ -5,13 +5,6 @@ agents/adk_base/app/agent.py,sha256=6Q6QegQDxEaAck989DPIb3ArHMZtw_YJBqhHFqg-UjQ,
5
5
  agents/adk_base/notebooks/adk_app_testing.ipynb,sha256=wgFzBo7hX393NVzy3ZfZHncs1ptiQbM_8he3XxJu4yM,9763
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
- agents/adk_gemini_fullstack/README.md,sha256=yQFFcESALj5Q6eweyIyPx__U74obUM88aCBJYNV2UWs,1674
9
- agents/adk_gemini_fullstack/.template/templateconfig.yaml,sha256=BFlIFsm1g0xmIg4g0jkQ8MpW_EJPRXi4gPYjgIIsAEg,1745
10
- agents/adk_gemini_fullstack/app/agent.py,sha256=NXOkYFxDccJaSq55CTS-UYY8z5-WgBZqexII0Ybzk9c,22662
11
- agents/adk_gemini_fullstack/app/config.py,sha256=x--axECPKWW3oLANKz2_4zzHEBIU7if8iYNZRjlTNV0,1563
12
- agents/adk_gemini_fullstack/notebooks/adk_app_testing.ipynb,sha256=wgFzBo7hX393NVzy3ZfZHncs1ptiQbM_8he3XxJu4yM,9763
13
- agents/adk_gemini_fullstack/notebooks/evaluating_adk_agent.ipynb,sha256=OMTiT3gAFWPvE9pPL8z7tsDwOU-l8wem5wH-OXPPlvk,56805
14
- agents/adk_gemini_fullstack/tests/integration/test_agent.py,sha256=VypgpEWrQegJBgc58V-BlIsbqh-Hii-hwmkwcz5feFw,1969
15
8
  agents/agentic_rag/README.md,sha256=cPeY_XGt79ava22PIM0x92oi67R-TnlEKBQGpK1MOkA,2262
16
9
  agents/agentic_rag/.template/templateconfig.yaml,sha256=Gfw3FOjj3XNxoXn6WGwC2PG59f4qB3p2cYTQ49ykvJc,1248
17
10
  agents/agentic_rag/app/agent.py,sha256=tKtzez7vGu6JgMWmZN7QrKkyLBvHu1ondAuICjKoC-g,3983
@@ -21,19 +14,19 @@ agents/agentic_rag/notebooks/adk_app_testing.ipynb,sha256=wgFzBo7hX393NVzy3ZfZHn
21
14
  agents/agentic_rag/notebooks/evaluating_adk_agent.ipynb,sha256=OMTiT3gAFWPvE9pPL8z7tsDwOU-l8wem5wH-OXPPlvk,56805
22
15
  agents/agentic_rag/tests/integration/test_agent.py,sha256=mxsKFyZrwXzIvAoxlqZv2JndM3VTVTKcugRYdF3APr4,2112
23
16
  agents/crewai_coding_crew/README.md,sha256=4No7sfHQVHELARGiT3fWANJzDR0NP48ow4ct3FoPwlA,1672
24
- agents/crewai_coding_crew/.template/templateconfig.yaml,sha256=q2KH2Hkq7MkGkVup9pIj2E3tosy7paQW2WiEHA2Qw_Y,1051
17
+ agents/crewai_coding_crew/.template/templateconfig.yaml,sha256=WjsvXcih4zqrhV0pX_3eH7PZIf3H1KHdcUAaD2n5I6U,1051
25
18
  agents/crewai_coding_crew/app/agent.py,sha256=yd-P2Jzx3Do4FQuhwDsok-YRNYFi9Vl8OTqSlbdn4Sw,3260
26
19
  agents/crewai_coding_crew/app/crew/crew.py,sha256=pqeeJ4txP-gcVT3PKEAw2zZ4x8g4cDlnFFbf0_zZRr4,2000
27
20
  agents/crewai_coding_crew/app/crew/config/agents.yaml,sha256=Cn9zTcP3C-8MvlV19cYdlxR0iIs2_FOy2gKOJLUpNRo,1154
28
21
  agents/crewai_coding_crew/app/crew/config/tasks.yaml,sha256=SSFuiSQPhi4dM0V5HdNuMqtN7JJr5RUCMhhBzUkPBpc,1511
29
22
  agents/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb,sha256=ifTn4RfrJeYQ8ell9n6VE65ZEfcnKGkMLFG8RBlPK70,57974
30
23
  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
24
+ agents/crewai_coding_crew/tests/integration/test_agent.py,sha256=hg6kqtVPtyCLmQkNr45JPM91VwmScco7-f_mXq_YBJw,1611
32
25
  agents/langgraph_base_react/README.md,sha256=KZQ0e8q9CqnIEiItH9Tc2Ceb2mC3sBcyQUo-ZAmO-zs,482
33
- agents/langgraph_base_react/.template/templateconfig.yaml,sha256=jHh3WDNT70KMbA2zy3Da_J_jIWeGfeiqIKfUs5B8OBk,1049
26
+ agents/langgraph_base_react/.template/templateconfig.yaml,sha256=58k6Lhkn_3mYOmUMFFQ_mMq6Df4LerCZVju9uM2RDuQ,1049
34
27
  agents/langgraph_base_react/app/agent.py,sha256=yzCc5JaOJgItoBiZOzHPiSy9aD2HGeGI_pH7nrysSmg,2505
35
28
  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
29
+ agents/langgraph_base_react/tests/integration/test_agent.py,sha256=5aFkYL6XcnlihoDOpGhb49inK20Ljvx1tzhdwTS-1y4,1601
37
30
  agents/live_api/README.md,sha256=c3lu5WguOUBc5hO_UtNZfVhfYxvSzMXuGFICn9M38mU,2897
38
31
  agents/live_api/.template/templateconfig.yaml,sha256=DD_hihMsuqmd5VWS18vVGZ3ZGVVpFWVXJ2dU07eKb6k,964
39
32
  agents/live_api/app/agent.py,sha256=dYE2qd64OhL-fOgwzrjqN50LYXAgJ1TWbx6ohqtV5Rc,2434
@@ -46,49 +39,50 @@ src/base_template/.gitignore,sha256=Fq0w34x4sfbwP4RqDqh6hdHNYRUEsFNI-9XONzLWBIs,
46
39
  src/base_template/GEMINI.md,sha256=WzscHWlQeYkKORZ-453P8KM9IHuj1kAxW-69c7Ytuwk,133
47
40
  src/base_template/Makefile,sha256=Evt9HcJGBhyoYdVxj5AdfHsQ_vVnbh-g2IlUxM4PFP4,6149
48
41
  src/base_template/README.md,sha256=3okWVHq8Mnm9WwaLR88O9pUq3zUO8fmHilK7ulWHrB4,11342
49
- src/base_template/pyproject.toml,sha256=TEu9_gZT9tRuV6x8CcVIpC4Lcetbr0mHMPcJAab0aq4,2874
42
+ src/base_template/pyproject.toml,sha256=Ow_R0OhPbaACmJ9bgXqu703Q-tCL8FZhfyJ1xVwhveU,2874
50
43
  src/base_template/app/__init__.py,sha256=UyAgc2l8nkVIUPUzL9hKR7EgzCsc2jSYcOcjHNNmpMU,59
51
44
  src/base_template/app/utils/gcs.py,sha256=jKblaWOGQEigw3esaawcfX178shhZi2Fyk0fJSA4T68,1501
52
45
  src/base_template/app/utils/tracing.py,sha256=2rv1Ukh2jTBENDwoghCItJ28l-Sjz9gMlzdojlVgJa4,6052
53
46
  src/base_template/app/utils/typing.py,sha256=DP5OZC3IGvqA1XbvWt8kI3gyAK3ZjzUSL5Ca17wNeLI,4249
54
47
  src/base_template/deployment/README.md,sha256=gZJvSWdQh_Mi-bZ3dmuPv7fMezIw04fgN5tq7KgglPw,692
55
48
  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
49
+ src/base_template/deployment/terraform/github.tf,sha256=KhfNBAzeUH9jDr8FOw_DiypesA5AEC8IZT1PRqntSt8,10838
50
+ src/base_template/deployment/terraform/iam.tf,sha256=1u0qY-4srkhRirRI9kuQE0GAAYBeP5cTztA-w2N4FH8,5657
58
51
  src/base_template/deployment/terraform/locals.tf,sha256=nvjlavqWRL6e-iIqfIRvsai5JY9l6KhRGcwJQFRdu_U,1653
59
52
  src/base_template/deployment/terraform/log_sinks.tf,sha256=eAGh_dCjOKUQjylkqp1fNM9cfE4QB9HSEovjD6_G9Lg,2971
60
53
  src/base_template/deployment/terraform/providers.tf,sha256=wNWvXJbpvV3njDYO8t4s6DdDkL0dQpWgkPsmJw61ABM,1167
61
- src/base_template/deployment/terraform/service_accounts.tf,sha256=KsM9g0dlXmO6-Hokzz09HP1oO3crc8uLJj_Z45d8fe0,1713
54
+ src/base_template/deployment/terraform/service_accounts.tf,sha256=iSRrRzxL16pZHel5cZDzC7m15IRTRv8qMxkcg4nd30o,1672
62
55
  src/base_template/deployment/terraform/storage.tf,sha256=W0l34U7Ql2wdegfWsWfKzaEooaMaTL2TkU18KM_Vuys,8695
63
- src/base_template/deployment/terraform/variables.tf,sha256=fyaif0z9hgmeEd581L6ilU-WZbjAoWynbmh6Bv48zpk,6981
56
+ src/base_template/deployment/terraform/variables.tf,sha256=RudiaEVsIrRSCIHDMWs857gMghenUeZR5g_34kDuoXY,6733
64
57
  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
58
+ 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
59
  src/base_template/deployment/terraform/dev/apis.tf,sha256=R5fyLQGHsZy7JyDdFpuNzUBute6Rn9xR32zIMjkGxzc,1592
67
- src/base_template/deployment/terraform/dev/iam.tf,sha256=ZHFs4TMvq6mqD90n8ecXndzW3pyu4EbZO4iJis88BH0,3394
60
+ src/base_template/deployment/terraform/dev/iam.tf,sha256=q8dfqbMNSpgMXW96hP7rnApFoNaAUzZgUXs5HIl7ZFI,3329
68
61
  src/base_template/deployment/terraform/dev/log_sinks.tf,sha256=uVdMtDdd8MnxtKhqzVaYqadE11P3r4fs2IdgNecxM4I,2671
69
62
  src/base_template/deployment/terraform/dev/providers.tf,sha256=1S9jCh48d6ailVZ1e14EHsUUDSp7DyGZGExJwViFCkM,900
70
63
  src/base_template/deployment/terraform/dev/storage.tf,sha256=1mgLs21SUhfcoRICqd7BqUlEVAVGeN3kMsQ4UAQLOh8,4654
71
- src/base_template/deployment/terraform/dev/variables.tf,sha256=7uQeqzN6IR14h1iThXf-3M1pbWKpKxCddDs78r49yuo,4324
64
+ src/base_template/deployment/terraform/dev/variables.tf,sha256=JMo3BQ57t8OTRiNUb9cz1zoWYCOMMhi67Hx0UZ_kZko,4072
72
65
  src/base_template/deployment/terraform/dev/vars/env.tfvars,sha256=LoQMjh1AAMR-MGfaSCsVMjdoYTk2T4oS4D9vMH54CdQ,714
73
66
  src/base_template/deployment/terraform/vars/env.tfvars,sha256=Jyc36pt-0xNMwQsoXucad0QAWFMeGe67fdimCKXx-tw,1411
74
67
  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
68
+ src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml,sha256=I9uwH0mpuQQU3wbqaniWMb37UPEUnbY4o1YhRJ5egM8,5739
76
69
  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
70
+ src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml,sha256=fYX-IBKHD-gSoFNLpAJUM0v2okL32AbMTn-eJpstSqU,8494
71
+ src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml,sha256=Zv3oE3YC8P2iYJ2_ie1PPo0HjNLxiMkY3IwJrS0bFcM,3703
79
72
  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=ncmCZK-7TXVarLvEVghXL04NyV5rdtJRW1G_Njm_T-E,40636
83
- src/cli/commands/list.py,sha256=xlH7w_c_CO2XiFrYyDeBCE_JkUY3f3g4o0HbBIl5fqE,5056
73
+ src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml,sha256=Spy8ziGCHUtY5hqSIiIDTTywjmSoUw8N1YlwGo0aL04,7367
74
+ src/cli/main.py,sha256=Dya7Sw3ozMTaGDcwMh_-W7udkGZHGzgAj8aBdSZaZxI,1832
75
+ src/cli/commands/create.py,sha256=mUFukCCpuFV6bgS-JmQEZ6D-zB-_ddxmTMeuygrhogI,43876
76
+ src/cli/commands/enhance.py,sha256=KcSLRmhNDxbQa_XoJqcXtC16enyx8FWq20bkpmLSpyQ,11370
77
+ src/cli/commands/list.py,sha256=qey_XDoJkjBvvuVMilFqjMUdBRmbHkSyqGeM23E3xHM,5502
84
78
  src/cli/commands/setup_cicd.py,sha256=ZgpMrYHXg3B_u5h5PxvVuC4T7Q2uQTYMNMwBBOlcKmg,32250
85
79
  src/cli/utils/__init__.py,sha256=_cTmsXGPqOtK0q8UW5164QTltbJRJFR_Efxq_BRL1-o,1311
86
80
  src/cli/utils/cicd.py,sha256=9s_OcusQznT_pSjFP60BfDBoZ5V6bwPE0QWbWdMaVlY,26515
87
81
  src/cli/utils/datastores.py,sha256=gv1V6eDcOEKx4MRNG5C3Y-VfixYq1AzQuaYMLp8QRNo,1058
88
82
  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
83
+ src/cli/utils/logging.py,sha256=MYPxQYXXaKCqBVOfrhEMe8lFKzpzZWjOVP2Km81X5Mk,3007
84
+ src/cli/utils/remote_template.py,sha256=1o3MloLycoO3Mjm_SA6cXc4dFGtvF9c1CNnnThPu-3w,12165
85
+ src/cli/utils/template.py,sha256=_rAaQxxETT7ucJAwbGoZVSF8mN7iDXCr1iNpMS08h8k,42649
92
86
  src/cli/utils/version.py,sha256=F4udQmzniPStqWZFIgnv3Qg3l9non4mfy2An-Oveqmc,2916
93
87
  src/data_ingestion/README.md,sha256=LNxSQoJW9JozK-TbyGQLj5L_MGWNwrfLk6V6RmQ2oBQ,4032
94
88
  src/data_ingestion/pyproject.toml,sha256=-1Mf2QB8K70ICQV5UPZDpf-fN3UwEQLVzQyxfakCSTY,445
@@ -98,16 +92,16 @@ src/data_ingestion/data_ingestion_pipeline/submit_pipeline.py,sha256=tWGqL0zUB3V
98
92
  src/data_ingestion/data_ingestion_pipeline/components/ingest_data.py,sha256=QbPmk6V7JPGo5Yc1BhL-1W_t9CXEN0iY5NKaGWlfSbM,10667
99
93
  src/data_ingestion/data_ingestion_pipeline/components/process_data.py,sha256=8vubxkykRpx-d89H1XYGO3yXz4hxhihhGDgDR3s-XZ4,22045
100
94
  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
95
+ src/deployment_targets/agent_engine/app/agent_engine_app.py,sha256=NKwghQ2vMai3bx0XDjrNve6pNDMAPjZ7zPjksoPapKM,12507
102
96
  src/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb,sha256=RE6Gp-bu4bHtNBngfkt_CF5emy5YcOWQ5rMYW_Cv8_w,48809
103
97
  src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py,sha256=3mEHdnenqT1RrQpndnQWZSMnn8kSLH85rPDhbxH6_lk,5978
104
98
  src/deployment_targets/agent_engine/tests/load_test/README.md,sha256=aQP7nDAqd2jKBET4noI39HC9PVHpgpned7cxucWpVJo,1302
105
99
  src/deployment_targets/agent_engine/tests/load_test/load_test.py,sha256=USzS89bQ4qHVoQynDRSRShKzeXf1MJ0MBV4FpV40vrI,4249
106
100
  src/deployment_targets/agent_engine/tests/load_test/.results/.placeholder,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
101
  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
102
+ src/deployment_targets/cloud_run/app/server.py,sha256=57S0SyDskDQnj6sMGx4ain-K2YVSCGplr4zp4mSlRPk,6656
103
+ src/deployment_targets/cloud_run/deployment/terraform/service.tf,sha256=w3iEnyScbO0sjLPQEYfs3GmPpHTUMGeG1ghi09wSY24,10322
104
+ src/deployment_targets/cloud_run/deployment/terraform/dev/service.tf,sha256=VegAzMcl2ohxMvtq6bcSXfCHYzQW68usyA839oULpgk,6581
111
105
  src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py,sha256=6gtRbCxlrsnvHdOFq8c_B_xowo49CJxThUeVjtQdTew,9238
112
106
  src/deployment_targets/cloud_run/tests/load_test/README.md,sha256=k-PBN6HE9wgSRFb81sSiXA8h5Li6KYyIUSwDj6yntHU,2740
113
107
  src/deployment_targets/cloud_run/tests/load_test/load_test.py,sha256=eVhqX8GtiDsIuZxMJAF2ivXML0xHDWDbriYsHZjAQZE,4212
@@ -189,22 +183,22 @@ src/resources/docs/adk-cheatsheet.md,sha256=C3xb_dEWWp7iROLRVb0iTBGmJ9uAbreF1j6V
189
183
  src/resources/idx/idx-template.json,sha256=07OQZCPp45Iqor2O7Tm1e1Gmsdd-AmmUofSvA7y-oRs,793
190
184
  src/resources/idx/idx-template.nix,sha256=sesHGev_PYtVDg0J5tHkg0OO7IR1Bz2iAtl_if3Ar3M,892
191
185
  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
186
+ src/resources/locks/uv-adk_base-agent_engine.lock,sha256=XRegoR8TO1MDfCWQzjoBK9CuaC8wdUCs6cWet6c1J40,486277
187
+ src/resources/locks/uv-adk_base-cloud_run.lock,sha256=RowuQWgvz2W-sMG1hSp1QCswn2POYmGKCAln_aY2tpI,640556
188
+ src/resources/locks/uv-adk_gemini_fullstack-agent_engine.lock,sha256=XRegoR8TO1MDfCWQzjoBK9CuaC8wdUCs6cWet6c1J40,486277
189
+ src/resources/locks/uv-adk_gemini_fullstack-cloud_run.lock,sha256=RowuQWgvz2W-sMG1hSp1QCswn2POYmGKCAln_aY2tpI,640556
190
+ src/resources/locks/uv-agentic_rag-agent_engine.lock,sha256=grapMSoXHRsI9HFBz2M1XQ5eicwNvd1vf1ay2oaj_-o,544169
191
+ src/resources/locks/uv-agentic_rag-cloud_run.lock,sha256=rhRWMB1SXniMFjT0p0yBrVskyDvZDxjWEtHlGJji0vs,718129
192
+ src/resources/locks/uv-crewai_coding_crew-agent_engine.lock,sha256=mmZGeSNBAG3QJEeHbFFaXGh4vvhs2NNCce3kx-E55Lo,814252
193
+ src/resources/locks/uv-crewai_coding_crew-cloud_run.lock,sha256=xX1Wh5CfY0T_m5DNUrQjB9NlU4M9pOw08Vost0iWGB0,1071769
194
+ src/resources/locks/uv-langgraph_base_react-agent_engine.lock,sha256=pItAia1C5B6aKU7eewW7ktqnLx60qK49g7CJOA08HEM,694504
195
+ src/resources/locks/uv-langgraph_base_react-cloud_run.lock,sha256=3LUeFAOXbNpLZBdxSBY21DxXUDLkIBIJAFV2GyO6w18,918987
196
+ src/resources/locks/uv-live_api-cloud_run.lock,sha256=xOPEAiyHooNT2nMP1wbnJ2ekODdI5H0lM8h_byau1Xg,839570
203
197
  src/utils/generate_locks.py,sha256=6V1B8V2BEuevWnXUsxZVTrLjXwFRII8UfsIGrQqZxVs,4320
204
198
  src/utils/lock_utils.py,sha256=IFOMUWtb-ypm2Y8w8J5y2oI_-MaPuwPF_JOAAlnNudA,2275
205
199
  src/utils/watch_and_rebuild.py,sha256=vP4yIiA7E_lj5sfQdJUl8TXas6V7msDg8XWUutAC05Q,6679
206
- agent_starter_pack-0.10.1.dist-info/METADATA,sha256=QbvavFC32O7Dp8I7cpoSyxqZinagz4a8FJ7g3wFaVlw,11178
207
- agent_starter_pack-0.10.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
208
- agent_starter_pack-0.10.1.dist-info/entry_points.txt,sha256=U7uCxR7YulIhZ0L8R8Hui0Bsy6J7oyESBeDYJYMrQjA,56
209
- agent_starter_pack-0.10.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
210
- agent_starter_pack-0.10.1.dist-info/RECORD,,
200
+ agent_starter_pack-0.11.1.dist-info/METADATA,sha256=fdeIAa2Bx6sAKcoy4p0qgFdbvVoZ5TRd-v9HGhzjUYE,11102
201
+ agent_starter_pack-0.11.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
202
+ agent_starter_pack-0.11.1.dist-info/entry_points.txt,sha256=U7uCxR7YulIhZ0L8R8Hui0Bsy6J7oyESBeDYJYMrQjA,56
203
+ agent_starter_pack-0.11.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
204
+ agent_starter_pack-0.11.1.dist-info/RECORD,,
@@ -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
 
@@ -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' %}
@@ -64,10 +64,12 @@ jobs:
64
64
  uses: 'google-github-actions/setup-gcloud@v2'
65
65
  {%- endif %}
66
66
 
67
+ {%- if cookiecutter.deployment_target == 'agent_engine' %}
67
68
  - name: Install uv and dependencies
68
69
  run: |
69
70
  pip install uv==0.6.12
70
71
  uv sync --locked
72
+ {%- endif %}
71
73
 
72
74
  {%- if cookiecutter.data_ingestion %}
73
75
  - name: Deploy data ingestion pipeline (Production)
@@ -109,6 +111,7 @@ jobs:
109
111
  uv run app/agent_engine_app.py \
110
112
  --project {% raw %}${{ vars.PROD_PROJECT_ID }}{% endraw %} \
111
113
  --location {% raw %}${{ vars.REGION }}{% endraw %} \
114
+ --service-account {% raw %}${{ vars.APP_SA_EMAIL_PROD }}{% endraw %} \
112
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 %}"
113
116
  {%- endif %}
114
117
 
@@ -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'