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