google-genai 1.54.0__py3-none-any.whl → 1.55.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 (319) hide show
  1. google/genai/__init__.py +1 -0
  2. google/genai/_interactions/__init__.py +117 -0
  3. google/genai/_interactions/_base_client.py +2019 -0
  4. google/genai/_interactions/_client.py +511 -0
  5. google/genai/_interactions/_compat.py +234 -0
  6. google/genai/_interactions/_constants.py +29 -0
  7. google/genai/_interactions/_exceptions.py +122 -0
  8. google/genai/_interactions/_files.py +139 -0
  9. google/genai/_interactions/_models.py +873 -0
  10. google/genai/_interactions/_qs.py +165 -0
  11. google/genai/_interactions/_resource.py +58 -0
  12. google/genai/_interactions/_response.py +847 -0
  13. google/genai/_interactions/_streaming.py +354 -0
  14. google/genai/_interactions/_types.py +276 -0
  15. google/genai/_interactions/_utils/__init__.py +79 -0
  16. google/genai/_interactions/_utils/_compat.py +61 -0
  17. google/genai/_interactions/_utils/_datetime_parse.py +151 -0
  18. google/genai/_interactions/_utils/_logs.py +40 -0
  19. google/genai/_interactions/_utils/_proxy.py +80 -0
  20. google/genai/_interactions/_utils/_reflection.py +57 -0
  21. google/genai/_interactions/_utils/_resources_proxy.py +39 -0
  22. google/genai/_interactions/_utils/_streams.py +27 -0
  23. google/genai/_interactions/_utils/_sync.py +73 -0
  24. google/genai/_interactions/_utils/_transform.py +472 -0
  25. google/genai/_interactions/_utils/_typing.py +172 -0
  26. google/genai/_interactions/_utils/_utils.py +437 -0
  27. google/genai/_interactions/_version.py +18 -0
  28. google/genai/_interactions/resources/__init__.py +34 -0
  29. google/genai/_interactions/resources/interactions.py +1350 -0
  30. google/genai/_interactions/types/__init__.py +107 -0
  31. google/genai/_interactions/types/allowed_tools.py +33 -0
  32. google/genai/_interactions/types/allowed_tools_param.py +35 -0
  33. google/genai/_interactions/types/annotation.py +42 -0
  34. google/genai/_interactions/types/annotation_param.py +42 -0
  35. google/genai/_interactions/types/audio_content.py +38 -0
  36. google/genai/_interactions/types/audio_content_param.py +45 -0
  37. google/genai/_interactions/types/audio_mime_type.py +25 -0
  38. google/genai/_interactions/types/audio_mime_type_param.py +27 -0
  39. google/genai/_interactions/types/code_execution_call_arguments.py +33 -0
  40. google/genai/_interactions/types/code_execution_call_arguments_param.py +32 -0
  41. google/genai/_interactions/types/code_execution_call_content.py +37 -0
  42. google/genai/_interactions/types/code_execution_call_content_param.py +37 -0
  43. google/genai/_interactions/types/code_execution_result_content.py +42 -0
  44. google/genai/_interactions/types/code_execution_result_content_param.py +41 -0
  45. google/genai/_interactions/types/content_delta.py +358 -0
  46. google/genai/_interactions/types/content_start.py +79 -0
  47. google/genai/_interactions/types/content_stop.py +35 -0
  48. google/genai/_interactions/types/deep_research_agent_config.py +33 -0
  49. google/genai/_interactions/types/deep_research_agent_config_param.py +32 -0
  50. google/genai/_interactions/types/document_content.py +36 -0
  51. google/genai/_interactions/types/document_content_param.py +43 -0
  52. google/genai/_interactions/types/dynamic_agent_config.py +44 -0
  53. google/genai/_interactions/types/dynamic_agent_config_param.py +33 -0
  54. google/genai/_interactions/types/error_event.py +46 -0
  55. google/genai/_interactions/types/file_search_result_content.py +46 -0
  56. google/genai/_interactions/types/file_search_result_content_param.py +46 -0
  57. google/genai/_interactions/types/function.py +38 -0
  58. google/genai/_interactions/types/function_call_content.py +39 -0
  59. google/genai/_interactions/types/function_call_content_param.py +39 -0
  60. google/genai/_interactions/types/function_param.py +37 -0
  61. google/genai/_interactions/types/function_result_content.py +52 -0
  62. google/genai/_interactions/types/function_result_content_param.py +54 -0
  63. google/genai/_interactions/types/generation_config.py +57 -0
  64. google/genai/_interactions/types/generation_config_param.py +59 -0
  65. google/genai/_interactions/types/google_search_call_arguments.py +29 -0
  66. google/genai/_interactions/types/google_search_call_arguments_param.py +31 -0
  67. google/genai/_interactions/types/google_search_call_content.py +37 -0
  68. google/genai/_interactions/types/google_search_call_content_param.py +37 -0
  69. google/genai/_interactions/types/google_search_result.py +35 -0
  70. google/genai/_interactions/types/google_search_result_content.py +43 -0
  71. google/genai/_interactions/types/google_search_result_content_param.py +44 -0
  72. google/genai/_interactions/types/google_search_result_param.py +35 -0
  73. google/genai/_interactions/types/image_content.py +41 -0
  74. google/genai/_interactions/types/image_content_param.py +48 -0
  75. google/genai/_interactions/types/image_mime_type.py +23 -0
  76. google/genai/_interactions/types/image_mime_type_param.py +25 -0
  77. google/genai/_interactions/types/interaction.py +165 -0
  78. google/genai/_interactions/types/interaction_create_params.py +212 -0
  79. google/genai/_interactions/types/interaction_event.py +37 -0
  80. google/genai/_interactions/types/interaction_get_params.py +46 -0
  81. google/genai/_interactions/types/interaction_sse_event.py +32 -0
  82. google/genai/_interactions/types/interaction_status_update.py +37 -0
  83. google/genai/_interactions/types/mcp_server_tool_call_content.py +42 -0
  84. google/genai/_interactions/types/mcp_server_tool_call_content_param.py +42 -0
  85. google/genai/_interactions/types/mcp_server_tool_result_content.py +52 -0
  86. google/genai/_interactions/types/mcp_server_tool_result_content_param.py +54 -0
  87. google/genai/_interactions/types/model.py +36 -0
  88. google/genai/_interactions/types/model_param.py +38 -0
  89. google/genai/_interactions/types/speech_config.py +35 -0
  90. google/genai/_interactions/types/speech_config_param.py +35 -0
  91. google/genai/_interactions/types/text_content.py +37 -0
  92. google/genai/_interactions/types/text_content_param.py +38 -0
  93. google/genai/_interactions/types/thinking_level.py +22 -0
  94. google/genai/_interactions/types/thought_content.py +41 -0
  95. google/genai/_interactions/types/thought_content_param.py +47 -0
  96. google/genai/_interactions/types/tool.py +100 -0
  97. google/genai/_interactions/types/tool_choice.py +26 -0
  98. google/genai/_interactions/types/tool_choice_config.py +28 -0
  99. google/genai/_interactions/types/tool_choice_config_param.py +29 -0
  100. google/genai/_interactions/types/tool_choice_param.py +28 -0
  101. google/genai/_interactions/types/tool_choice_type.py +22 -0
  102. google/genai/_interactions/types/tool_param.py +97 -0
  103. google/genai/_interactions/types/turn.py +76 -0
  104. google/genai/_interactions/types/turn_param.py +73 -0
  105. google/genai/_interactions/types/url_context_call_arguments.py +29 -0
  106. google/genai/_interactions/types/url_context_call_arguments_param.py +31 -0
  107. google/genai/_interactions/types/url_context_call_content.py +37 -0
  108. google/genai/_interactions/types/url_context_call_content_param.py +37 -0
  109. google/genai/_interactions/types/url_context_result.py +33 -0
  110. google/genai/_interactions/types/url_context_result_content.py +43 -0
  111. google/genai/_interactions/types/url_context_result_content_param.py +44 -0
  112. google/genai/_interactions/types/url_context_result_param.py +32 -0
  113. google/genai/_interactions/types/usage.py +106 -0
  114. google/genai/_interactions/types/usage_param.py +106 -0
  115. google/genai/_interactions/types/video_content.py +41 -0
  116. google/genai/_interactions/types/video_content_param.py +48 -0
  117. google/genai/_interactions/types/video_mime_type.py +36 -0
  118. google/genai/_interactions/types/video_mime_type_param.py +38 -0
  119. google/genai/_live_converters.py +31 -0
  120. google/genai/_tokens_converters.py +5 -0
  121. google/genai/batches.py +7 -0
  122. google/genai/client.py +223 -0
  123. google/genai/interactions.py +17 -0
  124. google/genai/live.py +4 -3
  125. google/genai/models.py +12 -0
  126. google/genai/tests/__init__.py +21 -0
  127. google/genai/tests/afc/__init__.py +21 -0
  128. google/genai/tests/afc/test_convert_if_exist_pydantic_model.py +309 -0
  129. google/genai/tests/afc/test_convert_number_values_for_function_call_args.py +63 -0
  130. google/genai/tests/afc/test_find_afc_incompatible_tool_indexes.py +240 -0
  131. google/genai/tests/afc/test_generate_content_stream_afc.py +530 -0
  132. google/genai/tests/afc/test_generate_content_stream_afc_thoughts.py +77 -0
  133. google/genai/tests/afc/test_get_function_map.py +176 -0
  134. google/genai/tests/afc/test_get_function_response_parts.py +277 -0
  135. google/genai/tests/afc/test_get_max_remote_calls_for_afc.py +130 -0
  136. google/genai/tests/afc/test_invoke_function_from_dict_args.py +241 -0
  137. google/genai/tests/afc/test_raise_error_for_afc_incompatible_config.py +159 -0
  138. google/genai/tests/afc/test_should_append_afc_history.py +53 -0
  139. google/genai/tests/afc/test_should_disable_afc.py +214 -0
  140. google/genai/tests/batches/__init__.py +17 -0
  141. google/genai/tests/batches/test_cancel.py +77 -0
  142. google/genai/tests/batches/test_create.py +78 -0
  143. google/genai/tests/batches/test_create_with_bigquery.py +113 -0
  144. google/genai/tests/batches/test_create_with_file.py +82 -0
  145. google/genai/tests/batches/test_create_with_gcs.py +125 -0
  146. google/genai/tests/batches/test_create_with_inlined_requests.py +255 -0
  147. google/genai/tests/batches/test_delete.py +86 -0
  148. google/genai/tests/batches/test_embedding.py +157 -0
  149. google/genai/tests/batches/test_get.py +78 -0
  150. google/genai/tests/batches/test_list.py +79 -0
  151. google/genai/tests/caches/__init__.py +17 -0
  152. google/genai/tests/caches/constants.py +29 -0
  153. google/genai/tests/caches/test_create.py +210 -0
  154. google/genai/tests/caches/test_create_custom_url.py +105 -0
  155. google/genai/tests/caches/test_delete.py +54 -0
  156. google/genai/tests/caches/test_delete_custom_url.py +52 -0
  157. google/genai/tests/caches/test_get.py +94 -0
  158. google/genai/tests/caches/test_get_custom_url.py +52 -0
  159. google/genai/tests/caches/test_list.py +68 -0
  160. google/genai/tests/caches/test_update.py +70 -0
  161. google/genai/tests/caches/test_update_custom_url.py +58 -0
  162. google/genai/tests/chats/__init__.py +1 -0
  163. google/genai/tests/chats/test_get_history.py +597 -0
  164. google/genai/tests/chats/test_send_message.py +844 -0
  165. google/genai/tests/chats/test_validate_response.py +90 -0
  166. google/genai/tests/client/__init__.py +17 -0
  167. google/genai/tests/client/test_async_stream.py +427 -0
  168. google/genai/tests/client/test_client_close.py +197 -0
  169. google/genai/tests/client/test_client_initialization.py +1687 -0
  170. google/genai/tests/client/test_client_requests.py +355 -0
  171. google/genai/tests/client/test_custom_client.py +77 -0
  172. google/genai/tests/client/test_http_options.py +178 -0
  173. google/genai/tests/client/test_replay_client_equality.py +168 -0
  174. google/genai/tests/client/test_retries.py +846 -0
  175. google/genai/tests/client/test_upload_errors.py +136 -0
  176. google/genai/tests/common/__init__.py +17 -0
  177. google/genai/tests/common/test_common.py +954 -0
  178. google/genai/tests/conftest.py +162 -0
  179. google/genai/tests/documents/__init__.py +17 -0
  180. google/genai/tests/documents/test_delete.py +51 -0
  181. google/genai/tests/documents/test_get.py +85 -0
  182. google/genai/tests/documents/test_list.py +72 -0
  183. google/genai/tests/errors/__init__.py +1 -0
  184. google/genai/tests/errors/test_api_error.py +417 -0
  185. google/genai/tests/file_search_stores/__init__.py +17 -0
  186. google/genai/tests/file_search_stores/test_create.py +66 -0
  187. google/genai/tests/file_search_stores/test_delete.py +64 -0
  188. google/genai/tests/file_search_stores/test_get.py +94 -0
  189. google/genai/tests/file_search_stores/test_import_file.py +112 -0
  190. google/genai/tests/file_search_stores/test_list.py +57 -0
  191. google/genai/tests/file_search_stores/test_upload_to_file_search_store.py +141 -0
  192. google/genai/tests/files/__init__.py +17 -0
  193. google/genai/tests/files/test_delete.py +46 -0
  194. google/genai/tests/files/test_download.py +85 -0
  195. google/genai/tests/files/test_get.py +46 -0
  196. google/genai/tests/files/test_list.py +72 -0
  197. google/genai/tests/files/test_upload.py +255 -0
  198. google/genai/tests/imports/test_no_optional_imports.py +28 -0
  199. google/genai/tests/interactions/__init__.py +0 -0
  200. google/genai/tests/interactions/test_integration.py +80 -0
  201. google/genai/tests/live/__init__.py +16 -0
  202. google/genai/tests/live/test_live.py +2177 -0
  203. google/genai/tests/live/test_live_music.py +362 -0
  204. google/genai/tests/live/test_live_response.py +163 -0
  205. google/genai/tests/live/test_send_client_content.py +147 -0
  206. google/genai/tests/live/test_send_realtime_input.py +268 -0
  207. google/genai/tests/live/test_send_tool_response.py +222 -0
  208. google/genai/tests/local_tokenizer/__init__.py +17 -0
  209. google/genai/tests/local_tokenizer/test_local_tokenizer.py +343 -0
  210. google/genai/tests/local_tokenizer/test_local_tokenizer_loader.py +235 -0
  211. google/genai/tests/mcp/__init__.py +17 -0
  212. google/genai/tests/mcp/test_has_mcp_tool_usage.py +89 -0
  213. google/genai/tests/mcp/test_mcp_to_gemini_tools.py +191 -0
  214. google/genai/tests/mcp/test_parse_config_for_mcp_sessions.py +201 -0
  215. google/genai/tests/mcp/test_parse_config_for_mcp_usage.py +130 -0
  216. google/genai/tests/mcp/test_set_mcp_usage_header.py +72 -0
  217. google/genai/tests/models/__init__.py +17 -0
  218. google/genai/tests/models/constants.py +8 -0
  219. google/genai/tests/models/test_compute_tokens.py +120 -0
  220. google/genai/tests/models/test_count_tokens.py +159 -0
  221. google/genai/tests/models/test_delete.py +107 -0
  222. google/genai/tests/models/test_edit_image.py +264 -0
  223. google/genai/tests/models/test_embed_content.py +94 -0
  224. google/genai/tests/models/test_function_call_streaming.py +442 -0
  225. google/genai/tests/models/test_generate_content.py +2502 -0
  226. google/genai/tests/models/test_generate_content_cached_content.py +132 -0
  227. google/genai/tests/models/test_generate_content_config_zero_value.py +103 -0
  228. google/genai/tests/models/test_generate_content_from_apikey.py +44 -0
  229. google/genai/tests/models/test_generate_content_http_options.py +40 -0
  230. google/genai/tests/models/test_generate_content_image_generation.py +143 -0
  231. google/genai/tests/models/test_generate_content_mcp.py +343 -0
  232. google/genai/tests/models/test_generate_content_media_resolution.py +97 -0
  233. google/genai/tests/models/test_generate_content_model.py +139 -0
  234. google/genai/tests/models/test_generate_content_part.py +821 -0
  235. google/genai/tests/models/test_generate_content_thought.py +76 -0
  236. google/genai/tests/models/test_generate_content_tools.py +1761 -0
  237. google/genai/tests/models/test_generate_images.py +191 -0
  238. google/genai/tests/models/test_generate_videos.py +759 -0
  239. google/genai/tests/models/test_get.py +104 -0
  240. google/genai/tests/models/test_list.py +233 -0
  241. google/genai/tests/models/test_recontext_image.py +189 -0
  242. google/genai/tests/models/test_segment_image.py +148 -0
  243. google/genai/tests/models/test_update.py +95 -0
  244. google/genai/tests/models/test_upscale_image.py +157 -0
  245. google/genai/tests/operations/__init__.py +17 -0
  246. google/genai/tests/operations/test_get.py +38 -0
  247. google/genai/tests/public_samples/__init__.py +17 -0
  248. google/genai/tests/public_samples/test_gemini_text_only.py +34 -0
  249. google/genai/tests/pytest_helper.py +229 -0
  250. google/genai/tests/shared/__init__.py +16 -0
  251. google/genai/tests/shared/batches/__init__.py +14 -0
  252. google/genai/tests/shared/batches/test_create_delete.py +57 -0
  253. google/genai/tests/shared/batches/test_create_get_cancel.py +56 -0
  254. google/genai/tests/shared/batches/test_list.py +40 -0
  255. google/genai/tests/shared/caches/__init__.py +14 -0
  256. google/genai/tests/shared/caches/test_create_get_delete.py +67 -0
  257. google/genai/tests/shared/caches/test_create_update_get.py +71 -0
  258. google/genai/tests/shared/caches/test_list.py +40 -0
  259. google/genai/tests/shared/chats/__init__.py +14 -0
  260. google/genai/tests/shared/chats/test_send_message.py +48 -0
  261. google/genai/tests/shared/chats/test_send_message_stream.py +50 -0
  262. google/genai/tests/shared/files/__init__.py +14 -0
  263. google/genai/tests/shared/files/test_list.py +41 -0
  264. google/genai/tests/shared/files/test_upload_get_delete.py +54 -0
  265. google/genai/tests/shared/models/__init__.py +14 -0
  266. google/genai/tests/shared/models/test_compute_tokens.py +41 -0
  267. google/genai/tests/shared/models/test_count_tokens.py +40 -0
  268. google/genai/tests/shared/models/test_edit_image.py +67 -0
  269. google/genai/tests/shared/models/test_embed.py +40 -0
  270. google/genai/tests/shared/models/test_generate_content.py +39 -0
  271. google/genai/tests/shared/models/test_generate_content_stream.py +54 -0
  272. google/genai/tests/shared/models/test_generate_images.py +40 -0
  273. google/genai/tests/shared/models/test_generate_videos.py +38 -0
  274. google/genai/tests/shared/models/test_list.py +37 -0
  275. google/genai/tests/shared/models/test_recontext_image.py +55 -0
  276. google/genai/tests/shared/models/test_segment_image.py +52 -0
  277. google/genai/tests/shared/models/test_upscale_image.py +52 -0
  278. google/genai/tests/shared/tunings/__init__.py +16 -0
  279. google/genai/tests/shared/tunings/test_create.py +46 -0
  280. google/genai/tests/shared/tunings/test_create_get_cancel.py +56 -0
  281. google/genai/tests/shared/tunings/test_list.py +39 -0
  282. google/genai/tests/tokens/__init__.py +16 -0
  283. google/genai/tests/tokens/test_create.py +154 -0
  284. google/genai/tests/transformers/__init__.py +17 -0
  285. google/genai/tests/transformers/test_blobs.py +71 -0
  286. google/genai/tests/transformers/test_bytes.py +15 -0
  287. google/genai/tests/transformers/test_duck_type.py +96 -0
  288. google/genai/tests/transformers/test_function_responses.py +72 -0
  289. google/genai/tests/transformers/test_schema.py +653 -0
  290. google/genai/tests/transformers/test_t_batch.py +286 -0
  291. google/genai/tests/transformers/test_t_content.py +160 -0
  292. google/genai/tests/transformers/test_t_contents.py +398 -0
  293. google/genai/tests/transformers/test_t_part.py +85 -0
  294. google/genai/tests/transformers/test_t_parts.py +87 -0
  295. google/genai/tests/transformers/test_t_tool.py +157 -0
  296. google/genai/tests/transformers/test_t_tools.py +195 -0
  297. google/genai/tests/tunings/__init__.py +16 -0
  298. google/genai/tests/tunings/test_cancel.py +39 -0
  299. google/genai/tests/tunings/test_end_to_end.py +106 -0
  300. google/genai/tests/tunings/test_get.py +67 -0
  301. google/genai/tests/tunings/test_list.py +75 -0
  302. google/genai/tests/tunings/test_tune.py +268 -0
  303. google/genai/tests/types/__init__.py +16 -0
  304. google/genai/tests/types/test_bytes_internal.py +271 -0
  305. google/genai/tests/types/test_bytes_type.py +152 -0
  306. google/genai/tests/types/test_future.py +101 -0
  307. google/genai/tests/types/test_optional_types.py +36 -0
  308. google/genai/tests/types/test_part_type.py +616 -0
  309. google/genai/tests/types/test_schema_from_json_schema.py +417 -0
  310. google/genai/tests/types/test_schema_json_schema.py +468 -0
  311. google/genai/tests/types/test_types.py +2903 -0
  312. google/genai/types.py +72 -0
  313. google/genai/version.py +1 -1
  314. {google_genai-1.54.0.dist-info → google_genai-1.55.0.dist-info}/METADATA +3 -1
  315. google_genai-1.55.0.dist-info/RECORD +345 -0
  316. google_genai-1.54.0.dist-info/RECORD +0 -41
  317. {google_genai-1.54.0.dist-info → google_genai-1.55.0.dist-info}/WHEEL +0 -0
  318. {google_genai-1.54.0.dist-info → google_genai-1.55.0.dist-info}/licenses/LICENSE +0 -0
  319. {google_genai-1.54.0.dist-info → google_genai-1.55.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,36 @@
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 Union
19
+ from typing_extensions import Literal, TypeAlias
20
+
21
+ __all__ = ["VideoMimeType"]
22
+
23
+ VideoMimeType: TypeAlias = Union[
24
+ Literal[
25
+ "video/mp4",
26
+ "video/mpeg",
27
+ "video/mov",
28
+ "video/avi",
29
+ "video/x-flv",
30
+ "video/mpg",
31
+ "video/webm",
32
+ "video/wmv",
33
+ "video/3gpp",
34
+ ],
35
+ str,
36
+ ]
@@ -0,0 +1,38 @@
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 import Union
21
+ from typing_extensions import Literal, TypeAlias
22
+
23
+ __all__ = ["VideoMimeTypeParam"]
24
+
25
+ VideoMimeTypeParam: TypeAlias = Union[
26
+ Literal[
27
+ "video/mp4",
28
+ "video/mpeg",
29
+ "video/mov",
30
+ "video/avi",
31
+ "video/x-flv",
32
+ "video/mpg",
33
+ "video/webm",
34
+ "video/wmv",
35
+ "video/3gpp",
36
+ ],
37
+ str,
38
+ ]
@@ -534,6 +534,11 @@ def _LiveClientSetup_to_mldev(
534
534
  if getv(from_object, ['proactivity']) is not None:
535
535
  setv(to_object, ['proactivity'], getv(from_object, ['proactivity']))
536
536
 
537
+ if getv(from_object, ['explicit_vad_signal']) is not None:
538
+ raise ValueError(
539
+ 'explicit_vad_signal parameter is not supported in Gemini API.'
540
+ )
541
+
537
542
  return to_object
538
543
 
539
544
 
@@ -603,6 +608,13 @@ def _LiveClientSetup_to_vertex(
603
608
  if getv(from_object, ['proactivity']) is not None:
604
609
  setv(to_object, ['proactivity'], getv(from_object, ['proactivity']))
605
610
 
611
+ if getv(from_object, ['explicit_vad_signal']) is not None:
612
+ setv(
613
+ to_object,
614
+ ['explicitVadSignal'],
615
+ getv(from_object, ['explicit_vad_signal']),
616
+ )
617
+
606
618
  return to_object
607
619
 
608
620
 
@@ -753,6 +765,11 @@ def _LiveConnectConfig_to_mldev(
753
765
  getv(from_object, ['proactivity']),
754
766
  )
755
767
 
768
+ if getv(from_object, ['explicit_vad_signal']) is not None:
769
+ raise ValueError(
770
+ 'explicit_vad_signal parameter is not supported in Gemini API.'
771
+ )
772
+
756
773
  return to_object
757
774
 
758
775
 
@@ -904,6 +921,13 @@ def _LiveConnectConfig_to_vertex(
904
921
  getv(from_object, ['proactivity']),
905
922
  )
906
923
 
924
+ if getv(from_object, ['explicit_vad_signal']) is not None:
925
+ setv(
926
+ parent_object,
927
+ ['setup', 'explicitVadSignal'],
928
+ getv(from_object, ['explicit_vad_signal']),
929
+ )
930
+
907
931
  return to_object
908
932
 
909
933
 
@@ -1176,6 +1200,13 @@ def _LiveServerMessage_from_vertex(
1176
1200
  getv(from_object, ['sessionResumptionUpdate']),
1177
1201
  )
1178
1202
 
1203
+ if getv(from_object, ['voiceActivityDetectionSignal']) is not None:
1204
+ setv(
1205
+ to_object,
1206
+ ['voice_activity_detection_signal'],
1207
+ getv(from_object, ['voiceActivityDetectionSignal']),
1208
+ )
1209
+
1179
1210
  return to_object
1180
1211
 
1181
1212
 
@@ -355,6 +355,11 @@ def _LiveConnectConfig_to_mldev(
355
355
  getv(from_object, ['proactivity']),
356
356
  )
357
357
 
358
+ if getv(from_object, ['explicit_vad_signal']) is not None:
359
+ raise ValueError(
360
+ 'explicit_vad_signal parameter is not supported in Gemini API.'
361
+ )
362
+
358
363
  return to_object
359
364
 
360
365
 
google/genai/batches.py CHANGED
@@ -1006,6 +1006,13 @@ def _GenerateContentConfig_to_mldev(
1006
1006
  _ImageConfig_to_mldev(getv(from_object, ['image_config']), to_object),
1007
1007
  )
1008
1008
 
1009
+ if getv(from_object, ['enable_enhanced_civic_answers']) is not None:
1010
+ setv(
1011
+ to_object,
1012
+ ['enableEnhancedCivicAnswers'],
1013
+ getv(from_object, ['enable_enhanced_civic_answers']),
1014
+ )
1015
+
1009
1016
  return to_object
1010
1017
 
1011
1018
 
google/genai/client.py CHANGED
@@ -36,6 +36,20 @@ from .tokens import AsyncTokens, Tokens
36
36
  from .tunings import AsyncTunings, Tunings
37
37
  from .types import HttpOptions, HttpOptionsDict, HttpRetryOptions
38
38
 
39
+ import warnings
40
+ import httpx
41
+
42
+ from ._api_client import has_aiohttp
43
+
44
+ from . import _common
45
+
46
+ from ._interactions import AsyncGeminiNextGenAPIClient, DEFAULT_MAX_RETRIES, DefaultAioHttpClient, GeminiNextGenAPIClient
47
+ from ._interactions._models import FinalRequestOptions
48
+ from ._interactions._types import Headers
49
+ from ._interactions._utils import is_given
50
+ from ._interactions.resources import AsyncInteractionsResource as AsyncNextGenInteractionsResource, InteractionsResource as NextGenInteractionsResource
51
+ _interactions_experimental_warned = False
52
+
39
53
 
40
54
  class AsyncClient:
41
55
  """Client for making asynchronous (non-blocking) requests."""
@@ -52,6 +66,113 @@ class AsyncClient:
52
66
  self._live = AsyncLive(self._api_client)
53
67
  self._tokens = AsyncTokens(self._api_client)
54
68
  self._operations = AsyncOperations(self._api_client)
69
+ self._nextgen_client_instance: Optional[AsyncGeminiNextGenAPIClient] = None
70
+
71
+ @property
72
+ def _nextgen_client(self) -> AsyncGeminiNextGenAPIClient:
73
+ if self._nextgen_client_instance is not None:
74
+ return self._nextgen_client_instance
75
+
76
+ http_opts = self._api_client._http_options
77
+
78
+ if http_opts.extra_body:
79
+ warnings.warn(
80
+ 'extra_body properties are not supported in `.interactions` yet',
81
+ category=UserWarning,
82
+ stacklevel=5,
83
+ )
84
+
85
+ retry_opts = http_opts.retry_options
86
+ if retry_opts is not None and (
87
+ retry_opts.initial_delay is not None
88
+ or retry_opts.max_delay is not None
89
+ or retry_opts.exp_base is not None
90
+ or retry_opts.jitter is not None
91
+ or retry_opts.http_status_codes is not None
92
+ ):
93
+ warnings.warn(
94
+ 'Granular retry options are not supported in `.interactions` yet',
95
+ category=UserWarning,
96
+ stacklevel=5,
97
+ )
98
+
99
+ http_client: httpx.AsyncClient = self._api_client._async_httpx_client
100
+
101
+ async_client_args = self._api_client._http_options.async_client_args or {}
102
+ has_custom_transport = 'transport' in async_client_args
103
+
104
+ if has_aiohttp and not has_custom_transport:
105
+ warnings.warn(
106
+ 'Async interactions client cannot use aiohttp, fallingback to httpx.',
107
+ category=UserWarning,
108
+ stacklevel=5,
109
+ )
110
+
111
+ if retry_opts is not None and retry_opts.attempts is not None:
112
+ max_retries = retry_opts.attempts
113
+ else:
114
+ max_retries = DEFAULT_MAX_RETRIES + 1
115
+
116
+ self._nextgen_client_instance = AsyncGeminiNextGenAPIClient(
117
+ base_url=http_opts.base_url,
118
+ api_key=self._api_client.api_key,
119
+ default_headers=http_opts.headers,
120
+ http_client=http_client,
121
+ # uSDk expects ms, nextgen uses a httpx Timeout -> expects seconds.
122
+ timeout=http_opts.timeout / 1000 if http_opts.timeout else None,
123
+ max_retries=max_retries,
124
+ )
125
+
126
+ client = self._nextgen_client_instance
127
+ if self._api_client.vertexai:
128
+ client._is_vertex = True
129
+ client._vertex_project = self._api_client.project
130
+ client._vertex_location = self._api_client.location
131
+
132
+ async def prepare_options(options: FinalRequestOptions) -> FinalRequestOptions:
133
+ headers = {}
134
+ if is_given(options.headers):
135
+ headers = {**options.headers}
136
+
137
+ headers['Authorization'] = f'Bearer {await self._api_client._async_access_token()}'
138
+ if (
139
+ self._api_client._credentials
140
+ and self._api_client._credentials.quota_project_id
141
+ ):
142
+ headers['x-goog-user-project'] = (
143
+ self._api_client._credentials.quota_project_id
144
+ )
145
+ options.headers = headers
146
+
147
+ return options
148
+
149
+ if self._api_client.project or self._api_client.location:
150
+ client._prepare_options = prepare_options # type: ignore[method-assign]
151
+
152
+ def validate_headers(headers: Headers, custom_headers: Headers) -> None:
153
+ return
154
+
155
+ client._validate_headers = validate_headers # type: ignore[method-assign]
156
+ return self._nextgen_client_instance
157
+
158
+ @property
159
+ def interactions(self) -> AsyncNextGenInteractionsResource:
160
+ global _interactions_experimental_warned
161
+ if not _interactions_experimental_warned:
162
+ _interactions_experimental_warned = True
163
+ warnings.warn(
164
+ 'Interactions usage is experimental and may change in future versions.',
165
+ category=UserWarning,
166
+ stacklevel=1,
167
+ )
168
+ return self._nextgen_client.interactions
169
+
170
+ @property
171
+ def _has_nextgen_client(self) -> bool:
172
+ return (
173
+ hasattr(self, '_nextgen_client_instance') and
174
+ self._nextgen_client_instance is not None
175
+ )
55
176
 
56
177
  @property
57
178
  def models(self) -> AsyncModels:
@@ -120,6 +241,9 @@ class AsyncClient:
120
241
  """
121
242
  await self._api_client.aclose()
122
243
 
244
+ if self._has_nextgen_client:
245
+ await self._nextgen_client.close()
246
+
123
247
  async def __aenter__(self) -> 'AsyncClient':
124
248
  return self
125
249
 
@@ -287,6 +411,7 @@ class Client:
287
411
  self._files = Files(self._api_client)
288
412
  self._tokens = Tokens(self._api_client)
289
413
  self._operations = Operations(self._api_client)
414
+ self._nextgen_client_instance: Optional[GeminiNextGenAPIClient] = None
290
415
 
291
416
  @staticmethod
292
417
  def _get_api_client(
@@ -324,6 +449,101 @@ class Client:
324
449
  http_options=http_options,
325
450
  )
326
451
 
452
+ @property
453
+ def _nextgen_client(self) -> GeminiNextGenAPIClient:
454
+ if self._nextgen_client_instance is not None:
455
+ return self._nextgen_client_instance
456
+
457
+ http_opts = self._api_client._http_options
458
+
459
+ if http_opts.extra_body:
460
+ warnings.warn(
461
+ 'extra_body properties are not supported in `.interactions` yet',
462
+ category=UserWarning,
463
+ stacklevel=5,
464
+ )
465
+
466
+ retry_opts = http_opts.retry_options
467
+ if retry_opts is not None and (
468
+ retry_opts.initial_delay is not None
469
+ or retry_opts.max_delay is not None
470
+ or retry_opts.exp_base is not None
471
+ or retry_opts.jitter is not None
472
+ or retry_opts.http_status_codes is not None
473
+ ):
474
+ warnings.warn(
475
+ 'Granular retry options are not supported in `.interactions` yet',
476
+ category=UserWarning,
477
+ stacklevel=5,
478
+ )
479
+
480
+ if retry_opts is not None and retry_opts.attempts is not None:
481
+ max_retries = retry_opts.attempts
482
+ else:
483
+ max_retries = DEFAULT_MAX_RETRIES + 1
484
+
485
+ self._nextgen_client_instance = GeminiNextGenAPIClient(
486
+ base_url=http_opts.base_url,
487
+ api_key=self._api_client.api_key,
488
+ default_headers=http_opts.headers,
489
+ http_client=self._api_client._httpx_client,
490
+ # uSDk expects ms, nextgen uses a httpx Timeout -> expects seconds.
491
+ timeout=http_opts.timeout / 1000 if http_opts.timeout else None,
492
+ max_retries=max_retries,
493
+ )
494
+
495
+ client = self._nextgen_client_instance
496
+ if self.vertexai:
497
+ client._is_vertex = True
498
+ client._vertex_project = self._api_client.project
499
+ client._vertex_location = self._api_client.location
500
+
501
+ def prepare_options(options: FinalRequestOptions) -> FinalRequestOptions:
502
+ headers = {}
503
+ if is_given(options.headers):
504
+ headers = {**options.headers}
505
+ options.headers = headers
506
+
507
+ headers['Authorization'] = f'Bearer {self._api_client._access_token()}'
508
+ if (
509
+ self._api_client._credentials
510
+ and self._api_client._credentials.quota_project_id
511
+ ):
512
+ headers['x-goog-user-project'] = (
513
+ self._api_client._credentials.quota_project_id
514
+ )
515
+
516
+ return options
517
+
518
+ if self._api_client.project or self._api_client.location:
519
+ client._prepare_options = prepare_options # type: ignore[method-assign]
520
+
521
+ def validate_headers(headers: Headers, custom_headers: Headers) -> None:
522
+ return
523
+
524
+ client._validate_headers = validate_headers # type: ignore[method-assign]
525
+
526
+ return self._nextgen_client_instance
527
+
528
+ @property
529
+ def interactions(self) -> NextGenInteractionsResource:
530
+ global _interactions_experimental_warned
531
+ if not _interactions_experimental_warned:
532
+ _interactions_experimental_warned = True
533
+ warnings.warn(
534
+ 'Interactions usage is experimental and may change in future versions.',
535
+ category=UserWarning,
536
+ stacklevel=2,
537
+ )
538
+ return self._nextgen_client.interactions
539
+
540
+ @property
541
+ def _has_nextgen_client(self) -> bool:
542
+ return (
543
+ hasattr(self, '_nextgen_client_instance') and
544
+ self._nextgen_client_instance is not None
545
+ )
546
+
327
547
  @property
328
548
  def chats(self) -> Chats:
329
549
  return Chats(modules=self.models)
@@ -396,6 +616,9 @@ class Client:
396
616
  """
397
617
  self._api_client.close()
398
618
 
619
+ if self._has_nextgen_client:
620
+ self._nextgen_client.close()
621
+
399
622
  def __enter__(self) -> 'Client':
400
623
  return self
401
624
 
@@ -0,0 +1,17 @@
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
+ """Expose stainless types."""
16
+
17
+ from ._interactions.types import *
google/genai/live.py CHANGED
@@ -975,8 +975,9 @@ class AsyncLive(_api_module.BaseModule):
975
975
  ).model_dump(exclude_none=True),
976
976
  )
977
977
  )
