openai 0.95.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 (147) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +44 -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/audio/speech_create_params.rb +9 -0
  29. data/lib/openai/models/audio/transcription_create_response.rb +4 -1
  30. data/lib/openai/models/audio/translation_create_response.rb +4 -1
  31. data/lib/openai/models/beta/agent.rb +1 -0
  32. data/lib/openai/models/beta/agent_create_params.rb +3 -0
  33. data/lib/openai/models/beta/agent_session.rb +1 -0
  34. data/lib/openai/models/beta/agent_update_params.rb +3 -0
  35. data/lib/openai/models/beta/agents/environments/template_create_params.rb +3 -3
  36. data/lib/openai/models/beta/agents/environments/template_update_params.rb +6 -6
  37. data/lib/openai/models/beta/agents/session_create_params.rb +3 -0
  38. data/lib/openai/models/beta/agents/session_update_params.rb +3 -0
  39. data/lib/openai/models/beta/agents/vaults/credential.rb +10 -1
  40. data/lib/openai/models/beta/agents/vaults/credential_create_params.rb +12 -1
  41. data/lib/openai/models/beta/agents/vaults/credential_update_params.rb +14 -3
  42. data/lib/openai/models/beta/beta_response.rb +38 -1
  43. data/lib/openai/models/beta/beta_responses_client_event.rb +73 -1
  44. data/lib/openai/models/beta/beta_web_search_preview_tool.rb +9 -3
  45. data/lib/openai/models/beta/beta_web_search_tool.rb +9 -3
  46. data/lib/openai/models/beta/environment_param.rb +3 -3
  47. data/lib/openai/models/beta/response_compact_params.rb +3 -0
  48. data/lib/openai/models/beta/response_create_params.rb +68 -1
  49. data/lib/openai/models/beta/session_turn_error.rb +3 -0
  50. data/lib/openai/models/chat_model.rb +1 -0
  51. data/lib/openai/models/responses/response.rb +35 -1
  52. data/lib/openai/models/responses/response_compact_params.rb +3 -0
  53. data/lib/openai/models/responses/response_create_params.rb +65 -1
  54. data/lib/openai/models/responses/responses_client_event.rb +70 -1
  55. data/lib/openai/models/responses/web_search_preview_tool.rb +9 -3
  56. data/lib/openai/models/responses/web_search_tool.rb +9 -3
  57. data/lib/openai/net_http_client.rb +0 -2
  58. data/lib/openai/resources/audio/transcriptions.rb +5 -3
  59. data/lib/openai/resources/audio/translations.rb +1 -1
  60. data/lib/openai/resources/beta/agents/environments/templates.rb +3 -3
  61. data/lib/openai/resources/beta/agents/vaults/credentials.rb +12 -4
  62. data/lib/openai/resources/beta/responses.rb +8 -2
  63. data/lib/openai/resources/responses.rb +8 -1
  64. data/lib/openai/version.rb +1 -1
  65. data/lib/openai.rb +1 -0
  66. data/rbi/openai/helpers/live/transcript_grouper.rbi +67 -0
  67. data/rbi/openai/helpers/live/websocket.rbi +299 -0
  68. data/rbi/openai/helpers/realtime/translation.rbi +137 -0
  69. data/rbi/openai/helpers/responses_websocket/incremental.rbi +32 -0
  70. data/rbi/openai/helpers/responses_websocket/transports/async_websocket.rbi +24 -0
  71. data/rbi/openai/helpers/streaming/response_stream.rbi +5 -0
  72. data/rbi/openai/internal/type/converter.rbi +3 -2
  73. data/rbi/openai/models/audio/speech_create_params.rbi +3 -0
  74. data/rbi/openai/models/audio/transcription_create_response.rbi +2 -1
  75. data/rbi/openai/models/audio/translation_create_response.rbi +2 -1
  76. data/rbi/openai/models/beta/agent.rbi +1 -0
  77. data/rbi/openai/models/beta/agent_create_params.rbi +3 -0
  78. data/rbi/openai/models/beta/agent_session.rbi +1 -0
  79. data/rbi/openai/models/beta/agent_update_params.rbi +3 -0
  80. data/rbi/openai/models/beta/agents/environments/template_create_params.rbi +3 -3
  81. data/rbi/openai/models/beta/agents/environments/template_update_params.rbi +6 -6
  82. data/rbi/openai/models/beta/agents/session_create_params.rbi +3 -0
  83. data/rbi/openai/models/beta/agents/session_update_params.rbi +3 -0
  84. data/rbi/openai/models/beta/agents/vaults/credential.rbi +10 -0
  85. data/rbi/openai/models/beta/agents/vaults/credential_create_params.rbi +15 -0
  86. data/rbi/openai/models/beta/agents/vaults/credential_update_params.rbi +35 -6
  87. data/rbi/openai/models/beta/beta_response.rbi +64 -0
  88. data/rbi/openai/models/beta/beta_responses_client_event.rbi +128 -0
  89. data/rbi/openai/models/beta/beta_web_search_preview_tool.rbi +9 -3
  90. data/rbi/openai/models/beta/beta_web_search_tool.rbi +9 -3
  91. data/rbi/openai/models/beta/environment_param.rbi +3 -3
  92. data/rbi/openai/models/beta/response_compact_params.rbi +1 -0
  93. data/rbi/openai/models/beta/response_create_params.rbi +100 -0
  94. data/rbi/openai/models/beta/session_turn_error.rbi +6 -0
  95. data/rbi/openai/models/chat_model.rbi +1 -0
  96. data/rbi/openai/models/responses/response.rbi +63 -0
  97. data/rbi/openai/models/responses/response_compact_params.rbi +1 -0
  98. data/rbi/openai/models/responses/response_create_params.rbi +106 -0
  99. data/rbi/openai/models/responses/responses_client_event.rbi +125 -0
  100. data/rbi/openai/models/responses/web_search_preview_tool.rbi +9 -3
  101. data/rbi/openai/models/responses/web_search_tool.rbi +9 -3
  102. data/rbi/openai/resources/audio/transcriptions.rbi +4 -2
  103. data/rbi/openai/resources/beta/agents/environments/templates.rbi +3 -3
  104. data/rbi/openai/resources/beta/agents/vaults/credentials.rbi +11 -3
  105. data/rbi/openai/resources/beta/responses.rbi +6 -0
  106. data/rbi/openai/resources/responses.rbi +11 -0
  107. data/responses-websocket.md +55 -0
  108. data/sig/openai/helpers/live/transcript_grouper.rbs +42 -0
  109. data/sig/openai/helpers/live/websocket.rbs +152 -0
  110. data/sig/openai/helpers/realtime/translation.rbs +81 -0
  111. data/sig/openai/helpers/responses_websocket/incremental.rbs +14 -0
  112. data/sig/openai/helpers/responses_websocket/transports/async_websocket.rbs +21 -0
  113. data/sig/openai/helpers/streaming/response_stream.rbs +9 -0
  114. data/sig/openai/internal/type/converter.rbs +3 -1
  115. data/sig/openai/models/audio/speech_create_params.rbs +6 -0
  116. data/sig/openai/models/audio/transcription_create_response.rbs +1 -0
  117. data/sig/openai/models/audio/translation_create_response.rbs +3 -1
  118. data/sig/openai/models/beta/agent.rbs +3 -1
  119. data/sig/openai/models/beta/agent_create_params.rbs +5 -1
  120. data/sig/openai/models/beta/agent_session.rbs +3 -1
  121. data/sig/openai/models/beta/agent_update_params.rbs +5 -1
  122. data/sig/openai/models/beta/agents/environments/template_create_params.rbs +2 -2
  123. data/sig/openai/models/beta/agents/environments/template_update_params.rbs +4 -4
  124. data/sig/openai/models/beta/agents/session_create_params.rbs +5 -1
  125. data/sig/openai/models/beta/agents/session_update_params.rbs +5 -1
  126. data/sig/openai/models/beta/agents/vaults/credential.rbs +8 -0
  127. data/sig/openai/models/beta/agents/vaults/credential_create_params.rbs +14 -0
  128. data/sig/openai/models/beta/agents/vaults/credential_update_params.rbs +23 -4
  129. data/sig/openai/models/beta/beta_response.rbs +37 -0
  130. data/sig/openai/models/beta/beta_responses_client_event.rbs +79 -0
  131. data/sig/openai/models/beta/beta_web_search_preview_tool.rbs +6 -2
  132. data/sig/openai/models/beta/beta_web_search_tool.rbs +6 -2
  133. data/sig/openai/models/beta/environment_param.rbs +2 -2
  134. data/sig/openai/models/beta/response_compact_params.rbs +2 -0
  135. data/sig/openai/models/beta/response_create_params.rbs +79 -0
  136. data/sig/openai/models/beta/session_turn_error.rbs +4 -0
  137. data/sig/openai/models/chat_model.rbs +2 -0
  138. data/sig/openai/models/responses/response.rbs +35 -0
  139. data/sig/openai/models/responses/response_compact_params.rbs +2 -0
  140. data/sig/openai/models/responses/response_create_params.rbs +77 -0
  141. data/sig/openai/models/responses/responses_client_event.rbs +77 -0
  142. data/sig/openai/models/responses/web_search_preview_tool.rbs +6 -2
  143. data/sig/openai/models/responses/web_search_tool.rbs +6 -2
  144. data/sig/openai/resources/beta/agents/vaults/credentials.rbs +3 -1
  145. data/sig/openai/resources/beta/responses.rbs +2 -0
  146. data/sig/openai/resources/responses.rbs +4 -0
  147. metadata +14 -1
