0.9.0
🚀 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 alongsidesystem
,user
, andllm
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::123
→user:123
)
Cluster & Connection
- Fixed AsyncRedisCluster parameter handling - properly strips
cluster
parameter that's incompatible withAsyncRedisCluster.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:
- Justin Cechmanek (@justin-cechmanek)
- Andrew Brookins (@abrookins)
- Robert Shelton (@rbs333)
- Brian Sam-Bodden (@bsbodden)
- Community contributors and issue reporters
Special thanks to our users who provided feedback and feature requests that shaped this release.
Full Changelog: v0.8.2...v0.9.0