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,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))