openai 0.79.0 → 0.80.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 (106) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -0
  3. data/README.md +1 -1
  4. data/bedrock.md +67 -2
  5. data/lib/openai/models/all_models.rb +2 -0
  6. data/lib/openai/models/beta/beta_mcp_tool_call_error.rb +84 -0
  7. data/lib/openai/models/beta/beta_response.rb +18 -0
  8. data/lib/openai/models/beta/beta_response_input_item.rb +3 -3
  9. data/lib/openai/models/beta/beta_response_item.rb +3 -3
  10. data/lib/openai/models/beta/beta_response_output_item.rb +3 -3
  11. data/lib/openai/models/beta/beta_response_output_item_added_event.rb +5 -2
  12. data/lib/openai/models/beta/beta_response_output_text_annotation_added_event.rb +201 -4
  13. data/lib/openai/models/beta/beta_response_reasoning_item.rb +5 -0
  14. data/lib/openai/models/beta/beta_responses_client_event.rb +18 -0
  15. data/lib/openai/models/beta/beta_responses_server_event.rb +126 -22
  16. data/lib/openai/models/beta/beta_web_search_tool.rb +11 -1
  17. data/lib/openai/models/beta/response_compact_params.rb +9 -0
  18. data/lib/openai/models/beta/response_create_params.rb +18 -0
  19. data/lib/openai/models/chat_model.rb +1 -0
  20. data/lib/openai/models/completion_usage.rb +26 -2
  21. data/lib/openai/models/conversations/conversation_item.rb +3 -3
  22. data/lib/openai/models/model.rb +9 -1
  23. data/lib/openai/models/responses/mcp_tool_call_error.rb +82 -0
  24. data/lib/openai/models/responses/response.rb +9 -0
  25. data/lib/openai/models/responses/response_compact_params.rb +9 -0
  26. data/lib/openai/models/responses/response_create_params.rb +9 -0
  27. data/lib/openai/models/responses/response_input_item.rb +3 -3
  28. data/lib/openai/models/responses/response_item.rb +3 -3
  29. data/lib/openai/models/responses/response_output_item.rb +3 -3
  30. data/lib/openai/models/responses/response_output_item_added_event.rb +5 -2
  31. data/lib/openai/models/responses/response_output_text_annotation_added_event.rb +201 -4
  32. data/lib/openai/models/responses/response_reasoning_item.rb +5 -0
  33. data/lib/openai/models/responses/responses_client_event.rb +9 -0
  34. data/lib/openai/models/responses/responses_server_event.rb +100 -22
  35. data/lib/openai/models/responses/web_search_tool.rb +11 -1
  36. data/lib/openai/models/responses_model.rb +2 -0
  37. data/lib/openai/providers/bedrock.rb +127 -16
  38. data/lib/openai/resources/files.rb +1 -1
  39. data/lib/openai/version.rb +1 -1
  40. data/lib/openai.rb +4 -2
  41. data/rbi/openai/models/all_models.rbi +10 -0
  42. data/rbi/openai/models/beta/beta_mcp_tool_call_error.rbi +122 -0
  43. data/rbi/openai/models/beta/beta_response.rbi +32 -0
  44. data/rbi/openai/models/beta/beta_response_input_item.rbi +27 -3
  45. data/rbi/openai/models/beta/beta_response_item.rbi +27 -3
  46. data/rbi/openai/models/beta/beta_response_output_item.rbi +27 -3
  47. data/rbi/openai/models/beta/beta_response_output_item_added_event.rbi +8 -2
  48. data/rbi/openai/models/beta/beta_response_output_text_annotation_added_event.rbi +297 -5
  49. data/rbi/openai/models/beta/beta_response_reasoning_item.rbi +10 -0
  50. data/rbi/openai/models/beta/beta_responses_client_event.rbi +32 -0
  51. data/rbi/openai/models/beta/beta_responses_server_event.rbi +221 -67
  52. data/rbi/openai/models/beta/beta_web_search_tool.rbi +15 -0
  53. data/rbi/openai/models/beta/response_compact_params.rbi +15 -0
  54. data/rbi/openai/models/beta/response_create_params.rbi +32 -0
  55. data/rbi/openai/models/chat_model.rbi +2 -0
  56. data/rbi/openai/models/completion_usage.rbi +39 -6
  57. data/rbi/openai/models/conversations/conversation_item.rbi +12 -3
  58. data/rbi/openai/models/model.rbi +14 -1
  59. data/rbi/openai/models/responses/mcp_tool_call_error.rbi +120 -0
  60. data/rbi/openai/models/responses/response.rbi +17 -0
  61. data/rbi/openai/models/responses/response_compact_params.rbi +15 -0
  62. data/rbi/openai/models/responses/response_create_params.rbi +17 -0
  63. data/rbi/openai/models/responses/response_input_item.rbi +27 -3
  64. data/rbi/openai/models/responses/response_item.rbi +27 -3
  65. data/rbi/openai/models/responses/response_output_item.rbi +27 -3
  66. data/rbi/openai/models/responses/response_output_item_added_event.rbi +8 -2
  67. data/rbi/openai/models/responses/response_output_text_annotation_added_event.rbi +297 -5
  68. data/rbi/openai/models/responses/response_reasoning_item.rbi +10 -0
  69. data/rbi/openai/models/responses/responses_client_event.rbi +17 -0
  70. data/rbi/openai/models/responses/responses_server_event.rbi +165 -62
  71. data/rbi/openai/models/responses/web_search_tool.rbi +15 -0
  72. data/rbi/openai/models/responses_model.rbi +10 -0
  73. data/rbi/openai/providers.rbi +2 -0
  74. data/rbi/openai/resources/beta/responses.rbi +8 -0
  75. data/rbi/openai/resources/files.rbi +1 -1
  76. data/rbi/openai/resources/responses.rbi +8 -0
  77. data/sig/openai/models/all_models.rbs +4 -0
  78. data/sig/openai/models/beta/beta_mcp_tool_call_error.rbs +75 -0
  79. data/sig/openai/models/beta/beta_response.rbs +8 -1
  80. data/sig/openai/models/beta/beta_response_input_item.rbs +4 -4
  81. data/sig/openai/models/beta/beta_response_item.rbs +4 -4
  82. data/sig/openai/models/beta/beta_response_output_item.rbs +4 -4
  83. data/sig/openai/models/beta/beta_response_output_text_annotation_added_event.rbs +149 -4
  84. data/sig/openai/models/beta/beta_responses_client_event.rbs +8 -1
  85. data/sig/openai/models/beta/beta_responses_server_event.rbs +99 -39
  86. data/sig/openai/models/beta/beta_web_search_tool.rbs +7 -0
  87. data/sig/openai/models/beta/response_compact_params.rbs +6 -0
  88. data/sig/openai/models/beta/response_create_params.rbs +8 -1
  89. data/sig/openai/models/chat_model.rbs +2 -0
  90. data/sig/openai/models/completion_usage.rbs +27 -6
  91. data/sig/openai/models/conversations/conversation_item.rbs +4 -4
  92. data/sig/openai/models/model.rbs +12 -2
  93. data/sig/openai/models/responses/mcp_tool_call_error.rbs +73 -0
  94. data/sig/openai/models/responses/response.rbs +2 -1
  95. data/sig/openai/models/responses/response_compact_params.rbs +6 -0
  96. data/sig/openai/models/responses/response_create_params.rbs +2 -1
  97. data/sig/openai/models/responses/response_input_item.rbs +4 -4
  98. data/sig/openai/models/responses/response_item.rbs +4 -4
  99. data/sig/openai/models/responses/response_output_item.rbs +4 -4
  100. data/sig/openai/models/responses/response_output_text_annotation_added_event.rbs +149 -4
  101. data/sig/openai/models/responses/responses_client_event.rbs +2 -1
  102. data/sig/openai/models/responses/responses_server_event.rbs +84 -36
  103. data/sig/openai/models/responses/web_search_tool.rbs +7 -0
  104. data/sig/openai/models/responses_model.rbs +4 -0
  105. data/sig/openai/providers.rbs +1 -0
  106. metadata +7 -1
@@ -4,8 +4,8 @@ module OpenAI
4
4
  module Providers
5
5
  # @api private
6
6
  module Bedrock
7
- SERVICE = "bedrock-mantle"
8
- CANONICAL_HOST = /\Abedrock-mantle\.([a-z0-9-]+)\.api\.aws\z/i
7
+ SERVICES = {mantle: "bedrock-mantle", runtime: "bedrock"}.freeze
8
+ AWS_REGION_PATTERN = /\A[a-z]{2,8}(?:-[a-z0-9]+)+-\d+\z/
9
9
  AUTH_HEADERS = %w[authorization].freeze
10
10
  SIGNING_HEADERS = %w[authorization x-amz-content-sha256 x-amz-date x-amz-security-token].freeze
11
11
  BEARER_AUTH_MARKER = :openai_bedrock_bearer
@@ -39,6 +39,7 @@ module OpenAI
39
39
  attr_reader :name
40
40
 
41
41
  def initialize(
42
+ endpoint:,
42
43
  region:,
43
44
  base_url:,
44
45
  bearer_provider:,
@@ -50,6 +51,7 @@ module OpenAI
50
51
  default_chain:
51
52
  )
52
53
  @name = "bedrock"
54
+ @endpoint = endpoint
53
55
  @region = region&.freeze
54
56
  @base_url = base_url&.freeze
55
57
  @bearer_provider = bearer_provider
@@ -63,14 +65,17 @@ module OpenAI
63
65
 
64
66
  def configure
65
67
  if @bearer_provider
66
- base_url = Bedrock.resolve_base_url(@base_url, @region)
68
+ base_url = Bedrock.resolve_base_url(@base_url, @region, endpoint: @endpoint)
69
+ Bedrock.validate_canonical_endpoint!(base_url, @endpoint, @region)
67
70
  auth = BearerAuth.new(token_provider: @bearer_provider, base_url: base_url)
68
71
  else
69
72
  Bedrock.load_aws!
70
73
  region = @region || Bedrock.profile_region(@profile)
71
74
  raise ArgumentError, MISSING_REGION_MESSAGE if region.nil?
75
+ Bedrock.validate_region!(region)
72
76
 
73
- base_url = Bedrock.resolve_base_url(@base_url, region)
77
+ base_url = Bedrock.resolve_base_url(@base_url, region, endpoint: @endpoint)
78
+ Bedrock.validate_canonical_endpoint!(base_url, @endpoint, region)
74
79
  credentials =
75
80
  if @access_key_id
76
81
  Aws::Credentials.new(@access_key_id, @secret_access_key, @session_token)
@@ -82,6 +87,7 @@ module OpenAI
82
87
  DefaultCredentialsProvider.new
83
88
  end
84
89
  auth = SigV4Auth.new(
90
+ endpoint: @endpoint,
85
91
  region: region,
86
92
  base_url: base_url,
87
93
  credentials_provider: credentials,
@@ -130,12 +136,13 @@ module OpenAI
130
136
  end
131
137
 
132
138
  class SigV4Auth
133
- def initialize(region:, base_url:, credentials_provider:, default_chain:)
139
+ def initialize(endpoint:, region:, base_url:, credentials_provider:, default_chain:)
140
+ @endpoint = endpoint
134
141
  @region = region
135
142
  @base_url = URI(base_url)
136
143
  @default_chain = default_chain
137
144
  @signer = Aws::Sigv4::Signer.new(
138
- service: SERVICE,
145
+ service: SERVICES.fetch(endpoint),
139
146
  region: region,
140
147
  credentials_provider: credentials_provider
141
148
  )
@@ -144,7 +151,7 @@ module OpenAI
144
151
  def prepare_request(request)
145
152
  url = request.fetch(:url)
146
153
  Bedrock.validate_origin!(url, @base_url, action: "sign")
147
- Bedrock.validate_endpoint_region!(url, @region)
154
+ Bedrock.validate_endpoint_region!(url, @region, endpoint: @endpoint)
148
155
  body = request[:body]
149
156
  unless body.nil? || body.is_a?(String)
150
157
  raise OpenAI::Errors::Error, NON_REPLAYABLE_BODY_MESSAGE
@@ -263,10 +270,86 @@ module OpenAI
263
270
  raise OpenAI::Errors::Error.new(MISSING_DEPENDENCY_MESSAGE), cause: e
264
271
  end
265
272
 
266
- def resolve_base_url(base_url, region)
273
+ def resolve_base_url(base_url, region, endpoint:)
267
274
  return base_url if base_url
268
275
  raise ArgumentError, MISSING_REGION_MESSAGE if region.nil?
269
- "https://bedrock-mantle.#{region}.api.aws/v1"
276
+
277
+ if endpoint == :runtime
278
+ suffix, = runtime_dns_suffixes(region)
279
+ "https://bedrock-runtime.#{region}.#{suffix}/openai/v1"
280
+ else
281
+ "https://bedrock-mantle.#{region}.api.aws/v1"
282
+ end
283
+ end
284
+
285
+ def runtime_dns_suffixes(region)
286
+ case region
287
+ when /\Acn-/
288
+ ["amazonaws.com.cn", "api.amazonwebservices.com.cn"]
289
+ when /\Aeusc-/
290
+ ["amazonaws.eu", "api.amazonwebservices.eu"]
291
+ when /\Aus-iso-/
292
+ ["c2s.ic.gov", "api.aws.ic.gov"]
293
+ when /\Aus-isob-/
294
+ ["sc2s.sgov.gov", "api.aws.scloud"]
295
+ when /\Aeu-isoe-/
296
+ ["cloud.adc-e.uk", "api.cloud-aws.adc-e.uk"]
297
+ when /\Aus-isof-/
298
+ ["csp.hci.ic.gov", "api.aws.hci.ic.gov"]
299
+ else
300
+ ["amazonaws.com", "api.aws"]
301
+ end
302
+ end
303
+
304
+ def parse_endpoint_hostname(hostname)
305
+ service, region, *suffix_parts = hostname.delete_suffix(".").downcase.split(".")
306
+ suffix = suffix_parts.join(".")
307
+
308
+ if service == "bedrock-mantle" && region&.match?(/\A[a-z0-9-]+\z/) && suffix == "api.aws"
309
+ return {endpoint: :mantle, region: region}
310
+ end
311
+
312
+ if %w[bedrock-runtime bedrock-runtime-fips].include?(service) && region &&
313
+ runtime_dns_suffixes(region).include?(suffix)
314
+ return {endpoint: :runtime, region: region}
315
+ end
316
+
317
+ nil
318
+ end
319
+
320
+ def validate_canonical_endpoint!(base_url, endpoint, region)
321
+ uri = URI(base_url)
322
+ canonical = parse_endpoint_hostname(uri.host)
323
+ return unless canonical
324
+
325
+ unless uri.is_a?(URI::HTTPS)
326
+ raise ArgumentError, "Canonical Amazon Bedrock endpoints require HTTPS."
327
+ end
328
+ if canonical.fetch(:endpoint) != endpoint
329
+ raise ArgumentError,
330
+ "The Bedrock #{canonical.fetch(:endpoint)} hostname does not match the " \
331
+ "selected `#{endpoint}` endpoint."
332
+ end
333
+ return if region.nil? || canonical.fetch(:region) == region
334
+
335
+ raise ArgumentError,
336
+ "The Bedrock endpoint region `#{canonical.fetch(:region)}` does not match the " \
337
+ "configured AWS region `#{region}`."
338
+ end
339
+
340
+ def validate_region!(region)
341
+ return if AWS_REGION_PATTERN.match?(region)
342
+
343
+ raise ArgumentError,
344
+ "The Bedrock AWS `region` is invalid. Use a standard AWS region such as `us-east-1`."
345
+ end
346
+
347
+ def normalize_endpoint(endpoint)
348
+ return nil if endpoint.nil?
349
+ return endpoint.to_sym if endpoint == "mantle" || endpoint == "runtime"
350
+ return endpoint if endpoint == :mantle || endpoint == :runtime
351
+
352
+ raise ArgumentError, "The Bedrock `endpoint` must be either `mantle` or `runtime`."
270
353
  end
271
354
 
272
355
  def normalize_base_url(base_url)
@@ -310,9 +393,18 @@ module OpenAI
310
393
  message
311
394
  end
312
395
 
313
- def validate_endpoint_region!(url, region)
314
- endpoint_region = CANONICAL_HOST.match(url.host)&.[](1)
315
- return if endpoint_region.nil? || endpoint_region == region
396
+ def validate_endpoint_region!(url, region, endpoint:)
397
+ canonical = parse_endpoint_hostname(url.host)
398
+ return unless canonical
399
+
400
+ if canonical.fetch(:endpoint) != endpoint
401
+ raise OpenAI::Errors::Error,
402
+ "The Bedrock #{canonical.fetch(:endpoint)} hostname does not match the " \
403
+ "selected `#{endpoint}` endpoint."
404
+ end
405
+
406
+ endpoint_region = canonical.fetch(:region)
407
+ return if endpoint_region == region
316
408
  message =
317
409
  "The Bedrock endpoint region `#{endpoint_region}` does not match the SigV4 " \
318
410
  "region `#{region}`."
@@ -342,16 +434,19 @@ module OpenAI
342
434
  end
343
435
 
344
436
  class << self
345
- # Configure the standard OpenAI client for Amazon Bedrock Mantle.
437
+ # Configure the standard OpenAI client for Amazon Bedrock Mantle or Runtime.
346
438
  #
347
439
  # Authentication precedence is an explicit bearer or AWS mode, then
348
440
  # AWS_BEARER_TOKEN_BEDROCK, then the standard AWS credential chain.
349
441
  #
442
+ # @param endpoint [String, Symbol, nil] Bedrock endpoint family. Defaults to
443
+ # Mantle unless a canonical Runtime `base_url` is supplied.
444
+ #
350
445
  # @param region [String, nil] AWS signing region. Defaults to `AWS_REGION`,
351
446
  # `AWS_DEFAULT_REGION`, or the selected profile's configured region.
352
447
  #
353
448
  # @param base_url [String, nil] Bedrock API root. Defaults to
354
- # `AWS_BEDROCK_BASE_URL` or the regional Bedrock Mantle endpoint.
449
+ # `AWS_BEDROCK_BASE_URL` or the selected regional Bedrock endpoint.
355
450
  #
356
451
  # @param api_key [String, nil] Explicit Bedrock bearer credential. Passing
357
452
  # `nil` explicitly skips the `AWS_BEARER_TOKEN_BEDROCK` fallback.
@@ -374,6 +469,7 @@ module OpenAI
374
469
  #
375
470
  # @return [OpenAI::Provider]
376
471
  def bedrock(
472
+ endpoint: nil,
377
473
  region: nil,
378
474
  base_url: OpenAI::Internal::OMIT,
379
475
  api_key: OpenAI::Internal::OMIT,
@@ -384,12 +480,12 @@ module OpenAI
384
480
  profile: nil,
385
481
  credentials_provider: nil
386
482
  )
483
+ normalized_endpoint = Bedrock.normalize_endpoint(endpoint)
387
484
  normalized_region = Bedrock.normalize_optional_string(region)
388
485
  if !region.nil? && normalized_region.nil?
389
486
  raise ArgumentError, "The Bedrock AWS `region` must not be empty."
390
487
  end
391
- normalized_region ||= Bedrock.normalize_optional_string(ENV["AWS_REGION"]) ||
392
- Bedrock.normalize_optional_string(ENV["AWS_DEFAULT_REGION"])
488
+ Bedrock.validate_region!(normalized_region) if normalized_region
393
489
 
394
490
  normalized_profile = Bedrock.normalize_optional_string(profile)
395
491
  if !profile.nil? && normalized_profile.nil?
@@ -407,6 +503,10 @@ module OpenAI
407
503
  normalized
408
504
  end
409
505
  configured_base_url = Bedrock.normalize_base_url(configured_base_url) if configured_base_url
506
+ canonical_endpoint = if configured_base_url
507
+ Bedrock.parse_endpoint_hostname(URI(configured_base_url).host)
508
+ end
509
+ resolved_endpoint = normalized_endpoint || canonical_endpoint&.fetch(:endpoint) || :mantle
410
510
 
411
511
  has_access_key = !access_key_id.nil?
412
512
  has_secret_key = !secret_access_key.nil?
@@ -469,11 +569,22 @@ module OpenAI
469
569
  end
470
570
  end
471
571
 
572
+ if normalized_region.nil? && (bearer_provider.nil? || configured_base_url.nil?)
573
+ normalized_region = Bedrock.normalize_optional_string(ENV["AWS_REGION"]) ||
574
+ Bedrock.normalize_optional_string(ENV["AWS_DEFAULT_REGION"])
575
+ Bedrock.validate_region!(normalized_region) if normalized_region
576
+ end
577
+
578
+ if configured_base_url
579
+ Bedrock.validate_canonical_endpoint!(configured_base_url, resolved_endpoint, normalized_region)
580
+ end
581
+
472
582
  if bearer_provider && configured_base_url.nil? && normalized_region.nil?
473
583
  raise ArgumentError, Bedrock::MISSING_REGION_MESSAGE
474
584
  end
475
585
 
476
586
  definition = Bedrock::Definition.new(
587
+ endpoint: resolved_endpoint,
477
588
  region: normalized_region,
478
589
  base_url: configured_base_url,
479
590
  bearer_provider: bearer_provider,
@@ -142,7 +142,7 @@ module OpenAI
142
142
  )
143
143
  end
144
144
 
145
- # Returns the contents of the specified file.
145
+ # Returns a response containing the contents of the specified file.
146
146
  #
147
147
  # @overload content(file_id, request_options: {})
148
148
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenAI
4
- VERSION = "0.79.0"
4
+ VERSION = "0.80.0"
5
5
  end
data/lib/openai.rb CHANGED
@@ -121,7 +121,6 @@ require_relative "openai/models/beta/beta_response_function_call_arguments_delta
121
121
  require_relative "openai/models/beta/beta_response_file_search_call_searching_event"
122
122
  require_relative "openai/models/beta/beta_response_file_search_call_in_progress_event"
123
123
  require_relative "openai/models/beta/beta_response_file_search_call_completed_event"
124
- require_relative "openai/models/beta/beta_response_error_event"
125
124
  require_relative "openai/models/beta/beta_response_created_event"
126
125
  require_relative "openai/models/beta/beta_response_content_part_done_event"
127
126
  require_relative "openai/models/beta/beta_response_content_part_added_event"
@@ -189,7 +188,6 @@ require_relative "openai/models/responses/response_function_call_arguments_delta
189
188
  require_relative "openai/models/responses/response_file_search_call_searching_event"
190
189
  require_relative "openai/models/responses/response_file_search_call_in_progress_event"
191
190
  require_relative "openai/models/responses/response_file_search_call_completed_event"
192
- require_relative "openai/models/responses/response_error_event"
193
191
  require_relative "openai/models/responses/response_created_event"
194
192
  require_relative "openai/models/responses/response_content_part_done_event"
195
193
  require_relative "openai/models/responses/response_content_part_added_event"
@@ -464,6 +462,7 @@ require_relative "openai/models/beta/beta_inline_skill"
464
462
  require_relative "openai/models/beta/beta_inline_skill_source"
465
463
  require_relative "openai/models/beta/beta_local_environment"
466
464
  require_relative "openai/models/beta/beta_local_skill"
465
+ require_relative "openai/models/beta/beta_mcp_tool_call_error"
467
466
  require_relative "openai/models/beta/beta_namespace_tool"
468
467
  require_relative "openai/models/beta/beta_response"
469
468
  require_relative "openai/models/beta/beta_response_apply_patch_tool_call"
@@ -480,6 +479,7 @@ require_relative "openai/models/beta/beta_response_conversation_param"
480
479
  require_relative "openai/models/beta/beta_response_custom_tool_call_item"
481
480
  require_relative "openai/models/beta/beta_response_custom_tool_call_output_item"
482
481
  require_relative "openai/models/beta/beta_response_error"
482
+ require_relative "openai/models/beta/beta_response_error_event"
483
483
  require_relative "openai/models/beta/beta_response_file_search_tool_call"
484
484
  require_relative "openai/models/beta/beta_response_format_text_config"
485
485
  require_relative "openai/models/beta/beta_response_format_text_json_schema_config"
@@ -1007,6 +1007,7 @@ require_relative "openai/models/responses/input_token_count_params"
1007
1007
  require_relative "openai/models/responses/input_token_count_response"
1008
1008
  require_relative "openai/models/responses/local_environment"
1009
1009
  require_relative "openai/models/responses/local_skill"
1010
+ require_relative "openai/models/responses/mcp_tool_call_error"
1010
1011
  require_relative "openai/models/responses/namespace_tool"
1011
1012
  require_relative "openai/models/responses/response"
1012
1013
  require_relative "openai/models/responses/response_apply_patch_tool_call"
@@ -1027,6 +1028,7 @@ require_relative "openai/models/responses/response_custom_tool_call_item"
1027
1028
  require_relative "openai/models/responses/response_custom_tool_call_output_item"
1028
1029
  require_relative "openai/models/responses/response_delete_params"
1029
1030
  require_relative "openai/models/responses/response_error"
1031
+ require_relative "openai/models/responses/response_error_event"
1030
1032
  require_relative "openai/models/responses/response_file_search_tool_call"
1031
1033
  require_relative "openai/models/responses/response_format_text_config"
1032
1034
  require_relative "openai/models/responses/response_format_text_json_schema_config"
@@ -65,6 +65,16 @@ module OpenAI
65
65
  :"computer-use-preview-2025-03-11",
66
66
  OpenAI::AllModels::ResponsesOnlyModel::TaggedSymbol
67
67
  )
68
+ GPT_5_5_PRO =
69
+ T.let(
70
+ :"gpt-5.5-pro",
71
+ OpenAI::AllModels::ResponsesOnlyModel::TaggedSymbol
72
+ )
73
+ GPT_5_5_PRO_2026_04_23 =
74
+ T.let(
75
+ :"gpt-5.5-pro-2026-04-23",
76
+ OpenAI::AllModels::ResponsesOnlyModel::TaggedSymbol
77
+ )
68
78
  GPT_5_CODEX =
69
79
  T.let(
70
80
  :"gpt-5-codex",
@@ -0,0 +1,122 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+ BetaMcpToolCallError = Beta::BetaMcpToolCallError
6
+
7
+ module Beta
8
+ module BetaMcpToolCallError
9
+ extend OpenAI::Internal::Type::Union
10
+
11
+ Variants =
12
+ T.type_alias do
13
+ T.any(
14
+ OpenAI::Beta::BetaMcpToolCallError::McpProtocolError,
15
+ OpenAI::Beta::BetaMcpToolCallError::McpToolExecutionError,
16
+ OpenAI::Beta::BetaMcpToolCallError::HTTPError
17
+ )
18
+ end
19
+
20
+ class McpProtocolError < OpenAI::Internal::Type::BaseModel
21
+ OrHash =
22
+ T.type_alias do
23
+ T.any(
24
+ OpenAI::Beta::BetaMcpToolCallError::McpProtocolError,
25
+ OpenAI::Internal::AnyHash
26
+ )
27
+ end
28
+
29
+ sig { returns(Integer) }
30
+ attr_accessor :code
31
+
32
+ sig { returns(String) }
33
+ attr_accessor :message
34
+
35
+ sig { returns(Symbol) }
36
+ attr_accessor :type
37
+
38
+ sig do
39
+ params(code: Integer, message: String, type: Symbol).returns(
40
+ T.attached_class
41
+ )
42
+ end
43
+ def self.new(code:, message:, type: :mcp_protocol_error)
44
+ end
45
+
46
+ sig do
47
+ override.returns({ code: Integer, message: String, type: Symbol })
48
+ end
49
+ def to_hash
50
+ end
51
+ end
52
+
53
+ class McpToolExecutionError < OpenAI::Internal::Type::BaseModel
54
+ OrHash =
55
+ T.type_alias do
56
+ T.any(
57
+ OpenAI::Beta::BetaMcpToolCallError::McpToolExecutionError,
58
+ OpenAI::Internal::AnyHash
59
+ )
60
+ end
61
+
62
+ sig { returns(T.anything) }
63
+ attr_accessor :content
64
+
65
+ sig { returns(Symbol) }
66
+ attr_accessor :type
67
+
68
+ sig do
69
+ params(content: T.anything, type: Symbol).returns(T.attached_class)
70
+ end
71
+ def self.new(content:, type: :mcp_tool_execution_error)
72
+ end
73
+
74
+ sig { override.returns({ content: T.anything, type: Symbol }) }
75
+ def to_hash
76
+ end
77
+ end
78
+
79
+ class HTTPError < OpenAI::Internal::Type::BaseModel
80
+ OrHash =
81
+ T.type_alias do
82
+ T.any(
83
+ OpenAI::Beta::BetaMcpToolCallError::HTTPError,
84
+ OpenAI::Internal::AnyHash
85
+ )
86
+ end
87
+
88
+ sig { returns(Integer) }
89
+ attr_accessor :code
90
+
91
+ sig { returns(String) }
92
+ attr_accessor :message
93
+
94
+ sig { returns(Symbol) }
95
+ attr_accessor :type
96
+
97
+ sig do
98
+ params(code: Integer, message: String, type: Symbol).returns(
99
+ T.attached_class
100
+ )
101
+ end
102
+ def self.new(code:, message:, type: :http_error)
103
+ end
104
+
105
+ sig do
106
+ override.returns({ code: Integer, message: String, type: Symbol })
107
+ end
108
+ def to_hash
109
+ end
110
+ end
111
+
112
+ sig do
113
+ override.returns(
114
+ T::Array[OpenAI::Beta::BetaMcpToolCallError::Variants]
115
+ )
116
+ end
117
+ def self.variants
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -284,6 +284,10 @@ module OpenAI
284
284
  # Responses or Chat Completions. The response will show `service_tier=priority`
285
285
  # regardless of if you specify `service_tier=fast` or `priority` in your
286
286
  # request.
287
+ # - If set to 'ultrafast', then the request will be processed with the
288
+ # access-controlled Ultrafast Processing service tier. This tier is currently
289
+ # available for `gpt-5.6-sol`; a response served through it will show
290
+ # `service_tier=ultrafast`.
287
291
  # - When not set, the default behavior is 'auto'.
288
292
  #
289
293
  # When the `service_tier` parameter is set, the response body will include the
@@ -624,6 +628,10 @@ module OpenAI
624
628
  # Responses or Chat Completions. The response will show `service_tier=priority`
625
629
  # regardless of if you specify `service_tier=fast` or `priority` in your
626
630
  # request.
631
+ # - If set to 'ultrafast', then the request will be processed with the
632
+ # access-controlled Ultrafast Processing service tier. This tier is currently
633
+ # available for `gpt-5.6-sol`; a response served through it will show
634
+ # `service_tier=ultrafast`.
627
635
  # - When not set, the default behavior is 'auto'.
628
636
  #
629
637
  # When the `service_tier` parameter is set, the response body will include the
@@ -881,6 +889,11 @@ module OpenAI
881
889
  )
