google-adk 0.0.3__py3-none-any.whl → 0.0.4__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 (184) hide show
  1. google/adk/agents/run_config.py +4 -0
  2. google/adk/auth/auth_preprocessor.py +19 -16
  3. google/adk/cli/browser/index.html +1 -1
  4. google/adk/cli/browser/{main-SY2WYYGV.js → main-CU22TRPI.js} +30 -30
  5. google/adk/cli/cli.py +8 -8
  6. google/adk/cli/cli_deploy.py +2 -4
  7. google/adk/cli/cli_tools_click.py +6 -6
  8. google/adk/flows/llm_flows/contents.py +21 -1
  9. google/adk/flows/llm_flows/functions.py +3 -1
  10. google/adk/models/google_llm.py +0 -1
  11. google/adk/runners.py +13 -2
  12. google/adk/version.py +1 -1
  13. {google_adk-0.0.3.dist-info → google_adk-0.0.4.dist-info}/METADATA +4 -2
  14. google_adk-0.0.4.dist-info/RECORD +175 -0
  15. {google_adk-0.0.3.dist-info → google_adk-0.0.4.dist-info}/WHEEL +1 -1
  16. google_adk-0.0.4.dist-info/licenses/LICENSE +202 -0
  17. google/adk/._version.py +0 -0
  18. google/adk/docs/Makefile +0 -20
  19. google/adk/docs/build/doctrees/google-adk.doctree +0 -0
  20. google/adk/docs/build/html/_sources/google-adk.rst.txt +0 -98
  21. google/adk/docs/build/html/_sources/index.rst.txt +0 -7
  22. google/adk/docs/build/html/_static/autodoc_pydantic.css +0 -27
  23. google/adk/docs/build/html/_static/basic.css +0 -925
  24. google/adk/docs/build/html/_static/debug.css +0 -85
  25. google/adk/docs/build/html/_static/doctools.js +0 -156
  26. google/adk/docs/build/html/_static/documentation_options.js +0 -29
  27. google/adk/docs/build/html/_static/file.png +0 -0
  28. google/adk/docs/build/html/_static/language_data.js +0 -199
  29. google/adk/docs/build/html/_static/minus.png +0 -0
  30. google/adk/docs/build/html/_static/plus.png +0 -0
  31. google/adk/docs/build/html/_static/pygments.css +0 -274
  32. google/adk/docs/build/html/_static/scripts/furo-extensions.js +0 -16
  33. google/adk/docs/build/html/_static/scripts/furo.js +0 -19
  34. google/adk/docs/build/html/_static/scripts/furo.js.LICENSE.txt +0 -7
  35. google/adk/docs/build/html/_static/scripts/furo.js.map +0 -1
  36. google/adk/docs/build/html/_static/searchtools.js +0 -620
  37. google/adk/docs/build/html/_static/skeleton.css +0 -312
  38. google/adk/docs/build/html/_static/sphinx_highlight.js +0 -170
  39. google/adk/docs/build/html/_static/styles/furo-extensions.css +0 -18
  40. google/adk/docs/build/html/_static/styles/furo-extensions.css.map +0 -1
  41. google/adk/docs/build/html/_static/styles/furo.css +0 -18
  42. google/adk/docs/build/html/_static/styles/furo.css.map +0 -1
  43. google/adk/docs/build/html/genindex.html +0 -861
  44. google/adk/docs/build/html/google-adk.html +0 -5461
  45. google/adk/docs/build/html/index.html +0 -567
  46. google/adk/docs/build/html/objects.inv +0 -0
  47. google/adk/docs/build/html/py-modindex.html +0 -373
  48. google/adk/docs/build/html/search.html +0 -333
  49. google/adk/docs/build/html/searchindex.js +0 -17
  50. google/adk/docs/source/conf.py +0 -133
  51. google/adk/docs/source/google-adk.rst +0 -98
  52. google/adk/docs/source/index.rst +0 -7
  53. google/adk/tests/__init__.py +0 -14
  54. google/adk/tests/integration/.env.example +0 -10
  55. google/adk/tests/integration/__init__.py +0 -18
  56. google/adk/tests/integration/conftest.py +0 -119
  57. google/adk/tests/integration/fixture/__init__.py +0 -14
  58. google/adk/tests/integration/fixture/agent_with_config/__init__.py +0 -15
  59. google/adk/tests/integration/fixture/agent_with_config/agent.py +0 -88
  60. google/adk/tests/integration/fixture/callback_agent/__init__.py +0 -15
  61. google/adk/tests/integration/fixture/callback_agent/agent.py +0 -105
  62. google/adk/tests/integration/fixture/context_update_test/OWNERS +0 -1
  63. google/adk/tests/integration/fixture/context_update_test/__init__.py +0 -15
  64. google/adk/tests/integration/fixture/context_update_test/agent.py +0 -43
  65. google/adk/tests/integration/fixture/context_update_test/successful_test.session.json +0 -582
  66. google/adk/tests/integration/fixture/context_variable_agent/__init__.py +0 -15
  67. google/adk/tests/integration/fixture/context_variable_agent/agent.py +0 -115
  68. google/adk/tests/integration/fixture/customer_support_ma/__init__.py +0 -15
  69. google/adk/tests/integration/fixture/customer_support_ma/agent.py +0 -172
  70. google/adk/tests/integration/fixture/ecommerce_customer_service_agent/__init__.py +0 -15
  71. google/adk/tests/integration/fixture/ecommerce_customer_service_agent/agent.py +0 -338
  72. google/adk/tests/integration/fixture/ecommerce_customer_service_agent/order_query.test.json +0 -69
  73. google/adk/tests/integration/fixture/ecommerce_customer_service_agent/test_config.json +0 -6
  74. google/adk/tests/integration/fixture/flow_complex_spark/__init__.py +0 -15
  75. google/adk/tests/integration/fixture/flow_complex_spark/agent.py +0 -182
  76. google/adk/tests/integration/fixture/flow_complex_spark/sample.session.json +0 -190
  77. google/adk/tests/integration/fixture/hello_world_agent/__init__.py +0 -15
  78. google/adk/tests/integration/fixture/hello_world_agent/agent.py +0 -95
  79. google/adk/tests/integration/fixture/hello_world_agent/roll_die.test.json +0 -24
  80. google/adk/tests/integration/fixture/hello_world_agent/test_config.json +0 -6
  81. google/adk/tests/integration/fixture/home_automation_agent/__init__.py +0 -15
  82. google/adk/tests/integration/fixture/home_automation_agent/agent.py +0 -304
  83. google/adk/tests/integration/fixture/home_automation_agent/simple_test.test.json +0 -5
  84. google/adk/tests/integration/fixture/home_automation_agent/simple_test2.test.json +0 -5
  85. google/adk/tests/integration/fixture/home_automation_agent/test_config.json +0 -5
  86. google/adk/tests/integration/fixture/home_automation_agent/test_files/dependent_tool_calls.test.json +0 -18
  87. google/adk/tests/integration/fixture/home_automation_agent/test_files/memorizing_past_events/eval_data.test.json +0 -17
  88. google/adk/tests/integration/fixture/home_automation_agent/test_files/memorizing_past_events/test_config.json +0 -6
  89. google/adk/tests/integration/fixture/home_automation_agent/test_files/simple_multi_turn_conversation.test.json +0 -18
  90. google/adk/tests/integration/fixture/home_automation_agent/test_files/simple_test.test.json +0 -17
  91. google/adk/tests/integration/fixture/home_automation_agent/test_files/simple_test2.test.json +0 -5
  92. google/adk/tests/integration/fixture/home_automation_agent/test_files/test_config.json +0 -5
  93. google/adk/tests/integration/fixture/tool_agent/__init__.py +0 -15
  94. google/adk/tests/integration/fixture/tool_agent/agent.py +0 -218
  95. google/adk/tests/integration/fixture/tool_agent/files/Agent_test_plan.pdf +0 -0
  96. google/adk/tests/integration/fixture/trip_planner_agent/__init__.py +0 -15
  97. google/adk/tests/integration/fixture/trip_planner_agent/agent.py +0 -110
  98. google/adk/tests/integration/fixture/trip_planner_agent/initial.session.json +0 -13
  99. google/adk/tests/integration/fixture/trip_planner_agent/test_config.json +0 -5
  100. google/adk/tests/integration/fixture/trip_planner_agent/test_files/initial.session.json +0 -13
  101. google/adk/tests/integration/fixture/trip_planner_agent/test_files/test_config.json +0 -5
  102. google/adk/tests/integration/fixture/trip_planner_agent/test_files/trip_inquiry_sub_agent.test.json +0 -7
  103. google/adk/tests/integration/fixture/trip_planner_agent/trip_inquiry.test.json +0 -19
  104. google/adk/tests/integration/models/__init__.py +0 -14
  105. google/adk/tests/integration/models/test_google_llm.py +0 -65
  106. google/adk/tests/integration/test_callback.py +0 -70
  107. google/adk/tests/integration/test_context_variable.py +0 -67
  108. google/adk/tests/integration/test_evalute_agent_in_fixture.py +0 -76
  109. google/adk/tests/integration/test_multi_agent.py +0 -28
  110. google/adk/tests/integration/test_multi_turn.py +0 -42
  111. google/adk/tests/integration/test_single_agent.py +0 -23
  112. google/adk/tests/integration/test_sub_agent.py +0 -26
  113. google/adk/tests/integration/test_system_instruction.py +0 -177
  114. google/adk/tests/integration/test_tools.py +0 -287
  115. google/adk/tests/integration/test_with_test_file.py +0 -34
  116. google/adk/tests/integration/tools/__init__.py +0 -14
  117. google/adk/tests/integration/utils/__init__.py +0 -16
  118. google/adk/tests/integration/utils/asserts.py +0 -75
  119. google/adk/tests/integration/utils/test_runner.py +0 -97
  120. google/adk/tests/unittests/__init__.py +0 -14
  121. google/adk/tests/unittests/agents/__init__.py +0 -14
  122. google/adk/tests/unittests/agents/test_base_agent.py +0 -407
  123. google/adk/tests/unittests/agents/test_langgraph_agent.py +0 -191
  124. google/adk/tests/unittests/agents/test_llm_agent_callbacks.py +0 -138
  125. google/adk/tests/unittests/agents/test_llm_agent_fields.py +0 -231
  126. google/adk/tests/unittests/agents/test_loop_agent.py +0 -136
  127. google/adk/tests/unittests/agents/test_parallel_agent.py +0 -92
  128. google/adk/tests/unittests/agents/test_sequential_agent.py +0 -114
  129. google/adk/tests/unittests/artifacts/__init__.py +0 -14
  130. google/adk/tests/unittests/artifacts/test_artifact_service.py +0 -276
  131. google/adk/tests/unittests/auth/test_auth_handler.py +0 -575
  132. google/adk/tests/unittests/conftest.py +0 -73
  133. google/adk/tests/unittests/fast_api/__init__.py +0 -14
  134. google/adk/tests/unittests/fast_api/test_fast_api.py +0 -269
  135. google/adk/tests/unittests/flows/__init__.py +0 -14
  136. google/adk/tests/unittests/flows/llm_flows/__init__.py +0 -14
  137. google/adk/tests/unittests/flows/llm_flows/_test_examples.py +0 -142
  138. google/adk/tests/unittests/flows/llm_flows/test_agent_transfer.py +0 -311
  139. google/adk/tests/unittests/flows/llm_flows/test_functions_long_running.py +0 -244
  140. google/adk/tests/unittests/flows/llm_flows/test_functions_request_euc.py +0 -346
  141. google/adk/tests/unittests/flows/llm_flows/test_functions_sequential.py +0 -93
  142. google/adk/tests/unittests/flows/llm_flows/test_functions_simple.py +0 -258
  143. google/adk/tests/unittests/flows/llm_flows/test_identity.py +0 -66
  144. google/adk/tests/unittests/flows/llm_flows/test_instructions.py +0 -164
  145. google/adk/tests/unittests/flows/llm_flows/test_model_callbacks.py +0 -142
  146. google/adk/tests/unittests/flows/llm_flows/test_other_configs.py +0 -46
  147. google/adk/tests/unittests/flows/llm_flows/test_tool_callbacks.py +0 -269
  148. google/adk/tests/unittests/models/__init__.py +0 -14
  149. google/adk/tests/unittests/models/test_google_llm.py +0 -224
  150. google/adk/tests/unittests/models/test_litellm.py +0 -804
  151. google/adk/tests/unittests/models/test_models.py +0 -60
  152. google/adk/tests/unittests/sessions/__init__.py +0 -14
  153. google/adk/tests/unittests/sessions/test_session_service.py +0 -227
  154. google/adk/tests/unittests/sessions/test_vertex_ai_session_service.py +0 -246
  155. google/adk/tests/unittests/streaming/__init__.py +0 -14
  156. google/adk/tests/unittests/streaming/test_streaming.py +0 -50
  157. google/adk/tests/unittests/tools/__init__.py +0 -14
  158. google/adk/tests/unittests/tools/apihub_tool/clients/test_apihub_client.py +0 -499
  159. google/adk/tests/unittests/tools/apihub_tool/test_apihub_toolset.py +0 -204
  160. google/adk/tests/unittests/tools/application_integration_tool/clients/test_connections_client.py +0 -600
  161. google/adk/tests/unittests/tools/application_integration_tool/clients/test_integration_client.py +0 -630
  162. google/adk/tests/unittests/tools/application_integration_tool/test_application_integration_toolset.py +0 -345
  163. google/adk/tests/unittests/tools/google_api_tool/__init__.py +0 -13
  164. google/adk/tests/unittests/tools/google_api_tool/test_googleapi_to_openapi_converter.py +0 -657
  165. google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_auto_auth_credential_exchanger.py +0 -145
  166. google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_base_auth_credential_exchanger.py +0 -68
  167. google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_oauth2_exchanger.py +0 -153
  168. google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_service_account_exchanger.py +0 -196
  169. google/adk/tests/unittests/tools/openapi_tool/auth/test_auth_helper.py +0 -573
  170. google/adk/tests/unittests/tools/openapi_tool/common/test_common.py +0 -436
  171. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test.yaml +0 -1367
  172. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_openapi_spec_parser.py +0 -628
  173. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_openapi_toolset.py +0 -139
  174. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_operation_parser.py +0 -406
  175. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_rest_api_tool.py +0 -966
  176. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_tool_auth_handler.py +0 -201
  177. google/adk/tests/unittests/tools/retrieval/__init__.py +0 -14
  178. google/adk/tests/unittests/tools/retrieval/test_vertex_ai_rag_retrieval.py +0 -147
  179. google/adk/tests/unittests/tools/test_agent_tool.py +0 -167
  180. google/adk/tests/unittests/tools/test_base_tool.py +0 -141
  181. google/adk/tests/unittests/tools/test_build_function_declaration.py +0 -277
  182. google/adk/tests/unittests/utils.py +0 -304
  183. google_adk-0.0.3.dist-info/RECORD +0 -340
  184. {google_adk-0.0.3.dist-info → google_adk-0.0.4.dist-info}/entry_points.txt +0 -0
@@ -1,269 +0,0 @@
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 asyncio
16
- import json
17
- import sys
18
- import threading
19
- import time
20
- import types as ptypes
21
- from typing import AsyncGenerator
22
-
23
- from google.adk.agents import BaseAgent
24
- from google.adk.agents import LiveRequest
25
- from google.adk.agents.run_config import RunConfig
26
- from google.adk.cli.fast_api import AgentRunRequest
27
- from google.adk.cli.fast_api import get_fast_api_app
28
- from google.adk.cli.utils import envs
29
- from google.adk.events import Event
30
- from google.adk.runners import Runner
31
- from google.genai import types
32
- import httpx
33
- import pytest
34
- from uvicorn.main import run as uvicorn_run
35
- import websockets
36
-
37
-
38
- # Here we “fake” the agent module that get_fast_api_app expects.
39
- # The server code does: `agent_module = importlib.import_module(agent_name)`
40
- # and then accesses: agent_module.agent.root_agent.
41
- class DummyAgent(BaseAgent):
42
- pass
43
-
44
-
45
- dummy_module = ptypes.ModuleType("test_agent")
46
- dummy_module.agent = ptypes.SimpleNamespace(
47
- root_agent=DummyAgent(name="dummy_agent")
48
- )
49
- sys.modules["test_app"] = dummy_module
50
- envs.load_dotenv_for_agent("test_app", ".")
51
-
52
- event1 = Event(
53
- author="dummy agent",
54
- invocation_id="invocation_id",
55
- content=types.Content(
56
- role="model", parts=[types.Part(text="LLM reply", inline_data=None)]
57
- ),
58
- )
59
-
60
- event2 = Event(
61
- author="dummy agent",
62
- invocation_id="invocation_id",
63
- content=types.Content(
64
- role="model",
65
- parts=[
66
- types.Part(
67
- text=None,
68
- inline_data=types.Blob(
69
- mime_type="audio/pcm;rate=24000", data=b"\x00\xFF"
70
- ),
71
- )
72
- ],
73
- ),
74
- )
75
-
76
- event3 = Event(
77
- author="dummy agent", invocation_id="invocation_id", interrupted=True
78
- )
79
-
80
-
81
- # For simplicity, we patch Runner.run_live to yield dummy events.
82
- # We use SimpleNamespace to mimic attribute-access (i.e. event.content.parts).
83
- async def dummy_run_live(
84
- self, session, live_request_queue
85
- ) -> AsyncGenerator[Event, None]:
86
- # Immediately yield a dummy event with a text reply.
87
- yield event1
88
- await asyncio.sleep(0)
89
-
90
- yield event2
91
- await asyncio.sleep(0)
92
-
93
- yield event3
94
-
95
- raise Exception()
96
-
97
-
98
- async def dummy_run_async(
99
- self,
100
- user_id,
101
- session_id,
102
- new_message,
103
- run_config: RunConfig = RunConfig(),
104
- ) -> AsyncGenerator[Event, None]:
105
- # Immediately yield a dummy event with a text reply.
106
- yield event1
107
- await asyncio.sleep(0)
108
-
109
- yield event2
110
- await asyncio.sleep(0)
111
-
112
- yield event3
113
-
114
- return
115
-
116
-
117
- ###############################################################################
118
- # Pytest fixtures to patch methods and start the server
119
- ###############################################################################
120
-
121
-
122
- @pytest.fixture(autouse=True)
123
- def patch_runner(monkeypatch):
124
- # Patch the Runner methods to use our dummy implementations.
125
- monkeypatch.setattr(Runner, "run_live", dummy_run_live)
126
- monkeypatch.setattr(Runner, "run_async", dummy_run_async)
127
-
128
-
129
- @pytest.fixture(scope="module", autouse=True)
130
- def start_server():
131
- """Start the FastAPI server in a background thread."""
132
-
133
- def run_server():
134
- uvicorn_run(
135
- get_fast_api_app(agent_dir=".", web=True),
136
- host="0.0.0.0",
137
- log_config=None,
138
- )
139
-
140
- server_thread = threading.Thread(target=run_server, daemon=True)
141
- server_thread.start()
142
- # Wait a moment to ensure the server is up.
143
- time.sleep(2)
144
- yield
145
- # The daemon thread will be terminated when tests complete.
146
-
147
-
148
- @pytest.mark.asyncio
149
- async def test_sse_endpoint():
150
- base_http_url = "http://127.0.0.1:8000"
151
- user_id = "test_user"
152
- session_id = "test_session"
153
-
154
- # Ensure that the session exists (create if necessary).
155
- url_create = (
156
- f"{base_http_url}/apps/test_app/users/{user_id}/sessions/{session_id}"
157
- )
158
- httpx.post(url_create, json={"state": {}})
159
-
160
- async with httpx.AsyncClient() as client:
161
- # Make a POST request to the SSE endpoint.
162
- async with client.stream(
163
- "POST",
164
- f"{base_http_url}/run_sse",
165
- json=json.loads(
166
- AgentRunRequest(
167
- app_name="test_app",
168
- user_id=user_id,
169
- session_id=session_id,
170
- new_message=types.Content(
171
- parts=[types.Part(text="Hello via SSE", inline_data=None)]
172
- ),
173
- streaming=False,
174
- ).model_dump_json(exclude_none=True)
175
- ),
176
- ) as response:
177
- # Ensure the status code and header are as expected.
178
- assert response.status_code == 200
179
- assert (
180
- response.headers.get("content-type")
181
- == "text/event-stream; charset=utf-8"
182
- )
183
-
184
- # Iterate over events from the stream.
185
- event_count = 0
186
- event_buffer = ""
187
-
188
- async for line in response.aiter_lines():
189
- event_buffer += line + "\n"
190
-
191
- # An SSE event is terminated by an empty line (double newline)
192
- if line == "" and event_buffer.strip():
193
- # Process the complete event
194
- event_data = None
195
- for event_line in event_buffer.split("\n"):
196
- if event_line.startswith("data: "):
197
- event_data = event_line[6:] # Remove "data: " prefix
198
-
199
- if event_data:
200
- event_count += 1
201
- if event_count == 1:
202
- assert event_data == event1.model_dump_json(
203
- exclude_none=True, by_alias=True
204
- )
205
- elif event_count == 2:
206
- assert event_data == event2.model_dump_json(
207
- exclude_none=True, by_alias=True
208
- )
209
- elif event_count == 3:
210
- assert event_data == event3.model_dump_json(
211
- exclude_none=True, by_alias=True
212
- )
213
- else:
214
- pass
215
-
216
- # Reset buffer for next event
217
- event_buffer = ""
218
-
219
- assert event_count == 3 # Expecting 3 events from dummy_run_async
220
-
221
-
222
- @pytest.mark.asyncio
223
- async def test_websocket_endpoint():
224
- base_http_url = "http://127.0.0.1:8000"
225
- base_ws_url = "ws://127.0.0.1:8000"
226
- user_id = "test_user"
227
- session_id = "test_session"
228
-
229
- # Ensure that the session exists (create if necessary).
230
- url_create = (
231
- f"{base_http_url}/apps/test_app/users/{user_id}/sessions/{session_id}"
232
- )
233
- httpx.post(url_create, json={"state": {}})
234
-
235
- ws_url = f"{base_ws_url}/run_live?app_name=test_app&user_id={user_id}&session_id={session_id}"
236
- async with websockets.connect(ws_url) as ws:
237
- # --- Test sending text data ---
238
- text_payload = LiveRequest(
239
- content=types.Content(
240
- parts=[types.Part(text="Hello via WebSocket", inline_data=None)]
241
- )
242
- )
243
- await ws.send(text_payload.model_dump_json())
244
- # Wait for a reply from our dummy_run_live.
245
- reply = await ws.recv()
246
- event = Event.model_validate_json(reply)
247
- assert event.content.parts[0].text == "LLM reply"
248
-
249
- # --- Test sending binary data (allowed mime type "audio/pcm") ---
250
- sample_audio = b"\x00\xFF"
251
- binary_payload = LiveRequest(
252
- blob=types.Blob(
253
- mime_type="audio/pcm",
254
- data=sample_audio,
255
- )
256
- )
257
- await ws.send(binary_payload.model_dump_json())
258
- # Wait for a reply.
259
- reply = await ws.recv()
260
- event = Event.model_validate_json(reply)
261
- assert (
262
- event.content.parts[0].inline_data.mime_type == "audio/pcm;rate=24000"
263
- )
264
- assert event.content.parts[0].inline_data.data == b"\x00\xFF"
265
-
266
- reply = await ws.recv()
267
- event = Event.model_validate_json(reply)
268
- assert event.interrupted is True
269
- assert event.content is None
@@ -1,14 +0,0 @@
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
-
@@ -1,14 +0,0 @@
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
-
@@ -1,142 +0,0 @@
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
- # TODO: delete and rewrite unit tests
16
- from google.adk.agents import Agent
17
- from google.adk.examples import BaseExampleProvider
18
- from google.adk.examples import Example
19
- from google.adk.flows.llm_flows import examples
20
- from google.adk.models.base_llm import LlmRequest
21
- from google.genai import types
22
- import pytest
23
-
24
- from ... import utils
25
-
26
-
27
- @pytest.mark.asyncio
28
- async def test_no_examples():
29
- request = LlmRequest(
30
- model="gemini-1.5-flash",
31
- config=types.GenerateContentConfig(system_instruction=""),
32
- )
33
- agent = Agent(model="gemini-1.5-flash", name="agent", examples=[])
34
- invocation_context = utils.create_invocation_context(
35
- agent=agent, user_content=""
36
- )
37
-
38
- async for _ in examples.request_processor.run_async(
39
- invocation_context,
40
- request,
41
- ):
42
- pass
43
-
44
- assert request.config.system_instruction == ""
45
-
46
-
47
- @pytest.mark.asyncio
48
- async def test_agent_examples():
49
- example_list = [
50
- Example(
51
- input=types.Content(
52
- role="user",
53
- parts=[types.Part.from_text(text="test1")],
54
- ),
55
- output=[
56
- types.Content(
57
- role="model",
58
- parts=[types.Part.from_text(text="response1")],
59
- ),
60
- ],
61
- )
62
- ]
63
- request = LlmRequest(
64
- model="gemini-1.5-flash",
65
- config=types.GenerateContentConfig(system_instruction=""),
66
- )
67
- agent = Agent(
68
- model="gemini-1.5-flash",
69
- name="agent",
70
- examples=example_list,
71
- )
72
- invocation_context = utils.create_invocation_context(
73
- agent=agent, user_content="test"
74
- )
75
-
76
- async for _ in examples.request_processor.run_async(
77
- invocation_context,
78
- request,
79
- ):
80
- pass
81
-
82
- assert (
83
- request.config.system_instruction
84
- == "<EXAMPLES>\nBegin few-shot\nThe following are examples of user"
85
- " queries and model responses using the available tools.\n\nEXAMPLE"
86
- " 1:\nBegin example\n[user]\ntest1\n\n[model]\nresponse1\nEnd"
87
- " example\n\nEnd few-shot\nNow, try to follow these examples and"
88
- " complete the following conversation\n<EXAMPLES>"
89
- )
90
-
91
-
92
- @pytest.mark.asyncio
93
- async def test_agent_base_example_provider():
94
- class TestExampleProvider(BaseExampleProvider):
95
-
96
- def get_examples(self, query: str) -> list[Example]:
97
- if query == "test":
98
- return [
99
- Example(
100
- input=types.Content(
101
- role="user",
102
- parts=[types.Part.from_text(text="test")],
103
- ),
104
- output=[
105
- types.Content(
106
- role="model",
107
- parts=[types.Part.from_text(text="response1")],
108
- ),
109
- ],
110
- )
111
- ]
112
- else:
113
- return []
114
-
115
- provider = TestExampleProvider()
116
- request = LlmRequest(
117
- model="gemini-1.5-flash",
118
- config=types.GenerateContentConfig(system_instruction=""),
119
- )
120
- agent = Agent(
121
- model="gemini-1.5-flash",
122
- name="agent",
123
- examples=provider,
124
- )
125
- invocation_context = utils.create_invocation_context(
126
- agent=agent, user_content="test"
127
- )
128
-
129
- async for _ in examples.request_processor.run_async(
130
- invocation_context,
131
- request,
132
- ):
133
- pass
134
-
135
- assert (
136
- request.config.system_instruction
137
- == "<EXAMPLES>\nBegin few-shot\nThe following are examples of user"
138
- " queries and model responses using the available tools.\n\nEXAMPLE"
139
- " 1:\nBegin example\n[user]\ntest\n\n[model]\nresponse1\nEnd"
140
- " example\n\nEnd few-shot\nNow, try to follow these examples and"
141
- " complete the following conversation\n<EXAMPLES>"
142
- )