diff --git a/lib/openai/util.rb b/lib/openai/util.rb index 10368046..b59d893f 100644 --- a/lib/openai/util.rb +++ b/lib/openai/util.rb @@ -557,7 +557,7 @@ class << self def encode_content(headers, body) content_type = headers["content-type"] case [content_type, body] - in ["application/json", Hash | Array] + in [%r{^application/(?:vnd\.api\+)?json}, Hash | Array] [headers, JSON.fast_generate(body)] in [%r{^multipart/form-data}, Hash | IO | StringIO] boundary, strio = encode_multipart_streaming(body) @@ -593,7 +593,10 @@ def decode_content(headers, stream:, suppress_error: false) lines = decode_lines(stream) decode_sse(lines) in %r{^application/(?:x-)?jsonl} - decode_lines(stream) + lines = decode_lines(stream) + chain_fused(lines) do |y| + lines.each { y << JSON.parse(_1, symbolize_names: true) } + end in %r{^text/} stream.to_a.join else diff --git a/rbi/lib/openai/cursor_page.rbi b/rbi/lib/openai/cursor_page.rbi index ffbe0d60..a489a9ff 100644 --- a/rbi/lib/openai/cursor_page.rbi +++ b/rbi/lib/openai/cursor_page.rbi @@ -21,17 +21,5 @@ module OpenAI sig { params(_: T::Boolean).returns(T::Boolean) } def has_more=(_) end - - sig do - params( - client: OpenAI::BaseClient, - req: OpenAI::BaseClient::RequestComponentsShape, - headers: T.any(T::Hash[String, String], Net::HTTPHeader), - page_data: T::Hash[Symbol, T.anything] - ) - .returns(T.attached_class) - end - def self.new(client:, req:, headers:, page_data:) - end end end diff --git a/rbi/lib/openai/page.rbi b/rbi/lib/openai/page.rbi index 9f33956d..3b8ff55d 100644 --- a/rbi/lib/openai/page.rbi +++ b/rbi/lib/openai/page.rbi @@ -21,17 +21,5 @@ module OpenAI sig { params(_: String).returns(String) } def object=(_) end - - sig do - params( - client: OpenAI::BaseClient, - req: OpenAI::BaseClient::RequestComponentsShape, - headers: T.any(T::Hash[String, String], Net::HTTPHeader), - page_data: T::Array[T.anything] - ) - .returns(T.attached_class) - end - def self.new(client:, req:, headers:, page_data:) - end end end diff --git a/rbi/lib/openai/stream.rbi b/rbi/lib/openai/stream.rbi index 3dc46e28..01f98197 100644 --- a/rbi/lib/openai/stream.rbi +++ b/rbi/lib/openai/stream.rbi @@ -4,24 +4,11 @@ module OpenAI class Stream include OpenAI::BaseStream - Message = type_member(:in) { {fixed: OpenAI::Util::SSEMessage} } + Message = type_member(:in) { {fixed: OpenAI::Util::ServerSentEvent} } Elem = type_member(:out) sig { override.returns(T::Enumerable[Elem]) } private def iterator end - - sig do - params( - model: T.any(T::Class[T.anything], OpenAI::Converter), - url: URI::Generic, - status: Integer, - response: Net::HTTPResponse, - messages: T::Enumerable[OpenAI::Util::SSEMessage] - ) - .returns(T.attached_class) - end - def self.new(model:, url:, status:, response:, messages:) - end end end diff --git a/rbi/lib/openai/util.rbi b/rbi/lib/openai/util.rbi index 246a7672..0888f1da 100644 --- a/rbi/lib/openai/util.rbi +++ b/rbi/lib/openai/util.rbi @@ -205,7 +205,7 @@ module OpenAI end end - SSEMessage = T.type_alias do + ServerSentEvent = T.type_alias do {event: T.nilable(String), data: T.nilable(String), id: T.nilable(String), retry: T.nilable(Integer)} end @@ -214,7 +214,7 @@ module OpenAI def decode_lines(enum) end - sig { params(lines: T::Enumerable[String]).returns(OpenAI::Util::SSEMessage) } + sig { params(lines: T::Enumerable[String]).returns(OpenAI::Util::ServerSentEvent) } def decode_sse(lines) end end diff --git a/sig/openai/cursor_page.rbs b/sig/openai/cursor_page.rbs index d7f7e58b..3d313782 100644 --- a/sig/openai/cursor_page.rbs +++ b/sig/openai/cursor_page.rbs @@ -5,12 +5,5 @@ module OpenAI attr_accessor data: ::Array[Elem] attr_accessor has_more: bool - - def initialize: ( - client: OpenAI::BaseClient, - req: OpenAI::BaseClient::request_components, - headers: ::Hash[String, String], - page_data: ::Hash[Symbol, top] - ) -> void end end diff --git a/sig/openai/page.rbs b/sig/openai/page.rbs index 94bcf79a..37846820 100644 --- a/sig/openai/page.rbs +++ b/sig/openai/page.rbs @@ -5,12 +5,5 @@ module OpenAI attr_accessor data: ::Array[Elem] attr_accessor object: String - - def initialize: ( - client: OpenAI::BaseClient, - req: OpenAI::BaseClient::request_components, - headers: ::Hash[String, String], - page_data: ::Array[top] - ) -> void end end diff --git a/sig/openai/stream.rbs b/sig/openai/stream.rbs index 675ecb74..7474463b 100644 --- a/sig/openai/stream.rbs +++ b/sig/openai/stream.rbs @@ -1,15 +1,7 @@ module OpenAI class Stream[Elem] - include OpenAI::BaseStream[OpenAI::Util::sse_message, Elem] + include OpenAI::BaseStream[OpenAI::Util::server_sent_event, Elem] private def iterator: -> Enumerable[Elem] - - def initialize: ( - model: Class | OpenAI::Converter, - url: URI::Generic, - status: Integer, - response: top, - messages: Enumerable[OpenAI::Util::sse_message] - ) -> void end end diff --git a/sig/openai/util.rbs b/sig/openai/util.rbs index 2ee3b4df..065ab7d1 100644 --- a/sig/openai/util.rbs +++ b/sig/openai/util.rbs @@ -120,13 +120,13 @@ module OpenAI (Enumerator::Yielder arg0) -> void } -> void - type sse_message = + type server_sent_event = { event: String?, data: String?, id: String?, retry: Integer? } def self?.decode_lines: (Enumerable[String] enum) -> Enumerable[String] def self?.decode_sse: ( Enumerable[String] lines - ) -> OpenAI::Util::sse_message + ) -> OpenAI::Util::server_sent_event end end