openai 0.94.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 (170) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +57 -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/admin/organization/audit_log_list_response.rb +5 -3
  29. data/lib/openai/models/admin/organization/external_storage_configuration.rb +5 -3
  30. data/lib/openai/models/admin/organization/external_storage_create_params.rb +39 -3
  31. data/lib/openai/models/admin/organization/gcp_external_storage_provider.rb +55 -0
  32. data/lib/openai/models/all_models.rb +1 -0
  33. data/lib/openai/models/audio/speech_create_params.rb +9 -0
  34. data/lib/openai/models/audio/transcription_create_response.rb +4 -1
  35. data/lib/openai/models/audio/translation_create_response.rb +4 -1
  36. data/lib/openai/models/beta/agent.rb +1 -0
  37. data/lib/openai/models/beta/agent_create_params.rb +3 -0
  38. data/lib/openai/models/beta/agent_session.rb +1 -0
  39. data/lib/openai/models/beta/agent_update_params.rb +3 -0
  40. data/lib/openai/models/beta/agents/environments/template_create_params.rb +3 -3
  41. data/lib/openai/models/beta/agents/environments/template_update_params.rb +6 -6
  42. data/lib/openai/models/beta/agents/session_create_params.rb +3 -0
  43. data/lib/openai/models/beta/agents/session_update_params.rb +3 -0
  44. data/lib/openai/models/beta/agents/vaults/credential.rb +10 -1
  45. data/lib/openai/models/beta/agents/vaults/credential_create_params.rb +12 -1
  46. data/lib/openai/models/beta/agents/vaults/credential_update_params.rb +14 -3
  47. data/lib/openai/models/beta/beta_response.rb +41 -1
  48. data/lib/openai/models/beta/beta_responses_client_event.rb +80 -1
  49. data/lib/openai/models/beta/beta_web_search_preview_tool.rb +9 -3
  50. data/lib/openai/models/beta/beta_web_search_tool.rb +9 -3
  51. data/lib/openai/models/beta/environment_param.rb +6 -5
  52. data/lib/openai/models/beta/response_compact_params.rb +6 -0
  53. data/lib/openai/models/beta/response_create_params.rb +71 -1
  54. data/lib/openai/models/beta/session_turn_error.rb +3 -0
  55. data/lib/openai/models/chat_model.rb +1 -0
  56. data/lib/openai/models/responses/response.rb +35 -1
  57. data/lib/openai/models/responses/response_compact_params.rb +6 -0
  58. data/lib/openai/models/responses/response_create_params.rb +65 -1
  59. data/lib/openai/models/responses/responses_client_event.rb +70 -1
  60. data/lib/openai/models/responses/web_search_preview_tool.rb +9 -3
  61. data/lib/openai/models/responses/web_search_tool.rb +9 -3
  62. data/lib/openai/models/responses_model.rb +1 -0
  63. data/lib/openai/models/video_create_error.rb +12 -1
  64. data/lib/openai/net_http_client.rb +0 -2
  65. data/lib/openai/resources/admin/organization/external_storage.rb +1 -1
  66. data/lib/openai/resources/audio/transcriptions.rb +5 -3
  67. data/lib/openai/resources/audio/translations.rb +1 -1
  68. data/lib/openai/resources/beta/agents/environments/templates.rb +3 -3
  69. data/lib/openai/resources/beta/agents/vaults/credentials.rb +12 -4
  70. data/lib/openai/resources/beta/responses.rb +8 -2
  71. data/lib/openai/resources/responses.rb +8 -1
  72. data/lib/openai/version.rb +1 -1
  73. data/lib/openai.rb +2 -0
  74. data/rbi/openai/helpers/live/transcript_grouper.rbi +67 -0
  75. data/rbi/openai/helpers/live/websocket.rbi +299 -0
  76. data/rbi/openai/helpers/realtime/translation.rbi +137 -0
  77. data/rbi/openai/helpers/responses_websocket/incremental.rbi +32 -0
  78. data/rbi/openai/helpers/responses_websocket/transports/async_websocket.rbi +24 -0
  79. data/rbi/openai/helpers/streaming/response_stream.rbi +5 -0
  80. data/rbi/openai/internal/type/converter.rbi +3 -2
  81. data/rbi/openai/models/admin/organization/audit_log_list_response.rbi +6 -3
  82. data/rbi/openai/models/admin/organization/external_storage_configuration.rbi +4 -2
  83. data/rbi/openai/models/admin/organization/external_storage_create_params.rbi +76 -4
  84. data/rbi/openai/models/admin/organization/gcp_external_storage_provider.rbi +100 -0
  85. data/rbi/openai/models/all_models.rbi +1 -0
  86. data/rbi/openai/models/audio/speech_create_params.rbi +3 -0
  87. data/rbi/openai/models/audio/transcription_create_response.rbi +2 -1
  88. data/rbi/openai/models/audio/translation_create_response.rbi +2 -1
  89. data/rbi/openai/models/beta/agent.rbi +1 -0
  90. data/rbi/openai/models/beta/agent_create_params.rbi +3 -0
  91. data/rbi/openai/models/beta/agent_session.rbi +1 -0
  92. data/rbi/openai/models/beta/agent_update_params.rbi +3 -0
  93. data/rbi/openai/models/beta/agents/environments/template_create_params.rbi +3 -3
  94. data/rbi/openai/models/beta/agents/environments/template_update_params.rbi +6 -6
  95. data/rbi/openai/models/beta/agents/session_create_params.rbi +3 -0
  96. data/rbi/openai/models/beta/agents/session_update_params.rbi +3 -0
  97. data/rbi/openai/models/beta/agents/vaults/credential.rbi +10 -0
  98. data/rbi/openai/models/beta/agents/vaults/credential_create_params.rbi +15 -0
  99. data/rbi/openai/models/beta/agents/vaults/credential_update_params.rbi +35 -6
  100. data/rbi/openai/models/beta/beta_response.rbi +65 -0
  101. data/rbi/openai/models/beta/beta_responses_client_event.rbi +132 -0
  102. data/rbi/openai/models/beta/beta_web_search_preview_tool.rbi +9 -3
  103. data/rbi/openai/models/beta/beta_web_search_tool.rbi +9 -3
  104. data/rbi/openai/models/beta/environment_param.rbi +5 -4
  105. data/rbi/openai/models/beta/response_compact_params.rbi +5 -0
  106. data/rbi/openai/models/beta/response_create_params.rbi +104 -0
  107. data/rbi/openai/models/beta/session_turn_error.rbi +6 -0
  108. data/rbi/openai/models/chat_model.rbi +1 -0
  109. data/rbi/openai/models/responses/response.rbi +63 -0
  110. data/rbi/openai/models/responses/response_compact_params.rbi +5 -0
  111. data/rbi/openai/models/responses/response_create_params.rbi +106 -0
  112. data/rbi/openai/models/responses/responses_client_event.rbi +125 -0
  113. data/rbi/openai/models/responses/web_search_preview_tool.rbi +9 -3
  114. data/rbi/openai/models/responses/web_search_tool.rbi +9 -3
  115. data/rbi/openai/models/responses_model.rbi +4 -0
  116. data/rbi/openai/models/video_create_error.rbi +20 -1
  117. data/rbi/openai/resources/admin/organization/external_storage.rbi +2 -1
  118. data/rbi/openai/resources/audio/transcriptions.rbi +4 -2
  119. data/rbi/openai/resources/beta/agents/environments/templates.rbi +3 -3
  120. data/rbi/openai/resources/beta/agents/vaults/credentials.rbi +11 -3
  121. data/rbi/openai/resources/beta/responses.rbi +6 -0
  122. data/rbi/openai/resources/responses.rbi +11 -0
  123. data/responses-websocket.md +55 -0
  124. data/sig/openai/helpers/live/transcript_grouper.rbs +42 -0
  125. data/sig/openai/helpers/live/websocket.rbs +152 -0
  126. data/sig/openai/helpers/realtime/translation.rbs +81 -0
  127. data/sig/openai/helpers/responses_websocket/incremental.rbs +14 -0
  128. data/sig/openai/helpers/responses_websocket/transports/async_websocket.rbs +21 -0
  129. data/sig/openai/helpers/streaming/response_stream.rbs +9 -0
  130. data/sig/openai/internal/type/converter.rbs +3 -1
  131. data/sig/openai/models/admin/organization/audit_log_list_response.rbs +1 -0
  132. data/sig/openai/models/admin/organization/external_storage_configuration.rbs +1 -0
  133. data/sig/openai/models/admin/organization/external_storage_create_params.rbs +38 -0
  134. data/sig/openai/models/admin/organization/gcp_external_storage_provider.rbs +54 -0
  135. data/sig/openai/models/all_models.rbs +2 -0
  136. data/sig/openai/models/audio/speech_create_params.rbs +6 -0
  137. data/sig/openai/models/audio/transcription_create_response.rbs +1 -0
  138. data/sig/openai/models/audio/translation_create_response.rbs +3 -1
  139. data/sig/openai/models/beta/agent.rbs +3 -1
  140. data/sig/openai/models/beta/agent_create_params.rbs +5 -1
  141. data/sig/openai/models/beta/agent_session.rbs +3 -1
  142. data/sig/openai/models/beta/agent_update_params.rbs +5 -1
  143. data/sig/openai/models/beta/agents/environments/template_create_params.rbs +2 -2
  144. data/sig/openai/models/beta/agents/environments/template_update_params.rbs +4 -4
  145. data/sig/openai/models/beta/agents/session_create_params.rbs +5 -1
  146. data/sig/openai/models/beta/agents/session_update_params.rbs +5 -1
  147. data/sig/openai/models/beta/agents/vaults/credential.rbs +8 -0
  148. data/sig/openai/models/beta/agents/vaults/credential_create_params.rbs +14 -0
  149. data/sig/openai/models/beta/agents/vaults/credential_update_params.rbs +23 -4
  150. data/sig/openai/models/beta/beta_response.rbs +39 -0
  151. data/sig/openai/models/beta/beta_responses_client_event.rbs +81 -0
  152. data/sig/openai/models/beta/beta_web_search_preview_tool.rbs +6 -2
  153. data/sig/openai/models/beta/beta_web_search_tool.rbs +6 -2
  154. data/sig/openai/models/beta/environment_param.rbs +2 -2
  155. data/sig/openai/models/beta/response_compact_params.rbs +4 -0
  156. data/sig/openai/models/beta/response_create_params.rbs +81 -0
  157. data/sig/openai/models/beta/session_turn_error.rbs +4 -0
  158. data/sig/openai/models/chat_model.rbs +2 -0
  159. data/sig/openai/models/responses/response.rbs +35 -0
  160. data/sig/openai/models/responses/response_compact_params.rbs +4 -0
  161. data/sig/openai/models/responses/response_create_params.rbs +77 -0
  162. data/sig/openai/models/responses/responses_client_event.rbs +77 -0
  163. data/sig/openai/models/responses/web_search_preview_tool.rbs +6 -2
  164. data/sig/openai/models/responses/web_search_tool.rbs +6 -2
  165. data/sig/openai/models/responses_model.rbs +2 -0
  166. data/sig/openai/models/video_create_error.rbs +14 -0
  167. data/sig/openai/resources/beta/agents/vaults/credentials.rbs +3 -1
  168. data/sig/openai/resources/beta/responses.rbs +2 -0
  169. data/sig/openai/resources/responses.rbs +4 -0
  170. metadata +17 -1
