{"record":{"id":"69ee5dbb4bb41caa","repo":"crewAIInc/crewAI","slug":"no-chunker-defined-for-self","errorCode":null,"errorMessage":"No chunker defined for {self}","messagePattern":"No chunker defined for (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"lib/crewai-tools/src/crewai_tools/rag/data_types.py","lineNumber":54,"sourceCode":"            DataType.TEXT_FILE: (\"text_chunker\", \"TextChunker\"),\n            DataType.TEXT: (\"text_chunker\", \"TextChunker\"),\n            DataType.DOCX: (\"text_chunker\", \"DocxChunker\"),\n            DataType.MDX: (\"text_chunker\", \"MdxChunker\"),\n            DataType.CSV: (\"structured_chunker\", \"CsvChunker\"),\n            DataType.JSON: (\"structured_chunker\", \"JsonChunker\"),\n            DataType.XML: (\"structured_chunker\", \"XmlChunker\"),\n            DataType.WEBSITE: (\"web_chunker\", \"WebsiteChunker\"),\n            DataType.DIRECTORY: (\"text_chunker\", \"TextChunker\"),\n            DataType.YOUTUBE_VIDEO: (\"text_chunker\", \"TextChunker\"),\n            DataType.YOUTUBE_CHANNEL: (\"text_chunker\", \"TextChunker\"),\n            DataType.GITHUB: (\"text_chunker\", \"TextChunker\"),\n            DataType.DOCS_SITE: (\"text_chunker\", \"TextChunker\"),\n            DataType.MYSQL: (\"text_chunker\", \"TextChunker\"),\n            DataType.POSTGRES: (\"text_chunker\", \"TextChunker\"),\n        }\n\n        if self not in chunkers:\n            raise ValueError(f\"No chunker defined for {self}\")\n        module_name, class_name = chunkers[self]\n        module_path = f\"crewai_tools.rag.chunkers.{module_name}\"\n\n        try:\n            module = import_module(module_path)\n            return cast(BaseChunker, getattr(module, class_name)())\n        except Exception as e:\n            raise ValueError(f\"Error loading chunker for {self}: {e}\") from e\n\n    def get_loader(self) -> BaseLoader:\n        loaders = {\n            DataType.PDF_FILE: (\"pdf_loader\", \"PDFLoader\"),\n            DataType.TEXT_FILE: (\"text_loader\", \"TextFileLoader\"),\n            DataType.TEXT: (\"text_loader\", \"TextLoader\"),\n            DataType.XML: (\"xml_loader\", \"XMLLoader\"),\n            DataType.WEBSITE: (\"webpage_loader\", \"WebPageLoader\"),\n            DataType.MDX: (\"mdx_loader\", \"MDXLoader\"),\n            DataType.JSON: (\"json_loader\", \"JSONLoader\"),","sourceCodeStart":36,"sourceCodeEnd":72,"githubUrl":"https://github.com/crewAIInc/crewAI/blob/754d7323beb2fd042e33444a115ea2d5a47193f0/lib/crewai-tools/src/crewai_tools/rag/data_types.py#L36-L72","documentation":"DataType.get_chunker() maps each DataType enum member to a (module, class) chunker pair; if the enum value is not a key in that mapping, it raises ValueError('No chunker defined for ...'). This indicates a DataType that exists as an enum member but has no chunker registered — effectively an internal invariant break or an enum extended without updating the registry.","triggerScenarios":"A new DataType member added to the enum without a chunkers[] entry, or constructing the tool path where get_chunker() is called on such a member (the mapping shows entries for XML, WEBSITE, DIRECTORY, YOUTUBE_*, GITHUB, DOCS_SITE, MYSQL, POSTGRES; a member outside these and the file types raises).","commonSituations":"Library version skew after adding a custom DataType via monkey-patching; downstream forks adding enum members without patching the registry.","solutions":["Use a supported DataType from the documented mapping","If you extended the enum, also add a matching chunker entry (subclass or patch get_chunker)","Pin/upgrade crewai-tools to a version where the DataType you use is fully registered","Fall back to text_chunker semantics via DataType.TEXT if the source is plain text"],"exampleFix":"# before\ndtype = DataType.CUSTOM  # hypothetical unregistered member\nchunker = dtype.get_chunker()\n# after\ndtype = DataType.TEXT\nchunker = dtype.get_chunker()","handlingStrategy":"fallback","validationCode":"SUPPORTED_CHUNKERS = {DataType.PDF_FILE, DataType.TEXT_FILE, DataType.TEXT, DataType.XML, DataType.WEBSITE, DataType.DIRECTORY, DataType.YOUTUBE_VIDEO, DataType.YOUTUBE_CHANNEL, DataType.GITHUB, DataType.DOCS_SITE, DataType.MYSQL, DataType.POSTGRES}\nif dtype not in SUPPORTED_CHUNKERS:\n    dtype = DataType.TEXT  # safe fallback for plain text","typeGuard":"def has_chunker(dt: DataType) -> bool:\n    try:\n        dt.get_chunker(); return True\n    except ValueError:\n        return False","tryCatchPattern":"try:\n    chunker = dtype.get_chunker()\nexcept ValueError as e:\n    if 'No chunker defined' in str(e):\n        chunker = DataType.TEXT.get_chunker()\n    else:\n        raise","preventionTips":["Whitelist DataTypes you support in your ingestion pipeline","Log the DataType returned by DataTypes.from_content before using it","If extending the enum, register chunker and loader entries in the same commit"],"tags":["rag","chunking","enum","registry"],"backgroundTag":null,"analyzedSha":"754d7323beb2fd042e33444a115ea2d5a47193f0","analyzedAt":"2026-08-15T04:06:56.746Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}