openai 0.90.0 → 0.91.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 (85) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -0
  3. data/README.md +1 -1
  4. data/examples/realtime/README.md +8 -0
  5. data/examples/realtime/browser/README.md +167 -0
  6. data/examples/realtime/browser/index.html +19 -0
  7. data/examples/realtime/browser/page.js +21 -0
  8. data/examples/realtime/browser/peer.js +180 -0
  9. data/examples/realtime/browser/server.rb +281 -0
  10. data/examples/responses/websocket_workflows.rb +66 -6
  11. data/lib/openai/auth/workload_identity.rb +5 -1
  12. data/lib/openai/auth/workload_identity_auth.rb +2 -2
  13. data/lib/openai/auth/x509_token_exchange.rb +1 -1
  14. data/lib/openai/helpers/local_audio/process.rb +1 -1
  15. data/lib/openai/helpers/responses_websocket/connection.rb +2 -1
  16. data/lib/openai/helpers/responses_websocket/session.rb +551 -0
  17. data/lib/openai/helpers/responses_websocket.rb +1 -0
  18. data/lib/openai/helpers/sorbet.rb +1 -1
  19. data/lib/openai/helpers/websocket/async_websocket_transport.rb +6 -1
  20. data/lib/openai/internal/poller.rb +2 -2
  21. data/lib/openai/internal/transport/base_client.rb +1 -1
  22. data/lib/openai/internal/util.rb +1 -1
  23. data/lib/openai/models/beta/agents/session_update_params.rb +108 -1
  24. data/lib/openai/models/beta/beta_response.rb +9 -3
  25. data/lib/openai/models/beta/beta_response_compaction_compacting_event.rb +75 -0
  26. data/lib/openai/models/beta/beta_response_stream_event.rb +4 -1
  27. data/lib/openai/models/beta/beta_responses_client_event.rb +25 -4
  28. data/lib/openai/models/beta/beta_responses_server_event.rb +39 -1
  29. data/lib/openai/models/beta/response_compact_params.rb +9 -3
  30. data/lib/openai/models/beta/response_create_params.rb +21 -4
  31. data/lib/openai/models/beta/session_turn_error.rb +3 -0
  32. data/lib/openai/models/chat_model.rb +3 -1
  33. data/lib/openai/models/responses/response_compact_params.rb +9 -3
  34. data/lib/openai/models/responses/response_compaction_compacting_event.rb +49 -0
  35. data/lib/openai/models/responses/response_create_params.rb +12 -1
  36. data/lib/openai/models/responses/response_stream_event.rb +4 -1
  37. data/lib/openai/models/responses/responses_client_event.rb +12 -1
  38. data/lib/openai/models/responses/responses_server_event.rb +36 -1
  39. data/lib/openai/models/webhooks/realtime_call_incoming_webhook_event.rb +6 -8
  40. data/lib/openai/resources/beta/agents/sessions.rb +6 -2
  41. data/lib/openai/resources/beta/responses.rb +2 -2
  42. data/lib/openai/resources/responses.rb +2 -2
  43. data/lib/openai/version.rb +1 -1
  44. data/lib/openai.rb +2 -0
  45. data/rbi/openai/helpers/responses_websocket/connection.rbi +5 -0
  46. data/rbi/openai/helpers/responses_websocket/session.rbi +206 -0
  47. data/rbi/openai/models/beta/agents/session_update_params.rbi +178 -0
  48. data/rbi/openai/models/beta/beta_response.rbi +6 -1
  49. data/rbi/openai/models/beta/beta_response_compaction_compacting_event.rbi +136 -0
  50. data/rbi/openai/models/beta/beta_response_stream_event.rbi +1 -0
  51. data/rbi/openai/models/beta/beta_responses_client_event.rbi +27 -4
  52. data/rbi/openai/models/beta/beta_responses_server_event.rbi +77 -0
  53. data/rbi/openai/models/beta/response_compact_params.rbi +6 -1
  54. data/rbi/openai/models/beta/response_create_params.rbi +21 -1
  55. data/rbi/openai/models/beta/session_turn_error.rbi +6 -0
  56. data/rbi/openai/models/chat_model.rbi +3 -1
  57. data/rbi/openai/models/responses/response_compact_params.rbi +6 -1
  58. data/rbi/openai/models/responses/response_compaction_compacting_event.rbi +78 -0
  59. data/rbi/openai/models/responses/response_create_params.rbi +15 -0
  60. data/rbi/openai/models/responses/response_stream_event.rbi +1 -0
  61. data/rbi/openai/models/responses/responses_client_event.rbi +15 -0
  62. data/rbi/openai/models/responses/responses_server_event.rbi +71 -0
  63. data/rbi/openai/models/webhooks/realtime_call_incoming_webhook_event.rbi +6 -8
  64. data/rbi/openai/resources/beta/agents/sessions.rbi +5 -1
  65. data/responses-websocket.md +117 -10
  66. data/sig/openai/helpers/responses_websocket/connection.rbs +5 -0
  67. data/sig/openai/helpers/responses_websocket/session.rbs +123 -0
  68. data/sig/openai/models/beta/agents/session_update_params.rbs +99 -0
  69. data/sig/openai/models/beta/beta_response.rbs +6 -2
  70. data/sig/openai/models/beta/beta_response_compaction_compacting_event.rbs +58 -0
  71. data/sig/openai/models/beta/beta_response_stream_event.rbs +1 -0
  72. data/sig/openai/models/beta/beta_responses_client_event.rbs +13 -2
  73. data/sig/openai/models/beta/beta_responses_server_event.rbs +35 -0
  74. data/sig/openai/models/beta/response_compact_params.rbs +6 -2
  75. data/sig/openai/models/beta/response_create_params.rbs +13 -2
  76. data/sig/openai/models/beta/session_turn_error.rbs +4 -0
  77. data/sig/openai/models/chat_model.rbs +6 -2
  78. data/sig/openai/models/responses/response_compact_params.rbs +6 -2
  79. data/sig/openai/models/responses/response_compaction_compacting_event.rbs +37 -0
  80. data/sig/openai/models/responses/response_create_params.rbs +7 -0
  81. data/sig/openai/models/responses/response_stream_event.rbs +1 -0
  82. data/sig/openai/models/responses/responses_client_event.rbs +7 -0
  83. data/sig/openai/models/responses/responses_server_event.rbs +32 -0
  84. data/sig/openai/resources/beta/agents/sessions.rbs +1 -0
  85. metadata +16 -2
