Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.28.1"
".": "0.29.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 118
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-e205b1f2da6a1f2caa229efa9ede63f2d3d2fedeeb2dd6ed3d880bafdcb0ab88.yml
openapi_spec_hash: c8aee2469a749f6a838b40c57e4b7b06
config_hash: 45dcba51451ba532959c020a0ddbf23c
configured_endpoints: 122
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-fadefdc7c7e30df47c09df323669b242ff90ee08e51f304175ace5274e0aab49.yml
openapi_spec_hash: 6d20f639d9ff8a097a34962da6218231
config_hash: 902654e60f5d659f2bfcfd903e17c46d
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## 0.29.0 (2025-10-02)

Full Changelog: [v0.28.1...v0.29.0](https://github.com/openai/openai-ruby/compare/v0.28.1...v0.29.0)

### Features

* **api:** add support for realtime calls ([2c89d20](https://github.com/openai/openai-ruby/commit/2c89d20072ed1611227bcdb0cb3771407e5c0a21))

## 0.28.1 (2025-10-01)

Full Changelog: [v0.28.0...v0.28.1](https://github.com/openai/openai-ruby/compare/v0.28.0...v0.28.1)
Expand Down
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ GIT
PATH
remote: .
specs:
openai (0.28.1)
openai (0.29.0)
connection_pool

GEM
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ To use this gem, install via Bundler by adding the following to your application
<!-- x-release-please-start-version -->

```ruby
gem "openai", "~> 0.28.1"
gem "openai", "~> 0.29.0"
```

<!-- x-release-please-end -->
Expand Down
7 changes: 6 additions & 1 deletion lib/openai.rb
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
require_relative "openai/models/graders/python_grader"
require_relative "openai/models/graders/text_similarity_grader"
require_relative "openai/models/fine_tuning/fine_tuning_job_wandb_integration_object"
require_relative "openai/models/realtime/realtime_session_create_request"
require_relative "openai/models/responses/response_function_tool_call"
require_relative "openai/models/all_models"
require_relative "openai/models/audio/speech_create_params"
Expand Down Expand Up @@ -383,6 +384,10 @@
require_relative "openai/models/moderation_text_input"
require_relative "openai/models/other_file_chunking_strategy_object"
require_relative "openai/models/realtime/audio_transcription"
require_relative "openai/models/realtime/call_accept_params"
require_relative "openai/models/realtime/call_hangup_params"
require_relative "openai/models/realtime/call_refer_params"
require_relative "openai/models/realtime/call_reject_params"
require_relative "openai/models/realtime/client_secret_create_params"
require_relative "openai/models/realtime/client_secret_create_response"
require_relative "openai/models/realtime/conversation_created_event"
Expand Down Expand Up @@ -448,7 +453,6 @@
require_relative "openai/models/realtime/realtime_server_event"
require_relative "openai/models/realtime/realtime_session"
require_relative "openai/models/realtime/realtime_session_client_secret"
require_relative "openai/models/realtime/realtime_session_create_request"
require_relative "openai/models/realtime/realtime_session_create_response"
require_relative "openai/models/realtime/realtime_tool_choice_config"
require_relative "openai/models/realtime/realtime_tools_config"
Expand Down Expand Up @@ -695,6 +699,7 @@
require_relative "openai/resources/models"
require_relative "openai/resources/moderations"
require_relative "openai/resources/realtime"
require_relative "openai/resources/realtime/calls"
require_relative "openai/resources/realtime/client_secrets"
require_relative "openai/resources/responses"
require_relative "openai/resources/responses/input_items"
Expand Down
16 changes: 16 additions & 0 deletions lib/openai/models/realtime/call_accept_params.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# frozen_string_literal: true

module OpenAI
module Models
module Realtime
# @see OpenAI::Resources::Realtime::Calls#accept
class CallAcceptParams < OpenAI::Models::Realtime::RealtimeSessionCreateRequest
extend OpenAI::Internal::Type::RequestParameters::Converter
include OpenAI::Internal::Type::RequestParameters

# @!method initialize(request_options: {})
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}]
end
end
end
end
16 changes: 16 additions & 0 deletions lib/openai/models/realtime/call_hangup_params.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# frozen_string_literal: true

module OpenAI
module Models
module Realtime
# @see OpenAI::Resources::Realtime::Calls#hangup
class CallHangupParams < OpenAI::Internal::Type::BaseModel
extend OpenAI::Internal::Type::RequestParameters::Converter
include OpenAI::Internal::Type::RequestParameters

# @!method initialize(request_options: {})
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}]
end
end
end
end
28 changes: 28 additions & 0 deletions lib/openai/models/realtime/call_refer_params.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# frozen_string_literal: true

