zylon-ai/private-gpt · error · ValueError

Embedding mode '{mode}' is not supported. Available: {availa

Error message

Embedding mode '{mode}' is not supported. Available: {available}

What it means

ValueError from EmbeddingFactoryRegistry.get_factory when the requested embedding mode string has no factory. Factories are pre-instantiated at registry construction from _PROVIDERS (built-ins: 'openai' and 'mock') plus anything added via register_embedding(); the message joins the sorted keys, or 'none' if the table is empty. A mode with no installed dependencies may fail at registration time, shrinking the available set.

Source

Thrown at private_gpt/components/embedding/factories/factory.py:31

}


def register_embedding(mode: str, provider: EmbeddingProvider) -> None:
    _PROVIDERS[mode] = provider


class EmbeddingFactoryRegistry:
    """Registry of embedding factories by mode."""

    def __init__(self, settings: Settings):
        self._factories: dict[str, EmbeddingFactory] = {
            mode: provider(settings) for mode, provider in _PROVIDERS.items()
        }

    def get_factory(self, mode: str) -> EmbeddingFactory:
        if mode not in self._factories:
            available = ", ".join(sorted(self._factories)) or "none"
            raise ValueError(
                f"Embedding mode '{mode}' is not supported. Available: {available}"
            )
        return self._factories[mode]

View on GitHub (pinned to 4a030776a3)

Solutions

  1. Set embedding mode to one of the names in the error's Available list (built-ins: 'openai', 'mock')
  2. For openai-like, ensure the plugin/extra that calls register_embedding('openai-like', OpenAILikeEmbeddingFactory) is installed and imported
  3. Check exact spelling/casing of the mode string in settings
  4. For custom factories, call register_embedding(mode, provider) before creating the registry

Example fix

# before
factory = registry.get_factory('openai-like')  # not registered by default

# after
from private_gpt.components.embedding.factories.openailike import OpenAILikeEmbeddingFactory
register_embedding('openai-like', OpenAILikeEmbeddingFactory)
factory = registry.get_factory('openai-like')
Defensive patterns

Strategy: validation

Validate before calling

from private_gpt.components.embedding.factories.factory import _PROVIDERS
mode = settings.embedding.mode
if mode not in _PROVIDERS:
    raise ValueError(f'unsupported embedding mode {mode!r}; pick from {sorted(_PROVIDERS)}')

Try / catch

try:
    factory = registry.get_factory(mode)
except ValueError as e:
    if 'not supported' in str(e):
        raise SystemExit(str(e)) from e  # config error: stop, don't fall back
    raise

Prevention

When it happens

Trigger: Calling get_factory(mode) with a mode not in the provider table — e.g. 'openai-like', 'huggingface', 'local', or a casing variant — or after register_embedding() was never called for a custom backend. Also triggered when a factory's module-level import fails so its entry is dropped.

Common situations: settings embedding.mode carries a value from an older release or a different distribution; plugin that registers the custom mode is not imported; users assuming OpenAILikeEmbeddingFactory is built-in because the module exists (it must be registered); typos and casing.

Related errors


AI-assisted analysis of zylon-ai/private-gpt@4a030776a3 (2026-08-15). Data as JSON: /api/errors/4ae60debff1a5d32. Report an issue: GitHub.