Skip to content

Failure Modes

Things that look like bugs but are intentional. Read this before "fixing" any of them.

Memory tool parameter names are part of the contract

The ADK FunctionTool wrappers under tools/memory/ look like trivial glue around the memory service. They are not. The LLM picks tools by parameter name; renaming a parameter (even from query to q) silently breaks tool selection. If you must rename, update the tool wrapper, the service method, and any prompt fragments together.

Sessions and memory go through Agent Memory Server, not Redis directly

Both RedisWorkingMemorySessionService and RedisLongTermMemoryService talk to Agent Memory Server, not raw Redis. Reaching into Redis from either service bypasses dedup, summarization, embedding, and the working-to-long-term promotion pipeline. Stay on the AMS client.

Search tools are independent on purpose

Vector, hybrid, range, BM25 text, and SQL search tools live as five separate classes rather than one polymorphic tool with a mode= parameter. The LLM is much better at selecting between narrow tools than at choosing the right value for a mode argument. Do not consolidate.

epsilon is not on RedisVectorQueryConfig

EPSILON is a VECTOR_RANGE-only attribute. Emitting it inside a KNN bracket makes Redis reject the query. RedisVectorQueryConfig therefore does not accept the field; only RedisRangeQueryConfig does. If a user PR adds it back to the KNN config, push back and point at the regression tests in tests/tools/test_vector_search.py::TestRedisVectorQueryConfigEpsilonRemoval.

Import semantic cache from redisvl.extensions.cache.llm

The redisvl.extensions.llmcache path still works but emits a DeprecationWarning. The cache provider imports from redisvl.extensions.cache.llm (cache/_provider.py:131). Do not revert to the old path; the regression test in tests/cache/test_provider.py asserts no DeprecationWarning fires.

No MCP wrapper helpers

There are no custom MCP wrapper helpers in this package. For both the RedisVL MCP server (rvl mcp) and Agent Memory Server's MCP endpoint, users wire ADK's native McpToolset with StdioConnectionParams / SseConnectionParams / StreamableHTTPConnectionParams directly. This keeps the MCP wiring story aligned with every other ADK catalog integration. Do not introduce create_redisvl_mcp_toolset or create_memory_mcp_toolset wrappers.

Two cache providers exist on purpose

RedisVLCacheProvider (self-hosted RedisVL semantic cache) and LangCacheProvider (managed Redis LangCache) are both first-class. Do not "simplify" by removing one. Customers pick by deployment model.

No inline imports

AGENTS.md forbids inline (in-function) imports. Moving an import inside a function to "speed up startup" or "avoid optional deps" is the wrong fix; use autodoc_mock_imports for docs and an extras_require group for runtime optionality.

No em dashes; restructure sentences

AGENTS.md also forbids em dashes (—) and double hyphens (--) in prose. This applies to docstrings (which become reference docs) and to user-facing prose in docs/. Restructure the sentence; do not add a typographic shortcut.

2-space indent and Google-style docstrings

The project uses 2-space indent and Google-style docstrings. PEP 8's 4-space convention is intentionally not followed for this repo; make format enforces the local style.

Coverage gate failures are not flakes

If CI reports coverage below the project bar, do not retry. The failure is real. Either add a test or delete the unreachable branch.

Sphinx warnings are errors

sphinx-build -W is the published build mode. Suppressing a warning to "make CI green" hides broken cross-references that later become 404s on the published docs site.