openai 0.97.0 → 0.98.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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -0
  3. data/README.md +76 -1
  4. data/lib/openai/helpers/agents/session_stream.rb +60 -3
  5. data/lib/openai/helpers/beta/agents/artifacts.rb +72 -0
  6. data/lib/openai/helpers/beta/agents/creation_stream.rb +69 -0
  7. data/lib/openai/helpers/beta/agents/files.rb +236 -0
  8. data/lib/openai/helpers/beta/agents/function_tool.rb +65 -0
  9. data/lib/openai/helpers/beta/agents/model_adapter.rb +27 -0
  10. data/lib/openai/helpers/beta/agents/result.rb +170 -0
  11. data/lib/openai/helpers/beta/agents/typed_output.rb +191 -0
  12. data/lib/openai/helpers/live/websocket.rb +7 -1
  13. data/lib/openai/helpers/realtime/conversation_item_variant_resolver.rb +1 -1
  14. data/lib/openai/helpers/responses_websocket/connection.rb +7 -1
  15. data/lib/openai/helpers/responses_websocket/session.rb +5 -1
  16. data/lib/openai/helpers/responses_websocket/transports/async_websocket.rb +12 -2
  17. data/lib/openai/internal/transport/base_client.rb +18 -0
  18. data/lib/openai/internal/type/array_of.rb +1 -1
  19. data/lib/openai/internal/type/base_model.rb +6 -3
  20. data/lib/openai/internal/type/converter.rb +50 -3
  21. data/lib/openai/internal/type/hash_of.rb +1 -1
  22. data/lib/openai/internal/type/union.rb +6 -6
  23. data/lib/openai/models/beta/agents/sessions/session_trace.rb +64 -0
  24. data/lib/openai/models/beta/agents/sessions/trace_list_params.rb +68 -0
  25. data/lib/openai/models/beta/agents/vaults/credential.rb +8 -4
  26. data/lib/openai/models/beta/beta_response_output_text.rb +2 -2
  27. data/lib/openai/models/beta/beta_response_output_text_annotation_added_event.rb +2 -2
  28. data/lib/openai/models/beta/environment.rb +33 -1
  29. data/lib/openai/models/beta/environment_param.rb +24 -1
  30. data/lib/openai/models/beta/session_turn_error.rb +3 -0
  31. data/lib/openai/models/chat/chat_completion_content_part_image.rb +1 -0
  32. data/lib/openai/models/live/fork_server_event.rb +14 -3
  33. data/lib/openai/models/live/server_event.rb +14 -3
  34. data/lib/openai/models/realtime/translations/client_secret_create_params.rb +28 -0
  35. data/lib/openai/models/responses/response_output_text.rb +2 -2
  36. data/lib/openai/models/responses/response_output_text_annotation_added_event.rb +2 -2
  37. data/lib/openai/resources/beta/agents/environments/files.rb +31 -0
  38. data/lib/openai/resources/beta/agents/sessions/artifacts.rb +8 -0
  39. data/lib/openai/resources/beta/agents/sessions/events.rb +6 -5
  40. data/lib/openai/resources/beta/agents/sessions/traces.rb +58 -0
  41. data/lib/openai/resources/beta/agents/sessions.rb +18 -5
  42. data/lib/openai/resources/evals/runs.rb +1 -1
  43. data/lib/openai/resources/realtime/translations/client_secrets.rb +58 -0
  44. data/lib/openai/resources/realtime/translations.rb +20 -0
  45. data/lib/openai/resources/realtime.rb +4 -0
  46. data/lib/openai/version.rb +1 -1
  47. data/lib/openai.rb +9 -1
  48. data/rbi/openai/helpers/agents.rbi +20 -1
  49. data/rbi/openai/helpers/beta/agents/artifacts.rbi +29 -0
  50. data/rbi/openai/helpers/beta/agents/files.rbi +65 -0
  51. data/rbi/openai/helpers/beta/agents/function_tool.rbi +40 -0
  52. data/rbi/openai/helpers/beta/agents/model_adapter.rbi +22 -0
  53. data/rbi/openai/helpers/beta/agents.rbi +146 -0
  54. data/rbi/openai/internal/transport/base_client.rbi +12 -0
  55. data/rbi/openai/internal/type/base_model.rbi +2 -2
  56. data/rbi/openai/internal/type/converter.rbi +21 -3
  57. data/rbi/openai/internal/type/union.rbi +6 -2
  58. data/rbi/openai/models/beta/agents/sessions/session_trace.rbi +97 -0
  59. data/rbi/openai/models/beta/agents/sessions/trace_list_params.rbi +121 -0
  60. data/rbi/openai/models/beta/agents/vaults/credential.rbi +5 -5
  61. data/rbi/openai/models/beta/beta_response_output_text.rbi +2 -2
  62. data/rbi/openai/models/beta/beta_response_output_text_annotation_added_event.rbi +2 -2
  63. data/rbi/openai/models/beta/environment.rbi +29 -0
  64. data/rbi/openai/models/beta/environment_param.rbi +31 -0
  65. data/rbi/openai/models/beta/session_turn_error.rbi +3 -0
  66. data/rbi/openai/models/chat/chat_completion_content_part_image.rbi +1 -0
  67. data/rbi/openai/models/live/fork_server_event.rbi +14 -2
  68. data/rbi/openai/models/live/server_event.rbi +14 -2
  69. data/rbi/openai/models/realtime/translations/client_secret_create_params.rbi +68 -0
  70. data/rbi/openai/models/responses/response_output_text.rbi +2 -2
  71. data/rbi/openai/models/responses/response_output_text_annotation_added_event.rbi +2 -2
  72. data/rbi/openai/resources/beta/agents/environments/files.rbi +31 -0
  73. data/rbi/openai/resources/beta/agents/sessions/artifacts.rbi +8 -0
  74. data/rbi/openai/resources/beta/agents/sessions/events.rbi +6 -5
  75. data/rbi/openai/resources/beta/agents/sessions/traces.rbi +54 -0
  76. data/rbi/openai/resources/beta/agents/sessions.rbi +6 -1
  77. data/rbi/openai/resources/realtime/translations/client_secrets.rbi +54 -0
  78. data/rbi/openai/resources/realtime/translations.rbi +22 -0
  79. data/rbi/openai/resources/realtime.rbi +3 -0
  80. data/sig/openai/helpers/agents.rbs +7 -0
  81. data/sig/openai/helpers/beta/agents/artifacts.rbs +20 -0
  82. data/sig/openai/helpers/beta/agents/files.rbs +41 -0
  83. data/sig/openai/helpers/beta/agents/function_tool.rbs +24 -0
  84. data/sig/openai/helpers/beta/agents/model_adapter.rbs +16 -0
  85. data/sig/openai/helpers/beta/agents.rbs +71 -0
  86. data/sig/openai/helpers/structured_output.rbs +12 -0
  87. data/sig/openai/internal/transport/base_client.rbs +8 -0
  88. data/sig/openai/internal/type/base_model.rbs +3 -1
  89. data/sig/openai/internal/type/converter.rbs +16 -2
  90. data/sig/openai/internal/type/union.rbs +2 -1
  91. data/sig/openai/models/beta/agents/sessions/session_trace.rbs +65 -0
  92. data/sig/openai/models/beta/agents/sessions/trace_list_params.rbs +81 -0
  93. data/sig/openai/models/beta/agents/vaults/credential.rbs +5 -5
  94. data/sig/openai/models/beta/beta_response_output_text.rbs +2 -2
  95. data/sig/openai/models/beta/beta_response_output_text_annotation_added_event.rbs +2 -2
  96. data/sig/openai/models/beta/environment.rbs +22 -0
  97. data/sig/openai/models/beta/environment_param.rbs +25 -0
  98. data/sig/openai/models/beta/session_turn_error.rbs +4 -0
  99. data/sig/openai/models/chat/chat_completion_content_part_image.rbs +2 -1
  100. data/sig/openai/models/live/fork_server_event.rbs +17 -2
  101. data/sig/openai/models/live/server_event.rbs +17 -2
  102. data/sig/openai/models/realtime/translations/client_secret_create_params.rbs +39 -0
  103. data/sig/openai/models/responses/response_output_text.rbs +2 -2
  104. data/sig/openai/models/responses/response_output_text_annotation_added_event.rbs +2 -2
  105. data/sig/openai/resources/beta/agents/environments/files.rbs +17 -0
  106. data/sig/openai/resources/beta/agents/sessions/artifacts.rbs +4 -0
  107. data/sig/openai/resources/beta/agents/sessions/traces.rbs +21 -0
  108. data/sig/openai/resources/beta/agents/sessions.rbs +4 -1
  109. data/sig/openai/resources/realtime/translations/client_secrets.rbs +17 -0
  110. data/sig/openai/resources/realtime/translations.rbs +11 -0
  111. data/sig/openai/resources/realtime.rbs +2 -0
  112. metadata +37 -1
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenAI
4
+ module Resources
5
+ class Beta
6
+ class Agents
7
+ class Sessions
8
+ class Traces
9
+ # Lists published root-turn traces as OTLP JSON, ordered by turn creation time and
10
+ # ID. Unpublished traces are skipped. Each page returns data available when read;
11
+ # it does not wait for late traces. Trace reads and the JSON response are limited
12
+ # to 16 MiB per request. If the limit is exceeded, request fewer traces.
13
+ #
14
+ # @overload list(session_id, after: nil, limit: nil, order: nil, request_options: {})
15
+ #
16
+ # @param session_id [String]
17
+ # The ID of the session.
18
+ #
19
+ # @param after [String]
20
+ # Return resources after this resource ID in the selected order.
21
+ #
22
+ # @param limit [Integer]
23
+ # The maximum number of resources to return, between 1 and 100. Defaults to 20.
24
+ #
25
+ # @param order [Symbol, OpenAI::Models::Beta::Agents::Sessions::TraceListParams::Order]
26
+ # The order in which resources are returned. Defaults to `desc`.
27
+ #
28
+ # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
29
+ #
30
+ # @return [OpenAI::Internal::CursorPage<OpenAI::Models::Beta::Agents::Sessions::SessionTrace>]
31
+ #
32
+ # @see OpenAI::Models::Beta::Agents::Sessions::TraceListParams
33
+ def list(session_id, params = {})
34
+ parsed, options = OpenAI::Beta::Agents::Sessions::TraceListParams.dump_request(params)
35
+ query = OpenAI::Internal::Util.encode_query_params(parsed)
36
+ @client.request(
37
+ method: :get,
38
+ path: ["agents/sessions/%1$s/traces", session_id],
39
+ query: query,
40
+ page: OpenAI::Internal::CursorPage,
41
+ model: OpenAI::Beta::Agents::Sessions::SessionTrace,
42
+ security: {bearer_auth: true},
43
+ options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options}
44
+ )
45
+ end
46
+
47
+ # @api private
48
+ #
49
+ # @param client [OpenAI::Client]
50
+ def initialize(client:)
51
+ @client = client
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -17,6 +17,9 @@ module OpenAI
17
17
  # @return [OpenAI::Resources::Beta::Agents::Sessions::Events]
