openai 0.88.0 → 0.89.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +1 -1
- data/lib/openai/client.rb +4 -0
- data/lib/openai/models/beta/beta_response_input_item.rb +91 -1
- data/lib/openai/models/beta/beta_response_item.rb +93 -1
- data/lib/openai/models/beta/beta_response_output_item.rb +91 -1
- data/lib/openai/models/conversations/conversation_item.rb +91 -1
- data/lib/openai/models/live/audio_format.rb +109 -0
- data/lib/openai/models/live/built_in_voice.rb +38 -0
- data/lib/openai/models/live/client_config.rb +22 -0
- data/lib/openai/models/live/client_delegation.rb +22 -0
- data/lib/openai/models/live/client_event.rb +54 -0
- data/lib/openai/models/live/commentary_append_event.rb +59 -0
- data/lib/openai/models/live/commentary_appended_event.rb +65 -0
- data/lib/openai/models/live/custom_voice.rb +17 -0
- data/lib/openai/models/live/data_channel_config.rb +81 -0
- data/lib/openai/models/live/delegation_created_event.rb +140 -0
- data/lib/openai/models/live/error.rb +60 -0
- data/lib/openai/models/live/error_event.rb +52 -0
- data/lib/openai/models/live/fork_client_event.rb +53 -0
- data/lib/openai/models/live/fork_server_event.rb +295 -0
- data/lib/openai/models/live/fork_session_config.rb +107 -0
- data/lib/openai/models/live/fork_session_start_event.rb +48 -0
- data/lib/openai/models/live/function_tool.rb +60 -0
- data/lib/openai/models/live/info_event.rb +60 -0
- data/lib/openai/models/live/initial_item.rb +419 -0
- data/lib/openai/models/live/input_audio_append_event.rb +50 -0
- data/lib/openai/models/live/input_audio_mute_event.rb +33 -0
- data/lib/openai/models/live/input_audio_muted_event.rb +42 -0
- data/lib/openai/models/live/input_audio_unmute_event.rb +33 -0
- data/lib/openai/models/live/input_audio_unmuted_event.rb +42 -0
- data/lib/openai/models/live/input_transcript_delta_event.rb +76 -0
- data/lib/openai/models/live/instructions_append_event.rb +57 -0
- data/lib/openai/models/live/instructions_appended_event.rb +65 -0
- data/lib/openai/models/live/live_create_params.rb +57 -0
- data/lib/openai/models/live/live_create_response.rb +77 -0
- data/lib/openai/models/live/media_session_config.rb +227 -0
- data/lib/openai/models/live/media_session_fork_config.rb +75 -0
- data/lib/openai/models/live/output_audio_delta_event.rb +58 -0
- data/lib/openai/models/live/output_transcript_delta_event.rb +76 -0
- data/lib/openai/models/live/response_create_event.rb +33 -0
- data/lib/openai/models/live/response_event.rb +67 -0
- data/lib/openai/models/live/response_item_create_event.rb +44 -0
- data/lib/openai/models/live/responses_delegation_config.rb +332 -0
- data/lib/openai/models/live/responses_delegation_update_config.rb +332 -0
- data/lib/openai/models/live/server_event.rb +295 -0
- data/lib/openai/models/live/server_event_selector.rb +32 -0
- data/lib/openai/models/live/session_accept_params.rb +257 -0
- data/lib/openai/models/live/session_close_event.rb +33 -0
- data/lib/openai/models/live/session_closed_event.rb +113 -0
- data/lib/openai/models/live/session_config.rb +236 -0
- data/lib/openai/models/live/session_download_recording_params.rb +27 -0
- data/lib/openai/models/live/session_fork_params.rb +66 -0
- data/lib/openai/models/live/session_fork_response.rb +77 -0
- data/lib/openai/models/live/session_hangup_params.rb +22 -0
- data/lib/openai/models/live/session_refer_params.rb +34 -0
- data/lib/openai/models/live/session_reject_params.rb +32 -0
- data/lib/openai/models/live/session_resource.rb +268 -0
- data/lib/openai/models/live/session_start_event.rb +46 -0
- data/lib/openai/models/live/session_started_event.rb +51 -0
- data/lib/openai/models/live/session_update_config.rb +69 -0
- data/lib/openai/models/live/session_update_event.rb +46 -0
- data/lib/openai/models/live/session_updated_event.rb +51 -0
- data/lib/openai/models/live/session_usage.rb +24 -0
- data/lib/openai/models/live/session_usage_updated_event.rb +81 -0
- data/lib/openai/models/live/thinking_append_event.rb +59 -0
- data/lib/openai/models/live/thinking_appended_event.rb +65 -0
- data/lib/openai/models/responses/response_input_item.rb +91 -1
- data/lib/openai/models/responses/response_item.rb +93 -1
- data/lib/openai/models/responses/response_output_item.rb +91 -1
- data/lib/openai/models/webhooks/live_call_incoming_webhook_event.rb +12 -7
- data/lib/openai/models/webhooks/live_transport_incoming_webhook_event.rb +137 -0
- data/lib/openai/models/webhooks/realtime_call_incoming_webhook_event.rb +4 -4
- data/lib/openai/models/webhooks/unwrap_webhook_event.rb +9 -2
- data/lib/openai/models.rb +2 -0
- data/lib/openai/resources/live/forks.rb +16 -0
- data/lib/openai/resources/live/sessions.rb +180 -0
- data/lib/openai/resources/live/sideband.rb +16 -0
- data/lib/openai/resources/live.rb +54 -0
- data/lib/openai/resources/webhooks.rb +1 -1
- data/lib/openai/version.rb +1 -1
- data/lib/openai.rb +65 -0
- data/rbi/openai/client.rbi +3 -0
- data/rbi/openai/models/beta/beta_response_input_item.rbi +109 -0
- data/rbi/openai/models/beta/beta_response_item.rbi +105 -0
- data/rbi/openai/models/beta/beta_response_output_item.rbi +119 -0
- data/rbi/openai/models/conversations/conversation_item.rbi +133 -0
- data/rbi/openai/models/live/audio_format.rbi +185 -0
- data/rbi/openai/models/live/built_in_voice.rbi +46 -0
- data/rbi/openai/models/live/client_config.rbi +54 -0
- data/rbi/openai/models/live/client_delegation.rbi +51 -0
- data/rbi/openai/models/live/client_event.rbi +41 -0
- data/rbi/openai/models/live/commentary_append_event.rbi +88 -0
- data/rbi/openai/models/live/commentary_appended_event.rbi +97 -0
- data/rbi/openai/models/live/custom_voice.rbi +46 -0
- data/rbi/openai/models/live/data_channel_config.rbi +119 -0
- data/rbi/openai/models/live/delegation_created_event.rbi +207 -0
- data/rbi/openai/models/live/error.rbi +95 -0
- data/rbi/openai/models/live/error_event.rbi +87 -0
- data/rbi/openai/models/live/fork_client_event.rbi +40 -0
- data/rbi/openai/models/live/fork_server_event.rbi +436 -0
- data/rbi/openai/models/live/fork_session_config.rbi +234 -0
- data/rbi/openai/models/live/fork_session_start_event.rbi +80 -0
- data/rbi/openai/models/live/function_tool.rbi +95 -0
- data/rbi/openai/models/live/info_event.rbi +92 -0
- data/rbi/openai/models/live/initial_item.rbi +661 -0
- data/rbi/openai/models/live/input_audio_append_event.rbi +79 -0
- data/rbi/openai/models/live/input_audio_mute_event.rbi +62 -0
- data/rbi/openai/models/live/input_audio_muted_event.rbi +74 -0
- data/rbi/openai/models/live/input_audio_unmute_event.rbi +62 -0
- data/rbi/openai/models/live/input_audio_unmuted_event.rbi +74 -0
- data/rbi/openai/models/live/input_transcript_delta_event.rbi +115 -0
- data/rbi/openai/models/live/instructions_append_event.rbi +86 -0
- data/rbi/openai/models/live/instructions_appended_event.rbi +97 -0
- data/rbi/openai/models/live/live_create_params.rbi +121 -0
- data/rbi/openai/models/live/live_create_response.rbi +160 -0
- data/rbi/openai/models/live/media_session_config.rbi +390 -0
- data/rbi/openai/models/live/media_session_fork_config.rbi +143 -0
- data/rbi/openai/models/live/output_audio_delta_event.rbi +93 -0
- data/rbi/openai/models/live/output_transcript_delta_event.rbi +115 -0
- data/rbi/openai/models/live/response_create_event.rbi +62 -0
- data/rbi/openai/models/live/response_event.rbi +105 -0
- data/rbi/openai/models/live/response_item_create_event.rbi +183 -0
- data/rbi/openai/models/live/responses_delegation_config.rbi +562 -0
- data/rbi/openai/models/live/responses_delegation_update_config.rbi +585 -0
- data/rbi/openai/models/live/server_event.rbi +436 -0
- data/rbi/openai/models/live/server_event_selector.rbi +64 -0
- data/rbi/openai/models/live/session_accept_params.rbi +451 -0
- data/rbi/openai/models/live/session_close_event.rbi +62 -0
- data/rbi/openai/models/live/session_closed_event.rbi +148 -0
- data/rbi/openai/models/live/session_config.rbi +427 -0
- data/rbi/openai/models/live/session_download_recording_params.rbi +57 -0
- data/rbi/openai/models/live/session_fork_params.rbi +131 -0
- data/rbi/openai/models/live/session_fork_response.rbi +160 -0
- data/rbi/openai/models/live/session_hangup_params.rbi +53 -0
- data/rbi/openai/models/live/session_refer_params.rbi +64 -0
- data/rbi/openai/models/live/session_reject_params.rbi +62 -0
- data/rbi/openai/models/live/session_resource.rbi +461 -0
- data/rbi/openai/models/live/session_start_event.rbi +78 -0
- data/rbi/openai/models/live/session_started_event.rbi +86 -0
- data/rbi/openai/models/live/session_update_config.rbi +134 -0
- data/rbi/openai/models/live/session_update_event.rbi +78 -0
- data/rbi/openai/models/live/session_updated_event.rbi +86 -0
- data/rbi/openai/models/live/session_usage.rbi +53 -0
- data/rbi/openai/models/live/session_usage_updated_event.rbi +148 -0
- data/rbi/openai/models/live/thinking_append_event.rbi +88 -0
- data/rbi/openai/models/live/thinking_appended_event.rbi +97 -0
- data/rbi/openai/models/responses/response_input_item.rbi +113 -0
- data/rbi/openai/models/responses/response_item.rbi +105 -0
- data/rbi/openai/models/responses/response_output_item.rbi +125 -0
- data/rbi/openai/models/webhooks/live_call_incoming_webhook_event.rbi +11 -7
- data/rbi/openai/models/webhooks/live_transport_incoming_webhook_event.rbi +226 -0
- data/rbi/openai/models/webhooks/realtime_call_incoming_webhook_event.rbi +4 -4
- data/rbi/openai/models/webhooks/unwrap_webhook_event.rbi +1 -0
- data/rbi/openai/models.rbi +2 -0
- data/rbi/openai/resources/live/forks.rbi +19 -0
- data/rbi/openai/resources/live/sessions.rbi +110 -0
- data/rbi/openai/resources/live/sideband.rbi +19 -0
- data/rbi/openai/resources/live.rbi +43 -0
- data/rbi/openai/resources/responses.rbi +75 -38
- data/rbi/openai/resources/webhooks.rbi +1 -0
- data/sig/openai/client.rbs +2 -0
- data/sig/openai/models/beta/beta_response_input_item.rbs +56 -0
- data/sig/openai/models/beta/beta_response_item.rbs +56 -0
- data/sig/openai/models/beta/beta_response_output_item.rbs +56 -0
- data/sig/openai/models/conversations/conversation_item.rbs +56 -0
- data/sig/openai/models/live/audio_format.rbs +73 -0
- data/sig/openai/models/live/built_in_voice.rbs +58 -0
- data/sig/openai/models/live/client_config.rbs +15 -0
- data/sig/openai/models/live/client_delegation.rbs +15 -0
- data/sig/openai/models/live/client_event.rbs +24 -0
- data/sig/openai/models/live/commentary_append_event.rbs +37 -0
- data/sig/openai/models/live/commentary_appended_event.rbs +44 -0
- data/sig/openai/models/live/custom_voice.rbs +15 -0
- data/sig/openai/models/live/data_channel_config.rbs +56 -0
- data/sig/openai/models/live/delegation_created_event.rbs +89 -0
- data/sig/openai/models/live/error.rbs +46 -0
- data/sig/openai/models/live/error_event.rbs +39 -0
- data/sig/openai/models/live/fork_client_event.rbs +24 -0
- data/sig/openai/models/live/fork_server_event.rbs +212 -0
- data/sig/openai/models/live/fork_session_config.rbs +89 -0
- data/sig/openai/models/live/fork_session_start_event.rbs +32 -0
- data/sig/openai/models/live/function_tool.rbs +42 -0
- data/sig/openai/models/live/info_event.rbs +44 -0
- data/sig/openai/models/live/initial_item.rbs +332 -0
- data/sig/openai/models/live/input_audio_append_event.rbs +32 -0
- data/sig/openai/models/live/input_audio_mute_event.rbs +24 -0
- data/sig/openai/models/live/input_audio_muted_event.rbs +34 -0
- data/sig/openai/models/live/input_audio_unmute_event.rbs +24 -0
- data/sig/openai/models/live/input_audio_unmuted_event.rbs +34 -0
- data/sig/openai/models/live/input_transcript_delta_event.rbs +49 -0
- data/sig/openai/models/live/instructions_append_event.rbs +37 -0
- data/sig/openai/models/live/instructions_appended_event.rbs +44 -0
- data/sig/openai/models/live/live_create_params.rbs +45 -0
- data/sig/openai/models/live/live_create_response.rbs +49 -0
- data/sig/openai/models/live/media_session_config.rbs +157 -0
- data/sig/openai/models/live/media_session_fork_config.rbs +66 -0
- data/sig/openai/models/live/output_audio_delta_event.rbs +41 -0
- data/sig/openai/models/live/output_transcript_delta_event.rbs +49 -0
- data/sig/openai/models/live/response_create_event.rbs +18 -0
- data/sig/openai/models/live/response_event.rbs +44 -0
- data/sig/openai/models/live/response_item_create_event.rbs +32 -0
- data/sig/openai/models/live/responses_delegation_config.rbs +244 -0
- data/sig/openai/models/live/responses_delegation_update_config.rbs +246 -0
- data/sig/openai/models/live/server_event.rbs +212 -0
- data/sig/openai/models/live/server_event_selector.rbs +19 -0
- data/sig/openai/models/live/session_accept_params.rbs +185 -0
- data/sig/openai/models/live/session_close_event.rbs +17 -0
- data/sig/openai/models/live/session_closed_event.rbs +68 -0
- data/sig/openai/models/live/session_config.rbs +168 -0
- data/sig/openai/models/live/session_download_recording_params.rbs +25 -0
- data/sig/openai/models/live/session_fork_params.rbs +54 -0
- data/sig/openai/models/live/session_fork_response.rbs +49 -0
- data/sig/openai/models/live/session_hangup_params.rbs +25 -0
- data/sig/openai/models/live/session_refer_params.rbs +33 -0
- data/sig/openai/models/live/session_reject_params.rbs +33 -0
- data/sig/openai/models/live/session_resource.rbs +183 -0
- data/sig/openai/models/live/session_start_event.rbs +32 -0
- data/sig/openai/models/live/session_started_event.rbs +39 -0
- data/sig/openai/models/live/session_update_config.rbs +56 -0
- data/sig/openai/models/live/session_update_event.rbs +32 -0
- data/sig/openai/models/live/session_updated_event.rbs +39 -0
- data/sig/openai/models/live/session_usage.rbs +15 -0
- data/sig/openai/models/live/session_usage_updated_event.rbs +58 -0
- data/sig/openai/models/live/thinking_append_event.rbs +37 -0
- data/sig/openai/models/live/thinking_appended_event.rbs +44 -0
- data/sig/openai/models/responses/response_input_item.rbs +56 -0
- data/sig/openai/models/responses/response_item.rbs +56 -0
- data/sig/openai/models/responses/response_output_item.rbs +56 -0
- data/sig/openai/models/webhooks/live_transport_incoming_webhook_event.rbs +95 -0
- data/sig/openai/models/webhooks/unwrap_webhook_event.rbs +1 -0
- data/sig/openai/models.rbs +2 -0
- data/sig/openai/resources/live/forks.rbs +9 -0
- data/sig/openai/resources/live/sessions.rbs +44 -0
- data/sig/openai/resources/live/sideband.rbs +9 -0
- data/sig/openai/resources/live.rbs +19 -0
- data/sig/openai/resources/webhooks.rbs +1 -0
- metadata +196 -1
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module OpenAI
|
|
4
|
+
module Models
|
|
5
|
+
|
|
6
|
+
module Live
|
|
7
|
+
|
|
8
|
+
class SessionConfig < OpenAI::Internal::Type::BaseModel
|
|
9
|
+
|
|
10
|
+
OrHash = T.type_alias do
|
|
11
|
+
T.any(
|
|
12
|
+
OpenAI::Live::SessionConfig,
|
|
13
|
+
OpenAI::Internal::AnyHash
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# The Live model. Required in the session configuration for every transport; do
|
|
18
|
+
# not pass it as a URL query parameter.
|
|
19
|
+
sig { returns(T.any(String, OpenAI::Live::SessionConfig::Model::OrSymbol)) }
|
|
20
|
+
attr_accessor :model
|
|
21
|
+
|
|
22
|
+
# Startup audio configuration. Only primary WebSockets accept audio.format; WebRTC
|
|
23
|
+
# and SIP negotiate their media format. Voice and format are immutable after
|
|
24
|
+
# startup.
|
|
25
|
+
sig { returns(T.nilable(OpenAI::Live::SessionConfig::Audio)) }
|
|
26
|
+
attr_reader :audio
|
|
27
|
+
|
|
28
|
+
sig { params(audio: OpenAI::Live::SessionConfig::Audio::OrHash).void }
|
|
29
|
+
attr_writer :audio
|
|
30
|
+
|
|
31
|
+
# Startup-only capabilities for an untrusted frontend attached to a unified WebRTC
|
|
32
|
+
# session. Trusted sideband connections are unaffected.
|
|
33
|
+
sig { returns(T.nilable(OpenAI::Live::ClientConfig)) }
|
|
34
|
+
attr_reader :client
|
|
35
|
+
|
|
36
|
+
sig { params(client: OpenAI::Live::ClientConfig::OrHash).void }
|
|
37
|
+
attr_writer :client
|
|
38
|
+
|
|
39
|
+
# Who handles tasks delegated by the Live model. Omitted or null selects your
|
|
40
|
+
# application; use `responses` to let the API manage a Responses backend.
|
|
41
|
+
sig {
|
|
42
|
+
returns(T.nilable(T.any(OpenAI::Live::ClientDelegation, OpenAI::Live::SessionConfig::Delegation::Responses)))
|
|
43
|
+
}
|
|
44
|
+
attr_accessor :delegation
|
|
45
|
+
|
|
46
|
+
# Ordered text-only history supplied before startup. Supports developer, user, and
|
|
47
|
+
# assistant messages with one text part each; at most 128 messages and 8,192
|
|
48
|
+
# rendered tokens in total.
|
|
49
|
+
sig {
|
|
50
|
+
returns(
|
|
51
|
+
T.nilable(
|
|
52
|
+
T::Array[
|
|
53
|
+
T.any(
|
|
54
|
+
OpenAI::Live::InitialItem::Developer,
|
|
55
|
+
OpenAI::Live::InitialItem::User,
|
|
56
|
+
OpenAI::Live::InitialItem::Assistant
|
|
57
|
+
)
|
|
58
|
+
]
|
|
59
|
+
)
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
attr_reader :input
|
|
63
|
+
|
|
64
|
+
sig {
|
|
65
|
+
params(
|
|
66
|
+
input: T::Array[
|
|
67
|
+
T.any(
|
|
68
|
+
OpenAI::Live::InitialItem::Developer::OrHash,
|
|
69
|
+
OpenAI::Live::InitialItem::User::OrHash,
|
|
70
|
+
OpenAI::Live::InitialItem::Assistant::OrHash
|
|
71
|
+
)
|
|
72
|
+
]
|
|
73
|
+
)
|
|
74
|
+
.void
|
|
75
|
+
}
|
|
76
|
+
attr_writer :input
|
|
77
|
+
|
|
78
|
+
# Frontend instructions for voice, conversation, interruptions, and when to
|
|
79
|
+
# delegate. Start with the
|
|
80
|
+
# [Live prompting guide](https://developers.openai.com/api/docs/guides/live-prompting);
|
|
81
|
+
# put business rules and tool workflows in a separate
|
|
82
|
+
# [backend prompt](https://developers.openai.com/api/docs/guides/live-delegation#start-with-your-existing-backend-prompt).
|
|
83
|
+
# Limited to 16,384 client-supplied tokens. Omitted or blank instructions use
|
|
84
|
+
# server defaults. Immutable after startup.
|
|
85
|
+
sig { returns(T.nilable(String)) }
|
|
86
|
+
attr_accessor :instructions
|
|
87
|
+
|
|
88
|
+
# Whether to store the session for later forking and recording download. Defaults
|
|
89
|
+
# to false for new sessions.
|
|
90
|
+
sig { returns(T.nilable(T::Boolean)) }
|
|
91
|
+
attr_reader :store
|
|
92
|
+
|
|
93
|
+
sig { params(store: T::Boolean).void }
|
|
94
|
+
attr_writer :store
|
|
95
|
+
|
|
96
|
+
# Initial configuration for a Live session, including its model, conversation
|
|
97
|
+
# instructions, audio, and delegated task handling.
|
|
98
|
+
sig do
|
|
99
|
+
params(
|
|
100
|
+
|
|
101
|
+
model: T.any(String, OpenAI::Live::SessionConfig::Model::OrSymbol),
|
|
102
|
+
|
|
103
|
+
audio: OpenAI::Live::SessionConfig::Audio::OrHash,
|
|
104
|
+
|
|
105
|
+
client: OpenAI::Live::ClientConfig::OrHash,
|
|
106
|
+
|
|
107
|
+
delegation: T.nilable(
|
|
108
|
+
T.any(OpenAI::Live::ClientDelegation::OrHash, OpenAI::Live::SessionConfig::Delegation::Responses::OrHash)
|
|
109
|
+
),
|
|
110
|
+
|
|
111
|
+
input: T::Array[
|
|
112
|
+
T.any(
|
|
113
|
+
OpenAI::Live::InitialItem::Developer::OrHash,
|
|
114
|
+
OpenAI::Live::InitialItem::User::OrHash,
|
|
115
|
+
OpenAI::Live::InitialItem::Assistant::OrHash
|
|
116
|
+
)
|
|
117
|
+
],
|
|
118
|
+
|
|
119
|
+
instructions: T.nilable(String),
|
|
120
|
+
|
|
121
|
+
store: T::Boolean
|
|
122
|
+
)
|
|
123
|
+
.returns(T.attached_class)
|
|
124
|
+
end
|
|
125
|
+
def self.new(
|
|
126
|
+
|
|
127
|
+
# The Live model. Required in the session configuration for every transport; do
|
|
128
|
+
# not pass it as a URL query parameter.
|
|
129
|
+
model:,
|
|
130
|
+
|
|
131
|
+
# Startup audio configuration. Only primary WebSockets accept audio.format; WebRTC
|
|
132
|
+
# and SIP negotiate their media format. Voice and format are immutable after
|
|
133
|
+
# startup.
|
|
134
|
+
audio: nil,
|
|
135
|
+
|
|
136
|
+
# Startup-only capabilities for an untrusted frontend attached to a unified WebRTC
|
|
137
|
+
# session. Trusted sideband connections are unaffected.
|
|
138
|
+
client: nil,
|
|
139
|
+
|
|
140
|
+
# Who handles tasks delegated by the Live model. Omitted or null selects your
|
|
141
|
+
# application; use `responses` to let the API manage a Responses backend.
|
|
142
|
+
delegation: nil,
|
|
143
|
+
|
|
144
|
+
# Ordered text-only history supplied before startup. Supports developer, user, and
|
|
145
|
+
# assistant messages with one text part each; at most 128 messages and 8,192
|
|
146
|
+
# rendered tokens in total.
|
|
147
|
+
input: nil,
|
|
148
|
+
|
|
149
|
+
# Frontend instructions for voice, conversation, interruptions, and when to
|
|
150
|
+
# delegate. Start with the
|
|
151
|
+
# [Live prompting guide](https://developers.openai.com/api/docs/guides/live-prompting);
|
|
152
|
+
# put business rules and tool workflows in a separate
|
|
153
|
+
# [backend prompt](https://developers.openai.com/api/docs/guides/live-delegation#start-with-your-existing-backend-prompt).
|
|
154
|
+
# Limited to 16,384 client-supplied tokens. Omitted or blank instructions use
|
|
155
|
+
# server defaults. Immutable after startup.
|
|
156
|
+
instructions: nil,
|
|
157
|
+
|
|
158
|
+
# Whether to store the session for later forking and recording download. Defaults
|
|
159
|
+
# to false for new sessions.
|
|
160
|
+
|
|
161
|
+
store: nil
|
|
162
|
+
)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
sig do
|
|
166
|
+
override.returns(
|
|
167
|
+
{
|
|
168
|
+
model: T.any(String, OpenAI::Live::SessionConfig::Model::OrSymbol),
|
|
169
|
+
audio: OpenAI::Live::SessionConfig::Audio,
|
|
170
|
+
client: OpenAI::Live::ClientConfig,
|
|
171
|
+
delegation: T.nilable(
|
|
172
|
+
T.any(OpenAI::Live::ClientDelegation, OpenAI::Live::SessionConfig::Delegation::Responses)
|
|
173
|
+
),
|
|
174
|
+
input: T::Array[
|
|
175
|
+
T.any(
|
|
176
|
+
OpenAI::Live::InitialItem::Developer,
|
|
177
|
+
OpenAI::Live::InitialItem::User,
|
|
178
|
+
OpenAI::Live::InitialItem::Assistant
|
|
179
|
+
)
|
|
180
|
+
],
|
|
181
|
+
instructions: T.nilable(String),
|
|
182
|
+
store: T::Boolean
|
|
183
|
+
}
|
|
184
|
+
)
|
|
185
|
+
end
|
|
186
|
+
def to_hash
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# The Live model. Required in the session configuration for every transport; do
|
|
190
|
+
# not pass it as a URL query parameter.
|
|
191
|
+
module Model
|
|
192
|
+
extend OpenAI::Internal::Type::Union
|
|
193
|
+
|
|
194
|
+
Variants = T.type_alias { T.any(String, OpenAI::Live::SessionConfig::Model::TaggedSymbol) }
|
|
195
|
+
|
|
196
|
+
sig { override.returns(T::Array[OpenAI::Live::SessionConfig::Model::Variants]) }
|
|
197
|
+
def self.variants
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
TaggedSymbol = T.type_alias do
|
|
201
|
+
T.all(Symbol, OpenAI::Live::SessionConfig::Model)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
205
|
+
|
|
206
|
+
GPT_LIVE_1 = T.let(:"gpt-live-1", OpenAI::Live::SessionConfig::Model::TaggedSymbol)
|
|
207
|
+
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
class Audio < OpenAI::Internal::Type::BaseModel
|
|
211
|
+
OrHash = T.type_alias do
|
|
212
|
+
T.any(
|
|
213
|
+
OpenAI::Live::SessionConfig::Audio,
|
|
214
|
+
OpenAI::Internal::AnyHash
|
|
215
|
+
)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# Audio encoding and sample rate for audio sent and received over a Live WebSocket
|
|
219
|
+
# connection. WebRTC and SIP negotiate their media format separately.
|
|
220
|
+
sig {
|
|
221
|
+
returns(
|
|
222
|
+
T.nilable(
|
|
223
|
+
T.any(
|
|
224
|
+
OpenAI::Live::AudioFormat::AudioPCM,
|
|
225
|
+
OpenAI::Live::AudioFormat::AudioPCMU,
|
|
226
|
+
OpenAI::Live::AudioFormat::AudioPCMA
|
|
227
|
+
)
|
|
228
|
+
)
|
|
229
|
+
)
|
|
230
|
+
}
|
|
231
|
+
attr_reader :format_
|
|
232
|
+
|
|
233
|
+
sig {
|
|
234
|
+
params(
|
|
235
|
+
format_: T.any(
|
|
236
|
+
OpenAI::Live::AudioFormat::AudioPCM::OrHash,
|
|
237
|
+
OpenAI::Live::AudioFormat::AudioPCMU::OrHash,
|
|
238
|
+
OpenAI::Live::AudioFormat::AudioPCMA::OrHash
|
|
239
|
+
)
|
|
240
|
+
)
|
|
241
|
+
.void
|
|
242
|
+
}
|
|
243
|
+
attr_writer :format_
|
|
244
|
+
|
|
245
|
+
# The voice used for speech generated by the Live model.
|
|
246
|
+
sig { returns(T.nilable(OpenAI::Live::SessionConfig::Audio::Output)) }
|
|
247
|
+
attr_reader :output
|
|
248
|
+
|
|
249
|
+
sig { params(output: OpenAI::Live::SessionConfig::Audio::Output::OrHash).void }
|
|
250
|
+
attr_writer :output
|
|
251
|
+
|
|
252
|
+
# Startup audio configuration. Only primary WebSockets accept audio.format; WebRTC
|
|
253
|
+
# and SIP negotiate their media format. Voice and format are immutable after
|
|
254
|
+
# startup.
|
|
255
|
+
sig do
|
|
256
|
+
params(
|
|
257
|
+
|
|
258
|
+
format_: T.any(
|
|
259
|
+
OpenAI::Live::AudioFormat::AudioPCM::OrHash,
|
|
260
|
+
OpenAI::Live::AudioFormat::AudioPCMU::OrHash,
|
|
261
|
+
OpenAI::Live::AudioFormat::AudioPCMA::OrHash
|
|
262
|
+
),
|
|
263
|
+
|
|
264
|
+
output: OpenAI::Live::SessionConfig::Audio::Output::OrHash
|
|
265
|
+
)
|
|
266
|
+
.returns(T.attached_class)
|
|
267
|
+
end
|
|
268
|
+
def self.new(
|
|
269
|
+
|
|
270
|
+
# Audio encoding and sample rate for audio sent and received over a Live WebSocket
|
|
271
|
+
# connection. WebRTC and SIP negotiate their media format separately.
|
|
272
|
+
format_: nil,
|
|
273
|
+
|
|
274
|
+
# The voice used for speech generated by the Live model.
|
|
275
|
+
|
|
276
|
+
output: nil
|
|
277
|
+
)
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
sig do
|
|
281
|
+
override.returns(
|
|
282
|
+
{
|
|
283
|
+
format_: T.any(
|
|
284
|
+
OpenAI::Live::AudioFormat::AudioPCM,
|
|
285
|
+
OpenAI::Live::AudioFormat::AudioPCMU,
|
|
286
|
+
OpenAI::Live::AudioFormat::AudioPCMA
|
|
287
|
+
),
|
|
288
|
+
output: OpenAI::Live::SessionConfig::Audio::Output
|
|
289
|
+
}
|
|
290
|
+
)
|
|
291
|
+
end
|
|
292
|
+
def to_hash
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
class Output < OpenAI::Internal::Type::BaseModel
|
|
296
|
+
OrHash = T.type_alias do
|
|
297
|
+
T.any(
|
|
298
|
+
OpenAI::Live::SessionConfig::Audio::Output,
|
|
299
|
+
OpenAI::Internal::AnyHash
|
|
300
|
+
)
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
# The voice used for Live speech, as a built-in voice name or a custom voice
|
|
304
|
+
# object containing its ID. Defaults to `marin` and cannot change after startup.
|
|
305
|
+
sig { returns(T.nilable(T.any(String, OpenAI::Live::BuiltInVoice::OrSymbol, OpenAI::Live::CustomVoice))) }
|
|
306
|
+
attr_reader :voice
|
|
307
|
+
|
|
308
|
+
sig {
|
|
309
|
+
params(voice: T.any(String, OpenAI::Live::BuiltInVoice::OrSymbol, OpenAI::Live::CustomVoice::OrHash)).void
|
|
310
|
+
}
|
|
311
|
+
attr_writer :voice
|
|
312
|
+
|
|
313
|
+
# The voice used for speech generated by the Live model.
|
|
314
|
+
sig do
|
|
315
|
+
params(
|
|
316
|
+
|
|
317
|
+
voice: T.any(String, OpenAI::Live::BuiltInVoice::OrSymbol, OpenAI::Live::CustomVoice::OrHash)
|
|
318
|
+
)
|
|
319
|
+
.returns(T.attached_class)
|
|
320
|
+
end
|
|
321
|
+
def self.new(
|
|
322
|
+
|
|
323
|
+
# The voice used for Live speech, as a built-in voice name or a custom voice
|
|
324
|
+
# object containing its ID. Defaults to `marin` and cannot change after startup.
|
|
325
|
+
|
|
326
|
+
voice: nil
|
|
327
|
+
)
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
sig do
|
|
331
|
+
override.returns(
|
|
332
|
+
{voice: T.any(String, OpenAI::Live::BuiltInVoice::OrSymbol, OpenAI::Live::CustomVoice)}
|
|
333
|
+
)
|
|
334
|
+
end
|
|
335
|
+
def to_hash
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
# The voice used for Live speech, as a built-in voice name or a custom voice
|
|
339
|
+
# object containing its ID. Defaults to `marin` and cannot change after startup.
|
|
340
|
+
module Voice
|
|
341
|
+
extend OpenAI::Internal::Type::Union
|
|
342
|
+
|
|
343
|
+
Variants = T.type_alias {
|
|
344
|
+
T.any(String, OpenAI::Live::BuiltInVoice::TaggedSymbol, OpenAI::Live::CustomVoice)
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
sig { override.returns(T::Array[OpenAI::Live::SessionConfig::Audio::Output::Voice::Variants]) }
|
|
348
|
+
def self.variants
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
end
|
|
352
|
+
end
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
# Who handles tasks delegated by the Live model. Omitted or null selects your
|
|
356
|
+
# application; use `responses` to let the API manage a Responses backend.
|
|
357
|
+
module Delegation
|
|
358
|
+
extend OpenAI::Internal::Type::Union
|
|
359
|
+
|
|
360
|
+
Variants = T.type_alias {
|
|
361
|
+
T.any(OpenAI::Live::ClientDelegation, OpenAI::Live::SessionConfig::Delegation::Responses)
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
class Responses < OpenAI::Internal::Type::BaseModel
|
|
365
|
+
OrHash = T.type_alias do
|
|
366
|
+
T.any(
|
|
367
|
+
OpenAI::Live::SessionConfig::Delegation::Responses,
|
|
368
|
+
OpenAI::Internal::AnyHash
|
|
369
|
+
)
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
# Backend model, prompt, and tools used when the Live session delegates a task to
|
|
373
|
+
# Responses.
|
|
374
|
+
sig { returns(OpenAI::Live::ResponsesDelegationConfig) }
|
|
375
|
+
attr_reader :responses
|
|
376
|
+
|
|
377
|
+
sig { params(responses: OpenAI::Live::ResponsesDelegationConfig::OrHash).void }
|
|
378
|
+
attr_writer :responses
|
|
379
|
+
|
|
380
|
+
# The delegation owner. Always `responses` for tasks handled by the Responses API.
|
|
381
|
+
sig { returns(Symbol) }
|
|
382
|
+
attr_accessor :type
|
|
383
|
+
|
|
384
|
+
# Delegate tasks to a Responses model managed by the Live session.
|
|
385
|
+
sig do
|
|
386
|
+
params(
|
|
387
|
+
|
|
388
|
+
responses: OpenAI::Live::ResponsesDelegationConfig::OrHash,
|
|
389
|
+
|
|
390
|
+
type: Symbol
|
|
391
|
+
)
|
|
392
|
+
.returns(T.attached_class)
|
|
393
|
+
end
|
|
394
|
+
def self.new(
|
|
395
|
+
|
|
396
|
+
# Backend model, prompt, and tools used when the Live session delegates a task to
|
|
397
|
+
# Responses.
|
|
398
|
+
responses:,
|
|
399
|
+
|
|
400
|
+
# The delegation owner. Always `responses` for tasks handled by the Responses API.
|
|
401
|
+
|
|
402
|
+
type: :responses
|
|
403
|
+
)
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
sig do
|
|
407
|
+
override.returns(
|
|
408
|
+
{responses: OpenAI::Live::ResponsesDelegationConfig, type: Symbol}
|
|
409
|
+
)
|
|
410
|
+
end
|
|
411
|
+
def to_hash
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
sig { override.returns(T::Array[OpenAI::Live::SessionConfig::Delegation::Variants]) }
|
|
417
|
+
def self.variants
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
end
|
|
427
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module OpenAI
|
|
4
|
+
module Models
|
|
5
|
+
|
|
6
|
+
module Live
|
|
7
|
+
|
|
8
|
+
class SessionDownloadRecordingParams < OpenAI::Internal::Type::BaseModel
|
|
9
|
+
|
|
10
|
+
extend OpenAI::Internal::Type::RequestParameters::Converter
|
|
11
|
+
include OpenAI::Internal::Type::RequestParameters
|
|
12
|
+
|
|
13
|
+
OrHash = T.type_alias do
|
|
14
|
+
T.any(
|
|
15
|
+
OpenAI::Live::SessionDownloadRecordingParams,
|
|
16
|
+
OpenAI::Internal::AnyHash
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# The ID of the stored Live session to download. Use the session ID returned when
|
|
21
|
+
# the session started with storage enabled.
|
|
22
|
+
sig { returns(String) }
|
|
23
|
+
attr_accessor :session_id
|
|
24
|
+
|
|
25
|
+
sig do
|
|
26
|
+
params(
|
|
27
|
+
|
|
28
|
+
session_id: String,
|
|
29
|
+
|
|
30
|
+
request_options: OpenAI::RequestOptions::OrHash
|
|
31
|
+
)
|
|
32
|
+
.returns(T.attached_class)
|
|
33
|
+
end
|
|
34
|
+
def self.new(
|
|
35
|
+
|
|
36
|
+
# The ID of the stored Live session to download. Use the session ID returned when
|
|
37
|
+
# the session started with storage enabled.
|
|
38
|
+
session_id:,
|
|
39
|
+
|
|
40
|
+
request_options: {}
|
|
41
|
+
)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
sig do
|
|
45
|
+
override.returns(
|
|
46
|
+
{session_id: String, request_options: OpenAI::RequestOptions}
|
|
47
|
+
)
|
|
48
|
+
end
|
|
49
|
+
def to_hash
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module OpenAI
|
|
4
|
+
module Models
|
|
5
|
+
|
|
6
|
+
module Live
|
|
7
|
+
|
|
8
|
+
class SessionForkParams < OpenAI::Internal::Type::BaseModel
|
|
9
|
+
|
|
10
|
+
extend OpenAI::Internal::Type::RequestParameters::Converter
|
|
11
|
+
include OpenAI::Internal::Type::RequestParameters
|
|
12
|
+
|
|
13
|
+
OrHash = T.type_alias do
|
|
14
|
+
T.any(
|
|
15
|
+
OpenAI::Live::SessionForkParams,
|
|
16
|
+
OpenAI::Internal::AnyHash
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
sig { returns(String) }
|
|
21
|
+
attr_accessor :session_id
|
|
22
|
+
|
|
23
|
+
# WebRTC transport with an SDP offer for the new connection to the forked session.
|
|
24
|
+
sig { returns(OpenAI::Live::SessionForkParams::Transport) }
|
|
25
|
+
attr_reader :transport
|
|
26
|
+
|
|
27
|
+
sig { params(transport: OpenAI::Live::SessionForkParams::Transport::OrHash).void }
|
|
28
|
+
attr_writer :transport
|
|
29
|
+
|
|
30
|
+
# Optional configuration overrides for the new Live session. Omit this object or
|
|
31
|
+
# send an empty object to inherit the stored session's settings.
|
|
32
|
+
sig { returns(T.nilable(OpenAI::Live::MediaSessionForkConfig)) }
|
|
33
|
+
attr_reader :session
|
|
34
|
+
|
|
35
|
+
sig { params(session: OpenAI::Live::MediaSessionForkConfig::OrHash).void }
|
|
36
|
+
attr_writer :session
|
|
37
|
+
|
|
38
|
+
sig do
|
|
39
|
+
params(
|
|
40
|
+
|
|
41
|
+
session_id: String,
|
|
42
|
+
|
|
43
|
+
transport: OpenAI::Live::SessionForkParams::Transport::OrHash,
|
|
44
|
+
|
|
45
|
+
session: OpenAI::Live::MediaSessionForkConfig::OrHash,
|
|
46
|
+
|
|
47
|
+
request_options: OpenAI::RequestOptions::OrHash
|
|
48
|
+
)
|
|
49
|
+
.returns(T.attached_class)
|
|
50
|
+
end
|
|
51
|
+
def self.new(
|
|
52
|
+
|
|
53
|
+
session_id:,
|
|
54
|
+
|
|
55
|
+
# WebRTC transport with an SDP offer for the new connection to the forked session.
|
|
56
|
+
transport:,
|
|
57
|
+
|
|
58
|
+
# Optional configuration overrides for the new Live session. Omit this object or
|
|
59
|
+
# send an empty object to inherit the stored session's settings.
|
|
60
|
+
session: nil,
|
|
61
|
+
|
|
62
|
+
request_options: {}
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
sig do
|
|
67
|
+
override.returns(
|
|
68
|
+
{
|
|
69
|
+
session_id: String,
|
|
70
|
+
transport: OpenAI::Live::SessionForkParams::Transport,
|
|
71
|
+
session: OpenAI::Live::MediaSessionForkConfig,
|
|
72
|
+
request_options: OpenAI::RequestOptions
|
|
73
|
+
}
|
|
74
|
+
)
|
|
75
|
+
end
|
|
76
|
+
def to_hash
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
class Transport < OpenAI::Internal::Type::BaseModel
|
|
80
|
+
OrHash = T.type_alias do
|
|
81
|
+
T.any(
|
|
82
|
+
OpenAI::Live::SessionForkParams::Transport,
|
|
83
|
+
OpenAI::Internal::AnyHash
|
|
84
|
+
)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Session Description Protocol message for the WebRTC connection.
|
|
88
|
+
sig { returns(String) }
|
|
89
|
+
attr_accessor :sdp
|
|
90
|
+
|
|
91
|
+
# The transport used for the Live session. Always `webrtc`.
|
|
92
|
+
sig { returns(Symbol) }
|
|
93
|
+
attr_accessor :type
|
|
94
|
+
|
|
95
|
+
# WebRTC transport with an SDP offer for the new connection to the forked session.
|
|
96
|
+
sig do
|
|
97
|
+
params(
|
|
98
|
+
|
|
99
|
+
sdp: String,
|
|
100
|
+
|
|
101
|
+
type: Symbol
|
|
102
|
+
)
|
|
103
|
+
.returns(T.attached_class)
|
|
104
|
+
end
|
|
105
|
+
def self.new(
|
|
106
|
+
|
|
107
|
+
# Session Description Protocol message for the WebRTC connection.
|
|
108
|
+
sdp:,
|
|
109
|
+
|
|
110
|
+
# The transport used for the Live session. Always `webrtc`.
|
|
111
|
+
|
|
112
|
+
type: :webrtc
|
|
113
|
+
)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
sig do
|
|
117
|
+
override.returns(
|
|
118
|
+
{sdp: String, type: Symbol}
|
|
119
|
+
)
|
|
120
|
+
end
|
|
121
|
+
def to_hash
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
end
|
|
131
|
+
end
|