agent-starter-pack 0.7.1__py3-none-any.whl → 0.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. {agent_starter_pack-0.7.1.dist-info → agent_starter_pack-0.8.0.dist-info}/METADATA +5 -5
  2. {agent_starter_pack-0.7.1.dist-info → agent_starter_pack-0.8.0.dist-info}/RECORD +56 -54
  3. agents/README.md +7 -0
  4. agents/adk_base/notebooks/adk_app_testing.ipynb +8 -6
  5. agents/adk_base/template/.templateconfig.yaml +3 -1
  6. agents/adk_gemini_fullstack/notebooks/adk_app_testing.ipynb +8 -6
  7. agents/adk_gemini_fullstack/template/.templateconfig.yaml +2 -1
  8. agents/agentic_rag/notebooks/adk_app_testing.ipynb +8 -6
  9. agents/agentic_rag/template/.templateconfig.yaml +2 -1
  10. agents/crewai_coding_crew/template/.templateconfig.yaml +1 -1
  11. llm.txt +7 -0
  12. src/base_template/README.md +2 -2
  13. src/base_template/deployment/cd/deploy-to-prod.yaml +1 -16
  14. src/base_template/deployment/cd/staging.yaml +4 -19
  15. src/base_template/deployment/terraform/apis.tf +2 -2
  16. src/base_template/deployment/terraform/build_triggers.tf +5 -5
  17. src/base_template/deployment/terraform/dev/apis.tf +8 -1
  18. src/base_template/deployment/terraform/dev/variables.tf +3 -1
  19. src/base_template/deployment/terraform/iam.tf +8 -8
  20. src/base_template/deployment/terraform/locals.tf +9 -2
  21. src/base_template/deployment/terraform/log_sinks.tf +2 -2
  22. src/base_template/deployment/terraform/service_accounts.tf +3 -3
  23. src/base_template/deployment/terraform/storage.tf +7 -7
  24. src/base_template/deployment/terraform/variables.tf +3 -0
  25. src/base_template/pyproject.toml +4 -3
  26. src/cli/commands/create.py +38 -0
  27. src/cli/commands/setup_cicd.py +2 -2
  28. src/cli/utils/cicd.py +2 -2
  29. src/cli/utils/template.py +34 -0
  30. src/deployment_targets/agent_engine/app/agent_engine_app.py +7 -7
  31. src/deployment_targets/agent_engine/tests/load_test/README.md +1 -6
  32. src/deployment_targets/agent_engine/tests/load_test/load_test.py +13 -3
  33. src/deployment_targets/cloud_run/Dockerfile +3 -0
  34. src/deployment_targets/cloud_run/app/server.py +18 -0
  35. src/deployment_targets/cloud_run/deployment/terraform/dev/service.tf +231 -0
  36. src/deployment_targets/cloud_run/deployment/terraform/service.tf +360 -0
  37. src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +8 -5
  38. src/deployment_targets/cloud_run/tests/load_test/README.md +2 -2
  39. src/deployment_targets/cloud_run/tests/load_test/load_test.py +21 -17
  40. src/frontends/adk_gemini_fullstack/frontend/src/App.tsx +2 -3
  41. src/resources/docs/adk-cheatsheet.md +1 -1
  42. src/resources/locks/uv-adk_base-agent_engine.lock +805 -200
  43. src/resources/locks/uv-adk_base-cloud_run.lock +1085 -234
  44. src/resources/locks/uv-adk_gemini_fullstack-agent_engine.lock +805 -200
  45. src/resources/locks/uv-adk_gemini_fullstack-cloud_run.lock +1085 -234
  46. src/resources/locks/uv-agentic_rag-agent_engine.lock +386 -283
  47. src/resources/locks/uv-agentic_rag-cloud_run.lock +513 -349
  48. src/resources/locks/uv-crewai_coding_crew-agent_engine.lock +492 -497
  49. src/resources/locks/uv-crewai_coding_crew-cloud_run.lock +671 -613
  50. src/resources/locks/uv-langgraph_base_react-agent_engine.lock +500 -391
  51. src/resources/locks/uv-langgraph_base_react-cloud_run.lock +682 -510
  52. src/resources/locks/uv-live_api-cloud_run.lock +686 -486
  53. src/resources/setup_cicd/github.tf +2 -2
  54. src/deployment_targets/cloud_run/uv.lock +0 -6952
  55. {agent_starter_pack-0.7.1.dist-info → agent_starter_pack-0.8.0.dist-info}/WHEEL +0 -0
  56. {agent_starter_pack-0.7.1.dist-info → agent_starter_pack-0.8.0.dist-info}/entry_points.txt +0 -0
  57. {agent_starter_pack-0.7.1.dist-info → agent_starter_pack-0.8.0.dist-info}/licenses/LICENSE +0 -0
