symfony/ai-redis-store
Redis vector store integration for Symfony AI Store. Index and query embeddings with Redis Search, using FT.CREATE and FT.SEARCH commands, KNN vector search, and DIALECT 2 querying for fast similarity lookups.
FT.CREATE for indexing, FT.SEARCH with KNN / DIALECT 2 for similarity) behind a store interface, so the decision shifts from a new vendor contract to enabling a Redis module and writing (or sourcing) a thin adapter.composer require. The PM call is: fund a small, self-contained adapter for a Laravel Redis client (Predis/PhpRedis), or pick a Laravel-native vector path. v0.14's VectorDocumentInterface is what makes the adapter cheap and testable — it gives us one stable contract (id, vector payload, metadata) instead of mapping into undocumented Symfony internals. Code against that interface in a shared PHP library and the Redis implementation becomes swappable.count support turns "how big is our index?" into a first-class, cheap call instead of a manual FT.INFO chore. That converts vector storage into a budgetable line item with quotas and alert thresholds — a prerequisite for putting AI features on shared Redis without surprises.Adopt if:
VectorDocumentInterface — a few days of work, unit-testable, and reusable across projects.count in v0.14 makes that a first-class call).Look elsewhere if:
symfony/ai monorepo with an active release cadence (v0.4 → v0.14), so abandonment risk is low even at 1 GitHub star.For executives: "We already run Redis. This lets us use it as the vector store behind AI features — semantic search, recommendations, duplicate detection — instead of buying a managed vector database with per-query pricing. No new infrastructure, MIT-licensed, and low latency. Two things in the current release make it a manageable bet rather than a prototype: we can now read index size directly, so vector storage becomes a budget line with quotas and alerts like any other; and the document contract is abstracted from Redis, so if we later outgrow it, we swap the backend instead of rewriting the product. The honest caveats: it's pre-1.0, it's Symfony-native (our Laravel path needs a small adapter), and it realistically serves corpora in the low millions of vectors before we'd need to re-architect. I'd recommend we approve it for scoped pilots with a defined volume ceiling, not as an org-wide standard yet."
For engineering: "Drop-in vector store over Redis: FT.CREATE for indexing, FT.SEARCH with KNN/DIALECT 2 for similarity, wrapped behind a store API. It's part of the main symfony/ai repo, so it tracks that release train rather than living as a one-maintainer side project. Two seams make it usable outside Symfony: VectorDocumentInterface (implement once — id, vector, metadata — and keep our code independent of Redis's encoding) and count (cheap index-size and filtered counts; wire into health and metrics endpoints, and use it as a pre-flight guard before expensive KNN queries). Tradeoffs: pre-1.0, so pin versions; CPU-only indexing; ~1M vectors per index as the practical starting ceiling; multi-tenancy is a naming/partitioning convention we design, not something the package gives us. For Laravel: budget a contained adapter over Predis/PhpRedis and own it explicitly — treat it as internal infrastructure with a named owner, not a dependency we assume will maintain itself."
How can I help you explore Laravel packages today?