google-genai 1.56.0__py3-none-any.whl → 1.58.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 (246) hide show
  1. google/genai/_api_client.py +49 -26
  2. google/genai/_interactions/__init__.py +3 -0
  3. google/genai/_interactions/_base_client.py +1 -1
  4. google/genai/_interactions/_client.py +57 -3
  5. google/genai/_interactions/_client_adapter.py +48 -0
  6. google/genai/_interactions/types/__init__.py +6 -0
  7. google/genai/_interactions/types/audio_content.py +2 -0
  8. google/genai/_interactions/types/audio_content_param.py +2 -0
  9. google/genai/_interactions/types/content.py +65 -0
  10. google/genai/_interactions/types/content_delta.py +10 -2
  11. google/genai/_interactions/types/content_param.py +63 -0
  12. google/genai/_interactions/types/content_start.py +5 -46
  13. google/genai/_interactions/types/content_stop.py +1 -2
  14. google/genai/_interactions/types/document_content.py +2 -0
  15. google/genai/_interactions/types/document_content_param.py +2 -0
  16. google/genai/_interactions/types/error_event.py +1 -2
  17. google/genai/_interactions/types/file_search_call_content.py +32 -0
  18. google/genai/_interactions/types/file_search_call_content_param.py +31 -0
  19. google/genai/_interactions/types/generation_config.py +4 -0
  20. google/genai/_interactions/types/generation_config_param.py +4 -0
  21. google/genai/_interactions/types/image_config.py +31 -0
  22. google/genai/_interactions/types/image_config_param.py +30 -0
  23. google/genai/_interactions/types/image_content.py +2 -0
  24. google/genai/_interactions/types/image_content_param.py +2 -0
  25. google/genai/_interactions/types/interaction.py +6 -52
  26. google/genai/_interactions/types/interaction_create_params.py +4 -22
  27. google/genai/_interactions/types/interaction_event.py +1 -2
  28. google/genai/_interactions/types/interaction_sse_event.py +5 -3
  29. google/genai/_interactions/types/interaction_status_update.py +1 -2
  30. google/genai/_interactions/types/model.py +1 -0
  31. google/genai/_interactions/types/model_param.py +1 -0
  32. google/genai/_interactions/types/turn.py +3 -44
  33. google/genai/_interactions/types/turn_param.py +4 -40
  34. google/genai/_interactions/types/usage.py +1 -1
  35. google/genai/_interactions/types/usage_param.py +1 -1
  36. google/genai/_interactions/types/video_content.py +2 -0
  37. google/genai/_interactions/types/video_content_param.py +2 -0
  38. google/genai/_live_converters.py +118 -34
  39. google/genai/_local_tokenizer_loader.py +1 -0
  40. google/genai/_tokens_converters.py +14 -14
  41. google/genai/_transformers.py +15 -21
  42. google/genai/batches.py +27 -22
  43. google/genai/caches.py +42 -42
  44. google/genai/chats.py +0 -2
  45. google/genai/client.py +61 -55
  46. google/genai/files.py +224 -0
  47. google/genai/live.py +1 -1
  48. google/genai/models.py +56 -44
  49. google/genai/tests/__init__.py +21 -0
  50. google/genai/tests/afc/__init__.py +21 -0
  51. google/genai/tests/afc/test_convert_if_exist_pydantic_model.py +309 -0
  52. google/genai/tests/afc/test_convert_number_values_for_function_call_args.py +63 -0
  53. google/genai/tests/afc/test_find_afc_incompatible_tool_indexes.py +240 -0
  54. google/genai/tests/afc/test_generate_content_stream_afc.py +530 -0
  55. google/genai/tests/afc/test_generate_content_stream_afc_thoughts.py +77 -0
  56. google/genai/tests/afc/test_get_function_map.py +176 -0
  57. google/genai/tests/afc/test_get_function_response_parts.py +277 -0
  58. google/genai/tests/afc/test_get_max_remote_calls_for_afc.py +130 -0
  59. google/genai/tests/afc/test_invoke_function_from_dict_args.py +241 -0
  60. google/genai/tests/afc/test_raise_error_for_afc_incompatible_config.py +159 -0
  61. google/genai/tests/afc/test_should_append_afc_history.py +53 -0
  62. google/genai/tests/afc/test_should_disable_afc.py +214 -0
  63. google/genai/tests/batches/__init__.py +17 -0
  64. google/genai/tests/batches/test_cancel.py +77 -0
  65. google/genai/tests/batches/test_create.py +78 -0
  66. google/genai/tests/batches/test_create_with_bigquery.py +113 -0
  67. google/genai/tests/batches/test_create_with_file.py +82 -0
  68. google/genai/tests/batches/test_create_with_gcs.py +125 -0
  69. google/genai/tests/batches/test_create_with_inlined_requests.py +255 -0
  70. google/genai/tests/batches/test_delete.py +86 -0
  71. google/genai/tests/batches/test_embedding.py +157 -0
  72. google/genai/tests/batches/test_get.py +78 -0
  73. google/genai/tests/batches/test_list.py +79 -0
  74. google/genai/tests/caches/__init__.py +17 -0
  75. google/genai/tests/caches/constants.py +29 -0
  76. google/genai/tests/caches/test_create.py +210 -0
  77. google/genai/tests/caches/test_create_custom_url.py +105 -0
  78. google/genai/tests/caches/test_delete.py +54 -0
  79. google/genai/tests/caches/test_delete_custom_url.py +52 -0
  80. google/genai/tests/caches/test_get.py +94 -0
  81. google/genai/tests/caches/test_get_custom_url.py +52 -0
  82. google/genai/tests/caches/test_list.py +68 -0
  83. google/genai/tests/caches/test_update.py +70 -0
  84. google/genai/tests/caches/test_update_custom_url.py +58 -0
  85. google/genai/tests/chats/__init__.py +1 -0
  86. google/genai/tests/chats/test_get_history.py +598 -0
  87. google/genai/tests/chats/test_send_message.py +844 -0
  88. google/genai/tests/chats/test_validate_response.py +90 -0
  89. google/genai/tests/client/__init__.py +17 -0
  90. google/genai/tests/client/test_async_stream.py +427 -0
  91. google/genai/tests/client/test_client_close.py +197 -0
  92. google/genai/tests/client/test_client_initialization.py +1687 -0
  93. google/genai/tests/client/test_client_requests.py +221 -0
  94. google/genai/tests/client/test_custom_client.py +104 -0
  95. google/genai/tests/client/test_http_options.py +178 -0
  96. google/genai/tests/client/test_replay_client_equality.py +168 -0
  97. google/genai/tests/client/test_retries.py +846 -0
  98. google/genai/tests/client/test_upload_errors.py +136 -0
  99. google/genai/tests/common/__init__.py +17 -0
  100. google/genai/tests/common/test_common.py +954 -0
  101. google/genai/tests/conftest.py +162 -0
  102. google/genai/tests/documents/__init__.py +17 -0
  103. google/genai/tests/documents/test_delete.py +51 -0
  104. google/genai/tests/documents/test_get.py +85 -0
  105. google/genai/tests/documents/test_list.py +72 -0
  106. google/genai/tests/errors/__init__.py +1 -0
  107. google/genai/tests/errors/test_api_error.py +417 -0
  108. google/genai/tests/file_search_stores/__init__.py +17 -0
  109. google/genai/tests/file_search_stores/test_create.py +66 -0
  110. google/genai/tests/file_search_stores/test_delete.py +64 -0
  111. google/genai/tests/file_search_stores/test_get.py +94 -0
  112. google/genai/tests/file_search_stores/test_import_file.py +112 -0
  113. google/genai/tests/file_search_stores/test_list.py +57 -0
  114. google/genai/tests/file_search_stores/test_upload_to_file_search_store.py +141 -0
  115. google/genai/tests/files/__init__.py +17 -0
  116. google/genai/tests/files/test_delete.py +46 -0
  117. google/genai/tests/files/test_download.py +85 -0
  118. google/genai/tests/files/test_get.py +46 -0
  119. google/genai/tests/files/test_list.py +72 -0
  120. google/genai/tests/files/test_register.py +272 -0
  121. google/genai/tests/files/test_register_table.py +70 -0
  122. google/genai/tests/files/test_upload.py +255 -0
  123. google/genai/tests/imports/test_no_optional_imports.py +28 -0
  124. google/genai/tests/interactions/test_auth.py +476 -0
  125. google/genai/tests/interactions/test_integration.py +84 -0
  126. google/genai/tests/interactions/test_paths.py +105 -0
  127. google/genai/tests/live/__init__.py +16 -0
  128. google/genai/tests/live/test_live.py +2143 -0
  129. google/genai/tests/live/test_live_music.py +362 -0
  130. google/genai/tests/live/test_live_response.py +163 -0
  131. google/genai/tests/live/test_send_client_content.py +147 -0
  132. google/genai/tests/live/test_send_realtime_input.py +268 -0
  133. google/genai/tests/live/test_send_tool_response.py +222 -0
  134. google/genai/tests/local_tokenizer/__init__.py +17 -0
  135. google/genai/tests/local_tokenizer/test_local_tokenizer.py +343 -0
  136. google/genai/tests/local_tokenizer/test_local_tokenizer_loader.py +235 -0
  137. google/genai/tests/mcp/__init__.py +17 -0
  138. google/genai/tests/mcp/test_has_mcp_tool_usage.py +89 -0
  139. google/genai/tests/mcp/test_mcp_to_gemini_tools.py +191 -0
  140. google/genai/tests/mcp/test_parse_config_for_mcp_sessions.py +201 -0
  141. google/genai/tests/mcp/test_parse_config_for_mcp_usage.py +130 -0
  142. google/genai/tests/mcp/test_set_mcp_usage_header.py +72 -0
  143. google/genai/tests/models/__init__.py +17 -0
  144. google/genai/tests/models/constants.py +8 -0
  145. google/genai/tests/models/test_compute_tokens.py +120 -0
  146. google/genai/tests/models/test_count_tokens.py +159 -0
  147. google/genai/tests/models/test_delete.py +107 -0
  148. google/genai/tests/models/test_edit_image.py +264 -0
  149. google/genai/tests/models/test_embed_content.py +94 -0
  150. google/genai/tests/models/test_function_call_streaming.py +442 -0
  151. google/genai/tests/models/test_generate_content.py +2501 -0
  152. google/genai/tests/models/test_generate_content_cached_content.py +132 -0
  153. google/genai/tests/models/test_generate_content_config_zero_value.py +103 -0
  154. google/genai/tests/models/test_generate_content_from_apikey.py +44 -0
  155. google/genai/tests/models/test_generate_content_http_options.py +40 -0
  156. google/genai/tests/models/test_generate_content_image_generation.py +143 -0
  157. google/genai/tests/models/test_generate_content_mcp.py +343 -0
  158. google/genai/tests/models/test_generate_content_media_resolution.py +97 -0
  159. google/genai/tests/models/test_generate_content_model.py +139 -0
  160. google/genai/tests/models/test_generate_content_part.py +821 -0
  161. google/genai/tests/models/test_generate_content_thought.py +76 -0
  162. google/genai/tests/models/test_generate_content_tools.py +1761 -0
  163. google/genai/tests/models/test_generate_images.py +191 -0
  164. google/genai/tests/models/test_generate_videos.py +759 -0
  165. google/genai/tests/models/test_get.py +104 -0
  166. google/genai/tests/models/test_list.py +233 -0
  167. google/genai/tests/models/test_recontext_image.py +189 -0
  168. google/genai/tests/models/test_segment_image.py +148 -0
  169. google/genai/tests/models/test_update.py +95 -0
  170. google/genai/tests/models/test_upscale_image.py +157 -0
  171. google/genai/tests/operations/__init__.py +17 -0
  172. google/genai/tests/operations/test_get.py +38 -0
  173. google/genai/tests/public_samples/__init__.py +17 -0
  174. google/genai/tests/public_samples/test_gemini_text_only.py +34 -0
  175. google/genai/tests/pytest_helper.py +246 -0
  176. google/genai/tests/shared/__init__.py +16 -0
  177. google/genai/tests/shared/batches/__init__.py +14 -0
  178. google/genai/tests/shared/batches/test_create_delete.py +57 -0
  179. google/genai/tests/shared/batches/test_create_get_cancel.py +56 -0
  180. google/genai/tests/shared/batches/test_list.py +40 -0
  181. google/genai/tests/shared/caches/__init__.py +14 -0
  182. google/genai/tests/shared/caches/test_create_get_delete.py +67 -0
  183. google/genai/tests/shared/caches/test_create_update_get.py +71 -0
  184. google/genai/tests/shared/caches/test_list.py +40 -0
  185. google/genai/tests/shared/chats/__init__.py +14 -0
  186. google/genai/tests/shared/chats/test_send_message.py +48 -0
  187. google/genai/tests/shared/chats/test_send_message_stream.py +50 -0
  188. google/genai/tests/shared/files/__init__.py +14 -0
  189. google/genai/tests/shared/files/test_list.py +41 -0
  190. google/genai/tests/shared/files/test_upload_get_delete.py +54 -0
  191. google/genai/tests/shared/models/__init__.py +14 -0
  192. google/genai/tests/shared/models/test_compute_tokens.py +41 -0
  193. google/genai/tests/shared/models/test_count_tokens.py +40 -0
  194. google/genai/tests/shared/models/test_edit_image.py +67 -0
  195. google/genai/tests/shared/models/test_embed.py +40 -0
  196. google/genai/tests/shared/models/test_generate_content.py +39 -0
  197. google/genai/tests/shared/models/test_generate_content_stream.py +54 -0
  198. google/genai/tests/shared/models/test_generate_images.py +40 -0
  199. google/genai/tests/shared/models/test_generate_videos.py +38 -0
  200. google/genai/tests/shared/models/test_list.py +37 -0
  201. google/genai/tests/shared/models/test_recontext_image.py +55 -0
  202. google/genai/tests/shared/models/test_segment_image.py +52 -0
  203. google/genai/tests/shared/models/test_upscale_image.py +52 -0
  204. google/genai/tests/shared/tunings/__init__.py +16 -0
  205. google/genai/tests/shared/tunings/test_create.py +46 -0
  206. google/genai/tests/shared/tunings/test_create_get_cancel.py +56 -0
  207. google/genai/tests/shared/tunings/test_list.py +39 -0
  208. google/genai/tests/tokens/__init__.py +16 -0
  209. google/genai/tests/tokens/test_create.py +154 -0
  210. google/genai/tests/transformers/__init__.py +17 -0
  211. google/genai/tests/transformers/test_blobs.py +84 -0
  212. google/genai/tests/transformers/test_bytes.py +15 -0
  213. google/genai/tests/transformers/test_duck_type.py +96 -0
  214. google/genai/tests/transformers/test_function_responses.py +72 -0
  215. google/genai/tests/transformers/test_schema.py +653 -0
  216. google/genai/tests/transformers/test_t_batch.py +286 -0
  217. google/genai/tests/transformers/test_t_content.py +160 -0
  218. google/genai/tests/transformers/test_t_contents.py +398 -0
  219. google/genai/tests/transformers/test_t_part.py +85 -0
  220. google/genai/tests/transformers/test_t_parts.py +87 -0
  221. google/genai/tests/transformers/test_t_tool.py +157 -0
  222. google/genai/tests/transformers/test_t_tools.py +195 -0
  223. google/genai/tests/tunings/__init__.py +16 -0
  224. google/genai/tests/tunings/test_cancel.py +39 -0
  225. google/genai/tests/tunings/test_end_to_end.py +106 -0
  226. google/genai/tests/tunings/test_get.py +67 -0
  227. google/genai/tests/tunings/test_list.py +75 -0
  228. google/genai/tests/tunings/test_tune.py +268 -0
  229. google/genai/tests/types/__init__.py +16 -0
  230. google/genai/tests/types/test_bytes_internal.py +271 -0
  231. google/genai/tests/types/test_bytes_type.py +152 -0
  232. google/genai/tests/types/test_future.py +101 -0
  233. google/genai/tests/types/test_optional_types.py +36 -0
  234. google/genai/tests/types/test_part_type.py +616 -0
  235. google/genai/tests/types/test_schema_from_json_schema.py +417 -0
  236. google/genai/tests/types/test_schema_json_schema.py +468 -0
  237. google/genai/tests/types/test_types.py +2903 -0
  238. google/genai/types.py +631 -488
  239. google/genai/version.py +1 -1
  240. {google_genai-1.56.0.dist-info → google_genai-1.58.0.dist-info}/METADATA +6 -11
  241. google_genai-1.58.0.dist-info/RECORD +358 -0
  242. google_genai-1.56.0.dist-info/RECORD +0 -162
  243. /google/genai/{_interactions/py.typed → tests/interactions/__init__.py} +0 -0
  244. {google_genai-1.56.0.dist-info → google_genai-1.58.0.dist-info}/WHEEL +0 -0
  245. {google_genai-1.56.0.dist-info → google_genai-1.58.0.dist-info}/licenses/LICENSE +0 -0
  246. {google_genai-1.56.0.dist-info → google_genai-1.58.0.dist-info}/top_level.txt +0 -0