@@ -20,6 +20,14 @@ module OpenAI
20
20
  sig { returns(String) }
21
21
  attr_accessor :message
22
22
 
23
+ # The Retry-After and Retry-After-Ms headers returned with the original error, if
24
+ # any.
25
+ sig { returns(T.nilable(T::Hash[Symbol, String])) }
26
+ attr_reader :headers
27
+
28
+ sig { params(headers: T::Hash[Symbol, String]).void }
29
+ attr_writer :headers
30
+
23
31
  sig { returns(T.nilable(OpenAI::VideoCreateError::Misalignment)) }
24
32
  attr_reader :misalignment
25
33
 
@@ -34,6 +42,8 @@ module OpenAI
34
42
 
35
43
  message: String,
36
44
 
45
+ headers: T::Hash[Symbol, String],
46
+
37
47
  misalignment: OpenAI::VideoCreateError::Misalignment::OrHash
38
48
  )
39
49
  .returns(T.attached_class)
@@ -46,13 +56,22 @@ module OpenAI
46
56
  # A human-readable description of the error that was returned.
47
57
  message:,
48
58
 
59
+ # The Retry-After and Retry-After-Ms headers returned with the original error, if
60
+ # any.
61
+ headers: nil,
62
+
49
63
  misalignment: nil
50
64
  )