@@ -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
@@ -0,0 +1,137 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ class Client < OpenAI::Internal::Transport::BaseClient
5
+ # @api private
6
+ sig do
7
+ params(
8
+ model: String,
9
+ websocket_base_url: T.nilable(String),
10
+ options: T.nilable(OpenAI::RequestOptions::OrHash),
11
+ block: T
12
+ .proc
13
+ .params(
14
+ request: OpenAI::Internal::Transport::BaseClient::RequestInput,
15
+ mark_handshake_completed: T.proc.void
16
+ )
17
+ .returns(T.anything)
18
+ )
19
+ .returns(T.anything)
20
+ end
21
+ def with_translation_connection_request(model:, websocket_base_url: nil, options: nil, &block)
22
+ end
23
+ end
24
+
25
+ module Errors
26
+ class TranslationConnectionError < OpenAI::Errors::WebSocketConnectionError
27
+ end
28
+
29
+ class TranslationProtocolError < OpenAI::Errors::WebSocketProtocolError
30
+ sig { returns(T.attached_class) }
31
+ def self.new
32
+ end
33
+ end
34
+ end
35
+
36
+ module Models
37
+ module Realtime
38
+ class UnknownTranslationServerEvent < OpenAI::Realtime::UnknownServerEvent
39
+ sig { returns(String) }
40
+ def inspect
41
+ end
42
+
43
+ alias to_s inspect
44
+ end
45
+
46
+ class TranslationConnection
47
+ include Enumerable
48
+ ServerEvent = T.type_alias do
49
+ T.any(
50
+ OpenAI::Realtime::RealtimeTranslationServerEvent::Variants,
51
+ OpenAI::Realtime::UnknownTranslationServerEvent
52
+ )
53
+ end
54
+
55
+ ClientEvent = T.type_alias do
56
+ T.any(OpenAI::Realtime::RealtimeTranslationClientEvent::Variants, T::Hash[T.any(String, Symbol), T.anything])
57
+ end
58
+
59
+ Elem = type_member { {fixed: ServerEvent} }
60
+ sig { returns(URI::Generic) }
61
+ attr_reader :url
62
+ sig { params(socket: T.anything, url: URI::Generic).returns(T.attached_class) }
63
+ def self.new(socket:, url:)
64
+ end
65
+
66
+ sig do
67
+ params(block: T.nilable(T.proc.params(event: ServerEvent).void)).returns(
68
+ T.any(OpenAI::Realtime::TranslationConnection, T::Enumerator[ServerEvent])
69
+ )
70
+ end
71
+ def each(&block)
72
+ end
73
+
74
+ sig { returns(T.nilable(ServerEvent)) }
75
+ def receive
76
+ end
77
+
78
+ sig { returns(T.nilable(String)) }
79
+ def receive_raw
80
+ end
81
+
82
+ sig { params(event: ClientEvent).void }
83
+ def send_event(event)
84
+ end
85
+
86
+ sig do
87
+ params(timeout: Numeric, block: T.proc.params(event: ServerEvent).void)
88
+ .returns(OpenAI::Realtime::RealtimeTranslationSessionClosedEvent)
89
+ end
90
+ def finish(timeout:, &block)
91
+ end
92
+
93
+ sig { params(data: String).void }
94
+ def send_raw(data)
95
+ end
96
+
97
+ sig { params(code: Integer, reason: String).void }
98
+ def close(code: 1000, reason: "")
99
+ end
100
+
101
+ sig { void }
102
+ def abort
103
+ end
104
+
105
+ sig { returns(T::Boolean) }
106
+ def closed?
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ module Resources
113
+ class Realtime
114
+ sig do
115
+ type_parameters(:T)
116
+ .params(
117
+ model: String,
118
+ websocket_base_url: T.nilable(String),
119
+ request_options: T.nilable(OpenAI::RequestOptions::OrHash),
120
+ transport: T.untyped,
121
+ transport_options: T::Hash[Symbol, T.anything],
122
+ block: T.proc.params(connection: OpenAI::Realtime::TranslationConnection).returns(T.type_parameter(:T))
123
+ )
124
+ .returns(T.type_parameter(:T))
125
+ end
126
+ def connect_translation(
127
+ model:,
128
+ websocket_base_url: nil,
129
+ request_options: nil,
130
+ transport: nil,
131
+ transport_options: {},
132
+ &block
133
+ )
134
+ end
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,32 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Responses
6
+ class IncrementalResponse
7
+ sig { returns(T.attached_class) }
8
+ def self.new
9
+ end
10
+
11
+ sig { returns(T.nilable(Symbol)) }
12
+ attr_reader :phase
13
+
14
+ sig { returns(T.nilable(T::Array[T.any(ResponseOutputItem::Variants, T::Hash[Symbol, T.untyped])])) }
15
+ def output
16
+ end
17
+
18
+ sig { returns(T.nilable(Connection::ServerEvent)) }
19
+ def terminal_event
20
+ end
21
+
22
+ sig { params(event: Connection::ServerEvent).void }
23
+ def add(event)
24
+ end
25
+
26
+ sig { void }
27
+ def reset
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -5,6 +5,30 @@ module OpenAI
5
5
  module Responses
