run-llama/llama_index · error · ValueError
Reader class name {class_name} not found.
Error message
Reader class name {class_name} not found. What it means
load_reader looks up data['class_name'] in the module-level ALL_READERS registry, which contains only readers registered in llama_index.core.readers.loading (e.g. StringIterableReader). The ValueError fires when class_name is present but no registered class matches. Note that by design ALL_READERS is tiny in llama-index-core; most concrete reader classes live in integration packages and are not in this registry.
Source
Thrown at llama-index-core/llama_index/core/readers/loading.py:21
from llama_index.core.readers.base import BasePydanticReader
from llama_index.core.readers.string_iterable import StringIterableReader
ALL_READERS: Dict[str, Type[BasePydanticReader]] = {
StringIterableReader.class_name(): StringIterableReader,
}
def load_reader(data: Dict[str, Any]) -> BasePydanticReader:
if isinstance(data, BasePydanticReader):
return data
class_name = data.get("class_name")
if class_name is None:
raise ValueError("Must specify `class_name` in reader data.")
if class_name not in ALL_READERS:
raise ValueError(f"Reader class name {class_name} not found.")
# remove static attribute
data.pop("is_remote", None)
return ALL_READERS[class_name].from_dict(data)
View on GitHub (pinned to afd0fef371)
Solutions
- Check what is actually available: print(llama_index.core.readers.loading.ALL_READERS.keys()) and use one of those names.
- If you need a specific integration reader, deserialize it via that package's own class (e.g. PDFReader.from_dict) instead of core's load_reader.
- Verify the exact class_name string by calling YourReader.class_name() in the same environment/version.
- Ensure the reader package is installed and up to date so its class name matches what was serialized.
Example fix
# before
reader = load_reader({"class_name": "PDFReader", ...}) # not in core registry
# after
from llama_index.readers.file import PDFReader
reader = PDFReader.from_dict({"class_name": "PDFReader", ...}) Defensive patterns
Strategy: validation
Validate before calling
from llama_index.core.readers.loading import ALL_READERS
class_name = data.get("class_name")
assert class_name in ALL_READERS, f"unknown reader: {class_name}; known: {list(ALL_READERS)}" Prevention
- Print ALL_READERS.keys() to see what core can deserialize.
- Deserialize integration readers via their own classes, not core's load_reader.
- Pin llama-index versions so serialized class names keep resolving.
When it happens
Trigger: Calling load_reader with class_name like 'PDFReader' or 'SimpleDirectoryReader', which are not registered in core's ALL_READERS; referencing a reader class from an integration package (llama-index-readers-*) that was never registered; class-name drift after upgrading llama-index where a class was renamed or moved.
Common situations: Restoring persisted pipelines that used community readers; version migrations where reader packages split out of core into llama-index-readers-* distributions; typos in the class name string.
Related errors
- Invalid Embedding name: {name}
- Unknown extractor name: {extractor_name}
- Invalid LLM name: {llm_name}
- Must specify `class_name` in reader data.
- Invalid ChatStore name: {chat_store_name}
AI-assisted analysis of run-llama/llama_index@afd0fef371 (2026-08-15).
Data as JSON: /api/errors/410cb5ad3840de6c.
Report an issue: GitHub.