Class: RubyLLM::Registry::Adapters::S3
- Defined in:
- lib/ruby_llm/registry/adapters/s3.rb
Overview
S3-backed prompt repository.
Instance Method Summary collapse
- #available_versions(path) ⇒ Object
- #get(path, version: nil, label: nil) ⇒ Object
-
#initialize(client:, bucket:, prefix: "prompts") ⇒ S3
constructor
A new instance of S3.
- #store(prompt, overwrite: false) ⇒ Object
Methods inherited from Base
Constructor Details
#initialize(client:, bucket:, prefix: "prompts") ⇒ S3
Returns a new instance of S3.
10 11 12 13 14 |
# File 'lib/ruby_llm/registry/adapters/s3.rb', line 10 def initialize(client:, bucket:, prefix: "prompts") @client = client @bucket = bucket @prefix = prefix.to_s.sub(%r{\A/+|/+$}, "") end |
Instance Method Details
#available_versions(path) ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/ruby_llm/registry/adapters/s3.rb', line 26 def available_versions(path) prefix_key = object_prefix(path) response = client.list_objects_v2(bucket: bucket, prefix: prefix_key) Array(response.contents).map do |object| version_from_key(object.key) end.compact.map { |value| Version.parse(value) }.sort end |
#get(path, version: nil, label: nil) ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/ruby_llm/registry/adapters/s3.rb', line 16 def get(path, version: nil, label: nil) key = object_key(path, version: version, label: label) raise PromptNotFoundError, "Prompt not found: #{path}" unless key payload = client.get_object(bucket: bucket, key: key).body.read Importer.new(payload, format: :json, path: path).to_prompt rescue NoMethodError raise PromptNotFoundError, "Prompt not found: #{path}" end |
#store(prompt, overwrite: false) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/ruby_llm/registry/adapters/s3.rb', line 34 def store(prompt, overwrite: false) key = object_key(prompt.path, version: prompt.version.to_s) if !overwrite && object_exists?(key) raise Error, "Prompt #{prompt.path}@#{prompt.version} already exists" end client.put_object( bucket: bucket, key: key, body: Exporter.new(prompt).to_json, content_type: "application/json" ) prompt end |