@@ -0,0 +1,206 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Responses
6
+ class SessionError < OpenAI::Errors::Error
7
+ sig { returns(NilClass) }
8
+ def cause
9
+ end
10
+ end
11
+
12
+ class BufferError < SessionError
13
+ end
14
+
15
+ class StateLostError < SessionError
16
+ end
17
+
18
+ class RequestError < SessionError
19
+ sig { returns(Connection::ServerEvent) }
20
+ attr_reader :event
21
+
22
+ # @api private
23
+ sig { params(event: Connection::ServerEvent).returns(T.attached_class) }
24
+ def self.new(event)
25
+ end
26
+ end
27
+
28
+ class SessionLimits
29
+ sig { returns(Integer) }
30
+ attr_reader :max_lanes, :max_events_per_lane, :max_events, :max_bytes_per_lane, :max_bytes, :max_response_bytes
31
+
32
+ sig do
33
+ params(
34
+ max_lanes: Integer,
35
+ max_events_per_lane: Integer,
36
+ max_events: Integer,
37
+ max_bytes_per_lane: Integer,
38
+ max_bytes: Integer,
39
+ max_response_bytes: Integer
40
+ )
41
+ .returns(T.attached_class)
42
+ end
43
+ def self.new(
44
+ max_lanes:,
45
+ max_events_per_lane:,
46
+ max_events:,
47
+ max_bytes_per_lane:,
48
+ max_bytes:,
49
+ max_response_bytes:
50
+ )
51
+ end
52
+ end
53
+
54
+ class SessionLane
55
+ sig { returns(T.nilable(String)) }
56
+ attr_reader :stream_id
57
+
58
+ sig { params(event: Connection::ClientEvent).void }
59
+ def send_event(event)
60
+ end
61
+
62
+ sig { returns(Connection::ServerEvent) }
63
+ def receive
64
+ end
65
+
66
+ sig { returns(OpenAI::Responses::Response) }
67
+ def get_final_response
68
+ end
69
+
70
+ sig { void }
71
+ def close
72
+ end
73
+
74
+ # @api private
75
+ sig {
76
+ params(session: Session, stream_id: T.nilable(String), pending_steers: T::Hash[String, T.untyped]).returns(
77
+ T.attached_class
78
+ )
79
+ }
80
+ def self.new(session, stream_id, pending_steers)
81
+ end
82
+
83
+ # @api private
84
+ sig {
85
+ params(event: Connection::ServerEvent, bytes: Integer, raw_command_sent: T::Boolean).returns(
86
+ T.nilable(T::Boolean)
87
+ )
88
+ }
89
+ def enqueue(event, bytes, raw_command_sent = false)
90
+ end
91
+
92
+ # @api private
93
+ sig { params(error: T.nilable(Exception)).void }
94
+ def discard(error = nil)
95
+ end
96
+
97
+ # @api private
98
+ sig { void }
99
+ def wake
100
+ end
101
+ end
102
+
103
+ class Session
104
+ sig { returns(SessionLimits) }
105
+ attr_reader :limits
106
+
107
+ sig { returns(SessionLane) }
108
+ attr_reader :default
109
+
110
+ sig do
111
+ type_parameters(:Result)
112
+ .params(
113
+ client: OpenAI::Client,
114
+ limits: SessionLimits,
115
+ request_options: T.nilable(OpenAI::RequestOptions::OrHash),
116
+ websocket_base_url: T.nilable(String),
117
+ transport: T.anything,
118
+ transport_options: T::Hash[Symbol, T.anything],
119
+ block: T.proc.params(session: Session).returns(T.type_parameter(:Result))
120
+ )
121
+ .returns(T.type_parameter(:Result))
122
+ end
123
+ def self.open(
124
+ client:,
125
+ limits:,
126
+ request_options: nil,
127
+ websocket_base_url: nil,
128
+ transport: nil,
129
+ transport_options: {},
130
+ &block
131
+ )
132
+ end
133
+
134
+ sig { params(stream_id: T.nilable(String)).returns(SessionLane) }
135
+ def lane(stream_id)
136
+ end
137
+
138
+ sig do
139
+ params(
140
+ restore: T.proc.params(session: Session).returns(T.anything),
141
+ client: OpenAI::Client,
142
+ request_options: T.nilable(OpenAI::RequestOptions::OrHash)
143
+ )
144
+ .returns(T.self_type)
145
+ end
146
+ def reconnect(restore:, client: T.unsafe(nil), request_options: nil)
147
+ end
148
+
149
+ sig { void }
150
+ def close
151
+ end
152
+
153
+ # @api private
154
+ sig {
155
+ params(
156
+ task: T.untyped,
157
+ client: OpenAI::Client,
158
+ limits: SessionLimits,
159
+ request_options: T.nilable(OpenAI::RequestOptions::OrHash),
160
+ websocket_base_url: T.nilable(String),
161
+ transport: T.anything,
162
+ transport_options: T::Hash[Symbol, T.anything]
163
+ )
164
+ .returns(T.attached_class)
165
+ }
166
+ def self.new(task:, client:, limits:, request_options:, websocket_base_url:, transport:, transport_options:)
167
+ end
168
+
169
+ # @api private
170
+ sig { void }
171
+ def start
172
+ end
173
+
174
+ # @api private
175
+ sig { params(event: Connection::ClientEvent).returns(OpenAI::Internal::AnyHash) }
176
+ def encode_client_event(event)
177
+ end
178
+
179
+ # @api private
180
+ sig { params(event: Connection::ClientEvent).void }
181
+ def send_event(event)
182
+ end
183
+
184
+ # @api private
185
+ sig { void }
186
+ def check_reader!
187
+ end
188
+
189
+ # @api private
190
+ sig { void }
191
+ def assert_owner!
192
+ end
193
+
194
+ # @api private
195
+ sig { params(bytes: Integer).void }
196
+ def consumed(bytes)
197
+ end
198
+
199
+ # @api private
200
+ sig { params(value: SessionLane).void }
201
+ def detach(value)
202
+ end
203
+ end
204
+ end
205
+ end
206
+ end
@@ -22,6 +22,13 @@ module OpenAI
22
22
  sig { returns(String) }
