Skip to content

feat: Add ValkeyMemoryService with vector similarity search (Valkey Search module) #155

Description

@daric93

Summary

Add a ValkeyMemoryService implementation for the ADK community memory module, backed by Valkey using the Valkey Search module for vector similarity search (HNSW). This would use the valkey-glide client library and provide functionality analogous to VertexAiRagMemoryService for developers with Valkey infrastructure.

Motivation

Currently, the community memory module has limited backend options. Valkey (the open-source fork of Redis) with the Search module provides a high-performance, self-hosted vector database option that many teams already run in production. Adding a Valkey-backed memory service would expand the ecosystem for developers who prefer or already use Valkey infrastructure.

Proposed Implementation

  • ValkeyMemoryService class implementing BaseMemoryService interface
  • ValkeyMemoryServiceConfig (Pydantic) with configurable: similarity_top_k, vector_distance_threshold, embedding_dimensions, key_prefix, index_name, distance_metric (COSINE/L2/IP), ttl_seconds
  • Accepts a configurable async embedding function (users bring their own embedder — OpenAI, Gemini, sentence-transformers, etc.)
  • Stores memories as Valkey Hash keys with FLOAT32 vector embeddings
  • Uses FT.CREATE with VECTOR field (HNSW algorithm) + TAG fields for app_name/user_id scoped queries
  • Uses FT.SEARCH with KNN for vector similarity retrieval, pre-filtered by TAG
  • Implements both add_session_to_memory and add_events_to_memory
  • Uses Batch pipelining for efficient ingestion (1 round trip regardless of event count)
  • asyncio.Lock with double-check locking for thread-safe index creation
  • Configurable distance threshold, distance metric, TTL

Dependencies

  • valkey-glide >= 2.4.0 (as optional dependency under [valkey] extra)
  • Valkey server with the Search module loaded (e.g., valkey/valkey-bundle image)

Testing Plan

  • Unit tests (mocked client): cover all public methods, edge cases, error conditions
  • Integration tests: run against live Valkey 9.1 (valkey/valkey-bundle image) covering vector similarity search, user/app isolation, top-k limits, distance threshold filtering, metadata preservation, index idempotency

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions