openai 0.86.0 → 0.88.0

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 (1248) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/README.md +10 -1
  4. data/examples/audio/record_and_play.rb +19 -0
  5. data/examples/responses/websocket_workflows.rb +159 -0
  6. data/lib/openai/helpers/local_audio/errors.rb +27 -0
  7. data/lib/openai/helpers/local_audio/process.rb +158 -0
  8. data/lib/openai/helpers/local_audio.rb +157 -0
  9. data/lib/openai/helpers/realtime/connection.rb +20 -2
  10. data/lib/openai/helpers/realtime/errors.rb +18 -0
  11. data/lib/openai/helpers/realtime/recovery.rb +489 -0
  12. data/lib/openai/helpers/realtime/resources/realtime_extension.rb +26 -1
  13. data/lib/openai/helpers/realtime.rb +1 -0
  14. data/lib/openai/models/admin/organization/admin_api_key.rb +26 -13
  15. data/lib/openai/models/admin/organization/admin_api_key_create_params.rb +3 -4
  16. data/lib/openai/models/admin/organization/admin_api_key_create_response.rb +16 -8
  17. data/lib/openai/models/admin/organization/admin_api_key_delete_params.rb +2 -1
  18. data/lib/openai/models/admin/organization/admin_api_key_list_params.rb +6 -3
  19. data/lib/openai/models/admin/organization/admin_api_key_retrieve_params.rb +2 -1
  20. data/lib/openai/models/admin/organization/audit_log_list_params.rb +47 -22
  21. data/lib/openai/models/admin/organization/audit_log_list_response.rb +486 -254
  22. data/lib/openai/models/admin/organization/certificate.rb +24 -11
  23. data/lib/openai/models/admin/organization/certificate_activate_response.rb +14 -7
  24. data/lib/openai/models/admin/organization/certificate_create_params.rb +4 -2
  25. data/lib/openai/models/admin/organization/certificate_deactivate_response.rb +14 -7
  26. data/lib/openai/models/admin/organization/certificate_delete_response.rb +4 -2
  27. data/lib/openai/models/admin/organization/certificate_list_params.rb +11 -6
  28. data/lib/openai/models/admin/organization/certificate_list_response.rb +14 -7
  29. data/lib/openai/models/admin/organization/certificate_retrieve_params.rb +3 -5
  30. data/lib/openai/models/admin/organization/certificate_update_params.rb +2 -1
  31. data/lib/openai/models/admin/organization/data_retention_update_params.rb +2 -1
  32. data/lib/openai/models/admin/organization/group.rb +11 -8
  33. data/lib/openai/models/admin/organization/group_create_params.rb +2 -1
  34. data/lib/openai/models/admin/organization/group_delete_response.rb +6 -3
  35. data/lib/openai/models/admin/organization/group_list_params.rb +10 -6
  36. data/lib/openai/models/admin/organization/group_update_params.rb +2 -1
  37. data/lib/openai/models/admin/organization/group_update_response.rb +9 -7
  38. data/lib/openai/models/admin/organization/groups/organization_group_user.rb +6 -3
  39. data/lib/openai/models/admin/organization/groups/role_create_params.rb +2 -1
  40. data/lib/openai/models/admin/organization/groups/role_create_response.rb +16 -8
  41. data/lib/openai/models/admin/organization/groups/role_delete_response.rb +5 -6
  42. data/lib/openai/models/admin/organization/groups/role_list_params.rb +7 -6
  43. data/lib/openai/models/admin/organization/groups/role_list_response.rb +24 -13
  44. data/lib/openai/models/admin/organization/groups/role_retrieve_response.rb +24 -13
  45. data/lib/openai/models/admin/organization/groups/user_create_params.rb +2 -1
  46. data/lib/openai/models/admin/organization/groups/user_create_response.rb +6 -3
  47. data/lib/openai/models/admin/organization/groups/user_delete_response.rb +4 -2
  48. data/lib/openai/models/admin/organization/groups/user_list_params.rb +8 -6
  49. data/lib/openai/models/admin/organization/groups/user_retrieve_response.rb +12 -6
  50. data/lib/openai/models/admin/organization/invite.rb +22 -12
  51. data/lib/openai/models/admin/organization/invite_create_params.rb +13 -8
  52. data/lib/openai/models/admin/organization/invite_delete_response.rb +2 -1
  53. data/lib/openai/models/admin/organization/invite_list_params.rb +8 -5
  54. data/lib/openai/models/admin/organization/organization_data_retention.rb +4 -2
  55. data/lib/openai/models/admin/organization/organization_spend_alert.rb +18 -9
  56. data/lib/openai/models/admin/organization/organization_spend_alert_deleted.rb +6 -3
  57. data/lib/openai/models/admin/organization/organization_spend_limit.rb +13 -9
  58. data/lib/openai/models/admin/organization/organization_spend_limit_deleted.rb +4 -2
  59. data/lib/openai/models/admin/organization/organization_user.rb +32 -16
  60. data/lib/openai/models/admin/organization/project.rb +16 -8
  61. data/lib/openai/models/admin/organization/project_create_params.rb +18 -9
  62. data/lib/openai/models/admin/organization/project_list_params.rb +11 -6
  63. data/lib/openai/models/admin/organization/project_update_params.rb +7 -6
  64. data/lib/openai/models/admin/organization/projects/api_key_list_params.rb +14 -7
  65. data/lib/openai/models/admin/organization/projects/certificate_activate_response.rb +14 -7
  66. data/lib/openai/models/admin/organization/projects/certificate_deactivate_response.rb +14 -7
  67. data/lib/openai/models/admin/organization/projects/certificate_list_params.rb +11 -7
  68. data/lib/openai/models/admin/organization/projects/certificate_list_response.rb +14 -7
  69. data/lib/openai/models/admin/organization/projects/data_retention_update_params.rb +2 -1
  70. data/lib/openai/models/admin/organization/projects/group_create_params.rb +4 -2
  71. data/lib/openai/models/admin/organization/projects/group_delete_response.rb +4 -2
  72. data/lib/openai/models/admin/organization/projects/group_list_params.rb +7 -7
  73. data/lib/openai/models/admin/organization/projects/group_retrieve_params.rb +2 -1
  74. data/lib/openai/models/admin/organization/projects/groups/role_create_params.rb +2 -1
  75. data/lib/openai/models/admin/organization/projects/groups/role_create_response.rb +16 -8
  76. data/lib/openai/models/admin/organization/projects/groups/role_delete_response.rb +5 -6
  77. data/lib/openai/models/admin/organization/projects/groups/role_list_params.rb +7 -7
  78. data/lib/openai/models/admin/organization/projects/groups/role_list_response.rb +24 -13
  79. data/lib/openai/models/admin/organization/projects/groups/role_retrieve_response.rb +24 -13
  80. data/lib/openai/models/admin/organization/projects/hosted_tool_permission_update_params.rb +20 -10
  81. data/lib/openai/models/admin/organization/projects/model_permission_update_params.rb +4 -2
  82. data/lib/openai/models/admin/organization/projects/project_api_key.rb +50 -20
  83. data/lib/openai/models/admin/organization/projects/project_data_retention.rb +4 -2
  84. data/lib/openai/models/admin/organization/projects/project_group.rb +12 -6
  85. data/lib/openai/models/admin/organization/projects/project_hosted_tool_permissions.rb +20 -10
  86. data/lib/openai/models/admin/organization/projects/project_model_permissions.rb +6 -3
  87. data/lib/openai/models/admin/organization/projects/project_model_permissions_deleted.rb +4 -2
  88. data/lib/openai/models/admin/organization/projects/project_rate_limit.rb +18 -9
  89. data/lib/openai/models/admin/organization/projects/project_service_account.rb +10 -5
  90. data/lib/openai/models/admin/organization/projects/project_spend_alert.rb +18 -9
  91. data/lib/openai/models/admin/organization/projects/project_spend_alert_deleted.rb +6 -3
  92. data/lib/openai/models/admin/organization/projects/project_spend_limit.rb +13 -10
  93. data/lib/openai/models/admin/organization/projects/project_spend_limit_deleted.rb +4 -2
  94. data/lib/openai/models/admin/organization/projects/project_user.rb +12 -6
  95. data/lib/openai/models/admin/organization/projects/rate_limit_list_rate_limits_params.rb +12 -7
  96. data/lib/openai/models/admin/organization/projects/rate_limit_update_rate_limit_params.rb +12 -6
  97. data/lib/openai/models/admin/organization/projects/role_create_params.rb +6 -3
  98. data/lib/openai/models/admin/organization/projects/role_delete_response.rb +6 -3
  99. data/lib/openai/models/admin/organization/projects/role_list_params.rb +7 -7
  100. data/lib/openai/models/admin/organization/projects/role_update_params.rb +6 -3
  101. data/lib/openai/models/admin/organization/projects/service_account_create_params.rb +22 -3
  102. data/lib/openai/models/admin/organization/projects/service_account_create_response.rb +17 -7
  103. data/lib/openai/models/admin/organization/projects/service_account_list_params.rb +8 -6
  104. data/lib/openai/models/admin/organization/projects/service_account_update_params.rb +4 -2
  105. data/lib/openai/models/admin/organization/projects/service_accounts/api_key_create_params.rb +10 -5
  106. data/lib/openai/models/admin/organization/projects/service_accounts/api_key_create_response.rb +13 -10
  107. data/lib/openai/models/admin/organization/projects/spend_alert_create_params.rb +14 -7
  108. data/lib/openai/models/admin/organization/projects/spend_alert_list_params.rb +10 -8
  109. data/lib/openai/models/admin/organization/projects/spend_alert_update_params.rb +14 -7
  110. data/lib/openai/models/admin/organization/projects/spend_limit_update_params.rb +7 -7
  111. data/lib/openai/models/admin/organization/projects/user_create_params.rb +6 -3
  112. data/lib/openai/models/admin/organization/projects/user_list_params.rb +8 -6
  113. data/lib/openai/models/admin/organization/projects/user_update_params.rb +2 -1
  114. data/lib/openai/models/admin/organization/projects/users/role_create_params.rb +2 -1
  115. data/lib/openai/models/admin/organization/projects/users/role_create_response.rb +6 -3
  116. data/lib/openai/models/admin/organization/projects/users/role_delete_response.rb +5 -6
  117. data/lib/openai/models/admin/organization/projects/users/role_list_params.rb +7 -7
  118. data/lib/openai/models/admin/organization/projects/users/role_list_response.rb +24 -13
  119. data/lib/openai/models/admin/organization/projects/users/role_retrieve_response.rb +24 -13
  120. data/lib/openai/models/admin/organization/role.rb +15 -10
  121. data/lib/openai/models/admin/organization/role_create_params.rb +6 -3
  122. data/lib/openai/models/admin/organization/role_delete_response.rb +6 -3
  123. data/lib/openai/models/admin/organization/role_list_params.rb +7 -6
  124. data/lib/openai/models/admin/organization/role_update_params.rb +6 -3
  125. data/lib/openai/models/admin/organization/spend_alert_create_params.rb +14 -7
  126. data/lib/openai/models/admin/organization/spend_alert_list_params.rb +10 -7
  127. data/lib/openai/models/admin/organization/spend_alert_update_params.rb +14 -7
  128. data/lib/openai/models/admin/organization/spend_limit_update_params.rb +7 -6
  129. data/lib/openai/models/admin/organization/usage_audio_speeches_params.rb +26 -13
  130. data/lib/openai/models/admin/organization/usage_audio_speeches_response.rb +205 -121
  131. data/lib/openai/models/admin/organization/usage_audio_transcriptions_params.rb +26 -13
  132. data/lib/openai/models/admin/organization/usage_audio_transcriptions_response.rb +205 -121
  133. data/lib/openai/models/admin/organization/usage_code_interpreter_sessions_params.rb +20 -10
  134. data/lib/openai/models/admin/organization/usage_code_interpreter_sessions_response.rb +205 -121
  135. data/lib/openai/models/admin/organization/usage_completions_params.rb +30 -13
  136. data/lib/openai/models/admin/organization/usage_completions_response.rb +205 -121
  137. data/lib/openai/models/admin/organization/usage_costs_params.rb +23 -12
  138. data/lib/openai/models/admin/organization/usage_costs_response.rb +205 -121
  139. data/lib/openai/models/admin/organization/usage_embeddings_params.rb +26 -12
  140. data/lib/openai/models/admin/organization/usage_embeddings_response.rb +205 -121
  141. data/lib/openai/models/admin/organization/usage_file_search_calls_params.rb +27 -13
  142. data/lib/openai/models/admin/organization/usage_file_search_calls_response.rb +205 -121
  143. data/lib/openai/models/admin/organization/usage_images_params.rb +33 -14
  144. data/lib/openai/models/admin/organization/usage_images_response.rb +205 -121
  145. data/lib/openai/models/admin/organization/usage_moderations_params.rb +26 -12
  146. data/lib/openai/models/admin/organization/usage_moderations_response.rb +205 -121
  147. data/lib/openai/models/admin/organization/usage_vector_stores_params.rb +20 -9
  148. data/lib/openai/models/admin/organization/usage_vector_stores_response.rb +205 -121
  149. data/lib/openai/models/admin/organization/usage_web_search_calls_params.rb +29 -14
  150. data/lib/openai/models/admin/organization/usage_web_search_calls_response.rb +205 -121
  151. data/lib/openai/models/admin/organization/user_list_params.rb +10 -6
  152. data/lib/openai/models/admin/organization/user_update_params.rb +8 -4
  153. data/lib/openai/models/admin/organization/users/role_create_params.rb +2 -1
  154. data/lib/openai/models/admin/organization/users/role_create_response.rb +6 -3
  155. data/lib/openai/models/admin/organization/users/role_delete_response.rb +5 -6
  156. data/lib/openai/models/admin/organization/users/role_list_params.rb +7 -6
  157. data/lib/openai/models/admin/organization/users/role_list_response.rb +24 -13
  158. data/lib/openai/models/admin/organization/users/role_retrieve_response.rb +24 -13
  159. data/lib/openai/models/audio/speech_create_params.rb +34 -16
  160. data/lib/openai/models/audio/transcription.rb +35 -20
  161. data/lib/openai/models/audio/transcription_create_params.rb +86 -24
  162. data/lib/openai/models/audio/transcription_diarized.rb +28 -14
  163. data/lib/openai/models/audio/transcription_diarized_segment.rb +14 -9
  164. data/lib/openai/models/audio/transcription_language.rb +2 -1
  165. data/lib/openai/models/audio/transcription_segment.rb +23 -13
  166. data/lib/openai/models/audio/transcription_stream_event.rb +4 -4
  167. data/lib/openai/models/audio/transcription_text_delta_event.rb +19 -16
  168. data/lib/openai/models/audio/transcription_text_done_event.rb +36 -24
  169. data/lib/openai/models/audio/transcription_text_segment_event.rb +13 -7
  170. data/lib/openai/models/audio/transcription_verbose.rb +16 -8
  171. data/lib/openai/models/audio/transcription_word.rb +6 -3
  172. data/lib/openai/models/audio/translation_create_params.rb +26 -8
  173. data/lib/openai/models/audio/translation_verbose.rb +8 -4
  174. data/lib/openai/models/auto_file_chunking_strategy_param.rb +2 -1
  175. data/lib/openai/models/batch.rb +55 -26
  176. data/lib/openai/models/batch_create_params.rb +40 -14
  177. data/lib/openai/models/batch_error.rb +8 -4
  178. data/lib/openai/models/batch_list_params.rb +8 -5
  179. data/lib/openai/models/batch_request_counts.rb +6 -3
  180. data/lib/openai/models/batch_usage.rb +16 -11
  181. data/lib/openai/models/beta/assistant.rb +99 -49
  182. data/lib/openai/models/beta/assistant_create_params.rb +127 -61
  183. data/lib/openai/models/beta/assistant_list_params.rb +16 -7
  184. data/lib/openai/models/beta/assistant_response_format_option.rb +5 -5
  185. data/lib/openai/models/beta/assistant_stream_event.rb +137 -185
  186. data/lib/openai/models/beta/assistant_tool_choice.rb +2 -1
  187. data/lib/openai/models/beta/assistant_tool_choice_function.rb +2 -1
  188. data/lib/openai/models/beta/assistant_update_params.rb +94 -41
  189. data/lib/openai/models/beta/beta_apply_patch_tool.rb +4 -3
  190. data/lib/openai/models/beta/beta_compacted_response.rb +12 -8
  191. data/lib/openai/models/beta/beta_computer_action.rb +78 -58
  192. data/lib/openai/models/beta/beta_computer_tool.rb +3 -2
  193. data/lib/openai/models/beta/beta_computer_use_preview_tool.rb +9 -5
  194. data/lib/openai/models/beta/beta_container_auto.rb +10 -5
  195. data/lib/openai/models/beta/beta_container_network_policy_allowlist.rb +6 -3
  196. data/lib/openai/models/beta/beta_container_network_policy_disabled.rb +2 -1
  197. data/lib/openai/models/beta/beta_container_network_policy_domain_secret.rb +6 -3
  198. data/lib/openai/models/beta/beta_container_reference.rb +4 -2
  199. data/lib/openai/models/beta/beta_custom_tool.rb +24 -16
  200. data/lib/openai/models/beta/beta_easy_input_message.rb +13 -7
  201. data/lib/openai/models/beta/beta_file_search_tool.rb +64 -37
  202. data/lib/openai/models/beta/beta_function_shell_tool.rb +4 -3
  203. data/lib/openai/models/beta/beta_function_tool.rb +19 -13
  204. data/lib/openai/models/beta/beta_inline_skill.rb +8 -4
  205. data/lib/openai/models/beta/beta_inline_skill_source.rb +6 -3
  206. data/lib/openai/models/beta/beta_local_environment.rb +4 -2
  207. data/lib/openai/models/beta/beta_local_skill.rb +6 -3
  208. data/lib/openai/models/beta/beta_namespace_tool.rb +23 -13
  209. data/lib/openai/models/beta/beta_response.rb +372 -165
  210. data/lib/openai/models/beta/beta_response_apply_patch_tool_call.rb +38 -21
  211. data/lib/openai/models/beta/beta_response_apply_patch_tool_call_output.rb +21 -13
  212. data/lib/openai/models/beta/beta_response_audio_delta_event.rb +10 -8
  213. data/lib/openai/models/beta/beta_response_audio_done_event.rb +8 -7
  214. data/lib/openai/models/beta/beta_response_audio_transcript_delta_event.rb +10 -8
  215. data/lib/openai/models/beta/beta_response_audio_transcript_done_event.rb +8 -7
  216. data/lib/openai/models/beta/beta_response_code_interpreter_call_code_delta_event.rb +15 -11
  217. data/lib/openai/models/beta/beta_response_code_interpreter_call_code_done_event.rb +14 -7
  218. data/lib/openai/models/beta/beta_response_code_interpreter_call_completed_event.rb +13 -10
  219. data/lib/openai/models/beta/beta_response_code_interpreter_call_in_progress_event.rb +13 -10
  220. data/lib/openai/models/beta/beta_response_code_interpreter_call_interpreting_event.rb +13 -10
  221. data/lib/openai/models/beta/beta_response_code_interpreter_tool_call.rb +26 -15
  222. data/lib/openai/models/beta/beta_response_compaction_item.rb +13 -7
  223. data/lib/openai/models/beta/beta_response_compaction_item_param.rb +11 -6
  224. data/lib/openai/models/beta/beta_response_completed_event.rb +10 -8
  225. data/lib/openai/models/beta/beta_response_computer_tool_call.rb +27 -17
  226. data/lib/openai/models/beta/beta_response_computer_tool_call_output_item.rb +26 -15
  227. data/lib/openai/models/beta/beta_response_computer_tool_call_output_screenshot.rb +7 -7
  228. data/lib/openai/models/beta/beta_response_configuration_update_item.rb +13 -10
  229. data/lib/openai/models/beta/beta_response_configuration_update_item_param.rb +13 -10
  230. data/lib/openai/models/beta/beta_response_container_reference.rb +2 -1
  231. data/lib/openai/models/beta/beta_response_content.rb +5 -3
  232. data/lib/openai/models/beta/beta_response_content_part_added_event.rb +20 -13
  233. data/lib/openai/models/beta/beta_response_content_part_done_event.rb +20 -13
  234. data/lib/openai/models/beta/beta_response_conversation_param.rb +2 -1
  235. data/lib/openai/models/beta/beta_response_created_event.rb +10 -8
  236. data/lib/openai/models/beta/beta_response_custom_tool_call.rb +22 -14
  237. data/lib/openai/models/beta/beta_response_custom_tool_call_input_delta_event.rb +14 -7
  238. data/lib/openai/models/beta/beta_response_custom_tool_call_input_done_event.rb +14 -7
  239. data/lib/openai/models/beta/beta_response_custom_tool_call_item.rb +23 -14
  240. data/lib/openai/models/beta/beta_response_custom_tool_call_output.rb +22 -14
  241. data/lib/openai/models/beta/beta_response_custom_tool_call_output_item.rb +18 -11
  242. data/lib/openai/models/beta/beta_response_error.rb +12 -9
  243. data/lib/openai/models/beta/beta_response_error_event.rb +14 -10
  244. data/lib/openai/models/beta/beta_response_failed_event.rb +10 -8
  245. data/lib/openai/models/beta/beta_response_file_search_call_completed_event.rb +12 -10
  246. data/lib/openai/models/beta/beta_response_file_search_call_in_progress_event.rb +12 -10
  247. data/lib/openai/models/beta/beta_response_file_search_call_searching_event.rb +12 -10
  248. data/lib/openai/models/beta/beta_response_file_search_tool_call.rb +30 -20
  249. data/lib/openai/models/beta/beta_response_format_text_config.rb +6 -4
  250. data/lib/openai/models/beta/beta_response_format_text_json_schema_config.rb +19 -10
  251. data/lib/openai/models/beta/beta_response_function_call_arguments_delta_event.rb +14 -11
  252. data/lib/openai/models/beta/beta_response_function_call_arguments_done_event.rb +12 -6
  253. data/lib/openai/models/beta/beta_response_function_call_output_item.rb +1 -1
  254. data/lib/openai/models/beta/beta_response_function_shell_call_output_content.rb +12 -6
  255. data/lib/openai/models/beta/beta_response_function_shell_tool_call.rb +28 -16
  256. data/lib/openai/models/beta/beta_response_function_shell_tool_call_output.rb +40 -27
  257. data/lib/openai/models/beta/beta_response_function_tool_call.rb +26 -16
  258. data/lib/openai/models/beta/beta_response_function_tool_call_item.rb +24 -15
  259. data/lib/openai/models/beta/beta_response_function_tool_call_output_item.rb +31 -18
  260. data/lib/openai/models/beta/beta_response_function_web_search.rb +37 -39
  261. data/lib/openai/models/beta/beta_response_image_gen_call_completed_event.rb +12 -6
  262. data/lib/openai/models/beta/beta_response_image_gen_call_generating_event.rb +12 -6
  263. data/lib/openai/models/beta/beta_response_image_gen_call_in_progress_event.rb +12 -6
  264. data/lib/openai/models/beta/beta_response_image_gen_call_partial_image_event.rb +25 -16
  265. data/lib/openai/models/beta/beta_response_in_progress_event.rb +10 -8
  266. data/lib/openai/models/beta/beta_response_incomplete_event.rb +10 -8
  267. data/lib/openai/models/beta/beta_response_inject_created_event.rb +9 -7
  268. data/lib/openai/models/beta/beta_response_inject_event.rb +6 -3
  269. data/lib/openai/models/beta/beta_response_inject_failed_event.rb +17 -11
  270. data/lib/openai/models/beta/beta_response_input_audio.rb +6 -9
  271. data/lib/openai/models/beta/beta_response_input_content.rb +1 -1
  272. data/lib/openai/models/beta/beta_response_input_file.rb +22 -11
  273. data/lib/openai/models/beta/beta_response_input_file_content.rb +22 -11
  274. data/lib/openai/models/beta/beta_response_input_image.rb +17 -10
  275. data/lib/openai/models/beta/beta_response_input_image_content.rb +17 -10
  276. data/lib/openai/models/beta/beta_response_input_item.rb +560 -291
  277. data/lib/openai/models/beta/beta_response_input_message_item.rb +16 -10
  278. data/lib/openai/models/beta/beta_response_input_text.rb +10 -7
  279. data/lib/openai/models/beta/beta_response_input_text_content.rb +10 -7
  280. data/lib/openai/models/beta/beta_response_item.rb +316 -150
  281. data/lib/openai/models/beta/beta_response_local_environment.rb +2 -1
  282. data/lib/openai/models/beta/beta_response_mcp_call_arguments_delta_event.rb +15 -10
  283. data/lib/openai/models/beta/beta_response_mcp_call_arguments_done_event.rb +14 -10
  284. data/lib/openai/models/beta/beta_response_mcp_call_completed_event.rb +12 -6
  285. data/lib/openai/models/beta/beta_response_mcp_call_failed_event.rb +12 -6
  286. data/lib/openai/models/beta/beta_response_mcp_call_in_progress_event.rb +12 -6
  287. data/lib/openai/models/beta/beta_response_mcp_list_tools_completed_event.rb +12 -6
  288. data/lib/openai/models/beta/beta_response_mcp_list_tools_failed_event.rb +12 -6
  289. data/lib/openai/models/beta/beta_response_mcp_list_tools_in_progress_event.rb +12 -6
  290. data/lib/openai/models/beta/beta_response_output_audio.rb +6 -6
  291. data/lib/openai/models/beta/beta_response_output_item.rb +328 -155
  292. data/lib/openai/models/beta/beta_response_output_item_added_event.rb +15 -9
  293. data/lib/openai/models/beta/beta_response_output_item_done_event.rb +12 -9
  294. data/lib/openai/models/beta/beta_response_output_message.rb +20 -11
  295. data/lib/openai/models/beta/beta_response_output_refusal.rb +4 -2
  296. data/lib/openai/models/beta/beta_response_output_text.rb +42 -25
  297. data/lib/openai/models/beta/beta_response_output_text_annotation_added_event.rb +54 -31
  298. data/lib/openai/models/beta/beta_response_prompt.rb +10 -8
  299. data/lib/openai/models/beta/beta_response_queued_event.rb +10 -5
  300. data/lib/openai/models/beta/beta_response_reasoning_item.rb +33 -17
  301. data/lib/openai/models/beta/beta_response_reasoning_summary_part_added_event.rb +20 -14
  302. data/lib/openai/models/beta/beta_response_reasoning_summary_part_done_event.rb +23 -15
  303. data/lib/openai/models/beta/beta_response_reasoning_summary_text_delta_event.rb +16 -12
  304. data/lib/openai/models/beta/beta_response_reasoning_summary_text_done_event.rb +16 -12
  305. data/lib/openai/models/beta/beta_response_reasoning_text_delta_event.rb +16 -11
  306. data/lib/openai/models/beta/beta_response_reasoning_text_done_event.rb +16 -11
  307. data/lib/openai/models/beta/beta_response_refusal_delta_event.rb +16 -11
  308. data/lib/openai/models/beta/beta_response_refusal_done_event.rb +16 -11
  309. data/lib/openai/models/beta/beta_response_shell_call_command_added_event.rb +14 -7
  310. data/lib/openai/models/beta/beta_response_shell_call_command_delta_event.rb +16 -8
  311. data/lib/openai/models/beta/beta_response_shell_call_command_done_event.rb +14 -7
  312. data/lib/openai/models/beta/beta_response_shell_call_output_content_delta_event.rb +20 -10
  313. data/lib/openai/models/beta/beta_response_shell_call_output_content_done_event.rb +31 -20
  314. data/lib/openai/models/beta/beta_response_steer_accepted_event.rb +13 -9
  315. data/lib/openai/models/beta/beta_response_steer_event.rb +14 -6
  316. data/lib/openai/models/beta/beta_response_steer_failed_event.rb +45 -22
  317. data/lib/openai/models/beta/beta_response_steer_input.rb +42 -24
  318. data/lib/openai/models/beta/beta_response_steer_input_content.rb +1 -1
  319. data/lib/openai/models/beta/beta_response_steer_pending_event.rb +24 -11
  320. data/lib/openai/models/beta/beta_response_text_config.rb +22 -8
  321. data/lib/openai/models/beta/beta_response_text_delta_event.rb +28 -22
  322. data/lib/openai/models/beta/beta_response_text_done_event.rb +28 -22
  323. data/lib/openai/models/beta/beta_response_tool_search_call.rb +18 -9
  324. data/lib/openai/models/beta/beta_response_tool_search_output_item.rb +18 -9
  325. data/lib/openai/models/beta/beta_response_tool_search_output_item_param.rb +16 -8
  326. data/lib/openai/models/beta/beta_response_usage.rb +18 -12
  327. data/lib/openai/models/beta/beta_response_web_search_call_completed_event.rb +12 -10
  328. data/lib/openai/models/beta/beta_response_web_search_call_in_progress_event.rb +12 -10
  329. data/lib/openai/models/beta/beta_response_web_search_call_searching_event.rb +12 -10
  330. data/lib/openai/models/beta/beta_responses_client_event.rb +401 -162
  331. data/lib/openai/models/beta/beta_responses_server_event.rb +862 -629
  332. data/lib/openai/models/beta/beta_skill_reference.rb +6 -3
  333. data/lib/openai/models/beta/beta_tool.rb +236 -129
  334. data/lib/openai/models/beta/beta_tool_choice_allowed.rb +21 -6
  335. data/lib/openai/models/beta/beta_tool_choice_apply_patch.rb +2 -1
  336. data/lib/openai/models/beta/beta_tool_choice_custom.rb +4 -2
  337. data/lib/openai/models/beta/beta_tool_choice_function.rb +4 -2
  338. data/lib/openai/models/beta/beta_tool_choice_mcp.rb +6 -6
  339. data/lib/openai/models/beta/beta_tool_choice_shell.rb +2 -1
  340. data/lib/openai/models/beta/beta_tool_choice_types.rb +16 -7
  341. data/lib/openai/models/beta/beta_tool_search_tool.rb +8 -4
  342. data/lib/openai/models/beta/beta_web_search_preview_tool.rb +21 -15
  343. data/lib/openai/models/beta/beta_web_search_tool.rb +31 -21
  344. data/lib/openai/models/beta/chatkit/chat_session.rb +20 -10
  345. data/lib/openai/models/beta/chatkit/chat_session_automatic_thread_titling.rb +2 -1
  346. data/lib/openai/models/beta/chatkit/chat_session_chatkit_configuration.rb +6 -3
  347. data/lib/openai/models/beta/chatkit/chat_session_chatkit_configuration_param.rb +23 -21
  348. data/lib/openai/models/beta/chatkit/chat_session_expires_after_param.rb +4 -2
  349. data/lib/openai/models/beta/chatkit/chat_session_file_upload.rb +6 -3
  350. data/lib/openai/models/beta/chatkit/chat_session_history.rb +5 -5
  351. data/lib/openai/models/beta/chatkit/chat_session_rate_limits.rb +2 -1
  352. data/lib/openai/models/beta/chatkit/chat_session_rate_limits_param.rb +2 -1
  353. data/lib/openai/models/beta/chatkit/chat_session_workflow_param.rb +12 -9
  354. data/lib/openai/models/beta/chatkit/chatkit_attachment.rb +10 -5
  355. data/lib/openai/models/beta/chatkit/chatkit_response_output_text.rb +22 -11
  356. data/lib/openai/models/beta/chatkit/chatkit_thread.rb +23 -14
  357. data/lib/openai/models/beta/chatkit/chatkit_thread_assistant_message_item.rb +12 -6
  358. data/lib/openai/models/beta/chatkit/chatkit_thread_item_list.rb +65 -41
  359. data/lib/openai/models/beta/chatkit/chatkit_thread_user_message_item.rb +29 -18
  360. data/lib/openai/models/beta/chatkit/chatkit_widget_item.rb +12 -6
  361. data/lib/openai/models/beta/chatkit/session_create_params.rb +12 -8
  362. data/lib/openai/models/beta/chatkit/thread_delete_response.rb +6 -3
  363. data/lib/openai/models/beta/chatkit/thread_list_items_params.rb +10 -7
  364. data/lib/openai/models/beta/chatkit/thread_list_params.rb +13 -8
  365. data/lib/openai/models/beta/chatkit_workflow.rb +12 -9
  366. data/lib/openai/models/beta/code_interpreter_tool.rb +2 -1
  367. data/lib/openai/models/beta/file_search_tool.rb +29 -16
  368. data/lib/openai/models/beta/function_tool.rb +2 -1
  369. data/lib/openai/models/beta/message_stream_event.rb +32 -41
  370. data/lib/openai/models/beta/response_compact_params.rb +89 -46
  371. data/lib/openai/models/beta/response_create_params.rb +382 -149
  372. data/lib/openai/models/beta/response_retrieve_params.rb +12 -6
  373. data/lib/openai/models/beta/responses/beta_response_item_list.rb +10 -5
  374. data/lib/openai/models/beta/responses/input_item_list_params.rb +13 -7
  375. data/lib/openai/models/beta/responses/input_token_count_params.rb +113 -42
  376. data/lib/openai/models/beta/run_step_stream_event.rb +36 -57
  377. data/lib/openai/models/beta/run_stream_event.rb +61 -72
  378. data/lib/openai/models/beta/thread.rb +32 -21
  379. data/lib/openai/models/beta/thread_create_and_run_params.rb +232 -123
  380. data/lib/openai/models/beta/thread_create_params.rb +89 -52
  381. data/lib/openai/models/beta/thread_stream_event.rb +7 -7
  382. data/lib/openai/models/beta/thread_update_params.rb +25 -19
  383. data/lib/openai/models/beta/threads/file_citation_annotation.rb +6 -3
  384. data/lib/openai/models/beta/threads/file_citation_delta_annotation.rb +10 -5
  385. data/lib/openai/models/beta/threads/file_path_annotation.rb +6 -3
  386. data/lib/openai/models/beta/threads/file_path_delta_annotation.rb +8 -4
  387. data/lib/openai/models/beta/threads/image_file.rb +10 -8
  388. data/lib/openai/models/beta/threads/image_file_content_block.rb +5 -3
  389. data/lib/openai/models/beta/threads/image_file_delta.rb +10 -8
  390. data/lib/openai/models/beta/threads/image_file_delta_block.rb +7 -4
  391. data/lib/openai/models/beta/threads/image_url.rb +6 -5
  392. data/lib/openai/models/beta/threads/image_url_content_block.rb +2 -1
  393. data/lib/openai/models/beta/threads/image_url_delta.rb +6 -5
  394. data/lib/openai/models/beta/threads/image_url_delta_block.rb +4 -2
  395. data/lib/openai/models/beta/threads/message.rb +52 -28
  396. data/lib/openai/models/beta/threads/message_content.rb +4 -3
  397. data/lib/openai/models/beta/threads/message_content_delta.rb +4 -3
  398. data/lib/openai/models/beta/threads/message_content_part_param.rb +4 -3
  399. data/lib/openai/models/beta/threads/message_create_params.rb +25 -12
  400. data/lib/openai/models/beta/threads/message_delta.rb +4 -2
  401. data/lib/openai/models/beta/threads/message_delta_event.rb +6 -3
  402. data/lib/openai/models/beta/threads/message_list_params.rb +18 -8
  403. data/lib/openai/models/beta/threads/message_update_params.rb +7 -4
  404. data/lib/openai/models/beta/threads/refusal_content_block.rb +2 -1
  405. data/lib/openai/models/beta/threads/refusal_delta_block.rb +4 -2
  406. data/lib/openai/models/beta/threads/required_action_function_tool_call.rb +15 -10
  407. data/lib/openai/models/beta/threads/run.rb +174 -89
  408. data/lib/openai/models/beta/threads/run_create_params.rb +173 -74
  409. data/lib/openai/models/beta/threads/run_list_params.rb +16 -7
  410. data/lib/openai/models/beta/threads/run_submit_tool_outputs_params.rb +7 -7
  411. data/lib/openai/models/beta/threads/run_update_params.rb +7 -4
  412. data/lib/openai/models/beta/threads/runs/code_interpreter_logs.rb +6 -3
  413. data/lib/openai/models/beta/threads/runs/code_interpreter_output_image.rb +9 -9
  414. data/lib/openai/models/beta/threads/runs/code_interpreter_tool_call.rb +24 -22
  415. data/lib/openai/models/beta/threads/runs/code_interpreter_tool_call_delta.rb +15 -14
  416. data/lib/openai/models/beta/threads/runs/file_search_tool_call.rb +31 -25
  417. data/lib/openai/models/beta/threads/runs/file_search_tool_call_delta.rb +9 -7
  418. data/lib/openai/models/beta/threads/runs/function_tool_call.rb +15 -15
  419. data/lib/openai/models/beta/threads/runs/function_tool_call_delta.rb +17 -16
  420. data/lib/openai/models/beta/threads/runs/message_creation_step_details.rb +4 -2
  421. data/lib/openai/models/beta/threads/runs/run_step.rb +62 -29
  422. data/lib/openai/models/beta/threads/runs/run_step_delta.rb +2 -1
  423. data/lib/openai/models/beta/threads/runs/run_step_delta_event.rb +6 -3
  424. data/lib/openai/models/beta/threads/runs/run_step_delta_message_delta.rb +4 -2
  425. data/lib/openai/models/beta/threads/runs/step_list_params.rb +29 -13
  426. data/lib/openai/models/beta/threads/runs/step_retrieve_params.rb +9 -5
  427. data/lib/openai/models/beta/threads/runs/tool_call_delta_object.rb +6 -5
  428. data/lib/openai/models/beta/threads/runs/tool_calls_step_details.rb +6 -5
  429. data/lib/openai/models/beta/threads/text.rb +2 -1
  430. data/lib/openai/models/beta/threads/text_content_block.rb +2 -1
  431. data/lib/openai/models/beta/threads/text_content_block_param.rb +4 -2
  432. data/lib/openai/models/beta/threads/text_delta.rb +2 -1
  433. data/lib/openai/models/beta/threads/text_delta_block.rb +4 -2
  434. data/lib/openai/models/chat/chat_completion.rb +143 -75
  435. data/lib/openai/models/chat/chat_completion_allowed_tool_choice.rb +4 -5
  436. data/lib/openai/models/chat/chat_completion_allowed_tools.rb +18 -5
  437. data/lib/openai/models/chat/chat_completion_assistant_message_param.rb +31 -26
  438. data/lib/openai/models/chat/chat_completion_audio.rb +11 -8
  439. data/lib/openai/models/chat/chat_completion_audio_param.rb +11 -7
  440. data/lib/openai/models/chat/chat_completion_chunk.rb +174 -97
  441. data/lib/openai/models/chat/chat_completion_content_part.rb +22 -20
  442. data/lib/openai/models/chat/chat_completion_content_part_image.rb +17 -15
  443. data/lib/openai/models/chat/chat_completion_content_part_input_audio.rb +13 -13
  444. data/lib/openai/models/chat/chat_completion_content_part_refusal.rb +4 -2
  445. data/lib/openai/models/chat/chat_completion_content_part_text.rb +11 -9
  446. data/lib/openai/models/chat/chat_completion_custom_tool.rb +20 -16
  447. data/lib/openai/models/chat/chat_completion_deleted.rb +6 -3
  448. data/lib/openai/models/chat/chat_completion_developer_message_param.rb +7 -6
  449. data/lib/openai/models/chat/chat_completion_function_call_option.rb +2 -1
  450. data/lib/openai/models/chat/chat_completion_function_message_param.rb +6 -3
  451. data/lib/openai/models/chat/chat_completion_function_tool.rb +2 -1
  452. data/lib/openai/models/chat/chat_completion_message.rb +39 -24
  453. data/lib/openai/models/chat/chat_completion_message_custom_tool_call.rb +10 -5
  454. data/lib/openai/models/chat/chat_completion_message_function_tool_call.rb +13 -9
  455. data/lib/openai/models/chat/chat_completion_named_tool_choice.rb +4 -2
  456. data/lib/openai/models/chat/chat_completion_named_tool_choice_custom.rb +4 -2
  457. data/lib/openai/models/chat/chat_completion_prediction_content.rb +8 -6
  458. data/lib/openai/models/chat/chat_completion_store_message.rb +26 -16
  459. data/lib/openai/models/chat/chat_completion_stream_options.rb +15 -5
  460. data/lib/openai/models/chat/chat_completion_system_message_param.rb +7 -6
  461. data/lib/openai/models/chat/chat_completion_token_logprob.rb +25 -14
  462. data/lib/openai/models/chat/chat_completion_tool_message_param.rb +6 -3
  463. data/lib/openai/models/chat/chat_completion_user_message_param.rb +8 -7
  464. data/lib/openai/models/chat/completion_create_params.rb +388 -161
  465. data/lib/openai/models/chat/completion_list_params.rb +12 -7
  466. data/lib/openai/models/chat/completion_update_params.rb +7 -4
  467. data/lib/openai/models/chat/completions/message_list_params.rb +7 -6
  468. data/lib/openai/models/comparison_filter.rb +17 -6
  469. data/lib/openai/models/completion.rb +17 -10
  470. data/lib/openai/models/completion_choice.rb +5 -4
  471. data/lib/openai/models/completion_create_params.rb +124 -37
  472. data/lib/openai/models/completion_usage.rb +34 -18
  473. data/lib/openai/models/compound_filter.rb +5 -5
  474. data/lib/openai/models/container_create_params.rb +15 -10
  475. data/lib/openai/models/container_create_response.rb +28 -16
  476. data/lib/openai/models/container_list_params.rb +13 -7
  477. data/lib/openai/models/container_list_response.rb +28 -16
  478. data/lib/openai/models/container_retrieve_response.rb +28 -16
  479. data/lib/openai/models/containers/file_create_params.rb +8 -5
  480. data/lib/openai/models/containers/file_create_response.rb +14 -7
  481. data/lib/openai/models/containers/file_list_params.rb +11 -6
  482. data/lib/openai/models/containers/file_list_response.rb +14 -7
  483. data/lib/openai/models/containers/file_retrieve_response.rb +14 -7
  484. data/lib/openai/models/content_provenance_check.rb +44 -25
  485. data/lib/openai/models/content_provenance_check_create_params.rb +6 -1
  486. data/lib/openai/models/conversations/computer_screenshot_content.rb +16 -9
  487. data/lib/openai/models/conversations/conversation.rb +16 -10
  488. data/lib/openai/models/conversations/conversation_create_params.rb +9 -4
  489. data/lib/openai/models/conversations/conversation_item.rb +216 -100
  490. data/lib/openai/models/conversations/conversation_item_list.rb +10 -5
  491. data/lib/openai/models/conversations/conversation_update_params.rb +7 -4
  492. data/lib/openai/models/conversations/item_create_params.rb +7 -6
  493. data/lib/openai/models/conversations/item_list_params.rb +29 -7
  494. data/lib/openai/models/conversations/item_retrieve_params.rb +5 -5
  495. data/lib/openai/models/conversations/message.rb +22 -12
  496. data/lib/openai/models/conversations/summary_text_content.rb +4 -2
  497. data/lib/openai/models/create_embedding_response.rb +12 -6
  498. data/lib/openai/models/custom_tool_input_format.rb +8 -4
  499. data/lib/openai/models/embedding.rb +9 -7
  500. data/lib/openai/models/embedding_create_params.rb +36 -18
  501. data/lib/openai/models/error_object.rb +8 -4
  502. data/lib/openai/models/eval_create_params.rb +105 -74
  503. data/lib/openai/models/eval_create_response.rb +69 -42
  504. data/lib/openai/models/eval_custom_data_source_config.rb +5 -5
  505. data/lib/openai/models/eval_list_params.rb +10 -7
  506. data/lib/openai/models/eval_list_response.rb +69 -42
  507. data/lib/openai/models/eval_retrieve_response.rb +69 -42
  508. data/lib/openai/models/eval_stored_completions_data_source_config.rb +12 -6
  509. data/lib/openai/models/eval_update_params.rb +9 -5
  510. data/lib/openai/models/eval_update_response.rb +69 -42
  511. data/lib/openai/models/evals/create_eval_completions_run_data_source.rb +97 -64
  512. data/lib/openai/models/evals/create_eval_jsonl_run_data_source.rb +12 -7
  513. data/lib/openai/models/evals/eval_api_error.rb +4 -2
  514. data/lib/openai/models/evals/run_cancel_response.rb +204 -114
  515. data/lib/openai/models/evals/run_create_params.rb +156 -90
  516. data/lib/openai/models/evals/run_create_response.rb +204 -114
  517. data/lib/openai/models/evals/run_list_params.rb +10 -7
  518. data/lib/openai/models/evals/run_list_response.rb +204 -114
  519. data/lib/openai/models/evals/run_retrieve_response.rb +204 -114
  520. data/lib/openai/models/evals/runs/output_item_list_params.rb +10 -7
  521. data/lib/openai/models/evals/runs/output_item_list_response.rb +66 -38
  522. data/lib/openai/models/evals/runs/output_item_retrieve_response.rb +66 -39
  523. data/lib/openai/models/file_create_params.rb +23 -10
  524. data/lib/openai/models/file_list_params.rb +13 -7
  525. data/lib/openai/models/file_object.rb +22 -12
  526. data/lib/openai/models/fine_tuning/alpha/grader_run_params.rb +18 -10
  527. data/lib/openai/models/fine_tuning/alpha/grader_validate_params.rb +2 -1
  528. data/lib/openai/models/fine_tuning/alpha/grader_validate_response.rb +2 -1
  529. data/lib/openai/models/fine_tuning/checkpoints/permission_create_params.rb +2 -1
  530. data/lib/openai/models/fine_tuning/checkpoints/permission_create_response.rb +8 -4
  531. data/lib/openai/models/fine_tuning/checkpoints/permission_delete_response.rb +6 -3
  532. data/lib/openai/models/fine_tuning/checkpoints/permission_list_params.rb +8 -4
  533. data/lib/openai/models/fine_tuning/checkpoints/permission_list_response.rb +8 -4
  534. data/lib/openai/models/fine_tuning/checkpoints/permission_retrieve_params.rb +8 -4
  535. data/lib/openai/models/fine_tuning/checkpoints/permission_retrieve_response.rb +8 -4
  536. data/lib/openai/models/fine_tuning/dpo_hyperparameters.rb +12 -7
  537. data/lib/openai/models/fine_tuning/dpo_method.rb +2 -1
  538. data/lib/openai/models/fine_tuning/fine_tuning_job.rb +82 -41
  539. data/lib/openai/models/fine_tuning/fine_tuning_job_event.rb +14 -7
  540. data/lib/openai/models/fine_tuning/fine_tuning_job_wandb_integration.rb +13 -7
  541. data/lib/openai/models/fine_tuning/fine_tuning_job_wandb_integration_object.rb +7 -6
  542. data/lib/openai/models/fine_tuning/job_create_params.rb +107 -42
  543. data/lib/openai/models/fine_tuning/job_list_events_params.rb +4 -2
  544. data/lib/openai/models/fine_tuning/job_list_params.rb +7 -6
  545. data/lib/openai/models/fine_tuning/jobs/checkpoint_list_params.rb +4 -2
  546. data/lib/openai/models/fine_tuning/jobs/fine_tuning_job_checkpoint.rb +14 -7
  547. data/lib/openai/models/fine_tuning/reinforcement_hyperparameters.rb +17 -10
  548. data/lib/openai/models/fine_tuning/reinforcement_method.rb +4 -2
  549. data/lib/openai/models/fine_tuning/supervised_hyperparameters.rb +9 -6
  550. data/lib/openai/models/fine_tuning/supervised_method.rb +2 -1
  551. data/lib/openai/models/function_definition.rb +22 -9
  552. data/lib/openai/models/graders/grader_input_item.rb +11 -11
  553. data/lib/openai/models/graders/label_model_grader.rb +29 -25
  554. data/lib/openai/models/graders/multi_grader.rb +9 -7
  555. data/lib/openai/models/graders/python_grader.rb +8 -4
  556. data/lib/openai/models/graders/score_model_grader.rb +48 -38
  557. data/lib/openai/models/graders/string_check_grader.rb +10 -5
  558. data/lib/openai/models/graders/text_similarity_grader.rb +11 -8
  559. data/lib/openai/models/image.rb +10 -6
  560. data/lib/openai/models/image_create_variation_params.rb +23 -9
  561. data/lib/openai/models/image_edit_completed_event.rb +62 -27
  562. data/lib/openai/models/image_edit_params.rb +169 -72
  563. data/lib/openai/models/image_edit_partial_image_event.rb +49 -18
  564. data/lib/openai/models/image_gen_completed_event.rb +62 -27
  565. data/lib/openai/models/image_gen_partial_image_event.rb +49 -18
  566. data/lib/openai/models/image_generate_params.rb +141 -62
  567. data/lib/openai/models/image_input_reference_param.rb +2 -1
  568. data/lib/openai/models/image_model.rb +4 -0
  569. data/lib/openai/models/images_response.rb +69 -30
  570. data/lib/openai/models/model.rb +10 -5
  571. data/lib/openai/models/moderation.rb +115 -62
  572. data/lib/openai/models/moderation_create_params.rb +16 -13
  573. data/lib/openai/models/moderation_create_response.rb +6 -3
  574. data/lib/openai/models/moderation_image_url_input.rb +6 -3
  575. data/lib/openai/models/moderation_text_input.rb +4 -2
  576. data/lib/openai/models/other_file_chunking_strategy_object.rb +2 -1
  577. data/lib/openai/models/realtime/audio_transcription.rb +29 -10
  578. data/lib/openai/models/realtime/call_accept_params.rb +85 -30
  579. data/lib/openai/models/realtime/call_create_params.rb +4 -2
  580. data/lib/openai/models/realtime/call_refer_params.rb +3 -4
  581. data/lib/openai/models/realtime/call_reject_params.rb +3 -4
  582. data/lib/openai/models/realtime/client_secret_create_params.rb +16 -11
  583. data/lib/openai/models/realtime/client_secret_create_response.rb +6 -6
  584. data/lib/openai/models/realtime/conversation_created_event.rb +10 -5
  585. data/lib/openai/models/realtime/conversation_item_added.rb +9 -7
  586. data/lib/openai/models/realtime/conversation_item_create_event.rb +16 -7
  587. data/lib/openai/models/realtime/conversation_item_created_event.rb +10 -7
  588. data/lib/openai/models/realtime/conversation_item_delete_event.rb +6 -3
  589. data/lib/openai/models/realtime/conversation_item_deleted_event.rb +6 -3
  590. data/lib/openai/models/realtime/conversation_item_done.rb +9 -7
  591. data/lib/openai/models/realtime/conversation_item_input_audio_transcription_completed_event.rb +36 -21
  592. data/lib/openai/models/realtime/conversation_item_input_audio_transcription_delta_event.rb +17 -10
  593. data/lib/openai/models/realtime/conversation_item_input_audio_transcription_failed_event.rb +18 -13
  594. data/lib/openai/models/realtime/conversation_item_input_audio_transcription_segment.rb +18 -9
  595. data/lib/openai/models/realtime/conversation_item_retrieve_event.rb +6 -3
  596. data/lib/openai/models/realtime/conversation_item_truncate_event.rb +13 -8
  597. data/lib/openai/models/realtime/conversation_item_truncated_event.rb +10 -8
  598. data/lib/openai/models/realtime/conversation_item_with_reference.rb +47 -24
  599. data/lib/openai/models/realtime/input_audio_buffer_append_event.rb +7 -6
  600. data/lib/openai/models/realtime/input_audio_buffer_clear_event.rb +4 -2
  601. data/lib/openai/models/realtime/input_audio_buffer_cleared_event.rb +4 -2
  602. data/lib/openai/models/realtime/input_audio_buffer_commit_event.rb +4 -2
  603. data/lib/openai/models/realtime/input_audio_buffer_committed_event.rb +9 -7
  604. data/lib/openai/models/realtime/input_audio_buffer_dtmf_event_received_event.rb +6 -7
  605. data/lib/openai/models/realtime/input_audio_buffer_speech_started_event.rb +11 -7
  606. data/lib/openai/models/realtime/input_audio_buffer_speech_stopped_event.rb +10 -7
  607. data/lib/openai/models/realtime/input_audio_buffer_timeout_triggered.rb +12 -8
  608. data/lib/openai/models/realtime/log_prob_properties.rb +6 -6
  609. data/lib/openai/models/realtime/mcp_list_tools_completed.rb +6 -3
  610. data/lib/openai/models/realtime/mcp_list_tools_failed.rb +6 -3
  611. data/lib/openai/models/realtime/mcp_list_tools_in_progress.rb +6 -3
  612. data/lib/openai/models/realtime/output_audio_buffer_clear_event.rb +5 -3
  613. data/lib/openai/models/realtime/rate_limits_updated_event.rb +14 -11
  614. data/lib/openai/models/realtime/realtime_audio_config_input.rb +38 -12
  615. data/lib/openai/models/realtime/realtime_audio_config_output.rb +18 -6
  616. data/lib/openai/models/realtime/realtime_audio_formats.rb +8 -4
  617. data/lib/openai/models/realtime/realtime_audio_input_turn_detection.rb +61 -25
  618. data/lib/openai/models/realtime/realtime_client_event.rb +1 -1
  619. data/lib/openai/models/realtime/realtime_conversation_item_assistant_message.rb +26 -19
  620. data/lib/openai/models/realtime/realtime_conversation_item_function_call.rb +18 -11
  621. data/lib/openai/models/realtime/realtime_conversation_item_function_call_output.rb +15 -10
  622. data/lib/openai/models/realtime/realtime_conversation_item_system_message.rb +18 -13
  623. data/lib/openai/models/realtime/realtime_conversation_item_user_message.rb +32 -21
  624. data/lib/openai/models/realtime/realtime_error.rb +10 -8
  625. data/lib/openai/models/realtime/realtime_error_event.rb +6 -3
  626. data/lib/openai/models/realtime/realtime_function_tool.rb +9 -7
  627. data/lib/openai/models/realtime/realtime_mcp_approval_request.rb +10 -5
  628. data/lib/openai/models/realtime/realtime_mcp_approval_response.rb +10 -5
  629. data/lib/openai/models/realtime/realtime_mcp_list_tools.rb +16 -12
  630. data/lib/openai/models/realtime/realtime_mcp_tool_call.rb +16 -8
  631. data/lib/openai/models/realtime/realtime_reasoning.rb +3 -4
  632. data/lib/openai/models/realtime/realtime_response.rb +47 -19
  633. data/lib/openai/models/realtime/realtime_response_create_audio_output.rb +11 -7
  634. data/lib/openai/models/realtime/realtime_response_create_mcp_tool.rb +71 -43
  635. data/lib/openai/models/realtime/realtime_response_create_params.rb +56 -18
  636. data/lib/openai/models/realtime/realtime_response_status.rb +16 -8
  637. data/lib/openai/models/realtime/realtime_response_usage.rb +16 -8
  638. data/lib/openai/models/realtime/realtime_response_usage_input_token_details.rb +16 -8
  639. data/lib/openai/models/realtime/realtime_response_usage_output_token_details.rb +4 -2
  640. data/lib/openai/models/realtime/realtime_server_event.rb +30 -18
  641. data/lib/openai/models/realtime/realtime_session.rb +191 -82
  642. data/lib/openai/models/realtime/realtime_session_create_request.rb +86 -32
  643. data/lib/openai/models/realtime/realtime_session_create_response.rb +256 -110
  644. data/lib/openai/models/realtime/realtime_tools_config_union.rb +73 -45
  645. data/lib/openai/models/realtime/realtime_tracing_config.rb +9 -7
  646. data/lib/openai/models/realtime/realtime_transcription_session_audio_input.rb +38 -13
  647. data/lib/openai/models/realtime/realtime_transcription_session_audio_input_turn_detection.rb +61 -25
  648. data/lib/openai/models/realtime/realtime_transcription_session_create_request.rb +10 -8
  649. data/lib/openai/models/realtime/realtime_transcription_session_create_response.rb +28 -22
  650. data/lib/openai/models/realtime/realtime_transcription_session_turn_detection.rb +13 -8
  651. data/lib/openai/models/realtime/realtime_translation_client_secret_create_request.rb +16 -12
  652. data/lib/openai/models/realtime/realtime_translation_client_secret_create_response.rb +7 -7
  653. data/lib/openai/models/realtime/realtime_translation_input_audio_buffer_append_event.rb +6 -3
  654. data/lib/openai/models/realtime/realtime_translation_input_transcript_delta_event.rb +11 -8
  655. data/lib/openai/models/realtime/realtime_translation_output_audio_delta_event.rb +16 -11
  656. data/lib/openai/models/realtime/realtime_translation_output_transcript_delta_event.rb +11 -8
  657. data/lib/openai/models/realtime/realtime_translation_session.rb +25 -25
  658. data/lib/openai/models/realtime/realtime_translation_session_close_event.rb +4 -2
  659. data/lib/openai/models/realtime/realtime_translation_session_closed_event.rb +4 -2
  660. data/lib/openai/models/realtime/realtime_translation_session_create_request.rb +18 -23
  661. data/lib/openai/models/realtime/realtime_translation_session_created_event.rb +6 -3
  662. data/lib/openai/models/realtime/realtime_translation_session_update_event.rb +7 -7
  663. data/lib/openai/models/realtime/realtime_translation_session_update_request.rb +16 -22
  664. data/lib/openai/models/realtime/realtime_translation_session_updated_event.rb +6 -3
  665. data/lib/openai/models/realtime/realtime_truncation_retention_ratio.rb +16 -11
  666. data/lib/openai/models/realtime/response_audio_delta_event.rb +14 -7
  667. data/lib/openai/models/realtime/response_audio_done_event.rb +12 -6
  668. data/lib/openai/models/realtime/response_audio_transcript_delta_event.rb +14 -7
  669. data/lib/openai/models/realtime/response_audio_transcript_done_event.rb +14 -7
  670. data/lib/openai/models/realtime/response_cancel_event.rb +7 -6
  671. data/lib/openai/models/realtime/response_content_part_added_event.rb +22 -11
  672. data/lib/openai/models/realtime/response_content_part_done_event.rb +22 -11
  673. data/lib/openai/models/realtime/response_create_event.rb +6 -3
  674. data/lib/openai/models/realtime/response_created_event.rb +6 -3
  675. data/lib/openai/models/realtime/response_done_event.rb +6 -3
  676. data/lib/openai/models/realtime/response_function_call_arguments_delta_event.rb +14 -11
  677. data/lib/openai/models/realtime/response_function_call_arguments_done_event.rb +16 -12
  678. data/lib/openai/models/realtime/response_mcp_call_arguments_delta.rb +14 -7
  679. data/lib/openai/models/realtime/response_mcp_call_arguments_done.rb +12 -6
  680. data/lib/openai/models/realtime/response_mcp_call_completed.rb +8 -4
  681. data/lib/openai/models/realtime/response_mcp_call_failed.rb +8 -4
  682. data/lib/openai/models/realtime/response_mcp_call_in_progress.rb +8 -4
  683. data/lib/openai/models/realtime/response_output_item_added_event.rb +10 -5
  684. data/lib/openai/models/realtime/response_output_item_done_event.rb +10 -5
  685. data/lib/openai/models/realtime/response_text_delta_event.rb +14 -7
  686. data/lib/openai/models/realtime/response_text_done_event.rb +14 -7
  687. data/lib/openai/models/realtime/session_created_event.rb +6 -3
  688. data/lib/openai/models/realtime/session_update_event.rb +10 -6
  689. data/lib/openai/models/realtime/session_updated_event.rb +6 -3
  690. data/lib/openai/models/realtime/transcription_session_update.rb +45 -26
  691. data/lib/openai/models/realtime/transcription_session_updated_event.rb +42 -28
  692. data/lib/openai/models/reasoning.rb +33 -10
  693. data/lib/openai/models/reasoning_effort.rb +1 -1
  694. data/lib/openai/models/response_format_json_object.rb +2 -1
  695. data/lib/openai/models/response_format_json_schema.rb +21 -14
  696. data/lib/openai/models/response_format_text.rb +2 -1
  697. data/lib/openai/models/response_format_text_grammar.rb +5 -3
  698. data/lib/openai/models/response_format_text_python.rb +3 -2
  699. data/lib/openai/models/responses/apply_patch_tool.rb +4 -3
  700. data/lib/openai/models/responses/compacted_response.rb +12 -8
  701. data/lib/openai/models/responses/computer_action.rb +78 -58
  702. data/lib/openai/models/responses/computer_tool.rb +3 -2
  703. data/lib/openai/models/responses/computer_use_preview_tool.rb +9 -5
  704. data/lib/openai/models/responses/container_auto.rb +10 -5
  705. data/lib/openai/models/responses/container_network_policy_allowlist.rb +6 -3
  706. data/lib/openai/models/responses/container_network_policy_disabled.rb +2 -1
  707. data/lib/openai/models/responses/container_network_policy_domain_secret.rb +6 -3
  708. data/lib/openai/models/responses/container_reference.rb +4 -2
  709. data/lib/openai/models/responses/custom_tool.rb +16 -12
  710. data/lib/openai/models/responses/easy_input_message.rb +13 -7
  711. data/lib/openai/models/responses/file_search_tool.rb +25 -17
  712. data/lib/openai/models/responses/function_shell_tool.rb +4 -3
  713. data/lib/openai/models/responses/function_tool.rb +19 -13
  714. data/lib/openai/models/responses/inline_skill.rb +8 -4
  715. data/lib/openai/models/responses/inline_skill_source.rb +6 -3
  716. data/lib/openai/models/responses/input_item_list_params.rb +13 -7
  717. data/lib/openai/models/responses/input_token_count_params.rb +79 -30
  718. data/lib/openai/models/responses/local_environment.rb +4 -2
  719. data/lib/openai/models/responses/local_skill.rb +6 -3
  720. data/lib/openai/models/responses/namespace_tool.rb +23 -13
  721. data/lib/openai/models/responses/response.rb +336 -152
  722. data/lib/openai/models/responses/response_apply_patch_tool_call.rb +34 -19
  723. data/lib/openai/models/responses/response_apply_patch_tool_call_output.rb +17 -11
  724. data/lib/openai/models/responses/response_audio_delta_event.rb +6 -6
  725. data/lib/openai/models/responses/response_audio_done_event.rb +4 -5
  726. data/lib/openai/models/responses/response_audio_transcript_delta_event.rb +6 -6
  727. data/lib/openai/models/responses/response_audio_transcript_done_event.rb +4 -5
  728. data/lib/openai/models/responses/response_code_interpreter_call_code_delta_event.rb +11 -9
  729. data/lib/openai/models/responses/response_code_interpreter_call_code_done_event.rb +10 -5
  730. data/lib/openai/models/responses/response_code_interpreter_call_completed_event.rb +9 -8
  731. data/lib/openai/models/responses/response_code_interpreter_call_in_progress_event.rb +9 -8
  732. data/lib/openai/models/responses/response_code_interpreter_call_interpreting_event.rb +9 -8
  733. data/lib/openai/models/responses/response_code_interpreter_tool_call.rb +22 -13
  734. data/lib/openai/models/responses/response_compact_params.rb +89 -46
  735. data/lib/openai/models/responses/response_compaction_item.rb +9 -5
  736. data/lib/openai/models/responses/response_compaction_item_param.rb +7 -4
  737. data/lib/openai/models/responses/response_completed_event.rb +6 -6
  738. data/lib/openai/models/responses/response_computer_tool_call.rb +101 -82
  739. data/lib/openai/models/responses/response_computer_tool_call_output_item.rb +22 -14
  740. data/lib/openai/models/responses/response_computer_tool_call_output_screenshot.rb +7 -7
  741. data/lib/openai/models/responses/response_configuration_update_item.rb +9 -8
  742. data/lib/openai/models/responses/response_configuration_update_item_param.rb +9 -8
  743. data/lib/openai/models/responses/response_container_reference.rb +2 -1
  744. data/lib/openai/models/responses/response_content.rb +5 -3
  745. data/lib/openai/models/responses/response_content_part_added_event.rb +16 -11
  746. data/lib/openai/models/responses/response_content_part_done_event.rb +16 -11
  747. data/lib/openai/models/responses/response_conversation_param.rb +2 -1
  748. data/lib/openai/models/responses/response_create_params.rb +334 -130
  749. data/lib/openai/models/responses/response_created_event.rb +6 -6
  750. data/lib/openai/models/responses/response_custom_tool_call.rb +18 -12
  751. data/lib/openai/models/responses/response_custom_tool_call_input_delta_event.rb +10 -5
  752. data/lib/openai/models/responses/response_custom_tool_call_input_done_event.rb +10 -5
  753. data/lib/openai/models/responses/response_custom_tool_call_item.rb +21 -13
  754. data/lib/openai/models/responses/response_custom_tool_call_output.rb +18 -12
  755. data/lib/openai/models/responses/response_custom_tool_call_output_item.rb +16 -10
  756. data/lib/openai/models/responses/response_error.rb +12 -9
  757. data/lib/openai/models/responses/response_error_event.rb +10 -8
  758. data/lib/openai/models/responses/response_failed_event.rb +6 -6
  759. data/lib/openai/models/responses/response_file_search_call_completed_event.rb +8 -8
  760. data/lib/openai/models/responses/response_file_search_call_in_progress_event.rb +8 -8
  761. data/lib/openai/models/responses/response_file_search_call_searching_event.rb +8 -8
  762. data/lib/openai/models/responses/response_file_search_tool_call.rb +26 -19
  763. data/lib/openai/models/responses/response_format_text_config.rb +2 -2
  764. data/lib/openai/models/responses/response_format_text_json_schema_config.rb +19 -11
  765. data/lib/openai/models/responses/response_function_call_arguments_delta_event.rb +10 -9
  766. data/lib/openai/models/responses/response_function_call_arguments_done_event.rb +8 -4
  767. data/lib/openai/models/responses/response_function_call_output_item.rb +1 -1
  768. data/lib/openai/models/responses/response_function_shell_call_output_content.rb +12 -6
  769. data/lib/openai/models/responses/response_function_shell_tool_call.rb +24 -14
  770. data/lib/openai/models/responses/response_function_shell_tool_call_output.rb +36 -25
  771. data/lib/openai/models/responses/response_function_tool_call.rb +22 -14
  772. data/lib/openai/models/responses/response_function_tool_call_item.rb +22 -14
  773. data/lib/openai/models/responses/response_function_tool_call_output_item.rb +27 -17
  774. data/lib/openai/models/responses/response_function_web_search.rb +33 -37
  775. data/lib/openai/models/responses/response_image_gen_call_completed_event.rb +8 -4
  776. data/lib/openai/models/responses/response_image_gen_call_generating_event.rb +8 -4
  777. data/lib/openai/models/responses/response_image_gen_call_in_progress_event.rb +8 -4
  778. data/lib/openai/models/responses/response_image_gen_call_partial_image_event.rb +21 -14
  779. data/lib/openai/models/responses/response_in_progress_event.rb +6 -6
  780. data/lib/openai/models/responses/response_incomplete_event.rb +6 -6
  781. data/lib/openai/models/responses/response_input_audio.rb +6 -9
  782. data/lib/openai/models/responses/response_input_content.rb +1 -1
  783. data/lib/openai/models/responses/response_input_file.rb +22 -11
  784. data/lib/openai/models/responses/response_input_file_content.rb +22 -11
  785. data/lib/openai/models/responses/response_input_image.rb +17 -10
  786. data/lib/openai/models/responses/response_input_image_content.rb +17 -10
  787. data/lib/openai/models/responses/response_input_item.rb +397 -209
  788. data/lib/openai/models/responses/response_input_message_item.rb +12 -8
  789. data/lib/openai/models/responses/response_input_text.rb +10 -7
  790. data/lib/openai/models/responses/response_input_text_content.rb +10 -7
  791. data/lib/openai/models/responses/response_item.rb +205 -93
  792. data/lib/openai/models/responses/response_item_list.rb +10 -5
  793. data/lib/openai/models/responses/response_local_environment.rb +2 -1
  794. data/lib/openai/models/responses/response_mcp_call_arguments_delta_event.rb +11 -9
  795. data/lib/openai/models/responses/response_mcp_call_arguments_done_event.rb +10 -8
  796. data/lib/openai/models/responses/response_mcp_call_completed_event.rb +8 -4
  797. data/lib/openai/models/responses/response_mcp_call_failed_event.rb +8 -4
  798. data/lib/openai/models/responses/response_mcp_call_in_progress_event.rb +8 -4
  799. data/lib/openai/models/responses/response_mcp_list_tools_completed_event.rb +8 -4
  800. data/lib/openai/models/responses/response_mcp_list_tools_failed_event.rb +8 -4
  801. data/lib/openai/models/responses/response_mcp_list_tools_in_progress_event.rb +8 -4
  802. data/lib/openai/models/responses/response_output_audio.rb +6 -6
  803. data/lib/openai/models/responses/response_output_item.rb +217 -98
  804. data/lib/openai/models/responses/response_output_item_added_event.rb +11 -7
  805. data/lib/openai/models/responses/response_output_item_done_event.rb +8 -7
  806. data/lib/openai/models/responses/response_output_message.rb +16 -9
  807. data/lib/openai/models/responses/response_output_refusal.rb +4 -2
  808. data/lib/openai/models/responses/response_output_text.rb +42 -25
  809. data/lib/openai/models/responses/response_output_text_annotation_added_event.rb +50 -29
  810. data/lib/openai/models/responses/response_prompt.rb +10 -8
  811. data/lib/openai/models/responses/response_queued_event.rb +6 -3
  812. data/lib/openai/models/responses/response_reasoning_item.rb +29 -15
  813. data/lib/openai/models/responses/response_reasoning_summary_part_added_event.rb +16 -12
  814. data/lib/openai/models/responses/response_reasoning_summary_part_done_event.rb +19 -13
  815. data/lib/openai/models/responses/response_reasoning_summary_text_delta_event.rb +12 -10
  816. data/lib/openai/models/responses/response_reasoning_summary_text_done_event.rb +12 -10
  817. data/lib/openai/models/responses/response_reasoning_text_delta_event.rb +12 -9
  818. data/lib/openai/models/responses/response_reasoning_text_done_event.rb +12 -9
  819. data/lib/openai/models/responses/response_refusal_delta_event.rb +12 -9
  820. data/lib/openai/models/responses/response_refusal_done_event.rb +12 -9
  821. data/lib/openai/models/responses/response_retrieve_params.rb +12 -6
  822. data/lib/openai/models/responses/response_shell_call_command_added_event.rb +10 -5
  823. data/lib/openai/models/responses/response_shell_call_command_delta_event.rb +12 -6
  824. data/lib/openai/models/responses/response_shell_call_command_done_event.rb +10 -5
  825. data/lib/openai/models/responses/response_shell_call_output_content_delta_event.rb +16 -8
  826. data/lib/openai/models/responses/response_shell_call_output_content_done_event.rb +27 -18
  827. data/lib/openai/models/responses/response_steer_accepted_event.rb +13 -9
  828. data/lib/openai/models/responses/response_steer_event.rb +14 -6
  829. data/lib/openai/models/responses/response_steer_failed_event.rb +45 -22
  830. data/lib/openai/models/responses/response_steer_input.rb +34 -20
  831. data/lib/openai/models/responses/response_steer_input_content.rb +1 -1
  832. data/lib/openai/models/responses/response_steer_pending_event.rb +24 -11
  833. data/lib/openai/models/responses/response_text_config.rb +22 -8
  834. data/lib/openai/models/responses/response_text_delta_event.rb +24 -20
  835. data/lib/openai/models/responses/response_text_done_event.rb +24 -20
  836. data/lib/openai/models/responses/response_tool_search_call.rb +14 -7
  837. data/lib/openai/models/responses/response_tool_search_output_item.rb +14 -7
  838. data/lib/openai/models/responses/response_tool_search_output_item_param.rb +12 -6
  839. data/lib/openai/models/responses/response_usage.rb +18 -12
  840. data/lib/openai/models/responses/response_web_search_call_completed_event.rb +8 -8
  841. data/lib/openai/models/responses/response_web_search_call_in_progress_event.rb +8 -8
  842. data/lib/openai/models/responses/response_web_search_call_searching_event.rb +8 -8
  843. data/lib/openai/models/responses/responses_client_event.rb +353 -140
  844. data/lib/openai/models/responses/responses_server_event.rb +744 -570
  845. data/lib/openai/models/responses/skill_reference.rb +6 -3
  846. data/lib/openai/models/responses/tool.rb +236 -129
  847. data/lib/openai/models/responses/tool_choice_allowed.rb +21 -6
  848. data/lib/openai/models/responses/tool_choice_apply_patch.rb +2 -1
  849. data/lib/openai/models/responses/tool_choice_custom.rb +4 -2
  850. data/lib/openai/models/responses/tool_choice_function.rb +4 -2
  851. data/lib/openai/models/responses/tool_choice_mcp.rb +6 -6
  852. data/lib/openai/models/responses/tool_choice_shell.rb +2 -1
  853. data/lib/openai/models/responses/tool_choice_types.rb +16 -7
  854. data/lib/openai/models/responses/tool_search_tool.rb +8 -4
  855. data/lib/openai/models/responses/web_search_preview_tool.rb +21 -16
  856. data/lib/openai/models/responses/web_search_tool.rb +31 -21
  857. data/lib/openai/models/safety/alert_retrieve_params.rb +2 -1
  858. data/lib/openai/models/safety/safety_alert.rb +6 -5
  859. data/lib/openai/models/skill.rb +14 -7
  860. data/lib/openai/models/skill_create_params.rb +6 -1
  861. data/lib/openai/models/skill_list.rb +10 -5
  862. data/lib/openai/models/skill_list_params.rb +7 -6
  863. data/lib/openai/models/skill_update_params.rb +2 -1
  864. data/lib/openai/models/skills/deleted_skill_version.rb +2 -1
  865. data/lib/openai/models/skills/skill_version.rb +14 -7
  866. data/lib/openai/models/skills/skill_version_list.rb +10 -5
  867. data/lib/openai/models/skills/version_create_params.rb +8 -2
  868. data/lib/openai/models/skills/version_delete_params.rb +2 -1
  869. data/lib/openai/models/skills/version_list_params.rb +6 -3
  870. data/lib/openai/models/skills/version_retrieve_params.rb +2 -1
  871. data/lib/openai/models/skills/versions/content_retrieve_params.rb +2 -1
  872. data/lib/openai/models/static_file_chunking_strategy.rb +6 -4
  873. data/lib/openai/models/static_file_chunking_strategy_object.rb +2 -1
  874. data/lib/openai/models/static_file_chunking_strategy_object_param.rb +2 -1
  875. data/lib/openai/models/upload.rb +21 -13
  876. data/lib/openai/models/upload_complete_params.rb +5 -5
  877. data/lib/openai/models/upload_create_params.rb +23 -13
  878. data/lib/openai/models/uploads/part_create_params.rb +6 -4
  879. data/lib/openai/models/uploads/upload_part.rb +8 -4
  880. data/lib/openai/models/vector_store.rb +42 -23
  881. data/lib/openai/models/vector_store_create_params.rb +28 -16
  882. data/lib/openai/models/vector_store_list_params.rb +16 -7
  883. data/lib/openai/models/vector_store_search_params.rb +13 -9
  884. data/lib/openai/models/vector_store_search_response.rb +18 -11
  885. data/lib/openai/models/vector_store_update_params.rb +16 -11
  886. data/lib/openai/models/vector_stores/file_batch_create_params.rb +47 -23
  887. data/lib/openai/models/vector_stores/file_batch_list_files_params.rb +18 -8
  888. data/lib/openai/models/vector_stores/file_content_response.rb +4 -2
  889. data/lib/openai/models/vector_stores/file_create_params.rb +18 -9
  890. data/lib/openai/models/vector_stores/file_list_params.rb +18 -8
  891. data/lib/openai/models/vector_stores/file_update_params.rb +6 -4
  892. data/lib/openai/models/vector_stores/vector_store_file.rb +35 -16
  893. data/lib/openai/models/vector_stores/vector_store_file_batch.rb +27 -15
  894. data/lib/openai/models/video.rb +27 -16
  895. data/lib/openai/models/video_create_character_params.rb +8 -2
  896. data/lib/openai/models/video_create_character_response.rb +6 -3
  897. data/lib/openai/models/video_create_error.rb +12 -6
  898. data/lib/openai/models/video_create_params.rb +15 -7
  899. data/lib/openai/models/video_delete_response.rb +6 -3
  900. data/lib/openai/models/video_download_content_params.rb +2 -1
  901. data/lib/openai/models/video_edit_params.rb +10 -3
  902. data/lib/openai/models/video_extend_params.rb +12 -6
  903. data/lib/openai/models/video_get_character_response.rb +6 -3
  904. data/lib/openai/models/video_list_params.rb +7 -6
  905. data/lib/openai/models/video_remix_params.rb +2 -1
  906. data/lib/openai/models/webhooks/batch_cancelled_webhook_event.rb +12 -12
  907. data/lib/openai/models/webhooks/batch_completed_webhook_event.rb +12 -12
  908. data/lib/openai/models/webhooks/batch_expired_webhook_event.rb +12 -12
  909. data/lib/openai/models/webhooks/batch_failed_webhook_event.rb +12 -12
  910. data/lib/openai/models/webhooks/eval_run_canceled_webhook_event.rb +12 -12
  911. data/lib/openai/models/webhooks/eval_run_failed_webhook_event.rb +12 -12
  912. data/lib/openai/models/webhooks/eval_run_succeeded_webhook_event.rb +12 -12
  913. data/lib/openai/models/webhooks/fine_tuning_job_cancelled_webhook_event.rb +12 -13
  914. data/lib/openai/models/webhooks/fine_tuning_job_failed_webhook_event.rb +12 -13
  915. data/lib/openai/models/webhooks/fine_tuning_job_succeeded_webhook_event.rb +12 -13
  916. data/lib/openai/models/webhooks/live_call_incoming_webhook_event.rb +26 -23
  917. data/lib/openai/models/webhooks/realtime_call_incoming_webhook_event.rb +30 -24
  918. data/lib/openai/models/webhooks/response_cancelled_webhook_event.rb +12 -13
  919. data/lib/openai/models/webhooks/response_completed_webhook_event.rb +12 -13
  920. data/lib/openai/models/webhooks/response_failed_webhook_event.rb +12 -12
  921. data/lib/openai/models/webhooks/response_incomplete_webhook_event.rb +12 -13
  922. data/lib/openai/models/webhooks/safety_alert_created_webhook_event.rb +10 -5
  923. data/lib/openai/models/webhooks/safety_org_alert_created_webhook_event.rb +10 -5
  924. data/lib/openai/resources/admin/organization/admin_api_keys.rb +13 -9
  925. data/lib/openai/resources/admin/organization/audit_logs.rb +44 -22
  926. data/lib/openai/resources/admin/organization/certificates.rb +26 -17
  927. data/lib/openai/resources/admin/organization/data_retention.rb +2 -1
  928. data/lib/openai/resources/admin/organization/groups/roles.rb +21 -13
  929. data/lib/openai/resources/admin/organization/groups/users.rb +22 -13
  930. data/lib/openai/resources/admin/organization/groups.rb +20 -11
  931. data/lib/openai/resources/admin/organization/invites.rb +21 -13
  932. data/lib/openai/resources/admin/organization/projects/api_keys.rb +24 -12
  933. data/lib/openai/resources/admin/organization/projects/certificates.rb +17 -10
  934. data/lib/openai/resources/admin/organization/projects/data_retention.rb +6 -3
  935. data/lib/openai/resources/admin/organization/projects/groups/roles.rb +29 -18
  936. data/lib/openai/resources/admin/organization/projects/groups.rb +25 -16
  937. data/lib/openai/resources/admin/organization/projects/hosted_tool_permissions.rb +14 -7
  938. data/lib/openai/resources/admin/organization/projects/model_permissions.rb +10 -5
  939. data/lib/openai/resources/admin/organization/projects/rate_limits.rb +32 -20
  940. data/lib/openai/resources/admin/organization/projects/roles.rb +35 -21
  941. data/lib/openai/resources/admin/organization/projects/service_accounts/api_keys.rb +10 -5
  942. data/lib/openai/resources/admin/organization/projects/service_accounts.rb +40 -19
  943. data/lib/openai/resources/admin/organization/projects/spend_alerts.rb +42 -24
  944. data/lib/openai/resources/admin/organization/projects/spend_limit.rb +13 -10
  945. data/lib/openai/resources/admin/organization/projects/users/roles.rb +29 -18
  946. data/lib/openai/resources/admin/organization/projects/users.rb +32 -18
  947. data/lib/openai/resources/admin/organization/projects.rb +40 -22
  948. data/lib/openai/resources/admin/organization/roles.rb +25 -15
  949. data/lib/openai/resources/admin/organization/spend_alerts.rb +32 -18
  950. data/lib/openai/resources/admin/organization/spend_limit.rb +7 -6
  951. data/lib/openai/resources/admin/organization/usage.rb +296 -145
  952. data/lib/openai/resources/admin/organization/users/roles.rb +21 -13
  953. data/lib/openai/resources/admin/organization/users.rb +24 -13
  954. data/lib/openai/resources/audio/speech.rb +25 -10
  955. data/lib/openai/resources/audio/transcriptions.rb +172 -56
  956. data/lib/openai/resources/audio/translations.rb +26 -8
  957. data/lib/openai/resources/batches.rb +43 -15
  958. data/lib/openai/resources/beta/assistants.rb +177 -59
  959. data/lib/openai/resources/beta/chatkit/sessions.rb +14 -9
  960. data/lib/openai/resources/beta/chatkit/threads.rb +29 -18
  961. data/lib/openai/resources/beta/responses/input_items.rb +17 -9
  962. data/lib/openai/resources/beta/responses/input_tokens.rb +65 -28
  963. data/lib/openai/resources/beta/responses.rb +640 -195
  964. data/lib/openai/resources/beta/threads/messages.rb +65 -30
  965. data/lib/openai/resources/beta/threads/runs/steps.rb +50 -23
  966. data/lib/openai/resources/beta/threads/runs.rb +309 -109
  967. data/lib/openai/resources/beta/threads.rb +240 -78
  968. data/lib/openai/resources/chat/completions/messages.rb +9 -7
  969. data/lib/openai/resources/chat/completions.rb +594 -169
  970. data/lib/openai/resources/completions.rb +212 -40
  971. data/lib/openai/resources/containers/files.rb +19 -11
  972. data/lib/openai/resources/containers.rb +27 -14
  973. data/lib/openai/resources/content_provenance_checks.rb +7 -2
  974. data/lib/openai/resources/conversations/items.rb +58 -26
  975. data/lib/openai/resources/conversations.rb +23 -12
  976. data/lib/openai/resources/embeddings.rb +26 -8
  977. data/lib/openai/resources/evals/runs/output_items.rb +21 -12
  978. data/lib/openai/resources/evals/runs.rb +37 -21
  979. data/lib/openai/resources/evals.rb +43 -23
  980. data/lib/openai/resources/files.rb +42 -21
  981. data/lib/openai/resources/fine_tuning/alpha/graders.rb +15 -7
  982. data/lib/openai/resources/fine_tuning/checkpoints/permissions.rb +36 -34
  983. data/lib/openai/resources/fine_tuning/jobs/checkpoints.rb +6 -6
  984. data/lib/openai/resources/fine_tuning/jobs.rb +84 -42
  985. data/lib/openai/resources/images.rb +423 -131
  986. data/lib/openai/resources/models.rb +4 -2
  987. data/lib/openai/resources/moderations.rb +10 -6
  988. data/lib/openai/resources/realtime/calls.rb +114 -48
  989. data/lib/openai/resources/realtime/client_secrets.rb +9 -6
  990. data/lib/openai/resources/responses/input_items.rb +15 -8
  991. data/lib/openai/resources/responses/input_tokens.rb +60 -26
  992. data/lib/openai/resources/responses.rb +601 -262
  993. data/lib/openai/resources/safety/alerts.rb +2 -1
  994. data/lib/openai/resources/skills/content.rb +2 -1
  995. data/lib/openai/resources/skills/versions/content.rb +4 -2
  996. data/lib/openai/resources/skills/versions.rb +26 -11
  997. data/lib/openai/resources/skills.rb +21 -11
  998. data/lib/openai/resources/uploads/parts.rb +13 -9
  999. data/lib/openai/resources/uploads.rb +35 -27
  1000. data/lib/openai/resources/vector_stores/file_batches.rb +60 -26
  1001. data/lib/openai/resources/vector_stores/files.rb +62 -31
  1002. data/lib/openai/resources/vector_stores.rb +67 -34
  1003. data/lib/openai/resources/videos.rb +64 -31
  1004. data/lib/openai/version.rb +1 -1
  1005. data/local-audio.md +146 -0
  1006. data/rbi/openai/helpers/local_audio/interface.rbi +110 -0
  1007. data/rbi/openai/helpers/realtime/connection.rbi +18 -2
  1008. data/rbi/openai/helpers/realtime/extensions.rbi +8 -0
  1009. data/rbi/openai/helpers/realtime/recovery.rbi +27 -0
  1010. data/rbi/openai/models/admin/organization/audit_log_list_params.rbi +2 -2
  1011. data/rbi/openai/models/admin/organization/project_create_params.rbi +4 -4
  1012. data/rbi/openai/models/admin/organization/projects/project_api_key.rbi +13 -1
  1013. data/rbi/openai/models/admin/organization/projects/service_account_create_params.rbi +18 -0
  1014. data/rbi/openai/models/admin/organization/projects/service_account_create_response.rbi +19 -1
  1015. data/rbi/openai/models/audio/speech_create_params.rbi +9 -6
  1016. data/rbi/openai/models/audio/transcription_create_params.rbi +2 -2
  1017. data/rbi/openai/models/audio/transcription_stream_event.rbi +1 -1
  1018. data/rbi/openai/models/audio/transcription_text_delta_event.rbi +3 -3
  1019. data/rbi/openai/models/audio/transcription_text_done_event.rbi +3 -3
  1020. data/rbi/openai/models/audio/transcription_text_segment_event.rbi +1 -1
  1021. data/rbi/openai/models/audio/translation_create_params.rbi +2 -2
  1022. data/rbi/openai/models/batch.rbi +4 -4
  1023. data/rbi/openai/models/batch_create_params.rbi +6 -4
  1024. data/rbi/openai/models/batch_usage.rbi +2 -2
  1025. data/rbi/openai/models/beta/assistant.rbi +24 -24
  1026. data/rbi/openai/models/beta/assistant_create_params.rbi +40 -40
  1027. data/rbi/openai/models/beta/assistant_response_format_option.rbi +4 -4
  1028. data/rbi/openai/models/beta/assistant_stream_event.rbi +63 -65
  1029. data/rbi/openai/models/beta/assistant_update_params.rbi +30 -30
  1030. data/rbi/openai/models/beta/beta_computer_tool.rbi +1 -1
  1031. data/rbi/openai/models/beta/beta_computer_use_preview_tool.rbi +1 -1
  1032. data/rbi/openai/models/beta/beta_custom_tool.rbi +1 -1
  1033. data/rbi/openai/models/beta/beta_file_search_tool.rbi +1 -1
  1034. data/rbi/openai/models/beta/beta_function_tool.rbi +1 -1
  1035. data/rbi/openai/models/beta/beta_response.rbi +72 -64
  1036. data/rbi/openai/models/beta/beta_response_compaction_item.rbi +1 -1
  1037. data/rbi/openai/models/beta/beta_response_compaction_item_param.rbi +1 -1
  1038. data/rbi/openai/models/beta/beta_response_computer_tool_call.rbi +1 -1
  1039. data/rbi/openai/models/beta/beta_response_file_search_tool_call.rbi +1 -1
  1040. data/rbi/openai/models/beta/beta_response_format_text_config.rbi +1 -1
  1041. data/rbi/openai/models/beta/beta_response_format_text_json_schema_config.rbi +3 -3
  1042. data/rbi/openai/models/beta/beta_response_function_tool_call.rbi +1 -1
  1043. data/rbi/openai/models/beta/beta_response_function_tool_call_item.rbi +1 -1
  1044. data/rbi/openai/models/beta/beta_response_function_web_search.rbi +2 -2
  1045. data/rbi/openai/models/beta/beta_response_input_image.rbi +1 -1
  1046. data/rbi/openai/models/beta/beta_response_input_image_content.rbi +1 -1
  1047. data/rbi/openai/models/beta/beta_response_input_item.rbi +86 -1
  1048. data/rbi/openai/models/beta/beta_response_item.rbi +78 -1
  1049. data/rbi/openai/models/beta/beta_response_output_item.rbi +84 -1
  1050. data/rbi/openai/models/beta/beta_response_prompt.rbi +1 -1
  1051. data/rbi/openai/models/beta/beta_response_reasoning_item.rbi +1 -1
  1052. data/rbi/openai/models/beta/beta_response_text_config.rbi +4 -4
  1053. data/rbi/openai/models/beta/beta_response_usage.rbi +2 -2
  1054. data/rbi/openai/models/beta/beta_responses_client_event.rbi +98 -84
  1055. data/rbi/openai/models/beta/beta_tool.rbi +94 -55
  1056. data/rbi/openai/models/beta/beta_tool_choice_types.rbi +4 -4
  1057. data/rbi/openai/models/beta/beta_web_search_preview_tool.rbi +1 -1
  1058. data/rbi/openai/models/beta/beta_web_search_tool.rbi +1 -1
  1059. data/rbi/openai/models/beta/file_search_tool.rbi +5 -5
  1060. data/rbi/openai/models/beta/message_stream_event.rbi +16 -16
  1061. data/rbi/openai/models/beta/response_compact_params.rbi +44 -44
  1062. data/rbi/openai/models/beta/response_create_params.rbi +96 -82
  1063. data/rbi/openai/models/beta/responses/input_token_count_params.rbi +20 -20
  1064. data/rbi/openai/models/beta/run_step_stream_event.rbi +14 -16
  1065. data/rbi/openai/models/beta/run_stream_event.rbi +31 -31
  1066. data/rbi/openai/models/beta/thread.rbi +9 -9
  1067. data/rbi/openai/models/beta/thread_create_and_run_params.rbi +61 -56
  1068. data/rbi/openai/models/beta/thread_create_params.rbi +24 -22
  1069. data/rbi/openai/models/beta/thread_stream_event.rbi +3 -3
  1070. data/rbi/openai/models/beta/thread_update_params.rbi +8 -8
  1071. data/rbi/openai/models/beta/threads/image_file.rbi +6 -6
  1072. data/rbi/openai/models/beta/threads/image_file_content_block.rbi +3 -2
  1073. data/rbi/openai/models/beta/threads/image_file_delta.rbi +6 -6
  1074. data/rbi/openai/models/beta/threads/image_file_delta_block.rbi +3 -2
  1075. data/rbi/openai/models/beta/threads/message.rbi +9 -9
  1076. data/rbi/openai/models/beta/threads/message_content.rbi +3 -2
  1077. data/rbi/openai/models/beta/threads/message_content_delta.rbi +3 -2
  1078. data/rbi/openai/models/beta/threads/message_content_part_param.rbi +3 -2
  1079. data/rbi/openai/models/beta/threads/required_action_function_tool_call.rbi +2 -2
  1080. data/rbi/openai/models/beta/threads/run.rbi +33 -31
  1081. data/rbi/openai/models/beta/threads/run_create_params.rbi +37 -34
  1082. data/rbi/openai/models/beta/threads/runs/code_interpreter_output_image.rbi +4 -4
  1083. data/rbi/openai/models/beta/threads/runs/code_interpreter_tool_call.rbi +4 -4
  1084. data/rbi/openai/models/beta/threads/runs/function_tool_call.rbi +2 -4
  1085. data/rbi/openai/models/beta/threads/runs/function_tool_call_delta.rbi +2 -4
  1086. data/rbi/openai/models/beta/threads/runs/run_step.rbi +12 -10
  1087. data/rbi/openai/models/beta/threads/runs/step_list_params.rbi +2 -2
  1088. data/rbi/openai/models/beta/threads/runs/step_retrieve_params.rbi +2 -2
  1089. data/rbi/openai/models/chat/chat_completion.rbi +27 -21
  1090. data/rbi/openai/models/chat/chat_completion_assistant_message_param.rbi +4 -5
  1091. data/rbi/openai/models/chat/chat_completion_audio.rbi +1 -1
  1092. data/rbi/openai/models/chat/chat_completion_audio_param.rbi +1 -1
  1093. data/rbi/openai/models/chat/chat_completion_chunk.rbi +28 -22
  1094. data/rbi/openai/models/chat/chat_completion_content_part.rbi +3 -4
  1095. data/rbi/openai/models/chat/chat_completion_content_part_image.rbi +5 -4
  1096. data/rbi/openai/models/chat/chat_completion_content_part_input_audio.rbi +1 -1
  1097. data/rbi/openai/models/chat/chat_completion_content_part_text.rbi +1 -2
  1098. data/rbi/openai/models/chat/chat_completion_message.rbi +4 -4
  1099. data/rbi/openai/models/chat/chat_completion_store_message.rbi +3 -4
  1100. data/rbi/openai/models/chat/completion_create_params.rbi +95 -85
  1101. data/rbi/openai/models/completion_create_params.rbi +34 -32
  1102. data/rbi/openai/models/conversations/conversation_item.rbi +89 -2
  1103. data/rbi/openai/models/conversations/item_create_params.rbi +2 -2
  1104. data/rbi/openai/models/conversations/item_retrieve_params.rbi +2 -2
  1105. data/rbi/openai/models/embedding.rbi +2 -2
  1106. data/rbi/openai/models/embedding_create_params.rbi +14 -14
  1107. data/rbi/openai/models/evals/create_eval_completions_run_data_source.rbi +5 -5
  1108. data/rbi/openai/models/evals/run_cancel_response.rbi +22 -20
  1109. data/rbi/openai/models/evals/run_create_params.rbi +22 -20
  1110. data/rbi/openai/models/evals/run_create_response.rbi +22 -20
  1111. data/rbi/openai/models/evals/run_list_response.rbi +22 -20
  1112. data/rbi/openai/models/evals/run_retrieve_response.rbi +22 -20
  1113. data/rbi/openai/models/fine_tuning/alpha/grader_run_params.rbi +10 -8
  1114. data/rbi/openai/models/fine_tuning/fine_tuning_job.rbi +6 -6
  1115. data/rbi/openai/models/fine_tuning/job_create_params.rbi +17 -15
  1116. data/rbi/openai/models/function_definition.rbi +6 -6
  1117. data/rbi/openai/models/graders/score_model_grader.rbi +2 -2
  1118. data/rbi/openai/models/image_create_variation_params.rbi +2 -2
  1119. data/rbi/openai/models/image_edit_completed_event.rbi +20 -9
  1120. data/rbi/openai/models/image_edit_params.rbi +91 -62
  1121. data/rbi/openai/models/image_edit_partial_image_event.rbi +20 -9
  1122. data/rbi/openai/models/image_gen_completed_event.rbi +20 -9
  1123. data/rbi/openai/models/image_gen_partial_image_event.rbi +20 -9
  1124. data/rbi/openai/models/image_generate_params.rbi +73 -50
  1125. data/rbi/openai/models/image_model.rbi +4 -0
  1126. data/rbi/openai/models/images_response.rbi +27 -16
  1127. data/rbi/openai/models/moderation_create_params.rbi +9 -9
  1128. data/rbi/openai/models/realtime/audio_transcription.rbi +2 -2
  1129. data/rbi/openai/models/realtime/call_accept_params.rbi +1 -1
  1130. data/rbi/openai/models/realtime/output_audio_buffer_clear_event.rbi +1 -1
  1131. data/rbi/openai/models/realtime/realtime_audio_config_input.rbi +2 -2
  1132. data/rbi/openai/models/realtime/realtime_response_create_mcp_tool.rbi +4 -4
  1133. data/rbi/openai/models/realtime/realtime_response_create_params.rbi +3 -3
  1134. data/rbi/openai/models/realtime/realtime_server_event.rbi +3 -3
  1135. data/rbi/openai/models/realtime/realtime_session.rbi +4 -4
  1136. data/rbi/openai/models/realtime/realtime_session_create_request.rbi +2 -2
  1137. data/rbi/openai/models/realtime/realtime_session_create_response.rbi +7 -7
  1138. data/rbi/openai/models/realtime/realtime_tools_config_union.rbi +5 -5
  1139. data/rbi/openai/models/realtime/realtime_transcription_session_audio_input.rbi +2 -2
  1140. data/rbi/openai/models/reasoning.rbi +3 -3
  1141. data/rbi/openai/models/reasoning_effort.rbi +1 -1
  1142. data/rbi/openai/models/response_format_json_schema.rbi +3 -3
  1143. data/rbi/openai/models/response_format_text_grammar.rbi +1 -1
  1144. data/rbi/openai/models/response_format_text_python.rbi +1 -1
  1145. data/rbi/openai/models/responses/computer_tool.rbi +1 -1
  1146. data/rbi/openai/models/responses/computer_use_preview_tool.rbi +1 -1
  1147. data/rbi/openai/models/responses/custom_tool.rbi +1 -1
  1148. data/rbi/openai/models/responses/file_search_tool.rbi +1 -1
  1149. data/rbi/openai/models/responses/function_tool.rbi +1 -1
  1150. data/rbi/openai/models/responses/input_token_count_params.rbi +16 -16
  1151. data/rbi/openai/models/responses/response.rbi +66 -58
  1152. data/rbi/openai/models/responses/response_compact_params.rbi +44 -44
  1153. data/rbi/openai/models/responses/response_compaction_item.rbi +1 -1
  1154. data/rbi/openai/models/responses/response_compaction_item_param.rbi +1 -1
  1155. data/rbi/openai/models/responses/response_computer_tool_call.rbi +1 -1
  1156. data/rbi/openai/models/responses/response_create_params.rbi +90 -76
  1157. data/rbi/openai/models/responses/response_file_search_tool_call.rbi +1 -1
  1158. data/rbi/openai/models/responses/response_format_text_config.rbi +1 -1
  1159. data/rbi/openai/models/responses/response_format_text_json_schema_config.rbi +3 -3
  1160. data/rbi/openai/models/responses/response_function_tool_call.rbi +1 -1
  1161. data/rbi/openai/models/responses/response_function_tool_call_item.rbi +1 -1
  1162. data/rbi/openai/models/responses/response_function_web_search.rbi +2 -2
  1163. data/rbi/openai/models/responses/response_input_image.rbi +1 -1
  1164. data/rbi/openai/models/responses/response_input_image_content.rbi +1 -1
  1165. data/rbi/openai/models/responses/response_input_item.rbi +88 -1
  1166. data/rbi/openai/models/responses/response_item.rbi +80 -1
  1167. data/rbi/openai/models/responses/response_output_item.rbi +84 -1
  1168. data/rbi/openai/models/responses/response_prompt.rbi +1 -1
  1169. data/rbi/openai/models/responses/response_reasoning_item.rbi +1 -1
  1170. data/rbi/openai/models/responses/response_text_config.rbi +4 -4
  1171. data/rbi/openai/models/responses/response_usage.rbi +2 -2
  1172. data/rbi/openai/models/responses/responses_client_event.rbi +92 -78
  1173. data/rbi/openai/models/responses/tool.rbi +94 -55
  1174. data/rbi/openai/models/responses/tool_choice_types.rbi +4 -4
  1175. data/rbi/openai/models/responses/web_search_preview_tool.rbi +1 -1
  1176. data/rbi/openai/models/responses/web_search_tool.rbi +1 -1
  1177. data/rbi/openai/models/upload.rbi +2 -2
  1178. data/rbi/openai/models/upload_create_params.rbi +2 -2
  1179. data/rbi/openai/models/vector_store_create_params.rbi +6 -6
  1180. data/rbi/openai/models/vector_stores/file_batch_create_params.rbi +18 -18
  1181. data/rbi/openai/models/vector_stores/file_create_params.rbi +6 -6
  1182. data/rbi/openai/models/vector_stores/vector_store_file.rbi +4 -4
  1183. data/rbi/openai/models/vector_stores/vector_store_file_batch.rbi +4 -4
  1184. data/rbi/openai/models/webhooks/live_call_incoming_webhook_event.rbi +10 -6
  1185. data/rbi/openai/models/webhooks/realtime_call_incoming_webhook_event.rbi +14 -6
  1186. data/rbi/openai/resources/admin/organization/audit_logs.rbi +1 -1
  1187. data/rbi/openai/resources/admin/organization/projects/service_accounts.rbi +7 -0
  1188. data/rbi/openai/resources/admin/organization/projects.rbi +2 -2
  1189. data/rbi/openai/resources/audio/speech.rbi +3 -2
  1190. data/rbi/openai/resources/audio/transcriptions.rbi +2 -2
  1191. data/rbi/openai/resources/audio/translations.rbi +1 -1
  1192. data/rbi/openai/resources/batches.rbi +3 -2
  1193. data/rbi/openai/resources/beta/assistants.rbi +18 -18
  1194. data/rbi/openai/resources/beta/responses/input_tokens.rbi +6 -6
  1195. data/rbi/openai/resources/beta/responses.rbi +112 -102
  1196. data/rbi/openai/resources/beta/threads/messages.rbi +9 -6
  1197. data/rbi/openai/resources/beta/threads/runs/steps.rbi +2 -2
  1198. data/rbi/openai/resources/beta/threads/runs.rbi +37 -33
  1199. data/rbi/openai/resources/beta/threads.rbi +27 -24
  1200. data/rbi/openai/resources/chat/completions.rbi +90 -82
  1201. data/rbi/openai/resources/completions.rbi +30 -28
  1202. data/rbi/openai/resources/content_provenance_checks.rbi +1 -1
  1203. data/rbi/openai/resources/conversations/items.rbi +2 -2
  1204. data/rbi/openai/resources/embeddings.rbi +5 -5
  1205. data/rbi/openai/resources/evals.rbi +1 -1
  1206. data/rbi/openai/resources/files.rbi +5 -5
  1207. data/rbi/openai/resources/fine_tuning/alpha/graders.rbi +5 -4
  1208. data/rbi/openai/resources/fine_tuning/checkpoints/permissions.rbi +8 -4
  1209. data/rbi/openai/resources/fine_tuning/jobs.rbi +10 -9
  1210. data/rbi/openai/resources/images.rbi +113 -83
  1211. data/rbi/openai/resources/moderations.rbi +5 -4
  1212. data/rbi/openai/resources/realtime/calls.rbi +6 -6
  1213. data/rbi/openai/resources/realtime/client_secrets.rbi +1 -1
  1214. data/rbi/openai/resources/responses/input_tokens.rbi +6 -6
  1215. data/rbi/openai/resources/responses.rbi +112 -100
  1216. data/rbi/openai/resources/uploads/parts.rbi +5 -4
  1217. data/rbi/openai/resources/uploads.rbi +10 -10
  1218. data/rbi/openai/resources/vector_stores/file_batches.rbi +6 -6
  1219. data/rbi/openai/resources/vector_stores/files.rbi +6 -6
  1220. data/rbi/openai/resources/vector_stores.rbi +3 -3
  1221. data/realtime.md +101 -0
  1222. data/responses-websocket.md +182 -0
  1223. data/sig/openai/helpers/local_audio/interface.rbs +62 -0
  1224. data/sig/openai/helpers/realtime/connection.rbs +9 -1
  1225. data/sig/openai/helpers/realtime/extensions.rbs +4 -0
  1226. data/sig/openai/helpers/realtime/recovery.rbs +19 -0
  1227. data/sig/openai/models/admin/organization/projects/project_api_key.rbs +7 -2
  1228. data/sig/openai/models/admin/organization/projects/service_account_create_params.rbs +5 -0
  1229. data/sig/openai/models/admin/organization/projects/service_account_create_response.rbs +7 -2
  1230. data/sig/openai/models/beta/beta_response_input_item.rbs +39 -2
  1231. data/sig/openai/models/beta/beta_response_item.rbs +39 -2
  1232. data/sig/openai/models/beta/beta_response_output_item.rbs +39 -2
  1233. data/sig/openai/models/beta/beta_tool.rbs +11 -1
  1234. data/sig/openai/models/conversations/conversation_item.rbs +39 -2
  1235. data/sig/openai/models/image_edit_completed_event.rbs +11 -4
  1236. data/sig/openai/models/image_edit_params.rbs +3 -1
  1237. data/sig/openai/models/image_edit_partial_image_event.rbs +11 -4
  1238. data/sig/openai/models/image_gen_completed_event.rbs +11 -4
  1239. data/sig/openai/models/image_gen_partial_image_event.rbs +11 -4
  1240. data/sig/openai/models/image_generate_params.rbs +4 -1
  1241. data/sig/openai/models/image_model.rbs +8 -0
  1242. data/sig/openai/models/images_response.rbs +10 -4
  1243. data/sig/openai/models/responses/response_input_item.rbs +39 -2
  1244. data/sig/openai/models/responses/response_item.rbs +39 -2
  1245. data/sig/openai/models/responses/response_output_item.rbs +39 -2
  1246. data/sig/openai/models/responses/tool.rbs +11 -1
  1247. data/sig/openai/resources/admin/organization/projects/service_accounts.rbs +1 -0
  1248. metadata +15 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e2fc3cef6cd029385cb528885096cbf0640df90c238752af2ef76186c578578