23
23
  attr_accessor :session_id
24
24
 
25
+ # Model settings for subsequent turns. Omitted fields stay unchanged.
26
+ sig { returns(T.nilable(OpenAI::Beta::Agents::SessionUpdateParams::Agent)) }
27
+ attr_reader :agent
28
+
29
+ sig { params(agent: OpenAI::Beta::Agents::SessionUpdateParams::Agent::OrHash).void }
30
+ attr_writer :agent
31
+
25
32
  # Replaces all metadata. Omit to leave unchanged, or pass null or {} to clear it.
26
33
  # Up to 16 string key-value pairs, with keys up to 64 and values up to 512
27
34
  # characters.
@@ -33,6 +40,8 @@ module OpenAI
33
40
 
34
41
  session_id: String,
35
42
 
43
+ agent: OpenAI::Beta::Agents::SessionUpdateParams::Agent::OrHash,
44
+
36
45
  metadata: T.nilable(T::Hash[Symbol, String]),
37
46
 
38
47
  request_options: OpenAI::RequestOptions::OrHash
@@ -43,6 +52,9 @@ module OpenAI
43
52
 
44
53
  session_id:,
45
54
 
55
+ # Model settings for subsequent turns. Omitted fields stay unchanged.
56
+ agent: nil,
57
+
46
58
  # Replaces all metadata. Omit to leave unchanged, or pass null or {} to clear it.
