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](platform.openai.com/docs/api-reference/files/create). 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:



38
39
40
# File 'lib/llm/providers/openai/files.rb', line 38

def initialize(provider)
  @provider = provider
end

Instance Method Details

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

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:



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

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



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

#delete(file:) ⇒ LLM::Response

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:



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

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

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:



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

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

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:



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