[Enhancement] Add Valkey as a VectorDatabase backend
Motivation
I'm evaluating Parlant for a project where we already run Valkey (via AWS ElastiCache) for caching and session state. The current vector store options (Chroma, Qdrant, MongoDB Atlas) each require standing up a separate service just to support Parlant's internal semantic matching across glossary, capabilities, journeys, and canned responses.
Valkey Search provides HNSW and FLAT vector indexing with hybrid queries (metadata filters + KNN), which maps cleanly to the VectorDatabase/VectorCollection interface. Valkey is compatible with Redis (wire), but remains BSD-licensed under the Linux Foundation. It gets around the licensing concerns that come with Redis's SSPL switch in 2024, and it's what ElastiCache Serverless runs under the hood.
Solution Proposal
I will issue a PR for a ValkeyVectorDatabase adapter, following the Chroma/Qdrant/Mongo adapter patterns:
- One FT index per collection (named
{collection}_{embedder_type}) - Hash keys for document CRUD
FT.SEARCHwith KNN vector queries + filter expressions forfind_similar_documents- Translation of the
Wherefilter grammar ($eq,$in,$and,$or) to Valkey Search syntax
I will use our valkey-glide client library, the official client maintained under valkey-io. No changes will be made to core engine code as this is purely an additive adapter behind the existing factory pattern.
Discussion
I've read through the VectorDatabase ABC and the existing implementations and I'm fairly confident the interface maps 1:1 to what Valkey Search offers. Valkey Search 1.2 (announced March 2026) adds TEXT field support alongside the existing TAG, NUMERIC, and VECTOR types, covering the full range of field types Parlant's collections use.
I'm willing and ready to implement this and get the PR going if there's interest. There's a couple things I want to confirm first, however:
- Is there a preference for where the adapter lives? (I'd assume
src/parlant/adapters/vector_db/valkey.pyalongside the others) - Should it be an optional dependency (e.g.,
parlant[valkey]) or bundled? - Any plans to refactor the
VectorDatabaseinterface that might conflict?
Source: emcie-co/parlant