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
@@ -60,6 +60,61 @@ event types arrive as `OpenAI::Responses::UnknownServerEvent`. Preserve or handl
60
60
  them explicitly where your application needs them. Do not assume every event
61
61
  has a response, text delta, or lane ID.
62
62
 
63
+ ## Receive limits
64
+
65
+ The default Responses transport accepts `max_message_bytes`,
66
+ `max_wire_message_bytes`, and `max_message_frames` in `transport_options`.
67
+ Each is an optional positive integer; omitted or `nil` keeps its unlimited default. Choose values
68
+ for your application's legitimate largest message, including images and tool
69
+ results. These are caller budgets, not API limits.
70
+
71
+ ```ruby
72
+ client.responses.connect(
73
+ transport_options: {max_message_bytes: 64 * 1024 * 1024, max_message_frames: 4_096}
74
+ ) do |connection|
75
+ connection.response.create(model: "gpt-5.2", input: "Hello")
76
+ while (event = connection.receive)
77
+ puts event.type
78
+ end
79
+ end
80
+ ```
81
+
82
+ The decoded byte budget (`max_message_bytes`) covers the payload of each complete
83
+ message after decompression, including all its fragments. The optional wire budget
84
+ (`max_wire_message_bytes`) covers data payload bytes before decompression across those
85
+ fragments, excluding frame headers and control frames. A wire budget alone does
86
+ not impose a decoded byte limit. Oversized frame headers are rejected
87
+ before the advertised payload is read (with up to 125 bytes allowed for a legal
88
+ interleaved control frame). The frame budget counts text, binary and continuation
89
+ frames, including empty continuations; ping/pong and close frames don't count.
90
+ Set both when you need to bound both payload and frame-buffer memory.
91
+ Counters reset at the end of each message.
92
+
93
+ To use WebSocket compression with independently bounded wire and decoded sizes:
94
+
95
+ ```ruby
96
+ limits = {
97
+ max_wire_message_bytes: 8 * 1024 * 1024,
98
+ max_message_bytes: 64 * 1024 * 1024,
99
+ max_message_frames: 4_096
100
+ }
101
+ client.responses.connect(transport_options: limits) do |connection|
102
+ connection.response.create(model: "gpt-5.2", input: "Hello")
103
+ while (event = connection.receive)
104
+ puts event.type
105
+ end
106
+ end
107
+ ```
108
+
109
+ The server can still decline compression, in which case both byte budgets apply
110
+ to the uncompressed message. Existing byte-only configurations continue to
111
+ decline compression, as before; no-limit and frame-only configurations retain
112
+ their normal compression negotiation.
113
+ Exceeding any chosen limit aborts the socket, releases its pool slot, and
114
+ raises `OpenAI::Errors::ResponsesConnectionError`; no requests are replayed.
115
+ Managed sessions accept the same `transport_options`. An injected transport
116
+ still receives its options unchanged and owns their meaning.
117
+
63
118
  ## Managed sessions
64
119
 
65
120
  `OpenAI::Responses::Session.open` adds routed lanes and final-response collection
@@ -0,0 +1,42 @@
1
+ module OpenAI
2
+ module Models
3
+ module Live
4
+ class TranscriptGrouper
5
+ type speaker = :user | :assistant
6
+ type close_reason =
7
+ :speaker_change
8
+ | :inactivity
9
+ | :timestamp_reset
10
+ | :session_closed
11
+ | :manual
12
+
13
+ class Segment < Data
14
+ attr_reader id: String
15
+ attr_reader previous_id: String?
16
+ attr_reader speaker: TranscriptGrouper::speaker
17
+ attr_reader text: String
18
+ attr_reader start_ms: Integer
19
+ attr_reader end_ms: Integer
20
+ end
21
+
22
+ class ClosedSegment < Data
23
+ attr_reader segment: Segment
24
+ attr_reader reason: TranscriptGrouper::close_reason
25
+ end
26
+
27
+ def initialize: (
28
+ ?on_segment_updated: (^(Segment) -> void)?,
29
+ ?on_segment_closed: (^(ClosedSegment) -> void)?,
30
+ ?min_turn_separation_ms: Integer | Float,
31
+ ?assistant_silence_ms: Integer | Float,
32
+ ?backchannel_max_duration_ms: Integer | Float,
33
+ ?backchannel_isolation_ms: Integer | Float,
34
+ ?additional_acknowledgments: Array[String]
35
+ ) -> void
36
+
37
+ def push: (top event) -> void
38
+ def close: -> void
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,152 @@
1
+ module OpenAI
2
+ class Client
3
+ # @api private
4
+ def with_live_websocket_connection_request: (
5
+ ?path: String | ::Array[String],
6
+ ?query: ::Hash[String, String],
7
+ ?websocket_base_url: String?,
8
+ ?options: OpenAI::request_opts?
9
+ ) {
10
+ (
11
+ OpenAI::Internal::Transport::BaseClient::request_input request,
12
+ ^-> void mark_handshake_completed
13
+ ) -> top
14
+ } -> top
15
+ end
16
+
17
+ module Errors
18
+ class LiveConnectionError < OpenAI::Errors::WebSocketConnectionError
19
+ end
20
+ class LiveProtocolError < OpenAI::Errors::WebSocketProtocolError
21
+ def initialize: -> void
22
+ end
23
+ end
24
+
25
+ module Models
26
+ module Live
27
+ type connection_server_event =
28
+ OpenAI::Models::Live::server_event | OpenAI::Live::UnknownServerEvent
29
+ type connection_client_event =
30
+ OpenAI::Models::Live::client_event | ::Hash[Symbol | String, untyped]
31
+ type fork_connection_server_event =
32
+ OpenAI::Models::Live::fork_server_event
33
+ | OpenAI::Live::UnknownServerEvent
34
+ type fork_connection_client_event =
35
+ OpenAI::Models::Live::fork_client_event
36
+ | ::Hash[Symbol | String, untyped]
37
+ type sideband_connection_client_event =
38
+ OpenAI::Models::Live::SessionUpdateEvent
39
+ | OpenAI::Models::Live::InputAudioMuteEvent
40
+ | OpenAI::Models::Live::InputAudioUnmuteEvent
41
+ | OpenAI::Models::Live::InstructionsAppendEvent
42
+ | OpenAI::Models::Live::ThinkingAppendEvent
43
+ | OpenAI::Models::Live::CommentaryAppendEvent
44
+ | OpenAI::Models::Live::ResponseItemCreateEvent
45
+ | OpenAI::Models::Live::ResponseCreateEvent
46
+ | OpenAI::Models::Live::SessionCloseEvent
47
+ | ::Hash[Symbol | String, untyped]
48
+
49
+ class UnknownServerEvent
50
+ attr_reader type: Symbol
51
+ attr_reader data: ::Hash[Symbol | String, untyped]
52
+ def initialize: (data: ::Hash[Symbol | String, untyped]) -> void
53
+ def to_h: -> ::Hash[(Symbol | String), untyped]
54
+ def inspect: -> String
55
+ alias to_s inspect
56
+ end
57
+ class Connection
58
+ include Enumerable[OpenAI::Models::Live::connection_server_event]
59
+ attr_reader url: URI::Generic
60
+ def initialize: (socket: top, url: URI::Generic) -> void
61
+ def each:
62
+ -> Enumerator[OpenAI::Models::Live::connection_server_event, self]
63
+ | {
64
+ (OpenAI::Models::Live::connection_server_event event) -> void
65
+ } -> self
66
+ def receive: -> OpenAI::Models::Live::connection_server_event?
67
+ def receive_raw: -> String?
68
+ def send_event: (
69
+ OpenAI::Models::Live::connection_client_event event
70
+ ) -> nil
71
+ def send_raw: (String data) -> nil
72
+ def close: (?code: Integer, ?reason: String) -> nil
73
+ def abort: -> nil
74
+ def closed?: -> bool
75
+ end
76
+ class SidebandConnection
77
+ include Enumerable[OpenAI::Models::Live::connection_server_event]
78
+ attr_reader url: URI::Generic
79
+ def initialize: (socket: top, url: URI::Generic) -> void
80
+ def each:
81
+ -> Enumerator[OpenAI::Models::Live::connection_server_event, self]
82
+ | {
83
+ (OpenAI::Models::Live::connection_server_event event) -> void
84
+ } -> self
85
+ def receive: -> OpenAI::Models::Live::connection_server_event?
86
+ def receive_raw: -> String?
87
+ def send_event: (
88
+ OpenAI::Models::Live::sideband_connection_client_event event
89
+ ) -> nil
90
+ def send_raw: (String data) -> nil
91
+ def close: (?code: Integer, ?reason: String) -> nil
92
+ def abort: -> nil
93
+ def closed?: -> bool
94
+ end
95
+ class ForkConnection
96
+ include Enumerable[OpenAI::Models::Live::fork_connection_server_event]
97
+ attr_reader url: URI::Generic
98
+ def initialize: (socket: top, url: URI::Generic) -> void
99
+ def each:
100
+ -> Enumerator[OpenAI::Models::Live::fork_connection_server_event, self]
101
+ | {
102
+ (OpenAI::Models::Live::fork_connection_server_event event) -> void
103
+ } -> self
104
+ def receive: -> OpenAI::Models::Live::fork_connection_server_event?
105
+ def receive_raw: -> String?
106
+ def send_event: (
107
+ OpenAI::Models::Live::fork_connection_client_event event
108
+ ) -> nil
109
+ def send_raw: (String data) -> nil
110
+ def close: (?code: Integer, ?reason: String) -> nil
111
+ def abort: -> nil
112
+ def closed?: -> bool
113
+ end
114
+ end
115
+ end
116
+
117
+ module Resources
118
+ class Live
119
+ def connect: [T] (
120
+ ?websocket_base_url: String?,
121
+ ?request_options: OpenAI::request_opts?,
122
+ ?transport: top,
123
+ ?transport_options: ::Hash[Symbol, top]
124
+ ) {
125
+ (OpenAI::Live::Connection connection) -> T
126
+ } -> T
127
+ class Sideband
128
+ def connect: [T] (
129
+ String session_id,
130
+ ?graceful_close: bool?,
131
+ ?websocket_base_url: String?,
132
+ ?request_options: OpenAI::request_opts?,
133
+ ?transport: top,
134
+ ?transport_options: ::Hash[Symbol, top]
135
+ ) {
136
+ (OpenAI::Live::SidebandConnection connection) -> T
137
+ } -> T
138
+ end
139
+ class Forks
140
+ def connect: [T] (
141
+ String session_id,
142
+ ?websocket_base_url: String?,
143
+ ?request_options: OpenAI::request_opts?,
144
+ ?transport: top,
145
+ ?transport_options: ::Hash[Symbol, top]
146
+ ) {
147
+ (OpenAI::Live::ForkConnection connection) -> T
148
+ } -> T
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,81 @@
1
+ module OpenAI
2
+ class Client
3
+ # @api private
4
+ def with_translation_connection_request: (
5
+ model: String,
6
+ ?websocket_base_url: String?,
7
+ ?options: OpenAI::request_opts?
8
+ ) {
9
+ (
10
+ OpenAI::Internal::Transport::BaseClient::request_input request,
11
+ ^-> void mark_handshake_completed
12
+ ) -> top
13
+ } -> top
14
+ end
15
+
16
+ module Errors
17
+ class TranslationConnectionError < OpenAI::Errors::WebSocketConnectionError
18
+ end
19
+ class TranslationProtocolError < OpenAI::Errors::WebSocketProtocolError
20
+ def initialize: -> void
21
+ end
22
+ end
23
+
24
+ module Models
25
+ module Realtime
26
+ type translation_connection_server_event =
27
+ OpenAI::Models::Realtime::realtime_translation_server_event
28
+ | OpenAI::Realtime::UnknownTranslationServerEvent
29
+ type translation_connection_client_event =
30
+ OpenAI::Models::Realtime::realtime_translation_client_event
31
+ | ::Hash[Symbol | String, untyped]
32
+
33
+ class UnknownTranslationServerEvent < OpenAI::Realtime::UnknownServerEvent
34
+ def inspect: -> String
35
+ alias to_s inspect
36
+ end
37
+ class TranslationConnection
38
+ include Enumerable[OpenAI::Models::Realtime::translation_connection_server_event]
39
+ attr_reader url: URI::Generic
40
+ def initialize: (socket: top, url: URI::Generic) -> void
41
+ def each:
42
+ -> Enumerator[OpenAI::Models::Realtime::translation_connection_server_event, self]
43
+ | {
44
+ (
45
+ OpenAI::Models::Realtime::translation_connection_server_event event
46
+ ) -> void
47
+ } -> self
48
+ def receive: -> OpenAI::Models::Realtime::translation_connection_server_event?
49
+ def receive_raw: -> String?
50
+ def send_event: (
51
+ OpenAI::Models::Realtime::translation_connection_client_event event
52
+ ) -> nil
53
+ def finish: (
54
+ timeout: Numeric
55
+ ) {
56
+ (
57
+ OpenAI::Models::Realtime::translation_connection_server_event event
58
+ ) -> void
59
+ } -> OpenAI::Realtime::RealtimeTranslationSessionClosedEvent
60
+ def send_raw: (String data) -> nil
61
+ def close: (?code: Integer, ?reason: String) -> nil
62
+ def abort: -> nil
63
+ def closed?: -> bool
64
+ end
65
+ end
66
+ end
67
+
68
+ module Resources
69
+ class Realtime
70
+ def connect_translation: [T] (
71
+ model: String,
72
+ ?websocket_base_url: String?,
73
+ ?request_options: OpenAI::request_opts?,
74
+ ?transport: top,
75
+ ?transport_options: ::Hash[Symbol, top]
76
+ ) {
77
+ (OpenAI::Realtime::TranslationConnection connection) -> T
78
+ } -> T
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,14 @@
1
+ module OpenAI
2
+ module Models
3
+ module Responses
4
+ class IncrementalResponse
5
+ attr_reader phase: (:provisional | :unavailable | :terminal)?
6
+ def initialize: -> void
7
+ def output: -> Array[(response_output_item | Hash[Symbol, untyped])]?
8
+ def terminal_event: -> connection_server_event?
9
+ def add: (connection_server_event event) -> void
10
+ def reset: -> void
11
+ end
12
+ end
13
+ end
14
+ end
@@ -3,6 +3,27 @@ module OpenAI
3
3
  module Responses
