From a76b99478a797b007160242548ffcf128947622e Mon Sep 17 00:00:00 2001 From: Greyson LaLonde Date: Sat, 23 May 2026 13:06:34 -0700 Subject: [PATCH] fix(rag): restore adapter from null; gate serializer to json mode Address Cursor bugbot review: _resolve_adapter now substitutes the placeholder for None payloads (so _ensure_adapter rebuilds), and _serialize_adapter only fires under when_used='json' to keep python-mode dumps lossless. --- .../src/crewai_tools/tools/rag/rag_tool.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/crewai-tools/src/crewai_tools/tools/rag/rag_tool.py b/lib/crewai-tools/src/crewai_tools/tools/rag/rag_tool.py index be269aa78..3bb37f314 100644 --- a/lib/crewai-tools/src/crewai_tools/tools/rag/rag_tool.py +++ b/lib/crewai-tools/src/crewai_tools/tools/rag/rag_tool.py @@ -103,16 +103,16 @@ class Adapter(BaseModel, ABC): def _resolve_adapter(value: Any) -> Any: - """Validate the ``adapter`` field, returning a placeholder for dict input. + """Validate the ``adapter`` field, returning a placeholder for dict/None input. Adapter state is not round-tripped; the ``_ensure_adapter`` post-validator rebuilds a fresh adapter from the tool's ``config``. """ if isinstance(value, Adapter): return value - if not isinstance(value, dict): - return value - return RagTool._AdapterPlaceholder() + if value is None or isinstance(value, dict): + return RagTool._AdapterPlaceholder() + return value def _serialize_adapter(adapter: Any, info: Any) -> Any: @@ -148,7 +148,7 @@ class RagTool(BaseTool): adapter: Annotated[ Adapter, BeforeValidator(_resolve_adapter), - PlainSerializer(_serialize_adapter), + PlainSerializer(_serialize_adapter, when_used="json"), ] = Field(default_factory=_AdapterPlaceholder) config: RagToolConfig = Field( default_factory=RagToolConfig,