882
890
  GPT_5_5 =
883
891
  T.let(:"gpt-5.5", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
892
+ GPT_5_5_2026_04_23 =
893
+ T.let(
894
+ :"gpt-5.5-2026-04-23",
895
+ OpenAI::Beta::BetaResponse::Model::TaggedSymbol
896
+ )
884
897
  GPT_5_4 =
885
898
  T.let(:"gpt-5.4", OpenAI::Beta::BetaResponse::Model::TaggedSymbol)
886
899
  GPT_5_4_MINI =
@@ -1274,6 +1287,16 @@ module OpenAI
1274
1287
  :"computer-use-preview-2025-03-11",
1275
1288
  OpenAI::Beta::BetaResponse::Model::TaggedSymbol
1276
1289
  )
1290
+ GPT_5_5_PRO =
1291
+ T.let(
1292
+ :"gpt-5.5-pro",
1293
+ OpenAI::Beta::BetaResponse::Model::TaggedSymbol
1294
+ )
1295
+ GPT_5_5_PRO_2026_04_23 =
1296
+ T.let(
1297
+ :"gpt-5.5-pro-2026-04-23",
1298
+ OpenAI::Beta::BetaResponse::Model::TaggedSymbol
1299
+ )
1277
1300
  GPT_5_CODEX =