@@ -30,8 +30,10 @@ class DocumentContent(BaseModel):
30
30
  type: Literal["document"]
31
31
 
32
32
  data: Optional[str] = None
33
+ """The document content."""
33
34
 
34
35
  mime_type: Optional[DocumentMimeType] = None
35
36
  """The mime type of the document."""
36
37
 
37
38
  uri: Optional[str] = None
39
+ """The URI of the document."""
@@ -34,11 +34,13 @@ class DocumentContentParam(TypedDict, total=False):
34
34
  type: Required[Literal["document"]]
35
35
 
36
36
  data: Annotated[Union[str, Base64FileInput], PropertyInfo(format="base64")]
37
+ """The document content."""
37
38
 
38
39
  mime_type: DocumentMimeTypeParam
39
40
  """The mime type of the document."""
40
41
 
41
42
  uri: str
43
+ """The URI of the document."""
42
44
 
43
45
 
44
46
  set_pydantic_config(DocumentContentParam, {"arbitrary_types_allowed": True})
@@ -39,8 +39,7 @@ class ErrorEvent(BaseModel):
39
39
 
40
40
  event_id: Optional[str] = None
41
41
  """
42
- The event_id token to be used to resume the interaction stream, from
43
- this event.
42
+ The event_id token to be used to resume the interaction stream, from this event.
44
43
  """
