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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +44 -0
- data/README.md +5 -2
- data/docs/architecture/security-model.md +2 -2
- data/examples/audio/record_and_play.rb +1 -1
- data/lib/openai/helpers/live/transcript_grouper.rb +264 -0
- data/lib/openai/helpers/live/transcript_grouping.rb +309 -0
- data/lib/openai/helpers/live/websocket.rb +454 -0
- data/lib/openai/helpers/realtime/translation.rb +440 -0
- data/lib/openai/helpers/realtime.rb +1 -0
- data/lib/openai/helpers/responses_websocket/incremental.rb +246 -0
- data/lib/openai/helpers/responses_websocket/transports/async_websocket.rb +183 -0
- data/lib/openai/helpers/responses_websocket.rb +1 -0
- data/lib/openai/helpers/streaming/response_stream.rb +19 -11
- data/lib/openai/helpers/structured_output/chat_completion_parser.rb +0 -2
- data/lib/openai/helpers/structured_output/response_parser.rb +1 -2
- data/lib/openai/helpers/structured_output/union_of.rb +0 -2
- data/lib/openai/helpers/websocket/async_websocket_transport.rb +11 -6
- data/lib/openai/helpers/websocket/connection_manager.rb +9 -0
- data/lib/openai/internal/read_io_adapter.rb +0 -2
- data/lib/openai/internal/stream.rb +0 -2
- data/lib/openai/internal/type/base_model.rb +4 -6
- data/lib/openai/internal/type/converter.rb +5 -3
- data/lib/openai/internal/type/enum.rb +0 -2
- data/lib/openai/internal/type/union.rb +0 -6
- data/lib/openai/internal/type/unknown.rb +34 -6
- data/lib/openai/internal/util.rb +0 -4
- data/lib/openai/models/audio/speech_create_params.rb +9 -0
- data/lib/openai/models/audio/transcription_create_response.rb +4 -1
- data/lib/openai/models/audio/translation_create_response.rb +4 -1
- data/lib/openai/models/beta/agent.rb +1 -0
- data/lib/openai/models/beta/agent_create_params.rb +3 -0
- data/lib/openai/models/beta/agent_session.rb +1 -0
- data/lib/openai/models/beta/agent_update_params.rb +3 -0
- data/lib/openai/models/beta/agents/environments/template_create_params.rb +3 -3
- data/lib/openai/models/beta/agents/environments/template_update_params.rb +6 -6
- data/lib/openai/models/beta/agents/session_create_params.rb +3 -0
- data/lib/openai/models/beta/agents/session_update_params.rb +3 -0
- data/lib/openai/models/beta/agents/vaults/credential.rb +10 -1
- data/lib/openai/models/beta/agents/vaults/credential_create_params.rb +12 -1
- data/lib/openai/models/beta/agents/vaults/credential_update_params.rb +14 -3
- data/lib/openai/models/beta/beta_response.rb +38 -1
- data/lib/openai/models/beta/beta_responses_client_event.rb +73 -1
- data/lib/openai/models/beta/beta_web_search_preview_tool.rb +9 -3
- data/lib/openai/models/beta/beta_web_search_tool.rb +9 -3
- data/lib/openai/models/beta/environment_param.rb +3 -3
- data/lib/openai/models/beta/response_compact_params.rb +3 -0
- data/lib/openai/models/beta/response_create_params.rb +68 -1
- data/lib/openai/models/beta/session_turn_error.rb +3 -0
- data/lib/openai/models/chat_model.rb +1 -0
- data/lib/openai/models/responses/response.rb +35 -1
- data/lib/openai/models/responses/response_compact_params.rb +3 -0
- data/lib/openai/models/responses/response_create_params.rb +65 -1
- data/lib/openai/models/responses/responses_client_event.rb +70 -1
- data/lib/openai/models/responses/web_search_preview_tool.rb +9 -3
- data/lib/openai/models/responses/web_search_tool.rb +9 -3
- data/lib/openai/net_http_client.rb +0 -2
- data/lib/openai/resources/audio/transcriptions.rb +5 -3
- data/lib/openai/resources/audio/translations.rb +1 -1
- data/lib/openai/resources/beta/agents/environments/templates.rb +3 -3
- data/lib/openai/resources/beta/agents/vaults/credentials.rb +12 -4
- data/lib/openai/resources/beta/responses.rb +8 -2
- data/lib/openai/resources/responses.rb +8 -1
- data/lib/openai/version.rb +1 -1
- data/lib/openai.rb +1 -0
- data/rbi/openai/helpers/live/transcript_grouper.rbi +67 -0
- data/rbi/openai/helpers/live/websocket.rbi +299 -0
- data/rbi/openai/helpers/realtime/translation.rbi +137 -0
- data/rbi/openai/helpers/responses_websocket/incremental.rbi +32 -0
- data/rbi/openai/helpers/responses_websocket/transports/async_websocket.rbi +24 -0
- data/rbi/openai/helpers/streaming/response_stream.rbi +5 -0
- data/rbi/openai/internal/type/converter.rbi +3 -2
- data/rbi/openai/models/audio/speech_create_params.rbi +3 -0
- data/rbi/openai/models/audio/transcription_create_response.rbi +2 -1
- data/rbi/openai/models/audio/translation_create_response.rbi +2 -1
- data/rbi/openai/models/beta/agent.rbi +1 -0
- data/rbi/openai/models/beta/agent_create_params.rbi +3 -0
- data/rbi/openai/models/beta/agent_session.rbi +1 -0
- data/rbi/openai/models/beta/agent_update_params.rbi +3 -0
- data/rbi/openai/models/beta/agents/environments/template_create_params.rbi +3 -3
- data/rbi/openai/models/beta/agents/environments/template_update_params.rbi +6 -6
- data/rbi/openai/models/beta/agents/session_create_params.rbi +3 -0
- data/rbi/openai/models/beta/agents/session_update_params.rbi +3 -0
- data/rbi/openai/models/beta/agents/vaults/credential.rbi +10 -0
- data/rbi/openai/models/beta/agents/vaults/credential_create_params.rbi +15 -0
- data/rbi/openai/models/beta/agents/vaults/credential_update_params.rbi +35 -6
- data/rbi/openai/models/beta/beta_response.rbi +64 -0
- data/rbi/openai/models/beta/beta_responses_client_event.rbi +128 -0
- data/rbi/openai/models/beta/beta_web_search_preview_tool.rbi +9 -3
- data/rbi/openai/models/beta/beta_web_search_tool.rbi +9 -3
- data/rbi/openai/models/beta/environment_param.rbi +3 -3
- data/rbi/openai/models/beta/response_compact_params.rbi +1 -0
- data/rbi/openai/models/beta/response_create_params.rbi +100 -0
- data/rbi/openai/models/beta/session_turn_error.rbi +6 -0
- data/rbi/openai/models/chat_model.rbi +1 -0
- data/rbi/openai/models/responses/response.rbi +63 -0
- data/rbi/openai/models/responses/response_compact_params.rbi +1 -0
- data/rbi/openai/models/responses/response_create_params.rbi +106 -0
- data/rbi/openai/models/responses/responses_client_event.rbi +125 -0
- data/rbi/openai/models/responses/web_search_preview_tool.rbi +9 -3
- data/rbi/openai/models/responses/web_search_tool.rbi +9 -3
- data/rbi/openai/resources/audio/transcriptions.rbi +4 -2
- data/rbi/openai/resources/beta/agents/environments/templates.rbi +3 -3
- data/rbi/openai/resources/beta/agents/vaults/credentials.rbi +11 -3
- data/rbi/openai/resources/beta/responses.rbi +6 -0
- data/rbi/openai/resources/responses.rbi +11 -0
- data/responses-websocket.md +55 -0
- data/sig/openai/helpers/live/transcript_grouper.rbs +42 -0
- data/sig/openai/helpers/live/websocket.rbs +152 -0
- data/sig/openai/helpers/realtime/translation.rbs +81 -0
- data/sig/openai/helpers/responses_websocket/incremental.rbs +14 -0
- data/sig/openai/helpers/responses_websocket/transports/async_websocket.rbs +21 -0
- data/sig/openai/helpers/streaming/response_stream.rbs +9 -0
- data/sig/openai/internal/type/converter.rbs +3 -1
- data/sig/openai/models/audio/speech_create_params.rbs +6 -0
- data/sig/openai/models/audio/transcription_create_response.rbs +1 -0
- data/sig/openai/models/audio/translation_create_response.rbs +3 -1
- data/sig/openai/models/beta/agent.rbs +3 -1
- data/sig/openai/models/beta/agent_create_params.rbs +5 -1
- data/sig/openai/models/beta/agent_session.rbs +3 -1
- data/sig/openai/models/beta/agent_update_params.rbs +5 -1
- data/sig/openai/models/beta/agents/environments/template_create_params.rbs +2 -2
- data/sig/openai/models/beta/agents/environments/template_update_params.rbs +4 -4
- data/sig/openai/models/beta/agents/session_create_params.rbs +5 -1
- data/sig/openai/models/beta/agents/session_update_params.rbs +5 -1
- data/sig/openai/models/beta/agents/vaults/credential.rbs +8 -0
- data/sig/openai/models/beta/agents/vaults/credential_create_params.rbs +14 -0
- data/sig/openai/models/beta/agents/vaults/credential_update_params.rbs +23 -4
- data/sig/openai/models/beta/beta_response.rbs +37 -0
- data/sig/openai/models/beta/beta_responses_client_event.rbs +79 -0
- data/sig/openai/models/beta/beta_web_search_preview_tool.rbs +6 -2
- data/sig/openai/models/beta/beta_web_search_tool.rbs +6 -2
- data/sig/openai/models/beta/environment_param.rbs +2 -2
- data/sig/openai/models/beta/response_compact_params.rbs +2 -0
- data/sig/openai/models/beta/response_create_params.rbs +79 -0
- data/sig/openai/models/beta/session_turn_error.rbs +4 -0
- data/sig/openai/models/chat_model.rbs +2 -0
- data/sig/openai/models/responses/response.rbs +35 -0
- data/sig/openai/models/responses/response_compact_params.rbs +2 -0
- data/sig/openai/models/responses/response_create_params.rbs +77 -0
- data/sig/openai/models/responses/responses_client_event.rbs +77 -0
- data/sig/openai/models/responses/web_search_preview_tool.rbs +6 -2
- data/sig/openai/models/responses/web_search_tool.rbs +6 -2
- data/sig/openai/resources/beta/agents/vaults/credentials.rbs +3 -1
- data/sig/openai/resources/beta/responses.rbs +2 -0
- data/sig/openai/resources/responses.rbs +4 -0
- 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
|
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
}
|