978
- del request_dict['config']
979
978
 
979
+ del request_dict['config']
980
+ request_dict = _common.encode_unserializable_types(request_dict)
980
981
  setv(request_dict, ['setup', 'model'], transformed_model)
981
982
 
982
983
  request = json.dumps(request_dict)
@@ -998,7 +999,7 @@ class AsyncLive(_api_module.BaseModule):
998
999
  )
999
1000
  )
1000
1001
  del request_dict['config']
1001
-
1002
+ request_dict = _common.encode_unserializable_types(request_dict)
1002
1003
  setv(request_dict, ['setup', 'model'], transformed_model)
1003
1004
 
1004
1005
  request = json.dumps(request_dict)
@@ -1061,7 +1062,7 @@ class AsyncLive(_api_module.BaseModule):
1061
1062
  )
1062
1063
  )
1063
1064
  del request_dict['config']
1064
-
1065
+ request_dict = _common.encode_unserializable_types(request_dict)
1065
1066
  if (
1066
1067
  getv(
1067
1068
  request_dict, ['setup', 'generationConfig', 'responseModalities']
google/genai/models.py CHANGED
@@ -1110,6 +1110,13 @@ def _GenerateContentConfig_to_mldev(
1110
1110
  _ImageConfig_to_mldev(getv(from_object, ['image_config']), to_object),
1111
1111
  )
1112
1112
 
1113
+ if getv(from_object, ['enable_enhanced_civic_answers']) is not None:
1114
+ setv(
1115
+ to_object,
1116
+ ['enableEnhancedCivicAnswers'],
1117
+ getv(from_object, ['enable_enhanced_civic_answers']),
1118
+ )
1119
+
1113
1120
  return to_object
1114
1121
 
1115
1122
 
@@ -1269,6 +1276,11 @@ def _GenerateContentConfig_to_vertex(
1269
1276
  _ImageConfig_to_vertex(getv(from_object, ['image_config']), to_object),
1270
1277
  )
1271
1278
 
1279
+ if getv(from_object, ['enable_enhanced_civic_answers']) is not None:
1280
+ raise ValueError(
1281
+ 'enable_enhanced_civic_answers parameter is not supported in Vertex AI.'
1282
+ )
1283
+
1272
1284
  return to_object
1273
1285
 
1274
1286
 
@@ -0,0 +1,21 @@
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."""
18
+
19
+
20
+ import pytest
21
+ pytest.register_assert_rewrite('genai.replay_api_client')
@@ -0,0 +1,21 @@
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
+ """AFC helper function unit tests.
18
+
19
+ For AFC end to end test, please write test cases in
20
+ test_generate_content_tools.py module
21
+ """