module OpenAI
module Models
module Realtime
# @see OpenAI::Resources::Realtime::Calls#refer
class CallReferParams < OpenAI::Internal::Type::BaseModel
extend OpenAI::Internal::Type::RequestParameters::Converter
include OpenAI::Internal::Type::RequestParameters

# @!attribute target_uri
# URI that should appear in the SIP Refer-To header. Supports values like
# `tel:+14155550123` or `sip:[email protected]`.
#
# @return [String]
required :target_uri, String

# @!method initialize(target_uri:, request_options: {})
# Some parameter documentations has been truncated, see
# {OpenAI::Models::Realtime::CallReferParams} for more details.
#
# @param target_uri [String] URI that should appear in the SIP Refer-To header. Supports values like
#
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}]
end
end
end
end
28 changes: 28 additions & 0 deletions lib/openai/models/realtime/call_reject_params.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# frozen_string_literal: true

module OpenAI
module Models
module Realtime
# @see OpenAI::Resources::Realtime::Calls#reject
class CallRejectParams < OpenAI::Internal::Type::BaseModel
extend OpenAI::Internal::Type::RequestParameters::Converter
include OpenAI::Internal::Type::RequestParameters

# @!attribute status_code
# SIP response code to send back to the caller. Defaults to `603` (Decline) when
# omitted.
#
# @return [Integer, nil]
optional :status_code, Integer

# @!method initialize(status_code: nil, request_options: {})
# Some parameter documentations has been truncated, see
# {OpenAI::Models::Realtime::CallRejectParams} for more details.
#
# @param status_code [Integer] SIP response code to send back to the caller. Defaults to `603` (Decline)
#
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}]
end
end
end
end
4 changes: 4 additions & 0 deletions lib/openai/resources/realtime.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,16 @@ class Realtime
# @return [OpenAI::Resources::Realtime::ClientSecrets]
attr_reader :client_secrets

# @return [OpenAI::Resources::Realtime::Calls]
attr_reader :calls

# @api private
#
# @param client [OpenAI::Client]
def initialize(client:)
@client = client
@client_secrets = OpenAI::Resources::Realtime::ClientSecrets.new(client: client)
@calls = OpenAI::Resources::Realtime::Calls.new(client: client)
end
end
end
Expand Down
143 changes: 143 additions & 0 deletions lib/openai/resources/realtime/calls.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
# frozen_string_literal: true

module OpenAI
module Resources
class Realtime
class Calls
# Some parameter documentations has been truncated, see
# {OpenAI::Models::Realtime::CallAcceptParams} for more details.
#
# Accept an incoming SIP call and configure the realtime session that will handle
# it.
#
# @overload accept(call_id, audio: nil, include: nil, instructions: nil, max_output_tokens: nil, model: nil, output_modalities: nil, prompt: nil, tool_choice: nil, tools: nil, tracing: nil, truncation: nil, type: :realtime, request_options: {})
#
# @param call_id [String] The identifier for the call provided in the
#
# @param audio [OpenAI::Models::Realtime::RealtimeAudioConfig] Configuration for input and output audio.
#
# @param include [Array<Symbol, OpenAI::Models::Realtime::RealtimeSessionCreateRequest::Include>] Additional fields to include in server outputs.
#
# @param instructions [String] The default system instructions (i.e. system message) prepended to model calls.
#
# @param max_output_tokens [Integer, Symbol, :inf] Maximum number of output tokens for a single assistant response,
#
# @param model [String, Symbol, OpenAI::Models::Realtime::RealtimeSessionCreateRequest::Model] The Realtime model used for this session.
#
# @param output_modalities [Array<Symbol, OpenAI::Models::Realtime::RealtimeSessionCreateRequest::OutputModality>] The set of modalities the model can respond with. It defaults to `["audio"]`, in
#
# @param prompt [OpenAI::Models::Responses::ResponsePrompt, nil] Reference to a prompt template and its variables.
#
# @param tool_choice [Symbol, OpenAI::Models::Responses::ToolChoiceOptions, OpenAI::Models::Responses::ToolChoiceFunction, OpenAI::Models::Responses::ToolChoiceMcp] How the model chooses tools. Provide one of the string modes or force a specific
#
# @param tools [Array<OpenAI::Models::Realtime::RealtimeFunctionTool, OpenAI::Models::Realtime::RealtimeToolsConfigUnion::Mcp>] Tools available to the model.
#
# @param tracing [Symbol, :auto, OpenAI::Models::Realtime::RealtimeTracingConfig::TracingConfiguration, nil] Realtime API can write session traces to the [Traces Dashboard](/logs?api=traces
#
# @param truncation [Symbol, OpenAI::Models::Realtime::RealtimeTruncation::RealtimeTruncationStrategy, OpenAI::Models::Realtime::RealtimeTruncationRetentionRatio] Controls how the realtime conversation is truncated prior to model inference.
#
# @param type [Symbol, :realtime] The type of session to create. Always `realtime` for the Realtime API.
#
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
#
# @return [nil]
#
# @see OpenAI::Models::Realtime::CallAcceptParams
def accept(call_id, params)
parsed, options = OpenAI::Realtime::CallAcceptParams.dump_request(params)
@client.request(
method: :post,
path: ["realtime/calls/%1$s/accept", call_id],
body: parsed,
model: NilClass,
options: options
)
end

