Supabase. Storage. Vector. Index. Behaviour behaviour
(supabase_storage v0.6.1)
Copy Markdown
Defines the behaviour interface for vector data operations.
This behaviour specifies the contract for managing vectors within indexes, including insertion, retrieval, listing, querying, and deletion operations.
Summary
Types
Options for retrieving vectors.
Options for listing vectors with pagination.
Options for inserting/updating a single vector.
Options for querying similar vectors.
Vector match result with optional data, metadata, and distance.
Types
@type get_vector_opt() :: {:keys, [String.t()]} | {:return_data, boolean() | nil} | {:return_metadata, boolean() | nil}
Options for retrieving vectors.
Options
{:keys, list(String.t())}- List of vector keys to retrieve{:return_data, boolean | nil}- Whether to include vector data in response{:return_metadata, boolean | nil}- Whether to include metadata in response
@type list_vector_opt() :: {:max_results, integer() | nil} | {:next_token, String.t() | nil} | {:return_data, boolean() | nil} | {:return_metadata, boolean() | nil} | {:segment_count, integer() | nil} | {:segment_index, integer() | nil}
Options for listing vectors with pagination.
Options
{:max_results, integer | nil}- Maximum results (default: 500, max: 1000){:next_token, String.t() | nil}- Pagination token from previous response{:return_data, boolean | nil}- Whether to include vector data{:return_metadata, boolean | nil}- Whether to include metadata{:segment_count, integer | nil}- Total parallel segments (1-16){:segment_index, integer | nil}- Zero-based segment index (0 to segment_count-1)
@type put_vector_opt() :: {:key, String.t()} | {:data, %{float32: [float()]}} | {:metadata, map() | nil}
Options for inserting/updating a single vector.
Options
{:key, String.t()}- Unique identifier for the vector{:data, %{float32: list(float)}}- Vector embedding data as float32 array{:metadata, map | nil}- Optional arbitrary JSON metadata
@type query_vector_opt() :: {:query_vector, %{float32: [float()]}} | {:topK, integer() | nil} | {:filter, map() | nil} | {:return_distance, boolean() | nil} | {:return_metadata, boolean() | nil}
Options for querying similar vectors.
Options
{:query_vector, %{float32: list(float)}}- Query vector for similarity search{:topK, integer | nil}- Number of nearest neighbors to return (default: 10){:filter, map | nil}- Optional JSON filter for metadata{:return_distance, boolean | nil}- Whether to include distance scores{:return_metadata, boolean | nil}- Whether to include metadata in results
@type vector_match() :: %{ key: String.t(), data: nil | %{float32: [float()]}, metadata: map() | nil, distance: number() | nil }
Vector match result with optional data, metadata, and distance.
Fields
:key- Unique identifier for the vector:data- Vector embedding data (if requested):metadata- Arbitrary metadata (if requested):distance- Similarity distance from query vector (if requested)
Callbacks
@callback delete_vectors(Supabase.Storage.Vector.Behaviour.bucket(), keys :: [String.t()]) :: Supabase.result(:deleted)
@callback get_vectors( Supabase.Storage.Vector.Behaviour.bucket(), Enumerable.t(get_vector_opt()) ) :: Supabase.result(vector_match())
@callback list_vectors( Supabase.Storage.Vector.Behaviour.bucket(), Enumerable.t(list_vector_opt()) ) :: Supabase.result(%{vectors: [vector_match()], next_token: String.t() | nil})
@callback put_vectors( Supabase.Storage.Vector.Behaviour.bucket(), Enumerable.t(put_vector_opt()) ) :: Supabase.result(:put)
@callback query_vector( Supabase.Storage.Vector.Behaviour.bucket(), Enumerable.t(query_vector_opt()) ) :: Supabase.result(%{ vectors: [vector_match()], distance_metric: Supabase.Storage.Vector.Index.distance_metric() | nil })