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(ENV["KEY"])
bot = LLM::Bot.new(llm)
file = llm.files.create file: "/documents/freebsd.pdf"
bot.chat(file)
bot.chat("Describe the document")
bot.messages.select(&:assistant?).each { print "[#{_1.role}]", _1.content, "\n" }

example #2

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

llm = LLM.openai(ENV["KEY"])
bot = LLM::Bot.new(llm)
file = llm.files.create 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:



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

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:

See Also:



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

def all(**params)
  query = URI.encode_www_form(params)
  req = Net::HTTP::Get.new("/v1/files?#{query}", headers)
  res = execute(request: req)
  LLM::Response::FileList.new(res).tap { |filelist|
    files = filelist.body["data"].map { LLM::Object.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: "/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:

See Also:



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

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
  set_body_stream(req, multi.body)
  res = execute(request: 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:

See Also:



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

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::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:

See Also:



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

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::DownloadFile.new(res).tap { _1.file = io }
end

#delete(file:) ⇒ LLM::Object

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:

See Also:



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

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::Object.from_hash JSON.parse(res.body)
end