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

  1. Check what is actually available: print(llama_index.core.readers.loading.ALL_READERS.keys()) and use one of those names.
  2. 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.
  3. Verify the exact class_name string by calling YourReader.class_name() in the same environment/version.
  4. 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

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


AI-assisted analysis of run-llama/llama_index@afd0fef371 (2026-08-15). Data as JSON: /api/errors/410cb5ad3840de6c. Report an issue: GitHub.