51
65
  end
52
66
 
53
67
  sig do
54
68
  override.returns(
55
- {code: String, message: String, misalignment: OpenAI::VideoCreateError::Misalignment}
69
+ {
70
+ code: String,
71
+ message: String,
72
+ headers: T::Hash[Symbol, String],
73
+ misalignment: OpenAI::VideoCreateError::Misalignment
74
+ }
56
75
  )
57
76
  end
58
77
  def to_hash
@@ -15,7 +15,8 @@ module OpenAI
15
15
  project_id: String,
16
16
  provider: T.any(
17
17
  OpenAI::Admin::Organization::ExternalStorageCreateParams::Provider::Aws::OrHash,
18
- OpenAI::Admin::Organization::ExternalStorageCreateParams::Provider::Azure::OrHash
18
+ OpenAI::Admin::Organization::ExternalStorageCreateParams::Provider::Azure::OrHash,
19
+ OpenAI::Admin::Organization::ExternalStorageCreateParams::Provider::Gcp::OrHash
19
20
  ),
20
21
  request_options: OpenAI::RequestOptions::OrHash
21
22
  )
@@ -14,7 +14,8 @@ module OpenAI
14
14
  # Transcribes audio into the input language.
15
15
  #
16
16
  # Returns a transcription object in `json`, `diarized_json`, or `verbose_json`
17
- # format, or a stream of transcript events.
17
+ # format, plain text in `text`, `srt`, or `vtt` format, or a stream of transcript
18
+ # events. Supported formats depend on the model.
18
19
  sig {
19
20
  params(
20
21
  file: OpenAI::Internal::FileInput,
@@ -125,7 +126,8 @@ module OpenAI
125
126
  # Transcribes audio into the input language.
126
127
  #
127
128
  # Returns a transcription object in `json`, `diarized_json`, or `verbose_json`
128
- # format, or a stream of transcript events.
129
+ # format, plain text in `text`, `srt`, or `vtt` format, or a stream of transcript
130
+ # events. Supported formats depend on the model.
129
131
  sig {
130
132
  params(
131
133
  file: OpenAI::Internal::FileInput,
@@ -54,7 +54,7 @@ module OpenAI
54
54
  # An optional human-readable display name for the template.
55
55
  name: nil,
56
56
  # Network access policy for the environment. Defaults to disabled for GA requests
57
- # and enabled for alpha/beta requests.
57
+ # and enabled for beta requests.
58
58
  network: nil,
59
59
  # Packages to install in the environment. Defaults to empty package lists.
60
60
  packages: nil,
@@ -129,8 +129,8 @@ module OpenAI
129
129
  # A replacement human-readable display name, or `null` to clear the name.
130
130
  name: nil,
131
131
  # Network access available after setup completes. Omit to preserve the current
132
- # policy, or pass `null` to reset to disabled for GA requests or enabled for
133
- # alpha/beta requests.
132
+ # policy, or pass `null` to reset to disabled for GA requests or enabled for beta
133
+ # requests.
134
134
  network: nil,
135
135
  # Packages installed before the runtime network policy applies.
136
136
  packages: nil,
@@ -23,6 +23,7 @@ module OpenAI
23
23
  OpenAI::Beta::Agents::Vaults::CredentialAuthCreateParam::EnvironmentVariable::OrHash
24
24
  ),
25
25
  name: String,
26
+ metadata: T::Hash[Symbol, String],
26
27
  request_options: OpenAI::RequestOptions::OrHash
27
28
  )
28
29
  .returns(OpenAI::Beta::Agents::Vaults::Credential)
@@ -35,6 +36,9 @@ module OpenAI
35
36
  # The name is trimmed before storage. It must contain 1 to 256 UTF-8 bytes after
36
37
  # trimming.
37
38
  name:,
39
+ # Up to 16 string key-value pairs, with keys up to 64 and values up to 512
40
+ # characters. Defaults to an empty map.
41
+ metadata: nil,
38
42
  request_options: {}
39
43
  )
40
44
  end
@@ -55,8 +59,7 @@ module OpenAI
55
59
  )
56
60
  end
57
61
 
58
- # Rotates a vault credential's write-only secret and returns only credential
59
- # metadata. See
62
+ # Updates credential metadata or rotates its write-only secret. See
60
63
  # [vaults](https://developers.openai.com/api/docs/guides/agents-api/tools/vaults).
61
64
  sig {
62
65
  params(
@@ -67,6 +70,7 @@ module OpenAI
67
70
  OpenAI::Beta::Agents::Vaults::CredentialAuthRotateParam::StaticBearer::OrHash,
68
71
  OpenAI::Beta::Agents::Vaults::CredentialAuthRotateParam::EnvironmentVariable::OrHash
69
72
  ),
73
+ metadata: T::Hash[Symbol, String],
70
74
  request_options: OpenAI::RequestOptions::OrHash
71
75
  )
72
76
  .returns(OpenAI::Beta::Agents::Vaults::Credential)
@@ -78,7 +82,11 @@ module OpenAI
78
82
  vault_id:,
79
83
  # Body param: Replacement values for the credential's existing authentication
80
84
  # method.
81
- auth:,
85
+ auth: nil,
86
+ # Body param: Replaces all metadata. Omit to preserve it, or pass {} to clear it.
87
+ # Up to 16 string key-value pairs, with keys up to 64 and values up to 512
88
+ # characters.
89
+ metadata: nil,
82
90
  request_options: {}
83
91
  )
84
92
  end
@@ -31,6 +31,7 @@ module OpenAI
31
31
  # to use your own data as input for the model's response.