# Some parameter documentations has been truncated, see
# {OpenAI::Models::Realtime::CallHangupParams} for more details.
#
# End an active Realtime API call, whether it was initiated over SIP or WebRTC.
#
# @overload hangup(call_id, request_options: {})
#
# @param call_id [String] The identifier for the call. For SIP calls, use the value provided in the
#
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
#
# @return [nil]
#
# @see OpenAI::Models::Realtime::CallHangupParams
def hangup(call_id, params = {})
@client.request(
method: :post,
path: ["realtime/calls/%1$s/hangup", call_id],
model: NilClass,
options: params[:request_options]
)
end

# Some parameter documentations has been truncated, see
# {OpenAI::Models::Realtime::CallReferParams} for more details.
#
# Transfer an active SIP call to a new destination using the SIP REFER verb.
#
# @overload refer(call_id, target_uri:, request_options: {})
#
# @param call_id [String] The identifier for the call provided in the
#
# @param target_uri [String] URI that should appear in the SIP Refer-To header. Supports values like
#
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
#
# @return [nil]
#
# @see OpenAI::Models::Realtime::CallReferParams
def refer(call_id, params)
parsed, options = OpenAI::Realtime::CallReferParams.dump_request(params)
@client.request(
method: :post,
path: ["realtime/calls/%1$s/refer", call_id],
body: parsed,
model: NilClass,
options: options
)
end

# Some parameter documentations has been truncated, see
# {OpenAI::Models::Realtime::CallRejectParams} for more details.
#
# Decline an incoming SIP call by returning a SIP status code to the caller.
#
# @overload reject(call_id, status_code: nil, request_options: {})
#
# @param call_id [String] The identifier for the call provided in the
#
# @param status_code [Integer] SIP response code to send back to the caller. Defaults to `603` (Decline)
#
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
#
# @return [nil]
#
# @see OpenAI::Models::Realtime::CallRejectParams
def reject(call_id, params = {})
parsed, options = OpenAI::Realtime::CallRejectParams.dump_request(params)
@client.request(
method: :post,
path: ["realtime/calls/%1$s/reject", call_id],
body: parsed,
model: NilClass,
options: options
)
end

# @api private
#
# @param client [OpenAI::Client]
def initialize(client:)
@client = client
end
end
end
end
end
2 changes: 1 addition & 1 deletion lib/openai/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# frozen_string_literal: true

module OpenAI
VERSION = "0.28.1"
VERSION = "0.29.0"
end
29 changes: 29 additions & 0 deletions rbi/openai/models/realtime/call_accept_params.rbi
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# typed: strong

module OpenAI
module Models
module Realtime
class CallAcceptParams < OpenAI::Models::Realtime::RealtimeSessionCreateRequest
extend OpenAI::Internal::Type::RequestParameters::Converter
include OpenAI::Internal::Type::RequestParameters

OrHash =
T.type_alias do
T.any(OpenAI::Realtime::CallAcceptParams, OpenAI::Internal::AnyHash)
end

sig do
params(request_options: OpenAI::RequestOptions::OrHash).returns(
T.attached_class
)
end
def self.new(request_options: {})
end

sig { override.returns({ request_options: OpenAI::RequestOptions }) }
def to_hash
end
end
end
end
end
Loading