1278
1301
  T.let(
1279
1302
  :"gpt-5-codex",
@@ -2448,6 +2471,10 @@ module OpenAI
2448
2471
  # Responses or Chat Completions. The response will show `service_tier=priority`
2449
2472
  # regardless of if you specify `service_tier=fast` or `priority` in your
2450
2473
  # request.
2474
+ # - If set to 'ultrafast', then the request will be processed with the
2475
+ # access-controlled Ultrafast Processing service tier. This tier is currently
2476
+ # available for `gpt-5.6-sol`; a response served through it will show
2477
+ # `service_tier=ultrafast`.
2451
2478
  # - When not set, the default behavior is 'auto'.
2452
2479
  #
2453
2480
  # When the `service_tier` parameter is set, the response body will include the
@@ -2481,6 +2508,11 @@ module OpenAI
2481
2508
  )
2482
2509
  FAST =
2483
2510
  T.let(:fast, OpenAI::Beta::BetaResponse::ServiceTier::TaggedSymbol)
2511
+ ULTRAFAST =
2512
+ T.let(
2513
+ :ultrafast,
2514
+ OpenAI::Beta::BetaResponse::ServiceTier::TaggedSymbol
2515
+ )
2484
2516
 
2485
2517
  sig do
2486
2518
  override.returns(
@@ -4811,7 +4811,17 @@ module OpenAI
4811
4811
  attr_accessor :approval_request_id
4812
4812
 
4813
4813
  # The error from the tool call, if any.
4814
- sig { returns(T.nilable(String)) }
4814
+ sig do
4815
+ returns(
4816
+ T.nilable(
4817
+ T.any(
4818
+ OpenAI::Beta::BetaMcpToolCallError::McpProtocolError,
4819
+ OpenAI::Beta::BetaMcpToolCallError::McpToolExecutionError,
4820
+ OpenAI::Beta::BetaMcpToolCallError::HTTPError
4821
+ )
4822
+ )
4823
+ )
4824
+ end
4815
4825
  attr_accessor :error
4816
4826
 
4817
4827
  # The output from the tool call.
@@ -4849,7 +4859,14 @@ module OpenAI
4849
4859
  OpenAI::Beta::BetaResponseInputItem::McpCall::Agent::OrHash
4850
4860
  ),
