run-llama/llama_index · error · ValueError
Unknown extractor name: {extractor_name}
Error message
Unknown extractor name: {extractor_name} What it means
Raised by load_extractor() when the dict's class_name does not match any of the four supported extractors: SummaryExtractor, QuestionsAnsweredExtractor, TitleExtractor, KeywordExtractor. The loader is a hardcoded if/elif chain over those class_name() strings, so any other extractor (built-in or custom) cannot be deserialized through it.
Source
Thrown at llama-index-core/llama_index/core/extractors/loading.py:29
data: dict,
) -> BaseExtractor:
if isinstance(data, BaseExtractor):
return data
extractor_name = data.get("class_name")
if extractor_name is None:
raise ValueError("Extractor loading requires a class_name")
if extractor_name == SummaryExtractor.class_name():
return SummaryExtractor.from_dict(data)
elif extractor_name == QuestionsAnsweredExtractor.class_name():
return QuestionsAnsweredExtractor.from_dict(data)
elif extractor_name == TitleExtractor.class_name():
return TitleExtractor.from_dict(data)
elif extractor_name == KeywordExtractor.class_name():
return KeywordExtractor.from_dict(data)
else:
raise ValueError(f"Unknown extractor name: {extractor_name}")
View on GitHub (pinned to afd0fef371)
Solutions
- For the four supported extractors, ensure class_name matches exactly: 'SummaryExtractor', 'QuestionsAnsweredExtractor', 'TitleExtractor', 'KeywordExtractor'.
- For unsupported/custom extractors, deserialize directly with YourExtractor.from_dict(data) instead of load_extractor.
- Extend your own loader (mapping name -> class) rather than relying on the hardcoded chain.
Example fix
# before
extractor = load_extractor({"class_name": "DocumentContextExtractor", ...})
# after
from llama_index.core.extractors import DocumentContextExtractor
extractor = DocumentContextExtractor.from_dict(data) Defensive patterns
Strategy: type-guard
Validate before calling
SUPPORTED = {"SummaryExtractor", "QuestionsAnsweredExtractor", "TitleExtractor", "KeywordExtractor"}
name = data.get("class_name")
if name not in SUPPORTED:
extractor = EXTRACTOR_CLASSES[name].from_dict(data) # your own registry
else:
extractor = load_extractor(data) Type guard
def is_loadable_extractor_name(name: str) -> bool:
return name in {"SummaryExtractor", "QuestionsAnsweredExtractor", "TitleExtractor", "KeywordExtractor"} Try / catch
try:
extractor = load_extractor(data)
except ValueError as e:
if "Unknown extractor name" in str(e):
extractor = CUSTOM_EXTRACTORS[data["class_name"]].from_dict(data)
else:
raise Prevention
- Maintain your own name->class registry for extractors beyond the four built-ins.
- Deserialize unsupported extractors with TheirClass.from_dict directly.
- Pin the llama-index version so the supported set does not shift silently.
When it happens
Trigger: Calling load_extractor({'class_name': 'DocumentContextExtractor', ...}) or with a custom extractor's name; also triggered by exact-string mismatches such as 'TitleExtractor ' (trailing space) or wrong casing.
Common situations: Serializing newer extractors (DocumentContextExtractor lives in the same package but is not in the chain) and assuming the loader handles everything; custom BaseExtractor subclasses that need round-tripping; version drift where class_name strings changed.
Related errors
- Invalid Embedding name: {name}
- Extractor loading requires a class_name
- Invalid LLM name: {llm_name}
- Reader class name {class_name} not found.
- Invalid ChatStore name: {chat_store_name}
AI-assisted analysis of run-llama/llama_index@afd0fef371 (2026-08-15).
Data as JSON: /api/errors/52ee009ab63c6a7f.
Report an issue: GitHub.