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.
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
StoreGatewayis 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
PointStoreGatewayalongside the existingStoreGateway: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/aior whether it's better as a standalone package that composes alongside it.The embedding side seems like a cleaner fit —
laravel/ai'sEmbeddingGatewayworks 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.