Sha256: b7a4a1217043f343d3e39838b079351e45c24b9fdff75b5a4a0b1736909c7f76
Contents?: true
Size: 1.22 KB
Versions: 8
Compression:
Stored size: 1.22 KB
Contents
# frozen_string_literal: true module OmniAI class Chat # A file is media that can be sent to many LLMs. class File < Media attr_accessor :io # @param io [IO, Pathname, String] # @param type [Symbol, String] :image, :video, :audio, "audio/flac", "image/jpeg", "video/mpeg", etc. def initialize(io, type) super(type) @io = io end # @return [String] def inspect "#<#{self.class} io=#{@io.inspect}>" end # @return [String] def fetch! case @io when String then ::File.binread(@io) else @io.read end end # @param context [Context] # @return [Hash] def serialize(context: nil) if text? content = fetch! Text.new("<file>#{filename}: #{content}</file>").serialize(context:) else serializer = context&.serializer(:file) return serializer.call(self, context:) if serializer { type: "#{kind}_url", "#{kind}_url": { url: data_uri } } end end # @return [String] def filename case @io when Tempfile, File, String then ::File.basename(@io) else 'DATA' end end end end end
Version data entries
8 entries across 8 versions & 1 rubygems