Skip to main content

lib/agent_sea/vector_store.ex

defmodule AgentSea.VectorStore do
  @moduledoc """
  Stores vectors and answers nearest-neighbour queries. Adapters: the in-memory
  `AgentSea.VectorStore.Memory` and, in future, pgvector (first-class via Ecto)
  or remote stores (Pinecone/Qdrant) over HTTP.
  """

  # Opaque per-adapter handle: a process (the in-memory store) or a config map
  # bundling a connection (the pgvector store).
  @type store :: GenServer.server() | map()
  @type record :: %{
          required(:id) => term(),
          required(:vector) => [float()],
          optional(:metadata) => map(),
          optional(:text) => String.t() | nil
        }
  @type hit :: %{id: term(), score: float(), metadata: map(), text: String.t() | nil}

  @callback upsert(store(), [record()]) :: :ok
  @callback query(store(), [float()], k :: pos_integer(), opts :: keyword()) :: [hit()]
  @callback delete(store(), [term()]) :: :ok
  @callback count(store()) :: non_neg_integer()
end