Module: OpenAI::Helpers::Realtime::ClientExtension
- Includes:
- WebSocket::ClientRequest
- Included in:
- Client
- Defined in:
- lib/openai/helpers/realtime/client_extension.rb
Overview
Realtime request integration kept outside the generated client implementation.
Instance Method Summary collapse
-
#realtime_connection_request(path:, query:, websocket_base_url: nil, options: nil) ⇒ Hash{Symbol=>Object}
private
Build a fully authenticated Realtime WebSocket handshake request.
-
#request(req) ⇒ Object
A generated WebRTC allocation belongs to the SDK until its complete raw response can be returned.
-
#with_realtime_connection_request(path:, query:, websocket_base_url: nil, options: nil) ⇒ Object
private
Yield an authenticated WebSocket request, refreshing a rejected workload identity token exactly once after a definitive upgrade 401.
Instance Method Details
#realtime_connection_request(path:, query:, websocket_base_url: nil, options: nil) ⇒ Hash{Symbol=>Object}
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Build a fully authenticated Realtime WebSocket handshake request. Realtime transports use this boundary so provider authentication and request options stay consistent with ordinary SDK requests.
128 129 130 131 132 133 134 135 136 |
# File 'lib/openai/helpers/realtime/client_extension.rb', line 128 def realtime_connection_request(path:, query:, websocket_base_url: nil, options: nil) request, = build_realtime_connection_request( path: path, query: query, websocket_base_url: websocket_base_url, options: ) request end |
#request(req) ⇒ Object
A generated WebRTC allocation belongs to the SDK until its complete raw response can be returned. Keep this lifecycle outside generated resources.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/openai/helpers/realtime/client_extension.rb', line 15 def request(req) unless req.is_a?(Hash) && req[:method] == :post && req[:path] == "realtime/calls" && req[:model] == OpenAI::HTTPClient::Response return super end delivered = false allocated_response = nil call_id = nil begin url, response, log_context = perform_request(req) do |received_response, request_url, response_url| if received_response.status == 201 allocated_response = received_response if response_url.path == request_url.path && realtime_call_origin(response_url).casecmp?(realtime_call_origin(request_url)) call_id = realtime_call_id_from_location( received_response.headers["location"], request_url: request_url ) end end end result = finish_request(log_context, response) do parse_response(req, url: url, response: response) end delivered = true result ensure unless delivered begin OpenAI::Internal::Util.close_fused!(allocated_response.body) if allocated_response rescue StandardError, *(defined?(::Async::Stop) ? [::Async::Stop] : []) nil ensure cleanup_created_realtime_call(call_id, options: req[:options]) if call_id end end end end |
#with_realtime_connection_request(path:, query:, websocket_base_url: nil, options: nil) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Yield an authenticated WebSocket request, refreshing a rejected workload identity token exactly once after a definitive upgrade 401. The caller marks the handshake complete as soon as the transport yields a socket, before running application code; only pre-yield failures may retry.
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/openai/helpers/realtime/client_extension.rb', line 144 def with_realtime_connection_request(path:, query:, websocket_base_url: nil, options: nil) build = lambda do |deadline| build_realtime_connection_request( path: path, query: query, websocket_base_url: websocket_base_url, options: , deadline: deadline ) end with_websocket_connection_retry( error_class: OpenAI::Errors::RealtimeConnectionError, build: build ) { |request, marker| yield(request, marker) } end |