Class: LittleGhost::Embeddings::Response

Inherits:
Data
  • Object
show all
Defined in:
lib/little_ghost/embeddings/response.rb,
lib/little_ghost/embeddings/response.rb

Overview

Carries validated embedding vectors without provider response objects.

Vectors are finite, consistently sized, frozen, and ordered like the corresponding Request inputs. LittleGhost raises ProtocolError instead of returning an invalid or partial provider response.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(vectors:, usage: Usage.new, metadata: {}) ⇒ Response

Validates finite, consistently sized numeric vectors and freezes them.



7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/little_ghost/embeddings/response.rb', line 7

def initialize(vectors:, usage: Usage.new, metadata: {})
  values = Array(vectors)
  unless !values.empty? && values.all? { |vector| vector.is_a?(Array) && !vector.empty? }
    raise ProtocolError, "Embedding provider returned no vectors"
  end
  dimensions = values.first.length
  unless values.all? { |vector| vector.length == dimensions && vector.all? { |number| number.is_a?(Numeric) && (!number.respond_to?(:finite?) || number.finite?) } }
    raise ProtocolError, "Embedding provider returned invalid vectors"
  end

  frozen_vectors = values.map { |vector| vector.map(&:to_f).freeze }.freeze
  super(vectors: frozen_vectors, usage:, metadata: .to_h.merge(dimensions:).freeze)
end

Instance Attribute Details

#metadataObject (readonly)

Returns the value of attribute metadata

Returns:

  • (Object)

    the current value of metadata



5
6
7
# File 'lib/little_ghost/embeddings/response.rb', line 5

def 
  @metadata
end

#usageObject (readonly)

Returns the value of attribute usage

Returns:

  • (Object)

    the current value of usage



5
6
7
# File 'lib/little_ghost/embeddings/response.rb', line 5

def usage
  @usage
end

#vectorsObject (readonly)

Returns the value of attribute vectors

Returns:

  • (Object)

    the current value of vectors



5
6
7
# File 'lib/little_ghost/embeddings/response.rb', line 5

def vectors
  @vectors
end

Instance Method Details

#dimensionsObject

Number of numeric values in each vector.



22
# File 'lib/little_ghost/embeddings/response.rb', line 22

def dimensions = .fetch(:dimensions)