Skip to content

Feature discussion: point-based vector store interface for databases like Qdrant #350

@jordanpartridge

Description

@jordanpartridge

Background

I'm building a personal AI agent that uses Qdrant as its long-term vector memory store. In the process I've been putting together a thin Saloon-based Qdrant package and started thinking about where something like this fits relative to laravel/ai.

The gap I'm running into

The current StoreGateway is modeled around file-upload-based vector stores (OpenAI, Gemini) — you upload a file, the provider handles chunking, embedding, and indexing. That works great for those providers.

Qdrant (and databases like Pinecone, Weaviate, Chroma, Milvus) work differently — you manage your own vectors and upsert points directly. There's no "file" concept. The interface is: embed text yourself, upsert {id, vector, payload} points, search by vector with filters.

These two models don't map cleanly onto each other.

What a point-based interface might look like

Something like a PointStoreGateway alongside the existing StoreGateway:

interface PointStoreGateway
{
    public function upsert(string $collection, array $points): UpsertResult;
    public function search(string $collection, array $vector, int $limit, ?array $filter): array;
    public function scroll(string $collection, int $limit, ?array $filter): ScrollResult;
    public function delete(string $collection, array $ids): bool;
    public function setPayload(string $collection, string $id, array $payload): bool;
}

My plan either way

I'm going to build this out for my own use regardless — it's what my agent needs. But I'm curious whether this feels like something that belongs in laravel/ai or whether it's better as a standalone package that composes alongside it.

The embedding side seems like a cleaner fit — laravel/ai's EmbeddingGateway works well for swappable embedding providers, including local ones (Ollama, custom services). The vector storage side is where the paradigm mismatch lives.

Happy to contribute if there's appetite, or keep it standalone if point-based stores feel out of scope. Just wanted to gauge interest before going too far down either path.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions