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,511 @@
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
+ import os
21
+ from typing import TYPE_CHECKING, Any, Mapping
22
+ from typing_extensions import Self, override
23
+
24
+ import httpx
25
+
26
+ from . import _exceptions
27
+ from ._qs import Querystring
28
+ from ._types import (
29
+ Omit,
30
+ Headers,
31
+ Timeout,
32
+ NotGiven,
33
+ Transport,
34
+ ProxiesTypes,
35
+ RequestOptions,
36
+ not_given,
37
+ )
38
+ from ._utils import is_given, get_async_library
39
+ from ._compat import cached_property
40
+ from ._version import __version__
41
+ from ._streaming import Stream as Stream, AsyncStream as AsyncStream
42
+ from ._exceptions import APIStatusError
43
+ from ._base_client import (
44
+ DEFAULT_MAX_RETRIES,
45
+ SyncAPIClient,
46
+ AsyncAPIClient,
47
+ )
48
+
49
+ if TYPE_CHECKING:
50
+ from .resources import interactions
51
+ from .resources.interactions import InteractionsResource, AsyncInteractionsResource
52
+
53
+ __all__ = [
54
+ "Timeout",
55
+ "Transport",
56
+ "ProxiesTypes",
57
+ "RequestOptions",
58
+ "GeminiNextGenAPIClient",
59
+ "AsyncGeminiNextGenAPIClient",
60
+ "Client",
61
+ "AsyncClient",
62
+ ]
63
+
64
+
65
+ class GeminiNextGenAPIClient(SyncAPIClient):
66
+ # client options
67
+ api_key: str | None
68
+ api_version: str
69
+
70
+ def __init__(
71
+ self,
72
+ *,
73
+ api_key: str | None = None,
74
+ api_version: str | None = "v1beta",
75
+ base_url: str | httpx.URL | None = None,
76
+ timeout: float | Timeout | None | NotGiven = not_given,
77
+ max_retries: int = DEFAULT_MAX_RETRIES,
78
+ default_headers: Mapping[str, str] | None = None,
79
+ default_query: Mapping[str, object] | None = None,
80
+ # Configure a custom httpx client.
81
+ # We provide a `DefaultHttpxClient` class that you can pass to retain the default values we use for `limits`, `timeout` & `follow_redirects`.
82
+ # See the [httpx documentation](https://www.python-httpx.org/api/#client) for more details.
83
+ http_client: httpx.Client | None = None,
84
+ # Enable or disable schema validation for data returned by the API.
85
+ # When enabled an error APIResponseValidationError is raised
86
+ # if the API responds with invalid data for the expected schema.
87
+ #
88
+ # This parameter may be removed or changed in the future.
89
+ # If you rely on this feature, please open a GitHub issue
90
+ # outlining your use-case to help us decide if it should be
91
+ # part of our public interface in the future.
92
+ _strict_response_validation: bool = False,
93
+ ) -> None:
94
+ """Construct a new synchronous GeminiNextGenAPIClient client instance.
95
+
96
+ This automatically infers the `api_key` argument from the `GEMINI_API_KEY` environment variable if it is not provided.
97
+ """
98
+ if api_key is None:
99
+ api_key = os.environ.get("GEMINI_API_KEY")
100
+ self.api_key = api_key
101
+
102
+ if api_version is None:
103
+ api_version = "v1beta"
104
+ self.api_version = api_version
105
+
106
+ if base_url is None:
107
+ base_url = os.environ.get("GEMINI_NEXT_GEN_API_BASE_URL")
108
+ if base_url is None:
109
+ base_url = f"https://generativelanguage.googleapis.com"
110
+
111
+ super().__init__(
112
+ version=__version__,
113
+ base_url=base_url,
114
+ max_retries=max_retries,
115
+ timeout=timeout,
116
+ http_client=http_client,
117
+ custom_headers=default_headers,
118
+ custom_query=default_query,
119
+ _strict_response_validation=_strict_response_validation,
120
+ )
121
+
122
+ self._default_stream_cls = Stream
123
+
124
+ @cached_property
125
+ def interactions(self) -> InteractionsResource:
126
+ from .resources.interactions import InteractionsResource
127
+
128
+ return InteractionsResource(self)
129
+
130
+ @cached_property
131
+ def with_raw_response(self) -> GeminiNextGenAPIClientWithRawResponse:
132
+ return GeminiNextGenAPIClientWithRawResponse(self)
133
+
134
+ @cached_property
135
+ def with_streaming_response(self) -> GeminiNextGenAPIClientWithStreamedResponse:
136
+ return GeminiNextGenAPIClientWithStreamedResponse(self)
137
+
138
+ @property
139
+ @override
140
+ def qs(self) -> Querystring:
141
+ return Querystring(array_format="comma")
142
+
143
+ @property
144
+ @override
145
+ def auth_headers(self) -> dict[str, str]:
146
+ api_key = self.api_key
147
+ if api_key is None:
148
+ return {}
149
+ return {"x-goog-api-key": api_key}
150
+
151
+ @property
152
+ @override
153
+ def default_headers(self) -> dict[str, str | Omit]:
154
+ return {
155
+ **super().default_headers,
156
+ "X-Stainless-Async": "false",
157
+ **self._custom_headers,
158
+ }
159
+
160
+ @override
161
+ def _validate_headers(self, headers: Headers, custom_headers: Headers) -> None:
162
+ if self.api_key and headers.get("x-goog-api-key"):
163
+ return
164
+ if isinstance(custom_headers.get("x-goog-api-key"), Omit):
165
+ return
166
+
167
+ raise TypeError(
168
+ '"Could not resolve authentication method. Expected the api_key to be set. Or for the `x-goog-api-key` headers to be explicitly omitted"'
169
+ )
170
+
171
+ def copy(
172
+ self,
173
+ *,
174
+ api_key: str | None = None,
175
+ api_version: str | None = None,
176
+ base_url: str | httpx.URL | None = None,
177
+ timeout: float | Timeout | None | NotGiven = not_given,
178
+ http_client: httpx.Client | None = None,
179
+ max_retries: int | NotGiven = not_given,
180
+ default_headers: Mapping[str, str] | None = None,
181
+ set_default_headers: Mapping[str, str] | None = None,
182
+ default_query: Mapping[str, object] | None = None,
183
+ set_default_query: Mapping[str, object] | None = None,
184
+ _extra_kwargs: Mapping[str, Any] = {},
185
+ ) -> Self:
186
+ """
187
+ Create a new client instance re-using the same options given to the current client with optional overriding.
188
+ """
189
+ if default_headers is not None and set_default_headers is not None:
190
+ raise ValueError("The `default_headers` and `set_default_headers` arguments are mutually exclusive")
191
+
192
+ if default_query is not None and set_default_query is not None:
193
+ raise ValueError("The `default_query` and `set_default_query` arguments are mutually exclusive")
194
+
195
+ headers = self._custom_headers
196
+ if default_headers is not None:
197
+ headers = {**headers, **default_headers}
198
+ elif set_default_headers is not None:
199
+ headers = set_default_headers
200
+
201
+ params = self._custom_query
202
+ if default_query is not None:
203
+ params = {**params, **default_query}
204
+ elif set_default_query is not None:
205
+ params = set_default_query
206
+
207
+ http_client = http_client or self._client
208
+ return self.__class__(
209
+ api_key=api_key or self.api_key,
210
+ api_version=api_version or self.api_version,
211
+ base_url=base_url or self.base_url,
212
+ timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
213
+ http_client=http_client,
214
+ max_retries=max_retries if is_given(max_retries) else self.max_retries,
215
+ default_headers=headers,
216
+ default_query=params,
217
+ **_extra_kwargs,
218
+ )
219
+
220
+ # Alias for `copy` for nicer inline usage, e.g.
221
+ # client.with_options(timeout=10).foo.create(...)
222
+ with_options = copy
223
+
224
+ def _get_api_version_path_param(self) -> str:
225
+ return self.api_version
226
+
227
+ @override
228
+ def _make_status_error(
229
+ self,
230
+ err_msg: str,
231
+ *,
232
+ body: object,
233
+ response: httpx.Response,
234
+ ) -> APIStatusError:
235
+ if response.status_code == 400:
236
+ return _exceptions.BadRequestError(err_msg, response=response, body=body)
237
+
238
+ if response.status_code == 401:
239
+ return _exceptions.AuthenticationError(err_msg, response=response, body=body)
240
+
241
+ if response.status_code == 403:
242
+ return _exceptions.PermissionDeniedError(err_msg, response=response, body=body)
243
+
244
+ if response.status_code == 404:
245
+ return _exceptions.NotFoundError(err_msg, response=response, body=body)
246
+
247
+ if response.status_code == 409:
248
+ return _exceptions.ConflictError(err_msg, response=response, body=body)
249
+
250
+ if response.status_code == 422:
251
+ return _exceptions.UnprocessableEntityError(err_msg, response=response, body=body)
252
+
253
+ if response.status_code == 429:
254
+ return _exceptions.RateLimitError(err_msg, response=response, body=body)
255
+
256
+ if response.status_code >= 500:
257
+ return _exceptions.InternalServerError(err_msg, response=response, body=body)
258
+ return APIStatusError(err_msg, response=response, body=body)
259
+
260
+
261
+ class AsyncGeminiNextGenAPIClient(AsyncAPIClient):
262
+ # client options
263
+ api_key: str | None
264
+ api_version: str
265
+
266
+ def __init__(
267
+ self,
268
+ *,
269
+ api_key: str | None = None,
270
+ api_version: str | None = "v1beta",
271
+ base_url: str | httpx.URL | None = None,
272
+ timeout: float | Timeout | None | NotGiven = not_given,
273
+ max_retries: int = DEFAULT_MAX_RETRIES,
274
+ default_headers: Mapping[str, str] | None = None,
275
+ default_query: Mapping[str, object] | None = None,
276
+ # Configure a custom httpx client.
277
+ # We provide a `DefaultAsyncHttpxClient` class that you can pass to retain the default values we use for `limits`, `timeout` & `follow_redirects`.
278
+ # See the [httpx documentation](https://www.python-httpx.org/api/#asyncclient) for more details.
279
+ http_client: httpx.AsyncClient | None = None,
280
+ # Enable or disable schema validation for data returned by the API.
281
+ # When enabled an error APIResponseValidationError is raised
282
+ # if the API responds with invalid data for the expected schema.
283
+ #
284
+ # This parameter may be removed or changed in the future.
285
+ # If you rely on this feature, please open a GitHub issue
286
+ # outlining your use-case to help us decide if it should be
287
+ # part of our public interface in the future.
288
+ _strict_response_validation: bool = False,
289
+ ) -> None:
290
+ """Construct a new async AsyncGeminiNextGenAPIClient client instance.
291
+
292
+ This automatically infers the `api_key` argument from the `GEMINI_API_KEY` environment variable if it is not provided.
293
+ """
294
+ if api_key is None:
295
+ api_key = os.environ.get("GEMINI_API_KEY")
296
+ self.api_key = api_key
297
+
298
+ if api_version is None:
299
+ api_version = "v1beta"
300
+ self.api_version = api_version
301
+
302
+ if base_url is None:
303
+ base_url = os.environ.get("GEMINI_NEXT_GEN_API_BASE_URL")
304
+ if base_url is None:
305
+ base_url = f"https://generativelanguage.googleapis.com"
306
+
307
+ super().__init__(
308
+ version=__version__,
309
+ base_url=base_url,
310
+ max_retries=max_retries,
311
+ timeout=timeout,
312
+ http_client=http_client,
313
+ custom_headers=default_headers,
314
+ custom_query=default_query,
315
+ _strict_response_validation=_strict_response_validation,
316
+ )
317
+
318
+ self._default_stream_cls = AsyncStream
319
+
320
+ @cached_property
321
+ def interactions(self) -> AsyncInteractionsResource:
322
+ from .resources.interactions import AsyncInteractionsResource
323
+
324
+ return AsyncInteractionsResource(self)
325
+
326
+ @cached_property
327
+ def with_raw_response(self) -> AsyncGeminiNextGenAPIClientWithRawResponse:
328
+ return AsyncGeminiNextGenAPIClientWithRawResponse(self)
329
+
330
+ @cached_property
331
+ def with_streaming_response(self) -> AsyncGeminiNextGenAPIClientWithStreamedResponse:
332
+ return AsyncGeminiNextGenAPIClientWithStreamedResponse(self)
333
+
334
+ @property
335
+ @override
336
+ def qs(self) -> Querystring:
337
+ return Querystring(array_format="comma")
338
+
339
+ @property
340
+ @override
341
+ def auth_headers(self) -> dict[str, str]:
342
+ api_key = self.api_key
343
+ if api_key is None:
344
+ return {}
345
+ return {"x-goog-api-key": api_key}
346
+
347
+ @property
348
+ @override
349
+ def default_headers(self) -> dict[str, str | Omit]:
350
+ return {
351
+ **super().default_headers,
352
+ "X-Stainless-Async": f"async:{get_async_library()}",
353
+ **self._custom_headers,
354
+ }
355
+
356
+ @override
357
+ def _validate_headers(self, headers: Headers, custom_headers: Headers) -> None:
358
+ if self.api_key and headers.get("x-goog-api-key"):
359
+ return
360
+ if isinstance(custom_headers.get("x-goog-api-key"), Omit):
361
+ return
362
+
363
+ raise TypeError(
364
+ '"Could not resolve authentication method. Expected the api_key to be set. Or for the `x-goog-api-key` headers to be explicitly omitted"'
365
+ )
366
+
367
+ def copy(
368
+ self,
369
+ *,
370
+ api_key: str | None = None,
371
+ api_version: str | None = None,
372
+ base_url: str | httpx.URL | None = None,
373
+ timeout: float | Timeout | None | NotGiven = not_given,
374
+ http_client: httpx.AsyncClient | None = None,
375
+ max_retries: int | NotGiven = not_given,
376
+ default_headers: Mapping[str, str] | None = None,
377
+ set_default_headers: Mapping[str, str] | None = None,
378
+ default_query: Mapping[str, object] | None = None,
379
+ set_default_query: Mapping[str, object] | None = None,
380
+ _extra_kwargs: Mapping[str, Any] = {},
381
+ ) -> Self:
382
+ """
383
+ Create a new client instance re-using the same options given to the current client with optional overriding.
384
+ """
385
+ if default_headers is not None and set_default_headers is not None:
386
+ raise ValueError("The `default_headers` and `set_default_headers` arguments are mutually exclusive")
387
+
388
+ if default_query is not None and set_default_query is not None:
389
+ raise ValueError("The `default_query` and `set_default_query` arguments are mutually exclusive")
390
+
391
+ headers = self._custom_headers
392
+ if default_headers is not None:
393
+ headers = {**headers, **default_headers}
394
+ elif set_default_headers is not None:
395
+ headers = set_default_headers
396
+
397
+ params = self._custom_query
398
+ if default_query is not None:
399
+ params = {**params, **default_query}
400
+ elif set_default_query is not None:
401
+ params = set_default_query
402
+
403
+ http_client = http_client or self._client
404
+ return self.__class__(
405
+ api_key=api_key or self.api_key,
406
+ api_version=api_version or self.api_version,
407
+ base_url=base_url or self.base_url,
408
+ timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
409
+ http_client=http_client,
410
+ max_retries=max_retries if is_given(max_retries) else self.max_retries,
411
+ default_headers=headers,
412
+ default_query=params,
413
+ **_extra_kwargs,
414
+ )
415
+
416
+ # Alias for `copy` for nicer inline usage, e.g.
417
+ # client.with_options(timeout=10).foo.create(...)
418
+ with_options = copy
419
+
420
+ def _get_api_version_path_param(self) -> str:
421
+ return self.api_version
422
+
423
+ @override
424
+ def _make_status_error(
425
+ self,
426
+ err_msg: str,
427
+ *,
428
+ body: object,
429
+ response: httpx.Response,
430
+ ) -> APIStatusError:
431
+ if response.status_code == 400:
432
+ return _exceptions.BadRequestError(err_msg, response=response, body=body)
433
+
434
+ if response.status_code == 401:
435
+ return _exceptions.AuthenticationError(err_msg, response=response, body=body)
436
+
437
+ if response.status_code == 403:
438
+ return _exceptions.PermissionDeniedError(err_msg, response=response, body=body)
439
+
440
+ if response.status_code == 404:
441
+ return _exceptions.NotFoundError(err_msg, response=response, body=body)
442
+
443
+ if response.status_code == 409:
444
+ return _exceptions.ConflictError(err_msg, response=response, body=body)
445
+
446
+ if response.status_code == 422:
447
+ return _exceptions.UnprocessableEntityError(err_msg, response=response, body=body)
448
+
449
+ if response.status_code == 429:
450
+ return _exceptions.RateLimitError(err_msg, response=response, body=body)
451
+
452
+ if response.status_code >= 500:
453
+ return _exceptions.InternalServerError(err_msg, response=response, body=body)
454
+ return APIStatusError(err_msg, response=response, body=body)
455
+
456
+
457
+ class GeminiNextGenAPIClientWithRawResponse:
458
+ _client: GeminiNextGenAPIClient
459
+
460
+ def __init__(self, client: GeminiNextGenAPIClient) -> None:
461
+ self._client = client
462
+
463
+ @cached_property
464
+ def interactions(self) -> interactions.InteractionsResourceWithRawResponse:
465
+ from .resources.interactions import InteractionsResourceWithRawResponse
466
+
467
+ return InteractionsResourceWithRawResponse(self._client.interactions)
468
+
469
+
470
+ class AsyncGeminiNextGenAPIClientWithRawResponse:
471
+ _client: AsyncGeminiNextGenAPIClient
472
+
473
+ def __init__(self, client: AsyncGeminiNextGenAPIClient) -> None:
474
+ self._client = client
475
+
476
+ @cached_property
477
+ def interactions(self) -> interactions.AsyncInteractionsResourceWithRawResponse:
478
+ from .resources.interactions import AsyncInteractionsResourceWithRawResponse
479
+
480
+ return AsyncInteractionsResourceWithRawResponse(self._client.interactions)
481
+
482
+
483
+ class GeminiNextGenAPIClientWithStreamedResponse:
484
+ _client: GeminiNextGenAPIClient
485
+
486
+ def __init__(self, client: GeminiNextGenAPIClient) -> None:
487
+ self._client = client
488
+
489
+ @cached_property
490
+ def interactions(self) -> interactions.InteractionsResourceWithStreamingResponse:
491
+ from .resources.interactions import InteractionsResourceWithStreamingResponse
492
+
493
+ return InteractionsResourceWithStreamingResponse(self._client.interactions)
494
+
495
+
496
+ class AsyncGeminiNextGenAPIClientWithStreamedResponse:
497
+ _client: AsyncGeminiNextGenAPIClient
498
+
499
+ def __init__(self, client: AsyncGeminiNextGenAPIClient) -> None:
500
+ self._client = client
501
+
502
+ @cached_property
503
+ def interactions(self) -> interactions.AsyncInteractionsResourceWithStreamingResponse:
504
+ from .resources.interactions import AsyncInteractionsResourceWithStreamingResponse
505
+
506
+ return AsyncInteractionsResourceWithStreamingResponse(self._client.interactions)
507
+
508
+
509
+ Client = GeminiNextGenAPIClient
510
+
511
+ AsyncClient = AsyncGeminiNextGenAPIClient