45
44
 
46
45
  event_type: Optional[Literal["error"]] = None
@@ -0,0 +1,32 @@
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
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
17
+
18
+ from typing import Optional
19
+ from typing_extensions import Literal
20
+
21
+ from .._models import BaseModel
22
+
23
+ __all__ = ["FileSearchCallContent"]
24
+
25
+
26
+ class FileSearchCallContent(BaseModel):
27
+ """File Search content."""
28
+
29
+ type: Literal["file_search_call"]
30
+
31
+ id: Optional[str] = None
32
+ """A unique ID for this specific tool call."""
@@ -0,0 +1,31 @@
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
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
17
+
18
+ from __future__ import annotations
19
+
20
+ from typing_extensions import Literal, Required, TypedDict
21
+
22
+ __all__ = ["FileSearchCallContentParam"]
23
+
24
+
25
+ class FileSearchCallContentParam(TypedDict, total=False):
26
+ """File Search content."""
27
+
28
+ type: Required[Literal["file_search_call"]]
29
+
30
+ id: str
31
+ """A unique ID for this specific tool call."""
@@ -20,6 +20,7 @@ from typing_extensions import Literal
20
20
 
21
21
  from .._models import BaseModel
22
22
  from .tool_choice import ToolChoice
23
+ from .image_config import ImageConfig
23
24
  from .speech_config import SpeechConfig
