agent-starter-pack 0.2.3__py3-none-any.whl → 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (64) hide show
  1. {agent_starter_pack-0.2.3.dist-info → agent_starter_pack-0.3.0.dist-info}/METADATA +8 -4
  2. {agent_starter_pack-0.2.3.dist-info → agent_starter_pack-0.3.0.dist-info}/RECORD +61 -46
  3. agents/adk_base/README.md +14 -0
  4. agents/adk_base/app/agent.py +66 -0
  5. agents/adk_base/notebooks/adk_app_testing.ipynb +305 -0
  6. agents/adk_base/template/.templateconfig.yaml +21 -0
  7. agents/adk_base/tests/integration/test_agent.py +58 -0
  8. agents/agentic_rag/README.md +1 -0
  9. agents/agentic_rag/app/agent.py +44 -89
  10. agents/agentic_rag/app/templates.py +0 -25
  11. agents/agentic_rag/notebooks/adk_app_testing.ipynb +305 -0
  12. agents/agentic_rag/template/.templateconfig.yaml +3 -1
  13. agents/agentic_rag/tests/integration/test_agent.py +34 -27
  14. agents/langgraph_base_react/README.md +1 -1
  15. agents/langgraph_base_react/template/.templateconfig.yaml +1 -1
  16. src/base_template/Makefile +9 -0
  17. src/base_template/README.md +1 -1
  18. src/base_template/app/__init__.py +3 -0
  19. src/base_template/app/utils/tracing.py +11 -1
  20. src/base_template/app/utils/typing.py +54 -4
  21. src/base_template/deployment/terraform/dev/variables.tf +4 -0
  22. src/base_template/deployment/terraform/dev/vars/env.tfvars +0 -3
  23. src/base_template/deployment/terraform/variables.tf +4 -0
  24. src/base_template/deployment/terraform/vars/env.tfvars +0 -4
  25. src/base_template/pyproject.toml +5 -3
  26. src/{deployment_targets/agent_engine → base_template}/tests/unit/test_dummy.py +2 -1
  27. src/cli/commands/create.py +10 -2
  28. src/cli/commands/setup_cicd.py +3 -0
  29. src/cli/utils/gcp.py +1 -1
  30. src/cli/utils/template.py +27 -25
  31. src/data_ingestion/data_ingestion_pipeline/components/ingest_data.py +2 -1
  32. src/deployment_targets/agent_engine/app/agent_engine_app.py +62 -11
  33. src/deployment_targets/agent_engine/app/utils/gcs.py +1 -1
  34. src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +63 -0
  35. src/deployment_targets/agent_engine/tests/load_test/load_test.py +9 -2
  36. src/deployment_targets/cloud_run/app/server.py +41 -15
  37. src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +60 -3
  38. src/deployment_targets/cloud_run/tests/load_test/README.md +1 -1
  39. src/deployment_targets/cloud_run/tests/load_test/load_test.py +57 -24
  40. src/frontends/live_api_react/frontend/package-lock.json +3 -3
  41. src/frontends/streamlit_adk/frontend/side_bar.py +214 -0
  42. src/frontends/streamlit_adk/frontend/streamlit_app.py +314 -0
  43. src/frontends/streamlit_adk/frontend/style/app_markdown.py +37 -0
  44. src/frontends/streamlit_adk/frontend/utils/chat_utils.py +84 -0
  45. src/frontends/streamlit_adk/frontend/utils/local_chat_history.py +110 -0
  46. src/frontends/streamlit_adk/frontend/utils/message_editing.py +61 -0
  47. src/frontends/streamlit_adk/frontend/utils/multimodal_utils.py +223 -0
  48. src/frontends/streamlit_adk/frontend/utils/stream_handler.py +311 -0
  49. src/frontends/streamlit_adk/frontend/utils/title_summary.py +129 -0
  50. src/resources/locks/uv-adk_base-agent_engine.lock +5335 -0
  51. src/resources/locks/uv-adk_base-cloud_run.lock +5927 -0
  52. src/resources/locks/uv-agentic_rag-agent_engine.lock +882 -676
  53. src/resources/locks/uv-agentic_rag-cloud_run.lock +1014 -835
  54. src/resources/locks/uv-crewai_coding_crew-agent_engine.lock +712 -606
  55. src/resources/locks/uv-crewai_coding_crew-cloud_run.lock +770 -672
  56. src/resources/locks/uv-langgraph_base_react-agent_engine.lock +602 -529
  57. src/resources/locks/uv-langgraph_base_react-cloud_run.lock +763 -665
  58. src/resources/locks/uv-live_api-cloud_run.lock +760 -662
  59. agents/agentic_rag/notebooks/evaluating_langgraph_agent.ipynb +0 -1561
  60. src/base_template/tests/unit/test_utils/test_tracing_exporter.py +0 -140
  61. src/deployment_targets/cloud_run/tests/unit/test_server.py +0 -124
  62. {agent_starter_pack-0.2.3.dist-info → agent_starter_pack-0.3.0.dist-info}/WHEEL +0 -0
  63. {agent_starter_pack-0.2.3.dist-info → agent_starter_pack-0.3.0.dist-info}/entry_points.txt +0 -0
  64. {agent_starter_pack-0.2.3.dist-info → agent_starter_pack-0.3.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.2.3
3
+ Version: 0.3.0
4
4
  Summary: CLI tool to create GCP-based AI agent projects from templates
5
5
  Author-email: Google LLC <agent-starter-pack@google.com>
6
6
  License: Apache-2.0
@@ -60,7 +60,7 @@ For more installation options, see the [Installation Guide](docs/installation.md
60
60
  🆕 The starter pack offers full support for Agent Engine, a new fully managed solution to deploy agents. Simply run this command to get started:
61
61
 
62
62
  ```bash
63
- agent-starter-pack create my-agent -d agent_engine -a langgraph_base_react
63
+ agent-starter-pack create my-agent -d agent_engine -a adk_base
64
64
  ```
65
65
 
66
66
 
@@ -70,13 +70,17 @@ agent-starter-pack create my-agent -d agent_engine -a langgraph_base_react
70
70
 
71
71
  | Agent Name | Description |
72
72
  |-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
73
- | `langgraph_base_react` | A agent implementing a base ReAct agent using LangGraph |
74
- | `agentic_rag` | A RAG agent using LangGraph 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). |
73
+ | `adk_base` | An agent implementing a base ReAct agent using Google's [Agent Development Kit](https://github.com/google/adk-python)
74
+ | `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). |
75
+ | `langgraph_base_react` | An agent implementing a base ReAct agent using LangGraph |
75
76
  | `crewai_coding_crew` | A multi-agent system implemented with CrewAI created to support coding activities |
76
77
  | `live_api` | A real-time multimodal RAG agent powered by Gemini, supporting audio/video/text chat with vector DB-backed responses |
77
78
 
78
79
  **More agents are on the way!** We are continuously expanding our [agent library](./agents/). Have a specific agent type in mind? [Contribute!](#contributing)
79
80
 
81
+ **🔍 ADK Samples**
82
+
83
+ Looking to explore more ADK examples? Check out the [ADK Samples Repository](https://github.com/google/adk-samples) for additional examples and use cases demonstrating ADK's capabilities.
80
84
 
81
85
  #### Extra Features
82
86
 
@@ -1,10 +1,15 @@
1
- agents/agentic_rag/README.md,sha256=TTja750olu5bIysddw8kFF1MlAYQGYdEZVI08oL7-ts,1984
2
- agents/agentic_rag/app/agent.py,sha256=g9IrWRk4BT9-J911v7mDT6YyvFqOzUrEI6sO1YJbzLk,5331
1
+ agents/adk_base/README.md,sha256=4_VlWQI0HU_rvaKZ59Qs7P5VYklWoEJr9pSV-m_BADc,852
2
+ agents/adk_base/app/agent.py,sha256=Dm7dcELj0RbALNI20R9-uEay_RHgej0dPOdQRHA7E-8,2187
3
+ agents/adk_base/notebooks/adk_app_testing.ipynb,sha256=7qZmhssPoJCfT0DA2WpT3uwHgLBIu1EGoFyUDkjaVio,8198
4
+ agents/adk_base/template/.templateconfig.yaml,sha256=JNQsR2s2oOOCaycp_5FEy5MU3xsj4SyOKScUNI7teMg,856
5
+ agents/adk_base/tests/integration/test_agent.py,sha256=1VyshBu44p_PUAQQxV0QROmv6OUGt_m0nDLyaTI77po,1964
6
+ agents/agentic_rag/README.md,sha256=mxMLkq6tAghFaDmc2sc2sEQ5vn9kGWdiRxfTykwpLz0,2268
7
+ agents/agentic_rag/app/agent.py,sha256=EkbMIjEeyXqK49wIkoW6uWotxyXCIfJpeLCizw2QDZM,3959
3
8
  agents/agentic_rag/app/retrievers.py,sha256=qfxwSEixMddvAu4FvUTZAFh1Gdp3RPY65s0Wp6gEFVk,4561
4
- agents/agentic_rag/app/templates.py,sha256=h3dtaVScPNMLqEudh63ZURzZh59p4tclKusFP5rWPgA,1632
5
- agents/agentic_rag/notebooks/evaluating_langgraph_agent.ipynb,sha256=fb4rTMlA-XCniZyPIP9ni4nvIDmLj9Uq8Saw7WrG0fc,58015
6
- agents/agentic_rag/template/.templateconfig.yaml,sha256=4sP1Dw7Men2h4aLBlqlB44T3FNXbVPmqAvjSIGJikSo,1071
7
- agents/agentic_rag/tests/integration/test_agent.py,sha256=8Y4BUvfxPaiEcT8WvdMTl5hVYTWS_W_4aQtYmgrdgx8,1935
9
+ agents/agentic_rag/app/templates.py,sha256=8N_uRchwiN7hlH9Y8rdJ1CAtOhpHUWZkXZZ7IU-YJJk,867
10
+ agents/agentic_rag/notebooks/adk_app_testing.ipynb,sha256=7qZmhssPoJCfT0DA2WpT3uwHgLBIu1EGoFyUDkjaVio,8198
11
+ agents/agentic_rag/template/.templateconfig.yaml,sha256=gaDURx4tBI3620txEFAE8zJSmHL9qtZjlARCEZnBpi0,1120
12
+ agents/agentic_rag/tests/integration/test_agent.py,sha256=HbEv2gzC77jrse3RZ0ra_Bcu6zW_7YlrxYWcYfei63M,2107
8
13
  agents/crewai_coding_crew/README.md,sha256=4No7sfHQVHELARGiT3fWANJzDR0NP48ow4ct3FoPwlA,1672
9
14
  agents/crewai_coding_crew/app/agent.py,sha256=GcmNrOyRPhnI7LICIV6GvBvcDfA_PKqPsQcOEzAORmY,3269
10
15
  agents/crewai_coding_crew/app/crew/crew.py,sha256=pqeeJ4txP-gcVT3PKEAw2zZ4x8g4cDlnFFbf0_zZRr4,2000
@@ -14,10 +19,10 @@ agents/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb,sha256=ifTn4Rf
14
19
  agents/crewai_coding_crew/notebooks/evaluating_langgraph_agent.ipynb,sha256=fb4rTMlA-XCniZyPIP9ni4nvIDmLj9Uq8Saw7WrG0fc,58015
15
20
  agents/crewai_coding_crew/template/.templateconfig.yaml,sha256=cl2idKg9NZKrkIkDhxCVSiDIJaoDjy5yMVmVc93Nlm8,974
16
21
  agents/crewai_coding_crew/tests/integration/test_agent.py,sha256=0uvfmM3FSdESIU7ICb2oqABsQqylQU2PE3UBwbpif-A,1629
17
- agents/langgraph_base_react/README.md,sha256=erfhoSbEqbqn1XM_sSjxXyWleBWIyAMuaN5xMIG6f3M,485
22
+ agents/langgraph_base_react/README.md,sha256=KZQ0e8q9CqnIEiItH9Tc2Ceb2mC3sBcyQUo-ZAmO-zs,482
18
23
  agents/langgraph_base_react/app/agent.py,sha256=2HsbZaSLpMhJQ21geauKPfavcavPW50lx4WV5dXlvnQ,2514
19
24
  agents/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb,sha256=fb4rTMlA-XCniZyPIP9ni4nvIDmLj9Uq8Saw7WrG0fc,58015
20
- agents/langgraph_base_react/template/.templateconfig.yaml,sha256=NpQRZbXtCOeX0XiYtqyI73V6zH4tWWr1TpcTDsSTcjw,991
25
+ agents/langgraph_base_react/template/.templateconfig.yaml,sha256=MPgKPeG3WilPe7DupN_tArMHWfRPcoGeTToIE_WhQP8,992
21
26
  agents/langgraph_base_react/tests/integration/test_agent.py,sha256=wg2Y8V4l7dh7rhWy7Z8zioDW5ILRsz7RZJ-mz0AhK3U,1619
22
27
  agents/live_api/README.md,sha256=eB6e1VAwOsX6d3ns2HgVzdtywKUaZ39-PraKFCjtj7s,3012
23
28
  agents/live_api/app/agent.py,sha256=KXcc10JU-ytbvDmr8bx6uOGxoVQMckppUa29cQBA8rM,2522
@@ -29,11 +34,12 @@ agents/live_api/tests/integration/test_server_e2e.py,sha256=D2VETDIyTD2fQyQ6DXwL
29
34
  agents/live_api/tests/load_test/load_test.py,sha256=HHZyfC4gqiQtZVF_CbbxENGgWQccMLpwMv0IdoQ6cbQ,1275
30
35
  agents/live_api/tests/unit/test_server.py,sha256=_TjlgQgNkjerIaBGnu8P8_KB8ZlSolDcivALpUOn_Rw,4786
31
36
  src/base_template/.gitignore,sha256=mJKTZIcVdAFiIUQicRfPNGUg6WvwcfTEC2xbmAaU34g,2579
32
- src/base_template/Makefile,sha256=-FuUonze4AtGb0t_-R3L1ckDS3dOKmpXrGUC2fnQxUo,3167
33
- src/base_template/README.md,sha256=lg5awHyvvii7wuNgR02fhO_gE9LCdMf_ot9Fd7KOHWo,10317
34
- src/base_template/pyproject.toml,sha256=-fnazs9G4-EL0Ett7bgMP8qtWxWAHB22akcP5_ZCRz8,2813
35
- src/base_template/app/utils/tracing.py,sha256=JA5xVmWpJqaMiNUcD5irGS7Xii1LO37Dmfmzt3kA0Ys,5715
36
- src/base_template/app/utils/typing.py,sha256=LXvSescgmqf5V4h5vT5bcpu-6sWqzD6WgrEBGYLg1C0,3287
37
+ src/base_template/Makefile,sha256=vxOfXc3ZH2re_AYbWVjOBAMPeOgEtjGTOHMhEwAMs_c,3690
38
+ src/base_template/README.md,sha256=0dHYVT8IlG0eMd7dEelAaPyuyk5ZDHnKAvNV8x7TBEA,10397
39
+ src/base_template/pyproject.toml,sha256=pLw8q6j3qQWcu6A3HUpwsT2p3BzfmM2RDxjwUgZ2ulQ,2865
40
+ src/base_template/app/__init__.py,sha256=UyAgc2l8nkVIUPUzL9hKR7EgzCsc2jSYcOcjHNNmpMU,59
41
+ src/base_template/app/utils/tracing.py,sha256=sYN_zSaIrOSSc4YTewKp3FNkKXj0Ksk79ZT_Ftv5QrY,6046
42
+ src/base_template/app/utils/typing.py,sha256=DP5OZC3IGvqA1XbvWt8kI3gyAK3ZjzUSL5Ca17wNeLI,4249
37
43
  src/base_template/deployment/README.md,sha256=XjRRcEiyoobi0YEXybfvtaOi9ecNDU2bVKczv0MUBac,5255
38
44
  src/base_template/deployment/cd/deploy-to-prod.yaml,sha256=Vzt83DunPF64wVsY96KTGvhxZFHAF5Tze_88KW4O-oo,4297
39
45
  src/base_template/deployment/cd/staging.yaml,sha256=URqQPOxEv1ngYM7RoIs-iGMZsDdq6wUdmH953sipK_o,7925
@@ -46,51 +52,49 @@ src/base_template/deployment/terraform/log_sinks.tf,sha256=PP_n3Jr-_EhMy6shVUrx7
46
52
  src/base_template/deployment/terraform/providers.tf,sha256=LFjFQm8XbhWfQRwBUwhTjHLDWUbHW-IlFg71E0zFHIg,1080
47
53
  src/base_template/deployment/terraform/service_accounts.tf,sha256=av5UohEL5JmTw4FUMg7DVYjg_8Kg1u9yYUTD3QlGEmo,1689
48
54
  src/base_template/deployment/terraform/storage.tf,sha256=v1Vo3SS9yUJOJ8QDVyo0sj_YFY-lElRvdsUrxbIzyuI,8639
49
- src/base_template/deployment/terraform/variables.tf,sha256=ytEOMsdVy7HNTPPkAXmsxRkO21bFB9sne3iRwN7szd8,5685
55
+ src/base_template/deployment/terraform/variables.tf,sha256=w_GD6rLPKVeUESi91dEfBZvPccyDM_uNSAOYdYHaYbs,5851
50
56
  src/base_template/deployment/terraform/dev/apis.tf,sha256=kUXkyN-fB8SKssVBxWKZvtHHFGcz09L4Rz9fPQNPSB8,1337
51
57
  src/base_template/deployment/terraform/dev/iam.tf,sha256=ZHFs4TMvq6mqD90n8ecXndzW3pyu4EbZO4iJis88BH0,3394
52
58
  src/base_template/deployment/terraform/dev/log_sinks.tf,sha256=uVdMtDdd8MnxtKhqzVaYqadE11P3r4fs2IdgNecxM4I,2671
53
59
  src/base_template/deployment/terraform/dev/providers.tf,sha256=1S9jCh48d6ailVZ1e14EHsUUDSp7DyGZGExJwViFCkM,900
54
60
  src/base_template/deployment/terraform/dev/storage.tf,sha256=1mgLs21SUhfcoRICqd7BqUlEVAVGeN3kMsQ4UAQLOh8,4654
55
- src/base_template/deployment/terraform/dev/variables.tf,sha256=d3MBpaEHkzRvRS-un7XEgMS55gUEDlMlzkTQEQ9-Fbs,4024
56
- src/base_template/deployment/terraform/dev/vars/env.tfvars,sha256=fySlaivTsrxA6sM7HNsrLZIzwoJQN8RdA5q9dS1Xwog,964
57
- src/base_template/deployment/terraform/vars/env.tfvars,sha256=vasZKhOscuK0yjYrAUDHqbbYj8HV4d_rN87UJ-2ZEBM,1467
58
- src/base_template/tests/unit/test_utils/test_tracing_exporter.py,sha256=JAb0vIB7wNFPm_kaDaHcxtPKNReypDHjdsMQyzpuePQ,4687
61
+ src/base_template/deployment/terraform/dev/variables.tf,sha256=U3UbpWysuSDEZkd94rAN_-XYwoOJXKuMNx3zyE7ULJM,4190
62
+ src/base_template/deployment/terraform/dev/vars/env.tfvars,sha256=LoQMjh1AAMR-MGfaSCsVMjdoYTk2T4oS4D9vMH54CdQ,714
63
+ src/base_template/deployment/terraform/vars/env.tfvars,sha256=Nze8q1x2Aj6ZUeWC2hDeZWqNUkLp13DgzA_LFmmOzCo,1216
64
+ src/base_template/tests/unit/test_dummy.py,sha256=2exfCH8qhkZrLWvK04ZxNTO9MV3fdTbZkJN3uK6zvok,850
59
65
  src/cli/main.py,sha256=pMsSlNwkrFqHUHHA5U-WMZ4QRquaI_F7OXQt6yxuugE,1688
60
- src/cli/commands/create.py,sha256=iDfA1ewmGYAtWsYjNjzDka5eEWANgX1kyBjov0H9_nE,23787
61
- src/cli/commands/setup_cicd.py,sha256=bZb0cSjYFFprvGK-j7Msb0tTFKMzecyyoj2EKWjHNIg,31281
66
+ src/cli/commands/create.py,sha256=J4DH8OFcs8mA1nZLCBLepkCSixdHiL0EYz195M2Lu4o,24156
67
+ src/cli/commands/setup_cicd.py,sha256=ghrbX85omEMIdCIYqCLc2eE0NZr2UbHS6sp7UoC9jbE,31421
62
68
  src/cli/utils/__init__.py,sha256=_cTmsXGPqOtK0q8UW5164QTltbJRJFR_Efxq_BRL1-o,1311
63
69
  src/cli/utils/cicd.py,sha256=tlz50wI0unRosRZsDpZ5Oh5haMJmNjc9dV0-TPWawKE,27443
64
70
  src/cli/utils/datastores.py,sha256=gv1V6eDcOEKx4MRNG5C3Y-VfixYq1AzQuaYMLp8QRNo,1058
65
- src/cli/utils/gcp.py,sha256=IHTLqMCOkDwITQV_7YnNun2b6YIzTWKZCxgaDVobdeQ,4066
71
+ src/cli/utils/gcp.py,sha256=gVak73MD74sZTXvchZB59KFpoqp-aTIsvcMKvYMkXJE,4062
66
72
  src/cli/utils/logging.py,sha256=0lHe4EPi1A8sOx9xkA7gS4UNl0GsIyp2ahydkkuCzLY,1570
67
- src/cli/utils/template.py,sha256=kY6K7Nra2hYN1a36TUb2PoLDKwD3Np9rLTMeVBRbsNg,28730
73
+ src/cli/utils/template.py,sha256=iIRh6hNP-na7j9UcxE8r6ZwukXq_WLIwv-VbQ9U2Oxk,28931
68
74
  src/cli/utils/version.py,sha256=F4udQmzniPStqWZFIgnv3Qg3l9non4mfy2An-Oveqmc,2916
69
75
  src/data_ingestion/README.md,sha256=LNxSQoJW9JozK-TbyGQLj5L_MGWNwrfLk6V6RmQ2oBQ,4032
70
76
  src/data_ingestion/pyproject.toml,sha256=-1Mf2QB8K70ICQV5UPZDpf-fN3UwEQLVzQyxfakCSTY,445
71
77
  src/data_ingestion/uv.lock,sha256=HzSD6_IxS2urt49EefD9MvVxBwxW_bJ-k0XltTDT3Vc,144223
72
78
  src/data_ingestion/data_ingestion_pipeline/pipeline.py,sha256=UAS6dxV954yARP0NdDbCf5kzap3NfmoX52eZ2mZtWXs,3331
73
79
  src/data_ingestion/data_ingestion_pipeline/submit_pipeline.py,sha256=tWGqL0zUB3V5JxR1SpX7LMjCW5r6JEGnvgF8tAxZ12s,7784
74
- src/data_ingestion/data_ingestion_pipeline/components/ingest_data.py,sha256=s5IlAshPbf5kgBTBb-sz0zHqZnIpCzaoM2b2cs7PkJA,10640
80
+ src/data_ingestion/data_ingestion_pipeline/components/ingest_data.py,sha256=QbPmk6V7JPGo5Yc1BhL-1W_t9CXEN0iY5NKaGWlfSbM,10667
75
81
  src/data_ingestion/data_ingestion_pipeline/components/process_data.py,sha256=3D4CaUV9pBaIU10MogJMQAR00JPVzqjFHN6eL7WM_5Y,22045
76
82
  src/deployment_targets/agent_engine/deployment_metadata.json,sha256=G_t_n-UNrFsBgH1Xrw5-ZqYzUGwZ4X6ipsIm_yiSq-w,72
77
- src/deployment_targets/agent_engine/app/agent_engine_app.py,sha256=RK8jsVLWWiaEK_hTE5fI3mQga0K-SrqyRbO7oAZ-N1g,9461
78
- src/deployment_targets/agent_engine/app/utils/gcs.py,sha256=voQNs8sbvLDH0PX3avpn8RFNTq7QWNgXfMWUKU7hBTA,1495
83
+ src/deployment_targets/agent_engine/app/agent_engine_app.py,sha256=hRzFSAjaxMJzahJ0CYypWjV1SMAFok3UsAly4jMScTk,11334
84
+ src/deployment_targets/agent_engine/app/utils/gcs.py,sha256=jKblaWOGQEigw3esaawcfX178shhZi2Fyk0fJSA4T68,1501
79
85
  src/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb,sha256=RE6Gp-bu4bHtNBngfkt_CF5emy5YcOWQ5rMYW_Cv8_w,48809
80
- src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py,sha256=maYeJgeZceMgD4TI8ZID6SKAqHPlQuW2CksT7MGile4,3938
86
+ src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py,sha256=3mEHdnenqT1RrQpndnQWZSMnn8kSLH85rPDhbxH6_lk,5978
81
87
  src/deployment_targets/agent_engine/tests/load_test/README.md,sha256=ckP2eu5_HpOjM390KXNwUk4YWAzWqir3YOTceyoeL64,1441
82
- src/deployment_targets/agent_engine/tests/load_test/load_test.py,sha256=msUkkqsNinCJ8loQHsEeGkQQqQ-Zvv7oAp5ni9vOsWs,3541
88
+ src/deployment_targets/agent_engine/tests/load_test/load_test.py,sha256=FFCo_LjIZyETb61Eo53qxmg4U7qjT__BPWCYiwBQbhU,3764
83
89
  src/deployment_targets/agent_engine/tests/load_test/.results/.placeholder,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
- src/deployment_targets/agent_engine/tests/unit/test_dummy.py,sha256=hL-JCmoQUJ4IgluliEo3KkYd47nmiCy3obiPuz_b0sU,712
85
90
  src/deployment_targets/cloud_run/Dockerfile,sha256=vedZX0JJW2bymESqB-0LumnkKyr7hcog8NlR0DX8Q74,843
86
91
  src/deployment_targets/cloud_run/uv.lock,sha256=2RYrR89xDS1FHVb-g2JGZq8zZ-rzbm_jRvehVCYuXRQ,887957
87
- src/deployment_targets/cloud_run/app/server.py,sha256=h6H6xwK_VVlOOfD6sOSbxX3WqRrHHzH0IUbns5VOyoo,3999
88
- src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py,sha256=KKtdtBTxaAfHQodm4FdyQHa7hBAwWCCda5aEF26-bjk,5978
89
- src/deployment_targets/cloud_run/tests/load_test/README.md,sha256=JP47idadGBiLaBxBPOBJBEY4W87Xh3-wv5Bn8avhvHU,2804
90
- src/deployment_targets/cloud_run/tests/load_test/load_test.py,sha256=HsxmcNKyEopeGER4QUmnjiW4Bqp6h1TXsCUkyrq6inw,3317
92
+ src/deployment_targets/cloud_run/app/server.py,sha256=lqoo_wAi8yvVsC4aoUD4k74UKArci3w1jF3dkwPOyvU,4793
93
+ src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py,sha256=dKgFE8ksZz-6IDqMfJjTJcwgywJcN9gpSd9Ni97NjPg,7784
94
+ src/deployment_targets/cloud_run/tests/load_test/README.md,sha256=ibuQTghqnZD84ConqsqRxhMOdYhuqoCQA3xiOs5wKqE,2804
95
+ src/deployment_targets/cloud_run/tests/load_test/load_test.py,sha256=cOlGaNxx6X3C-eWD0LulXyggqTrTeWZPjnsVn7FtZIs,4082
91
96
  src/deployment_targets/cloud_run/tests/load_test/.results/.placeholder,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
- src/deployment_targets/cloud_run/tests/unit/test_server.py,sha256=_lpSBJ2kKT37WA2ofLjVAL-qK0xpTOhfhzwiue_bhps,3931
93
- src/frontends/live_api_react/frontend/package-lock.json,sha256=OgbAH3fn_v4bd-TwS3NNKiqPN_ysyqALD_ap20W6-as,734245
97
+ src/frontends/live_api_react/frontend/package-lock.json,sha256=BRRGo-rI1wxRa_VLm0NlPV9LGUy7kLccKGjSWJLVntE,734245
94
98
  src/frontends/live_api_react/frontend/package.json,sha256=OBOzzDiDiESPzmbLDlZ6KM1Trit71vXdP692dI-g9Uo,1381
95
99
  src/frontends/live_api_react/frontend/tsconfig.json,sha256=cyqEhf7-Yydz-PX8_cuF8JpsyC363NDTNkrmCk0sKAo,595
96
100
  src/frontends/live_api_react/frontend/public/favicon.ico,sha256=FY9oTN01RzaJ2lZ1rCjNXsEfT1gWZJA3fPx0QMBlMCU,15086
@@ -136,23 +140,34 @@ src/frontends/streamlit/frontend/utils/message_editing.py,sha256=YWoPe2KeWMuL3YV
136
140
  src/frontends/streamlit/frontend/utils/multimodal_utils.py,sha256=v6YbCkz_YcnEo-9YvRjwBNt0SzU4M39bYxJGmKk69vE,7313
137
141
  src/frontends/streamlit/frontend/utils/stream_handler.py,sha256=kRKv7gQDEDsVtJxUsxY5uqCCtR3nQmT1nkZyrQ6Hpsw,12030
138
142
  src/frontends/streamlit/frontend/utils/title_summary.py,sha256=B0cadS_KPW-tsbABauI4J681aqjEtuKFDa25e9R1WKc,3030
143
+ src/frontends/streamlit_adk/frontend/side_bar.py,sha256=VsrIVJkjZPg8AAkVn8Nrn9XN4KasrPVYEKhsZXFqGkU,9053
144
+ src/frontends/streamlit_adk/frontend/streamlit_app.py,sha256=0KtzcvVzc8Ge3XJp0nmeZ691RlI22wsU32WUhKoX9LM,12243
145
+ src/frontends/streamlit_adk/frontend/style/app_markdown.py,sha256=4H9GGlaOIbG_4T4QvHyTMfoeumJze7cZ2VuGIv39wFo,1050
146
+ src/frontends/streamlit_adk/frontend/utils/chat_utils.py,sha256=-Yoh8ly20aSiuf9SYfSIHlPcJ6a5cfdK0rNIJo_p1EE,3095
147
+ src/frontends/streamlit_adk/frontend/utils/local_chat_history.py,sha256=GK0GmYrr2jC7UnMu77OPDgIgfrEO22rXk_VoxfDrJcM,4261
148
+ src/frontends/streamlit_adk/frontend/utils/message_editing.py,sha256=wt2OMJ4RUMoeJu_mVLMR2s4mxTlxWoQAxlxYXgKCBlc,2453
149
+ src/frontends/streamlit_adk/frontend/utils/multimodal_utils.py,sha256=7TV3n36HBQOCv4sC9tEjD2sEXzzBDOuqgXr84QC3Tms,7722
150
+ src/frontends/streamlit_adk/frontend/utils/stream_handler.py,sha256=xKwiY1KLWQdDtQ5eVrSkP3uubEAKDiOJNjWHjQiBxLg,12323
151
+ src/frontends/streamlit_adk/frontend/utils/title_summary.py,sha256=lmYJUIz99jWY1dTziUao554GJBHFQTzQBRvoEl-x020,4347
139
152
  src/resources/containers/data_processing/Dockerfile,sha256=VoB9d5yZiiWnqRfWrIq0gGNMzZg-eVy733OgP72ZgO0,950
140
153
  src/resources/containers/e2e-tests/Dockerfile,sha256=Q_aTyX_iaFY8j06XZkpMuggJnNO5daiLmmrvqaZHMxw,1611
141
- src/resources/locks/uv-agentic_rag-agent_engine.lock,sha256=M4TwcVwII-qHzTE8KgLZM0B9XM_loV1nDCXBuVAG6Ac,615811
142
- src/resources/locks/uv-agentic_rag-cloud_run.lock,sha256=ng8RMphRb5FoxtG7S9-kEGvolpXDjM5Vx4nykd0yzEY,782807
143
- src/resources/locks/uv-crewai_coding_crew-agent_engine.lock,sha256=IvLBCezxo8Txr5JO9tHjawVQryWXH-dhXWg6fxtjvJI,712926
144
- src/resources/locks/uv-crewai_coding_crew-cloud_run.lock,sha256=efnOBWavF8OlBW5AF0WkxkOQpvcb_zt6pN-Dkk9CE94,888350
145
- src/resources/locks/uv-langgraph_base_react-agent_engine.lock,sha256=XqI00QN9JsplRc5f8oEMVOwIDXPk-h05ZSLurCzUfGo,595857
146
- src/resources/locks/uv-langgraph_base_react-cloud_run.lock,sha256=iv6yt5pSMKivd-XVjvJwEvuTGzfsMfjSvTLTelv4w5s,758692
147
- src/resources/locks/uv-live_api-cloud_run.lock,sha256=TeUVt--pNkPrkjb08ek62oJwKKMb70pRSKpza0C-G6M,761749
154
+ src/resources/locks/uv-adk_base-agent_engine.lock,sha256=syI9vNoQn5E82OuKH2XyPMjxd5NiaBdXjzARp-CP6u0,628425
155
+ src/resources/locks/uv-adk_base-cloud_run.lock,sha256=TyGqfTb65fw2Dri6KH6SYQMDu4pOcMDqyERY0kn0K_Y,797636
156
+ src/resources/locks/uv-agentic_rag-agent_engine.lock,sha256=hEJuGbmoOBqlyU3-cZ-bAtBMP4WPD92ap8vVi34nqyM,638035
157
+ src/resources/locks/uv-agentic_rag-cloud_run.lock,sha256=3oJiJ1Ac7DRawQ6Hl6TzsU4FhRD383158RokHOxEGeo,807246
158
+ src/resources/locks/uv-crewai_coding_crew-agent_engine.lock,sha256=OqYAP4kYOXwiFRrOFBeB593rU_U1eI2TQuFgI5gAy9E,734457
159
+ src/resources/locks/uv-crewai_coding_crew-cloud_run.lock,sha256=4_6ZNQ7Q45lSmIVnWL8BRMSfPedkS9WSyk8ORoA6vpY,911344
160
+ src/resources/locks/uv-langgraph_base_react-agent_engine.lock,sha256=r7vPXAjYM7Lk_J-Qnp590PCEtNsWYXNDLKGSEBGSZpA,611193
161
+ src/resources/locks/uv-langgraph_base_react-cloud_run.lock,sha256=BiZP9gsmrlQ4ludBaXb14-_P0wbKp5ra9Nwn8QbYmJA,781686
162
+ src/resources/locks/uv-live_api-cloud_run.lock,sha256=_iSIEzx3Wjq4OtsZFcQ7IYsOIHyvBc7YCy1Qta9jRH4,784743
148
163
  src/resources/setup_cicd/cicd_variables.tf,sha256=PMflYe1TzQi63LORHkmeCktTYzXFplJgxffNH4DtuAQ,1244
149
164
  src/resources/setup_cicd/github.tf,sha256=scTBgeZlCM74N-pzhVKsnTN0PX9a5GboNl1HN3-LlCM,2791
150
165
  src/resources/setup_cicd/providers.tf,sha256=Km4z6IJt7x7PLaa0kyZbBrO2m3lpuIJZFD5jB7QBfF0,1122
151
166
  src/utils/generate_locks.py,sha256=xu5IAhGGBPkVQGSJX4kk7_JNDwWJUEaXAHbmaQIohbg,4386
152
167
  src/utils/lock_utils.py,sha256=_QdzQtgIbCmJ87s046_i1g966slVNmvr3bJDeHbRQSM,2419
153
168
  src/utils/watch_and_rebuild.py,sha256=vP4yIiA7E_lj5sfQdJUl8TXas6V7msDg8XWUutAC05Q,6679
154
- agent_starter_pack-0.2.3.dist-info/METADATA,sha256=54iuThzxPP5KGanSjYeJ_5S9yuPZMuO5Tn_l0i7ZK0A,7705
155
- agent_starter_pack-0.2.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
156
- agent_starter_pack-0.2.3.dist-info/entry_points.txt,sha256=U7uCxR7YulIhZ0L8R8Hui0Bsy6J7oyESBeDYJYMrQjA,56
157
- agent_starter_pack-0.2.3.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
158
- agent_starter_pack-0.2.3.dist-info/RECORD,,
169
+ agent_starter_pack-0.3.0.dist-info/METADATA,sha256=gqs2okJC9y34nuxb4SmgELfSO3Juldd8O_-GzDzyicA,8026
170
+ agent_starter_pack-0.3.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
171
+ agent_starter_pack-0.3.0.dist-info/entry_points.txt,sha256=U7uCxR7YulIhZ0L8R8Hui0Bsy6J7oyESBeDYJYMrQjA,56
172
+ agent_starter_pack-0.3.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
173
+ agent_starter_pack-0.3.0.dist-info/RECORD,,
@@ -0,0 +1,14 @@
1
+ # ADK: Minimal Agent Example
2
+
3
+ [![ADK Logo](./../../docs/images/adk_logo.png)](https://google.github.io/adk-docs/)
4
+
5
+ A basic agent built using the **[Google Agent Development Kit (ADK)](https://google.github.io/adk-docs/)**. This example demonstrates core ADK concepts like agent creation and tool integration in a minimal setup.
6
+
7
+ This agent uses the `gemini-2.0-flash` model and is equipped with two simple tools:
8
+ * `get_weather`: Simulates fetching weather (hardcoded for SF).
9
+ * `get_current_time`: Simulates fetching the time (hardcoded for SF).
10
+
11
+ ## Additional Resources
12
+
13
+ - **ADK Samples**: Explore more examples and use cases in the [official ADK Samples Repository](https://github.com/google/adk-samples)
14
+ - **ADK Documentation**: Learn more about ADK concepts and capabilities in the [official documentation](https://google.github.io/adk-docs/)
@@ -0,0 +1,66 @@
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
+ import datetime
16
+ import os
17
+ from zoneinfo import ZoneInfo
18
+
19
+ import google.auth
20
+ from google.adk.agents import Agent
21
+
22
+ _, project_id = google.auth.default()
23
+ os.environ.setdefault("GOOGLE_CLOUD_PROJECT", project_id)
24
+ os.environ.setdefault("GOOGLE_CLOUD_LOCATION", "us-central1")
25
+ os.environ.setdefault("GOOGLE_GENAI_USE_VERTEXAI", "True")
26
+
27
+
28
+ def get_weather(query: str) -> str:
29
+ """Simulates a web search. Use it get information on weather.
30
+
31
+ Args:
32
+ query: A string containing the location to get weather information for.
33
+
34
+ Returns:
35
+ A string with the simulated weather information for the queried location.
36
+ """
37
+ if "sf" in query.lower() or "san francisco" in query.lower():
38
+ return "It's 60 degrees and foggy."
39
+ return "It's 90 degrees and sunny."
40
+
41
+
42
+ def get_current_time(query: str) -> str:
43
+ """Simulates getting the current time for a city.
44
+
45
+ Args:
46
+ city: The name of the city to get the current time for.
47
+
48
+ Returns:
49
+ A string with the current time information.
50
+ """
51
+ if "sf" in query.lower() or "san francisco" in query.lower():
52
+ tz_identifier = "America/Los_Angeles"
53
+ else:
54
+ return f"Sorry, I don't have timezone information for query: {query}."
55
+
56
+ tz = ZoneInfo(tz_identifier)
57
+ now = datetime.datetime.now(tz)
58
+ return f"The current time for query {query} is {now.strftime('%Y-%m-%d %H:%M:%S %Z%z')}"
59
+
60
+
61
+ root_agent = Agent(
62
+ name="root_agent",
63
+ model="gemini-2.0-flash",
64
+ instruction="You are a helpful AI assistant designed to provide accurate and useful information.",
65
+ tools=[get_weather, get_current_time],
66
+ )
@@ -0,0 +1,305 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "# ADK Application Testing\n",
8
+ "\n",
9
+ "This notebook demonstrates how to test an ADK (Agent Development Kit) application.\n",
10
+ "It covers both local and remote testing, both with Agent Engine and Cloud Run.\n",
11
+ "\n",
12
+ "<img src=\"https://github.com/GoogleCloudPlatform/agent-starter-pack/blob/main/docs/images/adk_logo.png?raw=true\" width=\"400\">\n"
13
+ ]
14
+ },
15
+ {
16
+ "cell_type": "markdown",
17
+ "metadata": {},
18
+ "source": [
19
+ "### Import libraries"
20
+ ]
21
+ },
22
+ {
23
+ "cell_type": "code",
24
+ "execution_count": 1,
25
+ "metadata": {},
26
+ "outputs": [],
27
+ "source": [
28
+ "import json\n",
29
+ "\n",
30
+ "import requests\n",
31
+ "import vertexai.agent_engines"
32
+ ]
33
+ },
34
+ {
35
+ "cell_type": "markdown",
36
+ "metadata": {},
37
+ "source": [
38
+ "## If you are using Agent Engine\n",
39
+ "See more documentation at [Agent Engine Overview](https://cloud.google.com/vertex-ai/generative-ai/docs/agent-engine/overview)"
40
+ ]
41
+ },
42
+ {
43
+ "cell_type": "markdown",
44
+ "metadata": {},
45
+ "source": [
46
+ "### Local Testing\n",
47
+ "\n",
48
+ "You can import directly the AgentEngineApp class within your environment. "
49
+ ]
50
+ },
51
+ {
52
+ "cell_type": "code",
53
+ "execution_count": 2,
54
+ "metadata": {},
55
+ "outputs": [],
56
+ "source": [
57
+ "from app.agent import root_agent\n",
58
+ "from app.agent_engine_app import AgentEngineApp\n",
59
+ "\n",
60
+ "agent_engine = AgentEngineApp(agent=root_agent)"
61
+ ]
62
+ },
63
+ {
64
+ "cell_type": "code",
65
+ "execution_count": null,
66
+ "metadata": {},
67
+ "outputs": [],
68
+ "source": [
69
+ "for event in agent_engine.stream_query(message=\"hi!\", user_id=\"test\"):\n",
70
+ " print(event)"
71
+ ]
72
+ },
73
+ {
74
+ "cell_type": "markdown",
75
+ "metadata": {},
76
+ "source": [
77
+ "### Remote Testing"
78
+ ]
79
+ },
80
+ {
81
+ "cell_type": "code",
82
+ "execution_count": 4,
83
+ "metadata": {},
84
+ "outputs": [],
85
+ "source": [
86
+ "# Replace with your Agent Engine ID\n",
87
+ "AGENT_ENGINE_ID = \"projects/PROJECT_ID/locations/us-central1/reasoningEngines/ENGINE_ID\""
88
+ ]
89
+ },
90
+ {
91
+ "cell_type": "code",
92
+ "execution_count": 5,
93
+ "metadata": {},
94
+ "outputs": [],
95
+ "source": [
96
+ "remote_agent_engine = vertexai.agent_engines.get(AGENT_ENGINE_ID)"
97
+ ]
98
+ },
99
+ {
100
+ "cell_type": "code",
101
+ "execution_count": null,
102
+ "metadata": {},
103
+ "outputs": [],
104
+ "source": [
105
+ "for event in remote_agent_engine.stream_query(message=\"hi!\", user_id=\"test\"):\n",
106
+ " print(event)"
107
+ ]
108
+ },
109
+ {
110
+ "cell_type": "markdown",
111
+ "metadata": {},
112
+ "source": [
113
+ "## If you are using Cloud Run"
114
+ ]
115
+ },
116
+ {
117
+ "cell_type": "markdown",
118
+ "metadata": {},
119
+ "source": [
120
+ "### Local Testing\n",
121
+ "\n",
122
+ "> You can run the application locally via the `make backend` command."
123
+ ]
124
+ },
125
+ {
126
+ "cell_type": "markdown",
127
+ "metadata": {},
128
+ "source": [
129
+ "#### Create a session\n",
130
+ " Create a new session with user preferences and state information\n"
131
+ ]
132
+ },
133
+ {
134
+ "cell_type": "code",
135
+ "execution_count": null,
136
+ "metadata": {},
137
+ "outputs": [],
138
+ "source": [
139
+ "user_id = \"test_user_123\"\n",
140
+ "session_id = \"test_session_456\"\n",
141
+ "session_data = {\"state\": {\"preferred_language\": \"English\", \"visit_count\": 1}}\n",
142
+ "\n",
143
+ "session_url = f\"http://127.0.0.1:8000/apps/app/users/{user_id}/sessions/{session_id}\"\n",
144
+ "headers = {\"Content-Type\": \"application/json\"}\n",
145
+ "\n",
146
+ "session_response = requests.post(session_url, headers=headers, json=session_data)\n",
147
+ "print(f\"Session creation status code: {session_response.status_code}\")"
148
+ ]
149
+ },
150
+ {
151
+ "cell_type": "markdown",
152
+ "metadata": {},
153
+ "source": [
154
+ "#### Send a message\n",
155
+ "Send a message to the backend service and receive a streaming response\n"
156
+ ]
157
+ },
158
+ {
159
+ "cell_type": "code",
160
+ "execution_count": null,
161
+ "metadata": {},
162
+ "outputs": [],
163
+ "source": [
164
+ "message_data = {\n",
165
+ " \"app_name\": \"app\",\n",
166
+ " \"user_id\": user_id,\n",
167
+ " \"session_id\": session_id,\n",
168
+ " \"new_message\": {\"role\": \"user\", \"parts\": [{\"text\": \"Hello! Weather in New york?\"}]},\n",
169
+ " \"streaming\": True,\n",
170
+ "}\n",
171
+ "\n",
172
+ "message_url = \"http://127.0.0.1:8000/run_sse\"\n",
173
+ "message_response = requests.post(\n",
174
+ " message_url, headers=headers, json=message_data, stream=True\n",
175
+ ")\n",
176
+ "\n",
177
+ "print(f\"Message send status code: {message_response.status_code}\")\n",
178
+ "\n",
179
+ "# Print streamed response\n",
180
+ "for line in message_response.iter_lines():\n",
181
+ " if line:\n",
182
+ " line_str = line.decode(\"utf-8\")\n",
183
+ " if line_str.startswith(\"data: \"):\n",
184
+ " event_json = line_str[6:]\n",
185
+ " event = json.loads(event_json)\n",
186
+ " print(f\"Received event: {event}\")"
187
+ ]
188
+ },
189
+ {
190
+ "cell_type": "markdown",
191
+ "metadata": {},
192
+ "source": [
193
+ "#### Remote Testing\n",
194
+ "\n",
195
+ "For more information about authenticating HTTPS requests to Cloud Run services, see:\n",
196
+ "[Cloud Run Authentication Documentation](https://cloud.google.com/run/docs/triggering/https-request)\n",
197
+ "\n",
198
+ "Remote testing involves using a deployed service URL instead of localhost.\n",
199
+ "\n",
200
+ "Authentication is handled using GCP identity tokens instead of local credentials."
201
+ ]
202
+ },
203
+ {
204
+ "cell_type": "code",
205
+ "execution_count": 20,
206
+ "metadata": {},
207
+ "outputs": [],
208
+ "source": [
209
+ "ID_TOKEN = get_ipython().getoutput(\"gcloud auth print-identity-token -q\")[0]"
210
+ ]
211
+ },
212
+ {
213
+ "cell_type": "code",
214
+ "execution_count": null,
215
+ "metadata": {},
216
+ "outputs": [],
217
+ "source": [
218
+ "SERVICE_URL = \"YOUR_SERVICE_URL_HERE\" # Replace with your Cloud Run service URL"
219
+ ]
220
+ },
221
+ {
222
+ "cell_type": "markdown",
223
+ "metadata": {},
224
+ "source": [
225
+ "You'll need to first create a Session"
226
+ ]
227
+ },
228
+ {
229
+ "cell_type": "code",
230
+ "execution_count": null,
231
+ "metadata": {},
232
+ "outputs": [],
233
+ "source": [
234
+ "user_id = \"test_user_123\"\n",
235
+ "session_id = \"test_session_456\"\n",
236
+ "session_data = {\"state\": {\"preferred_language\": \"English\", \"visit_count\": 1}}\n",
237
+ "\n",
238
+ "session_url = f\"{SERVICE_URL}/apps/app/users/{user_id}/sessions/{session_id}\"\n",
239
+ "headers = {\"Content-Type\": \"application/json\", \"Authorization\": f\"Bearer {ID_TOKEN}\"}\n",
240
+ "\n",
241
+ "session_response = requests.post(session_url, headers=headers, json=session_data)\n",
242
+ "print(f\"Session creation status code: {session_response.status_code}\")"
243
+ ]
244
+ },
245
+ {
246
+ "cell_type": "markdown",
247
+ "metadata": {},
248
+ "source": [
249
+ "Then you will be able to send a message"
250
+ ]
251
+ },
252
+ {
253
+ "cell_type": "code",
254
+ "execution_count": null,
255
+ "metadata": {},
256
+ "outputs": [],
257
+ "source": [
258
+ "message_data = {\n",
259
+ " \"app_name\": \"app\",\n",
260
+ " \"user_id\": user_id,\n",
261
+ " \"session_id\": session_id,\n",
262
+ " \"new_message\": {\"role\": \"user\", \"parts\": [{\"text\": \"Hello! Weather in New york?\"}]},\n",
263
+ " \"streaming\": True,\n",
264
+ "}\n",
265
+ "\n",
266
+ "message_url = f\"{SERVICE_URL}/run_sse\"\n",
267
+ "message_response = requests.post(\n",
268
+ " message_url, headers=headers, json=message_data, stream=True\n",
269
+ ")\n",
270
+ "\n",
271
+ "print(f\"Message send status code: {message_response.status_code}\")\n",
272
+ "\n",
273
+ "# Print streamed response\n",
274
+ "for line in message_response.iter_lines():\n",
275
+ " if line:\n",
276
+ " line_str = line.decode(\"utf-8\")\n",
277
+ " if line_str.startswith(\"data: \"):\n",
278
+ " event_json = line_str[6:]\n",
279
+ " event = json.loads(event_json)\n",
280
+ " print(f\"Received event: {event}\")"
281
+ ]
282
+ }
283
+ ],
284
+ "metadata": {
285
+ "kernelspec": {
286
+ "display_name": ".venv",
287
+ "language": "python",
288
+ "name": "python3"
289
+ },
290
+ "language_info": {
291
+ "codemirror_mode": {
292
+ "name": "ipython",
293
+ "version": 3
294
+ },
295
+ "file_extension": ".py",
296
+ "mimetype": "text/x-python",
297
+ "name": "python",
298
+ "nbconvert_exporter": "python",
299
+ "pygments_lexer": "ipython3",
300
+ "version": "3.12.8"
301
+ }
302
+ },
303
+ "nbformat": 4,
304
+ "nbformat_minor": 2
305
+ }
@@ -0,0 +1,21 @@
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
+ description: "An agent implementing a base ReAct agent using Google's Agent Development Kit"
16
+ settings:
17
+ requires_data_ingestion: false
18
+ deployment_targets: ["agent_engine", "cloud_run"]
19
+ extra_dependencies: ["google-adk~=0.1.0"]
20
+ tags: ["adk"]
21
+ frontend_type: "streamlit_adk"