openai 0.95.0 → 0.97.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 +51 -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 +3 -2
- data/lib/openai/models/beta/agent_browser_authentication_cancel_param.rb +23 -0
- data/lib/openai/models/beta/agent_browser_authentication_submit_param.rb +70 -0
- data/lib/openai/models/beta/agent_browser_origin_access_param.rb +45 -0
- data/lib/openai/models/beta/agent_create_params.rb +5 -2
- data/lib/openai/models/beta/agent_output_item.rb +276 -1
- data/lib/openai/models/beta/agent_session.rb +252 -5
- data/lib/openai/models/beta/agent_session_input_param.rb +64 -1
- data/lib/openai/models/beta/agent_session_item.rb +391 -1
- data/lib/openai/models/beta/agent_session_turn_item_added_event.rb +2 -2
- data/lib/openai/models/beta/agent_session_turn_item_done_event.rb +2 -2
- data/lib/openai/models/beta/agent_tool.rb +27 -1
- data/lib/openai/models/beta/agent_tool_param.rb +27 -1
- data/lib/openai/models/beta/agent_update_params.rb +5 -2
- data/lib/openai/models/beta/agents/environments/environment_template.rb +26 -2
- data/lib/openai/models/beta/agents/environments/template_create_params.rb +51 -6
- data/lib/openai/models/beta/agents/environments/template_update_params.rb +51 -9
- data/lib/openai/models/beta/agents/session_create_params.rb +5 -2
- data/lib/openai/models/beta/agents/session_update_params.rb +3 -0
- data/lib/openai/models/beta/agents/sessions/event_create_params.rb +2 -2
- 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.rb +26 -2
- data/lib/openai/models/beta/environment_param.rb +46 -6
- data/lib/openai/models/beta/persisted_agent_tool.rb +27 -1
- data/lib/openai/models/beta/persisted_agent_tool_param.rb +27 -1
- 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 +12 -5
- data/lib/openai/resources/beta/agents/sessions/events.rb +1 -1
- data/lib/openai/resources/beta/agents/sessions/items.rb +1 -1
- data/lib/openai/resources/beta/agents/sessions/subagents/items.rb +1 -1
- data/lib/openai/resources/beta/agents/sessions/subagents/turns/items.rb +1 -1
- data/lib/openai/resources/beta/agents/vaults/credentials.rb +12 -4
- data/lib/openai/resources/beta/agents.rb +2 -2
- 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 +4 -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 +3 -1
- data/rbi/openai/models/beta/agent_browser_authentication_cancel_param.rbi +53 -0
- data/rbi/openai/models/beta/agent_browser_authentication_submit_param.rbi +125 -0
- data/rbi/openai/models/beta/agent_browser_origin_access_param.rbi +76 -0
- data/rbi/openai/models/beta/agent_create_params.rbi +9 -3
- data/rbi/openai/models/beta/agent_output_item.rbi +422 -0
- data/rbi/openai/models/beta/agent_session.rbi +374 -1
- data/rbi/openai/models/beta/agent_session_input_param.rbi +102 -0
- data/rbi/openai/models/beta/agent_session_item.rbi +614 -0
- data/rbi/openai/models/beta/agent_session_turn_item_added_event.rbi +3 -0
- data/rbi/openai/models/beta/agent_session_turn_item_done_event.rbi +2 -0
- data/rbi/openai/models/beta/agent_tool.rbi +49 -1
- data/rbi/openai/models/beta/agent_tool_param.rbi +52 -1
- data/rbi/openai/models/beta/agent_update_params.rbi +9 -3
- data/rbi/openai/models/beta/agents/environments/environment_template.rbi +53 -2
- data/rbi/openai/models/beta/agents/environments/template_create_params.rbi +77 -7
- data/rbi/openai/models/beta/agents/environments/template_update_params.rbi +77 -10
- data/rbi/openai/models/beta/agents/session_create_params.rbi +9 -3
- data/rbi/openai/models/beta/agents/session_update_params.rbi +3 -0
- data/rbi/openai/models/beta/agents/sessions/event_create_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.rbi +53 -2
- data/rbi/openai/models/beta/environment_param.rbi +75 -7
- data/rbi/openai/models/beta/persisted_agent_tool.rbi +49 -1
- data/rbi/openai/models/beta/persisted_agent_tool_param.rbi +52 -1
- 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 +10 -3
- data/rbi/openai/resources/beta/agents/sessions/events.rbi +1 -0
- data/rbi/openai/resources/beta/agents/vaults/credentials.rbi +11 -3
- data/rbi/openai/resources/beta/agents.rbi +4 -2
- 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_browser_authentication_cancel_param.rbs +21 -0
- data/sig/openai/models/beta/agent_browser_authentication_submit_param.rbs +63 -0
- data/sig/openai/models/beta/agent_browser_origin_access_param.rbs +47 -0
- data/sig/openai/models/beta/agent_create_params.rbs +5 -1
- data/sig/openai/models/beta/agent_output_item.rbs +254 -0
- data/sig/openai/models/beta/agent_session.rbs +218 -2
- data/sig/openai/models/beta/agent_session_input_param.rbs +51 -1
- data/sig/openai/models/beta/agent_session_item.rbs +362 -0
- data/sig/openai/models/beta/agent_tool.rbs +22 -0
- data/sig/openai/models/beta/agent_tool_param.rbs +25 -0
- data/sig/openai/models/beta/agent_update_params.rbs +5 -1
- data/sig/openai/models/beta/agents/environments/environment_template.rbs +29 -3
- data/sig/openai/models/beta/agents/environments/template_create_params.rbs +41 -6
- data/sig/openai/models/beta/agents/environments/template_update_params.rbs +41 -8
- 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.rbs +29 -3
- data/sig/openai/models/beta/environment_param.rbs +41 -6
- data/sig/openai/models/beta/persisted_agent_tool.rbs +22 -0
- data/sig/openai/models/beta/persisted_agent_tool_param.rbs +25 -0
- 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/environments/templates.rbs +2 -0
- 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 +23 -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
|
|
|
@@ -106,7 +106,8 @@ module OpenAI
|
|
|
106
106
|
OpenAI::Beta::PersistedAgentTool::ToolSearch::OrHash,
|
|
107
107
|
OpenAI::Beta::PersistedAgentTool::ProgrammaticToolCalling::OrHash,
|
|
108
108
|
OpenAI::Beta::PersistedAgentTool::Mcp::OrHash,
|
|
109
|
-
OpenAI::Beta::PersistedAgentTool::WebSearch::OrHash
|
|
109
|
+
OpenAI::Beta::PersistedAgentTool::WebSearch::OrHash,
|
|
110
|
+
OpenAI::Beta::PersistedAgentTool::ComputerUse::OrHash
|
|
110
111
|
)
|
|
111
112
|
],
|
|
112
113
|
|
|
@@ -195,6 +196,7 @@ module OpenAI
|
|
|
195
196
|
FLEX = T.let(:flex, OpenAI::Beta::Agent::ServiceTier::TaggedSymbol)
|
|
196
197
|
PRIORITY = T.let(:priority, OpenAI::Beta::Agent::ServiceTier::TaggedSymbol)
|
|
197
198
|
FAST = T.let(:fast, OpenAI::Beta::Agent::ServiceTier::TaggedSymbol)
|
|
199
|
+
ULTRAFAST = T.let(:ultrafast, OpenAI::Beta::Agent::ServiceTier::TaggedSymbol)
|
|
198
200
|
|
|
199
201
|
sig { override.returns(T::Array[OpenAI::Beta::Agent::ServiceTier::TaggedSymbol]) }
|
|
200
202
|
def self.values
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module OpenAI
|
|
4
|
+
module Models
|
|
5
|
+
|
|
6
|
+
module Beta
|
|
7
|
+
|
|
8
|
+
class AgentBrowserAuthenticationCancelParam < OpenAI::Internal::Type::BaseModel
|
|
9
|
+
|
|
10
|
+
OrHash = T.type_alias do
|
|
11
|
+
T.any(
|
|
12
|
+
OpenAI::Beta::AgentBrowserAuthenticationCancelParam,
|
|
13
|
+
OpenAI::Internal::AnyHash
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
sig { returns(Symbol) }
|
|
18
|
+
attr_accessor :action
|
|
19
|
+
|
|
20
|
+
sig { returns(Symbol) }
|
|
21
|
+
attr_accessor :type
|
|
22
|
+
|
|
23
|
+
sig do
|
|
24
|
+
params(
|
|
25
|
+
|
|
26
|
+
action: Symbol,
|
|
27
|
+
|
|
28
|
+
type: Symbol
|
|
29
|
+
)
|
|
30
|
+
.returns(T.attached_class)
|
|
31
|
+
end
|
|
32
|
+
def self.new(
|
|
33
|
+
|
|
34
|
+
action: :cancel,
|
|
35
|
+
|
|
36
|
+
type: :browser_authentication
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
sig do
|
|
41
|
+
override.returns(
|
|
42
|
+
{action: Symbol, type: Symbol}
|
|
43
|
+
)
|
|
44
|
+
end
|
|
45
|
+
def to_hash
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
end
|