24
25
  from .thinking_level import ThinkingLevel
25
26
 
@@ -29,6 +30,9 @@ __all__ = ["GenerationConfig"]
29
30
  class GenerationConfig(BaseModel):
30
31
  """Configuration parameters for model interactions."""
31
32
 
33
+ image_config: Optional[ImageConfig] = None
34
+ """Configuration for image interaction."""
35
+
32
36
  max_output_tokens: Optional[int] = None
33
37
  """The maximum number of tokens to include in the response."""
34
38
 
@@ -23,6 +23,7 @@ from typing_extensions import Literal, TypedDict
23
23
  from .._types import SequenceNotStr
24
24
  from .thinking_level import ThinkingLevel
25
25
  from .tool_choice_param import ToolChoiceParam
26
+ from .image_config_param import ImageConfigParam
26
27
  from .speech_config_param import SpeechConfigParam
27
28
 
28
29
  __all__ = ["GenerationConfigParam"]
@@ -31,6 +32,9 @@ __all__ = ["GenerationConfigParam"]
31
32
  class GenerationConfigParam(TypedDict, total=False):
32
33
  """Configuration parameters for model interactions."""
33
34
 
35
+ image_config: ImageConfigParam
36
+ """Configuration for image interaction."""
37
+
34
38
  max_output_tokens: int