6
6
  module Transports
7
7
  class AsyncWebSocket
8
+ # @api private
9
+ module PeekableFramer
10
+ # @api private
11
+ sig { returns(T::Boolean) }
12
+ def next_frame_compressed?
13
+ end
14
+ end
15
+
16
+ # @api private
17
+ class BoundedFramer
18
+ # @api private
19
+ sig { params(value: T::Boolean).returns(T::Boolean) }
20
+ def compression_negotiated=(value)
21
+ end
22
+ end
23
+
24
+ # @api private
25
+ module BoundedInflate
26
+ # @api private
27
+ sig { params(max_bytes: Integer, framer: BoundedFramer).void }
28
+ def bound_decoded_messages(max_bytes, framer)
29
+ end
30
+ end
31
+
8
32
  sig { void }
9
33
  def initialize
10
34
  end
@@ -96,6 +96,11 @@ module OpenAI
96
96
  def accumulate_event(event:, current_snapshot:)
97
97
  end
98
98
 
99
+ # @api private
100
+ sig { params(event: T.untyped, items: T::Array[T.untyped]).void }
101
+ def accumulate_output(event, items)
102
+ end
103
+
99
104
  private
100
105
 
101
106
  sig { params(value: String, delta: String).returns(String) }
@@ -14,6 +14,7 @@ module OpenAI
14
14
  CoerceState = T.type_alias do