4
4
  module Transports
5
5
  class AsyncWebSocket
6
+ # @api private
7
+ module PeekableFramer
8
+ # @api private
9
+ def next_frame_compressed?: -> bool
10
+ end
11
+
12
+ # @api private
13
+ class BoundedFramer
14
+ # @api private
15
+ def compression_negotiated=: (bool value) -> bool
16
+ end
17
+
18
+ # @api private
19
+ module BoundedInflate
20
+ # @api private
21
+ def bound_decoded_messages: (
22
+ Integer max_bytes,
23
+ BoundedFramer framer
24
+ ) -> void
25
+ end
26
+
6
27
  def initialize: -> void
7
28
  def open: (
8
29
  url: URI::Generic,
@@ -98,6 +98,15 @@ module OpenAI
98
98
  def get_final_response: -> OpenAI::Responses::Response
99
99
  def get_output_text: -> String
100
100
  end
101
+
102
+ # @api private
103
+ class ResponseStreamState
104
+ def initialize: (
105
+ text_format: untyped,
106
+ ?starting_after: Integer?
107
+ ) -> void
108
+ def accumulate_output: (untyped event, Array[untyped] items) -> void
109
+ end
101
110
  end
102
111
  end
103
112
  end
@@ -9,6 +9,7 @@ module OpenAI
9
9
  type coerce_state =
10
10
  {
11
11
  translate_names: bool,
12
+ request_only: bool,
12
13
  strictness: bool,
13
14
  exactness: { yes: Integer, no: Integer, maybe: Integer },
14
15
  error: StandardError?,
@@ -57,7 +58,8 @@ module OpenAI
57
58
  ) -> ::Hash[Symbol, top]
58
59
 
59
60
  def self.new_coerce_state: (
60
- ?translate_names: bool
61
+ ?translate_names: bool,
62
+ ?request_only: bool
61
63
  ) -> OpenAI::Internal::Type::Converter::coerce_state
62
64
 
63
65
  def self.coerce: (
@@ -136,6 +136,9 @@ module OpenAI
136
136
  | :verse
137
137
  | :marin
138
138
  | :cedar
139
+ | :fable
140
+ | :onyx
141
+ | :nova
139
142
  | OpenAI::Audio::SpeechCreateParams::Voice::ID
140
143
 
141
144
  module Voice
@@ -166,6 +169,9 @@ module OpenAI
166
169
  VERSE: :verse
167
170
  MARIN: :marin
168
171
  CEDAR: :cedar
172
+ FABLE: :fable
173
+ ONYX: :onyx
174
+ NOVA: :nova
169
175
  end
170
176
 
171
177
  type response_format = :mp3 | :opus | :aac | :flac | :wav | :pcm
@@ -5,6 +5,7 @@ module OpenAI
5
5
  OpenAI::Audio::Transcription
6
6
  | OpenAI::Audio::TranscriptionDiarized
7
7
  | OpenAI::Audio::TranscriptionVerbose
8
+ | StringIO
8
9
 
9
10
  module TranscriptionCreateResponse
10
11
  extend OpenAI::Internal::Type::Union
@@ -2,7 +2,9 @@ module OpenAI
2
2
  module Models
3
3
  module Audio
4
4
  type translation_create_response =
5
- OpenAI::Audio::Translation | OpenAI::Audio::TranslationVerbose
5
+ OpenAI::Audio::Translation
6
+ | OpenAI::Audio::TranslationVerbose
7
+ | StringIO
6
8
 
7
9
  module TranslationCreateResponse
8
10
  extend OpenAI::Internal::Type::Union
@@ -118,7 +118,8 @@ module OpenAI
118
118
  updated_at: Integer
119
119
  }
120
120
 
121
- type service_tier = :auto | :default | :flex | :priority | :fast
121
+ type service_tier =
122
+ :auto | :default | :flex | :priority | :fast | :ultrafast
122
123
 
123
124
  module ServiceTier
124
125
  extend OpenAI::Internal::Type::Enum
@@ -128,6 +129,7 @@ module OpenAI
128
129
  FLEX: :flex
129
130
  PRIORITY: :priority
130
131
  FAST: :fast
132
+ ULTRAFAST: :ultrafast
131
133
 
132
134
  def self?.values: -> ::Array[OpenAI::Models::Beta::Agent::service_tier]
133
135
  end
@@ -98,7 +98,8 @@ module OpenAI
98
98
  ?request_options: OpenAI::RequestOptions
99
99
  }
