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
- Give the PalaceRef a local_path — even a small scratch/state directory on the same machine — so the marker can be anchored there
- Use a different backend (e.g. chromadb) if a local directory is truly unavailable
- 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
- Always construct PalaceRef with a concrete local_path
- Centralize PalaceRef construction in one factory that enforces local_path
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
- palace= must be a PalaceRef instance
- operator {key!r} not supported by qdrant
- operator {op!r} not supported by qdrant
- where_document operator {key!r} not supported
- documents length {len(documents)} does not match ids length
AI-assisted analysis of MemPalace/mempalace@06cb6987f0 (2026-08-15).
Data as JSON: /api/errors/56b77305466ece46.
Report an issue: GitHub.