4
- data.tar.gz: 5ab2eac3ec679b9d43a141ec43ef70b294ed09a5e4f72f9a3c272cd407cbe3dc
3
+ metadata.gz: e3037cf7080b7ad4d7e5b5557a78085361e98d8e6ebb6a8a1533b52503c49afc
4
+ data.tar.gz: f721107d3824baebd4468eff198b56edd917f069872594cf7c0d9b5c1a3068a4
5
5
  SHA512:
6
- metadata.gz: e80dd1fe954a867a454f08d6349689d71f731f1908add8fc5d48e25605a431202cd6f9366e0c30070ae5273195b37116e33a606f6a26de89957d23bea6dd855b
7
- data.tar.gz: b87d683d9a0cbc8b59fcb6ddc31b9b1a1737455d7353bf7466736a375955018946f18ba753c79362f94fec9ef9b52f70dd90405cfd94d600e407aaf0b4d64ad5
6
+ metadata.gz: d16655ac3eaca44f64def8854020c42d4accb637dd9675225f08cc39fd92f1b201bbeed637ee9c122b893788f75ac0f8ff861e6c0ece50946ae0b44458cabe62
7
+ data.tar.gz: eb1c6cf77fd1b47872fbc15acc25a39425cf7205479388c63696ca7e73b4902058ca848b27e0fad918e58a35579d1bd5dec265847824e807364eb6d68e43a0fd
data/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.88.0](https://github.com/openai/openai-ruby/compare/v0.87.0...v0.88.0) (2026-09-09)
4
+
5
+
6
+ ### Features
7
+
8
+ * **api:** Add service account key expiration support ([#689](https://github.com/openai/openai-ruby/issues/689)) ([b9adc2a](https://github.com/openai/openai-ruby/commit/b9adc2ac754715e737c5fb9f457d17fd036d40d2))
9
+
10
+ ## [0.87.0](https://github.com/openai/openai-ruby/compare/v0.86.0...v0.87.0) (2026-09-08)
11
+
12
+
13
+ ### Features
14
+
15
+ * add FFmpeg local recording and playback helpers ([#685](https://github.com/openai/openai-ruby/issues/685)) ([4d05097](https://github.com/openai/openai-ruby/commit/4d05097f10408452aaf0efa48c499bada62846bb))
16
+ * add opt-in Realtime reconnect and send queue ([#681](https://github.com/openai/openai-ruby/issues/681)) ([21b8a70](https://github.com/openai/openai-ruby/commit/21b8a70d48e2623e32aa01f95503adcf3fa2ba75))
17
+ * **api:** add GPT Image 2.5 models and image options ([#688](https://github.com/openai/openai-ruby/issues/688)) ([02f4724](https://github.com/openai/openai-ruby/commit/02f4724eb69eebe8c46b8d51010bee364e1197ad))
18
+
3
19
  ## [0.86.0](https://github.com/openai/openai-ruby/compare/v0.85.0...v0.86.0) (2026-09-08)
4
20
 
5
21
 
data/README.md CHANGED
@@ -15,7 +15,7 @@ To use this gem, install via Bundler by adding the following to your application
15
15
  <!-- x-release-please-start-version -->
16
16
 
17
17
  ```ruby
18
- gem "openai", "~> 0.86.0"
18
+ gem "openai", "~> 0.88.0"
19
19
  ```
20
20
 
21
21
  <!-- x-release-please-end -->
@@ -50,6 +50,11 @@ stream.each do |event|
50
50
  end
51
51
  ```
52
52
 
53
+ ### Local audio
54
+
55
+ Record a clip and play generated speech with optional FFmpeg/FFplay helpers.
56
+ See the [local audio guide](local-audio.md) for setup, device selection and examples.
57
+
53
58
  ### Realtime WebSockets
54
59
 
55
60
  The SDK supports block-scoped, typed Realtime WebSocket sessions for
@@ -112,6 +117,10 @@ does not automatically reconnect or replay an ambiguous write. When the server
112
117
  closes a connection, open a new connection and continue with
113
118
  `previous_response_id` when the response was stored.
114
119
 
120
+ See the [Responses WebSocket guide](responses-websocket.md) and
121
+ [runnable workflows](examples/responses/websocket_workflows.rb) for tool turns,
122
+ multiplexing, stored continuation, stateless replay, and operation deadlines.
123
+
115
124
  ### Pagination
116
125
 
117
126
  List methods in the OpenAI API are paginated.
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+ # typed: strict
4
+
5
+ require "openai"
6
+ require "openai/helpers/local_audio"
7
+
8
+ # Running this example explicitly records five seconds from the selected local
9
+ # microphone and sends that recording to OpenAI. FFmpeg and FFplay are required.
10
+ TRANSCRIPTION_MODEL = "gpt-transcribe"
11
+ SPEECH_MODEL = "gpt-4o-mini-tts"
12
+ VOICE = "marin"
13
+
14
+ client = OpenAI::Client.new
15
+ clip = OpenAI::LocalAudio.record(duration: 5, timeout: 10)
16
+ transcription = client.audio.transcriptions.create(model: TRANSCRIPTION_MODEL, file: clip)
17
+ puts(transcription.text)
18
+ speech = client.audio.speech.create(model: SPEECH_MODEL, voice: VOICE, input: "Recording complete.")
19
+ OpenAI::LocalAudio.play(speech, timeout: 30)
@@ -0,0 +1,159 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "async"
5
+
6
+ require_relative "../../lib/openai"
7
+
8
+ module OpenAI
9
+ module Examples
10
+ module ResponsesWebSocketWorkflows
11
+ module_function
12
+
13
+ # One reader drains all requested lanes. This example fails the entire
14
+ # operation on an error; applications can instead isolate lane-scoped errors.
15
+ def completed_responses(connection, lanes: [nil])
16
+ pending = lanes.dup
17
+ responses = {}
18
+ connection.each do |event|
19
+ case event.type.to_s
20
+ when "response.completed"
21
+ next unless pending.include?(event.stream_id)
22
+
23
+ responses[event.stream_id] = event.response
24
+ pending.delete(event.stream_id)
25
+ break if pending.empty?
26
+ when "response.failed", "response.incomplete", "error"
27
+ raise "Responses WebSocket operation did not complete."
28
+ end
29
+ end
30
+
31
+ raise "Responses WebSocket closed with unfinished work." unless pending.empty?
32
+
33
+ responses
34
+ end
35
+
36
+ def tools(client:, model:)
37
+ client.responses.connect do |connection|
38
+ connection.response.create(
39
+ model: model,
40
+ input: "What day will my example delivery arrive?",
41
+ tools: [
42
+ {
43
+ type: :function,
44
+ name: "get_delivery_day",
45
+ description: "Return the day of the example delivery.",
46
+ parameters: {type: :object, properties: {}, required: [], additionalProperties: false},
47
+ strict: true
48
+ }
49
+ ],
50
+ tool_choice: {type: :function, name: "get_delivery_day"},
51
+ parallel_tool_calls: false,
52
+ store: false
53
+ )
54
+ first = completed_responses(connection).fetch(nil)
55
+ calls = first.output.select { |item| item.type.to_s == "function_call" }
56
+ unless calls.length == 1 && calls.first.name == "get_delivery_day"
57
+ raise "Expected the example delivery tool call."
58
+ end
59
+
60
+ # Execute only this application's known tool. Never eval model output.
61
+ connection.response.create(
62
+ model: model,
63
+ previous_response_id: first.id,
64
+ input: [{type: :function_call_output, call_id: calls.first.call_id, output: "Tuesday"}],
65
+ store: false
66
+ )
67
+ completed_responses(connection)
68
+ end
69
+ end
70
+
71
+ def multiplex(client:, model:)
72
+ client.responses.connect do |connection|
73
+ %w[planner critic].each do |lane|
74
+ connection.response.create(
75
+ model: model,
76
+ input: "Say hello as the #{lane}.",
77
+ stream_id: lane,
78
+ store: false
79
+ )
80
+ end
81
+
82
+ completed_responses(connection, lanes: %w[planner critic])
83
+ end
84
+ end
85
+
86
+ # Deliberately rotate a healthy connection after a completed turn. This does
87
+ # not retry a failed write or assume an unfinished response was accepted.
88
+ def reconnect(client:, model:, store:)
89
+ input = [{role: :user, content: "Remember the example delivery day: Tuesday."}]
90
+ first = client.responses.connect do |connection|
91
+ connection.response.create(
92
+ model: model,
93
+ input: input,
94
+ store: store,
95
+ include: ["reasoning.encrypted_content"]
96
+ )
97
+ completed_responses(connection).fetch(nil)
98
+ end
99
+
100
+ follow_up = {role: :user, content: "What is the example delivery day?"}
101
+ client.responses.connect do |connection|
102
+ if store
103
+ connection.response.create(
104
+ model: model,
105
+ input: [follow_up],
106
+ previous_response_id: first.id,
107
+ store: true
108
+ )
109
+ else
110
+ # Preserve every output item, including encrypted reasoning. The new
111
+ # connection cannot use the old connection's store=false cache.
112
+ connection.response.create(
113
+ model: model,
114
+ input: input + first.output + [follow_up],
115
+ store: false
116
+ )
117
+ end
118
+
119
+ completed_responses(connection)
120
+ end
121
+ end
122
+
123
+ def run(client:, model:, workflow:, timeout: 60, output: $stdout)
124
+ Sync do |task|
125
+ task.with_timeout(timeout) do
126
+ case workflow
127
+ when "tools"
128
+ tools(client: client, model: model)
129
+ when "multiplex"
130
+ multiplex(client: client, model: model)
131
+ when "stored"
132
+ reconnect(client: client, model: model, store: true)
133
+ when "stateless"
134
+ reconnect(client: client, model: model, store: false)
135
+ else
136
+ raise ArgumentError, "Choose tools, multiplex, stored, or stateless."
137
+ end
138
+ end
139
+ end
140
+
141
+ output.puts("Responses WebSocket workflow completed.")
142
+ end
143
+ end
144
+ end
145
+ end
146
+
147
+ if $PROGRAM_NAME == __FILE__
148
+ begin
149
+ OpenAI::Examples::ResponsesWebSocketWorkflows.run(
150
+ client: OpenAI::Client.new,
151
+ model: ENV.fetch("OPENAI_RESPONSES_MODEL", "gpt-5.2"),
152
+ workflow: ARGV.fetch(0, "multiplex"),
153
+ timeout: Float(ENV.fetch("OPENAI_RESPONSES_TIMEOUT", "60"))
154
+ )
155
+ rescue StandardError
156
+ warn("Responses WebSocket workflow failed; no request or response contents were logged.")
157
+ exit(1)
158
+ end
159
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenAI
4
+ module LocalAudio
5
+ class Error < OpenAI::Errors::Error
6
+ end
7
+
8
+ class DependencyError < Error
9
+ end
10
+
11
+ class UnsupportedPlatformError < Error
12
+ end
13
+
14
+ class DeviceError < Error
15
+ end
16
+
17
+ class PlaybackError < Error
18
+ end
19
+
20
+ class TimeoutError < Error
21
+ end
22
+
23
+ class FormatError < Error
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,158 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "io/wait"
4
+
5
+ module OpenAI
6
+ module LocalAudio
7
+ # An owned media child. No credentials, shell, inherited descriptors or diagnostics.
8
+ # @api private
9
+ class MediaProcess
10
+ ENVIRONMENT_KEYS = %w[
11
+ PATH
12
+ HOME
13
+ TMPDIR
14
+ LANG
15
+ LC_ALL
16
+ SystemRoot
17
+ WINDIR
18
+ USERPROFILE
19
+ APPDATA
20
+ LOCALAPPDATA
21
+ XDG_RUNTIME_DIR
22
+ PULSE_SERVER
23
+ SDL_AUDIODRIVER
24
+ ]
25
+ .freeze
26
+ private_constant :ENVIRONMENT_KEYS
27
+
28
+ def self.environment = ENV.to_h.slice(*ENVIRONMENT_KEYS)
29
+ def self.clock = Process.clock_gettime(Process::CLOCK_MONOTONIC)
30
+
31
+ def self.duration(value, name:)
32
+ unless value.is_a?(Numeric) && value.real? && value.finite? && value.positive?
33
+ raise ArgumentError, "#{name} must be a positive finite number of seconds"
34
+ end
35
+
36
+ result = value.to_f
37
+ raise ArgumentError, "#{name} is not representable" unless result.finite?
38
+ result
39
+ end
40
+
41
+ def initialize(argv, input:, output:, timeout:, capture_errors: false)
42
+ @deadline = self.class.clock + self.class.duration(timeout, name: :timeout) unless timeout.nil?
43
+ @error_reader, error_writer = IO.pipe(binmode: true) if capture_errors
44
+ @pid = Process.spawn(
45
+ self.class.environment,
46
+ *argv,
47
+ in: input,
48
+ out: output,
49
+ err: error_writer || File::NULL,
50
+ close_others: true,
51
+ unsetenv_others: true
52
+ )
53
+ rescue Errno::ENOENT
54
+ @error_reader&.close
55
+ raise DependencyError.new("Install the required FFmpeg/FFplay executable on PATH."), cause: nil
56
+ rescue SystemCallError
57
+ @error_reader&.close
58
+ raise DeviceError.new("Cannot start the local audio executable."), cause: nil
59
+ ensure
60
+ error_writer&.close
61
+ end
62
+
63
+ def check_deadline
64
+ raise TimeoutError, "Local audio operation timed out." if @deadline && self.class.clock >= @deadline
65
+ errors?
66
+ end
67
+
68
+ # Drain at most one chunk per polling step, retaining no diagnostic content.
69
+ def errors?
70
+ if @error_reader && !@error_reader.closed?
71
+ chunk = @error_reader.read_nonblock(65_536, exception: false)
72
+ @errors = true if chunk.is_a?(String) && !chunk.empty?
73
+ end
74
+
75
+ !!@errors
76
+ end
77
+
78
+ def read(io, stop_on_exit: false)
79
+ loop do
80
+ check_deadline
81
+ return io.read(65_536) if io.is_a?(StringIO)
82
+ result = io.read_nonblock(65_536, exception: false)
83
+ return result unless result == :wait_readable
84
+ if stop_on_exit
85
+ reap
86
+ raise PlaybackError, "Audio player exited before the input ended." if @status
87
+ end
88
+
89
+ io.wait_readable(0.05)
90
+ end
91
+ end
92
+
93
+ def write(io, bytes)
94
+ offset = 0
95
+ while offset < bytes.bytesize
96
+ check_deadline
97
+ result = io.write_nonblock(bytes.byteslice(offset, 65_536), exception: false)
98
+ if result == :wait_writable
99
+ io.wait_writable(0.05)
100
+ else
101
+ offset += result
102
+ end
103
+ end
104
+
105
+ rescue Errno::EPIPE
106
+ raise PlaybackError.new("Audio player closed before receiving the input."), cause: nil
107
+ end
108
+
109
+ def wait
110
+ until @status
111
+ check_deadline
112
+ reap
113
+ sleep(0.01) unless @status
114
+ end
115
+
116
+ @status
117
+ end
118
+
119
+ def close
120
+ return unless @pid
121
+ reap
122
+ unless @status
123
+ signal("TERM")
124
+ deadline = self.class.clock + 0.25
125
+ until @status || self.class.clock >= deadline
126
+ reap
127
+ sleep(0.01) unless @status
128
+ end
129
+
130
+ unless @status
131
+ signal("KILL")
132
+ _, @status = Process.waitpid2(@pid)
133
+ end
134
+ end
135
+
136
+ ensure
137
+ @pid = nil
138
+ @error_reader&.close unless @error_reader&.closed?
139
+ end
140
+
141
+ private def reap
142
+ return if @status
143
+ result = Process.waitpid2(@pid, Process::WNOHANG)
144
+ @status = result.last if result
145
+ end
146
+
147
+ private def signal(name)
148
+ Process.kill(name, @pid)
149
+ rescue Errno::EINVAL
150
+ # Windows rejects TERM for another process; KILL still terminates it.
151
+ raise unless name == "TERM"
152
+ signal("KILL")
153
+ rescue Errno::ESRCH
154
+ nil
155
+ end
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,157 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../openai"
4
+ require_relative "local_audio/errors"
5
+ require_relative "local_audio/process"
6
+
7
+ module OpenAI
8
+ # Optional local microphone and speaker helpers. Loading this file opens no devices.
9
+ module LocalAudio
10
+ class << self
11
+ # Record a finite mono 24 kHz WAV, ready for a multipart audio upload.
12
+ # @return [OpenAI::FilePart]
13
+ def record(duration:, device: nil, timeout: nil)
14
+ seconds = MediaProcess.duration(duration, name: :duration)
15
+ MediaProcess.duration(timeout, name: :timeout) unless timeout.nil?
16
+ format, source = capture_device(device)
17
+ reader, writer = IO.pipe(binmode: true)
18
+ child = nil
19
+ begin
20
+ child = MediaProcess.new(
21
+ [
22
+ "ffmpeg",
23
+ "-nostdin",
24
+ "-hide_banner",
25
+ "-loglevel",
26
+ "quiet",
27
+ "-f",
28
+ format,
29
+ "-i",
30
+ source,
31
+ "-t",
32
+ seconds.to_s,
33
+ "-ar",
34
+ "24000",
35
+ "-ac",
36
+ "1",
37
+ "-acodec",
38
+ "pcm_s16le",
39
+ "-f",
40
+ "s16le",
41
+ "pipe:1"
42
+ ],
43
+ input: File::NULL,
44
+ output: writer,
45
+ timeout: timeout
46
+ )
47
+ writer.close
48
+ pcm = +"".b
49
+ while (chunk = child.read(reader))
50
+ pcm << chunk
51
+ end
52
+
53
+ raise DeviceError, "Microphone capture failed." unless child.wait.success?
54
+ raise DeviceError, "Microphone returned no complete audio samples." if pcm.empty? || pcm.bytesize.odd?
55
+ audio = StringIO.new(wav_header(pcm.bytesize) << pcm)
56
+ OpenAI::FilePart.new(audio, filename: "audio.wav", content_type: "audio/wav")
57
+ ensure
58
+ reader.close unless reader.closed?
59
+ writer.close unless writer.closed?
60
+ child&.close
61
+ end
62
+ end
63
+
64
+ # Play encoded audio, or explicitly selected mono 24 kHz raw PCM16.
65
+ # The source is consumed from its current position and remains caller-owned.
66
+ # @return [nil]
67
+ def play(source, format: :auto, timeout: nil)
68
+ raise ArgumentError, "format must be :auto or :pcm" unless [:auto, :pcm].include?(format)
69
+ MediaProcess.duration(timeout, name: :timeout) unless timeout.nil?
70
+ io = playback_source(source)
71
+ reader, writer = IO.pipe(binmode: true)
72
+ child = nil
73
+ begin
74
+ # FFplay can exit zero on decoder/device failure. Its owner drains
75
+ # error output while feeding input, retaining only a boolean.
76
+ args = ["ffplay", "-autoexit", "-nodisp", "-nostats", "-loglevel", "error", "-protocol_whitelist", "pipe"]
77
+ args.concat(
78
+ format == :pcm ? ["-f", "s16le", "-ar", "24000", "-ch_layout", "mono"] : [
79
+ "-format_whitelist",
80
+ "wav,mp3,ogg,aac,flac"
81
+ ]
82
+ )
83
+ child = MediaProcess.new(
84
+ args + ["-i", "pipe:0"],
85
+ input: reader,
86
+ output: File::NULL,
87
+ capture_errors: true,
88
+ timeout: timeout
89
+ )
90
+ reader.close
91
+ bytes = 0
92
+ while (chunk = child.read(io, stop_on_exit: true))
93
+ break if chunk.empty?
94
+ bytes += chunk.bytesize
95
+ child.write(writer, chunk)
96
+ end
97
+
98
+ raise PlaybackError, "Audio input is empty." if bytes.zero?
99
+ raise FormatError, "PCM input ends with an incomplete sample." if format == :pcm && bytes.odd?
100
+ writer.close
101
+ status = child.wait
102
+ raise PlaybackError, "Audio playback failed." unless status.success? && !child.errors?
103
+ nil
104
+ ensure
105
+ reader.close unless reader.closed?
106
+ writer.close unless writer.closed?
107
+ child&.close
108
+ end
109
+ end
110
+
111
+ # @api private
112
+ def playback_source(source)
113
+ content = source.is_a?(OpenAI::FilePart) ? source.content : source
114
+ return content if content.is_a?(IO) || content.is_a?(StringIO)
115
+ return StringIO.new(content) if source.is_a?(OpenAI::FilePart) && content.is_a?(String)
116
+ raise ArgumentError, "source must be IO, StringIO, or a FilePart containing IO or bytes"
117
+ end
118
+
119
+ # @api private
120
+ def capture_device(device, platform: RUBY_PLATFORM)
121
+ unless device.nil? || device.is_a?(String) || (device.is_a?(Integer) && device >= 0)
122
+ raise ArgumentError, "device must be a device name or nonnegative index"
123
+ end
124
+
125
+ raise ArgumentError, "invalid device identifier" if device.to_s.include?("\0") || device == ""
126
+ case platform
127
+ when /darwin/
128
+ ["avfoundation", "none:#{device || "default"}"]
129
+ when /linux/
130
+ ["alsa", device.is_a?(Integer) ? "hw:#{device}" : (device || "default")]
131
+ when /mswin|mingw|cygwin/
132
+ raise ArgumentError, "Windows capture requires an explicit audio device name" unless device.is_a?(String)
133
+ ["dshow", "audio=#{device}"]
134
+ else
135
+ raise UnsupportedPlatformError, "Local capture is not supported on this platform."
136
+ end
137
+ end
138
+
139
+ # @api private
140
+ def wav_header(bytes)
141
+ format = "fmt " + [16, 1, 1, 24_000, 48_000, 2, 16].pack("VvvVVvv")
142
+ if bytes <= 0xFFFFFFFF - 36
143
+ "RIFF" + [bytes + 36].pack("V") + "WAVE" + format + "data" + [bytes].pack("V")
144
+ else
145
+ "RF64" +
146
+ [0xFFFFFFFF].pack("V") +
147
+ "WAVEds64" +
148
+ [28].pack("V") +
149
+ [bytes + 72, bytes, bytes / 2, 0].pack("Q<Q<Q<V") +
150
+ format +
151
+ "data" +
152
+ [0xFFFFFFFF].pack("V")
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
@@ -19,8 +19,9 @@ module OpenAI
19
19
  attr_reader :input_audio_buffer
20
20
 
21
21
  # @api private
22
- def initialize(socket:, url:)
23
- super
22
+ def initialize(socket:, url:, recovery: nil)
23
+ super(socket: socket, url: url)
24
+ @recovery = recovery
24
25
  @server_event_names = discriminator_values(OpenAI::Realtime::RealtimeServerEvent)
25
26
  @client_event_names = discriminator_values(OpenAI::Realtime::RealtimeClientEvent)
26
27
  @session = OpenAI::Realtime::ConnectionResources::Session.new(self)
@@ -60,6 +61,23 @@ module OpenAI
60
61
  send_raw(encode_client_event(event))
61
62
  end
62
63
 
64
+ # Whether automatic recovery is opening or preparing a replacement socket.
65
+ def reconnecting? = @recovery ? @recovery.reconnecting? : false
66
+
67
+ # Snapshot of retained events, including the current event during a flush.
68
+ # These may contain sensitive application data. Normal connections return [].
69
+ def pending_messages = @recovery ? @recovery.pending_messages : []
70
+
71
+ # Remove and return retained events without sending them.
72
+ def take_pending_messages = @recovery ? @recovery.take_pending_messages : []
73
+
74
+ # Explicitly send retained events in order on the current session. Restore
75
+ # any required session state first. Does not retry uncertain failed writes.
76
+ def flush_pending
77
+ @recovery&.flush_pending
78
+ nil
79
+ end
80
+
63
81
  private def encode_client_event(event)
64
82
  if event.is_a?(Hash)
65
83
  validate_discriminator!(event, @client_event_names, kind: "client")
@@ -2,6 +2,24 @@
2
2
 
3
3
  module OpenAI
4
4
  module Errors
5
+ # A disconnected send could not be retained within the caller's byte budget.
6
+ class RealtimeQueueFullError < OpenAI::Errors::Error
7
+ def initialize = super("Realtime send queue is full; event was not accepted.")
8
+ end
9
+
10
+ # Terminal recovery failure. Payloads are available only through explicit
11
+ # accessors, never included in the message or default exception rendering.
12
+ class RealtimeReconnectError < OpenAI::Errors::Error
13
+ attr_reader :unsent_messages, :uncertain_message
14
+
15
+ # @api private
16
+ def initialize(message:, unsent_messages: [], uncertain_message: nil)
17
+ @unsent_messages = unsent_messages.dup.freeze
18
+ @uncertain_message = uncertain_message
19
+ super(message)
20
+ end
21
+ end
22
+
5
23
  # Raised when a Realtime WebSocket cannot be opened or used.
6
24
  class RealtimeConnectionError < OpenAI::Errors::WebSocketConnectionError
7
25
  private def default_message = "Realtime WebSocket connection error."