100
100
 
101
- type service_tier = :auto | :default | :flex | :priority | :fast
101
+ type service_tier =
102
+ :auto | :default | :flex | :priority | :fast | :ultrafast
102
103
 
103
104
  module ServiceTier
104
105
  extend OpenAI::Internal::Type::Enum
@@ -118,6 +119,9 @@ module OpenAI
118
119
  # Uses the fast service tier.
119
120
  FAST: :fast
120
121
 
122
+ # Uses the ultrafast service tier.
123
+ ULTRAFAST: :ultrafast
124
+
121
125
  def self?.values: -> ::Array[OpenAI::Models::Beta::AgentCreateParams::service_tier]
122
126
  end
123
127
  end
@@ -195,7 +195,8 @@ module OpenAI
195
195
  tools: ::Array[OpenAI::Models::Beta::agent_tool]
196
196
  }
197
197
 
198
- type service_tier = :auto | :default | :flex | :priority | :fast
198
+ type service_tier =
199
+ :auto | :default | :flex | :priority | :fast | :ultrafast
199
200
 
200
201
  module ServiceTier
201
202
  extend OpenAI::Internal::Type::Enum
@@ -205,6 +206,7 @@ module OpenAI
205
206
  FLEX: :flex
206
207
  PRIORITY: :priority
