rbi/lib/anthropic/internal/util.rbi (192 lines of code) (raw):
# typed: strong
module Anthropic
module Internal
# @api private
module Util
# @api private
sig { returns(Float) }
def self.monotonic_secs; end
class << self
# @api private
sig { returns(String) }
def arch; end
# @api private
sig { returns(String) }
def os; end
end
class << self
# @api private
sig { params(input: T.anything).returns(T::Boolean) }
def primitive?(input); end
# @api private
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.any(String, T::Boolean)).returns(T.nilable(T::Boolean)) }
def coerce_boolean!(input); end
# @api private
sig { params(input: T.any(String, Integer)).returns(T.any(Integer, T.anything)) }
def coerce_integer(input); end
# @api private
sig { params(input: T.any(String, Integer, Float)).returns(T.any(Float, T.anything)) }
def coerce_float(input); end
# @api private
sig { params(input: T.anything).returns(T.any(T::Hash[T.anything, T.anything], T.anything)) }
def coerce_hash(input); end
end
class << self
# @api private
sig { params(lhs: T.anything, rhs: T.anything, concat: T::Boolean).returns(T.anything) }
private def deep_merge_lr(lhs, rhs, concat: false); end
# @api private
#
# Recursively merge one hash with another. If the values at a given key are not
# both hashes, just take the new value.
sig do
params(values: T::Array[T.anything], sentinel: T.nilable(T.anything), concat: T::Boolean)
.returns(T.anything)
end
def deep_merge(
*values,
# the value to return if no values are provided.
sentinel: nil,
# whether to merge sequences by concatenation.
concat: false
); end
# @api private
sig do
params(
data: T.any(Anthropic::Internal::AnyHash, T::Array[T.anything], T.anything),
pick: T.nilable(T.any(Symbol, Integer, T::Array[T.any(Symbol, Integer)])),
sentinel: T.nilable(T.anything),
blk: T.nilable(T.proc.returns(T.anything))
)
.returns(T.nilable(T.anything))
end
def dig(data, pick, sentinel = nil, &blk); end
end
class << self
# @api private
sig { params(uri: URI::Generic).returns(String) }
def uri_origin(uri); end
# @api private
sig { params(path: T.any(String, T::Array[String])).returns(String) }
def interpolate_path(path); end
end
class << self
# @api private
sig { params(query: T.nilable(String)).returns(T::Hash[String, T::Array[String]]) }
def decode_query(query); end
# @api private
sig do
params(query: T.nilable(T::Hash[String, T.nilable(T.any(T::Array[String], String))]))
.returns(T.nilable(String))
end
def encode_query(query); end
end
ParsedUriShape =
T.type_alias do
{
scheme: T.nilable(String),
host: T.nilable(String),
port: T.nilable(Integer),
path: T.nilable(String),
query: T::Hash[String, T::Array[String]]
}
end
class << self
# @api private
sig { params(url: T.any(URI::Generic, String)).returns(Anthropic::Internal::Util::ParsedUriShape) }
def parse_uri(url); end
# @api private
sig { params(parsed: Anthropic::Internal::Util::ParsedUriShape).returns(URI::Generic) }
def unparse_uri(parsed); end
# @api private
sig do
params(
lhs: Anthropic::Internal::Util::ParsedUriShape,
rhs: Anthropic::Internal::Util::ParsedUriShape
)
.returns(URI::Generic)
end
def join_parsed_uri(lhs, rhs); end
end
class << self
# @api private
sig do
params(
headers: T::Hash[String,
T.nilable(T.any(String, Integer, T::Array[T.nilable(T.any(String, Integer))]))]
)
.returns(T::Hash[String, String])
end
def normalized_headers(*headers); end
end
# @api private
class SerializationAdapter
sig { returns(T.any(Pathname, IO)) }
attr_reader :inner
sig { params(a: T.anything).returns(String) }
def to_json(*a); end
sig { params(a: T.anything).returns(String) }
def to_yaml(*a); end
# @api private
sig { params(inner: T.any(Pathname, IO)).returns(T.attached_class) }
def self.new(inner); end
end
# @api private
#
# An adapter that satisfies the IO interface required by `::IO.copy_stream`
class ReadIOAdapter
# @api private
sig { returns(T.nilable(T::Boolean)) }
def close?; end
# @api private
sig { void }
def close; end
# @api private
sig { params(max_len: T.nilable(Integer)).returns(String) }
private def read_enum(max_len); end
# @api private
sig { params(max_len: T.nilable(Integer), out_string: T.nilable(String)).returns(T.nilable(String)) }
def read(max_len = nil, out_string = nil); end
# @api private
sig do
params(
src: T.any(String, Pathname, StringIO, T::Enumerable[String]),
blk: T.proc.params(arg0: String).void
)
.returns(T.attached_class)
end
def self.new(src, &blk); end
end
class << self
sig { params(blk: T.proc.params(y: Enumerator::Yielder).void).returns(T::Enumerable[String]) }
def writable_enum(&blk); end
end
class << self
# @api private
sig do
params(
y: Enumerator::Yielder,
boundary: String,
key: T.any(Symbol, String),
val: T.anything,
closing: T::Array[T.proc.void]
)
.void
end
private def write_multipart_chunk(y, boundary:, key:, val:, closing:); end
# @api private
sig { params(body: T.anything).returns([String, T::Enumerable[String]]) }
private def encode_multipart_streaming(body); end
# @api private
sig { params(headers: T::Hash[String, String], body: T.anything).returns(T.anything) }
def encode_content(headers, body); end
# @api private
sig do
params(
headers: T.any(T::Hash[String, String], Net::HTTPHeader),
stream: T::Enumerable[String],
suppress_error: T::Boolean
)
.returns(T.anything)
end
def decode_content(headers, stream:, suppress_error: false); end
end
class << self
# @api private
#
# https://doc.rust-lang.org/std/iter/trait.FusedIterator.html
sig do
params(enum: T::Enumerable[T.anything], external: T::Boolean, close: T.proc.void)
.returns(T::Enumerable[T.anything])
end
def fused_enum(enum, external: false, &close); end
# @api private
sig { params(enum: T.nilable(T::Enumerable[T.anything])).void }
def close_fused!(enum); end
# @api private
sig do
params(
enum: T.nilable(T::Enumerable[T.anything]),
blk: T.proc.params(arg0: Enumerator::Yielder).void
)
.returns(T::Enumerable[T.anything])
end
def chain_fused(enum, &blk); end
end
ServerSentEvent =
T.type_alias do
{
event: T.nilable(String),
data: T.nilable(String),
id: T.nilable(String),
retry: T.nilable(Integer)
}
end
class << self
# @api private
sig { params(enum: T::Enumerable[String]).returns(T::Enumerable[String]) }
def decode_lines(enum); end
# @api private
#
# https://html.spec.whatwg.org/multipage/server-sent-events.html#parsing-an-event-stream
sig do
params(lines: T::Enumerable[String]).returns(T::Enumerable[Anthropic::Internal::Util::ServerSentEvent])
end
def decode_sse(lines); end
end
end
end
end