microsoft/graphrag · error · ValueError
ModelConfig.type ' ' is not registered in the…
Error message
ModelConfig.type '{strategy}' is not registered in the CompletionFactory. Registered strategies: {', '.join(embedding_factory.keys())} What it means
create_embedding dispatches on ModelConfig.type against the registered embedding factory; an unregistered type hits the catch-all case and raises with the list of registered strategies. Note the message text mentions CompletionFactory even though this is the embedding factory (cosmetic bug in the message).
Solutions
- Check the error's 'Registered strategies' list and set model_config.type to one of those values (e.g. LLMProviderType.LiteLLM or the mock type for tests)
- If you have a custom embedding, register it first with register_embedding(embedding_type=<your type>, embedding_initializer=YourClass) before calling create_embedding
- If you meant to create a chat completion client, call create_completion instead of create_embedding
Example fix
# before create_embedding(model_config=ModelConfig(type=LLMProviderType.OpenAI, ...)) # after create_embedding(model_config=ModelConfig(type=LLMProviderType.LiteLLM, model="text-embedding-3-small", ...))
Defensive patterns
Strategy: try-catch
Validate before calling
from graphrag_llm.embedding.embedding_factory import embedding_factory
# (or parse the registered-strategies list from the error)
if model_config.type not in KNOWN_EMBEDDING_TYPES: # e.g. {LLMProviderType.LiteLLM, LLMProviderType.MockLLM}
raise ValueError(f"{model_config.type} has no embedding backend") Type guard
def is_valid_embedding_type(t: LLMProviderType) -> bool:
return t in {LLMProviderType.LiteLLM, LLMProviderType.MockLLM} Try / catch
try:
embedder = create_embedding(model_config=cfg)
except ValueError as e:
if "is not registered in the" in str(e):
cfg.type = LLMProviderType.LiteLLM
embedder = create_embedding(model_config=cfg)
else:
raise Prevention
- Keep a set of valid embedding types in your config layer and assert before factory calls
- Register custom embeddings once at import time in a bootstrap module
- Don't reuse completion ModelConfig objects for embedding calls
When it happens
Trigger: Calling create_embedding(model_config) where model_config.type is not one of the registered embedding types (e.g. a completion-only provider type, a typo, or a new provider not registered via register_embedding).
Common situations: Passing a completion ModelConfig to create_embedding; upgrading graphrag-llm where a provider key/enum changed; custom embedding registered under a different LLMProviderType than the config uses.
Related errors
- MetricsConfig.processor
- MetricsConfig.store ' ' is not registered in the…
- MetricsConfig.writer
- ModelConfig.mock_responses must be a non-empty list of…
- RateLimitConfig.type
AI-assisted analysis of microsoft/graphrag@f40e9a26ce (2026-08-27).
Data as JSON: /api/errors/e1824be4ebcb0cf2.
Report an issue: GitHub.
Appendix: source
Thrown at packages/graphrag-llm/graphrag_llm/embedding/embedding_factory.py:106
from graphrag_llm.embedding.lite_llm_embedding import (
LiteLLMEmbedding,
)
register_embedding(
embedding_type=LLMProviderType.LiteLLM,
embedding_initializer=LiteLLMEmbedding,
scope="singleton",
)
case LLMProviderType.MockLLM:
from graphrag_llm.embedding.mock_llm_embedding import MockLLMEmbedding
register_embedding(
embedding_type=LLMProviderType.MockLLM,
embedding_initializer=MockLLMEmbedding,
)
case _:
msg = f"ModelConfig.type '{strategy}' is not registered in the CompletionFactory. Registered strategies: {', '.join(embedding_factory.keys())}"
raise ValueError(msg)
tokenizer = tokenizer or create_tokenizer(TokenizerConfig(model_id=model_id))
rate_limiter: RateLimiter | None = None
if model_config.rate_limit:
from graphrag_llm.rate_limit.rate_limit_factory import create_rate_limiter
rate_limiter = create_rate_limiter(rate_limit_config=model_config.rate_limit)
retrier: Retry | None = None
if model_config.retry:
from graphrag_llm.retry.retry_factory import create_retry
retrier = create_retry(retry_config=model_config.retry)
metrics_store: MetricsStore = NoopMetricsStore()
metrics_processor: MetricsProcessor | None = None
if model_config.metrics:View on GitHub (pinned to f40e9a26ce)