207
208
  FAST: :fast
209
+ ULTRAFAST: :ultrafast
208
210
 
209
211
  def self?.values: -> ::Array[OpenAI::Models::Beta::AgentSession::Agent::service_tier]
210
212
  end
@@ -106,7 +106,8 @@ module OpenAI
106
106
  ?request_options: OpenAI::RequestOptions
107
107
  }
108
108
 
109
- type service_tier = :auto | :default | :flex | :priority | :fast
109
+ type service_tier =
110
+ :auto | :default | :flex | :priority | :fast | :ultrafast
110
111
 
111
112
  module ServiceTier
112
113
  extend OpenAI::Internal::Type::Enum
@@ -126,6 +127,9 @@ module OpenAI
126
127
  # Uses the fast service tier.
127
128
  FAST: :fast
128
129
 
130
+ # Uses the ultrafast service tier.
131
+ ULTRAFAST: :ultrafast
132
+
129
133
  def self?.values: -> ::Array[OpenAI::Models::Beta::AgentUpdateParams::service_tier]
130
134
  end
131
135
  end
@@ -35,7 +35,7 @@ module OpenAI
35
35
  attr_accessor name: String?
36
36
 
37
37
  # Network access policy for the environment. Defaults to disabled for GA requests
38
- # and enabled for alpha/beta requests.
38
+ # and enabled for beta requests.
39
39
  attr_accessor network: OpenAI::Beta::Agents::Environments::TemplateCreateParams::Network?
