Skip to content

Python: [Bug]: Redis context schema checks ignore the injected index connection #9062

Description

@ktz03

Description

When RedisContextProvider is given an AsyncSearchIndex connected to a custom Redis endpoint, existing-index initialization checks existence on that index's connection but loads the server schema through the provider's redis_url, which defaults to redis://localhost:6379.

The schema check should use the same connection as the index. Otherwise, a provider reconnecting to an existing index can fail against localhost or inspect an unrelated index with the same name. The URL-only path also opens a second connection for this check.

Reproduced on main 2df61296bb563a95552b18491ad29b1e1a509f81. The call in _validate_schema_compatibility() passes redis_url=self.redis_url after _ensure_index() has already called self.redis_index.exists().

Code Sample

This offline reproducer records the connection argument passed to RedisVL while stubbing Redis I/O:

import asyncio
from unittest.mock import AsyncMock, patch

from agent_framework_redis import RedisContextProvider
from redis.asyncio import Redis
from redisvl.index import AsyncSearchIndex


async def main():
    client = Redis(host="borrowed.example", port=6380)
    schema = RedisContextProvider(user_id="user-1").schema_dict
    index = AsyncSearchIndex.from_dict(schema, redis_client=client)
    provider = RedisContextProvider(user_id="user-1", redis_index=index)

    with (
        patch.object(index, "exists", AsyncMock(return_value=True)),
        patch.object(index, "create", AsyncMock()),
        patch("agent_framework_redis._context_provider.AsyncSearchIndex.from_existing", new_callable=AsyncMock) as load,
    ):
        load.return_value.schema.to_dict.return_value = schema
        await provider._ensure_index()
        print(load.await_args.kwargs)
        # Current: {'redis_url': 'redis://localhost:6379'}
        # Expected: {'redis_client': client}

    await client.aclose()


asyncio.run(main())

Package Versions

Source checkout above: agent-framework-core 1.20.0, agent-framework-redis 1.0.0b261002, redis 7.1.1, redisvl 0.15.0.

Python Version

Python 3.14.3 on Windows.

Additional Context

An additional probe using the actual RedisVL index and Redis client classes, with network I/O stubbed, confirmed that FT._LIST uses the injected client while schema lookup selects a separate localhost client. No live Redis server or model service was tested.

I plan to submit a small fix that reuses self.redis_index.client for the schema lookup, with regressions for both injected and URL-created indexes and for compatible and incompatible schemas.

Activity

  1. added
    pythonUsage: [Issues, PRs], Target: Python
    triageUsage: [Issues], Target: All issues that still need to be triaged
    on Oct 5, 2026
  2. added
    reproducedUsage: [Issues], Target: all issues that can be reproduced by the triage workflow
    on Oct 5, 2026
  3. github-actions commented on Oct 5, 2026

    @github-actions
    Contributor

    🤖 Automated triage reproduction notes (agent-authored — trust but verify)

    Agent analysis

    Repro: python/packages/redis/agent_framework_redis/_context_provider.py::RedisContextProvider._validate_schema_compatibility lines 297-299 uses the provider’s redis_url when _ensure_index finds an existing injected index. Trigger it by constructing AsyncSearchIndex.from_dict(..., redis_client=client), injecting it into the provider, stubbing exists() to return true, and calling _ensure_index(); from_existing receives the localhost URL rather than the injected client.

    • Failing test: python/packages/redis/tests/test_context_provider_edges.py
    • Files examined: python/packages/redis/agent_framework_redis/_context_provider.py, python/packages/redis/tests/test_context_provider_edges.py, python/packages/redis/tests/test_providers.py, python/packages/redis/pyproject.toml
    • Tests run: test_ensure_index_validates_existing_schema_before_create, test_validate_schema_compatibility_raises_for_significant_mismatch, test_ensure_existing_index_schema_uses_injected_redis_client
    • Reported version: agent-framework-redis 1.0.0b261002
    • Current version: agent-framework-redis 1.0.0b261002
  4. added
    memoryUsage: [Issues, PRs], Target: memory related features
    and removed
    triageUsage: [Issues], Target: All issues that still need to be triaged
    on Oct 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

memoryUsage: [Issues, PRs], Target: memory related featurespythonUsage: [Issues, PRs], Target: Pythonready-for-implementationMaintainers agree the problem and direction are ready for implementation.reproducedUsage: [Issues], Target: all issues that can be reproduced by the triage workflow

Type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions