agent-starter-pack 0.11.2__py3-none-any.whl → 0.12.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.
- {agent_starter_pack-0.11.2.dist-info → agent_starter_pack-0.12.0.dist-info}/METADATA +1 -1
- {agent_starter_pack-0.11.2.dist-info → agent_starter_pack-0.12.0.dist-info}/RECORD +41 -66
- agents/adk_base/app/__init__.py +17 -0
- agents/adk_base/notebooks/adk_app_testing.ipynb +4 -1
- agents/adk_base/tests/integration/test_agent.py +1 -1
- agents/agentic_rag/app/__init__.py +17 -0
- agents/agentic_rag/app/agent.py +2 -2
- agents/agentic_rag/notebooks/adk_app_testing.ipynb +4 -1
- agents/agentic_rag/tests/integration/test_agent.py +2 -2
- agents/crewai_coding_crew/tests/integration/test_agent.py +1 -1
- agents/langgraph_base_react/tests/integration/test_agent.py +1 -1
- agents/live_api/tests/unit/test_server.py +6 -6
- llm.txt +15 -4
- src/base_template/Makefile +5 -5
- src/base_template/README.md +4 -4
- src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %} +2 -2
- src/base_template/pyproject.toml +2 -2
- src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +1 -1
- src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml +1 -1
- src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +2 -2
- src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml +1 -1
- src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +1 -1
- src/cli/commands/create.py +25 -2
- src/cli/commands/enhance.py +94 -15
- src/cli/commands/list.py +1 -1
- src/cli/utils/remote_template.py +1 -1
- src/cli/utils/template.py +120 -41
- src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +3 -3
- src/deployment_targets/agent_engine/{app → {{cookiecutter.agent_directory}}}/agent_engine_app.py +10 -10
- src/deployment_targets/cloud_run/Dockerfile +2 -2
- src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +3 -3
- src/deployment_targets/cloud_run/tests/load_test/README.md +1 -1
- src/deployment_targets/cloud_run/tests/load_test/load_test.py +2 -2
- {agents/live_api/app → src/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}}/server.py +186 -7
- src/resources/docs/adk-cheatsheet.md +3 -3
- src/base_template/app/__init__.py +0 -3
- src/deployment_targets/cloud_run/app/server.py +0 -206
- src/frontends/adk_gemini_fullstack/frontend/components.json +0 -21
- src/frontends/adk_gemini_fullstack/frontend/eslint.config.js +0 -28
- src/frontends/adk_gemini_fullstack/frontend/index.html +0 -12
- src/frontends/adk_gemini_fullstack/frontend/package-lock.json +0 -6105
- src/frontends/adk_gemini_fullstack/frontend/package.json +0 -47
- src/frontends/adk_gemini_fullstack/frontend/src/App.tsx +0 -564
- src/frontends/adk_gemini_fullstack/frontend/src/components/ActivityTimeline.tsx +0 -244
- src/frontends/adk_gemini_fullstack/frontend/src/components/ChatMessagesView.tsx +0 -420
- src/frontends/adk_gemini_fullstack/frontend/src/components/InputForm.tsx +0 -60
- src/frontends/adk_gemini_fullstack/frontend/src/components/WelcomeScreen.tsx +0 -56
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/badge.tsx +0 -46
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/button.tsx +0 -59
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/card.tsx +0 -92
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/input.tsx +0 -21
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/scroll-area.tsx +0 -56
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/select.tsx +0 -183
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/tabs.tsx +0 -64
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/textarea.tsx +0 -18
- src/frontends/adk_gemini_fullstack/frontend/src/global.css +0 -154
- src/frontends/adk_gemini_fullstack/frontend/src/main.tsx +0 -13
- src/frontends/adk_gemini_fullstack/frontend/src/utils.ts +0 -7
- src/frontends/adk_gemini_fullstack/frontend/src/vite-env.d.ts +0 -1
- src/frontends/adk_gemini_fullstack/frontend/tsconfig.json +0 -28
- src/frontends/adk_gemini_fullstack/frontend/tsconfig.node.json +0 -24
- src/frontends/adk_gemini_fullstack/frontend/vite.config.ts +0 -41
- {agent_starter_pack-0.11.2.dist-info → agent_starter_pack-0.12.0.dist-info}/WHEEL +0 -0
- {agent_starter_pack-0.11.2.dist-info → agent_starter_pack-0.12.0.dist-info}/entry_points.txt +0 -0
- {agent_starter_pack-0.11.2.dist-info → agent_starter_pack-0.12.0.dist-info}/licenses/LICENSE +0 -0
- /src/base_template/{app → {{cookiecutter.agent_directory}}}/utils/gcs.py +0 -0
- /src/base_template/{app → {{cookiecutter.agent_directory}}}/utils/tracing.py +0 -0
- /src/base_template/{app → {{cookiecutter.agent_directory}}}/utils/typing.py +0 -0
@@ -1,18 +1,20 @@
|
|
1
1
|
agents/README.md,sha256=L8__lIXXjxLTZbkCmTC4taTFUMRVrO3QI2mCKZTdhJM,462
|
2
2
|
agents/adk_base/README.md,sha256=eLf-F9Z4u_mQOchAnUaSrOAHXRSx8wUQN29kkwz1SF4,894
|
3
3
|
agents/adk_base/.template/templateconfig.yaml,sha256=8mQ_IIgC0h4eiTUM7FEIPSxwI73aenspcHsnqUb4AfY,923
|
4
|
+
agents/adk_base/app/__init__.py,sha256=wT1TtenBOdA4LTtf6mQjvAT5aRR1N2PCx_A-MrDLGsg,631
|
4
5
|
agents/adk_base/app/agent.py,sha256=6Q6QegQDxEaAck989DPIb3ArHMZtw_YJBqhHFqg-UjQ,2182
|
5
|
-
agents/adk_base/notebooks/adk_app_testing.ipynb,sha256=
|
6
|
+
agents/adk_base/notebooks/adk_app_testing.ipynb,sha256=WFyizTOhbIgTPgQ115WTQaH9qNkozTESsNmxLYUb3JY,10003
|
6
7
|
agents/adk_base/notebooks/evaluating_adk_agent.ipynb,sha256=OMTiT3gAFWPvE9pPL8z7tsDwOU-l8wem5wH-OXPPlvk,56805
|
7
|
-
agents/adk_base/tests/integration/test_agent.py,sha256=
|
8
|
+
agents/adk_base/tests/integration/test_agent.py,sha256=_zb3GMWMtMRq2rOyYC-uL1eNhpg2XBkm8Noj0O_UOng,1998
|
8
9
|
agents/agentic_rag/README.md,sha256=cPeY_XGt79ava22PIM0x92oi67R-TnlEKBQGpK1MOkA,2262
|
9
10
|
agents/agentic_rag/.template/templateconfig.yaml,sha256=Gfw3FOjj3XNxoXn6WGwC2PG59f4qB3p2cYTQ49ykvJc,1248
|
10
|
-
agents/agentic_rag/app/
|
11
|
+
agents/agentic_rag/app/__init__.py,sha256=wT1TtenBOdA4LTtf6mQjvAT5aRR1N2PCx_A-MrDLGsg,631
|
12
|
+
agents/agentic_rag/app/agent.py,sha256=joSAfrVcS9eRtOT3MXPSoiwElpwVq-hjpCHkqTj6vuM,4041
|
11
13
|
agents/agentic_rag/app/retrievers.py,sha256=qfxwSEixMddvAu4FvUTZAFh1Gdp3RPY65s0Wp6gEFVk,4561
|
12
14
|
agents/agentic_rag/app/templates.py,sha256=8N_uRchwiN7hlH9Y8rdJ1CAtOhpHUWZkXZZ7IU-YJJk,867
|
13
|
-
agents/agentic_rag/notebooks/adk_app_testing.ipynb,sha256=
|
15
|
+
agents/agentic_rag/notebooks/adk_app_testing.ipynb,sha256=WFyizTOhbIgTPgQ115WTQaH9qNkozTESsNmxLYUb3JY,10003
|
14
16
|
agents/agentic_rag/notebooks/evaluating_adk_agent.ipynb,sha256=OMTiT3gAFWPvE9pPL8z7tsDwOU-l8wem5wH-OXPPlvk,56805
|
15
|
-
agents/agentic_rag/tests/integration/test_agent.py,sha256=
|
17
|
+
agents/agentic_rag/tests/integration/test_agent.py,sha256=YcwOZXa9uJqcqZN8UPikNm_dlSh9XduEfcuQa0wkby8,2170
|
16
18
|
agents/crewai_coding_crew/README.md,sha256=4No7sfHQVHELARGiT3fWANJzDR0NP48ow4ct3FoPwlA,1672
|
17
19
|
agents/crewai_coding_crew/.template/templateconfig.yaml,sha256=WjsvXcih4zqrhV0pX_3eH7PZIf3H1KHdcUAaD2n5I6U,1051
|
18
20
|
agents/crewai_coding_crew/app/agent.py,sha256=yd-P2Jzx3Do4FQuhwDsok-YRNYFi9Vl8OTqSlbdn4Sw,3260
|
@@ -21,29 +23,24 @@ agents/crewai_coding_crew/app/crew/config/agents.yaml,sha256=Cn9zTcP3C-8MvlV19cY
|
|
21
23
|
agents/crewai_coding_crew/app/crew/config/tasks.yaml,sha256=SSFuiSQPhi4dM0V5HdNuMqtN7JJr5RUCMhhBzUkPBpc,1511
|
22
24
|
agents/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb,sha256=ifTn4RfrJeYQ8ell9n6VE65ZEfcnKGkMLFG8RBlPK70,57974
|
23
25
|
agents/crewai_coding_crew/notebooks/evaluating_langgraph_agent.ipynb,sha256=PlW41fL-ji9NKkimW6u25YRLGWN2pgoX2G8w5nzIEPE,58737
|
24
|
-
agents/crewai_coding_crew/tests/integration/test_agent.py,sha256=
|
26
|
+
agents/crewai_coding_crew/tests/integration/test_agent.py,sha256=f4QgY100tXR4D70qaM8blad2cgCfxCZ5RJ2Pv3amDcs,1640
|
25
27
|
agents/langgraph_base_react/README.md,sha256=KZQ0e8q9CqnIEiItH9Tc2Ceb2mC3sBcyQUo-ZAmO-zs,482
|
26
28
|
agents/langgraph_base_react/.template/templateconfig.yaml,sha256=58k6Lhkn_3mYOmUMFFQ_mMq6Df4LerCZVju9uM2RDuQ,1049
|
27
29
|
agents/langgraph_base_react/app/agent.py,sha256=yzCc5JaOJgItoBiZOzHPiSy9aD2HGeGI_pH7nrysSmg,2505
|
28
30
|
agents/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb,sha256=PlW41fL-ji9NKkimW6u25YRLGWN2pgoX2G8w5nzIEPE,58737
|
29
|
-
agents/langgraph_base_react/tests/integration/test_agent.py,sha256=
|
31
|
+
agents/langgraph_base_react/tests/integration/test_agent.py,sha256=xy0A_3eGhxM8A5rc81revMztJN5GtFA-o5-CG5JzeQw,1630
|
30
32
|
agents/live_api/README.md,sha256=c3lu5WguOUBc5hO_UtNZfVhfYxvSzMXuGFICn9M38mU,2897
|
31
33
|
agents/live_api/.template/templateconfig.yaml,sha256=DD_hihMsuqmd5VWS18vVGZ3ZGVVpFWVXJ2dU07eKb6k,964
|
32
34
|
agents/live_api/app/agent.py,sha256=dYE2qd64OhL-fOgwzrjqN50LYXAgJ1TWbx6ohqtV5Rc,2434
|
33
|
-
agents/live_api/app/server.py,sha256=ZXriNDl_zo7WDRBke85lyzMsy66qGzPaRXY1FMy4Fdw,7793
|
34
35
|
agents/live_api/tests/integration/test_server_e2e.py,sha256=SBowHiVj-_Okbk1dqyITFVIG6yvr5BGNrfxHVpO4TFs,8635
|
35
36
|
agents/live_api/tests/load_test/load_test.py,sha256=HHZyfC4gqiQtZVF_CbbxENGgWQccMLpwMv0IdoQ6cbQ,1275
|
36
|
-
agents/live_api/tests/unit/test_server.py,sha256=
|
37
|
-
llm.txt,sha256=
|
37
|
+
agents/live_api/tests/unit/test_server.py,sha256=_tf9nHkb7aOe3lZRlyp7cVklOTOYTuXDTy7Djn_lhik,5003
|
38
|
+
llm.txt,sha256=onvCAhaPcye3YWfCkQeX4Y-LWF1TsAsZ09cO_iO-i3Y,14607
|
38
39
|
src/base_template/.gitignore,sha256=Fq0w34x4sfbwP4RqDqh6hdHNYRUEsFNI-9XONzLWBIs,2580
|
39
40
|
src/base_template/GEMINI.md,sha256=WzscHWlQeYkKORZ-453P8KM9IHuj1kAxW-69c7Ytuwk,133
|
40
|
-
src/base_template/Makefile,sha256=
|
41
|
-
src/base_template/README.md,sha256=
|
42
|
-
src/base_template/pyproject.toml,sha256=
|
43
|
-
src/base_template/app/__init__.py,sha256=UyAgc2l8nkVIUPUzL9hKR7EgzCsc2jSYcOcjHNNmpMU,59
|
44
|
-
src/base_template/app/utils/gcs.py,sha256=jKblaWOGQEigw3esaawcfX178shhZi2Fyk0fJSA4T68,1501
|
45
|
-
src/base_template/app/utils/tracing.py,sha256=2rv1Ukh2jTBENDwoghCItJ28l-Sjz9gMlzdojlVgJa4,6052
|
46
|
-
src/base_template/app/utils/typing.py,sha256=DP5OZC3IGvqA1XbvWt8kI3gyAK3ZjzUSL5Ca17wNeLI,4249
|
41
|
+
src/base_template/Makefile,sha256=tUPxvZI-XyAs2cXa3L3aTh3DFkwUBYkF5BOGs0DtvIk,6267
|
42
|
+
src/base_template/README.md,sha256=KkHKYpnkU7gzfvzyULlTyt7gUxkf1IcK7Y4ydceLVzc,11458
|
43
|
+
src/base_template/pyproject.toml,sha256=dTyxaWetB-XCKQEDV3lXxAUxtBEpustNdlAEcT8ZZpo,2932
|
47
44
|
src/base_template/deployment/README.md,sha256=gZJvSWdQh_Mi-bZ3dmuPv7fMezIw04fgN5tq7KgglPw,692
|
48
45
|
src/base_template/deployment/terraform/apis.tf,sha256=KX8Oe2gjT-gh9Bkntz9yIAyRjPc1gZvwOhroJ6NZVp4,1513
|
49
46
|
src/base_template/deployment/terraform/github.tf,sha256=KhfNBAzeUH9jDr8FOw_DiypesA5AEC8IZT1PRqntSt8,10838
|
@@ -55,7 +52,7 @@ src/base_template/deployment/terraform/service_accounts.tf,sha256=iSRrRzxL16pZHe
|
|
55
52
|
src/base_template/deployment/terraform/storage.tf,sha256=W0l34U7Ql2wdegfWsWfKzaEooaMaTL2TkU18KM_Vuys,8695
|
56
53
|
src/base_template/deployment/terraform/variables.tf,sha256=JD-lvsVYSgE0pR15ZJhmNAn2SAWo5CNDCofXGNVJy1o,6749
|
57
54
|
src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'github_actions' %}wif.tf{% else %}unused_wif.tf{% endif %},sha256=rCupUnvaTVj75ahJOckNuzlQ-xcLTik_HpqXzVEEB5g,2666
|
58
|
-
src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %},sha256=
|
55
|
+
src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %},sha256=e-9vA6hpS-vsq9ttZZj2mUASPAcUFJB7b-PrUW4G96M,6871
|
59
56
|
src/base_template/deployment/terraform/dev/apis.tf,sha256=R5fyLQGHsZy7JyDdFpuNzUBute6Rn9xR32zIMjkGxzc,1592
|
60
57
|
src/base_template/deployment/terraform/dev/iam.tf,sha256=q8dfqbMNSpgMXW96hP7rnApFoNaAUzZgUXs5HIl7ZFI,3329
|
61
58
|
src/base_template/deployment/terraform/dev/log_sinks.tf,sha256=uVdMtDdd8MnxtKhqzVaYqadE11P3r4fs2IdgNecxM4I,2671
|
@@ -65,24 +62,27 @@ src/base_template/deployment/terraform/dev/variables.tf,sha256=l95zljQbchR6b--wJ
|
|
65
62
|
src/base_template/deployment/terraform/dev/vars/env.tfvars,sha256=LoQMjh1AAMR-MGfaSCsVMjdoYTk2T4oS4D9vMH54CdQ,714
|
66
63
|
src/base_template/deployment/terraform/vars/env.tfvars,sha256=Jyc36pt-0xNMwQsoXucad0QAWFMeGe67fdimCKXx-tw,1411
|
67
64
|
src/base_template/tests/unit/test_dummy.py,sha256=2exfCH8qhkZrLWvK04ZxNTO9MV3fdTbZkJN3uK6zvok,850
|
68
|
-
src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml,sha256=
|
69
|
-
src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml,sha256=
|
70
|
-
src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml,sha256=
|
71
|
-
src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml,sha256=
|
65
|
+
src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml,sha256=79RK2xyUTfkAzRyDiZH-1tePdcoeMwTczeVozppD1ao,5768
|
66
|
+
src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml,sha256=urlWV4ncjKm-M1Wwg5nlw9E9LGob40rWO7fEOxyxE4U,2010
|
67
|
+
src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml,sha256=jU4DV9wGI8GzbYjER0eTdzZvtiFcc86RuFmy7L4bU0U,8552
|
68
|
+
src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml,sha256=9bzz2gsnd6jUbOyH3KkP9P9uk3wQeg0YAnrPo5ZA5sk,3732
|
72
69
|
src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/pr_checks.yaml,sha256=VFdF6q_-zETCMlJkJ0znW8T7gCYE59BZNliNPz2Bh18,1517
|
73
|
-
src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml,sha256=
|
70
|
+
src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml,sha256=JeSGuOkgiS1awojOdohu23IX70ZhISIT73A6AT_vKus,7396
|
71
|
+
src/base_template/{{cookiecutter.agent_directory}}/utils/gcs.py,sha256=jKblaWOGQEigw3esaawcfX178shhZi2Fyk0fJSA4T68,1501
|
72
|
+
src/base_template/{{cookiecutter.agent_directory}}/utils/tracing.py,sha256=2rv1Ukh2jTBENDwoghCItJ28l-Sjz9gMlzdojlVgJa4,6052
|
73
|
+
src/base_template/{{cookiecutter.agent_directory}}/utils/typing.py,sha256=DP5OZC3IGvqA1XbvWt8kI3gyAK3ZjzUSL5Ca17wNeLI,4249
|
74
74
|
src/cli/main.py,sha256=Dya7Sw3ozMTaGDcwMh_-W7udkGZHGzgAj8aBdSZaZxI,1832
|
75
|
-
src/cli/commands/create.py,sha256=
|
76
|
-
src/cli/commands/enhance.py,sha256=
|
77
|
-
src/cli/commands/list.py,sha256=
|
75
|
+
src/cli/commands/create.py,sha256=l2Uo_cVekBNLJA-dnBy5Lue9yUwhUStkOUmIYSvyf-8,44810
|
76
|
+
src/cli/commands/enhance.py,sha256=rrELrS1BErjDiTmeyVek8bbiIoxrSUZY2eYOqiAvi2Y,15076
|
77
|
+
src/cli/commands/list.py,sha256=_Xi2f1myiqEuZnfv-OkY8nPC58YhKOzYDGqh8GW9nd8,5502
|
78
78
|
src/cli/commands/setup_cicd.py,sha256=nSgMUD4_ncYGwLWU1Fl7Ypw3GTJc8qVfjPxwZMLn4xo,32113
|
79
79
|
src/cli/utils/__init__.py,sha256=_cTmsXGPqOtK0q8UW5164QTltbJRJFR_Efxq_BRL1-o,1311
|
80
80
|
src/cli/utils/cicd.py,sha256=9s_OcusQznT_pSjFP60BfDBoZ5V6bwPE0QWbWdMaVlY,26515
|
81
81
|
src/cli/utils/datastores.py,sha256=gv1V6eDcOEKx4MRNG5C3Y-VfixYq1AzQuaYMLp8QRNo,1058
|
82
82
|
src/cli/utils/gcp.py,sha256=cnuCyN144eiyYc9aJNEK9JnyWN66rdevugoMdDYC1UU,4032
|
83
83
|
src/cli/utils/logging.py,sha256=MYPxQYXXaKCqBVOfrhEMe8lFKzpzZWjOVP2Km81X5Mk,3007
|
84
|
-
src/cli/utils/remote_template.py,sha256=
|
85
|
-
src/cli/utils/template.py,sha256=
|
84
|
+
src/cli/utils/remote_template.py,sha256=Uqqhz84p9zlhccUP8ucU1oRs0lCly4see5mfujP42eM,12165
|
85
|
+
src/cli/utils/template.py,sha256=2CnxXTvQVM_ZnY8NlBNXuyhmIsflDe1eTUrHPFR7Qqk,46175
|
86
86
|
src/cli/utils/version.py,sha256=F4udQmzniPStqWZFIgnv3Qg3l9non4mfy2An-Oveqmc,2916
|
87
87
|
src/data_ingestion/README.md,sha256=LNxSQoJW9JozK-TbyGQLj5L_MGWNwrfLk6V6RmQ2oBQ,4032
|
88
88
|
src/data_ingestion/pyproject.toml,sha256=-1Mf2QB8K70ICQV5UPZDpf-fN3UwEQLVzQyxfakCSTY,445
|
@@ -92,45 +92,20 @@ src/data_ingestion/data_ingestion_pipeline/submit_pipeline.py,sha256=tWGqL0zUB3V
|
|
92
92
|
src/data_ingestion/data_ingestion_pipeline/components/ingest_data.py,sha256=QbPmk6V7JPGo5Yc1BhL-1W_t9CXEN0iY5NKaGWlfSbM,10667
|
93
93
|
src/data_ingestion/data_ingestion_pipeline/components/process_data.py,sha256=8vubxkykRpx-d89H1XYGO3yXz4hxhihhGDgDR3s-XZ4,22045
|
94
94
|
src/deployment_targets/agent_engine/deployment_metadata.json,sha256=G_t_n-UNrFsBgH1Xrw5-ZqYzUGwZ4X6ipsIm_yiSq-w,72
|
95
|
-
src/deployment_targets/agent_engine/app/agent_engine_app.py,sha256=NKwghQ2vMai3bx0XDjrNve6pNDMAPjZ7zPjksoPapKM,12507
|
96
95
|
src/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb,sha256=RE6Gp-bu4bHtNBngfkt_CF5emy5YcOWQ5rMYW_Cv8_w,48809
|
97
|
-
src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py,sha256=
|
96
|
+
src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py,sha256=k6AbIMb6_6drv1HXhiVatpPzqspjLSahfRLkZmWqHlI,6065
|
98
97
|
src/deployment_targets/agent_engine/tests/load_test/README.md,sha256=aQP7nDAqd2jKBET4noI39HC9PVHpgpned7cxucWpVJo,1302
|
99
98
|
src/deployment_targets/agent_engine/tests/load_test/load_test.py,sha256=USzS89bQ4qHVoQynDRSRShKzeXf1MJ0MBV4FpV40vrI,4249
|
100
99
|
src/deployment_targets/agent_engine/tests/load_test/.results/.placeholder,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
101
|
-
src/deployment_targets/
|
102
|
-
src/deployment_targets/cloud_run/
|
100
|
+
src/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/agent_engine_app.py,sha256=91idmH-p7B7Gk8iMZoUeutndUqBhXt3apxUrTE64VlM,12797
|
101
|
+
src/deployment_targets/cloud_run/Dockerfile,sha256=LdVMFTcYtO7b0L3jBXbVMUlHknL41ELp3RmzIGmxOH8,978
|
103
102
|
src/deployment_targets/cloud_run/deployment/terraform/service.tf,sha256=w3iEnyScbO0sjLPQEYfs3GmPpHTUMGeG1ghi09wSY24,10322
|
104
103
|
src/deployment_targets/cloud_run/deployment/terraform/dev/service.tf,sha256=VegAzMcl2ohxMvtq6bcSXfCHYzQW68usyA839oULpgk,6581
|
105
|
-
src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py,sha256=
|
106
|
-
src/deployment_targets/cloud_run/tests/load_test/README.md,sha256=
|
107
|
-
src/deployment_targets/cloud_run/tests/load_test/load_test.py,sha256=
|
104
|
+
src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py,sha256=85tA1gtbu_Z2CJqzOHgvDS-lvQFbYUMW8_mfqEc1_8I,9325
|
105
|
+
src/deployment_targets/cloud_run/tests/load_test/README.md,sha256=clrCwgwUDr_AsivG0oLeNImTK4uke9EAWkrpS2nhIX0,2769
|
106
|
+
src/deployment_targets/cloud_run/tests/load_test/load_test.py,sha256=kK3KaCdBFHKlni3ZVY2u4h_ugNla4o6pbhGRZlQ-haI,4270
|
108
107
|
src/deployment_targets/cloud_run/tests/load_test/.results/.placeholder,sha256=ZbWpSgDo8bT33PstD_73aQSeN_0oo0F104NMUGuZ8lE,14903
|
109
|
-
src/
|
110
|
-
src/frontends/adk_gemini_fullstack/frontend/eslint.config.js,sha256=3ADH23ANA4NNBKFy6nCVk65e8bx1DrVd_FIaYNnhuqA,734
|
111
|
-
src/frontends/adk_gemini_fullstack/frontend/index.html,sha256=cGmA25GOzciMX6ABt1SW_SqnrgPXGGf-1Pbkx2eMByQ,306
|
112
|
-
src/frontends/adk_gemini_fullstack/frontend/package-lock.json,sha256=DMSGcDHDWvcxRVbgaPqI2O0Z7HJk5PAiZmLfAVifPns,218303
|
113
|
-
src/frontends/adk_gemini_fullstack/frontend/package.json,sha256=bUzgvwGx8oVL2wHYbSNizO0EI1CjLd0jcWirJI-cxwA,1312
|
114
|
-
src/frontends/adk_gemini_fullstack/frontend/tsconfig.json,sha256=LtqiCB6w68AjbIegDnbXa1YXKM_RQZZVVkAjfUNxyBo,753
|
115
|
-
src/frontends/adk_gemini_fullstack/frontend/tsconfig.node.json,sha256=1BewvjsiZMJqSGXTqe94jo5yKdpi7yqI7UGoHgTv9mg,593
|
116
|
-
src/frontends/adk_gemini_fullstack/frontend/vite.config.ts,sha256=nmeV8oQoQe7SxIVNalYeR8Dw9LOQrcxTWyBUYxLr_Ns,1359
|
117
|
-
src/frontends/adk_gemini_fullstack/frontend/src/App.tsx,sha256=N50ox6esJyvNifWXxCQUXulXhfQD643qGSXdfiIh6zk,21411
|
118
|
-
src/frontends/adk_gemini_fullstack/frontend/src/global.css,sha256=uNpkk45y9XVsmQs84D0KHN8B2i55ElSFZxHu6zml5E8,5037
|
119
|
-
src/frontends/adk_gemini_fullstack/frontend/src/main.tsx,sha256=WYYxbfb0WHrY1BW7KB-pCxb3jslb1UeCDa26l9Ve0SQ,328
|
120
|
-
src/frontends/adk_gemini_fullstack/frontend/src/utils.ts,sha256=Utm02hSGixxQ_T4hqlZqpdc8BuK1B2Mgk5X0vNK3V_4,170
|
121
|
-
src/frontends/adk_gemini_fullstack/frontend/src/vite-env.d.ts,sha256=ZZlpNvuwQpFfe3SiAPzd5-QQ8ypmmxq5WXz6pLD63bU,38
|
122
|
-
src/frontends/adk_gemini_fullstack/frontend/src/components/ActivityTimeline.tsx,sha256=FfDYEJyBc5vZYOBATcLyJRl1IYjb1B-0qv79dN8DqBI,9616
|
123
|
-
src/frontends/adk_gemini_fullstack/frontend/src/components/ChatMessagesView.tsx,sha256=pRyJ9NJedSVL_58mYyy4ENKfjmcFs9IxdMzVmci5F4I,14517
|
124
|
-
src/frontends/adk_gemini_fullstack/frontend/src/components/InputForm.tsx,sha256=8YjXJ2251qAunm5nEgVSto70pe3yoxGGqbU3hDSIB30,1875
|
125
|
-
src/frontends/adk_gemini_fullstack/frontend/src/components/WelcomeScreen.tsx,sha256=cs3ogNX5U4_divL_3AA_75PPh5m7JqkfO8upemcPEQk,2064
|
126
|
-
src/frontends/adk_gemini_fullstack/frontend/src/components/ui/badge.tsx,sha256=RK5qi9QBQLZRULdg46yX_sdQ05NTBq4EkuegeLa6I4A,1627
|
127
|
-
src/frontends/adk_gemini_fullstack/frontend/src/components/ui/button.tsx,sha256=2lrQboqV8BfAa-k6Hauvlsklk1pTmYl1gWwE3UXJHWc,2119
|
128
|
-
src/frontends/adk_gemini_fullstack/frontend/src/components/ui/card.tsx,sha256=_nt0cquRb8cZ2ibMRVNuUBqgdb3pHTPE_MmPytUwLck,1985
|
129
|
-
src/frontends/adk_gemini_fullstack/frontend/src/components/ui/input.tsx,sha256=8hVWeIHS_a5rgrpRChHrLRnXptwUNn73FG7nB-O5t08,963
|
130
|
-
src/frontends/adk_gemini_fullstack/frontend/src/components/ui/scroll-area.tsx,sha256=OweG6sEc5nhRLERWbD99uMmwUzfeT7HZmESAyrDd-XI,1623
|
131
|
-
src/frontends/adk_gemini_fullstack/frontend/src/components/ui/select.tsx,sha256=l1CSyVqn6zCovoC-r4HmmUFMWEMAUTuOEZqBK5dQP0g,6231
|
132
|
-
src/frontends/adk_gemini_fullstack/frontend/src/components/ui/tabs.tsx,sha256=Epvn4JDzNmP9tw9Zik5yzxTvALO4wfP8U2PjyvToglw,1951
|
133
|
-
src/frontends/adk_gemini_fullstack/frontend/src/components/ui/textarea.tsx,sha256=GS4IJIjRF5CzN78SrQlJzapWlknrV673AghYBFvLx_Y,755
|
108
|
+
src/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}/server.py,sha256=kKmjr8opUz2Z1nFw9-yKCu8T0tCBZQgWm3R9ab_l1fM,13752
|
134
109
|
src/frontends/live_api_react/frontend/package-lock.json,sha256=_vWIfornMhB4lrRIwUmy4CqKGINCKjeUuYcTw2Sc_IY,734344
|
135
110
|
src/frontends/live_api_react/frontend/package.json,sha256=OBOzzDiDiESPzmbLDlZ6KM1Trit71vXdP692dI-g9Uo,1381
|
136
111
|
src/frontends/live_api_react/frontend/tsconfig.json,sha256=cyqEhf7-Yydz-PX8_cuF8JpsyC363NDTNkrmCk0sKAo,595
|
@@ -179,7 +154,7 @@ src/frontends/streamlit/frontend/utils/stream_handler.py,sha256=-XVRfLH6ck1KP6NS
|
|
179
154
|
src/frontends/streamlit/frontend/utils/title_summary.py,sha256=B0cadS_KPW-tsbABauI4J681aqjEtuKFDa25e9R1WKc,3030
|
180
155
|
src/resources/containers/data_processing/Dockerfile,sha256=VoB9d5yZiiWnqRfWrIq0gGNMzZg-eVy733OgP72ZgO0,950
|
181
156
|
src/resources/containers/e2e-tests/Dockerfile,sha256=yA3HxeX0HNpl8B4oEQUICCVZDCXdRn2Igmii4jt-r7k,1895
|
182
|
-
src/resources/docs/adk-cheatsheet.md,sha256=
|
157
|
+
src/resources/docs/adk-cheatsheet.md,sha256=nEPBJKX315NzEF0NZonvqztqYZv7iIn7k7R9nPjULp0,58826
|
183
158
|
src/resources/idx/idx-template.json,sha256=07OQZCPp45Iqor2O7Tm1e1Gmsdd-AmmUofSvA7y-oRs,793
|
184
159
|
src/resources/idx/idx-template.nix,sha256=sesHGev_PYtVDg0J5tHkg0OO7IR1Bz2iAtl_if3Ar3M,892
|
185
160
|
src/resources/idx/.idx/dev.nix,sha256=XQ4T1xt5I-8SVwnI37v56RFFlxa58Ko-a9G2-oelYAI,1602
|
@@ -197,8 +172,8 @@ src/resources/locks/uv-live_api-cloud_run.lock,sha256=xOPEAiyHooNT2nMP1wbnJ2ekOD
|
|
197
172
|
src/utils/generate_locks.py,sha256=6V1B8V2BEuevWnXUsxZVTrLjXwFRII8UfsIGrQqZxVs,4320
|
198
173
|
src/utils/lock_utils.py,sha256=IFOMUWtb-ypm2Y8w8J5y2oI_-MaPuwPF_JOAAlnNudA,2275
|
199
174
|
src/utils/watch_and_rebuild.py,sha256=vP4yIiA7E_lj5sfQdJUl8TXas6V7msDg8XWUutAC05Q,6679
|
200
|
-
agent_starter_pack-0.
|
201
|
-
agent_starter_pack-0.
|
202
|
-
agent_starter_pack-0.
|
203
|
-
agent_starter_pack-0.
|
204
|
-
agent_starter_pack-0.
|
175
|
+
agent_starter_pack-0.12.0.dist-info/METADATA,sha256=_wYWKxzNhGHoEwGHpMYMz25PlhYkdl6Y1ua9mO_-IFE,11102
|
176
|
+
agent_starter_pack-0.12.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
177
|
+
agent_starter_pack-0.12.0.dist-info/entry_points.txt,sha256=U7uCxR7YulIhZ0L8R8Hui0Bsy6J7oyESBeDYJYMrQjA,56
|
178
|
+
agent_starter_pack-0.12.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
179
|
+
agent_starter_pack-0.12.0.dist-info/RECORD,,
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Copyright 2025 Google LLC
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
from .agent import root_agent
|
16
|
+
|
17
|
+
__all__ = ["root_agent"]
|
@@ -9,7 +9,10 @@
|
|
9
9
|
"This notebook demonstrates how to test an ADK (Agent Development Kit) application.\n",
|
10
10
|
"It covers both local and remote testing, both with Agent Engine and Cloud Run.\n",
|
11
11
|
"\n",
|
12
|
-
"
|
12
|
+
"> **Note**: This notebook assumes that the agent files are stored in the `app` folder. If your agent files are located in a different directory, please update all relevant file paths and references accordingly.\n",
|
13
|
+
"\n",
|
14
|
+
"<img src=\"https://github.com/GoogleCloudPlatform/agent-starter-pack/blob/main/docs/images/adk_logo.png?raw=true\" width=\"400\">\n",
|
15
|
+
"\n"
|
13
16
|
]
|
14
17
|
},
|
15
18
|
{
|
@@ -18,7 +18,7 @@ from google.adk.runners import Runner
|
|
18
18
|
from google.adk.sessions import InMemorySessionService
|
19
19
|
from google.genai import types
|
20
20
|
|
21
|
-
from
|
21
|
+
from {{cookiecutter.agent_directory}}.agent import root_agent
|
22
22
|
|
23
23
|
|
24
24
|
def test_agent_stream() -> None:
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Copyright 2025 Google LLC
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
from .agent import root_agent
|
16
|
+
|
17
|
+
__all__ = ["root_agent"]
|
agents/agentic_rag/app/agent.py
CHANGED
@@ -20,8 +20,8 @@ import vertexai
|
|
20
20
|
from google.adk.agents import Agent
|
21
21
|
from langchain_google_vertexai import VertexAIEmbeddings
|
22
22
|
|
23
|
-
from
|
24
|
-
from
|
23
|
+
from {{cookiecutter.agent_directory}}.retrievers import get_compressor, get_retriever
|
24
|
+
from {{cookiecutter.agent_directory}}.templates import format_docs
|
25
25
|
|
26
26
|
EMBEDDING_MODEL = "text-embedding-005"
|
27
27
|
LLM_LOCATION = "global"
|
@@ -9,7 +9,10 @@
|
|
9
9
|
"This notebook demonstrates how to test an ADK (Agent Development Kit) application.\n",
|
10
10
|
"It covers both local and remote testing, both with Agent Engine and Cloud Run.\n",
|
11
11
|
"\n",
|
12
|
-
"
|
12
|
+
"> **Note**: This notebook assumes that the agent files are stored in the `app` folder. If your agent files are located in a different directory, please update all relevant file paths and references accordingly.\n",
|
13
|
+
"\n",
|
14
|
+
"<img src=\"https://github.com/GoogleCloudPlatform/agent-starter-pack/blob/main/docs/images/adk_logo.png?raw=true\" width=\"400\">\n",
|
15
|
+
"\n"
|
13
16
|
]
|
14
17
|
},
|
15
18
|
{
|
@@ -20,11 +20,11 @@ from google.adk.runners import Runner
|
|
20
20
|
from google.adk.sessions import InMemorySessionService
|
21
21
|
from google.genai import types
|
22
22
|
|
23
|
-
from
|
23
|
+
from {{cookiecutter.agent_directory}}.agent import root_agent
|
24
24
|
|
25
25
|
|
26
26
|
@patch(
|
27
|
-
"
|
27
|
+
"{{cookiecutter.agent_directory}}.agent.retrieve_docs",
|
28
28
|
return_value="dummy content",
|
29
29
|
)
|
30
30
|
def test_agent_stream(mock_retrieve: MagicMock) -> None:
|
@@ -57,8 +57,8 @@ def mock_dependencies() -> Generator[None, None, None]:
|
|
57
57
|
Patches genai client and tool functions.
|
58
58
|
"""
|
59
59
|
with (
|
60
|
-
patch("
|
61
|
-
patch("
|
60
|
+
patch("{{cookiecutter.agent_directory}}.server.genai_client") as mock_genai,
|
61
|
+
patch("{{cookiecutter.agent_directory}}.server.tool_functions") as mock_tools,
|
62
62
|
):
|
63
63
|
mock_genai.aio.live.connect = AsyncMock()
|
64
64
|
mock_tools.return_value = {}
|
@@ -71,7 +71,7 @@ async def test_websocket_endpoint() -> None:
|
|
71
71
|
Test the websocket endpoint to ensure it correctly handles
|
72
72
|
websocket connections and messages.
|
73
73
|
"""
|
74
|
-
from
|
74
|
+
from {{cookiecutter.agent_directory}}.server import app
|
75
75
|
|
76
76
|
mock_session = AsyncMock()
|
77
77
|
mock_session._ws = AsyncMock()
|
@@ -90,7 +90,7 @@ async def test_websocket_endpoint() -> None:
|
|
90
90
|
None, # Add None to trigger StopAsyncIteration after first message
|
91
91
|
]
|
92
92
|
|
93
|
-
with patch("
|
93
|
+
with patch("{{cookiecutter.agent_directory}}.server.genai_client") as mock_genai:
|
94
94
|
mock_genai.aio.live.connect.return_value.__aenter__.return_value = mock_session
|
95
95
|
client = TestClient(app)
|
96
96
|
with client.websocket_connect("/ws") as websocket:
|
@@ -132,9 +132,9 @@ async def test_websocket_endpoint() -> None:
|
|
132
132
|
@pytest.mark.asyncio
|
133
133
|
def test_websocket_error_handling() -> None:
|
134
134
|
"""Test websocket error handling."""
|
135
|
-
from
|
135
|
+
from {{cookiecutter.agent_directory}}.server import app
|
136
136
|
|
137
|
-
with patch("
|
137
|
+
with patch("{{cookiecutter.agent_directory}}.server.genai_client") as mock_genai:
|
138
138
|
mock_genai.aio.live.connect.side_effect = Exception("Connection failed")
|
139
139
|
|
140
140
|
client = TestClient(app)
|
llm.txt
CHANGED
@@ -74,6 +74,10 @@ agent-starter-pack create PROJECT_NAME [OPTIONS]
|
|
74
74
|
* `--region`: GCP region (e.g., `us-central1`).
|
75
75
|
* `--auto-approve`: **Skips all interactive prompts (crucial for automation).**
|
76
76
|
* `--debug`: Enables debug logging during creation.
|
77
|
+
* `--agent-directory, -dir`: Name of the agent directory (overrides template default).
|
78
|
+
* `-o, --output-dir`: Output directory for the project (default: current directory).
|
79
|
+
* `--in-folder, -if`: Template files directly into the current directory instead of creating a new project directory.
|
80
|
+
* `--skip-checks`: Skip verification checks for GCP and Vertex AI.
|
77
81
|
|
78
82
|
**Automated Creation Example:**
|
79
83
|
```bash
|
@@ -196,7 +200,7 @@ For stateful agents, the starter pack supports persistent sessions.
|
|
196
200
|
|
197
201
|
### Monitoring & Observability
|
198
202
|
* **Technology:** Uses OpenTelemetry to emit events to Google Cloud Trace and Logging.
|
199
|
-
* **Custom Tracer:** A custom tracer in `app/utils/tracing.py` handles large payloads by linking to GCS, overcoming default service limits.
|
203
|
+
* **Custom Tracer:** A custom tracer in `app/utils/tracing.py` (or a different agent directory instead of app) handles large payloads by linking to GCS, overcoming default service limits.
|
200
204
|
* **Infrastructure:** A Log Router to sink data to BigQuery is provisioned by Terraform.
|
201
205
|
|
202
206
|
---
|
@@ -217,8 +221,16 @@ uvx agent-starter-pack setup-cicd [OPTIONS]
|
|
217
221
|
* `--prod-project`: (REQUIRED) The Google Cloud Project ID for your production environment.
|
218
222
|
* `--repository-name`: (REQUIRED) The name for the new GitHub repository that will be created.
|
219
223
|
* `--repository-owner`: (REQUIRED) Your GitHub username or organization where the repo will be created.
|
220
|
-
* `--git-provider`: (REQUIRED) The Git provider to use (github, gitlab, etc.). Only "github" is supported.
|
221
224
|
* `--auto-approve`: Skips all interactive confirmation prompts.
|
225
|
+
* `--dev-project`: Development project ID (optional).
|
226
|
+
* `--cicd-project`: CICD project ID (defaults to prod project if not specified).
|
227
|
+
* `--region`: GCP region (auto-detects from Terraform vars if not specified).
|
228
|
+
* `--host-connection-name`: Host connection name (optional).
|
229
|
+
* `--github-pat`: GitHub Personal Access Token for programmatic auth.
|
230
|
+
* `--github-app-installation-id`: GitHub App Installation ID for programmatic auth.
|
231
|
+
* `--local-state`: Use local Terraform state instead of remote GCS backend.
|
232
|
+
* `--debug`: Enable debug logging.
|
233
|
+
* `--create-repository`: Flag indicating whether to create a new repository.
|
222
234
|
|
223
235
|
|
224
236
|
**Automated Example:**
|
@@ -228,10 +240,9 @@ uvx agent-starter-pack setup-cicd \
|
|
228
240
|
--prod-project the-user-prod-project \
|
229
241
|
--repository-name the-user-repo-name \
|
230
242
|
--repository-owner the-username \
|
231
|
-
--git-provider github \
|
232
243
|
--auto-approve
|
233
244
|
```
|
234
|
-
* Note: As a coding agent, you must run this command non-interactively. Before executing, you must ask the user to provide the following required flags: `--staging-project`, `--prod-project`, `--repository-name`, `--repository-owner
|
245
|
+
* Note: As a coding agent, you must run this command non-interactively. Before executing, you must ask the user to provide the following required flags: `--staging-project`, `--prod-project`, `--repository-name`, and `--repository-owner`. Once you have these values, you can construct and run the command with the `--auto-approve` flag.
|
235
246
|
* Note: If the user tells that `setup-cicd` is not a viable option or it wants to use a different git provider, you must not use this command. Instead, you should look at the `deployment/README.md` to get instructions on how to manually deploy the agent.
|
236
247
|
---
|
237
248
|
### Section 6: Operational Guidelines for Coding Agents
|
src/base_template/Makefile
CHANGED
@@ -34,14 +34,14 @@ playground:
|
|
34
34
|
@echo "| 💡 Try asking: {{cookiecutter.example_question}}|"
|
35
35
|
{%- if "adk" in cookiecutter.tags %}
|
36
36
|
@echo "| |"
|
37
|
-
@echo "| 🔍 IMPORTANT: Select the '
|
37
|
+
@echo "| 🔍 IMPORTANT: Select the '{{cookiecutter.agent_directory}}' folder to interact with your agent. |"
|
38
38
|
{%- endif %}
|
39
39
|
@echo "==============================================================================="
|
40
40
|
{%- if "adk" in cookiecutter.tags %}
|
41
|
-
uv run adk web --port 8501
|
41
|
+
uv run adk web . --port 8501
|
42
42
|
{%- else %}
|
43
43
|
{%- if cookiecutter.deployment_target == 'cloud_run' %}
|
44
|
-
uv run uvicorn
|
44
|
+
uv run uvicorn {{cookiecutter.agent_directory}}.server:app --host 0.0.0.0 --port 8000 --reload &
|
45
45
|
{%- endif %}
|
46
46
|
{%- if cookiecutter.agent_name == 'live_api' %}
|
47
47
|
(cd frontend && PORT=8501 npm start)
|
@@ -73,13 +73,13 @@ backend:
|
|
73
73
|
{%- elif cookiecutter.deployment_target == 'agent_engine' %}
|
74
74
|
# Export dependencies to requirements file using uv export.
|
75
75
|
uv export --no-hashes --no-header --no-dev --no-emit-project --no-annotate > .requirements.txt 2>/dev/null || \
|
76
|
-
uv export --no-hashes --no-header --no-dev --no-emit-project > .requirements.txt && uv run
|
76
|
+
uv export --no-hashes --no-header --no-dev --no-emit-project > .requirements.txt && uv run {{cookiecutter.agent_directory}}/agent_engine_app.py
|
77
77
|
{%- endif %}
|
78
78
|
{%- if cookiecutter.deployment_target == 'cloud_run' %}
|
79
79
|
|
80
80
|
# Launch local development server with hot-reload
|
81
81
|
local-backend:
|
82
|
-
uv run uvicorn
|
82
|
+
uv run uvicorn {{cookiecutter.agent_directory}}.server:app --host 0.0.0.0 --port 8000 --reload
|
83
83
|
{%- endif %}
|
84
84
|
{%- if cookiecutter.deployment_target == 'cloud_run' %}
|
85
85
|
{%- if cookiecutter.agent_name == 'live_api' %}
|
src/base_template/README.md
CHANGED
@@ -9,7 +9,7 @@ This project is organized as follows:
|
|
9
9
|
|
10
10
|
```
|
11
11
|
{{cookiecutter.project_name}}/
|
12
|
-
├──
|
12
|
+
├── {{cookiecutter.agent_directory}}/ # Core application code
|
13
13
|
│ ├── agent.py # Main agent logic
|
14
14
|
{%- if cookiecutter.deployment_target == 'cloud_run' %}
|
15
15
|
│ ├── server.py # FastAPI Backend server
|
@@ -83,7 +83,7 @@ For full command options and usage, refer to the [Makefile](Makefile).
|
|
83
83
|
{% if cookiecutter.agent_name == 'live_api' %}
|
84
84
|
## Usage
|
85
85
|
|
86
|
-
This template follows a "bring your own agent" approach - you focus on your business logic in `
|
86
|
+
This template follows a "bring your own agent" approach - you focus on your business logic in `{{cookiecutter.agent_directory}}/agent.py`, and the template handles the surrounding components (UI, infrastructure, deployment, monitoring).
|
87
87
|
|
88
88
|
Here’s the recommended workflow for local development:
|
89
89
|
|
@@ -124,7 +124,7 @@ Here’s the recommended workflow for local development:
|
|
124
124
|
* Open the Streamlit UI in your browser (usually `http://localhost:8501` or `http://localhost:3001`).
|
125
125
|
* Click the play button in the UI to connect to the backend.
|
126
126
|
* Interact with the agent! Try prompts like: *"Using the tool you have, define Governance in the context MLOPs"*
|
127
|
-
* Modify the agent logic in `
|
127
|
+
* Modify the agent logic in `{{cookiecutter.agent_directory}}/agent.py`. The backend server (FastAPI with `uvicorn --reload`) should automatically restart when you save changes. Refresh the frontend if needed to see behavioral changes.
|
128
128
|
|
129
129
|
<details>
|
130
130
|
<summary><b>Cloud Shell Usage</b></summary>
|
@@ -162,7 +162,7 @@ To run the agent using Google Cloud Shell:
|
|
162
162
|
This template follows a "bring your own agent" approach - you focus on your business logic, and the template handles everything else (UI, infrastructure, deployment, monitoring).
|
163
163
|
|
164
164
|
1. **Prototype:** Build your Generative AI Agent using the intro notebooks in `notebooks/` for guidance. Use Vertex AI Evaluation to assess performance.
|
165
|
-
2. **Integrate:** Import your agent into the app by editing `
|
165
|
+
2. **Integrate:** Import your agent into the app by editing `{{cookiecutter.agent_directory}}/agent.py`.
|
166
166
|
3. **Test:** Explore your agent functionality using the Streamlit playground with `make playground`. The playground offers features like chat history, user feedback, and various input types, and automatically reloads your agent on code changes.
|
167
167
|
4. **Deploy:** Set up and initiate the CI/CD pipelines, customizing tests as necessary. Refer to the [deployment section](#deployment) for comprehensive instructions. For streamlined infrastructure deployment, simply run `uvx agent-starter-pack setup-cicd`. Check out the [`agent-starter-pack setup-cicd` CLI command](https://googlecloudplatform.github.io/agent-starter-pack/cli/setup_cicd.html). Currently supports GitHub with both Google Cloud Build and GitHub Actions as CI/CD runners.
|
168
168
|
5. **Monitor:** Track performance and gather insights using Cloud Logging, Tracing, and the Looker Studio dashboard to iterate on your application.
|
@@ -29,7 +29,7 @@ resource "google_cloudbuild_trigger" "pr_checks" {
|
|
29
29
|
|
30
30
|
filename = ".cloudbuild/pr_checks.yaml"
|
31
31
|
included_files = [
|
32
|
-
"
|
32
|
+
"{{cookiecutter.agent_directory}}/**",
|
33
33
|
"data_ingestion/**",
|
34
34
|
"tests/**",
|
35
35
|
"deployment/**",
|
@@ -64,7 +64,7 @@ resource "google_cloudbuild_trigger" "cd_pipeline" {
|
|
64
64
|
|
65
65
|
filename = ".cloudbuild/staging.yaml"
|
66
66
|
included_files = [
|
67
|
-
"
|
67
|
+
"{{cookiecutter.agent_directory}}/**",
|
68
68
|
"data_ingestion/**",
|
69
69
|
"tests/**",
|
70
70
|
"deployment/**",
|
src/base_template/pyproject.toml
CHANGED
@@ -75,7 +75,7 @@ select = [
|
|
75
75
|
ignore = ["E501", "C901"] # ignore line too long, too complex
|
76
76
|
|
77
77
|
[tool.ruff.lint.isort]
|
78
|
-
known-first-party = ["
|
78
|
+
known-first-party = ["{{cookiecutter.agent_directory}}", "frontend"]
|
79
79
|
|
80
80
|
[tool.mypy]
|
81
81
|
disallow_untyped_calls = true
|
@@ -113,4 +113,4 @@ pythonpath = "."
|
|
113
113
|
asyncio_default_fixture_loop_scope = "function"
|
114
114
|
|
115
115
|
[tool.hatch.build.targets.wheel]
|
116
|
-
packages = ["
|
116
|
+
packages = ["{{cookiecutter.agent_directory}}","frontend"]
|
@@ -108,7 +108,7 @@ jobs:
|
|
108
108
|
- name: Deploy to Production (Agent Engine)
|
109
109
|
run: |
|
110
110
|
uv export --no-hashes --no-sources --no-header --no-dev --no-emit-project --no-annotate --locked > .requirements.txt
|
111
|
-
uv run
|
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
|
--service-account {% raw %}${{ vars.APP_SA_EMAIL_PROD }}{% endraw %} \
|
@@ -19,7 +19,7 @@ on:
|
|
19
19
|
branches:
|
20
20
|
- main
|
21
21
|
paths:
|
22
|
-
- '
|
22
|
+
- '{{cookiecutter.agent_directory}}/**'
|
23
23
|
- 'data_ingestion/**'
|
24
24
|
- 'tests/**'
|
25
25
|
- 'deployment/**'
|
@@ -119,7 +119,7 @@ jobs:
|
|
119
119
|
- name: Deploy to Staging (Agent Engine)
|
120
120
|
run: |
|
121
121
|
uv export --no-hashes --no-sources --no-header --no-dev --no-emit-project --no-annotate --locked > .requirements.txt
|
122
|
-
uv run
|
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
|
--service-account {% raw %}${{ vars.APP_SA_EMAIL_STAGING }}{% endraw %} \
|
@@ -74,7 +74,7 @@ steps:
|
|
74
74
|
- "-c"
|
75
75
|
- |
|
76
76
|
uv export --no-hashes --no-sources --no-header --no-dev --no-emit-project --no-annotate --locked > .requirements.txt
|
77
|
-
uv run
|
77
|
+
uv run {{cookiecutter.agent_directory}}/agent_engine_app.py \
|
78
78
|
--project ${_PROD_PROJECT_ID} \
|
79
79
|
--location ${_REGION} \
|
80
80
|
--service-account ${_APP_SA_EMAIL_PROD} \
|
@@ -108,7 +108,7 @@ steps:
|
|
108
108
|
- "-c"
|
109
109
|
- |
|
110
110
|
uv export --no-hashes --no-sources --no-header --no-dev --no-emit-project --no-annotate --locked > .requirements.txt
|
111
|
-
uv run
|
111
|
+
uv run {{cookiecutter.agent_directory}}/agent_engine_app.py \
|
112
112
|
--project ${_STAGING_PROJECT_ID} \
|
113
113
|
--location ${_REGION} \
|
114
114
|
--service-account ${_APP_SA_EMAIL_STAGING} \
|