Sha256: f748e2d522bfedaf0874fa40064df2103f43a9d00cdddf14c5cbae6dbc41a11b

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

require "dry-struct"

require "roseflow/pinecone/object"
require "roseflow/pinecone/vectors/sparse_vector"
require "roseflow/pinecone/vectors/vector_object"
require "roseflow/pinecone/vectors/common"

module Types
  include Dry.Types()
end

module Roseflow
  module Pinecone
    class Vector
      class Upsert < PineconeObject
        include Roseflow::Pinecone::Vectors::Common

        class UpsertContract < Dry::Validation::Contract
          params do
            required(:vectors).filled(:array)
            optional(:namespace).filled(:string)
          end
        end

        contract_object UpsertContract

        attribute :vectors, Dry::Types['array'].of(VectorObject)
        attribute? :namespace, Dry::Types['string'].optional

        def self.from(data)
          raise ArgumentError, "Data must be a valid upsert hash" unless data.is_a?(Hash) && data.keys.include?(:vectors)
          new(
            vectors: data[:vectors].map { |vector| VectorObject.new(id: vector[:id], values: vector[:values]) },
            namespace: data[:namespace]
          )
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
roseflow-pinecone-0.1.0 lib/roseflow/pinecone/vectors/upsert.rb