35
39
  """The maximum number of tokens to include in the response."""
36
40
 
@@ -0,0 +1,31 @@
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
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
17
+
18
+ from typing import Optional
19
+ from typing_extensions import Literal
20
+
21
+ from .._models import BaseModel
22
+
23
+ __all__ = ["ImageConfig"]
24
+
25
+
26
+ class ImageConfig(BaseModel):
27
+ """The configuration for image interaction."""
28
+
29
+ aspect_ratio: Optional[Literal["1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "21:9"]] = None
30
+
31
+ image_size: Optional[Literal["1K", "2K", "4K"]] = None
@@ -0,0 +1,30 @@
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
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
17
+
18
+ from __future__ import annotations
19
+
20
+ from typing_extensions import Literal, TypedDict
21
+
22
+ __all__ = ["ImageConfigParam"]
23
+
24
+
25
+ class ImageConfigParam(TypedDict, total=False):
26
+ """The configuration for image interaction."""
27
+
28
+ aspect_ratio: Literal["1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "21:9"]
29
+
30
+ image_size: Literal["1K", "2K", "4K"]
@@ -30,6 +30,7 @@ class ImageContent(BaseModel):
30
30
  type: Literal["image"]
31
31
 
32
32
  data: Optional[str] = None
33
+ """The image content."""
33
34
 
34
35
  mime_type: Optional[ImageMimeType] = None
35
36
  """The mime type of the image."""
@@ -38,3 +39,4 @@ class ImageContent(BaseModel):
38
39
  """The resolution of the media."""
39
40
 
40
41
  uri: Optional[str] = None
42
+ """The URI of the image."""
@@ -34,6 +34,7 @@ class ImageContentParam(TypedDict, total=False):
34
34
  type: Required[Literal["image"]]
35
35
 
36
36
  data: Annotated[Union[str, Base64FileInput], PropertyInfo(format="base64")]
37
+ """The image content."""
37
38
 
38
39
  mime_type: ImageMimeTypeParam
39
40
  """The mime type of the image."""
@@ -42,6 +43,7 @@ class ImageContentParam(TypedDict, total=False):
42
43
  """The resolution of the media."""
43
44
 
44
45
  uri: str
46
+ """The URI of the image."""
45
47
 
46
48
 
47
49
  set_pydantic_config(ImageContentParam, {"arbitrary_types_allowed": True})
@@ -23,6 +23,7 @@ from .turn import Turn
23
23
  from .model import Model
24
24
  from .usage import Usage
25
25
  from .._utils import PropertyInfo
26
+ from .content import Content
26
27
  from .._models import BaseModel
27
28
  from .text_content import TextContent
28
29
  from .audio_content import AudioContent
@@ -33,6 +34,7 @@ from .document_content import DocumentContent
33
34
  from .dynamic_agent_config import DynamicAgentConfig
34
35
  from .function_call_content import FunctionCallContent
35
36
  from .function_result_content import FunctionResultContent
37
+ from .file_search_call_content import FileSearchCallContent
36
38
  from .url_context_call_content import URLContextCallContent
37
39
  from .deep_research_agent_config import DeepResearchAgentConfig
38
40
  from .file_search_result_content import FileSearchResultContent
@@ -44,38 +46,15 @@ from .mcp_server_tool_call_content import MCPServerToolCallContent
44
46
  from .code_execution_result_content import CodeExecutionResultContent
45
47
  from .mcp_server_tool_result_content import MCPServerToolResultContent
46
48
 
47
- __all__ = ["Interaction", "AgentConfig", "Input", "InputContentList", "Output"]
49
+ __all__ = ["Interaction", "AgentConfig", "Input"]
48
50
 
49
51
  AgentConfig: TypeAlias = Annotated[
50
52
  Union[DynamicAgentConfig, DeepResearchAgentConfig], PropertyInfo(discriminator="type")
51
53
  ]
52
54
 
53
- InputContentList: TypeAlias = Annotated[
54
- Union[
55
- TextContent,
56
- ImageContent,
57
- AudioContent,
58
- DocumentContent,
59
- VideoContent,
60
- ThoughtContent,
61
- FunctionCallContent,
62
- FunctionResultContent,
63
- CodeExecutionCallContent,
64
- CodeExecutionResultContent,
65
- URLContextCallContent,
66
- URLContextResultContent,
67
- GoogleSearchCallContent,
68
- GoogleSearchResultContent,
69
- MCPServerToolCallContent,
70
- MCPServerToolResultContent,
71
- FileSearchResultContent,
72
- ],
73
- PropertyInfo(discriminator="type"),
74
- ]
75
-
76
55
  Input: TypeAlias = Union[
77
56
  str,
78
- List[InputContentList],
57
+ List[Content],
79
58
  List[Turn],
80
59
  TextContent,
81
60
  ImageContent,
@@ -93,32 +72,10 @@ Input: TypeAlias = Union[
93
72
  GoogleSearchResultContent,
94
73
  MCPServerToolCallContent,
95
74
  MCPServerToolResultContent,
75
+ FileSearchCallContent,
96
76
  FileSearchResultContent,
97
77
  ]
98
78
 
99
- Output: TypeAlias = Annotated[
100
- Union[
101
- TextContent,
102
- ImageContent,
103
- AudioContent,
104
- DocumentContent,
105
- VideoContent,
106
- ThoughtContent,
107
- FunctionCallContent,
108
- FunctionResultContent,
109
- CodeExecutionCallContent,
110
- CodeExecutionResultContent,
111
- URLContextCallContent,
112
- URLContextResultContent,
113
- GoogleSearchCallContent,
114
- GoogleSearchResultContent,
115
- MCPServerToolCallContent,
116
- MCPServerToolResultContent,
117
- FileSearchResultContent,
118
- ],
119
- PropertyInfo(discriminator="type"),
120
- ]
121
-
122
79
 
123
80
  class Interaction(BaseModel):
124
81
  """The Interaction resource."""
@@ -142,10 +99,7 @@ class Interaction(BaseModel):
142
99
  model: Optional[Model] = None
143
100
  """The name of the `Model` used for generating the interaction."""
144
101
 
145
- object: Optional[Literal["interaction"]] = None
146
- """Output only. The object type of the interaction. Always set to `interaction`."""
147
-
148
- outputs: Optional[List[Output]] = None
102
+ outputs: Optional[List[Content]] = None
149
103
  """Output only. Responses from the model."""
150
104
 
151
105
  previous_interaction_id: Optional[str] = None
@@ -23,6 +23,7 @@ from typing_extensions import Literal, Required, TypeAlias, TypedDict
23
23
  from .tool_param import ToolParam
24
24
  from .turn_param import TurnParam
25
25
  from .model_param import ModelParam
26
+ from .content_param import ContentParam
26
27
  from .text_content_param import TextContentParam
27
28
  from .audio_content_param import AudioContentParam
28
29
  from .image_content_param import ImageContentParam
@@ -33,6 +34,7 @@ from .generation_config_param import GenerationConfigParam
33
34
  from .dynamic_agent_config_param import DynamicAgentConfigParam
34
35
  from .function_call_content_param import FunctionCallContentParam
35
36
  from .function_result_content_param import FunctionResultContentParam
37
+ from .file_search_call_content_param import FileSearchCallContentParam
36
38
  from .url_context_call_content_param import URLContextCallContentParam
37
39
  from .deep_research_agent_config_param import DeepResearchAgentConfigParam
38
40
  from .file_search_result_content_param import FileSearchResultContentParam
@@ -47,7 +49,6 @@ from .mcp_server_tool_result_content_param import MCPServerToolResultContentPara
47
49
  __all__ = [
48
50
  "BaseCreateModelInteractionParams",
49
51
  "Input",
50
- "ContentList",
51
52
  "BaseCreateAgentInteractionParams",
52
53
  "AgentConfig",
53
54
  "CreateModelInteractionParamsNonStreaming",
@@ -97,29 +98,9 @@ class BaseCreateModelInteractionParams(TypedDict, total=False):
97
98
  """A list of tool declarations the model may call during interaction."""
98
99
 
99
100
 
100
- ContentList: TypeAlias = Union[
101
- TextContentParam,
102
- ImageContentParam,
103
- AudioContentParam,
104
- DocumentContentParam,
105
- VideoContentParam,
106
- ThoughtContentParam,
107
- FunctionCallContentParam,
108
- FunctionResultContentParam,
109
- CodeExecutionCallContentParam,
110
- CodeExecutionResultContentParam,
111
- URLContextCallContentParam,
112
- URLContextResultContentParam,
113
- GoogleSearchCallContentParam,
114
- GoogleSearchResultContentParam,
115
- MCPServerToolCallContentParam,
116
- MCPServerToolResultContentParam,
117
- FileSearchResultContentParam,
118
- ]
119
-
120
101
  Input: TypeAlias = Union[
121
102
  str,
122
- Iterable[ContentList],
103
+ Iterable[ContentParam],
123
104
  Iterable[TurnParam],
124
105
  TextContentParam,
125
106
  ImageContentParam,
@@ -137,6 +118,7 @@ Input: TypeAlias = Union[
137
118
  GoogleSearchResultContentParam,
138
119
  MCPServerToolCallContentParam,
139
120
  MCPServerToolResultContentParam,
121
+ FileSearchCallContentParam,
140
122
  FileSearchResultContentParam,
141
123
  ]
142
124
 
@@ -27,8 +27,7 @@ __all__ = ["InteractionEvent"]
27
27
  class InteractionEvent(BaseModel):
28
28
  event_id: Optional[str] = None
29
29
  """
30
- The event_id token to be used to resume the interaction stream, from
31
- this event.
30
+ The event_id token to be used to resume the interaction stream, from this event.
32
31
  """
33
32
 
34
33
  event_type: Optional[Literal["interaction.start", "interaction.complete"]] = None
@@ -16,8 +16,9 @@
16
16
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
17
17
 
18
18
  from typing import Union
19
- from typing_extensions import TypeAlias
19
+ from typing_extensions import Annotated, TypeAlias
20
20
 
21
+ from .._utils import PropertyInfo
21
22
  from .error_event import ErrorEvent
22
23
  from .content_stop import ContentStop
23
24
  from .content_delta import ContentDelta
@@ -27,6 +28,7 @@ from .interaction_status_update import InteractionStatusUpdate
27
28
 
28
29
  __all__ = ["InteractionSSEEvent"]
29
30
 
30
- InteractionSSEEvent: TypeAlias = Union[
31
- InteractionEvent, InteractionStatusUpdate, ContentStart, ContentDelta, ContentStop, ErrorEvent
31
+ InteractionSSEEvent: TypeAlias = Annotated[
32
+ Union[InteractionEvent, InteractionStatusUpdate, ContentStart, ContentDelta, ContentStop, ErrorEvent],
33
+ PropertyInfo(discriminator="event_type"),
32
34
  ]
@@ -26,8 +26,7 @@ __all__ = ["InteractionStatusUpdate"]
26
26
  class InteractionStatusUpdate(BaseModel):
27
27
  event_id: Optional[str] = None
28
28
  """
29
- The event_id token to be used to resume the interaction stream, from
30
- this event.
29
+ The event_id token to be used to resume the interaction stream, from this event.
31
30
  """
32
31
 
33
32
  event_type: Optional[Literal["interaction.status_update"]] = None
@@ -31,6 +31,7 @@ Model: TypeAlias = Union[
31
31
  "gemini-2.5-flash-image-preview",
32
32
  "gemini-2.5-pro-preview-tts",
33
33
  "gemini-3-pro-preview",
34
+ "gemini-3-flash-preview",
34
35
  ],
35
36
  str,
36
37
  ]
@@ -33,6 +33,7 @@ ModelParam: TypeAlias = Union[
33
33
  "gemini-2.5-flash-image-preview",
34
34
  "gemini-2.5-pro-preview-tts",
35
35
  "gemini-3-pro-preview",
36
+ "gemini-3-flash-preview",
36
37
  ],
37
38
  str,
38
39
  ]
@@ -16,56 +16,15 @@
16
16
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
17
17
 
18
18
  from typing import List, Union, Optional
19
- from typing_extensions import Annotated, TypeAlias
20
19
 
21
- from .._utils import PropertyInfo
20
+ from .content import Content
22
21
  from .._models import BaseModel
23
- from .text_content import TextContent
24
- from .audio_content import AudioContent
25
- from .image_content import ImageContent
26
- from .video_content import VideoContent
27
- from .thought_content import ThoughtContent
28
- from .document_content import DocumentContent
29
- from .function_call_content import FunctionCallContent
30
- from .function_result_content import FunctionResultContent
31
- from .url_context_call_content import URLContextCallContent
32
- from .file_search_result_content import FileSearchResultContent
33
- from .google_search_call_content import GoogleSearchCallContent
34
- from .url_context_result_content import URLContextResultContent
35
- from .code_execution_call_content import CodeExecutionCallContent
36
- from .google_search_result_content import GoogleSearchResultContent
37
- from .mcp_server_tool_call_content import MCPServerToolCallContent
38
- from .code_execution_result_content import CodeExecutionResultContent
39
- from .mcp_server_tool_result_content import MCPServerToolResultContent
40
22
 
41
- __all__ = ["Turn", "ContentUnionMember1"]
42
-
43
- ContentUnionMember1: TypeAlias = Annotated[
44
- Union[
45
- TextContent,
46
- ImageContent,
47
- AudioContent,
48
- DocumentContent,
49
- VideoContent,
50
- ThoughtContent,
51
- FunctionCallContent,
52
- FunctionResultContent,
53
- CodeExecutionCallContent,
54
- CodeExecutionResultContent,
55
- URLContextCallContent,
56
- URLContextResultContent,
57
- GoogleSearchCallContent,
58
- GoogleSearchResultContent,
59
- MCPServerToolCallContent,
60
- MCPServerToolResultContent,
61
- FileSearchResultContent,
62
- ],
63
- PropertyInfo(discriminator="type"),
64
- ]
23
+ __all__ = ["Turn"]
65
24
 
66
25
 
67
26
  class Turn(BaseModel):
68
- content: Union[str, List[ContentUnionMember1], None] = None
27
+ content: Union[str, List[Content], None] = None
69
28
  """The content of the turn."""
70
29
 
71
30
  role: Optional[str] = None
@@ -18,51 +18,15 @@
18
18
  from __future__ import annotations
19
19
 
20
20
  from typing import Union, Iterable
21
- from typing_extensions import TypeAlias, TypedDict
21
+ from typing_extensions import TypedDict
22
22
 
23
- from .text_content_param import TextContentParam
24
- from .audio_content_param import AudioContentParam
25
- from .image_content_param import ImageContentParam
26
- from .video_content_param import VideoContentParam
27
- from .thought_content_param import ThoughtContentParam
28
- from .document_content_param import DocumentContentParam
29
- from .function_call_content_param import FunctionCallContentParam
30
- from .function_result_content_param import FunctionResultContentParam
31
- from .url_context_call_content_param import URLContextCallContentParam
32
- from .file_search_result_content_param import FileSearchResultContentParam
33
- from .google_search_call_content_param import GoogleSearchCallContentParam
34
- from .url_context_result_content_param import URLContextResultContentParam
35
- from .code_execution_call_content_param import CodeExecutionCallContentParam
36
- from .google_search_result_content_param import GoogleSearchResultContentParam
37
- from .mcp_server_tool_call_content_param import MCPServerToolCallContentParam
38
- from .code_execution_result_content_param import CodeExecutionResultContentParam
39
- from .mcp_server_tool_result_content_param import MCPServerToolResultContentParam
23
+ from .content_param import ContentParam
40
24
 
41
- __all__ = ["TurnParam", "ContentUnionMember1"]
42
-
43
- ContentUnionMember1: TypeAlias = Union[
44
- TextContentParam,
45
- ImageContentParam,
46
- AudioContentParam,
47
- DocumentContentParam,
48
- VideoContentParam,
49
- ThoughtContentParam,
50
- FunctionCallContentParam,
51
- FunctionResultContentParam,
52
- CodeExecutionCallContentParam,
53
- CodeExecutionResultContentParam,
54
- URLContextCallContentParam,
55
- URLContextResultContentParam,
56
- GoogleSearchCallContentParam,
57
- GoogleSearchResultContentParam,
58
- MCPServerToolCallContentParam,
59
- MCPServerToolResultContentParam,
60
- FileSearchResultContentParam,
61
- ]
25
+ __all__ = ["TurnParam"]
62
26
 
63
27
 
64
28
  class TurnParam(TypedDict, total=False):
65
- content: Union[str, Iterable[ContentUnionMember1]]
29
+ content: Union[str, Iterable[ContentParam]]
66
30
  """The content of the turn."""
67
31
 
68
32
  role: str
@@ -93,7 +93,7 @@ class Usage(BaseModel):
93
93
  total_output_tokens: Optional[int] = None
94
94
  """Total number of tokens across all the generated responses."""
95
95
 
96
- total_reasoning_tokens: Optional[int] = None
96
+ total_thought_tokens: Optional[int] = None
97
97
  """Number of tokens of thoughts for thinking models."""
98
98
 
99
99
  total_tokens: Optional[int] = None
@@ -93,7 +93,7 @@ class UsageParam(TypedDict, total=False):
93
93
  total_output_tokens: int
94
94
  """Total number of tokens across all the generated responses."""
95
95
 
96
- total_reasoning_tokens: int
96
+ total_thought_tokens: int
97
97
  """Number of tokens of thoughts for thinking models."""
98
98
 
99
99
  total_tokens: int
@@ -30,6 +30,7 @@ class VideoContent(BaseModel):
30
30
  type: Literal["video"]
31
31
 
32
32
  data: Optional[str] = None
33
+ """The video content."""
33
34
 
34
35
  mime_type: Optional[VideoMimeType] = None
35
36
  """The mime type of the video."""
@@ -38,3 +39,4 @@ class VideoContent(BaseModel):
38
39
  """The resolution of the media."""
39
40
 
40
41
  uri: Optional[str] = None
42
+ """The URI of the video."""
@@ -34,6 +34,7 @@ class VideoContentParam(TypedDict, total=False):
34
34
  type: Required[Literal["video"]]
35
35
 
36
36
  data: Annotated[Union[str, Base64FileInput], PropertyInfo(format="base64")]
37
+ """The video content."""
37
38
 
38
39
  mime_type: VideoMimeTypeParam
39
40
  """The mime type of the video."""
@@ -42,6 +43,7 @@ class VideoContentParam(TypedDict, total=False):
42
43
  """The resolution of the media."""
43
44
 
44
45
  uri: str
46
+ """The URI of the video."""
45
47
 
46
48
 
47
49
  set_pydantic_config(VideoContentParam, {"arbitrary_types_allowed": True})