Skip to content

Commit 7238289

Browse files
feat(api): add support for realtime calls
1 parent ba2a9b3 commit 7238289

File tree

22 files changed

+748
-5
lines changed

22 files changed

+748
-5
lines changed

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 118
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-e205b1f2da6a1f2caa229efa9ede63f2d3d2fedeeb2dd6ed3d880bafdcb0ab88.yml
3-
openapi_spec_hash: c8aee2469a749f6a838b40c57e4b7b06
4-
config_hash: 45dcba51451ba532959c020a0ddbf23c
1+
configured_endpoints: 122
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-fadefdc7c7e30df47c09df323669b242ff90ee08e51f304175ace5274e0aab49.yml
3+
openapi_spec_hash: 6d20f639d9ff8a097a34962da6218231
4+
config_hash: 902654e60f5d659f2bfcfd903e17c46d

lib/openai.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
require_relative "openai/models/graders/python_grader"
7272
require_relative "openai/models/graders/text_similarity_grader"
7373
require_relative "openai/models/fine_tuning/fine_tuning_job_wandb_integration_object"
74+
require_relative "openai/models/realtime/realtime_session_create_request"
7475
require_relative "openai/models/responses/response_function_tool_call"
7576
require_relative "openai/models/all_models"
7677
require_relative "openai/models/audio/speech_create_params"
@@ -383,6 +384,10 @@
383384
require_relative "openai/models/moderation_text_input"
384385
require_relative "openai/models/other_file_chunking_strategy_object"
385386
require_relative "openai/models/realtime/audio_transcription"
387+
require_relative "openai/models/realtime/call_accept_params"
388+
require_relative "openai/models/realtime/call_hangup_params"
389+
require_relative "openai/models/realtime/call_refer_params"
390+
require_relative "openai/models/realtime/call_reject_params"
386391
require_relative "openai/models/realtime/client_secret_create_params"
387392
require_relative "openai/models/realtime/client_secret_create_response"
388393
require_relative "openai/models/realtime/conversation_created_event"
@@ -448,7 +453,6 @@
448453
require_relative "openai/models/realtime/realtime_server_event"
449454
require_relative "openai/models/realtime/realtime_session"
450455
require_relative "openai/models/realtime/realtime_session_client_secret"
451-
require_relative "openai/models/realtime/realtime_session_create_request"
452456
require_relative "openai/models/realtime/realtime_session_create_response"
453457
require_relative "openai/models/realtime/realtime_tool_choice_config"
454458
require_relative "openai/models/realtime/realtime_tools_config"
@@ -695,6 +699,7 @@
695699
require_relative "openai/resources/models"
696700
require_relative "openai/resources/moderations"
697701
require_relative "openai/resources/realtime"
702+
require_relative "openai/resources/realtime/calls"
698703
require_relative "openai/resources/realtime/client_secrets"
699704
require_relative "openai/resources/responses"
700705
require_relative "openai/resources/responses/input_items"
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
module OpenAI
4+
module Models
5+
module Realtime
6+
# @see OpenAI::Resources::Realtime::Calls#accept
7+
class CallAcceptParams < OpenAI::Models::Realtime::RealtimeSessionCreateRequest
8+
extend OpenAI::Internal::Type::RequestParameters::Converter
9+
include OpenAI::Internal::Type::RequestParameters
10+
11+
# @!method initialize(request_options: {})
12+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}]
13+
end
14+
end
15+
end
16+
end
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
module OpenAI
4+
module Models
5+
module Realtime
6+
# @see OpenAI::Resources::Realtime::Calls#hangup
7+
class CallHangupParams < OpenAI::Internal::Type::BaseModel
8+
extend OpenAI::Internal::Type::RequestParameters::Converter
9+
include OpenAI::Internal::Type::RequestParameters
10+
11+
# @!method initialize(request_options: {})
12+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}]
13+
end
14+
end
15+
end
16+
end
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# frozen_string_literal: true
2+
3+
module OpenAI
4+
module Models
5+
module Realtime
6+
# @see OpenAI::Resources::Realtime::Calls#refer
7+
class CallReferParams < OpenAI::Internal::Type::BaseModel
8+
extend OpenAI::Internal::Type::RequestParameters::Converter
9+
include OpenAI::Internal::Type::RequestParameters
10+
11+
# @!attribute target_uri
12+
# URI that should appear in the SIP Refer-To header. Supports values like
13+
# `tel:+14155550123` or `sip:[email protected]`.
14+
#
15+
# @return [String]
16+
required :target_uri, String
17+
18+
# @!method initialize(target_uri:, request_options: {})
19+
# Some parameter documentations has been truncated, see
20+
# {OpenAI::Models::Realtime::CallReferParams} for more details.
21+
#
22+
# @param target_uri [String] URI that should appear in the SIP Refer-To header. Supports values like
23+
#
24+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}]
25+
end
26+
end
27+
end
28+
end
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# frozen_string_literal: true
2+
3+
module OpenAI
4+
module Models
5+
module Realtime
6+
# @see OpenAI::Resources::Realtime::Calls#reject
7+
class CallRejectParams < OpenAI::Internal::Type::BaseModel
8+
extend OpenAI::Internal::Type::RequestParameters::Converter
9+
include OpenAI::Internal::Type::RequestParameters
10+
11+
# @!attribute status_code
12+
# SIP response code to send back to the caller. Defaults to `603` (Decline) when
13+
# omitted.
14+
#
15+
# @return [Integer, nil]
16+
optional :status_code, Integer
17+
18+
# @!method initialize(status_code: nil, request_options: {})
19+
# Some parameter documentations has been truncated, see
20+
# {OpenAI::Models::Realtime::CallRejectParams} for more details.
21+
#
22+
# @param status_code [Integer] SIP response code to send back to the caller. Defaults to `603` (Decline)
23+
#
24+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}]
25+
end
26+
end
27+
end
28+
end