18
18
  attr_reader :events
19
19
 
20
+ # @return [OpenAI::Resources::Beta::Agents::Sessions::Traces]
21
+ attr_reader :traces
22
+
20
23
  # @return [OpenAI::Resources::Beta::Agents::Sessions::Turns]
21
24
  attr_reader :turns
22
25
 
@@ -82,7 +85,7 @@ module OpenAI
82
85
  # the session or streams its events when stream is true. See
83
86
  # [running sessions](https://developers.openai.com/api/docs/guides/agents-api/sessions).
84
87
  #
85
- # @overload create_streaming(environment:, agent: nil, agent_id: nil, input: nil, metadata: nil, vault_ids: nil, request_options: {})
88
+ # @overload create_streaming(environment:, agent: nil, agent_id: nil, input: nil, output_type: nil, metadata: nil, vault_ids: nil, request_options: {})
86
89
  #
87
90
  # @param environment [OpenAI::Models::Beta::EnvironmentParam::None, OpenAI::Models::Beta::EnvironmentParam::OpenAIHosted, OpenAI::Models::Beta::EnvironmentParam::SelfHosted]
88
91
  # An inline execution environment or a reference to an environment template.
@@ -108,29 +111,36 @@ module OpenAI
108
111
  # @param vault_ids [Array<String>, nil]
