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,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,276 +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
- """Tests for the artifact service."""
16
-
17
- import enum
18
- from typing import Optional
19
- from typing import Union
20
-
21
- from google.adk.artifacts import GcsArtifactService
22
- from google.adk.artifacts import InMemoryArtifactService
23
- from google.genai import types
24
- import pytest
25
-
26
- Enum = enum.Enum
27
-
28
-
29
- class ArtifactServiceType(Enum):
30
- IN_MEMORY = "IN_MEMORY"
31
- GCS = "GCS"
32
-
33
-
34
- class MockBlob:
35
- """Mocks a GCS Blob object.
36
-
37
- This class provides mock implementations for a few common GCS Blob methods,
38
- allowing the user to test code that interacts with GCS without actually
39
- connecting to a real bucket.
40
- """
41
-
42
- def __init__(self, name: str) -> None:
43
- """Initializes a MockBlob.
44
-
45
- Args:
46
- name: The name of the blob.
47
- """
48
- self.name = name
49
- self.content: Optional[bytes] = None
50
- self.content_type: Optional[str] = None
51
-
52
- def upload_from_string(
53
- self, data: Union[str, bytes], content_type: Optional[str] = None
54
- ) -> None:
55
- """Mocks uploading data to the blob (from a string or bytes).
56
-
57
- Args:
58
- data: The data to upload (string or bytes).
59
- content_type: The content type of the data (optional).
60
- """
61
- if isinstance(data, str):
62
- self.content = data.encode("utf-8")
63
- elif isinstance(data, bytes):
64
- self.content = data
65
- else:
66
- raise TypeError("data must be str or bytes")
67
-
68
- if content_type:
69
- self.content_type = content_type
70
-
71
- def download_as_bytes(self) -> bytes:
72
- """Mocks downloading the blob's content as bytes.
73
-
74
- Returns:
75
- bytes: The content of the blob as bytes.
76
-
77
- Raises:
78
- Exception: If the blob doesn't exist (hasn't been uploaded to).
79
- """
80
- if self.content is None:
81
- return b""
82
- return self.content
83
-
84
- def delete(self) -> None:
85
- """Mocks deleting a blob."""
86
- self.content = None
87
- self.content_type = None
88
-
89
-
90
- class MockBucket:
91
- """Mocks a GCS Bucket object."""
92
-
93
- def __init__(self, name: str) -> None:
94
- """Initializes a MockBucket.
95
-
96
- Args:
97
- name: The name of the bucket.
98
- """
99
- self.name = name
100
- self.blobs: dict[str, MockBlob] = {}
101
-
102
- def blob(self, blob_name: str) -> MockBlob:
103
- """Mocks getting a Blob object (doesn't create it in storage).
104
-
105
- Args:
106
- blob_name: The name of the blob.
107
-
108
- Returns:
109
- A MockBlob instance.
110
- """
111
- if blob_name not in self.blobs:
112
- self.blobs[blob_name] = MockBlob(blob_name)
113
- return self.blobs[blob_name]
114
-
115
-
116
- class MockClient:
117
- """Mocks the GCS Client."""
118
-
119
- def __init__(self) -> None:
120
- """Initializes MockClient."""
121
- self.buckets: dict[str, MockBucket] = {}
122
-
123
- def bucket(self, bucket_name: str) -> MockBucket:
124
- """Mocks getting a Bucket object."""
125
- if bucket_name not in self.buckets:
126
- self.buckets[bucket_name] = MockBucket(bucket_name)
127
- return self.buckets[bucket_name]
128
-
129
- def list_blobs(self, bucket: MockBucket, prefix: Optional[str] = None):
130
- """Mocks listing blobs in a bucket, optionally with a prefix."""
131
- if prefix:
132
- return [
133
- blob for name, blob in bucket.blobs.items() if name.startswith(prefix)
134
- ]
135
- return list(bucket.blobs.values())
136
-
137
-
138
- def mock_gcs_artifact_service():
139
- """Creates a mock GCS artifact service for testing."""
140
- service = GcsArtifactService(bucket_name="test_bucket")
141
- service.storage_client = MockClient()
142
- service.bucket = service.storage_client.bucket("test_bucket")
143
- return service
144
-
145
-
146
- def get_artifact_service(
147
- service_type: ArtifactServiceType = ArtifactServiceType.IN_MEMORY,
148
- ):
149
- """Creates an artifact service for testing."""
150
- if service_type == ArtifactServiceType.GCS:
151
- return mock_gcs_artifact_service()
152
- return InMemoryArtifactService()
153
-
154
-
155
- @pytest.mark.parametrize(
156
- "service_type", [ArtifactServiceType.IN_MEMORY, ArtifactServiceType.GCS]
157
- )
158
- def test_load_empty(service_type):
159
- """Tests loading an artifact when none exists."""
160
- artifact_service = get_artifact_service(service_type)
161
- assert not artifact_service.load_artifact(
162
- app_name="test_app",
163
- user_id="test_user",
164
- session_id="session_id",
165
- filename="filename",
166
- )
167
-
168
-
169
- @pytest.mark.parametrize(
170
- "service_type", [ArtifactServiceType.IN_MEMORY, ArtifactServiceType.GCS]
171
- )
172
- def test_save_load_delete(service_type):
173
- """Tests saving, loading, and deleting an artifact."""
174
- artifact_service = get_artifact_service(service_type)
175
- artifact = types.Part.from_bytes(data=b"test_data", mime_type="text/plain")
176
- app_name = "app0"
177
- user_id = "user0"
178
- session_id = "123"
179
- filename = "file456"
180
-
181
- artifact_service.save_artifact(
182
- app_name=app_name,
183
- user_id=user_id,
184
- session_id=session_id,
185
- filename=filename,
186
- artifact=artifact,
187
- )
188
- assert (
189
- artifact_service.load_artifact(
190
- app_name=app_name,
191
- user_id=user_id,
192
- session_id=session_id,
193
- filename=filename,
194
- )
195
- == artifact
196
- )
197
-
198
- artifact_service.delete_artifact(
199
- app_name=app_name,
200
- user_id=user_id,
201
- session_id=session_id,
202
- filename=filename,
203
- )
204
- assert not artifact_service.load_artifact(
205
- app_name=app_name,
206
- user_id=user_id,
207
- session_id=session_id,
208
- filename=filename,
209
- )
210
-
211
-
212
- @pytest.mark.parametrize(
213
- "service_type", [ArtifactServiceType.IN_MEMORY, ArtifactServiceType.GCS]
214
- )
215
- def test_list_keys(service_type):
216
- """Tests listing keys in the artifact service."""
217
- artifact_service = get_artifact_service(service_type)
218
- artifact = types.Part.from_bytes(data=b"test_data", mime_type="text/plain")
219
- app_name = "app0"
220
- user_id = "user0"
221
- session_id = "123"
222
- filename = "filename"
223
- filenames = [filename + str(i) for i in range(5)]
224
-
225
- for f in filenames:
226
- artifact_service.save_artifact(
227
- app_name=app_name,
228
- user_id=user_id,
229
- session_id=session_id,
230
- filename=f,
231
- artifact=artifact,
232
- )
233
-
234
- assert (
235
- artifact_service.list_artifact_keys(
236
- app_name=app_name, user_id=user_id, session_id=session_id
237
- )
238
- == filenames
239
- )
240
-
241
-
242
- @pytest.mark.parametrize(
243
- "service_type", [ArtifactServiceType.IN_MEMORY, ArtifactServiceType.GCS]
244
- )
245
- def test_list_versions(service_type):
246
- """Tests listing versions of an artifact."""
247
- artifact_service = get_artifact_service(service_type)
248
-
249
- app_name = "app0"
250
- user_id = "user0"
251
- session_id = "123"
252
- filename = "filename"
253
- versions = [
254
- types.Part.from_bytes(
255
- data=i.to_bytes(2, byteorder="big"), mime_type="text/plain"
256
- )
257
- for i in range(3)
258
- ]
259
-
260
- for i in range(3):
261
- artifact_service.save_artifact(
262
- app_name=app_name,
263
- user_id=user_id,
264
- session_id=session_id,
265
- filename=filename,
266
- artifact=versions[i],
267
- )
268
-
269
- response_versions = artifact_service.list_versions(
270
- app_name=app_name,
271
- user_id=user_id,
272
- session_id=session_id,
273
- filename=filename,
274
- )
275
-
276
- assert response_versions == list(range(3))