Class: LLM::Gemini::Files
- Inherits:
-
Object
- Object
- LLM::Gemini::Files
- Defined in:
- lib/llm/providers/gemini/files.rb
Overview
The LLM::Gemini::Files class provides a files object for interacting with Gemini's Files API. The files API allows a client to reference media files in prompts where they can be referenced by their URL.
The files API is intended to preserve bandwidth and latency, especially for large files but it can be helpful for smaller files as well because it does not require the client to include a file in the prompt over and over again (which could be the case in a multi-turn conversation).
Instance Method Summary collapse
-
#all(**params) ⇒ LLM::Response
List all files.
-
#create(file:, **params) ⇒ LLM::Response
Create a file.
-
#delete(file:, **params) ⇒ LLM::Response
Delete a file.
- #download ⇒ Object
-
#get(file:, **params) ⇒ LLM::Response
Get a file.
-
#initialize(provider) ⇒ LLM::Gemini::Files
constructor
Returns a new Files object.
Constructor Details
#initialize(provider) ⇒ LLM::Gemini::Files
Returns a new Files object
30 31 32 |
# File 'lib/llm/providers/gemini/files.rb', line 30 def initialize(provider) @provider = provider end |
Instance Method Details
#all(**params) ⇒ LLM::Response
List all files
46 47 48 49 50 51 |
# File 'lib/llm/providers/gemini/files.rb', line 46 def all(**params) query = URI.encode_www_form(params.merge!(key: key)) req = Net::HTTP::Get.new("/v1beta/files?#{query}", headers) res = execute(request: req) ResponseAdapter.adapt(res, type: :files) end |
#create(file:, **params) ⇒ LLM::Response
Create a file
63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/llm/providers/gemini/files.rb', line 63 def create(file:, **params) file = LLM.File(file) req = Net::HTTP::Post.new(request_upload_url(file:), {}) req["content-length"] = file.bytesize req["X-Goog-Upload-Offset"] = 0 req["X-Goog-Upload-Command"] = "upload, finalize" file.with_io do |io| set_body_stream(req, io) res = execute(request: req) ResponseAdapter.adapt(res, type: :file) end end |
#delete(file:, **params) ⇒ LLM::Response
Delete a file
105 106 107 108 109 110 111 |
# File 'lib/llm/providers/gemini/files.rb', line 105 def delete(file:, **params) file_id = file.respond_to?(:name) ? file.name : file.to_s query = URI.encode_www_form(params.merge!(key: key)) req = Net::HTTP::Delete.new("/v1beta/#{file_id}?#{query}", headers) res = execute(request: req) LLM::Response.new(res) end |
#download ⇒ Object
116 117 118 |
# File 'lib/llm/providers/gemini/files.rb', line 116 def download raise NotImplementedError end |
#get(file:, **params) ⇒ LLM::Response
Get a file
87 88 89 90 91 92 93 |
# File 'lib/llm/providers/gemini/files.rb', line 87 def get(file:, **params) file_id = file.respond_to?(:name) ? file.name : file.to_s query = URI.encode_www_form(params.merge!(key: key)) req = Net::HTTP::Get.new("/v1beta/#{file_id}?#{query}", headers) res = execute(request: req) ResponseAdapter.adapt(res, type: :file) end |