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:

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

llm = LLM.openai(ENV["KEY"])
bot = LLM::Chat.new(llm).lazy
file = llm.files.create file: LLM::File("/documents/freebsd.pdf")
bot.chat(file)
bot.chat("Describe the document")
bot.messages.select(&:assistant?).each { print "[#{_1.role}]", _1.content, "\n" }
#!/usr/bin/env ruby
require "llm"

llm = LLM.openai(ENV["KEY"])
bot = LLM::Chat.new(llm).lazy
file = llm.files.create file: LLM::File("/documents/openbsd.pdf")
bot.chat(["Describe the document I sent to you", 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:



35
36
37
# File 'lib/llm/providers/openai/files.rb', line 35

def initialize(provider)
  @provider = provider
end

Instance Method Details

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

List all files

Examples:

llm = LLM.openai(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:

Raises:

See Also:



51
52
53
54
55
56
57
58
59
# File 'lib/llm/providers/openai/files.rb', line 51

def all(**params)
  query = URI.encode_www_form(params)
  req = Net::HTTP::Get.new("/v1/files?#{query}", headers)
  res = request(http, req)
  LLM::Response::FileList.new(res).tap { |filelist|
    files = filelist.body["data"].map { OpenStruct.from_hash(_1) }
    filelist.files = files
  }
end

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

Create a file

Examples:

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

Parameters:

  • file (File)

    The file

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

    The purpose of the file (see OpenAI docs)

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

Raises:

See Also:



72
73
74
75
76
77
78
79
# File 'lib/llm/providers/openai/files.rb', line 72

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

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

Get a file

Examples:

llm = LLM.openai(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:

Raises:

See Also:



92
93
94
95
96
97
98
# File 'lib/llm/providers/openai/files.rb', line 92

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 = request(http, req)
  LLM::Response::File.new(res)
end

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

Download the content of a file

Examples:

llm = LLM.openai(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:

Raises:

See Also:



112
113
114
115
116
117
118
119
# File 'lib/llm/providers/openai/files.rb', line 112

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 = request(http, req) { |res| res.read_body { |chunk| io << chunk } }
  LLM::Response::DownloadFile.new(res).tap { _1.file = io }
end

#delete(file:) ⇒ OpenStruct

Delete a file

Examples:

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

Parameters:

  • file (#id, #to_s)

    The file ID

Returns:

Raises:

See Also:



131
132
133
134
135
136
# File 'lib/llm/providers/openai/files.rb', line 131

def delete(file:)
  file_id = file.respond_to?(:id) ? file.id : file
  req = Net::HTTP::Delete.new("/v1/files/#{file_id}", headers)
  res = request(http, req)
  OpenStruct.from_hash JSON.parse(res.body)
end