4851
4861
  approval_request_id: T.nilable(String),
4852
- error: T.nilable(String),
4862
+ error:
4863
+ T.nilable(
4864
+ T.any(
4865
+ OpenAI::Beta::BetaMcpToolCallError::McpProtocolError::OrHash,
4866
+ OpenAI::Beta::BetaMcpToolCallError::McpToolExecutionError::OrHash,
4867
+ OpenAI::Beta::BetaMcpToolCallError::HTTPError::OrHash
4868
+ )
4869
+ ),
4853
4870
  output: T.nilable(String),
4854
4871
  status:
4855
4872
  OpenAI::Beta::BetaResponseInputItem::McpCall::Status::OrSymbol,
@@ -4896,7 +4913,14 @@ module OpenAI
4896
4913
  OpenAI::Beta::BetaResponseInputItem::McpCall::Agent
4897
4914
  ),
4898
4915
  approval_request_id: T.nilable(String),
4899
- error: T.nilable(String),
4916
+ error:
4917
+ T.nilable(
4918
+ T.any(
4919
+ OpenAI::Beta::BetaMcpToolCallError::McpProtocolError,
4920
+ OpenAI::Beta::BetaMcpToolCallError::McpToolExecutionError,
4921
+ OpenAI::Beta::BetaMcpToolCallError::HTTPError
4922
+ )
4923
+ ),
4900
4924
  output: T.nilable(String),