lib/openai/resources/realtime.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,16 @@ class Realtime
66
# @return [OpenAI::Resources::Realtime::ClientSecrets]
77
attr_reader :client_secrets
88

9+
# @return [OpenAI::Resources::Realtime::Calls]
10+
attr_reader :calls
11+
912
# @api private
1013
#
1114
# @param client [OpenAI::Client]
1215
def initialize(client:)
1316
@client = client
1417
@client_secrets = OpenAI::Resources::Realtime::ClientSecrets.new(client: client)
18+
@calls = OpenAI::Resources::Realtime::Calls.new(client: client)
1519
end
1620
end
1721
end
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
# frozen_string_literal: true
2+
3+
module OpenAI
4+
module Resources
5+
class Realtime
6+
class Calls
7+
# Some parameter documentations has been truncated, see
8+
# {OpenAI::Models::Realtime::CallAcceptParams} for more details.
9+
#
10+
# Accept an incoming SIP call and configure the realtime session that will handle
11+
# it.
12+
#
13+
# @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: {})
14+
#
15+
# @param call_id [String] The identifier for the call provided in the
16+
#
17+
# @param audio [OpenAI::Models::Realtime::RealtimeAudioConfig] Configuration for input and output audio.
18+
#
19+
# @param include [Array<Symbol, OpenAI::Models::Realtime::RealtimeSessionCreateRequest::Include>] Additional fields to include in server outputs.
20+
#
21+
# @param instructions [String] The default system instructions (i.e. system message) prepended to model calls.
22+
#
23+
# @param max_output_tokens [Integer, Symbol, :inf] Maximum number of output tokens for a single assistant response,
24+
#
25+
# @param model [String, Symbol, OpenAI::Models::Realtime::RealtimeSessionCreateRequest::Model] The Realtime model used for this session.
26+
#
27+
# @param output_modalities [Array<Symbol, OpenAI::Models::Realtime::RealtimeSessionCreateRequest::OutputModality>] The set of modalities the model can respond with. It defaults to `["audio"]`, in
28+
#
29+
# @param prompt [OpenAI::Models::Responses::ResponsePrompt, nil] Reference to a prompt template and its variables.
30+
#
31+
# @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
32+
#
33+
# @param tools [Array<OpenAI::Models::Realtime::RealtimeFunctionTool, OpenAI::Models::Realtime::RealtimeToolsConfigUnion::Mcp>] Tools available to the model.
34+
#
35+
# @param tracing [Symbol, :auto, OpenAI::Models::Realtime::RealtimeTracingConfig::TracingConfiguration, nil] Realtime API can write session traces to the [Traces Dashboard](/logs?api=traces
36+
#
37+
# @param truncation [Symbol, OpenAI::Models::Realtime::RealtimeTruncation::RealtimeTruncationStrategy, OpenAI::Models::Realtime::RealtimeTruncationRetentionRatio] Controls how the realtime conversation is truncated prior to model inference.
38+
#
39+
# @param type [Symbol, :realtime] The type of session to create. Always `realtime` for the Realtime API.
40+
#
41+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
42+
#
43+
# @return [nil]
44+
#
45+
# @see OpenAI::Models::Realtime::CallAcceptParams
46+
def accept(call_id, params)
47+
parsed, options = OpenAI::Realtime::CallAcceptParams.dump_request(params)
48+
@client.request(
49+
method: :post,
50+
path: ["realtime/calls/%1$s/accept", call_id],
51+
body: parsed,
52+
model: NilClass,
53+
options: options
54+
)
55+
end
56+
57+
# Some parameter documentations has been truncated, see
58+
# {OpenAI::Models::Realtime::CallHangupParams} for more details.
59+
#
60+
# End an active Realtime API call, whether it was initiated over SIP or WebRTC.
61+
#
62+
# @overload hangup(call_id, request_options: {})
63+
#
64+
# @param call_id [String] The identifier for the call. For SIP calls, use the value provided in the
65+
#
66+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
67+
#
68+
# @return [nil]
69+
#
70+
# @see OpenAI::Models::Realtime::CallHangupParams
71+
def hangup(call_id, params = {})
72+
@client.request(
73+
method: :post,
74+
path: ["realtime/calls/%1$s/hangup", call_id],
75+
model: NilClass,
76+
options: params[:request_options]
77+
)
78+
end
79+
80+
# Some parameter documentations has been truncated, see
81+
# {OpenAI::Models::Realtime::CallReferParams} for more details.
82+
#
83+
# Transfer an active SIP call to a new destination using the SIP REFER verb.
84+
#
85+
# @overload refer(call_id, target_uri:, request_options: {})
86+
#
87+
# @param call_id [String] The identifier for the call provided in the
88+
#
89+
# @param target_uri [String] URI that should appear in the SIP Refer-To header. Supports values like
90+
#
91+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
92+
#
93+
# @return [nil]
94+
#
95+
# @see OpenAI::Models::Realtime::CallReferParams
96+
def refer(call_id, params)
97+
parsed, options = OpenAI::Realtime::CallReferParams.dump_request(params)
98+
@client.request(
99+
method: :post,
100+
path: ["realtime/calls/%1$s/refer", call_id],
101+
body: parsed,
102+
model: NilClass,
103+
options: options
104+
)
105+
end
106+
107+
# Some parameter documentations has been truncated, see
108+
# {OpenAI::Models::Realtime::CallRejectParams} for more details.
109+
#
110+
# Decline an incoming SIP call by returning a SIP status code to the caller.
111+
#
112+
# @overload reject(call_id, status_code: nil, request_options: {})
113+
#
114+
# @param call_id [String] The identifier for the call provided in the
115+
#
116+
# @param status_code [Integer] SIP response code to send back to the caller. Defaults to `603` (Decline)
117+
#
118+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
119+
#
120+
# @return [nil]
121+
#
122+
# @see OpenAI::Models::Realtime::CallRejectParams
123+
def reject(call_id, params = {})
124+
parsed, options = OpenAI::Realtime::CallRejectParams.dump_request(params)
125+
@client.request(
126+
method: :post,
127+
path: ["realtime/calls/%1$s/reject", call_id],
128+
body: parsed,
129+
model: NilClass,
130+
options: options
131+
)
132+
end
133+
134+
# @api private
135+
#
136+
# @param client [OpenAI::Client]
137+
def initialize(client:)
138+
@client = client
139+
end
140+
end
141+
end
142+
end
143+
end
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# typed: strong
2+
3+
module OpenAI
4+
module Models
5+
module Realtime
6+
class CallAcceptParams < OpenAI::Models::Realtime::RealtimeSessionCreateRequest
7+
extend OpenAI::Internal::Type::RequestParameters::Converter
8+
include OpenAI::Internal::Type::RequestParameters
9+
10+
OrHash =
11+
T.type_alias do
12+
T.any(OpenAI::Realtime::CallAcceptParams, OpenAI::Internal::AnyHash)
13+
end
14+
15+
sig do
16+
params(request_options: OpenAI::RequestOptions::OrHash).returns(
17+
T.attached_class
18+
)
19+
end
20+
def self.new(request_options: {})
21+
end
22+
23+
sig { override.returns({ request_options: OpenAI::RequestOptions }) }
24+
def to_hash
25+
end
26+
end
27+
end
28+
end
29+
end
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# typed: strong
2+
3+
module OpenAI
4+
module Models
5+
module Realtime
6+
class CallHangupParams < OpenAI::Internal::Type::BaseModel
7+
extend OpenAI::Internal::Type::RequestParameters::Converter
8+
include OpenAI::Internal::Type::RequestParameters
9+
10+
OrHash =
11+
T.type_alias do
12+
T.any(OpenAI::Realtime::CallHangupParams, OpenAI::Internal::AnyHash)
13+
end
14+
15+
sig do
16+
params(request_options: OpenAI::RequestOptions::OrHash).returns(
17+
T.attached_class
18+
)
19+
end
20+
def self.new(request_options: {})
21+
end
22+
23+
sig { override.returns({ request_options: OpenAI::RequestOptions }) }
24+
def to_hash
25+
end
26+
end
27+
end
28+
end
29+
end

0 commit comments

Comments
 (0)