@@ -12,7 +12,6 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- import json
16
15
  import os
17
16
  import time
18
17
  {%- if "adk" in cookiecutter.tags %}
@@ -44,15 +43,19 @@ class ChatStreamUser(HttpUser):
44
43
  {%- if "adk" in cookiecutter.tags %}
45
44
  # Create session first
46
45
  user_id = f"user_{uuid.uuid4()}"
47
- session_id = f"session_{uuid.uuid4()}"
48
- session_data = {"state": {"preferred_language": "English", "visit_count": 5}}
49
- requests.post(
50
- f"{self.client.base_url}/apps/app/users/{user_id}/sessions/{session_id}",
46
+ session_data = {"state": {"preferred_language": "English", "visit_count": 1}}
47
+
48
+ session_url = f"{self.client.base_url}/apps/app/users/{user_id}/sessions"
49
+ session_response = requests.post(
50
+ session_url,
51
51
  headers=headers,
52
52
  json=session_data,
53
53
  timeout=10,
54
54
  )
55
55
 
56
+ # Get session_id from response
57
+ session_id = session_response.json()["id"]
58
+
56
59
  # Send chat message
57
60
  data = {
58
61
  "app_name": "app",
@@ -60,7 +63,7 @@ class ChatStreamUser(HttpUser):
60
63
  "session_id": session_id,
61
64
  "new_message": {
62
65
  "role": "user",
63
- "parts": [{"text": "What's the weather in San Francisco?"}],
66
+ "parts": [{"text": "Hello! Weather in New york?"}],
64
67
  },
65
68
  "streaming": True,
66
69
  }
@@ -93,24 +96,25 @@ class ChatStreamUser(HttpUser):
93
96
  events = []
94
97
  for line in response.iter_lines():
95
98
  if line:
96
- {%- if "adk" in cookiecutter.tags %}
97
- # SSE format is "data: {json}"
98
99
  line_str = line.decode("utf-8")
99
- if line_str.startswith("data: "):
100
- event_json = line_str[6:] # Remove "data: " prefix
101
- event = json.loads(event_json)
102
- events.append(event)
103
- {%- else %}
104
- event = json.loads(line)
105
- events.append(event)
106
- {%- endif %}
100
+ events.append(line_str)
101
+
102
+ if "429 Too Many Requests" in line_str:
103
+ self.environment.events.request.fire(
104
+ request_type="POST",
105
+ name=f"{ENDPOINT} rate_limited 429s",
106
+ response_time=0,
107
+ response_length=len(line),
108
+ response=response,
109
+ context={},
110
+ )
107
111
  end_time = time.time()
108
112
  total_time = end_time - start_time
109
113
  self.environment.events.request.fire(
110
114
  request_type="POST",
111
115
  name=f"{ENDPOINT} end",
112
116
  response_time=total_time * 1000, # Convert to milliseconds
113
- response_length=len(json.dumps(events)),
117
+ response_length=len(events),
114
118
  response=response,
115
119
  context={},
116
120
  )
@@ -81,12 +81,11 @@ export default function App() {
81
81
  };
82
82
 
83
83
  const createSession = async (): Promise<{userId: string, sessionId: string, appName: string}> => {
84
- const generatedSessionId = uuidv4();
85
- const response = await fetch(`/api/apps/app/users/u_999/sessions/${generatedSessionId}`, {
84
+ const response = await fetch(`/api/apps/app/users/u_999/sessions`, {
86
85
  method: "POST",
87
86
  headers: {
88
87
  "Content-Type": "application/json"
89
- }
88
+ },
90
89
  });
91
90
 
92
91
  if (!response.ok) {
@@ -994,7 +994,7 @@ Serverless container platform for custom web applications.
994
994
  # Ensure your agent_folder (e.g., 'my_first_agent') is in the same directory as main.py
995
995
  app: FastAPI = get_fast_api_app(
996
996
  agents_dir=os.path.dirname(os.path.abspath(__file__)),
997
- session_db_url="sqlite:///./sessions.db", # In-container SQLite, for simple cases
997
+ session_service_uri="sqlite:///./sessions.db", # In-container SQLite, for simple cases
998
998
  # For production: use a persistent DB (Cloud SQL) or VertexAiSessionService
999
999
  allow_origins=["*"],
1000
1000
  web=True # Serve ADK UI