openai 0.94.0 → 0.96.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 (170) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +57 -0
  3. data/README.md +5 -2
  4. data/docs/architecture/security-model.md +2 -2
  5. data/examples/audio/record_and_play.rb +1 -1
  6. data/lib/openai/helpers/live/transcript_grouper.rb +264 -0
  7. data/lib/openai/helpers/live/transcript_grouping.rb +309 -0
  8. data/lib/openai/helpers/live/websocket.rb +454 -0
  9. data/lib/openai/helpers/realtime/translation.rb +440 -0
  10. data/lib/openai/helpers/realtime.rb +1 -0
  11. data/lib/openai/helpers/responses_websocket/incremental.rb +246 -0
  12. data/lib/openai/helpers/responses_websocket/transports/async_websocket.rb +183 -0
  13. data/lib/openai/helpers/responses_websocket.rb +1 -0
  14. data/lib/openai/helpers/streaming/response_stream.rb +19 -11
  15. data/lib/openai/helpers/structured_output/chat_completion_parser.rb +0 -2
  16. data/lib/openai/helpers/structured_output/response_parser.rb +1 -2
  17. data/lib/openai/helpers/structured_output/union_of.rb +0 -2
  18. data/lib/openai/helpers/websocket/async_websocket_transport.rb +11 -6
  19. data/lib/openai/helpers/websocket/connection_manager.rb +9 -0
  20. data/lib/openai/internal/read_io_adapter.rb +0 -2
  21. data/lib/openai/internal/stream.rb +0 -2
  22. data/lib/openai/internal/type/base_model.rb +4 -6
  23. data/lib/openai/internal/type/converter.rb +5 -3
  24. data/lib/openai/internal/type/enum.rb +0 -2
  25. data/lib/openai/internal/type/union.rb +0 -6
  26. data/lib/openai/internal/type/unknown.rb +34 -6
  27. data/lib/openai/internal/util.rb +0 -4
  28. data/lib/openai/models/admin/organization/audit_log_list_response.rb +5 -3
  29. data/lib/openai/models/admin/organization/external_storage_configuration.rb +5 -3
  30. data/lib/openai/models/admin/organization/external_storage_create_params.rb +39 -3
  31. data/lib/openai/models/admin/organization/gcp_external_storage_provider.rb +55 -0
  32. data/lib/openai/models/all_models.rb +1 -0
  33. data/lib/openai/models/audio/speech_create_params.rb +9 -0
  34. data/lib/openai/models/audio/transcription_create_response.rb +4 -1
  35. data/lib/openai/models/audio/translation_create_response.rb +4 -1
  36. data/lib/openai/models/beta/agent.rb +1 -0
  37. data/lib/openai/models/beta/agent_create_params.rb +3 -0
  38. data/lib/openai/models/beta/agent_session.rb +1 -0
  39. data/lib/openai/models/beta/agent_update_params.rb +3 -0
  40. data/lib/openai/models/beta/agents/environments/template_create_params.rb +3 -3
  41. data/lib/openai/models/beta/agents/environments/template_update_params.rb +6 -6
  42. data/lib/openai/models/beta/agents/session_create_params.rb +3 -0
  43. data/lib/openai/models/beta/agents/session_update_params.rb +3 -0
  44. data/lib/openai/models/beta/agents/vaults/credential.rb +10 -1
  45. data/lib/openai/models/beta/agents/vaults/credential_create_params.rb +12 -1
  46. data/lib/openai/models/beta/agents/vaults/credential_update_params.rb +14 -3
  47. data/lib/openai/models/beta/beta_response.rb +41 -1
  48. data/lib/openai/models/beta/beta_responses_client_event.rb +80 -1
  49. data/lib/openai/models/beta/beta_web_search_preview_tool.rb +9 -3
  50. data/lib/openai/models/beta/beta_web_search_tool.rb +9 -3
  51. data/lib/openai/models/beta/environment_param.rb +6 -5
  52. data/lib/openai/models/beta/response_compact_params.rb +6 -0
  53. data/lib/openai/models/beta/response_create_params.rb +71 -1
  54. data/lib/openai/models/beta/session_turn_error.rb +3 -0
  55. data/lib/openai/models/chat_model.rb +1 -0
  56. data/lib/openai/models/responses/response.rb +35 -1
  57. data/lib/openai/models/responses/response_compact_params.rb +6 -0
  58. data/lib/openai/models/responses/response_create_params.rb +65 -1
  59. data/lib/openai/models/responses/responses_client_event.rb +70 -1
  60. data/lib/openai/models/responses/web_search_preview_tool.rb +9 -3
  61. data/lib/openai/models/responses/web_search_tool.rb +9 -3
  62. data/lib/openai/models/responses_model.rb +1 -0
  63. data/lib/openai/models/video_create_error.rb +12 -1
  64. data/lib/openai/net_http_client.rb +0 -2
  65. data/lib/openai/resources/admin/organization/external_storage.rb +1 -1
  66. data/lib/openai/resources/audio/transcriptions.rb +5 -3
  67. data/lib/openai/resources/audio/translations.rb +1 -1
  68. data/lib/openai/resources/beta/agents/environments/templates.rb +3 -3
  69. data/lib/openai/resources/beta/agents/vaults/credentials.rb +12 -4
  70. data/lib/openai/resources/beta/responses.rb +8 -2
  71. data/lib/openai/resources/responses.rb +8 -1
  72. data/lib/openai/version.rb +1 -1
  73. data/lib/openai.rb +2 -0
  74. data/rbi/openai/helpers/live/transcript_grouper.rbi +67 -0
  75. data/rbi/openai/helpers/live/websocket.rbi +299 -0
  76. data/rbi/openai/helpers/realtime/translation.rbi +137 -0
  77. data/rbi/openai/helpers/responses_websocket/incremental.rbi +32 -0
  78. data/rbi/openai/helpers/responses_websocket/transports/async_websocket.rbi +24 -0
  79. data/rbi/openai/helpers/streaming/response_stream.rbi +5 -0
  80. data/rbi/openai/internal/type/converter.rbi +3 -2
  81. data/rbi/openai/models/admin/organization/audit_log_list_response.rbi +6 -3
  82. data/rbi/openai/models/admin/organization/external_storage_configuration.rbi +4 -2
  83. data/rbi/openai/models/admin/organization/external_storage_create_params.rbi +76 -4
  84. data/rbi/openai/models/admin/organization/gcp_external_storage_provider.rbi +100 -0
  85. data/rbi/openai/models/all_models.rbi +1 -0
  86. data/rbi/openai/models/audio/speech_create_params.rbi +3 -0
  87. data/rbi/openai/models/audio/transcription_create_response.rbi +2 -1
  88. data/rbi/openai/models/audio/translation_create_response.rbi +2 -1
  89. data/rbi/openai/models/beta/agent.rbi +1 -0
  90. data/rbi/openai/models/beta/agent_create_params.rbi +3 -0
  91. data/rbi/openai/models/beta/agent_session.rbi +1 -0
  92. data/rbi/openai/models/beta/agent_update_params.rbi +3 -0
  93. data/rbi/openai/models/beta/agents/environments/template_create_params.rbi +3 -3
  94. data/rbi/openai/models/beta/agents/environments/template_update_params.rbi +6 -6
  95. data/rbi/openai/models/beta/agents/session_create_params.rbi +3 -0
  96. data/rbi/openai/models/beta/agents/session_update_params.rbi +3 -0
  97. data/rbi/openai/models/beta/agents/vaults/credential.rbi +10 -0
  98. data/rbi/openai/models/beta/agents/vaults/credential_create_params.rbi +15 -0
  99. data/rbi/openai/models/beta/agents/vaults/credential_update_params.rbi +35 -6
  100. data/rbi/openai/models/beta/beta_response.rbi +65 -0
  101. data/rbi/openai/models/beta/beta_responses_client_event.rbi +132 -0
  102. data/rbi/openai/models/beta/beta_web_search_preview_tool.rbi +9 -3
  103. data/rbi/openai/models/beta/beta_web_search_tool.rbi +9 -3
  104. data/rbi/openai/models/beta/environment_param.rbi +5 -4
  105. data/rbi/openai/models/beta/response_compact_params.rbi +5 -0
  106. data/rbi/openai/models/beta/response_create_params.rbi +104 -0
  107. data/rbi/openai/models/beta/session_turn_error.rbi +6 -0
  108. data/rbi/openai/models/chat_model.rbi +1 -0
  109. data/rbi/openai/models/responses/response.rbi +63 -0
  110. data/rbi/openai/models/responses/response_compact_params.rbi +5 -0
  111. data/rbi/openai/models/responses/response_create_params.rbi +106 -0
  112. data/rbi/openai/models/responses/responses_client_event.rbi +125 -0
  113. data/rbi/openai/models/responses/web_search_preview_tool.rbi +9 -3
  114. data/rbi/openai/models/responses/web_search_tool.rbi +9 -3
  115. data/rbi/openai/models/responses_model.rbi +4 -0
  116. data/rbi/openai/models/video_create_error.rbi +20 -1
  117. data/rbi/openai/resources/admin/organization/external_storage.rbi +2 -1
  118. data/rbi/openai/resources/audio/transcriptions.rbi +4 -2
  119. data/rbi/openai/resources/beta/agents/environments/templates.rbi +3 -3
  120. data/rbi/openai/resources/beta/agents/vaults/credentials.rbi +11 -3
  121. data/rbi/openai/resources/beta/responses.rbi +6 -0
  122. data/rbi/openai/resources/responses.rbi +11 -0
  123. data/responses-websocket.md +55 -0
  124. data/sig/openai/helpers/live/transcript_grouper.rbs +42 -0
  125. data/sig/openai/helpers/live/websocket.rbs +152 -0
  126. data/sig/openai/helpers/realtime/translation.rbs +81 -0
  127. data/sig/openai/helpers/responses_websocket/incremental.rbs +14 -0
  128. data/sig/openai/helpers/responses_websocket/transports/async_websocket.rbs +21 -0
  129. data/sig/openai/helpers/streaming/response_stream.rbs +9 -0
  130. data/sig/openai/internal/type/converter.rbs +3 -1
  131. data/sig/openai/models/admin/organization/audit_log_list_response.rbs +1 -0
  132. data/sig/openai/models/admin/organization/external_storage_configuration.rbs +1 -0
  133. data/sig/openai/models/admin/organization/external_storage_create_params.rbs +38 -0
  134. data/sig/openai/models/admin/organization/gcp_external_storage_provider.rbs +54 -0
  135. data/sig/openai/models/all_models.rbs +2 -0
  136. data/sig/openai/models/audio/speech_create_params.rbs +6 -0
  137. data/sig/openai/models/audio/transcription_create_response.rbs +1 -0
  138. data/sig/openai/models/audio/translation_create_response.rbs +3 -1
  139. data/sig/openai/models/beta/agent.rbs +3 -1
  140. data/sig/openai/models/beta/agent_create_params.rbs +5 -1
  141. data/sig/openai/models/beta/agent_session.rbs +3 -1
  142. data/sig/openai/models/beta/agent_update_params.rbs +5 -1
  143. data/sig/openai/models/beta/agents/environments/template_create_params.rbs +2 -2
  144. data/sig/openai/models/beta/agents/environments/template_update_params.rbs +4 -4
  145. data/sig/openai/models/beta/agents/session_create_params.rbs +5 -1
  146. data/sig/openai/models/beta/agents/session_update_params.rbs +5 -1
  147. data/sig/openai/models/beta/agents/vaults/credential.rbs +8 -0
  148. data/sig/openai/models/beta/agents/vaults/credential_create_params.rbs +14 -0
  149. data/sig/openai/models/beta/agents/vaults/credential_update_params.rbs +23 -4
  150. data/sig/openai/models/beta/beta_response.rbs +39 -0
  151. data/sig/openai/models/beta/beta_responses_client_event.rbs +81 -0
  152. data/sig/openai/models/beta/beta_web_search_preview_tool.rbs +6 -2
  153. data/sig/openai/models/beta/beta_web_search_tool.rbs +6 -2
  154. data/sig/openai/models/beta/environment_param.rbs +2 -2
  155. data/sig/openai/models/beta/response_compact_params.rbs +4 -0
  156. data/sig/openai/models/beta/response_create_params.rbs +81 -0
  157. data/sig/openai/models/beta/session_turn_error.rbs +4 -0
  158. data/sig/openai/models/chat_model.rbs +2 -0
  159. data/sig/openai/models/responses/response.rbs +35 -0
  160. data/sig/openai/models/responses/response_compact_params.rbs +4 -0
  161. data/sig/openai/models/responses/response_create_params.rbs +77 -0
  162. data/sig/openai/models/responses/responses_client_event.rbs +77 -0
  163. data/sig/openai/models/responses/web_search_preview_tool.rbs +6 -2
  164. data/sig/openai/models/responses/web_search_tool.rbs +6 -2
  165. data/sig/openai/models/responses_model.rbs +2 -0
  166. data/sig/openai/models/video_create_error.rbs +14 -0
  167. data/sig/openai/resources/beta/agents/vaults/credentials.rbs +3 -1
  168. data/sig/openai/resources/beta/responses.rbs +2 -0
  169. data/sig/openai/resources/responses.rbs +4 -0
  170. metadata +17 -1
@@ -15,12 +15,19 @@ module OpenAI
15
15
  # @return [String]
16
16
  required :message, String
17
17
 
18
+ # @!attribute headers
19
+ # The Retry-After and Retry-After-Ms headers returned with the original error, if
20
+ # any.
21
+ #
22
+ # @return [Hash{Symbol=>String}, nil]
23
+ optional :headers, OpenAI::Internal::Type::HashOf[String]
24
+
18
25
  # @!attribute misalignment
19
26
  #
20
27
  # @return [OpenAI::Models::VideoCreateError::Misalignment, nil]
21
28
  optional :misalignment, -> { OpenAI::VideoCreateError::Misalignment }
22
29
 
23
- # @!method initialize(code:, message:, misalignment: nil)
30
+ # @!method initialize(code:, message:, headers: nil, misalignment: nil)
24
31
  # An error that occurred while generating the response.
25
32
  #
26
33
  # @param code [String]
@@ -29,6 +36,10 @@ module OpenAI
29
36
  # @param message [String]
30
37
  # A human-readable description of the error that was returned.
31
38
  #
39
+ # @param headers [Hash{Symbol=>String}]
40
+ # The Retry-After and Retry-After-Ms headers returned with the original error, if
41
+ # any.
42
+ #
32
43
  # @param misalignment [OpenAI::Models::VideoCreateError::Misalignment]
33
44
 
34
45
  # @see OpenAI::Models::VideoCreateError#misalignment
@@ -246,7 +246,6 @@ module OpenAI
246
246
  finished = false
247
247
  request_may_have_been_sent = false
248
248
 
249
- # rubocop:disable Metrics/BlockLength
250
249
  enum = Enumerator.new do |y|
251
250
  next if finished
252
251
 
@@ -331,7 +330,6 @@ module OpenAI
331
330
  )
332
331
  )
333
332
  end
334
- # rubocop:enable Metrics/BlockLength
335
333
 
336
334
  _, response = enum.next
337
335
  body = OpenAI::Internal::Util.fused_enum(enum, external: true) do
@@ -10,7 +10,7 @@ module OpenAI
10
10
  # @overload create(project_id:, provider:, request_options: {})
11
11
  #
12
12
  # @param project_id [String]
13
- # @param provider [OpenAI::Models::Admin::Organization::ExternalStorageCreateParams::Provider::Aws, OpenAI::Models::Admin::Organization::ExternalStorageCreateParams::Provider::Azure]
13
+ # @param provider [OpenAI::Models::Admin::Organization::ExternalStorageCreateParams::Provider::Aws, OpenAI::Models::Admin::Organization::ExternalStorageCreateParams::Provider::Azure, OpenAI::Models::Admin::Organization::ExternalStorageCreateParams::Provider::Gcp]
14
14
  # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