40
40
 
41
41
  # Packages to install in the environment. Defaults to empty package lists.
@@ -62,7 +62,7 @@ module OpenAI
62
62
  # An optional human-readable display name for the template.
63
63
  # @param network
64
64
  # Network access policy for the environment. Defaults to disabled for GA requests
65
- # and enabled for alpha/beta requests.
65
+ # and enabled for beta requests.
66
66
  # @param packages
67
67
  # Packages to install in the environment. Defaults to empty package lists.
68
68
  # @param plugins
@@ -37,8 +37,8 @@ module OpenAI
37
37
  attr_accessor name: String?
38
38
 
39
39
  # Network access available after setup completes. Omit to preserve the current
40
- # policy, or pass `null` to reset to disabled for GA requests or enabled for
41
- # alpha/beta requests.
40
+ # policy, or pass `null` to reset to disabled for GA requests or enabled for beta
41
+ # requests.
42
42
  attr_accessor network: OpenAI::Beta::Agents::Environments::TemplateUpdateParams::Network?
43
43
 
44
44
  # Packages installed before the runtime network policy applies.
@@ -63,8 +63,8 @@ module OpenAI
63
63
  # A replacement human-readable display name, or `null` to clear the name.
64
64
  # @param network
65
65
  # Network access available after setup completes. Omit to preserve the current
