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
- Set embedding mode to one of the names in the error's Available list (built-ins: 'openai', 'mock')
- For openai-like, ensure the plugin/extra that calls register_embedding('openai-like', OpenAILikeEmbeddingFactory) is installed and imported
- Check exact spelling/casing of the mode string in settings
- 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
- Constrain embedding.mode in config schema to registered values
- Import plugin modules that call register_embedding() before constructing the registry
- Log available modes at startup
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
- Reader '{normalized_name}' is not supported. Available: {ava
- Code execution provider '{name}' is not registered. Availabl
- Unsupported semaphore mode: {mode!r}. Available: {', '.join(
- No embedding model specified and no models are configured
- Embedding model '{target_model}' not found. Available: {avai
AI-assisted analysis of zylon-ai/private-gpt@4a030776a3 (2026-08-15).
Data as JSON: /api/errors/4ae60debff1a5d32.
Report an issue: GitHub.