32
32
  sig {
33
33
  params(
34
+ access_programs: OpenAI::Beta::ResponseCreateParams::AccessPrograms::OrHash,
34
35
  background: T.nilable(T::Boolean),
35
36
  context_management: T.nilable(T::Array[OpenAI::Beta::ResponseCreateParams::ContextManagement::OrHash]),
36
37
  conversation: T.nilable(T.any(String, OpenAI::Beta::BetaResponseConversationParam::OrHash)),
@@ -98,6 +99,8 @@ module OpenAI
98
99
  .returns(OpenAI::Beta::BetaResponse)
99
100
  }
100
101
  def create(
102
+ # Body param: Domain-specific access programs to use for this request.
103
+ access_programs: nil,
101
104
  # Body param: Whether to run the model response in the background.
102
105
  # [Learn more](https://developers.openai.com/api/docs/guides/background).
103
106
  background: nil,
@@ -346,6 +349,7 @@ module OpenAI
346
349
  # to use your own data as input for the model's response.
347
350
  sig {
348
351
  params(
352
+ access_programs: OpenAI::Beta::ResponseCreateParams::AccessPrograms::OrHash,
349
353
  background: T.nilable(T::Boolean),
350
354
  context_management: T.nilable(T::Array[OpenAI::Beta::ResponseCreateParams::ContextManagement::OrHash]),
351
355
  conversation: T.nilable(T.any(String, OpenAI::Beta::BetaResponseConversationParam::OrHash)),
@@ -417,6 +421,8 @@ module OpenAI
417
421
  )
418
422
  }
419
423
  def stream_raw(
424
+ # Body param: Domain-specific access programs to use for this request.
425
+ access_programs: nil,
420
426
  # Body param: Whether to run the model response in the background.
421
427
  # [Learn more](https://developers.openai.com/api/docs/guides/background).
422
428
  background: nil,
@@ -29,6 +29,7 @@ module OpenAI
29
29
  # to use your own data as input for the model's response.
30
30
  sig do
31
31
  params(
32
+ access_programs: OpenAI::Responses::ResponseCreateParams::AccessPrograms::OrHash,
32
33
  background: T.nilable(T::Boolean),
33
34
  context_management: T.nilable(T::Array[OpenAI::Responses::ResponseCreateParams::ContextManagement::OrHash]),
34
35
  conversation: T.nilable(T.any(String, OpenAI::Responses::ResponseConversationParam::OrHash)),
@@ -97,6 +98,8 @@ module OpenAI
97
98
  .returns(OpenAI::Responses::Response)
98
99
  end
99
100
  def create(
101
+ # Domain-specific access programs to use for this request.
102
+ access_programs: nil,
100
103
  # Whether to run the model response in the background.
101
104
  # [Learn more](https://developers.openai.com/api/docs/guides/background).
102
105
  background: nil,
@@ -334,6 +337,7 @@ module OpenAI
334
337
  # to use your own data as input for the model's response.
335
338
  sig do
336
339
  params(
340
+ access_programs: OpenAI::Responses::ResponseCreateParams::AccessPrograms::OrHash,
337
341
  background: T.nilable(T::Boolean),
338
342
  context_management: T.nilable(T::Array[OpenAI::Responses::ResponseCreateParams::ContextManagement::OrHash]),
339
343
  conversation: T.nilable(T.any(String, OpenAI::Responses::ResponseConversationParam::OrHash)),
@@ -408,6 +412,8 @@ module OpenAI
408
412
  )
409
413
  end
410
414
  def stream_raw(
415
+ # Domain-specific access programs to use for this request.
416
+ access_programs: nil,
411
417
  # Whether to run the model response in the background.
412
418
  # [Learn more](https://developers.openai.com/api/docs/guides/background).
413
419
  background: nil,
@@ -645,6 +651,7 @@ module OpenAI
645
651
  # your own data as input for the model's response.
646
652
  sig do
647
653
  params(
654
+ access_programs: OpenAI::Responses::ResponseCreateParams::AccessPrograms::OrHash,
648
655
  background: T.nilable(T::Boolean),
649
656
  include: T.nilable(
650
657
  T::Array[OpenAI::Responses::ResponseIncludable::OrSymbol]
@@ -715,6 +722,8 @@ module OpenAI
715
722
  .returns(OpenAI::Streaming::ResponseStream)
716
723
  end
717
724
  def stream(
725
+ # Domain-specific access programs to use for this request.
726
+ access_programs: nil,
718
727
  # Whether to run the model response in the background.
719
728
  # [Learn more](https://developers.openai.com/api/docs/guides/background).
720
729
  background: nil,
@@ -1134,6 +1143,7 @@ module OpenAI
1134
1143
  class Response
1135
1144
  sig do
1136
1145
  params(
1146
+ access_programs: OpenAI::Responses::ResponsesClientEvent::ResponseCreate::AccessPrograms::OrHash,
1137
1147
  background: T.nilable(T::Boolean),
1138
1148
  context_management: T.nilable(
1139
1149
  T::Array[OpenAI::Responses::ResponsesClientEvent::ResponseCreate::ContextManagement::OrHash]
@@ -1204,6 +1214,7 @@ module OpenAI
1204
1214
  .void
1205
1215
  end
1206
1216
  def create(
1217
+ access_programs: nil,
1207
1218
  background: nil,
1208
1219
  context_management: nil,
1209
1220
  conversation: nil,
@@ -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: (
@@ -1837,6 +1837,7 @@ module OpenAI
1837
1837
  type provider =
1838
1838
  OpenAI::Admin::Organization::AwsExternalStorageProvider
1839
1839
  | OpenAI::Admin::Organization::AzureExternalStorageProvider
1840
+ | OpenAI::Admin::Organization::GcpExternalStorageProvider
1840
1841
 
1841
1842
  module Provider
1842
1843
  extend OpenAI::Internal::Type::Union
@@ -51,6 +51,7 @@ module OpenAI
51
51
  type provider =
52
52
  OpenAI::Admin::Organization::AwsExternalStorageProvider
53
53
  | OpenAI::Admin::Organization::AzureExternalStorageProvider
54
+ | OpenAI::Admin::Organization::GcpExternalStorageProvider
54
55
 
55
56
  module Provider
56
57
  extend OpenAI::Internal::Type::Union