MemPalace/mempalace · error · BackendError

qdrant backend requires a local palace path to anchor mismat

Error message

qdrant backend requires a local palace path to anchor mismatch protection; pure-remote palaces (local_path=None) are not supported yet

What it means

Raised when get_collection is called with a PalaceRef whose local_path is None (pure-remote/hosted mode). The qdrant backend's only mismatch-protection anchor is the on-disk marker; with no local path it can neither write nor validate it, so opening would silently drop protection against URL/namespace drift. Pure-remote palaces are explicitly not supported yet.

Source

Thrown at mempalace/backends/qdrant.py:1355

                api_key=config.api_key,
                timeout=config.timeout,
                namespace=palace.namespace,
            )
        client = self._client(config)
        if palace.local_path:
            marker_path = self._marker_path(palace.local_path)
            if os.path.isfile(marker_path):
                self._validate_marker_target(palace, config)
            elif not create:
                raise PalaceNotFoundError(marker_path)
        else:
            # The qdrant marker is this backend's only mismatch-protection
            # anchor, and it lives next to the palace on local disk. With no
            # local_path (the pure-remote / hosted mode) we can neither write
            # nor validate it, so opening would silently drop protection
            # against URL/namespace drift. Refuse loudly instead. A remote
            # marker store for pure-remote palaces is tracked as a follow-up.
            raise BackendError(
                "qdrant backend requires a local palace path to anchor mismatch "
                "protection; pure-remote palaces (local_path=None) are not "
                "supported yet"
            )
        remote_collection = self._remote_collection_name(
            palace=palace,
            collection_name=collection_name,
            config=config,
        )
        if not create and not client.collection_exists(remote_collection):
            raise CollectionNotInitializedError(collection_name)
        collection = QdrantCollection(
            backend=self,
            client=client,
            config=config,
            palace=palace,
            collection_name=collection_name,
            remote_collection=remote_collection,

View on GitHub (pinned to 06cb6987f0)

Solutions

  1. Give the PalaceRef a local_path — even a small scratch/state directory on the same machine — so the marker can be anchored there
  2. Use a different backend (e.g. chromadb) if a local directory is truly unavailable
  3. Wait for/follow up on the tracked remote marker store for pure-remote palaces mentioned in the error

Example fix

// before
palace = PalaceRef(id="my-palace", local_path=None)
col = backend.get_collection(palace=palace, collection_name="drawers")  # raises
// after
palace = PalaceRef(id="my-palace", local_path="~/.mempalace/palaces/my-palace")
col = backend.get_collection(palace=palace, collection_name="drawers")
Defensive patterns

Strategy: type-guard

Validate before calling

if palace.local_path is None:
    palace = PalaceRef(id=palace.id, local_path=default_state_dir(palace.id))

Type guard

def has_local_path(p: PalaceRef) -> bool:
    """True when the palace can anchor a qdrant marker on disk."""
    return isinstance(p, PalaceRef) and bool(p.local_path)

Prevention

When it happens

Trigger: Passing palace=PalaceRef(id=..., local_path=None) (or any PalaceRef without a local_path) to QdrantBackend.get_collection, with any create value.

Common situations: Trying to run mempalace fully remotely (no local palace directory) against hosted Qdrant; refactoring code that previously used string paths into PalaceRef objects and forgetting local_path; assuming a Chroma-style 'remote-only' workflow transfers to the qdrant backend.

Related errors


AI-assisted analysis of MemPalace/mempalace@06cb6987f0 (2026-08-15). Data as JSON: /api/errors/56b77305466ece46. Report an issue: GitHub.