zylon-ai/private-gpt · error · ValueError

Node store '{index_store}' is not supported. Available: {ava

Error message

Node store '{index_store}' is not supported. Available: {available}

What it means

`NodeStoreComponent.index_store(collection)` resolves the configured `settings.node_store.index_store` string against the `_PROVIDERS` registry dict; an unknown value raises `ValueError` listing the supported keys. The placeholders `{index_store}`/`{available}` in the catalog are the f-string fields: the configured provider name and the sorted, comma-joined registry keys (or 'none').

Source

Thrown at private_gpt/components/node_store/node_store_component.py:93

def register_index_store(name: str, provider: IndexStoreProvider) -> None:
    _PROVIDERS[name] = provider


@singleton
class NodeStoreComponent:
    @inject
    def __init__(
        self, settings: Settings, vector_store_component: VectorStoreComponent
    ) -> None:
        self._settings = settings
        self._vector_store_component = vector_store_component

    def index_store(self, collection: str) -> BaseIndexStore:
        provider = _PROVIDERS.get(self._settings.node_store.index_store)
        if provider is None:
            available = ", ".join(sorted(_PROVIDERS)) or "none"
            raise ValueError(
                f"Node store '{self._settings.node_store.index_store}' is not supported. "
                f"Available: {available}"
            )
        return provider(self._settings, collection)

    @property
    def max_nodes(self) -> int | None:
        return self._settings.data.max_num_nodes or None

    def get_nodes(
        self,
        collection: str,
        artifacts: list[str] | None = None,
        node_ids: list[str] | None = None,
        filters: MetadataFilters | None = None,
        limit: int | None = None,
    ) -> list[BaseNode]:
        vector_store = self._vector_store_component.vector_store(collection)

View on GitHub (pinned to 4a030776a3)

Solutions

  1. Read the error's Available list and set `node_store.index_store` to one of those exact values
  2. Check for typos/casing in settings (providers are matched case-sensitively via dict lookup)
  3. If a provider you expect is missing, upgrade to the version that ships it or install its extra dependency

Example fix

# before
node_store:
  index_store: postgresql  # typo

# after
node_store:
  index_store: postgres
Defensive patterns

Strategy: validation

Validate before calling

from private_gpt.components.node_store.node_store_component import _PROVIDERS

if settings.node_store.index_store not in _PROVIDERS:
    raise ValueError(
        f"index_store must be one of {sorted(_PROVIDERS)}, got {settings.node_store.index_store!r}"
    )

Type guard

def is_supported_index_store(name: str) -> bool:
    from private_gpt.components.node_store.node_store_component import _PROVIDERS
    return name in _PROVIDERS

Try / catch

try:
    node_store.index_store(collection)
except ValueError as e:
    if "not supported" in str(e):
        raise ConfigurationError(str(e)) from e
    raise

Prevention

When it happens

Trigger: Setting `node_store.index_store` to a typo'd or non-registered value (e.g. 'postgresql' instead of 'postgres', 'Postgres' with wrong casing); referencing a provider added in a newer version while running an older build; registry empty so available prints 'none'.

Common situations: Hand-edited settings.yaml typos; copying config from docs of a different version; renaming of providers across releases; case-sensitivity surprises.

Related errors


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