47
59
  # Up to 16 string key-value pairs, with keys up to 64 and values up to 512
48
60
  # characters.
@@ -56,6 +68,7 @@ module OpenAI
56
68
  override.returns(
57
69
  {
58
70
  session_id: String,
71
+ agent: OpenAI::Beta::Agents::SessionUpdateParams::Agent,
59
72
  metadata: T.nilable(T::Hash[Symbol, String]),
60
73
  request_options: OpenAI::RequestOptions
61
74
  }
@@ -64,6 +77,171 @@ module OpenAI
64
77
  def to_hash
65
78
  end
66
79
 
80
+ class Agent < OpenAI::Internal::Type::BaseModel
81
+ OrHash = T.type_alias do
82
+ T.any(
83
+ OpenAI::Beta::Agents::SessionUpdateParams::Agent,
84
+ OpenAI::Internal::AnyHash
85
+ )
86
+ end
87
+
88
+ # The model for subsequent turns. Omit to keep the current model.
89
+ sig { returns(T.nilable(String)) }
90
+ attr_reader :model
91
+
92
+ sig { params(model: String).void }
93
+ attr_writer :model
94
+
95
+ # Reasoning settings to update. Omit to keep the current effort.
96
+ sig { returns(T.nilable(OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning)) }
97
+ attr_reader :reasoning
98
+
99
+ sig { params(reasoning: OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::OrHash).void }
100
+ attr_writer :reasoning
101
+
102
+ # The service tier used for model requests.
103
+ sig { returns(T.nilable(OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier::OrSymbol)) }
104
+ attr_accessor :service_tier
105
+
106
+ # Model settings for subsequent turns. Omitted fields stay unchanged.
107
+ sig do
108
+ params(
109
+
110
+ model: String,
111
+
112
+ reasoning: OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::OrHash,
113
+
114
+ service_tier: T.nilable(OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier::OrSymbol)
115
+ )
116
+ .returns(T.attached_class)
117
+ end
118
+ def self.new(
119
+
120
+ # The model for subsequent turns. Omit to keep the current model.
121
+ model: nil,
122
+
123
+ # Reasoning settings to update. Omit to keep the current effort.
124
+ reasoning: nil,
125
+
126
+ # The service tier used for model requests.
127
+
128
+ service_tier: nil
129
+ )
130
+ end
131
+
132
+ sig do
133
+ override.returns(
134
+ {
135
+ model: String,
136
+ reasoning: OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning,
137
+ service_tier: T.nilable(OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier::OrSymbol)
138
+ }
139
+ )
140
+ end
141
+ def to_hash
142
+ end
143
+
144
+ class Reasoning < OpenAI::Internal::Type::BaseModel
145
+ OrHash = T.type_alias do
146
+ T.any(
147
+ OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning,
148
+ OpenAI::Internal::AnyHash
149
+ )
150
+ end
151
+
152
+ # The amount of reasoning effort the model should use.
153
+ sig { returns(T.nilable(OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::Effort::OrSymbol)) }
154
+ attr_accessor :effort
155
+
156
+ # Reasoning settings to update. Omit to keep the current effort.
157
+ sig do
158
+ params(
159
+
160
+ effort: T.nilable(OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::Effort::OrSymbol)
161
+ )
162
+ .returns(T.attached_class)
163
+ end
164
+ def self.new(
165
+
166
+ # The amount of reasoning effort the model should use.
167
+
168
+ effort: nil
169
+ )
170
+ end
171
+
172
+ sig do
173
+ override.returns(
174
+ {effort: T.nilable(OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::Effort::OrSymbol)}
175
+ )
176
+ end
177
+ def to_hash
178
+ end
179
+
180
+ # The amount of reasoning effort the model should use.
181
+ module Effort
182
+ extend OpenAI::Internal::Type::Enum
183
+
184
+ TaggedSymbol = T.type_alias {
185
+ T.all(Symbol, OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::Effort)
186
+ }
187
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
188
+
189
+ NONE = T.let(:none, OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::Effort::TaggedSymbol)
190
+ MINIMAL = T.let(
191
+ :minimal,
192
+ OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::Effort::TaggedSymbol
193
+ )
194
+ LOW = T.let(:low, OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::Effort::TaggedSymbol)
195
+ MEDIUM = T.let(
196
+ :medium,
197
+ OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::Effort::TaggedSymbol
198
+ )
199
+ HIGH = T.let(:high, OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::Effort::TaggedSymbol)
200
+ XHIGH = T.let(:xhigh, OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::Effort::TaggedSymbol)
201
+ MAX = T.let(:max, OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::Effort::TaggedSymbol)
202
+
203
+ sig {
204
+ override.returns(
205
+ T::Array[OpenAI::Beta::Agents::SessionUpdateParams::Agent::Reasoning::Effort::TaggedSymbol]
206
+ )
207
+ }
208
+ def self.values
209
+ end
210
+ end
211
+ end
212
+
213
+ # The service tier used for model requests.
214
+ module ServiceTier
215
+ extend OpenAI::Internal::Type::Enum
216
+
217
+ TaggedSymbol = T.type_alias {
218
+ T.all(Symbol, OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier)
219
+ }
220
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
221
+
222
+ # Selects the service tier automatically.
223
+ AUTO = T.let(:auto, OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier::TaggedSymbol)
224
+
225
+ # Uses the default service tier.
226
+ DEFAULT = T.let(:default, OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier::TaggedSymbol)
227
+
228
+ # Uses the flex service tier.
229
+ FLEX = T.let(:flex, OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier::TaggedSymbol)
230
+
231
+ # Uses the priority service tier.
232
+ PRIORITY = T.let(:priority, OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier::TaggedSymbol)
233
+
234
+ # Uses the fast service tier.
235
+ FAST = T.let(:fast, OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier::TaggedSymbol)
236
+
237
+ sig {
238
+ override.returns(T::Array[OpenAI::Beta::Agents::SessionUpdateParams::Agent::ServiceTier::TaggedSymbol])
239
+ }
240
+ def self.values
241
+ end
242
+ end
243
+ end
244
+
67
245
  end
68
246
 
69
247
  end
@@ -882,7 +882,6 @@ module OpenAI
882
882
  GPT_5_1 = T.let(:"gpt-5.1", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
883
883
  GPT_5_1_2025_11_13 = T.let(:"gpt-5.1-2025-11-13", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
884
884
  GPT_5_1_CODEX = T.let(:"gpt-5.1-codex", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
885
- GPT_5_1_MINI = T.let(:"gpt-5.1-mini", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
886
885
  GPT_5_1_CHAT_LATEST = T.let(:"gpt-5.1-chat-latest", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
887
886
  GPT_5 = T.let(:"gpt-5", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
888
887
  GPT_5_MINI = T.let(:"gpt-5-mini", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
@@ -913,6 +912,11 @@ module OpenAI
913
912
  GPT_4O_2024_11_20 = T.let(:"gpt-4o-2024-11-20", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
914
913
  GPT_4O_2024_08_06 = T.let(:"gpt-4o-2024-08-06", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
915
914
  GPT_4O_2024_05_13 = T.let(:"gpt-4o-2024-05-13", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
915
+ GPT_AUDIO_MINI = T.let(:"gpt-audio-mini", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
916
+ GPT_AUDIO_MINI_2025_12_15 = T.let(
917
+ :"gpt-audio-mini-2025-12-15",
918
+ OpenAI::Beta::BetaResponse::Model::TaggedSymbol
919
+ )
916
920
  GPT_4O_AUDIO_PREVIEW = T.let(:"gpt-4o-audio-preview", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
917
921
  GPT_4O_AUDIO_PREVIEW_2024_10_01 = T.let(
918
922
  :"gpt-4o-audio-preview-2024-10-01",
@@ -970,6 +974,7 @@ module OpenAI
970
974
  GPT_3_5_TURBO_1106 = T.let(:"gpt-3.5-turbo-1106", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
971
975
  GPT_3_5_TURBO_0125 = T.let(:"gpt-3.5-turbo-0125", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
972
976
  GPT_3_5_TURBO_16K_0613 = T.let(:"gpt-3.5-turbo-16k-0613", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
977
+ GPT_5_1_MINI = T.let(:"gpt-5.1-mini", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
973
978
  O1_PRO = T.let(:"o1-pro", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
974
979
  O1_PRO_2025_03_19 = T.let(:"o1-pro-2025-03-19", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
975
980
  O3_PRO = T.let(:"o3-pro", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
@@ -0,0 +1,136 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+
6
+ BetaResponseCompactionCompactingEvent = Beta::BetaResponseCompactionCompactingEvent
7
+
8
+ module Beta
9
+
10
+ class BetaResponseCompactionCompactingEvent < OpenAI::Internal::Type::BaseModel
11
+
12
+ OrHash = T.type_alias do
13
+ T.any(
14
+ OpenAI::Beta::BetaResponseCompactionCompactingEvent,
15
+ OpenAI::Internal::AnyHash
16
+ )
17
+ end
18
+
19
+ # The ID of the compaction output item.
20
+ sig { returns(String) }
21
+ attr_accessor :item_id
22
+
23
+ # The index of the compaction output item.
24
+ sig { returns(Integer) }
25
+ attr_accessor :output_index
26
+
27
+ # The sequence number of the event that was emitted.
28
+ sig { returns(Integer) }
29
+ attr_accessor :sequence_number
30
+
31
+ # The type of the event, always `response.compaction.compacting`.
32
+ sig { returns(Symbol) }
33
+ attr_accessor :type
34
+
35
+ # The agent that owns this multi-agent streaming event.
36
+ sig { returns(T.nilable(OpenAI::Beta::BetaResponseCompactionCompactingEvent::Agent)) }
37
+ attr_reader :agent
38
+
39
+ sig { params(agent: OpenAI::Beta::BetaResponseCompactionCompactingEvent::Agent::OrHash).void }
40
+ attr_writer :agent
41
+
42
+ # Emitted when new summary content is sampled for a compaction trigger. Contains
43
+ # no summary content.
44
+ sig do
45
+ params(
46
+
47
+ item_id: String,
48
+
49
+ output_index: Integer,
50
+
51
+ sequence_number: Integer,
52
+
53
+ agent: OpenAI::Beta::BetaResponseCompactionCompactingEvent::Agent::OrHash,
54
+
55
+ type: Symbol
56
+ )
57
+ .returns(T.attached_class)
58
+ end
59
+ def self.new(
60
+
61
+ # The ID of the compaction output item.
62
+ item_id:,
63
+
64
+ # The index of the compaction output item.
65
+ output_index:,
66
+
67
+ # The sequence number of the event that was emitted.
68
+ sequence_number:,
69
+
70
+ # The agent that owns this multi-agent streaming event.
71
+ agent: nil,
72
+
73
+ # The type of the event, always `response.compaction.compacting`.
74
+
75
+ type: :"response.compaction.compacting"
76
+ )
77
+ end
78
+
79
+ sig do
80
+ override.returns(
81
+ {
82
+ item_id: String,
83
+ output_index: Integer,
84
+ sequence_number: Integer,
85
+ type: Symbol,
86
+ agent: OpenAI::Beta::BetaResponseCompactionCompactingEvent::Agent
87
+ }
88
+ )
89
+ end
90
+ def to_hash
91
+ end
92
+
93
+ class Agent < OpenAI::Internal::Type::BaseModel
94
+ OrHash = T.type_alias do
95
+ T.any(
96
+ OpenAI::Beta::BetaResponseCompactionCompactingEvent::Agent,
97
+ OpenAI::Internal::AnyHash
98
+ )
99
+ end
100
+
101
+ # The canonical name of the agent that produced this item.
102
+ sig { returns(String) }
103
+ attr_accessor :agent_name
104
+
105
+ # The agent that owns this multi-agent streaming event.
106
+ sig do
107
+ params(
108
+
109
+ agent_name: String
110
+ )
111
+ .returns(T.attached_class)
112
+ end
113
+ def self.new(
114
+
115
+ # The canonical name of the agent that produced this item.
116
+
117
+ agent_name:
118
+ )
119
+ end
120
+
121
+ sig do
122
+ override.returns(
123
+ {agent_name: String}
124
+ )
125
+ end
126
+ def to_hash
127
+ end
128
+
129
+ end
130
+
131
+ end
132
+
133
+ end
134
+
135
+ end
136
+ end
@@ -22,6 +22,7 @@ module OpenAI
22
22
  OpenAI::Beta::BetaResponseCodeInterpreterCallCompletedEvent,
23
23
  OpenAI::Beta::BetaResponseCodeInterpreterCallInProgressEvent,
24
24
  OpenAI::Beta::BetaResponseCodeInterpreterCallInterpretingEvent,
25
+ OpenAI::Beta::BetaResponseCompactionCompactingEvent,
25
26
  OpenAI::Beta::BetaResponseCompletedEvent,
26
27
  OpenAI::Beta::BetaResponseContentPartAddedEvent,
27
28
  OpenAI::Beta::BetaResponseContentPartDoneEvent,
@@ -1113,10 +1113,6 @@ module OpenAI
1113
1113
  :"gpt-5.1-codex",
1114
1114
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1115
1115
  )
1116
- GPT_5_1_MINI = T.let(
1117
- :"gpt-5.1-mini",
1118
- OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1119
- )
1120
1116
  GPT_5_1_CHAT_LATEST = T.let(
1121
1117
  :"gpt-5.1-chat-latest",
1122
1118
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
@@ -1213,6 +1209,14 @@ module OpenAI
1213
1209
  :"gpt-4o-2024-05-13",
1214
1210
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1215
1211
  )
1212
+ GPT_AUDIO_MINI = T.let(
1213
+ :"gpt-audio-mini",
1214
+ OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1215
+ )
1216
+ GPT_AUDIO_MINI_2025_12_15 = T.let(
1217
+ :"gpt-audio-mini-2025-12-15",
1218
+ OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1219
+ )
1216
1220
  GPT_4O_AUDIO_PREVIEW = T.let(
1217
1221
  :"gpt-4o-audio-preview",
1218
1222
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
@@ -1339,6 +1343,10 @@ module OpenAI
1339
1343
  :"gpt-3.5-turbo-16k-0613",
1340
1344
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1341
1345
  )
1346
+ GPT_5_1_MINI = T.let(
1347
+ :"gpt-5.1-mini",
1348
+ OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1349
+ )
1342
1350
  O1_PRO = T.let(:"o1-pro", OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol)
1343
1351
  O1_PRO_2025_03_19 = T.let(
1344
1352
  :"o1-pro-2025-03-19",
@@ -1781,6 +1789,14 @@ module OpenAI
1781
1789
  }
1782
1790
  attr_writer :mode
1783
1791
 
1792
+ # Prepares the prompt cache without generating output. Defaults to `false`. When
1793
+ # set to `true`, overrides the `generate` field to `false`.
1794
+ sig { returns(T.nilable(T::Boolean)) }
1795
+ attr_reader :prewarm
1796
+
1797
+ sig { params(prewarm: T::Boolean).void }
1798
+ attr_writer :prewarm
1799
+
1784
1800
  # The minimum lifetime applied to every implicit and explicit cache breakpoint
1785
1801
  # written by the request. Defaults to `30m`, which is currently the only supported
1786
1802
  # value. The backend may retain cache entries for longer.
@@ -1813,6 +1829,8 @@ module OpenAI
1813
1829
 
1814
1830
  mode: OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::PromptCacheOptions::Mode::OrSymbol,
1815
1831
 
1832
+ prewarm: T::Boolean,
1833
+
1816
1834
  ttl: OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::PromptCacheOptions::Ttl::OrSymbol
1817
1835
  )
1818
1836
  .returns(T.attached_class)
@@ -1831,6 +1849,10 @@ module OpenAI
1831
1849
  # request does not use prompt caching.
1832
1850
  mode: nil,
1833
1851
 
1852
+ # Prepares the prompt cache without generating output. Defaults to `false`. When
1853
+ # set to `true`, overrides the `generate` field to `false`.
1854
+ prewarm: nil,
1855
+
1834
1856
  # The minimum lifetime applied to every implicit and explicit cache breakpoint
1835
1857
  # written by the request. Defaults to `30m`, which is currently the only supported
1836
1858
  # value. The backend may retain cache entries for longer.
@@ -1846,6 +1868,7 @@ module OpenAI
1846
1868
  mode: T.nilable(
1847
1869
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::PromptCacheOptions::Mode::OrSymbol
1848
1870
  ),
1871
+ prewarm: T.nilable(T::Boolean),
1849
1872
  ttl: T.nilable(
1850
1873
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::PromptCacheOptions::Ttl::OrSymbol
1851
1874
  )