66
- # policy, or pass `null` to reset to disabled for GA requests or enabled for
67
- # alpha/beta requests.
66
+ # policy, or pass `null` to reset to disabled for GA requests or enabled for beta
67
+ # requests.
68
68
  # @param packages
69
69
  # Packages installed before the runtime network policy applies.
70
70
  # @param plugins
@@ -163,7 +163,8 @@ module OpenAI
163
163
  ?tools: ::Array[OpenAI::Models::Beta::agent_tool_param]?
164
164
  }
165
165
 
166
- type service_tier = :auto | :default | :flex | :priority | :fast
166
+ type service_tier =
167
+ :auto | :default | :flex | :priority | :fast | :ultrafast
167
168
 
168
169
  module ServiceTier
169
170
  extend OpenAI::Internal::Type::Enum
@@ -183,6 +184,9 @@ module OpenAI
183
184
  # Uses the fast service tier.
184
185
  FAST: :fast
185
186
 
187
+ # Uses the ultrafast service tier.
188
+ ULTRAFAST: :ultrafast
189
+
186
190
  def self?.values: -> ::Array[OpenAI::Models::Beta::Agents::SessionCreateParams::Agent::service_tier]
187
191
  end
188
192
  end
@@ -129,7 +129,8 @@ module OpenAI
129
129
  end
130
130
  end
131
131
 
132
- type service_tier = :auto | :default | :flex | :priority | :fast
132
+ type service_tier =
133
+ :auto | :default | :flex | :priority | :fast | :ultrafast
133
134
 
134
135
  module ServiceTier
135
136
  extend OpenAI::Internal::Type::Enum
@@ -149,6 +150,9 @@ module OpenAI
149
150
  # Uses the fast service tier.
150
151
  FAST: :fast
151
152
 
153
+ # Uses the ultrafast service tier.
154
+ ULTRAFAST: :ultrafast
155
+
152
156
  def self?.values: -> ::Array[OpenAI::Models::Beta::Agents::SessionUpdateParams::Agent::service_tier]
153
157
  end
154
158
  end
@@ -8,6 +8,7 @@ module OpenAI
8
8
  id: String,
9
9
  auth: OpenAI::Models::Beta::Agents::Vaults::credential_auth,
10
10
  created_at: Integer,
11
+ metadata: ::Hash[Symbol, String],
11
12
  name: String,
12
13
  ?object: :"vault.credential",
13
14
  updated_at: Integer,
@@ -24,6 +25,9 @@ module OpenAI
24
25
  # The Unix timestamp, in seconds, when the credential was created.
25
26
  attr_accessor created_at: Integer
26
27
 
28
+ # Application-defined key-value pairs associated with this credential.
29
+ attr_accessor metadata: ::Hash[Symbol, String]
30
+
27
31
  # The human-readable name of the credential.
28
32
  attr_accessor name: String
29
33
 
@@ -42,6 +46,8 @@ module OpenAI
42
46
  # The authentication method and non-secret configuration of the credential.
43
47
  # @param created_at
44
48
  # The Unix timestamp, in seconds, when the credential was created.
49
+ # @param metadata
50
+ # Application-defined key-value pairs associated with this credential.
45
51
  # @param name
46
52
  # The human-readable name of the credential.
47
53
  # @param updated_at
@@ -54,6 +60,7 @@ module OpenAI
54
60
  id: String,
55
61
  auth: OpenAI::Models::Beta::Agents::Vaults::credential_auth,
56
62
  created_at: Integer,
63
+ metadata: ::Hash[Symbol, String],
57
64
  name: String,
58
65
  updated_at: Integer,
59
66
  vault_id: String,
@@ -64,6 +71,7 @@ module OpenAI
64
71
  id: String,
65
72
  auth: OpenAI::Models::Beta::Agents::Vaults::credential_auth,
66
73
  created_at: Integer,
74
+ metadata: ::Hash[Symbol, String],
67
75
  name: String,
68
76
  ?object: :"vault.credential",
69
77
  updated_at: Integer,