15
15
  #
16
16
  # @return [OpenAI::Models::Admin::Organization::ExternalStorageConfiguration]
@@ -11,7 +11,8 @@ module OpenAI
11
11
  # Transcribes audio into the input language.
12
12
  #
13
13
  # Returns a transcription object in `json`, `diarized_json`, or `verbose_json`
14
- # format, or a stream of transcript events.
14
+ # format, plain text in `text`, `srt`, or `vtt` format, or a stream of transcript
15
+ # events. Supported formats depend on the model.
15
16
  #
16
17
  # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
17
18
  # metadata. Use `OpenAI::FilePart` when you need to override the filename or
@@ -108,7 +109,7 @@ module OpenAI
108
109
  #
109
110
  # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
110
111
  #
111
- # @return [OpenAI::Models::Audio::Transcription, OpenAI::Models::Audio::TranscriptionDiarized, OpenAI::Models::Audio::TranscriptionVerbose]
112
+ # @return [OpenAI::Models::Audio::Transcription, OpenAI::Models::Audio::TranscriptionDiarized, OpenAI::Models::Audio::TranscriptionVerbose, StringIO]
112
113
  #
113
114
  # @see OpenAI::Models::Audio::TranscriptionCreateParams
114
115
  def create(params)
@@ -135,7 +136,8 @@ module OpenAI
135
136
  # Transcribes audio into the input language.
136
137
  #
137
138
  # Returns a transcription object in `json`, `diarized_json`, or `verbose_json`
138
- # format, or a stream of transcript events.
139
+ # format, plain text in `text`, `srt`, or `vtt` format, or a stream of transcript
140
+ # events. Supported formats depend on the model.
139
141
  #
140
142
  # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
141
143
  # metadata. Use `OpenAI::FilePart` when you need to override the filename or
@@ -46,7 +46,7 @@ module OpenAI
46
46
  #
47
47
  # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
48
48
  #
49
- # @return [OpenAI::Models::Audio::Translation, OpenAI::Models::Audio::TranslationVerbose]
49
+ # @return [OpenAI::Models::Audio::Translation, OpenAI::Models::Audio::TranslationVerbose, StringIO]
50
50
  #
51
51
  # @see OpenAI::Models::Audio::TranslationCreateParams
52
52
  def create(params)
@@ -27,7 +27,7 @@ module OpenAI
27
27
  #
28
28
  # @param network [OpenAI::Models::Beta::Agents::Environments::TemplateCreateParams::Network, nil]
29
29
  # Network access policy for the environment. Defaults to disabled for GA requests
30
- # and enabled for alpha/beta requests.
30
+ # and enabled for beta requests.
31
31
  #
32
32
  # @param packages [OpenAI::Models::Beta::Agents::Environments::TemplateCreateParams::Packages, nil]
33
33
  # Packages to install in the environment. Defaults to empty package lists.
@@ -106,8 +106,8 @@ module OpenAI
106
106
  #
107
107
  # @param network [OpenAI::Models::Beta::Agents::Environments::TemplateUpdateParams::Network, nil]
108
108
  # Network access available after setup completes. Omit to preserve the current
109
- # policy, or pass `null` to reset to disabled for GA requests or enabled for
110
- # alpha/beta requests.
109
+ # policy, or pass `null` to reset to disabled for GA requests or enabled for beta
110
+ # requests.
111
111
  #
112
112
  # @param packages [OpenAI::Models::Beta::Agents::Environments::TemplateUpdateParams::Packages, nil]
113
113
  # Packages installed before the runtime network policy applies.
@@ -10,7 +10,7 @@ module OpenAI
10
10
  # See
11
11
  # [vaults](https://developers.openai.com/api/docs/guides/agents-api/tools/vaults).
12
12
  #
13
- # @overload create(vault_id, auth:, name:, request_options: {})
13
+ # @overload create(vault_id, auth:, name:, metadata: nil, request_options: {})
14
14
  #
15
15
  # @param vault_id [String]
16
16
  # The ID of the vault.
@@ -22,6 +22,10 @@ module OpenAI
22
22
  # The name is trimmed before storage. It must contain 1 to 256 UTF-8 bytes after
23
23
  # trimming.
24
24
  #
25
+ # @param metadata [Hash{Symbol=>String}]
26
+ # Up to 16 string key-value pairs, with keys up to 64 and values up to 512
27
+ # characters. Defaults to an empty map.
28
+ #
25
29
  # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
26
30
  #
27
31
  # @return [OpenAI::Models::Beta::Agents::Vaults::Credential]
@@ -70,11 +74,10 @@ module OpenAI
70
74
  )
71
75
  end
72
76
 
73
- # Rotates a vault credential's write-only secret and returns only credential
74
- # metadata. See
77
+ # Updates credential metadata or rotates its write-only secret. See
75
78
  # [vaults](https://developers.openai.com/api/docs/guides/agents-api/tools/vaults).
76
79
  #
77
- # @overload update(credential_id, vault_id:, auth:, request_options: {})
80
+ # @overload update(credential_id, vault_id:, auth: nil, metadata: nil, request_options: {})
78
81
  #
79
82
  # @param credential_id [String]
80
83
  # Path param: The ID of the vault credential.
@@ -86,6 +89,11 @@ module OpenAI
86
89
  # Body param: Replacement values for the credential's existing authentication
87
90
  # method.
88
91
  #
92
+ # @param metadata [Hash{Symbol=>String}]
93
+ # Body param: Replaces all metadata. Omit to preserve it, or pass {} to clear it.
94
+ # Up to 16 string key-value pairs, with keys up to 64 and values up to 512
95
+ # characters.
96
+ #
89
97
  # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
90
98
  #
91
99
  # @return [OpenAI::Models::Beta::Agents::Vaults::Credential]
@@ -27,7 +27,10 @@ module OpenAI
27
27
  # [file search](https://developers.openai.com/api/docs/guides/tools-file-search)
28
28
  # to use your own data as input for the model's response.
29
29
  #
30
- # @overload create(background: nil, context_management: nil, conversation: nil, include: nil, input: nil, instructions: nil, max_output_tokens: nil, max_tool_calls: nil, metadata: nil, model: nil, moderation: nil, multi_agent: nil, parallel_tool_calls: nil, previous_response_id: nil, prompt: nil, prompt_cache_key: nil, prompt_cache_options: nil, prompt_cache_retention: nil, reasoning: nil, safety_identifier: nil, service_tier: nil, store: nil, stream_options: nil, temperature: nil, text: nil, tool_choice: nil, tools: nil, top_logprobs: nil, top_p: nil, truncation: nil, user: nil, betas: nil, request_options: {})
30
+ # @overload create(access_programs: nil, background: nil, context_management: nil, conversation: nil, include: nil, input: nil, instructions: nil, max_output_tokens: nil, max_tool_calls: nil, metadata: nil, model: nil, moderation: nil, multi_agent: nil, parallel_tool_calls: nil, previous_response_id: nil, prompt: nil, prompt_cache_key: nil, prompt_cache_options: nil, prompt_cache_retention: nil, reasoning: nil, safety_identifier: nil, service_tier: nil, store: nil, stream_options: nil, temperature: nil, text: nil, tool_choice: nil, tools: nil, top_logprobs: nil, top_p: nil, truncation: nil, user: nil, betas: nil, request_options: {})
31
+ #
32
+ # @param access_programs [OpenAI::Models::Beta::ResponseCreateParams::AccessPrograms]
33
+ # Body param: Domain-specific access programs to use for this request.
31
34
  #
32
35
  # @param background [Boolean, nil]
33
36
  # Body param: Whether to run the model response in the background.
@@ -325,7 +328,10 @@ module OpenAI
325
328
  # [file search](https://developers.openai.com/api/docs/guides/tools-file-search)
326
329
  # to use your own data as input for the model's response.
327
330
  #
328
- # @overload stream_raw(background: nil, context_management: nil, conversation: nil, include: nil, input: nil, instructions: nil, max_output_tokens: nil, max_tool_calls: nil, metadata: nil, model: nil, moderation: nil, multi_agent: nil, parallel_tool_calls: nil, previous_response_id: nil, prompt: nil, prompt_cache_key: nil, prompt_cache_options: nil, prompt_cache_retention: nil, reasoning: nil, safety_identifier: nil, service_tier: nil, store: nil, stream_options: nil, temperature: nil, text: nil, tool_choice: nil, tools: nil, top_logprobs: nil, top_p: nil, truncation: nil, user: nil, betas: nil, request_options: {})
331
+ # @overload stream_raw(access_programs: nil, background: nil, context_management: nil, conversation: nil, include: nil, input: nil, instructions: nil, max_output_tokens: nil, max_tool_calls: nil, metadata: nil, model: nil, moderation: nil, multi_agent: nil, parallel_tool_calls: nil, previous_response_id: nil, prompt: nil, prompt_cache_key: nil, prompt_cache_options: nil, prompt_cache_retention: nil, reasoning: nil, safety_identifier: nil, service_tier: nil, store: nil, stream_options: nil, temperature: nil, text: nil, tool_choice: nil, tools: nil, top_logprobs: nil, top_p: nil, truncation: nil, user: nil, betas: nil, request_options: {})
332
+ #
333
+ # @param access_programs [OpenAI::Models::Beta::ResponseCreateParams::AccessPrograms]
334
+ # Body param: Domain-specific access programs to use for this request.
329
335
  #
330
336
  # @param background [Boolean, nil]
331
337
  # Body param: Whether to run the model response in the background.
@@ -28,7 +28,10 @@ module OpenAI
28
28
  # [file search](https://developers.openai.com/api/docs/guides/tools-file-search)
29
29
  # to use your own data as input for the model's response.
30
30
  #
31
- # @overload create(background: nil, context_management: nil, conversation: nil, include: nil, input: nil, instructions: nil, max_output_tokens: nil, max_tool_calls: nil, metadata: nil, model: nil, moderation: nil, parallel_tool_calls: nil, previous_response_id: nil, prompt: nil, prompt_cache_key: nil, prompt_cache_options: nil, prompt_cache_retention: nil, reasoning: nil, safety_identifier: nil, service_tier: nil, store: nil, stream_options: nil, temperature: nil, text: nil, tool_choice: nil, tools: nil, top_logprobs: nil, top_p: nil, truncation: nil, user: nil, request_options: {})
31
+ # @overload create(access_programs: nil, background: nil, context_management: nil, conversation: nil, include: nil, input: nil, instructions: nil, max_output_tokens: nil, max_tool_calls: nil, metadata: nil, model: nil, moderation: nil, parallel_tool_calls: nil, previous_response_id: nil, prompt: nil, prompt_cache_key: nil, prompt_cache_options: nil, prompt_cache_retention: nil, reasoning: nil, safety_identifier: nil, service_tier: nil, store: nil, stream_options: nil, temperature: nil, text: nil, tool_choice: nil, tools: nil, top_logprobs: nil, top_p: nil, truncation: nil, user: nil, request_options: {})
32
+ #
33
+ # @param access_programs [OpenAI::Models::Responses::ResponseCreateParams::AccessPrograms]
34
+ # Domain-specific access programs to use for this request.
32
35
  #
33
36
  # @param background [Boolean, nil]
34
37
  # Whether to run the model response in the background.
@@ -305,6 +308,10 @@ module OpenAI
305
308
  end
306
309
 
307
310
  # Creates or resumes a streaming response and parses structured outputs.
311
+ # @overload stream(access_programs: nil, **params)
312
+ # @param access_programs [OpenAI::Models::Responses::ResponseCreateParams::AccessPrograms]
313
+ # Domain-specific access programs to use for this request.
314
+ # @param params [Hash{Symbol=>Object}] Other response creation or retrieval parameters.
308
315
  def stream(params)
309
316
  parsed, options = OpenAI::Responses::ResponseCreateParams.dump_request(params)
310
317
  starting_after, response_id = parsed.values_at(:starting_after, :response_id)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenAI
4
- VERSION = "0.94.0"
4
+ VERSION = "0.96.0"
5
5
  end
data/lib/openai.rb CHANGED
@@ -256,6 +256,7 @@ require_relative "openai/models/admin/organization/external_storage_delete_param
256
256
  require_relative "openai/models/admin/organization/external_storage_list_params"
257
257
  require_relative "openai/models/admin/organization/external_storage_retrieve_params"
258
258
  require_relative "openai/models/admin/organization/external_storage_validate_params"
259
+ require_relative "openai/models/admin/organization/gcp_external_storage_provider"
259
260
  require_relative "openai/models/admin/organization/group"
260
261
  require_relative "openai/models/admin/organization/group_create_params"
261
262
  require_relative "openai/models/admin/organization/group_delete_params"
@@ -1593,6 +1594,7 @@ require_relative "openai/streaming"
1593
1594
  require_relative "openai/helpers/websocket"
1594
1595
  require_relative "openai/helpers/realtime"
1595
1596
  require_relative "openai/helpers/responses_websocket"
1597
+ require_relative "openai/helpers/live/websocket"
1596
1598
 
1597
1599
  require_relative "openai/helpers/agents/session_stream"
1598
1600
  require_relative "openai/helpers/agents/message"
@@ -0,0 +1,67 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Live
6
+ class TranscriptGrouper
7
+ class Segment < Data
8
+ sig { returns(String) }
9
+ attr_reader :id
10
+
11
+ sig { returns(T.nilable(String)) }
12
+ attr_reader :previous_id
13
+
14
+ # :user or :assistant
15
+ sig { returns(Symbol) }
16
+ attr_reader :speaker
17
+
18
+ sig { returns(String) }
19
+ attr_reader :text
20
+
21
+ sig { returns(Integer) }
22
+ attr_reader :start_ms, :end_ms
23
+ end
24
+
25
+ class ClosedSegment < Data
26
+ sig { returns(Segment) }
27
+ attr_reader :segment
28
+
29
+ # :speaker_change, :inactivity, :timestamp_reset, :session_closed or :manual
30
+ sig { returns(Symbol) }
31
+ attr_reader :reason
32
+ end
33
+
34
+ sig do
35
+ params(
36
+ on_segment_updated: T.nilable(T.proc.params(segment: Segment).void),
37
+ on_segment_closed: T.nilable(T.proc.params(event: ClosedSegment).void),
38
+ min_turn_separation_ms: T.any(Integer, Float),
39
+ assistant_silence_ms: T.any(Integer, Float),
40
+ backchannel_max_duration_ms: T.any(Integer, Float),
41
+ backchannel_isolation_ms: T.any(Integer, Float),
42
+ additional_acknowledgments: T::Array[String]
43
+ )
44
+ .returns(T.attached_class)
45
+ end
46
+ def self.new(
47
+ on_segment_updated: nil,
48
+ on_segment_closed: nil,
49
+ min_turn_separation_ms: 500,
50
+ assistant_silence_ms: 2000,
51
+ backchannel_max_duration_ms: 1000,
52
+ backchannel_isolation_ms: 2000,
53
+ additional_acknowledgments: []
54
+ )
55
+ end
56
+
57
+ sig { params(event: T.anything).void }
58
+ def push(event)
59
+ end
60
+
61
+ sig { void }
62
+ def close
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,299 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ class Client < OpenAI::Internal::Transport::BaseClient
5
+ # @api private
6
+ sig do
7
+ params(
8
+ path: T.any(String, T::Array[String]),
9
+ query: T::Hash[String, String],
10
+ websocket_base_url: T.nilable(String),
11
+ options: T.nilable(OpenAI::RequestOptions::OrHash),
12
+ block: T
13
+ .proc
14
+ .params(
15
+ request: OpenAI::Internal::Transport::BaseClient::RequestInput,
16
+ mark_handshake_completed: T.proc.void
17
+ )
18
+ .returns(T.anything)
19
+ )
20
+ .returns(T.anything)
21
+ end
22
+ def with_live_websocket_connection_request(
23
+ path: "live/sessions",
24
+ query: {},
25
+ websocket_base_url: nil,
26
+ options: nil,
27
+ &block
28
+ )
29
+ end
30
+ end
31
+
32
+ module Errors
33
+ class LiveConnectionError < OpenAI::Errors::WebSocketConnectionError
34
+ end
35
+
36
+ class LiveProtocolError < OpenAI::Errors::WebSocketProtocolError
37
+ sig { returns(T.attached_class) }
38
+ def self.new
39
+ end
40
+ end
41
+ end
42
+
43
+ module Models
44
+ module Live
45
+ class UnknownServerEvent
46
+ sig { returns(Symbol) }
47
+ attr_reader :type
48
+ sig { returns(T::Hash[T.any(String, Symbol), T.anything]) }
49
+ attr_reader :data
50
+ sig { params(data: T::Hash[T.any(String, Symbol), T.anything]).returns(T.attached_class) }
51
+ def self.new(data:)
52
+ end
53
+
54
+ sig { returns(T::Hash[T.any(String, Symbol), T.anything]) }
55
+ def to_h
56
+ end
57
+
58
+ sig { returns(String) }
59
+ def inspect
60
+ end
61
+
62
+ alias to_s inspect
63
+ end
64
+
65
+ class Connection
66
+ include Enumerable
67
+ ServerEvent = T.type_alias { T.any(OpenAI::Live::ServerEvent::Variants, OpenAI::Live::UnknownServerEvent) }
68
+ ClientEvent = T.type_alias do
69
+ T.any(OpenAI::Live::ClientEvent::Variants, T::Hash[T.any(String, Symbol), T.anything])
70
+ end
71
+
72
+ Elem = type_member { {fixed: ServerEvent} }
73
+ sig { returns(URI::Generic) }
74
+ attr_reader :url
75
+ sig { params(socket: T.anything, url: URI::Generic).returns(T.attached_class) }
76
+ def self.new(socket:, url:)
77
+ end
78
+
79
+ sig do
80
+ params(block: T.nilable(T.proc.params(event: ServerEvent).void)).returns(
81
+ T.any(OpenAI::Live::Connection, T::Enumerator[ServerEvent])
82
+ )
83
+ end
84
+ def each(&block)
85
+ end
86
+
87
+ sig { returns(T.nilable(ServerEvent)) }
88
+ def receive
89
+ end
90
+
91
+ sig { returns(T.nilable(String)) }
92
+ def receive_raw
93
+ end
94
+
95
+ sig { params(event: ClientEvent).void }
96
+ def send_event(event)
97
+ end
98
+
99
+ sig { params(data: String).void }
100
+ def send_raw(data)
101
+ end
102
+
103
+ sig { params(code: Integer, reason: String).void }
104
+ def close(code: 1000, reason: "")
105
+ end
106
+
107
+ sig { void }
108
+ def abort
109
+ end
110
+
111
+ sig { returns(T::Boolean) }
112
+ def closed?
113
+ end
114
+ end
115
+
116
+ class SidebandConnection
117
+ include Enumerable
118
+ ClientEvent = T.type_alias do
119
+ T.any(
120
+ OpenAI::Live::SessionUpdateEvent,
121
+ OpenAI::Live::InputAudioMuteEvent,
122
+ OpenAI::Live::InputAudioUnmuteEvent,
123
+ OpenAI::Live::InstructionsAppendEvent,
124
+ OpenAI::Live::ThinkingAppendEvent,
125
+ OpenAI::Live::CommentaryAppendEvent,
126
+ OpenAI::Live::ResponseItemCreateEvent,
127
+ OpenAI::Live::ResponseCreateEvent,
128
+ OpenAI::Live::SessionCloseEvent,
129
+ T::Hash[T.any(String, Symbol), T.anything]
130
+ )
131
+ end
132
+
133
+ Elem = type_member { {fixed: Connection::ServerEvent} }
134
+ sig { returns(URI::Generic) }
135
+ attr_reader :url
136
+ sig { params(socket: T.anything, url: URI::Generic).returns(T.attached_class) }
137
+ def self.new(socket:, url:)
138
+ end
139
+
140
+ sig do
141
+ params(block: T.nilable(T.proc.params(event: Connection::ServerEvent).void)).returns(
142
+ T.any(OpenAI::Live::SidebandConnection, T::Enumerator[Connection::ServerEvent])
143
+ )
144
+ end
145
+ def each(&block)
146
+ end
147
+
148
+ sig { returns(T.nilable(Connection::ServerEvent)) }
149
+ def receive
150
+ end
151
+
152
+ sig { returns(T.nilable(String)) }
153
+ def receive_raw
154
+ end
155
+
156
+ sig { params(event: ClientEvent).void }
157
+ def send_event(event)
158
+ end
159
+
160
+ sig { params(data: String).void }
161
+ def send_raw(data)
162
+ end
163
+
164
+ sig { params(code: Integer, reason: String).void }
165
+ def close(code: 1000, reason: "")
166
+ end
167
+
168
+ sig { void }
169
+ def abort
170
+ end
171
+
172
+ sig { returns(T::Boolean) }
173
+ def closed?
174
+ end
175
+ end
176
+
177
+ # Fork sessions use distinct input/output variants; expose that protocol
178
+ # directly so the primary Connection's shipped signatures stay precise.
179
+ class ForkConnection
180
+ include Enumerable
181
+ ServerEvent = T.type_alias { T.any(OpenAI::Live::ForkServerEvent::Variants, OpenAI::Live::UnknownServerEvent) }
182
+ ClientEvent = T.type_alias do
183
+ T.any(OpenAI::Live::ForkClientEvent::Variants, T::Hash[T.any(String, Symbol), T.anything])
184
+ end
185
+
186
+ Elem = type_member { {fixed: ServerEvent} }
187
+ sig { returns(URI::Generic) }
188
+ attr_reader :url
189
+ sig { params(socket: T.anything, url: URI::Generic).returns(T.attached_class) }
190
+ def self.new(socket:, url:)
191
+ end
192
+
193
+ sig do
194
+ params(block: T.nilable(T.proc.params(event: ServerEvent).void)).returns(
195
+ T.any(OpenAI::Live::ForkConnection, T::Enumerator[ServerEvent])
196
+ )
197
+ end
198
+ def each(&block)
199
+ end
200
+
201
+ sig { returns(T.nilable(ServerEvent)) }
202
+ def receive
203
+ end
204
+
205
+ sig { returns(T.nilable(String)) }
206
+ def receive_raw
207
+ end
208
+
209
+ sig { params(event: ClientEvent).void }
210
+ def send_event(event)
211
+ end
212
+
213
+ sig { params(data: String).void }
214
+ def send_raw(data)
215
+ end
216
+
217
+ sig { params(code: Integer, reason: String).void }
218
+ def close(code: 1000, reason: "")
219
+ end
220
+
221
+ sig { void }
222
+ def abort
223
+ end
224
+
225
+ sig { returns(T::Boolean) }
226
+ def closed?
227
+ end
228
+ end
229
+ end
230
+ end
231
+
232
+ module Resources
233
+ class Live
234
+ sig do
235
+ type_parameters(:T)
236
+ .params(
237
+ websocket_base_url: T.nilable(String),
238
+ request_options: T.nilable(OpenAI::RequestOptions::OrHash),
239
+ transport: T.untyped,
240
+ transport_options: T::Hash[Symbol, T.anything],
241
+ block: T.proc.params(connection: OpenAI::Live::Connection).returns(T.type_parameter(:T))
242
+ )
243
+ .returns(T.type_parameter(:T))
244
+ end
245
+ def connect(websocket_base_url: nil, request_options: nil, transport: nil, transport_options: {}, &block)
246
+ end
247
+
248
+ class Sideband
249
+ sig do
250
+ type_parameters(:T)
251
+ .params(
252
+ session_id: String,
253
+ graceful_close: T.nilable(T::Boolean),
254
+ websocket_base_url: T.nilable(String),
255
+ request_options: T.nilable(OpenAI::RequestOptions::OrHash),
256
+ transport: T.untyped,
257
+ transport_options: T::Hash[Symbol, T.anything],
258
+ block: T.proc.params(connection: OpenAI::Live::SidebandConnection).returns(T.type_parameter(:T))
259
+ )
260
+ .returns(T.type_parameter(:T))
261
+ end
262
+ def connect(
263
+ session_id,
264
+ graceful_close: nil,
265
+ websocket_base_url: nil,
266
+ request_options: nil,
267
+ transport: nil,
268
+ transport_options: {},
269
+ &block
270
+ )
271
+ end
272
+ end
273
+
274
+ class Forks
275
+ sig do
276
+ type_parameters(:T)
277
+ .params(
278
+ session_id: String,
279
+ websocket_base_url: T.nilable(String),
280
+ request_options: T.nilable(OpenAI::RequestOptions::OrHash),
281
+ transport: T.untyped,
282
+ transport_options: T::Hash[Symbol, T.anything],
283
+ block: T.proc.params(connection: OpenAI::Live::ForkConnection).returns(T.type_parameter(:T))
284
+ )
285
+ .returns(T.type_parameter(:T))
286
+ end
287
+ def connect(
288
+ session_id,
289
+ websocket_base_url: nil,
290
+ request_options: nil,
291
+ transport: nil,
292
+ transport_options: {},
293
+ &block
294
+ )
295
+ end
296
+ end
297
+ end
298
+ end
299
+ end