15
15
  {
16
16
  translate_names: T::Boolean,
17
+ request_only: T::Boolean,
17
18
  strictness: T::Boolean,
18
19
  exactness: {
19
20
  yes: Integer,
@@ -122,11 +123,11 @@ module OpenAI
122
123
 
123
124
  # @api private
124
125
  sig do
125
- params(translate_names: T::Boolean).returns(
126
+ params(translate_names: T::Boolean, request_only: T::Boolean).returns(
126
127
  OpenAI::Internal::Type::Converter::CoerceState
127
128
  )
128
129
  end
129
- def self.new_coerce_state(translate_names: true)
130
+ def self.new_coerce_state(translate_names: true, request_only: false)
130
131
  end
131
132
 
132
133
  # @api private
@@ -249,6 +249,9 @@ module OpenAI
249
249
  VERSE = T.let(:verse, OpenAI::Audio::SpeechCreateParams::Voice::TaggedSymbol)
250
250
  MARIN = T.let(:marin, OpenAI::Audio::SpeechCreateParams::Voice::TaggedSymbol)
251
251
  CEDAR = T.let(:cedar, OpenAI::Audio::SpeechCreateParams::Voice::TaggedSymbol)
252
+ FABLE = T.let(:fable, OpenAI::Audio::SpeechCreateParams::Voice::TaggedSymbol)
253
+ ONYX = T.let(:onyx, OpenAI::Audio::SpeechCreateParams::Voice::TaggedSymbol)
254
+ NOVA = T.let(:nova, OpenAI::Audio::SpeechCreateParams::Voice::TaggedSymbol)
252
255
 
253
256
  end
254
257
 
@@ -14,7 +14,8 @@ module OpenAI
14
14
  T.any(
15
15
  OpenAI::Audio::Transcription,
16
16
  OpenAI::Audio::TranscriptionDiarized,
17
- OpenAI::Audio::TranscriptionVerbose
17
+ OpenAI::Audio::TranscriptionVerbose,
18
+ StringIO
18
19
  )
19
20
  end
20
21
 
@@ -11,7 +11,8 @@ module OpenAI
11
11
  Variants = T.type_alias do
12
12
  T.any(
13
13
  OpenAI::Audio::Translation,
14
- OpenAI::Audio::TranslationVerbose
14
+ OpenAI::Audio::TranslationVerbose,
15
+ StringIO
15
16
  )
16
17
  end
17
18
 
@@ -195,6 +195,7 @@ module OpenAI
195
195
  FLEX = T.let(:flex, OpenAI::Beta::Agent::ServiceTier::TaggedSymbol)
196
196
  PRIORITY = T.let(:priority, OpenAI::Beta::Agent::ServiceTier::TaggedSymbol)
197
197
  FAST = T.let(:fast, OpenAI::Beta::Agent::ServiceTier::TaggedSymbol)
198
+ ULTRAFAST = T.let(:ultrafast, OpenAI::Beta::Agent::ServiceTier::TaggedSymbol)
198
199
 
199
200
  sig { override.returns(T::Array[OpenAI::Beta::Agent::ServiceTier::TaggedSymbol]) }
200
201
  def self.values
@@ -203,6 +203,9 @@ module OpenAI
203
203
  # Uses the fast service tier.
204
204
  FAST = T.let(:fast, OpenAI::Beta::AgentCreateParams::ServiceTier::TaggedSymbol)
205
205
 
206
+ # Uses the ultrafast service tier.
207
+ ULTRAFAST = T.let(:ultrafast, OpenAI::Beta::AgentCreateParams::ServiceTier::TaggedSymbol)
208
+
206
209
  sig { override.returns(T::Array[OpenAI::Beta::AgentCreateParams::ServiceTier::TaggedSymbol]) }
207
210
  def self.values
208
211
  end
@@ -319,6 +319,7 @@ module OpenAI
319
319
  FLEX = T.let(:flex, OpenAI::Beta::AgentSession::Agent::ServiceTier::TaggedSymbol)
320
320
  PRIORITY = T.let(:priority, OpenAI::Beta::AgentSession::Agent::ServiceTier::TaggedSymbol)
321
321
  FAST = T.let(:fast, OpenAI::Beta::AgentSession::Agent::ServiceTier::TaggedSymbol)
322
+ ULTRAFAST = T.let(:ultrafast, OpenAI::Beta::AgentSession::Agent::ServiceTier::TaggedSymbol)
322
323
 
323
324
  sig { override.returns(T::Array[OpenAI::Beta::AgentSession::Agent::ServiceTier::TaggedSymbol]) }
324
325
  def self.values
@@ -214,6 +214,9 @@ module OpenAI
214
214
  # Uses the fast service tier.
215
215
  FAST = T.let(:fast, OpenAI::Beta::AgentUpdateParams::ServiceTier::TaggedSymbol)
216
216
 
217
+ # Uses the ultrafast service tier.
218
+ ULTRAFAST = T.let(:ultrafast, OpenAI::Beta::AgentUpdateParams::ServiceTier::TaggedSymbol)
219
+
217
220
  sig { override.returns(T::Array[OpenAI::Beta::AgentUpdateParams::ServiceTier::TaggedSymbol]) }
218
221
  def self.values
219
222
  end
@@ -50,7 +50,7 @@ module OpenAI
50
50
  attr_accessor :name
51
51
 
52
52
  # Network access policy for the environment. Defaults to disabled for GA requests
53
- # and enabled for alpha/beta requests.
53
+ # and enabled for beta requests.
54
54
  sig { returns(T.nilable(OpenAI::Beta::Agents::Environments::TemplateCreateParams::Network)) }
55
55
  attr_reader :network
56
56
 
@@ -145,7 +145,7 @@ module OpenAI
145
145
  name: nil,
146
146
 
147
147
  # Network access policy for the environment. Defaults to disabled for GA requests
148
- # and enabled for alpha/beta requests.
148
+ # and enabled for beta requests.
149
149
  network: nil,
150
150
 
151
151
  # Packages to install in the environment. Defaults to empty package lists.
@@ -212,7 +212,7 @@ module OpenAI
212
212
  attr_accessor :allowed_domains
213
213
 
214
214
  # Network access policy for the environment. Defaults to disabled for GA requests
215
- # and enabled for alpha/beta requests.
215
+ # and enabled for beta requests.
216
216
  sig do
217
217
  params(
218
218
 
@@ -52,8 +52,8 @@ module OpenAI
52
52
  attr_accessor :name
53
53
 
54
54
  # Network access available after setup completes. Omit to preserve the current
55
- # policy, or pass `null` to reset to disabled for GA requests or enabled for
56
- # alpha/beta requests.
55
+ # policy, or pass `null` to reset to disabled for GA requests or enabled for beta
56
+ # requests.
57
57
  sig { returns(T.nilable(OpenAI::Beta::Agents::Environments::TemplateUpdateParams::Network)) }
58
58
  attr_reader :network
59
59
 
@@ -150,8 +150,8 @@ module OpenAI
150
150
  name: nil,
151
151
 
152
152
  # Network access available after setup completes. Omit to preserve the current
153
- # policy, or pass `null` to reset to disabled for GA requests or enabled for
154
- # alpha/beta requests.
153
+ # policy, or pass `null` to reset to disabled for GA requests or enabled for beta
154
+ # requests.
155
155
  network: nil,
156
156
 
157
157
  # Packages installed before the runtime network policy applies.
@@ -218,8 +218,8 @@ module OpenAI
218
218
  attr_accessor :allowed_domains
219
219
 
220
220
  # Network access available after setup completes. Omit to preserve the current
221
- # policy, or pass `null` to reset to disabled for GA requests or enabled for
222
- # alpha/beta requests.
221
+ # policy, or pass `null` to reset to disabled for GA requests or enabled for beta
222
+ # requests.
223
223
  sig do
224
224
  params(
225
225
 
@@ -309,6 +309,9 @@ module OpenAI
309
309
  # Uses the fast service tier.
310
310
  FAST = T.let(:fast, OpenAI::Beta::Agents::SessionCreateParams::Agent::ServiceTier::TaggedSymbol)
311
311
 
312
+ # Uses the ultrafast service tier.
313
+ ULTRAFAST = T.let(:ultrafast, OpenAI::Beta::Agents::SessionCreateParams::Agent::ServiceTier::TaggedSymbol)
314
+
312
315
  sig {
313
316
  override.returns(T::Array[OpenAI::Beta::Agents::SessionCreateParams::Agent::ServiceTier::TaggedSymbol])
314
317
  }
@@ -234,6 +234,9 @@ module OpenAI
234
234
  # Uses the fast service tier.
235
235
  FAST = T.let(:fast, OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier::TaggedSymbol)
236
236
 
237
+ # Uses the ultrafast service tier.
238
+ ULTRAFAST = T.let(:ultrafast, OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier::TaggedSymbol)
239
+
237
240
  sig {
238
241
  override.returns(T::Array[OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier::TaggedSymbol])
239
242
  }