Skip to content

0.9.0

Compare
Choose a tag to compare
@github-actions github-actions released this 01 Oct 17:21
· 2 commits to refs/heads/main since this release

🚀 RedisVL 0.9.0 Release Notes

Release Date: October 1, 2025

We're excited to announce RedisVL 0.9.0, featuring significant enhancements to conversational AI, advanced query capabilities, and enterprise-grade reliability improvements.


✨ Highlights

🤖 Enhanced LLM Memory & Conversational AI

Message History Gets Smarter

Your AI agents and chatbots now have more powerful memory capabilities:

  • 🏷️ Tool Call Support - Native support for tool role alongside system, user, and llm roles, enabling proper function calling workflows
  • 📋 Message Metadata - Attach arbitrary metadata to messages for richer context tracking (API parameters, model info, timestamps, etc.)
  • 🔍 Role Filtering - Retrieve messages by specific roles (e.g., get only system prompts or user queries) with single or multi-role filters
# Filter by role
history.get_recent(role="user")  # Only user messages
history.get_recent(role=["system", "llm"])  # System and LLM messages

# Add metadata to messages
history.add_message({
    "role": "tool",
    "content": "42",
    "tool_call_id": "calc_001",
    "metadata": {"function": "calculate", "duration_ms": 15}
})

Impact: Build more sophisticated AI agents with better observability and control over conversational context.


🔎 Advanced Search & Query Features

More Control Over Your Search Results

Text Field Weighting

Prioritize matches in specific fields (like titles over content) with customizable weights:

from redisvl.query import TextQuery

query = TextQuery(
    text="machine learning tutorial",
    text_field_name={
        "title": 5.0,      # Boost title matches 5x
        "description": 2.0, # Boost description 2x
        "content": 1.0      # Normal content weight
    }
)

Flexible Multi-Field Sorting

Enhanced sort_by() API with support for multiple formats:

# Simple ascending sort
query.sort_by("score")

# With explicit direction
query.sort_by(("created_at", "DESC"))

# Multiple fields (first field used per Redis limitations)
query.sort_by([("score", "DESC"), ("created_at", "ASC")])

Binary Field Handling

Skip decoding for embeddings and other binary data:

query.return_fields(
    ["title", "content", "embedding"],
    skip_decode="embedding"  # Return raw bytes
)

Impact: More precise search relevance and better performance when working with binary data.


🏢 Enterprise Features

Redis Sentinel Support

High availability deployments with automatic failover:

from redisvl.index import SearchIndex

index = SearchIndex(
    schema,
    redis_url="redis+sentinel://sentinel1:26379,sentinel2:26379/mymaster"
)

Supports multiple sentinel hosts, authentication, and database selection.

Advanced Field Attributes

Fine-grained control over indexing and sorting behavior:

  • no_index - Store sortable fields without indexing (reduces memory, maintains sort capability)
  • unf (Un-Normalized Form) - Preserve original case/format for sorting on text and numeric fields
fields:
  - name: display_name
    type: text
    attrs:
      sortable: true
      unf: true        # Case-sensitive sorting
      no_index: false  # Still searchable

Impact: Better support for production deployments and optimized index memory usage.


⚡ Performance Improvements

Reduced Network Overhead

  • Optimized CLIENT SETINFO calls in SearchIndex.from_existing() - eliminated duplicate validation calls
  • Removed proactive module validation - reduced unnecessary MODULE LIST calls on connection initialization

Impact: Faster index operations and reduced Redis command overhead, especially noticeable in high-connection scenarios.


🐛 Bug Fixes

Core Functionality

  • Fixed multiple prefix handling in SearchIndex.from_existing() - now properly captures all prefixes instead of just the first one
  • Fixed filter expression handling - prevented native string filter expressions from being overridden with blank strings
  • Fixed key separator handling - eliminated double separator issues (e.g., user::123user:123)

Cluster & Connection

  • Fixed AsyncRedisCluster parameter handling - properly strips cluster parameter that's incompatible with AsyncRedisCluster.from_url()
  • Fixed ClusterPipeline AttributeError - graceful handling when ClusterPipeline objects lack nodes_manager attribute
  • Improved async cleanup - fixed logging errors during interpreter shutdown

Schema & Type Safety

  • Resolved IndexSchema fields type annotation - fixed conflicting expectations between dict and list formats
  • Fixed Pydantic model_name field conflict - eliminated UserWarning about protected namespace collision

Impact: More reliable operation across different Redis deployment types and improved stability.


🔧 Developer Experience

Testing Improvements

  • Comprehensive integration tests for all new features
  • Better Redis version detection and test skipping (e.g., BM25STD requires Redis 7.0+)
  • Extracted reusable test helpers for cleaner test code
  • Fixed pytest warnings and deprecation notices

Code Quality

  • Reduced code duplication through helper functions
  • Better error messages and validation
  • Improved type hints and documentation

📚 Documentation Updates

  • ✅ Enhanced message history examples with metadata and role filtering
  • ✅ New sections on text field weighting and advanced query features
  • ✅ Redis Sentinel connection documentation
  • ✅ Field attribute reference (UNF, NOINDEX)
  • ✅ Updated API documentation with new parameters

🔄 Breaking Changes

None - This release maintains full backward compatibility with 0.8.x versions.

All new features are additive with sensible defaults that preserve existing behavior.


📦 Installation

pip install --upgrade redisvl

For optional dependencies:

pip install redisvl[all]      # All vectorizer dependencies
pip install redisvl[hiredis]  # High-performance parser

🙏 Contributors

Thank you to everyone who contributed to this release:

Special thanks to our users who provided feedback and feature requests that shaped this release.

Full Changelog: v0.8.2...v0.9.0