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,241 +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
- """Test invoke_function_from_dict_args."""
18
-
19
- from typing import Union
20
- import pydantic
21
- import pytest
22
- import sys
23
- from ... import errors
24
- from ..._extra_utils import invoke_function_from_dict_args
25
-
26
-
27
- def test_builtin_primitive_types():
28
- def func_under_test(x: int, y: float, z: str, w: bool):
29
- return {
30
- 'x': x + 1,
31
- 'y': y + 1.0,
32
- 'z': z + '1.0',
33
- 'w': not w,
34
- }
35
-
36
- original_args = {
37
- 'x': 1,
38
- 'y': 1.0,
39
- 'z': '1.0',
40
- 'w': True,
41
- }
42
- expected_response = {
43
- 'x': 2,
44
- 'y': 2.0,
45
- 'z': '1.01.0',
46
- 'w': False,
47
- }
48
-
49
- actual_response = invoke_function_from_dict_args(
50
- original_args, func_under_test
51
- )
52
-
53
- assert actual_response == expected_response
54
-
55
-
56
- @pytest.mark.skipif(
57
- sys.version_info < (3, 10),
58
- reason='| is only supported in Python 3.9 and above.',
59
- )
60
- def test_builtin_compound_types():
61
- def func_under_test(x: list[int], y: dict[str, float]):
62
- return {
63
- 'new_x': x + [3],
64
- 'new_y': y | {'key3': 3.0},
65
- }
66
-
67
- original_args = {
68
- 'x': [1, 2],
69
- 'y': {'key1': 1.0, 'key2': 2.0},
70
- }
71
- expected_response = {
72
- 'new_x': [1, 2, 3],
73
- 'new_y': {'key1': 1.0, 'key2': 2.0, 'key3': 3.0},
74
- }
75
-
76
- actual_response = invoke_function_from_dict_args(
77
- original_args, func_under_test
78
- )
79
-
80
- assert actual_response == expected_response
81
-
82
-
83
- def test_nested_pydantic_model():
84
- class SimpleModel(pydantic.BaseModel):
85
- key1_simple: int
86
- key2_simple: float
87
-
88
- class ComplexModel(pydantic.BaseModel):
89
- key1_complex: SimpleModel
90
- key2_complex: list[SimpleModel]
91
- key3_complex: dict[str, SimpleModel]
92
-
93
- def func_under_test(x: ComplexModel):
94
- y = x.model_copy()
95
- y.key1_complex.key1_simple += 1
96
- y.key1_complex.key2_simple += 1.0
97
- for simple_model in y.key2_complex:
98
- simple_model.key1_simple += 1
99
- simple_model.key2_simple += 1.0
100
- for simple_model in y.key3_complex.values():
101
- simple_model.key1_simple += 1
102
- simple_model.key2_simple += 1.0
103
- return y
104
-
105
- original_args = {
106
- 'x': {
107
- 'key1_complex': {'key1_simple': 1, 'key2_simple': 1.0},
108
- 'key2_complex': [
109
- {'key1_simple': 2, 'key2_simple': 2.0},
110
- {'key1_simple': 3, 'key2_simple': 3.0},
111
- ],
112
- 'key3_complex': {
113
- 'key1_simple': {'key1_simple': 4, 'key2_simple': 4.0},
114
- 'key2_simple': {'key1_simple': 5, 'key2_simple': 5.0},
115
- },
116
- }
117
- }
118
- expected_response = {
119
- 'key1_complex': {'key1_simple': 2, 'key2_simple': 2.0},
120
- 'key2_complex': [
121
- {'key1_simple': 3, 'key2_simple': 3.0},
122
- {'key1_simple': 4, 'key2_simple': 4.0},
123
- ],
124
- 'key3_complex': {
125
- 'key1_simple': {'key1_simple': 5, 'key2_simple': 5.0},
126
- 'key2_simple': {'key1_simple': 6, 'key2_simple': 6.0},
127
- },
128
- }
129
-
130
- actual_response = invoke_function_from_dict_args(
131
- original_args, func_under_test
132
- )
133
-
134
- assert isinstance(actual_response, ComplexModel)
135
- assert isinstance(actual_response.key1_complex, SimpleModel)
136
- assert isinstance(actual_response.key2_complex[0], SimpleModel)
137
- assert isinstance(actual_response.key2_complex[1], SimpleModel)
138
- assert isinstance(actual_response.key3_complex['key1_simple'], SimpleModel)
139
- assert isinstance(actual_response.key3_complex['key2_simple'], SimpleModel)
140
- assert actual_response.model_dump() == expected_response
141
-
142
-
143
- def test_pydantic_model_in_list_union_type():
144
- class SimpleModel(pydantic.BaseModel):
145
- key1_simple: int
146
- key2_simple: float
147
-
148
- def func_under_test(x: list[Union[int, SimpleModel]]):
149
- result = []
150
- for item in x:
151
- if isinstance(item, int):
152
- result.append(item + 1)
153
- elif isinstance(item, SimpleModel):
154
- result.append(item.model_copy())
155
- result[-1].key1_simple += 1
156
- result[-1].key2_simple += 1.0
157
- else:
158
- raise ValueError('Unsupported type: %s' % type(item))
159
- return result
160
-
161
- expected_response = [2, {'key1_simple': 2, 'key2_simple': 2.0}]
162
- original_args = {'x': [1, {'key1_simple': 1, 'key2_simple': 1.0}]}
163
- actual_response = invoke_function_from_dict_args(
164
- original_args, func_under_test
165
- )
166
- assert isinstance(actual_response, list)
167
- assert len(actual_response) == 2
168
- assert isinstance(actual_response[0], int)
169
- assert isinstance(actual_response[1], SimpleModel)
170
- assert actual_response[0] == expected_response[0]
171
- assert actual_response[1].model_dump() == expected_response[1]
172
-
173
-
174
- def test_unknown_pydantic_model_argument():
175
- class SimpleModel(pydantic.BaseModel):
176
- key1_simple: int
177
- key2_simple: float
178
-
179
- def func_under_test(x: SimpleModel):
180
- return x.model_copy()
181
-
182
- original_args = {'x': {'key3_simple': 1, 'key2_simple': 1.0}}
183
-
184
- with pytest.raises(errors.UnknownFunctionCallArgumentError):
185
- invoke_function_from_dict_args(original_args, func_under_test)
186
-
187
-
188
- def test_unknown_pydantic_model_argument_with_union_type():
189
- class SimpleModel1(pydantic.BaseModel):
190
- key1_simple: int
191
- key2_simple: float
192
-
193
- class SimpleModel2(pydantic.BaseModel):
194
- key3_simple: str
195
- key4_simple: float
196
-
197
- def func_under_test(x: Union[SimpleModel1, SimpleModel2]):
198
- return x.model_copy()
199
-
200
- original_args = {'x': {'key5_simple': 1, 'key4_simple': 1.0}}
201
-
202
- with pytest.raises(errors.UnknownFunctionCallArgumentError):
203
- invoke_function_from_dict_args(original_args, func_under_test)
204
-
205
-
206
- def test_unknown_pydantic_model_argument_with_union_type_and_builtin_type():
207
- class SimpleModel1(pydantic.BaseModel):
208
- key1_simple: int
209
- key2_simple: float
210
-
211
- def func_under_test(x: Union[SimpleModel1, int]):
212
- return x.model_copy()
213
-
214
- original_args = {'x': {'key5_simple': 1, 'key4_simple': 1.0}}
215
-
216
- with pytest.raises(errors.UnknownFunctionCallArgumentError):
217
- invoke_function_from_dict_args(original_args, func_under_test)
218
-
219
-
220
- def test_incompatible_value_and_annotation():
221
- def func_under_test(x: int):
222
- return x + 1
223
-
224
- with pytest.raises(errors.UnknownFunctionCallArgumentError):
225
- invoke_function_from_dict_args({'x': {'k': 'v'}}, func_under_test)
226
- with pytest.raises(errors.UnknownFunctionCallArgumentError):
227
- invoke_function_from_dict_args({'x': 'a'}, func_under_test)
228
- with pytest.raises(errors.UnknownFunctionCallArgumentError):
229
- invoke_function_from_dict_args({'x': []}, func_under_test)
230
- with pytest.raises(errors.UnknownFunctionCallArgumentError):
231
- invoke_function_from_dict_args({'x': 1.0}, func_under_test)
232
- with pytest.raises(errors.UnknownFunctionCallArgumentError):
233
- invoke_function_from_dict_args({'x': {}}, func_under_test)
234
-
235
-
236
- def test_function_invocation_error():
237
- def func_under_test(x: int):
238
- return x / 0
239
-
240
- with pytest.raises(errors.FunctionInvocationError):
241
- invoke_function_from_dict_args({'x': 1}, func_under_test)
@@ -1,159 +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
- """Tests for raise_error_for_afc_incompatible_config."""
18
-
19
- import pytest
20
- from ... import types
21
- from ..._extra_utils import raise_error_for_afc_incompatible_config
22
-
23
-
24
- def test_config_is_none():
25
- assert raise_error_for_afc_incompatible_config(None) is None
26
-
27
-
28
- def test_tool_config_config_unset():
29
- assert (
30
- raise_error_for_afc_incompatible_config(types.GenerateContentConfig(
31
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
32
- disable=False,
33
- maximum_remote_calls=1,
34
- ),
35
- ))
36
- is None
37
- )
38
-
39
-
40
- def test_function_calling_config_unset():
41
- assert (
42
- raise_error_for_afc_incompatible_config(types.GenerateContentConfig(
43
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
44
- disable=False,
45
- maximum_remote_calls=1,
46
- ),
47
- tool_config=types.ToolConfig(),
48
- ))
49
- is None
50
- )
51
-
52
-
53
-
54
- def test_compatible_config_afc_disabled():
55
- assert (
56
- raise_error_for_afc_incompatible_config(
57
- types.GenerateContentConfig(
58
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
59
- disable=True,
60
- ),
61
- tool_config=types.ToolConfig(
62
- function_calling_config=types.FunctionCallingConfig(
63
- stream_function_call_arguments=False,
64
- ),
65
- ),
66
- )
67
- )
68
- is None
69
- )
70
-
71
-
72
- def test_compatible_config_stream_function_call_arguments_unset_afc_unset():
73
- assert (
74
- raise_error_for_afc_incompatible_config(
75
- types.GenerateContentConfig(
76
- tool_config=types.ToolConfig(
77
- function_calling_config=types.FunctionCallingConfig(
78
- ),
79
- ),
80
- )
81
- )
82
- is None
83
- )
84
-
85
-
86
- def test_compatible_config_stream_function_call_arguments_unset_no_disable_afc():
87
- assert (
88
- raise_error_for_afc_incompatible_config(
89
- types.GenerateContentConfig(
90
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
91
- ),
92
- tool_config=types.ToolConfig(
93
- function_calling_config=types.FunctionCallingConfig(
94
- ),
95
- ),
96
- )
97
- )
98
- is None
99
- )
100
-
101
-
102
- def test_compatible_config_stream_function_call_arguments_unset_disable_afc_true():
103
- assert (
104
- raise_error_for_afc_incompatible_config(
105
- types.GenerateContentConfig(
106
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
107
- disable=True,
108
- ),
109
- tool_config=types.ToolConfig(
110
- function_calling_config=types.FunctionCallingConfig(
111
- ),
112
- ),
113
- )
114
- )
115
- is None
116
- )
117
-
118
-
119
- def test_incompatible_config_stream_function_call_arguments_set_enable_afc():
120
- with pytest.raises(ValueError):
121
- raise_error_for_afc_incompatible_config(
122
- types.GenerateContentConfig(
123
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
124
- disable=False,
125
- ),
126
- tool_config=types.ToolConfig(
127
- function_calling_config=types.FunctionCallingConfig(
128
- stream_function_call_arguments=True,
129
- ),
130
- ),
131
- )
132
- )
133
-
134
-
135
- def test_incompatible_config_stream_function_call_arguments_set_no_afc_config():
136
- with pytest.raises(ValueError):
137
- raise_error_for_afc_incompatible_config(
138
- types.GenerateContentConfig(
139
- tool_config=types.ToolConfig(
140
- function_calling_config=types.FunctionCallingConfig(
141
- stream_function_call_arguments=True,
142
- ),
143
- ),
144
- )
145
- )
146
-
147
-
148
- def test_incompatible_config_stream_function_call_arguments_set_no_disable_afc():
149
- with pytest.raises(ValueError):
150
- raise_error_for_afc_incompatible_config(
151
- types.GenerateContentConfig(
152
- automatic_function_calling=types.AutomaticFunctionCallingConfig(),
153
- tool_config=types.ToolConfig(
154
- function_calling_config=types.FunctionCallingConfig(
155
- stream_function_call_arguments=True,
156
- ),
157
- ),
158
- )
159
- )
@@ -1,53 +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
- """Tests for _extra_utils.should_append_afc_history."""
17
-
18
- from ... import types
19
- from ..._extra_utils import should_append_afc_history
20
-
21
-
22
- def test_should_append_afc_history_with_default_config():
23
- config = types.GenerateContentConfig()
24
-
25
- assert should_append_afc_history(config) == True
26
-
27
-
28
- def test_should_append_afc_history_with_empty_afc_config():
29
- config = types.GenerateContentConfig(
30
- automatic_function_calling=types.AutomaticFunctionCallingConfig()
31
- )
32
-
33
- assert should_append_afc_history(config) == True
34
-
35
-
36
- def test_should_append_afc_history_with_ignore_call_history_true():
37
- config = types.GenerateContentConfig(
38
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
39
- ignore_call_history=True
40
- )
41
- )
42
-
43
- assert should_append_afc_history(config) == False
44
-
45
-
46
- def test_should_append_afc_history_with_ignore_call_history_false():
47
- config = types.GenerateContentConfig(
48
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
49
- ignore_call_history=False
50
- )
51
- )
52
-
53
- assert should_append_afc_history(config) == True
@@ -1,214 +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
- """Tests for should_disable_afc."""
18
-
19
- import pytest
20
- from ... import types
21
- from ..._extra_utils import should_disable_afc
22
-
23
-
24
- def test_config_is_none():
25
- assert should_disable_afc(None) is False
26
-
27
-
28
- def test_afc_config_unset():
29
- assert should_disable_afc(types.GenerateContentConfig()) is False
30
-
31
-
32
- def test_afc_enable_unset_max_0():
33
- assert (
34
- should_disable_afc(
35
- types.GenerateContentConfig(
36
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
37
- maximum_remote_calls=0,
38
- ),
39
- )
40
- )
41
- is True
42
- )
43
-
44
-
45
- def test_afc_enable_unset_max_negative():
46
- assert (
47
- should_disable_afc(
48
- types.GenerateContentConfig(
49
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
50
- maximum_remote_calls=-1,
51
- ),
52
- )
53
- )
54
- is True
55
- )
56
-
57
-
58
- def test_afc_enable_unset_max_0_0():
59
- assert (
60
- should_disable_afc(
61
- {'automatic_function_calling': {'maximum_remote_calls': 0.0}}
62
- )
63
- is True
64
- )
65
-
66
-
67
- def test_afc_enable_unset_max_1():
68
- assert (
69
- should_disable_afc(
70
- types.GenerateContentConfig(
71
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
72
- maximum_remote_calls=1,
73
- ),
74
- )
75
- )
76
- is False
77
- )
78
-
79
-
80
- def test_afc_enable_unset_max_1_0():
81
- assert (
82
- should_disable_afc(
83
- {'automatic_function_calling': {'maximum_remote_calls': 1.0}}
84
- )
85
- is False
86
- )
87
-
88
-
89
- def test_afc_enable_false_max_unset():
90
- assert (
91
- should_disable_afc(
92
- types.GenerateContentConfig(
93
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
94
- disable=True,
95
- ),
96
- )
97
- )
98
- is True
99
- )
100
-
101
-
102
- def test_afc_enable_false_max_0():
103
- assert (
104
- should_disable_afc(
105
- types.GenerateContentConfig(
106
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
107
- disable=True,
108
- maximum_remote_calls=0,
109
- ),
110
- )
111
- )
112
- is True
113
- )
114
-
115
-
116
- def test_afc_enable_false_max_negative():
117
- assert (
118
- should_disable_afc(
119
- types.GenerateContentConfig(
120
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
121
- disable=True,
122
- maximum_remote_calls=-1,
123
- ),
124
- )
125
- )
126
- is True
127
- )
128
-
129
-
130
- def test_afc_enable_false_max_0_0():
131
- assert (
132
- should_disable_afc(
133
- {'automatic_function_calling': {'maximum_remote_calls': 0.0}}
134
- )
135
- is True
136
- )
137
-
138
-
139
- def test_afc_enable_false_max_1():
140
- assert (
141
- should_disable_afc(
142
- types.GenerateContentConfig(
143
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
144
- disable=True,
145
- maximum_remote_calls=1,
146
- ),
147
- )
148
- )
149
- is True
150
- )
151
-
152
-
153
- def test_afc_enable_true_max_unset():
154
- assert (
155
- should_disable_afc(
156
- types.GenerateContentConfig(
157
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
158
- disable=False,
159
- ),
160
- )
161
- )
162
- is False
163
- )
164
-
165
-
166
- def test_afc_enable_true_max_0():
167
- assert (
168
- should_disable_afc(
169
- types.GenerateContentConfig(
170
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
171
- disable=False,
172
- maximum_remote_calls=0,
173
- ),
174
- )
175
- )
176
- is True
177
- )
178
-
179
-
180
- def test_afc_enable_true_max_negative():
181
- assert (
182
- should_disable_afc(
183
- types.GenerateContentConfig(
184
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
185
- disable=False,
186
- maximum_remote_calls=-1,
187
- ),
188
- )
189
- )
190
- is True
191
- )
192
-
193
-
194
- def test_afc_enable_true_max_0_0():
195
- assert (
196
- should_disable_afc(
197
- {'automatic_function_calling': {'maximum_remote_calls': 0.0}}
198
- )
199
- is True
200
- )
201
-
202
-
203
- def test_afc_enable_true_max_1():
204
- assert (
205
- should_disable_afc(
206
- types.GenerateContentConfig(
207
- automatic_function_calling=types.AutomaticFunctionCallingConfig(
208
- disable=False,
209
- maximum_remote_calls=1,
210
- ),
211
- )
212
- )
213
- is False
214
- )
@@ -1,17 +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
- """Tests for the Google GenAI SDK's batches module."""