Class: LLM::OpenAI::Files

Inherits:
Object
  • Object
show all
Defined in:
lib/llm/providers/openai/files.rb

Overview

The LLM::OpenAI::Files class provides a files object for interacting with OpenAI’s Files API. The files API allows a client to upload files for use with OpenAI’s models and API endpoints. OpenAI supports multiple file formats, including text files, CSV files, JSON files, and more.

Examples:

example #1

#!/usr/bin/env ruby
require "llm"

llm = LLM.openai(key: ENV["KEY"])
bot = LLM::Bot.new(llm)
file = llm.files.create file: "/books/goodread.pdf"
bot.chat ["Tell me about this PDF", file]
bot.messages.select(&:assistant?).each { print "[#{_1.role}]", _1.content, "\n" }

Instance Method Summary collapse

Constructor Details

#initialize(provider) ⇒ LLM::OpenAI::Files

Returns a new Files object

Parameters:



27
28
29
# File 'lib/llm/providers/openai/files.rb', line 27

def initialize(provider)
  @provider = provider
end

Instance Method Details

#all(**params) ⇒ LLM::Response

List all files

Examples:

llm = LLM.openai(key: ENV["KEY"])
res = llm.files.all
res.each do |file|
  print "id: ", file.id, "\n"
end

Parameters:

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

See Also:



43
44
45
46
47
48
# File 'lib/llm/providers/openai/files.rb', line 43

def all(**params)
  query = URI.encode_www_form(params)
  req = Net::HTTP::Get.new("/v1/files?#{query}", headers)
  res = execute(request: req)
  LLM::Response.new(res)
end

#create(file:, purpose: "assistants", **params) ⇒ LLM::Response

Create a file

Examples:

llm = LLM.openai(key: ENV["KEY"])
res = llm.files.create file: "/documents/haiku.txt"

Parameters:

  • file (File, LLM::File, String)

    The file

  • purpose (String) (defaults to: "assistants")

    The purpose of the file (see OpenAI docs)

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

See Also:



61
62
63
64
65
66
67
68
# File 'lib/llm/providers/openai/files.rb', line 61

def create(file:, purpose: "assistants", **params)
  multi = LLM::Multipart.new(params.merge!(file: LLM.File(file), purpose:))
  req = Net::HTTP::Post.new("/v1/files", headers)
  req["content-type"] = multi.content_type
  set_body_stream(req, multi.body)
  res = execute(request: req)
  LLM::Response.new(res).extend(LLM::OpenAI::Response::File)
end

#get(file:, **params) ⇒ LLM::Response

Get a file

Examples:

llm = LLM.openai(key: ENV["KEY"])
res = llm.files.get(file: "file-1234567890")
print "id: ", res.id, "\n"

Parameters:

  • file (#id, #to_s)

    The file ID

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

See Also:



81
82
83
84
85
86
87
# File 'lib/llm/providers/openai/files.rb', line 81

def get(file:, **params)
  file_id = file.respond_to?(:id) ? file.id : file
  query = URI.encode_www_form(params)
  req = Net::HTTP::Get.new("/v1/files/#{file_id}?#{query}", headers)
  res = execute(request: req)
  LLM::Response.new(res).extend(LLM::OpenAI::Response::File)
end

#download(file:, **params) ⇒ LLM::Response

Download the content of a file

Examples:

llm = LLM.openai(key: ENV["KEY"])
res = llm.files.download(file: "file-1234567890")
File.binwrite "haiku1.txt", res.file.read
print res.file.read, "\n"

Parameters:

  • file (#id, #to_s)

    The file ID

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

See Also:



101
102
103
104
105
106
107
108
# File 'lib/llm/providers/openai/files.rb', line 101

def download(file:, **params)
  query = URI.encode_www_form(params)
  file_id = file.respond_to?(:id) ? file.id : file
  req = Net::HTTP::Get.new("/v1/files/#{file_id}/content?#{query}", headers)
  io = StringIO.new("".b)
  res = execute(request: req) { |res| res.read_body { |chunk| io << chunk } }
  LLM::Response.new(res).tap { _1.define_singleton_method(:file) { io } }
end

#delete(file:) ⇒ LLM::Response

Delete a file

Examples:

llm = LLM.openai(key: ENV["KEY"])
res = llm.files.delete(file: "file-1234567890")
print res.deleted, "\n"

Parameters:

  • file (#id, #to_s)

    The file ID

Returns:

See Also:



120
121
122
123
124
125
# File 'lib/llm/providers/openai/files.rb', line 120

def delete(file:)
  file_id = file.respond_to?(:id) ? file.id : file
  req = Net::HTTP::Delete.new("/v1/files/#{file_id}", headers)
  res = execute(request: req)
  LLM::Response.new(res)
end