4901
4925
  status:
4902
4926
  OpenAI::Beta::BetaResponseInputItem::McpCall::Status::OrSymbol
@@ -2415,7 +2415,17 @@ module OpenAI
2415
2415
  attr_accessor :approval_request_id
2416
2416
 
2417
2417
  # The error from the tool call, if any.
2418
- sig { returns(T.nilable(String)) }
2418
+ sig do
2419
+ returns(
2420
+ T.nilable(
2421
+ T.any(
2422
+ OpenAI::Beta::BetaMcpToolCallError::McpProtocolError,
2423
+ OpenAI::Beta::BetaMcpToolCallError::McpToolExecutionError,
2424
+ OpenAI::Beta::BetaMcpToolCallError::HTTPError
2425
+ )
2426
+ )
2427
+ )
2428
+ end
2419
2429
  attr_accessor :error
2420
2430
 
2421
2431
  # The output from the tool call.
@@ -2452,7 +2462,14 @@ module OpenAI
2452
2462
  OpenAI::Beta::BetaResponseItem::McpCall::Agent::OrHash
2453
2463
  ),
2454
2464
  approval_request_id: T.nilable(String),
2455
- error: T.nilable(String),
2465
+ error:
2466
+ T.nilable(
2467
+ T.any(
2468
+ OpenAI::Beta::BetaMcpToolCallError::McpProtocolError::OrHash,
2469
+ OpenAI::Beta::BetaMcpToolCallError::McpToolExecutionError::OrHash,
2470
+ OpenAI::Beta::BetaMcpToolCallError::HTTPError::OrHash
2471
+ )
2472
+ ),
2456
2473
  output: T.nilable(String),
2457
2474
  status: OpenAI::Beta::BetaResponseItem::McpCall::Status::OrSymbol,
2458
2475
  type: Symbol
@@ -2496,7 +2513,14 @@ module OpenAI
2496
2513
  agent:
2497
2514
  T.nilable(OpenAI::Beta::BetaResponseItem::McpCall::Agent),
2498
2515
  approval_request_id: T.nilable(String),
2499
- error: T.nilable(String),
2516
+ error:
2517
+ T.nilable(
2518
+ T.any(
2519
+ OpenAI::Beta::BetaMcpToolCallError::McpProtocolError,
2520
+ OpenAI::Beta::BetaMcpToolCallError::McpToolExecutionError,
2521
+ OpenAI::Beta::BetaMcpToolCallError::HTTPError
2522
+ )
2523
+ ),
2500
2524
  output: T.nilable(String),
2501
2525
  status:
2502
2526
  OpenAI::Beta::BetaResponseItem::McpCall::Status::TaggedSymbol