google-genai 1.55.0__py3-none-any.whl → 1.56.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 (241) hide show
  1. google/genai/_interactions/_base_client.py +8 -2
  2. google/genai/_interactions/resources/interactions.py +6 -6
  3. google/genai/_interactions/types/__init__.py +2 -0
  4. google/genai/_interactions/types/audio_content.py +0 -1
  5. google/genai/_interactions/types/audio_content_param.py +0 -1
  6. google/genai/_interactions/types/code_execution_call_content.py +0 -1
  7. google/genai/_interactions/types/code_execution_call_content_param.py +0 -1
  8. google/genai/_interactions/types/code_execution_result_content.py +0 -1
  9. google/genai/_interactions/types/code_execution_result_content_param.py +0 -1
  10. google/genai/_interactions/types/content_delta.py +7 -23
  11. google/genai/_interactions/types/deep_research_agent_config.py +0 -1
  12. google/genai/_interactions/types/deep_research_agent_config_param.py +0 -1
  13. google/genai/_interactions/types/document_content.py +3 -2
  14. google/genai/_interactions/types/document_content_param.py +3 -2
  15. google/genai/{tests/__init__.py → _interactions/types/document_mime_type.py} +5 -3
  16. google/genai/{tests/afc/__init__.py → _interactions/types/document_mime_type_param.py} +8 -4
  17. google/genai/_interactions/types/dynamic_agent_config.py +0 -1
  18. google/genai/_interactions/types/dynamic_agent_config_param.py +0 -1
  19. google/genai/_interactions/types/file_search_result_content.py +0 -1
  20. google/genai/_interactions/types/file_search_result_content_param.py +0 -1
  21. google/genai/_interactions/types/function_call_content.py +0 -1
  22. google/genai/_interactions/types/function_call_content_param.py +0 -1
  23. google/genai/_interactions/types/function_result_content.py +1 -2
  24. google/genai/_interactions/types/function_result_content_param.py +1 -2
  25. google/genai/_interactions/types/google_search_call_content.py +0 -1
  26. google/genai/_interactions/types/google_search_call_content_param.py +0 -1
  27. google/genai/_interactions/types/google_search_result_content.py +0 -1
  28. google/genai/_interactions/types/google_search_result_content_param.py +0 -1
  29. google/genai/_interactions/types/image_content.py +1 -2
  30. google/genai/_interactions/types/image_content_param.py +1 -2
  31. google/genai/_interactions/types/mcp_server_tool_call_content.py +0 -1
  32. google/genai/_interactions/types/mcp_server_tool_call_content_param.py +0 -1
  33. google/genai/_interactions/types/mcp_server_tool_result_content.py +1 -2
  34. google/genai/_interactions/types/mcp_server_tool_result_content_param.py +1 -2
  35. google/genai/_interactions/types/text_content.py +0 -1
  36. google/genai/_interactions/types/text_content_param.py +0 -1
  37. google/genai/_interactions/types/thinking_level.py +1 -1
  38. google/genai/_interactions/types/thought_content.py +0 -1
  39. google/genai/_interactions/types/thought_content_param.py +0 -1
  40. google/genai/_interactions/types/url_context_call_content.py +0 -1
  41. google/genai/_interactions/types/url_context_call_content_param.py +0 -1
  42. google/genai/_interactions/types/url_context_result_content.py +0 -1
  43. google/genai/_interactions/types/url_context_result_content_param.py +0 -1
  44. google/genai/_interactions/types/video_content.py +1 -2
  45. google/genai/_interactions/types/video_content_param.py +1 -2
  46. google/genai/_live_converters.py +2 -30
  47. google/genai/client.py +3 -1
  48. google/genai/models.py +2 -29
  49. google/genai/tunings.py +1 -27
  50. google/genai/types.py +20 -22
  51. google/genai/version.py +1 -1
  52. {google_genai-1.55.0.dist-info → google_genai-1.56.0.dist-info}/METADATA +224 -22
  53. google_genai-1.56.0.dist-info/RECORD +162 -0
  54. google/genai/tests/afc/test_convert_if_exist_pydantic_model.py +0 -309
  55. google/genai/tests/afc/test_convert_number_values_for_function_call_args.py +0 -63
  56. google/genai/tests/afc/test_find_afc_incompatible_tool_indexes.py +0 -240
  57. google/genai/tests/afc/test_generate_content_stream_afc.py +0 -530
  58. google/genai/tests/afc/test_generate_content_stream_afc_thoughts.py +0 -77
  59. google/genai/tests/afc/test_get_function_map.py +0 -176
  60. google/genai/tests/afc/test_get_function_response_parts.py +0 -277
  61. google/genai/tests/afc/test_get_max_remote_calls_for_afc.py +0 -130
  62. google/genai/tests/afc/test_invoke_function_from_dict_args.py +0 -241
  63. google/genai/tests/afc/test_raise_error_for_afc_incompatible_config.py +0 -159
  64. google/genai/tests/afc/test_should_append_afc_history.py +0 -53
  65. google/genai/tests/afc/test_should_disable_afc.py +0 -214
  66. google/genai/tests/batches/__init__.py +0 -17
  67. google/genai/tests/batches/test_cancel.py +0 -77
  68. google/genai/tests/batches/test_create.py +0 -78
  69. google/genai/tests/batches/test_create_with_bigquery.py +0 -113
  70. google/genai/tests/batches/test_create_with_file.py +0 -82
  71. google/genai/tests/batches/test_create_with_gcs.py +0 -125
  72. google/genai/tests/batches/test_create_with_inlined_requests.py +0 -255
  73. google/genai/tests/batches/test_delete.py +0 -86
  74. google/genai/tests/batches/test_embedding.py +0 -157
  75. google/genai/tests/batches/test_get.py +0 -78
  76. google/genai/tests/batches/test_list.py +0 -79
  77. google/genai/tests/caches/__init__.py +0 -17
  78. google/genai/tests/caches/constants.py +0 -29
  79. google/genai/tests/caches/test_create.py +0 -210
  80. google/genai/tests/caches/test_create_custom_url.py +0 -105
  81. google/genai/tests/caches/test_delete.py +0 -54
  82. google/genai/tests/caches/test_delete_custom_url.py +0 -52
  83. google/genai/tests/caches/test_get.py +0 -94
  84. google/genai/tests/caches/test_get_custom_url.py +0 -52
  85. google/genai/tests/caches/test_list.py +0 -68
  86. google/genai/tests/caches/test_update.py +0 -70
  87. google/genai/tests/caches/test_update_custom_url.py +0 -58
  88. google/genai/tests/chats/__init__.py +0 -1
  89. google/genai/tests/chats/test_get_history.py +0 -597
  90. google/genai/tests/chats/test_send_message.py +0 -844
  91. google/genai/tests/chats/test_validate_response.py +0 -90
  92. google/genai/tests/client/__init__.py +0 -17
  93. google/genai/tests/client/test_async_stream.py +0 -427
  94. google/genai/tests/client/test_client_close.py +0 -197
  95. google/genai/tests/client/test_client_initialization.py +0 -1687
  96. google/genai/tests/client/test_client_requests.py +0 -355
  97. google/genai/tests/client/test_custom_client.py +0 -77
  98. google/genai/tests/client/test_http_options.py +0 -178
  99. google/genai/tests/client/test_replay_client_equality.py +0 -168
  100. google/genai/tests/client/test_retries.py +0 -846
  101. google/genai/tests/client/test_upload_errors.py +0 -136
  102. google/genai/tests/common/__init__.py +0 -17
  103. google/genai/tests/common/test_common.py +0 -954
  104. google/genai/tests/conftest.py +0 -162
  105. google/genai/tests/documents/__init__.py +0 -17
  106. google/genai/tests/documents/test_delete.py +0 -51
  107. google/genai/tests/documents/test_get.py +0 -85
  108. google/genai/tests/documents/test_list.py +0 -72
  109. google/genai/tests/errors/__init__.py +0 -1
  110. google/genai/tests/errors/test_api_error.py +0 -417
  111. google/genai/tests/file_search_stores/__init__.py +0 -17
  112. google/genai/tests/file_search_stores/test_create.py +0 -66
  113. google/genai/tests/file_search_stores/test_delete.py +0 -64
  114. google/genai/tests/file_search_stores/test_get.py +0 -94
  115. google/genai/tests/file_search_stores/test_import_file.py +0 -112
  116. google/genai/tests/file_search_stores/test_list.py +0 -57
  117. google/genai/tests/file_search_stores/test_upload_to_file_search_store.py +0 -141
  118. google/genai/tests/files/__init__.py +0 -17
  119. google/genai/tests/files/test_delete.py +0 -46
  120. google/genai/tests/files/test_download.py +0 -85
  121. google/genai/tests/files/test_get.py +0 -46
  122. google/genai/tests/files/test_list.py +0 -72
  123. google/genai/tests/files/test_upload.py +0 -255
  124. google/genai/tests/imports/test_no_optional_imports.py +0 -28
  125. google/genai/tests/interactions/test_integration.py +0 -80
  126. google/genai/tests/live/__init__.py +0 -16
  127. google/genai/tests/live/test_live.py +0 -2177
  128. google/genai/tests/live/test_live_music.py +0 -362
  129. google/genai/tests/live/test_live_response.py +0 -163
  130. google/genai/tests/live/test_send_client_content.py +0 -147
  131. google/genai/tests/live/test_send_realtime_input.py +0 -268
  132. google/genai/tests/live/test_send_tool_response.py +0 -222
  133. google/genai/tests/local_tokenizer/__init__.py +0 -17
  134. google/genai/tests/local_tokenizer/test_local_tokenizer.py +0 -343
  135. google/genai/tests/local_tokenizer/test_local_tokenizer_loader.py +0 -235
  136. google/genai/tests/mcp/__init__.py +0 -17
  137. google/genai/tests/mcp/test_has_mcp_tool_usage.py +0 -89
  138. google/genai/tests/mcp/test_mcp_to_gemini_tools.py +0 -191
  139. google/genai/tests/mcp/test_parse_config_for_mcp_sessions.py +0 -201
  140. google/genai/tests/mcp/test_parse_config_for_mcp_usage.py +0 -130
  141. google/genai/tests/mcp/test_set_mcp_usage_header.py +0 -72
  142. google/genai/tests/models/__init__.py +0 -17
  143. google/genai/tests/models/constants.py +0 -8
  144. google/genai/tests/models/test_compute_tokens.py +0 -120
  145. google/genai/tests/models/test_count_tokens.py +0 -159
  146. google/genai/tests/models/test_delete.py +0 -107
  147. google/genai/tests/models/test_edit_image.py +0 -264
  148. google/genai/tests/models/test_embed_content.py +0 -94
  149. google/genai/tests/models/test_function_call_streaming.py +0 -442
  150. google/genai/tests/models/test_generate_content.py +0 -2502
  151. google/genai/tests/models/test_generate_content_cached_content.py +0 -132
  152. google/genai/tests/models/test_generate_content_config_zero_value.py +0 -103
  153. google/genai/tests/models/test_generate_content_from_apikey.py +0 -44
  154. google/genai/tests/models/test_generate_content_http_options.py +0 -40
  155. google/genai/tests/models/test_generate_content_image_generation.py +0 -143
  156. google/genai/tests/models/test_generate_content_mcp.py +0 -343
  157. google/genai/tests/models/test_generate_content_media_resolution.py +0 -97
  158. google/genai/tests/models/test_generate_content_model.py +0 -139
  159. google/genai/tests/models/test_generate_content_part.py +0 -821
  160. google/genai/tests/models/test_generate_content_thought.py +0 -76
  161. google/genai/tests/models/test_generate_content_tools.py +0 -1761
  162. google/genai/tests/models/test_generate_images.py +0 -191
  163. google/genai/tests/models/test_generate_videos.py +0 -759
  164. google/genai/tests/models/test_get.py +0 -104
  165. google/genai/tests/models/test_list.py +0 -233
  166. google/genai/tests/models/test_recontext_image.py +0 -189
  167. google/genai/tests/models/test_segment_image.py +0 -148
  168. google/genai/tests/models/test_update.py +0 -95
  169. google/genai/tests/models/test_upscale_image.py +0 -157
  170. google/genai/tests/operations/__init__.py +0 -17
  171. google/genai/tests/operations/test_get.py +0 -38
  172. google/genai/tests/public_samples/__init__.py +0 -17
  173. google/genai/tests/public_samples/test_gemini_text_only.py +0 -34
  174. google/genai/tests/pytest_helper.py +0 -229
  175. google/genai/tests/shared/__init__.py +0 -16
  176. google/genai/tests/shared/batches/__init__.py +0 -14
  177. google/genai/tests/shared/batches/test_create_delete.py +0 -57
  178. google/genai/tests/shared/batches/test_create_get_cancel.py +0 -56
  179. google/genai/tests/shared/batches/test_list.py +0 -40
  180. google/genai/tests/shared/caches/__init__.py +0 -14
  181. google/genai/tests/shared/caches/test_create_get_delete.py +0 -67
  182. google/genai/tests/shared/caches/test_create_update_get.py +0 -71
  183. google/genai/tests/shared/caches/test_list.py +0 -40
  184. google/genai/tests/shared/chats/__init__.py +0 -14
  185. google/genai/tests/shared/chats/test_send_message.py +0 -48
  186. google/genai/tests/shared/chats/test_send_message_stream.py +0 -50
  187. google/genai/tests/shared/files/__init__.py +0 -14
  188. google/genai/tests/shared/files/test_list.py +0 -41
  189. google/genai/tests/shared/files/test_upload_get_delete.py +0 -54
  190. google/genai/tests/shared/models/__init__.py +0 -14
  191. google/genai/tests/shared/models/test_compute_tokens.py +0 -41
  192. google/genai/tests/shared/models/test_count_tokens.py +0 -40
  193. google/genai/tests/shared/models/test_edit_image.py +0 -67
  194. google/genai/tests/shared/models/test_embed.py +0 -40
  195. google/genai/tests/shared/models/test_generate_content.py +0 -39
  196. google/genai/tests/shared/models/test_generate_content_stream.py +0 -54
  197. google/genai/tests/shared/models/test_generate_images.py +0 -40
  198. google/genai/tests/shared/models/test_generate_videos.py +0 -38
  199. google/genai/tests/shared/models/test_list.py +0 -37
  200. google/genai/tests/shared/models/test_recontext_image.py +0 -55
  201. google/genai/tests/shared/models/test_segment_image.py +0 -52
  202. google/genai/tests/shared/models/test_upscale_image.py +0 -52
  203. google/genai/tests/shared/tunings/__init__.py +0 -16
  204. google/genai/tests/shared/tunings/test_create.py +0 -46
  205. google/genai/tests/shared/tunings/test_create_get_cancel.py +0 -56
  206. google/genai/tests/shared/tunings/test_list.py +0 -39
  207. google/genai/tests/tokens/__init__.py +0 -16
  208. google/genai/tests/tokens/test_create.py +0 -154
  209. google/genai/tests/transformers/__init__.py +0 -17
  210. google/genai/tests/transformers/test_blobs.py +0 -71
  211. google/genai/tests/transformers/test_bytes.py +0 -15
  212. google/genai/tests/transformers/test_duck_type.py +0 -96
  213. google/genai/tests/transformers/test_function_responses.py +0 -72
  214. google/genai/tests/transformers/test_schema.py +0 -653
  215. google/genai/tests/transformers/test_t_batch.py +0 -286
  216. google/genai/tests/transformers/test_t_content.py +0 -160
  217. google/genai/tests/transformers/test_t_contents.py +0 -398
  218. google/genai/tests/transformers/test_t_part.py +0 -85
  219. google/genai/tests/transformers/test_t_parts.py +0 -87
  220. google/genai/tests/transformers/test_t_tool.py +0 -157
  221. google/genai/tests/transformers/test_t_tools.py +0 -195
  222. google/genai/tests/tunings/__init__.py +0 -16
  223. google/genai/tests/tunings/test_cancel.py +0 -39
  224. google/genai/tests/tunings/test_end_to_end.py +0 -106
  225. google/genai/tests/tunings/test_get.py +0 -67
  226. google/genai/tests/tunings/test_list.py +0 -75
  227. google/genai/tests/tunings/test_tune.py +0 -268
  228. google/genai/tests/types/__init__.py +0 -16
  229. google/genai/tests/types/test_bytes_internal.py +0 -271
  230. google/genai/tests/types/test_bytes_type.py +0 -152
  231. google/genai/tests/types/test_future.py +0 -101
  232. google/genai/tests/types/test_optional_types.py +0 -36
  233. google/genai/tests/types/test_part_type.py +0 -616
  234. google/genai/tests/types/test_schema_from_json_schema.py +0 -417
  235. google/genai/tests/types/test_schema_json_schema.py +0 -468
  236. google/genai/tests/types/test_types.py +0 -2903
  237. google_genai-1.55.0.dist-info/RECORD +0 -345
  238. /google/genai/{tests/interactions/__init__.py → _interactions/py.typed} +0 -0
  239. {google_genai-1.55.0.dist-info → google_genai-1.56.0.dist-info}/WHEEL +0 -0
  240. {google_genai-1.55.0.dist-info → google_genai-1.56.0.dist-info}/licenses/LICENSE +0 -0
  241. {google_genai-1.55.0.dist-info → google_genai-1.56.0.dist-info}/top_level.txt +0 -0
@@ -1,152 +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
-
16
-
17
- import base64
18
- from datetime import datetime
19
- from typing import Any, Optional
20
-
21
- import pytest
22
-
23
- from ... import _common
24
-
25
- # 64 distinct chars in url safe base64.
26
- _URL_SAFE_BASE64 = (
27
- '-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
28
- )
29
- _RAW_BYTES = (
30
- b'\xfb\xf6\x9bq\xd7\x9f\x82\x18\xa3\x92Y\xa7\xa2\x9a\xab\xb2\xdb\xaf\xc3\x1c\xb3\x00\x10\x83\x10Q\x87'
31
- b' \x92\x8b0\xd3\x8fA\x14\x93QU\x97a\x9d5\xdb~9\xeb\xbf='
32
- )
33
- # 64 distinct chars in normal base64.
34
- _BASE64 = '+/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
35
- assert base64.b64decode(_BASE64) == _RAW_BYTES
36
-
37
-
38
- class MyBytesModel(_common.BaseModel):
39
- image_data: Optional[bytes]
40
-
41
-
42
- # This test shows that if user pass in url safe base64 string to a bytes field,
43
- # then SDK will return raw bytes in pydantic, model_dump() and __str__()
44
- # and base64 string in to_json_dict() and model_dump(mode='json').
45
- def test_urlsafe_base64_input_success():
46
- my_data = MyBytesModel(image_data=_URL_SAFE_BASE64)
47
-
48
- # Check output is base64 string.
49
- assert my_data.to_json_dict() == {'image_data': _URL_SAFE_BASE64}
50
- assert my_data.model_dump(mode='json') == {'image_data': _URL_SAFE_BASE64}
51
- assert isinstance(my_data.to_json_dict()['image_data'], str)
52
-
53
- # Check output is bytes.
54
- assert my_data.model_dump() == {'image_data': _RAW_BYTES}
55
- assert my_data.image_data == _RAW_BYTES
56
- assert isinstance(my_data.image_data, bytes)
57
-
58
- # Check print(my_data) will output the bytes string, not the base64 string.
59
- assert str(my_data) == 'image_data=' + str(_RAW_BYTES)
60
-
61
-
62
- # This test shows that if user pass in raw bytes to a bytes field,
63
- # then SDK will return raw bytes in pydantic, model_dump() and __str__()
64
- # and base64 string in to_json_dict() and model_dump(mode='json').
65
- def test_raw_bytes_input_success():
66
- my_data = MyBytesModel(image_data=_RAW_BYTES)
67
-
68
- # Check output is base64 string.
69
- assert my_data.to_json_dict() == {'image_data': _URL_SAFE_BASE64}
70
- assert my_data.model_dump(mode='json') == {'image_data': _URL_SAFE_BASE64}
71
- assert isinstance(my_data.to_json_dict()['image_data'], str)
72
-
73
- # Check output is bytes.
74
- assert my_data.model_dump() == {'image_data': _RAW_BYTES}
75
- assert my_data.image_data == _RAW_BYTES
76
- assert isinstance(my_data.image_data, bytes)
77
-
78
- # Check print(my_data) will output the bytes string, not the base64 string.
79
- assert str(my_data) == 'image_data=' + str(_RAW_BYTES)
80
-
81
-
82
- # This test shows that if user pass in invalid base64 string(normal base64 but
83
- # not url safe) to a bytes field, then SDK will raise ValueError.
84
- def test_invalid_base64_pydantic_input_failure():
85
- with pytest.raises(ValueError, match='Data should be valid base64'):
86
- MyBytesModel(image_data=_BASE64+'=') # invalid base64
87
-
88
-
89
- # This test shows that if user pass in invalid base64 string(normal base64 but
90
- # not url safe) to a bytes field, then SDK will raise ValueError.
91
- def test_invalid_base64_dict_input_failure():
92
- with pytest.raises(ValueError, match='Data should be valid base64'):
93
- MyBytesModel.model_validate({'image_data': _BASE64+'='}) # invalid base64
94
-
95
-
96
- # This test shows that if user pass in normal base64 string(
97
- # not url safe) to a bytes field, then Pydantic can correctly parse the normal
98
- # base64 string to bytes.
99
- def test_normal_base64_pydantic_input_success():
100
- data = MyBytesModel(image_data=_BASE64)
101
- assert data.image_data == _RAW_BYTES
102
-
103
-
104
- # This test shows that if user pass in normal base64 string via(
105
- # not url safe) via dict input with model_validate(), then Pydantic can
106
- # correctly parse the normal base64 string to bytes.
107
- def test_normal_base64_dict_input_success():
108
- data = MyBytesModel.model_validate({'image_data': _BASE64})
109
- assert data.image_data == _RAW_BYTES
110
-
111
-
112
- class MyAnyModel(_common.BaseModel):
113
- data: Optional[Any]
114
-
115
-
116
- # This test shows that if user pass in raw bytes to an Any type field,
117
- # then SDK will return raw bytes in pydantic, model_dump() and __str__()
118
- # and base64 string in to_json_dict() and model_dump(mode='json').
119
- def test_any_type_urlsafe_base64_input():
120
- my_data = MyAnyModel(data=_RAW_BYTES)
121
-
122
- # Check output is base64 string.
123
- assert my_data.to_json_dict() == {'data': _URL_SAFE_BASE64}
124
- assert my_data.model_dump(mode='json') == {'data': _URL_SAFE_BASE64}
125
- assert isinstance(my_data.to_json_dict()['data'], str)
126
-
127
- # Check output is bytes.
128
- assert my_data.model_dump() == {'data': _RAW_BYTES}
129
- assert my_data.data == _RAW_BYTES
130
- assert isinstance(my_data.data, bytes)
131
-
132
- # Check print(my_data) will output the bytes string, not the base64 string.
133
- assert str(my_data) == 'data=' + str(_RAW_BYTES)
134
-
135
-
136
- # This test shows if user pass in url safe base64 string to an Any type field,
137
- # then SDK will always return the base64 string.
138
- def test_any_type_urlsafe_base64_input():
139
- my_data = MyAnyModel(data=_URL_SAFE_BASE64)
140
-
141
- # Check output is base64 string.
142
- assert my_data.to_json_dict() == {'data': _URL_SAFE_BASE64}
143
- assert my_data.model_dump(mode='json') == {'data': _URL_SAFE_BASE64}
144
- assert isinstance(my_data.to_json_dict()['data'], str)
145
-
146
- # Check output is bytes.
147
- assert my_data.model_dump() == {'data': _URL_SAFE_BASE64}
148
- assert my_data.data == _URL_SAFE_BASE64
149
- assert isinstance(my_data.data, str)
150
-
151
- # Check print(my_data) will output the bytes string, not the base64 string.
152
- assert str(my_data) == "data='" + str(_URL_SAFE_BASE64) + "'"
@@ -1,101 +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
-
16
- # !Please DO NOT combine the test in this file with other tests. This file is
17
- # used to test the future annotation, which is the first line of import.
18
- from __future__ import annotations
19
-
20
- import copy
21
- import pydantic
22
-
23
- from ... import types
24
-
25
-
26
- class ComplexType(pydantic.BaseModel):
27
- param_x: str
28
- param_y: int
29
-
30
-
31
- class FakeClient:
32
-
33
- def __init__(self, vertexai=False) -> None:
34
- self.vertexai = vertexai
35
-
36
-
37
- mldev_client = FakeClient()
38
- vertex_client = FakeClient(vertexai=True)
39
-
40
-
41
- def test_future_annotation_simple_type():
42
- def func_under_test(param_1: str, param_2: int) -> str:
43
- return '123'
44
-
45
- expected_schema_mldev = types.FunctionDeclaration(
46
- name='func_under_test',
47
- parameters=types.Schema(
48
- type='OBJECT',
49
- properties={
50
- 'param_1': types.Schema(type='STRING'),
51
- 'param_2': types.Schema(type='INTEGER'),
52
- },
53
- required=['param_1', 'param_2'],
54
- ),
55
- )
56
- expected_schema_vertex = copy.deepcopy(expected_schema_mldev)
57
- expected_schema_vertex.response = types.Schema(type='STRING')
58
- actual_schema_mldev = types.FunctionDeclaration.from_callable(
59
- client=mldev_client, callable=func_under_test
60
- )
61
- actual_schema_vertex = types.FunctionDeclaration.from_callable(
62
- client=vertex_client, callable=func_under_test
63
- )
64
- assert actual_schema_mldev == expected_schema_mldev
65
- assert actual_schema_vertex == expected_schema_vertex
66
-
67
-
68
- def test_future_annotation_complex_type():
69
- def func_under_test(param_1: ComplexType, param_2: int) -> str:
70
- return '123'
71
-
72
- expected_schema_mldev = types.FunctionDeclaration(
73
- name='func_under_test',
74
- parameters=types.Schema(
75
- type='OBJECT',
76
- properties={
77
- 'param_1': types.Schema(
78
- type='OBJECT',
79
- properties={
80
- 'param_x': types.Schema(type='STRING'),
81
- 'param_y': types.Schema(type='INTEGER'),
82
- },
83
- required=['param_x', 'param_y'],
84
- ),
85
- 'param_2': types.Schema(type='INTEGER'),
86
- },
87
- required=['param_1', 'param_2'],
88
- )
89
- )
90
- expected_schema_vertex = copy.deepcopy(expected_schema_mldev)
91
- expected_schema_vertex.response = types.Schema(type='STRING')
92
-
93
- actual_schema_mldev = types.FunctionDeclaration.from_callable(
94
- client=mldev_client, callable=func_under_test
95
- )
96
- actual_schema_vertex = types.FunctionDeclaration.from_callable(
97
- client=vertex_client, callable=func_under_test
98
- )
99
-
100
- assert actual_schema_mldev == expected_schema_mldev
101
- assert actual_schema_vertex == expected_schema_vertex
@@ -1,36 +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
-
16
-
17
- from unittest.mock import patch
18
-
19
-
20
- @patch.dict('sys.modules', {'PIL': None, 'PIL.Image': None})
21
- def test_without_pil_installed_mocked():
22
- from ... import types
23
-
24
- type_names_in_union = [
25
- arg.__name__ if hasattr(arg, '__name__') else str(arg)
26
- for arg in types.PartUnion.__args__]
27
- assert 'Image' not in type_names_in_union
28
-
29
- def test_without_pil_installed_mocked():
30
- from ... import types
31
-
32
- type_names_in_union = [
33
- arg.__name__ if hasattr(arg, '__name__') else str(arg)
34
- for arg in types.PartUnion.__args__]
35
-
36
- assert 'Image' in type_names_in_union