microsoft/graphrag · error · ValueError

ModelConfig.type '{strategy}' is not registered in the Compl

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).

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)

Solutions

  1. 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)
  2. If you have a custom embedding, register it first with register_embedding(embedding_type=<your type>, embedding_initializer=YourClass) before calling create_embedding
  3. 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

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


AI-assisted analysis of microsoft/graphrag@f40e9a26ce (2026-08-27). Data as JSON: /api/errors/e1824be4ebcb0cf2. Report an issue: GitHub.