google-adk 0.0.2__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 (153) hide show
  1. google/adk/agents/run_config.py +4 -0
  2. google/adk/auth/auth_preprocessor.py +19 -16
  3. google/adk/cli/agent_graph.py +31 -5
  4. google/adk/cli/browser/index.html +1 -1
  5. google/adk/cli/browser/{main-XUU6OGCC.js → main-CU22TRPI.js} +30 -30
  6. google/adk/cli/cli.py +8 -8
  7. google/adk/cli/cli_deploy.py +2 -4
  8. google/adk/cli/cli_tools_click.py +57 -12
  9. google/adk/cli/fast_api.py +19 -9
  10. google/adk/flows/llm_flows/contents.py +21 -1
  11. google/adk/flows/llm_flows/functions.py +3 -1
  12. google/adk/models/google_llm.py +0 -1
  13. google/adk/runners.py +13 -2
  14. google/adk/version.py +1 -1
  15. {google_adk-0.0.2.dist-info → google_adk-0.0.4.dist-info}/METADATA +4 -2
  16. google_adk-0.0.4.dist-info/RECORD +175 -0
  17. {google_adk-0.0.2.dist-info → google_adk-0.0.4.dist-info}/WHEEL +1 -1
  18. google/adk/cli/media_streamer/__init__.py +0 -19
  19. google/adk/cli/media_streamer/index.html +0 -228
  20. google/adk/tests/__init__.py +0 -14
  21. google/adk/tests/integration/.env.example +0 -10
  22. google/adk/tests/integration/__init__.py +0 -18
  23. google/adk/tests/integration/conftest.py +0 -119
  24. google/adk/tests/integration/fixture/__init__.py +0 -14
  25. google/adk/tests/integration/fixture/agent_with_config/__init__.py +0 -15
  26. google/adk/tests/integration/fixture/agent_with_config/agent.py +0 -88
  27. google/adk/tests/integration/fixture/callback_agent/__init__.py +0 -15
  28. google/adk/tests/integration/fixture/callback_agent/agent.py +0 -105
  29. google/adk/tests/integration/fixture/context_update_test/OWNERS +0 -1
  30. google/adk/tests/integration/fixture/context_update_test/__init__.py +0 -15
  31. google/adk/tests/integration/fixture/context_update_test/agent.py +0 -43
  32. google/adk/tests/integration/fixture/context_update_test/successful_test.session.json +0 -582
  33. google/adk/tests/integration/fixture/context_variable_agent/__init__.py +0 -15
  34. google/adk/tests/integration/fixture/context_variable_agent/agent.py +0 -115
  35. google/adk/tests/integration/fixture/customer_support_ma/__init__.py +0 -15
  36. google/adk/tests/integration/fixture/customer_support_ma/agent.py +0 -172
  37. google/adk/tests/integration/fixture/ecommerce_customer_service_agent/__init__.py +0 -15
  38. google/adk/tests/integration/fixture/ecommerce_customer_service_agent/agent.py +0 -338
  39. google/adk/tests/integration/fixture/ecommerce_customer_service_agent/order_query.test.json +0 -69
  40. google/adk/tests/integration/fixture/ecommerce_customer_service_agent/test_config.json +0 -6
  41. google/adk/tests/integration/fixture/flow_complex_spark/__init__.py +0 -15
  42. google/adk/tests/integration/fixture/flow_complex_spark/agent.py +0 -182
  43. google/adk/tests/integration/fixture/flow_complex_spark/sample.debug.log +0 -243
  44. google/adk/tests/integration/fixture/flow_complex_spark/sample.session.json +0 -190
  45. google/adk/tests/integration/fixture/hello_world_agent/__init__.py +0 -15
  46. google/adk/tests/integration/fixture/hello_world_agent/agent.py +0 -95
  47. google/adk/tests/integration/fixture/hello_world_agent/roll_die.test.json +0 -24
  48. google/adk/tests/integration/fixture/hello_world_agent/test_config.json +0 -6
  49. google/adk/tests/integration/fixture/home_automation_agent/__init__.py +0 -15
  50. google/adk/tests/integration/fixture/home_automation_agent/agent.py +0 -304
  51. google/adk/tests/integration/fixture/home_automation_agent/simple_test.test.json +0 -5
  52. google/adk/tests/integration/fixture/home_automation_agent/simple_test2.test.json +0 -5
  53. google/adk/tests/integration/fixture/home_automation_agent/test_config.json +0 -5
  54. google/adk/tests/integration/fixture/home_automation_agent/test_files/dependent_tool_calls.test.json +0 -18
  55. google/adk/tests/integration/fixture/home_automation_agent/test_files/memorizing_past_events/eval_data.test.json +0 -17
  56. google/adk/tests/integration/fixture/home_automation_agent/test_files/memorizing_past_events/test_config.json +0 -6
  57. google/adk/tests/integration/fixture/home_automation_agent/test_files/simple_multi_turn_conversation.test.json +0 -18
  58. google/adk/tests/integration/fixture/home_automation_agent/test_files/simple_test.test.json +0 -17
  59. google/adk/tests/integration/fixture/home_automation_agent/test_files/simple_test2.test.json +0 -5
  60. google/adk/tests/integration/fixture/home_automation_agent/test_files/test_config.json +0 -5
  61. google/adk/tests/integration/fixture/tool_agent/__init__.py +0 -15
  62. google/adk/tests/integration/fixture/tool_agent/agent.py +0 -218
  63. google/adk/tests/integration/fixture/tool_agent/files/Agent_test_plan.pdf +0 -0
  64. google/adk/tests/integration/fixture/trip_planner_agent/__init__.py +0 -15
  65. google/adk/tests/integration/fixture/trip_planner_agent/agent.py +0 -110
  66. google/adk/tests/integration/fixture/trip_planner_agent/initial.session.json +0 -13
  67. google/adk/tests/integration/fixture/trip_planner_agent/test_config.json +0 -5
  68. google/adk/tests/integration/fixture/trip_planner_agent/test_files/initial.session.json +0 -13
  69. google/adk/tests/integration/fixture/trip_planner_agent/test_files/test_config.json +0 -5
  70. google/adk/tests/integration/fixture/trip_planner_agent/test_files/trip_inquiry_sub_agent.test.json +0 -7
  71. google/adk/tests/integration/fixture/trip_planner_agent/trip_inquiry.test.json +0 -19
  72. google/adk/tests/integration/models/__init__.py +0 -14
  73. google/adk/tests/integration/models/test_google_llm.py +0 -65
  74. google/adk/tests/integration/test_callback.py +0 -70
  75. google/adk/tests/integration/test_context_variable.py +0 -67
  76. google/adk/tests/integration/test_evalute_agent_in_fixture.py +0 -76
  77. google/adk/tests/integration/test_multi_agent.py +0 -28
  78. google/adk/tests/integration/test_multi_turn.py +0 -42
  79. google/adk/tests/integration/test_single_agent.py +0 -23
  80. google/adk/tests/integration/test_sub_agent.py +0 -26
  81. google/adk/tests/integration/test_system_instruction.py +0 -177
  82. google/adk/tests/integration/test_tools.py +0 -287
  83. google/adk/tests/integration/test_with_test_file.py +0 -34
  84. google/adk/tests/integration/tools/__init__.py +0 -14
  85. google/adk/tests/integration/utils/__init__.py +0 -16
  86. google/adk/tests/integration/utils/asserts.py +0 -75
  87. google/adk/tests/integration/utils/test_runner.py +0 -97
  88. google/adk/tests/unittests/__init__.py +0 -14
  89. google/adk/tests/unittests/agents/__init__.py +0 -14
  90. google/adk/tests/unittests/agents/test_base_agent.py +0 -407
  91. google/adk/tests/unittests/agents/test_langgraph_agent.py +0 -191
  92. google/adk/tests/unittests/agents/test_llm_agent_callbacks.py +0 -138
  93. google/adk/tests/unittests/agents/test_llm_agent_fields.py +0 -231
  94. google/adk/tests/unittests/agents/test_loop_agent.py +0 -136
  95. google/adk/tests/unittests/agents/test_parallel_agent.py +0 -92
  96. google/adk/tests/unittests/agents/test_sequential_agent.py +0 -114
  97. google/adk/tests/unittests/artifacts/__init__.py +0 -14
  98. google/adk/tests/unittests/artifacts/test_artifact_service.py +0 -276
  99. google/adk/tests/unittests/auth/test_auth_handler.py +0 -575
  100. google/adk/tests/unittests/conftest.py +0 -73
  101. google/adk/tests/unittests/fast_api/__init__.py +0 -14
  102. google/adk/tests/unittests/fast_api/test_fast_api.py +0 -269
  103. google/adk/tests/unittests/flows/__init__.py +0 -14
  104. google/adk/tests/unittests/flows/llm_flows/__init__.py +0 -14
  105. google/adk/tests/unittests/flows/llm_flows/_test_examples.py +0 -142
  106. google/adk/tests/unittests/flows/llm_flows/test_agent_transfer.py +0 -311
  107. google/adk/tests/unittests/flows/llm_flows/test_functions_long_running.py +0 -244
  108. google/adk/tests/unittests/flows/llm_flows/test_functions_request_euc.py +0 -346
  109. google/adk/tests/unittests/flows/llm_flows/test_functions_sequential.py +0 -93
  110. google/adk/tests/unittests/flows/llm_flows/test_functions_simple.py +0 -258
  111. google/adk/tests/unittests/flows/llm_flows/test_identity.py +0 -66
  112. google/adk/tests/unittests/flows/llm_flows/test_instructions.py +0 -164
  113. google/adk/tests/unittests/flows/llm_flows/test_model_callbacks.py +0 -142
  114. google/adk/tests/unittests/flows/llm_flows/test_other_configs.py +0 -46
  115. google/adk/tests/unittests/flows/llm_flows/test_tool_callbacks.py +0 -269
  116. google/adk/tests/unittests/models/__init__.py +0 -14
  117. google/adk/tests/unittests/models/test_google_llm.py +0 -224
  118. google/adk/tests/unittests/models/test_litellm.py +0 -804
  119. google/adk/tests/unittests/models/test_models.py +0 -60
  120. google/adk/tests/unittests/sessions/__init__.py +0 -14
  121. google/adk/tests/unittests/sessions/test_session_service.py +0 -227
  122. google/adk/tests/unittests/sessions/test_vertex_ai_session_service.py +0 -246
  123. google/adk/tests/unittests/streaming/__init__.py +0 -14
  124. google/adk/tests/unittests/streaming/test_streaming.py +0 -50
  125. google/adk/tests/unittests/tools/__init__.py +0 -14
  126. google/adk/tests/unittests/tools/apihub_tool/clients/test_apihub_client.py +0 -499
  127. google/adk/tests/unittests/tools/apihub_tool/test_apihub_toolset.py +0 -204
  128. google/adk/tests/unittests/tools/application_integration_tool/clients/test_connections_client.py +0 -600
  129. google/adk/tests/unittests/tools/application_integration_tool/clients/test_integration_client.py +0 -630
  130. google/adk/tests/unittests/tools/application_integration_tool/test_application_integration_toolset.py +0 -345
  131. google/adk/tests/unittests/tools/google_api_tool/__init__.py +0 -13
  132. google/adk/tests/unittests/tools/google_api_tool/test_googleapi_to_openapi_converter.py +0 -657
  133. google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_auto_auth_credential_exchanger.py +0 -145
  134. google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_base_auth_credential_exchanger.py +0 -68
  135. google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_oauth2_exchanger.py +0 -153
  136. google/adk/tests/unittests/tools/openapi_tool/auth/credential_exchangers/test_service_account_exchanger.py +0 -196
  137. google/adk/tests/unittests/tools/openapi_tool/auth/test_auth_helper.py +0 -573
  138. google/adk/tests/unittests/tools/openapi_tool/common/test_common.py +0 -436
  139. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test.yaml +0 -1367
  140. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_openapi_spec_parser.py +0 -628
  141. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_openapi_toolset.py +0 -139
  142. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_operation_parser.py +0 -406
  143. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_rest_api_tool.py +0 -966
  144. google/adk/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_tool_auth_handler.py +0 -201
  145. google/adk/tests/unittests/tools/retrieval/__init__.py +0 -14
  146. google/adk/tests/unittests/tools/retrieval/test_vertex_ai_rag_retrieval.py +0 -147
  147. google/adk/tests/unittests/tools/test_agent_tool.py +0 -167
  148. google/adk/tests/unittests/tools/test_base_tool.py +0 -141
  149. google/adk/tests/unittests/tools/test_build_function_declaration.py +0 -277
  150. google/adk/tests/unittests/utils.py +0 -304
  151. google_adk-0.0.2.dist-info/RECORD +0 -308
  152. {google_adk-0.0.2.dist-info → google_adk-0.0.4.dist-info}/entry_points.txt +0 -0
  153. {google_adk-0.0.2.dist-info → google_adk-0.0.4.dist-info/licenses}/LICENSE +0 -0
@@ -1,224 +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 sys
16
- from unittest import mock
17
-
18
- from google.adk import version
19
- from google.adk.models.gemini_llm_connection import GeminiLlmConnection
20
- from google.adk.models.google_llm import Gemini
21
- from google.adk.models.llm_request import LlmRequest
22
- from google.adk.models.llm_response import LlmResponse
23
- from google.genai import types
24
- from google.genai.types import Content
25
- from google.genai.types import Part
26
- import pytest
27
-
28
-
29
- @pytest.fixture
30
- def generate_content_response():
31
- return types.GenerateContentResponse(
32
- candidates=[
33
- types.Candidate(
34
- content=Content(
35
- role="model",
36
- parts=[Part.from_text(text="Hello, how can I help you?")],
37
- ),
38
- finish_reason=types.FinishReason.STOP,
39
- )
40
- ]
41
- )
42
-
43
-
44
- @pytest.fixture
45
- def gemini_llm():
46
- return Gemini(model="gemini-1.5-flash")
47
-
48
-
49
- @pytest.fixture
50
- def llm_request():
51
- return LlmRequest(
52
- model="gemini-1.5-flash",
53
- contents=[Content(role="user", parts=[Part.from_text(text="Hello")])],
54
- config=types.GenerateContentConfig(
55
- temperature=0.1,
56
- response_modalities=[types.Modality.TEXT],
57
- system_instruction="You are a helpful assistant",
58
- ),
59
- )
60
-
61
-
62
- def test_supported_models():
63
- models = Gemini.supported_models()
64
- assert len(models) == 3
65
- assert models[0] == r"gemini-.*"
66
- assert models[1] == r"projects\/.+\/locations\/.+\/endpoints\/.+"
67
- assert (
68
- models[2]
69
- == r"projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+"
70
- )
71
-
72
-
73
- def test_client_version_header():
74
- model = Gemini(model="gemini-1.5-flash")
75
- client = model.api_client
76
- expected_header = (
77
- f"google-adk/{version.__version__}"
78
- f" gl-python/{sys.version.split()[0]} google-genai-sdk/"
79
- )
80
- assert (
81
- expected_header
82
- in client._api_client._http_options.headers["x-goog-api-client"]
83
- )
84
- assert (
85
- expected_header in client._api_client._http_options.headers["user-agent"]
86
- )
87
-
88
-
89
- def test_maybe_append_user_content(gemini_llm, llm_request):
90
- # Test with user content already present
91
- gemini_llm._maybe_append_user_content(llm_request)
92
- assert len(llm_request.contents) == 1
93
-
94
- # Test with model content as the last message
95
- llm_request.contents.append(
96
- Content(role="model", parts=[Part.from_text(text="Response")])
97
- )
98
- gemini_llm._maybe_append_user_content(llm_request)
99
- assert len(llm_request.contents) == 3
100
- assert llm_request.contents[-1].role == "user"
101
- assert "Continue processing" in llm_request.contents[-1].parts[0].text
102
-
103
-
104
- @pytest.mark.asyncio
105
- async def test_generate_content_async(
106
- gemini_llm, llm_request, generate_content_response
107
- ):
108
- with mock.patch.object(gemini_llm, "api_client") as mock_client:
109
- # Create a mock coroutine that returns the generate_content_response
110
- async def mock_coro():
111
- return generate_content_response
112
-
113
- # Assign the coroutine to the mocked method
114
- mock_client.aio.models.generate_content.return_value = mock_coro()
115
-
116
- responses = [
117
- resp
118
- async for resp in gemini_llm.generate_content_async(
119
- llm_request, stream=False
120
- )
121
- ]
122
-
123
- assert len(responses) == 1
124
- assert isinstance(responses[0], LlmResponse)
125
- assert responses[0].content.parts[0].text == "Hello, how can I help you?"
126
- mock_client.aio.models.generate_content.assert_called_once()
127
-
128
-
129
- @pytest.mark.asyncio
130
- async def test_generate_content_async_stream(gemini_llm, llm_request):
131
- with mock.patch.object(gemini_llm, "api_client") as mock_client:
132
- # Create mock stream responses
133
- class MockAsyncIterator:
134
-
135
- def __init__(self, seq):
136
- self.iter = iter(seq)
137
-
138
- def __aiter__(self):
139
- return self
140
-
141
- async def __anext__(self):
142
- try:
143
- return next(self.iter)
144
- except StopIteration:
145
- raise StopAsyncIteration
146
-
147
- mock_responses = [
148
- types.GenerateContentResponse(
149
- candidates=[
150
- types.Candidate(
151
- content=Content(
152
- role="model", parts=[Part.from_text(text="Hello")]
153
- ),
154
- finish_reason=None,
155
- )
156
- ]
157
- ),
158
- types.GenerateContentResponse(
159
- candidates=[
160
- types.Candidate(
161
- content=Content(
162
- role="model", parts=[Part.from_text(text=", how")]
163
- ),
164
- finish_reason=None,
165
- )
166
- ]
167
- ),
168
- types.GenerateContentResponse(
169
- candidates=[
170
- types.Candidate(
171
- content=Content(
172
- role="model",
173
- parts=[Part.from_text(text=" can I help you?")],
174
- ),
175
- finish_reason=types.FinishReason.STOP,
176
- )
177
- ]
178
- ),
179
- ]
180
-
181
- # Create a mock coroutine that returns the MockAsyncIterator
182
- async def mock_coro():
183
- return MockAsyncIterator(mock_responses)
184
-
185
- # Set the mock to return the coroutine
186
- mock_client.aio.models.generate_content_stream.return_value = mock_coro()
187
-
188
- responses = [
189
- resp
190
- async for resp in gemini_llm.generate_content_async(
191
- llm_request, stream=True
192
- )
193
- ]
194
-
195
- # Assertions remain the same
196
- assert len(responses) == 4
197
- assert responses[0].partial is True
198
- assert responses[1].partial is True
199
- assert responses[2].partial is True
200
- assert responses[3].content.parts[0].text == "Hello, how can I help you?"
201
- mock_client.aio.models.generate_content_stream.assert_called_once()
202
-
203
-
204
- @pytest.mark.asyncio
205
- async def test_connect(gemini_llm, llm_request):
206
- # Create a mock connection
207
- mock_connection = mock.MagicMock(spec=GeminiLlmConnection)
208
-
209
- # Create a mock context manager
210
- class MockContextManager:
211
-
212
- async def __aenter__(self):
213
- return mock_connection
214
-
215
- async def __aexit__(self, *args):
216
- pass
217
-
218
- # Mock the connect method at the class level
219
- with mock.patch(
220
- "google.adk.models.google_llm.Gemini.connect",
221
- return_value=MockContextManager(),
222
- ):
223
- async with gemini_llm.connect(llm_request) as connection:
224
- assert connection is mock_connection