Skip to content

Running into an issue while trying to use Redis based checkpointer #20

@satyaprakash1729

Description

@satyaprakash1729

I'm running into below error when trying to execute the graph. Here is the code for setting up.
Here is how, I'm initializing checkpointer:

    async def _initialize_async_redis_checkpointer(self, checkpointer_redis_config: RedisConfig):
        """Async method to initialize Redis client and checkpointer."""
        redis_uri = self._REDIS_URI_FORMAT.format(
            password=checkpointer_redis_config.password,
            host=checkpointer_redis_config.host,
            port=checkpointer_redis_config.port,
            db_name=checkpointer_redis_config.db_name,
        )
        self._checkpointer = AsyncRedisSaver(redis_url=redis_uri)

        await self._checkpointer.asetup()
        self._logger.info("Redis client and checkpointer initialized.")

Code for flowing checkpointer to the graph:

    async def _create_agent_graph(
        self,
        assistant: Callable,
        tools: list[BaseTool],
        state_type: Type,
        checkpointer: Optional[BaseCheckpointSaver] = None,
    ):
        graph = StateGraph(state_type)
        graph.add_edge(START, "assistant")
        graph.add_node("assistant", assistant)
        graph.add_node("tools", ToolNode(tools))
        graph.add_conditional_edges("assistant", tools_condition)
        graph.add_edge("tools", "assistant")
        if checkpointer is None:
            self._logger.info("Checkpointer is not initialized. Proceeding without checkpointing.")
            return graph.compile()
        return graph.compile(checkpointer=checkpointer)

Code for executing the graph:

        last_state: DefaultState = state
        config = {"configurable": {"thread_id": state["thread_id"]}}
        self._logger.info("Starting execution of the graph")
        async for chunk in compiled_graph.astream(state, stream_mode="values", config=config):

Error logs:

 17:36:23 asyncio ERROR   Task exception was never retrieved
future: <Task finished name='Task-9' coro=<AgentExecutor._initialize_async_redis_checkpointer() done, defined at /home/satyaprakash/sourcecode/agent_service/src/cortex6/agent_service/executor/agent_executor.py:106> exception=ResponseError('unknown command `MODULE`, with args beginning with: `LIST`, ')>
Traceback (most recent call last):
  File "/home/satyaprakash/sourcecode/agent_service/src/cortex6/agent_service/executor/agent_executor.py", line 116, in _initialize_async_redis_checkpointer
    await self._checkpointer.asetup()
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/langgraph/checkpoint/redis/aio.py", line 120, in asetup
    await self.checkpoints_index.set_client(self._redis)
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redisvl/index/index.py", line 117, in wrapper
    await RedisConnectionFactory.validate_async_redis(
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redisvl/redis/connection.py", line 324, in validate_async_redis
    installed_modules = await RedisConnectionFactory.get_modules_async(redis_client)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redisvl/redis/connection.py", line 285, in get_modules_async
    return unpack_redis_modules(convert_bytes(await client.module_list()))
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/sentry_sdk/integrations/redis/asyncio.py", line 65, in _sentry_execute_command
    return await old_execute_command(self, name, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redis/asyncio/client.py", line 616, in execute_command
    return await conn.retry.call_with_retry(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redis/asyncio/retry.py", line 59, in call_with_retry
    return await do()
           ^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redis/asyncio/client.py", line 590, in _send_command_parse_response
    return await self.parse_response(conn, command_name, **options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redis/asyncio/client.py", line 637, in parse_response
    response = await connection.read_response()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redis/asyncio/connection.py", line 577, in read_response
    raise response from None
redis.exceptions.ResponseError: unknown command `MODULE`, with args beginning with: `LIST`,
17:36:24 asyncio ERROR   Task exception was never retrieved
future: <Task finished name='Task-10' coro=<AgentExecutor.execute() done, defined at /home/satyaprakash/sourcecode/agent_service/src/cortex6/agent_service/executor/agent_executor.py:82> exception=RedisSearchError('Error while searching: unknown command `FT.SEARCH`, with args beginning with: `checkpoints`, `@thread_id:{e9740550\\-5ba7\\-4323\\-87cd\\-d868a1ada256_8eb6fbef\\-d953\\-4abb\\-80d8\\-2f90c7f5b11b_a16607e8\\-bb97\\-486`, ')>
Traceback (most recent call last):
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redisvl/index/index.py", line 1186, in search
    return await self._redis_client.ft(self.schema.index.name).search(  # type: ignore
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redis/commands/search/commands.py", line 940, in search
    res = await self.execute_command(SEARCH_CMD, *args, **options)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/sentry_sdk/integrations/redis/asyncio.py", line 65, in _sentry_execute_command
    return await old_execute_command(self, name, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redis/asyncio/client.py", line 616, in execute_command
    return await conn.retry.call_with_retry(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redis/asyncio/retry.py", line 59, in call_with_retry
    return await do()
           ^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redis/asyncio/client.py", line 590, in _send_command_parse_response
    return await self.parse_response(conn, command_name, **options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redis/asyncio/client.py", line 634, in parse_response
    response = await connection.read_response(disable_decoding=True)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redis/asyncio/connection.py", line 577, in read_response
    raise response from None
redis.exceptions.ResponseError: unknown command `FT.SEARCH`, with args beginning with: `checkpoints`, `@thread_id:{e9740550\-5ba7\-4323\-87cd\-d868a1ada256_8eb6fbef\-d953\-4abb\-80d8\-2f90c7f5b11b_a16607e8\-bb97\-486`,

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/satyaprakash/sourcecode/agent_service/src/cortex6/agent_service/executor/agent_executor.py", line 99, in execute
    final_state: DefaultState = await self._ainvoke_graph(
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/sourcecode/agent_service/src/cortex6/agent_service/executor/agent_executor.py", line 278, in _ainvoke_graph
    async for chunk in compiled_graph.astream(state, stream_mode="values", config=config):
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/langgraph/pregel/__init__.py", line 2227, in astream
    async with AsyncPregelLoop(
               ^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/langgraph/pregel/loop.py", line 1058, in __aenter__
    saved = await self.checkpointer.aget_tuple(self.checkpoint_config)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/langgraph/checkpoint/redis/aio.py", line 162, in aget_tuple
    results = await self.checkpoints_index.search(checkpoints_query)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/satyaprakash/.pyenv/versions/agent_service312/lib/python3.12/site-packages/redisvl/index/index.py", line 1190, in search
    raise RedisSearchError(f"Error while searching: {str(e)}") from e
redisvl.exceptions.RedisSearchError: Error while searching: unknown command `FT.SEARCH`, with args beginning with: `checkpoints`, `@thread_id:{e9740550\-5ba7\-4323\-87cd\-d868a1ada256_8eb6fbef\-d953\-4abb\-80d8\-2f90c7f5b11b_a16607e8\-bb97\-486`,

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