109
112
  # The IDs of vaults made available to the session.
110
113
  #
114
+ # @param output_type [Class<OpenAI::BaseModel>, nil] Beta: configure and parse a structured answer.
115
+ #
111
116
  # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
112
117
  #
113
- # @return [OpenAI::Internal::Stream<OpenAI::Models::Beta::AgentSessionErrorEvent, OpenAI::Models::Beta::AgentSessionEnvironmentReadyEvent, OpenAI::Models::Beta::AgentSessionEnvironmentResetEvent, OpenAI::Models::Beta::AgentOutputCommandExecutionOutputDeltaEvent, OpenAI::Models::Beta::AgentSessionCreatedEvent, OpenAI::Models::Beta::AgentSessionTurnCreatedEvent, OpenAI::Models::Beta::AgentSessionTurnInProgressEvent, OpenAI::Models::Beta::AgentSessionTurnCompletedEvent, OpenAI::Models::Beta::AgentSessionTurnFailedEvent, OpenAI::Models::Beta::AgentSessionTurnCancelledEvent, OpenAI::Models::Beta::AgentSessionTurnItemAddedEvent, OpenAI::Models::Beta::AgentSessionIdleEvent, OpenAI::Models::Beta::AgentSessionInProgressEvent, OpenAI::Models::Beta::AgentSessionRequiresActionEvent, OpenAI::Models::Beta::AgentSessionFailedEvent, OpenAI::Models::Beta::AgentSessionEnvironmentPendingEvent, OpenAI::Models::Beta::AgentSessionEnvironmentConnectedEvent, OpenAI::Models::Beta::AgentSessionEnvironmentDisconnectedEvent, OpenAI::Models::Beta::AgentSessionEnvironmentFailedEvent, OpenAI::Models::Beta::AgentSessionSubagentCreatedEvent, OpenAI::Models::Beta::AgentSessionSubagentActiveEvent, OpenAI::Models::Beta::AgentSessionSubagentClosedEvent, OpenAI::Models::Beta::AgentSessionTurnItemDoneEvent, OpenAI::Models::Beta::AgentSessionTurnContentPartAddedEvent, OpenAI::Models::Beta::AgentSessionTurnContentPartDoneEvent, OpenAI::Models::Beta::AgentSessionTurnOutputTextDeltaEvent, OpenAI::Models::Beta::AgentSessionTurnOutputTextDoneEvent, OpenAI::Models::Beta::AgentSessionTurnReasoningSummaryPartAddedEvent, OpenAI::Models::Beta::AgentSessionTurnReasoningSummaryPartDoneEvent, OpenAI::Models::Beta::AgentSessionTurnReasoningSummaryTextDeltaEvent, OpenAI::Models::Beta::AgentSessionTurnReasoningSummaryTextDoneEvent>]
118
+ # @return [OpenAI::Helpers::Beta::Agents::CreationStream]
114
119
  #
115
120
  # @see OpenAI::Models::Beta::Agents::SessionCreateParams
116
121
  def create_streaming(params)
122
+ params = params.to_h.transform_keys { _1.is_a?(String) ? _1.to_sym : _1 }
123
+ output_type = params.delete(:output_type)
124
+ parser = OpenAI::Helpers::Beta::Agents::OutputParser.new(output_type) unless output_type.nil?
117
125
  parsed, options = OpenAI::Beta::Agents::SessionCreateParams.dump_request(params)
118
126
  unless parsed.fetch(:stream, true)
119
127
  message = "Please use `#create` for the non-streaming use case."
120
128
  raise ArgumentError.new(message)
121
129
  end
122
130
 
131
+ parser&.prepare_request(parsed)
123
132
  parsed.store(:stream, true)
124
- @client.request(
133
+ stream = @client.request(
125
134
  method: :post,
126
135
  path: "agents/sessions",
127
136
  headers: {"accept" => "text/event-stream", "accept-encoding" => "identity"},
128
137
  body: parsed,
129
- stream: OpenAI::Internal::Stream,
138
+ stream: OpenAI::Helpers::Beta::Agents::CreationStream,
130
139
  model: OpenAI::Beta::AgentSessionEvent,
131
140
  security: {bearer_auth: true},
132
141
  options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options}
133
142
  )
143
+ stream.configure_output_parser(parser)
134
144
  end
135
145
 
136
146
  # Retrieves the current state of a managed agent session. See
@@ -265,16 +275,18 @@ module OpenAI
265
275
  # @param input [String, Array<OpenAI::Models::Beta::AgentSessionInputMessageParam>]
266
276
  # @param tool_handlers [Hash{String=>Proc}]
267
277
  # @param idempotency_key [String, nil] Applies only to the input submission.
278
+ # @param output_type [Class<OpenAI::BaseModel>, nil] Beta: parse output without changing session configuration.
268
279
  # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
269
280
  # @yieldparam stream [OpenAI::Helpers::Agents::SessionStream]
270
281
  # @return [OpenAI::Helpers::Agents::SessionStream]
271
- def stream(session_id, input:, tool_handlers: {}, idempotency_key: nil, request_options: {})
282
+ def stream(session_id, input:, tool_handlers: {}, idempotency_key: nil, output_type: nil, request_options: {})
272
283
  stream = OpenAI::Helpers::Agents::SessionStream.new(
273
284
  sessions: self,
274
285
  session_id: session_id,
275
286
  input: input,
276
287
  tool_handlers: tool_handlers,
277
288
  idempotency_key: idempotency_key,
289
+ output_type: output_type,
278
290
  request_options: request_options
279
291
  )
280
292
  return stream unless block_given?
@@ -297,6 +309,7 @@ module OpenAI
297
309
  @artifacts = OpenAI::Resources::Beta::Agents::Sessions::Artifacts.new(client: client)
298
310
  @items = OpenAI::Resources::Beta::Agents::Sessions::Items.new(client: client)
299
311
  @events = OpenAI::Resources::Beta::Agents::Sessions::Events.new(client: client)
312
+ @traces = OpenAI::Resources::Beta::Agents::Sessions::Traces.new(client: client)
300
313
  @turns = OpenAI::Resources::Beta::Agents::Sessions::Turns.new(client: client)
301
314
  end
302
315
  end
@@ -172,7 +172,7 @@ module OpenAI
172
172
 
