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
43 changes: 12 additions & 31 deletions lib/openai/internal/util.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,11 @@ def primitive?(input)

# @api private
#
# @param input [Object]
# @param input [String, Boolean]
#
# @return [Boolean, Object]
def coerce_boolean(input)
case input.is_a?(String) ? input.downcase : input
in Numeric
input.nonzero?
in "true"
true
in "false"
Expand All @@ -88,7 +86,7 @@ def coerce_boolean(input)

# @api private
#
# @param input [Object]
# @param input [String, Boolean]
#
# @raise [ArgumentError]
# @return [Boolean, nil]
Expand All @@ -103,34 +101,20 @@ def coerce_boolean!(input)

# @api private
#
# @param input [Object]
# @param input [String, Integer]
#
# @return [Integer, Object]
def coerce_integer(input)
case input
in true
1
in false
0
else
Integer(input, exception: false) || input
end
Integer(input, exception: false) || input
end

# @api private
#
# @param input [Object]
# @param input [String, Integer, Float]
#
# @return [Float, Object]
def coerce_float(input)
case input
in true
1.0
in false
0.0
else
Float(input, exception: false) || input
end
Float(input, exception: false) || input
end

# @api private
Expand Down Expand Up @@ -159,12 +143,7 @@ class << self
private def deep_merge_lr(lhs, rhs, concat: false)
case [lhs, rhs, concat]
in [Hash, Hash, _]
rhs_cleaned = rhs.reject { _2 == OpenAI::Internal::OMIT }
lhs
.reject { |key, _| rhs[key] == OpenAI::Internal::OMIT }
.merge(rhs_cleaned) do |_, old_val, new_val|
deep_merge_lr(old_val, new_val, concat: concat)
end
lhs.merge(rhs) { deep_merge_lr(_2, _3, concat: concat) }
in [Array, Array, true]
lhs.concat(rhs)
else
Expand Down Expand Up @@ -362,7 +341,7 @@ def normalized_headers(*headers)
value =
case val
in Array
val.map { _1.to_s.strip }.join(", ")
val.filter_map { _1&.to_s&.strip }.join(", ")
else
val&.to_s&.strip
end
Expand Down Expand Up @@ -469,7 +448,7 @@ class << self
case val
in IO
y << "Content-Type: application/octet-stream\r\n\r\n"
IO.copy_stream(val, y)
IO.copy_stream(val.tap(&:rewind), y)
in StringIO
y << "Content-Type: application/octet-stream\r\n\r\n"
y << val.string
Expand Down Expand Up @@ -533,6 +512,8 @@ def encode_content(headers, body)
boundary, strio = encode_multipart_streaming(body)
headers = {**headers, "content-type" => "#{content_type}; boundary=#{boundary}"}
[headers, strio]
in [_, IO]
[headers, body.tap(&:rewind)]
in [_, StringIO]
[headers, body.string]
else
Expand Down Expand Up @@ -673,7 +654,7 @@ def decode_lines(enum)
#
# @param lines [Enumerable<String>]
#
# @return [Hash{Symbol=>Object}]
# @return [Enumerable<Hash{Symbol=>Object}>]
def decode_sse(lines)
# rubocop:disable Metrics/BlockLength
chain_fused(lines) do |y|
Expand Down
4 changes: 2 additions & 2 deletions rbi/lib/openai/internal/cursor_page.rbi
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
module OpenAI
module Internal
class CursorPage
Elem = type_member

include OpenAI::Internal::Type::BasePage

Elem = type_member

sig { returns(T.nilable(T::Array[Elem])) }
attr_accessor :data

Expand Down
4 changes: 2 additions & 2 deletions rbi/lib/openai/internal/page.rbi
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
module OpenAI
module Internal
class Page
Elem = type_member

include OpenAI::Internal::Type::BasePage

Elem = type_member

sig { returns(T.nilable(T::Array[Elem])) }
attr_accessor :data

Expand Down
12 changes: 7 additions & 5 deletions rbi/lib/openai/internal/util.rbi
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,22 @@ module OpenAI
end

# @api private
sig { params(input: T.anything).returns(T.any(T::Boolean, T.anything)) }
sig { params(input: T.any(String, T::Boolean)).returns(T.any(T::Boolean, T.anything)) }
def coerce_boolean(input)
end

# @api private
sig { params(input: T.anything).returns(T.nilable(T::Boolean)) }
sig { params(input: T.any(String, T::Boolean)).returns(T.nilable(T::Boolean)) }
def coerce_boolean!(input)
end

# @api private
sig { params(input: T.anything).returns(T.any(Integer, T.anything)) }
sig { params(input: T.any(String, Integer)).returns(T.any(Integer, T.anything)) }
def coerce_integer(input)
end

# @api private
sig { params(input: T.anything).returns(T.any(Float, T.anything)) }
sig { params(input: T.any(String, Integer, Float)).returns(T.any(Float, T.anything)) }
def coerce_float(input)
end

Expand Down Expand Up @@ -271,7 +271,9 @@ module OpenAI
# @api private
#
# https://html.spec.whatwg.org/multipage/server-sent-events.html#parsing-an-event-stream
sig { params(lines: T::Enumerable[String]).returns(OpenAI::Internal::Util::ServerSentEvent) }
sig do
params(lines: T::Enumerable[String]).returns(T::Enumerable[OpenAI::Internal::Util::ServerSentEvent])
end
def decode_sse(lines)
end
end
Expand Down
10 changes: 5 additions & 5 deletions sig/openai/internal/util.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ module OpenAI

def self?.primitive?: (top input) -> bool

def self?.coerce_boolean: (top input) -> (bool | top)
def self?.coerce_boolean: (String | bool input) -> (bool | top)

def self?.coerce_boolean!: (top input) -> bool?
def self?.coerce_boolean!: (String | bool input) -> bool?

def self?.coerce_integer: (top input) -> (Integer | top)
def self?.coerce_integer: (String | Integer input) -> (Integer | top)

def self?.coerce_float: (top input) -> (Float | top)
def self?.coerce_float: (String | Integer | Float input) -> (Float | top)

def self?.coerce_hash: (top input) -> (::Hash[top, top] | top)

Expand Down Expand Up @@ -133,7 +133,7 @@ module OpenAI

def self?.decode_sse: (
Enumerable[String] lines
) -> OpenAI::Internal::Util::server_sent_event
) -> Enumerable[OpenAI::Internal::Util::server_sent_event]
end
end
end