173
173
  @client.request(
174
174
  method: :post,
175
- path: ["evals/%1$s/runs/%2$s", eval_id, run_id],
175
+ path: ["evals/%1$s/runs/%2$s/cancel", eval_id, run_id],
176
176
  model: OpenAI::Models::Evals::RunCancelResponse,
177
177
  security: {bearer_auth: true},
178
178
  options: options
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenAI
4
+ module Resources
5
+ class Realtime
6
+ class Translations
7
+ class ClientSecrets
8
+ # Create a Realtime translation client secret with an associated translation
9
+ # session configuration.
10
+ #
11
+ # Client secrets are short-lived tokens that can be passed to a client app, such
12
+ # as a web frontend or mobile client, which grants access to the Realtime
13
+ # Translation API without leaking your main API key. You can configure a custom
14
+ # TTL for each client secret.
15
+ #
16
+ # Returns the created client secret and the effective translation session object.
17
+ # The client secret is a string that looks like `ek_1234`.
18
+ #
19
+ # @overload create(session:, expires_after: nil, request_options: {})
20
+ #
21
+ # @param session [OpenAI::Models::Realtime::RealtimeTranslationSessionCreateRequest]
22
+ # Realtime translation session configuration. Translation sessions stream source
23
+ # audio in and translated audio plus transcript deltas out continuously.
24
+ #
25
+ # @param expires_after [OpenAI::Models::Realtime::RealtimeTranslationClientSecretCreateRequest::ExpiresAfter]
26
+ # Configuration for the client secret expiration. Expiration refers to the time
27
+ # after which a client secret will no longer be valid for creating sessions. The
28
+ # session itself may continue after that time once started. A secret can be used
29
+ # to create multiple sessions until it expires.
30
+ #
31
+ # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
32
+ #
33
+ # @return [OpenAI::Models::Realtime::RealtimeTranslationClientSecretCreateResponse]
34
+ #
35
+ # @see OpenAI::Models::Realtime::Translations::ClientSecretCreateParams
36
+ def create(params)
37
+ parsed, options = OpenAI::Realtime::Translations::ClientSecretCreateParams.dump_request(params)
38
+ @client.request(
39
+ method: :post,
40
+ path: "realtime/translations/client_secrets",
41
+ body: parsed,
42
+ model: OpenAI::Realtime::RealtimeTranslationClientSecretCreateResponse,
43
+ security: {bearer_auth: true},
44
+ options: options
45
+ )
46
+ end
47
+
48
+ # @api private
49
+ #
50
+ # @param client [OpenAI::Client]
51
+ def initialize(client:)
52
+ @client = client
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenAI
4
+ module Resources
5
+ class Realtime
6
+ class Translations
7
+ # @return [OpenAI::Resources::Realtime::Translations::ClientSecrets]
8
+ attr_reader :client_secrets
9
+
10
+ # @api private
11
+ #
12
+ # @param client [OpenAI::Client]
13
+ def initialize(client:)
14
+ @client = client
15
+ @client_secrets = OpenAI::Resources::Realtime::Translations::ClientSecrets.new(client: client)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -9,6 +9,9 @@ module OpenAI
9
9
  # @return [OpenAI::Resources::Realtime::Calls]
10
10
  attr_reader :calls
11
11
 
12
+ # @return [OpenAI::Resources::Realtime::Translations]
13
+ attr_reader :translations
14
+
12
15
  # @api private
13
16
  #
14
17
  # @param client [OpenAI::Client]
@@ -16,6 +19,7 @@ module OpenAI
16
19
  @client = client
17
20
  @client_secrets = OpenAI::Resources::Realtime::ClientSecrets.new(client: client)
18
21
  @calls = OpenAI::Resources::Realtime::Calls.new(client: client)
22
+ @translations = OpenAI::Resources::Realtime::Translations.new(client: client)
19
23
  end
20
24
  end
21
25
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenAI
4
- VERSION = "0.97.0"
4
+ VERSION = "0.98.0"
5
5
  end
data/lib/openai.rb CHANGED
@@ -163,6 +163,7 @@ require_relative "openai/models/graders/python_grader"
163
163
  require_relative "openai/models/graders/text_similarity_grader"
164
164
  require_relative "openai/models/fine_tuning/fine_tuning_job_wandb_integration_object"
165
165
  require_relative "openai/models/realtime/realtime_session_create_request"
166
+ require_relative "openai/models/realtime/realtime_translation_client_secret_create_request"
166
167
  require_relative "openai/models/responses/response_custom_tool_call"
167
168
  require_relative "openai/models/responses/response_custom_tool_call_output"
168
169
  require_relative "openai/models/responses/response_function_tool_call"
@@ -515,12 +516,14 @@ require_relative "openai/models/beta/agents/sessions/event_stream_params"
515
516
  require_relative "openai/models/beta/agents/sessions/item_list_params"
516
517
  require_relative "openai/models/beta/agents/sessions/session_artifact"
517
518
  require_relative "openai/models/beta/agents/sessions/session_artifact_deleted"
519
+ require_relative "openai/models/beta/agents/sessions/session_trace"
518
520
  require_relative "openai/models/beta/agents/sessions/subagent_list_params"
519
521
  require_relative "openai/models/beta/agents/sessions/subagent_retrieve_params"
520
522
  require_relative "openai/models/beta/agents/sessions/subagents/item_list_params"
521
523
  require_relative "openai/models/beta/agents/sessions/subagents/turn_list_params"
522
524
  require_relative "openai/models/beta/agents/sessions/subagents/turn_retrieve_params"
523
525
  require_relative "openai/models/beta/agents/sessions/subagents/turns/item_list_params"
526
+ require_relative "openai/models/beta/agents/sessions/trace_list_params"
524
527
  require_relative "openai/models/beta/agents/sessions/turn"
525
528
  require_relative "openai/models/beta/agents/sessions/turn_list_params"
526
529
  require_relative "openai/models/beta/agents/sessions/turn_retrieve_params"
@@ -1204,7 +1207,6 @@ require_relative "openai/models/realtime/realtime_transcription_session_create_r
1204
1207
  require_relative "openai/models/realtime/realtime_transcription_session_create_response"
1205
1208
  require_relative "openai/models/realtime/realtime_transcription_session_turn_detection"
1206
1209
  require_relative "openai/models/realtime/realtime_translation_client_event"
1207
- require_relative "openai/models/realtime/realtime_translation_client_secret_create_request"
1208
1210
  require_relative "openai/models/realtime/realtime_translation_client_secret_create_response"
1209
1211
  require_relative "openai/models/realtime/realtime_translation_input_audio_buffer_append_event"
1210
1212
  require_relative "openai/models/realtime/realtime_translation_input_transcript_delta_event"
@@ -1247,6 +1249,7 @@ require_relative "openai/models/realtime/session_updated_event"
1247
1249
  require_relative "openai/models/realtime/session_update_event"
1248
1250
  require_relative "openai/models/realtime/transcription_session_update"
1249
1251
  require_relative "openai/models/realtime/transcription_session_updated_event"
1252
+ require_relative "openai/models/realtime/translations/client_secret_create_params"
1250
1253
  require_relative "openai/models/reasoning"
1251
1254
  require_relative "openai/models/response_format_json_object"
1252
1255
  require_relative "openai/models/response_format_json_schema"
@@ -1521,6 +1524,7 @@ require_relative "openai/resources/beta/agents/sessions/subagents"
1521
1524
  require_relative "openai/resources/beta/agents/sessions/subagents/items"
1522
1525
  require_relative "openai/resources/beta/agents/sessions/subagents/turns"
1523
1526
  require_relative "openai/resources/beta/agents/sessions/subagents/turns/items"
1527
+ require_relative "openai/resources/beta/agents/sessions/traces"
1524
1528
  require_relative "openai/resources/beta/agents/sessions/turns"
1525
1529
  require_relative "openai/resources/beta/agents/vaults"
1526
1530
  require_relative "openai/resources/beta/agents/vaults/credentials"
@@ -1570,6 +1574,8 @@ require_relative "openai/resources/moderations"
1570
1574
  require_relative "openai/resources/realtime"
1571
1575
  require_relative "openai/resources/realtime/calls"
1572
1576
  require_relative "openai/resources/realtime/client_secrets"
1577
+ require_relative "openai/resources/realtime/translations"
1578
+ require_relative "openai/resources/realtime/translations/client_secrets"
1573
1579
  require_relative "openai/resources/responses"
1574
1580
  require_relative "openai/resources/responses/input_items"
1575
1581
  require_relative "openai/resources/responses/input_tokens"
@@ -1599,5 +1605,7 @@ require_relative "openai/helpers/realtime"
1599
1605
  require_relative "openai/helpers/responses_websocket"
1600
1606
  require_relative "openai/helpers/live/websocket"
1601
1607
 
1608
+ require_relative "openai/helpers/beta/agents/creation_stream"
1602
1609
  require_relative "openai/helpers/agents/session_stream"
1610
+ require_relative "openai/helpers/beta/agents/function_tool"
1603
1611
  require_relative "openai/helpers/agents/message"
@@ -26,6 +26,16 @@ module OpenAI
26
26
  def each(&block)
27
27
  end
28
28
 
29
+ # @beta
30
+ sig { returns(OpenAI::Helpers::Beta::Agents::TurnResult) }
31
+ def get_final_result
32
+ end
33
+
34
+ # @beta
35
+ sig { returns(T.self_type) }
36
+ def with_result_collection
37
+ end
38
+
29
39
  sig { void }
30
40
  def close
31
41
  end
@@ -47,12 +57,21 @@ module OpenAI
47
57
  input: T.any(String, T::Array[OpenAI::Models::Beta::AgentSessionInputMessageParam::OrHash]),
48
58
  tool_handlers: T::Hash[String, OpenAI::Helpers::Agents::ToolHandler],
49
59
  idempotency_key: T.nilable(String),
60
+ output_type: T.nilable(T.class_of(OpenAI::Helpers::StructuredOutput::BaseModel)),
50
61
  request_options: T.nilable(OpenAI::RequestOptions::OrHash),
51
62
  block: T.nilable(T.proc.params(stream: OpenAI::Helpers::Agents::SessionStream).void)
52
63
  )
53
64
  .returns(OpenAI::Helpers::Agents::SessionStream)
54
65
  end
55
- def stream(session_id, input:, tool_handlers: {}, idempotency_key: nil, request_options: {}, &block)
66
+ def stream(
67
+ session_id,
68
+ input:,
69
+ tool_handlers: {},
70
+ idempotency_key: nil,
71
+ output_type: nil,
72
+ request_options: {},
73
+ &block
74
+ )
56
75
  end
57
76
  end
58
77
  end
@@ -0,0 +1,29 @@
1
+ # typed: strong
2
+ module OpenAI
3
+ module Helpers
4
+ module Beta
5
+ module Agents
6
+ class ResultArtifacts
7
+ sig {
8
+ params(
9
+ artifacts: OpenAI::Resources::Beta::Agents::Sessions::Artifacts,
10
+ client: OpenAI::Client,
11
+ result: TurnResult
12
+ )
13
+ .void
14
+ }
15
+ def initialize(artifacts:, client:, result:)
16
+ end
17
+
18
+ sig {
19
+ params(path: String, to: T.untyped, request_options: OpenAI::RequestOptions::OrHash).returns(
20
+ OpenAI::Models::Beta::Agents::Sessions::SessionArtifact
21
+ )
22
+ }
23
+ def download(path:, to:, request_options: {})
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,65 @@
1
+ # typed: strong
2
+ module OpenAI
3
+ module Helpers
4
+ module Beta
5
+ module Agents
6
+ class PreparedFiles
7
+ sig { returns(T::Array[OpenAI::Models::Beta::HostedEnvironmentFileParam::FileID]) }
8
+ attr_reader :files
9
+ sig { returns(T::Array[String]) }
10
+ attr_reader :upload_ids
11
+ sig { params(files: T::Array[T::Hash[Symbol, T.untyped]]).void }
12
+ def initialize(files)
13
+ end
14
+ end
15
+
16
+ class FilePreparationError < OpenAI::Errors::Error
17
+ sig { returns(PreparedFiles) }
18
+ attr_reader :prepared
19
+ sig { params(prepared: PreparedFiles).returns(T.attached_class) }
20
+ def self.new(prepared:)
21
+ end
22
+ end
23
+ # @api private
24
+ class FilePreparation
25
+ sig {
26
+ params(client: OpenAI::Client, environment_files: OpenAI::Resources::Beta::Agents::Environments::Files).void
27
+ }
28
+ def initialize(client:, environment_files:)
29
+ end
30
+
31
+ sig {
32
+ params(files: T::Hash[String, T.any(String, Pathname)], request_options: OpenAI::RequestOptions::OrHash)
33
+ .returns(PreparedFiles)
34
+ }
35
+ def prepare(files, request_options: {})
36
+ end
37
+
38
+ sig {
39
+ params(
40
+ directory: T.any(String, Pathname),
41
+ destination: String,
42
+ include: T::Array[String],
43
+ request_options: OpenAI::RequestOptions::OrHash
44
+ )
45
+ .returns(PreparedFiles)
46
+ }
47
+ def prepare_directory(directory, destination:, include:, request_options: {})
48
+ end
49
+
50
+ sig {
51
+ params(
52
+ environment_id: String,
53
+ file: T.any(String, Pathname),
54
+ path: String,
55
+ request_options: OpenAI::RequestOptions::OrHash
56
+ )
57
+ .returns(PreparedFiles)
58
+ }
59
+ def upload(environment_id, file:, path:, request_options: {})
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,40 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Helpers
5
+ module Beta
6
+ module Agents
7
+ class FunctionTool
8
+ sig { returns(String) }
9
+ attr_reader :name
10
+
11
+ sig do
12
+ params(
13
+ name: String,
14
+ arguments: T.class_of(OpenAI::BaseModel),
15
+ description: String,
16
+ handler: T.proc.params(arguments: T.untyped).returns(OpenAI::Helpers::Agents::ToolOutput)
17
+ )
18
+ .void
19
+ end
20
+ def initialize(name:, arguments:, description: "", &handler)
21
+ end
22
+
23
+ sig { returns(OpenAI::Internal::AnyHash) }
24
+ def definition
25
+ end
26
+
27
+ sig { returns(T::Hash[String, OpenAI::Helpers::Agents::ToolHandler]) }
28
+ def handlers
29
+ end
30
+
31
+ sig {
32
+ params(arguments: T.any(String, OpenAI::Internal::AnyHash)).returns(OpenAI::Helpers::Agents::ToolOutput)
33
+ }
34
+ def call(arguments)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,22 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Helpers
5
+ module Beta
6
+ module Agents
7
+ module ModelAdapter
8
+ sig { params(model: T.untyped, parameter: String).void }
9
+ def self.validate!(model, parameter:)
10
+ end
11
+
12
+ sig do
13
+ params(model: T.class_of(OpenAI::BaseModel), value: T.untyped, memoize: T::Boolean)
14
+ .returns(T.nilable(OpenAI::BaseModel))
15
+ end
16
+ def self.coerce(model, value, memoize: false)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,146 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Helpers
5
+ module Beta
6
+ module Agents
7
+ class TurnResult
8
+ sig { returns(OpenAI::Models::Beta::Agents::Sessions::Turn) }
9
+ def turn
10
+ end
11
+
12
+ sig { returns(T::Array[OpenAI::Models::Beta::AgentSessionMessage]) }
13
+ def messages
14
+ end
15
+
16
+ sig { returns(String) }
17
+ def session_id
18
+ end
19
+
20
+ sig { returns(String) }
21
+ def turn_id
22
+ end
23
+
24
+ sig { returns(String) }
25
+ def output_text
26
+ end
27
+
28
+ sig { returns(T.untyped) }
29
+ def output_parsed
30
+ end
31
+
32
+ sig {
33
+ params(output_type: T.class_of(OpenAI::Helpers::StructuredOutput::BaseModel)).returns(ParsedTurnResult)
34
+ }
35
+ def parse(output_type:)
36
+ end
37
+ end
38
+
39
+ class ResultError < OpenAI::Errors::Error
40
+ sig { returns(Symbol) }
41
+ def reason
42
+ end
43
+
44
+ sig { returns(T.nilable(String)) }
45
+ def session_id
46
+ end
47
+
48
+ sig { returns(T.nilable(OpenAI::Models::Beta::Agents::Sessions::Turn)) }
49
+ def turn
50
+ end
51
+
52
+ sig { returns(T::Array[OpenAI::Models::Beta::AgentSessionMessage]) }
53
+ def messages
54
+ end
55
+
56
+ sig {
57
+ returns(
58
+ T::Array[T.any(OpenAI::Models::Beta::AgentSession::RequiredAction::Variants, OpenAI::Internal::AnyHash)]
59
+ )
60
+ }
61
+ def required_actions
62
+ end
63
+
64
+ sig { returns(T.nilable(String)) }
65
+ def turn_id
66
+ end
67
+ end
68
+
69
+ # @api private
70
+ class ResultCollector
71
+ sig { params(session_id: T.nilable(String), handler_names: T::Array[String]).void }
72
+ def initialize(session_id: nil, handler_names: [])
73
+ end
74
+
75
+ sig { void }
76
+ def enable
77
+ end
78
+
79
+ sig {
80
+ params(event: T.any(OpenAI::Models::Beta::AgentSessionEvent::Variants, OpenAI::Internal::AnyHash)).void
81
+ }
82
+ def observe(event)
83
+ end
84
+
85
+ sig { returns(T.nilable(T::Boolean)) }
86
+ def stopped?
87
+ end
88
+
89
+ sig { params(error: StandardError).void }
90
+ def observe_error(error)
91
+ end
92
+
93
+ sig { returns(TurnResult) }
94
+ def result
95
+ end
96
+ end
97
+
98
+ class ParsedTurnResult < TurnResult
99
+ sig { returns(TurnResult) }
100
+ attr_reader :raw_result
101
+
102
+ sig { returns(T.untyped) }
103
+ attr_reader :output_parsed
104
+ end
105
+
106
+ class OutputParseError < OpenAI::Errors::Error
107
+ sig { returns(TurnResult) }
108
+ attr_reader :raw_result
109
+ end
110
+
111
+ # @api private
112
+ class OutputParser
113
+ sig { params(model: T.class_of(OpenAI::Helpers::StructuredOutput::BaseModel)).void }
114
+ def initialize(model)
115
+ end
116
+
117
+ sig { params(params: OpenAI::Internal::AnyHash).void }
118
+ def prepare_request(params)
119
+ end
120
+
121
+ sig { params(result: TurnResult).returns(ParsedTurnResult) }
122
+ def parse(result)
123
+ end
124
+ end
125
+
126
+ class CreationStream < OpenAI::Internal::Stream
127
+ Message = type_member(:in) { {fixed: OpenAI::Internal::Util::ServerSentEvent} }
128
+ Elem = type_member(:out) { {fixed: OpenAI::Models::Beta::AgentSessionEvent::Variants} }
129
+
130
+ sig { returns(TurnResult) }
131
+ def get_final_result
132
+ end
133
+
134
+ sig { returns(T.self_type) }
135
+ def with_result_collection
136
+ end
137
+
138
+ # @api private
139
+ sig { params(parser: T.nilable(OutputParser)).returns(T.self_type) }
140
+ def configure_output_parser(parser)
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end