# Adolf P4 — cognee memory service. # # Base: official upstream image (do not hand-roll cognee itself). Adds ONE # thing upstream doesn't ship: Qdrant vector-store support. Qdrant is a # *community* adapter (separate PyPI package, not one of cognee's own # `[project.optional-dependencies]` extras — the image's own EXTRAS= # mechanism only installs cognee's own extras, so it can't pull this in). # # Version note: cognee-community-vector-adapter-qdrant's declared dependency # pin (both the PyPI release 0.2.4 -> cognee==0.5.6, and the unreleased # GitHub main 0.3.0 -> cognee==1.1.0) trails this image's cognee 1.2.2. # Installed with --no-deps (below) to avoid pip fighting that pin and # downgrading cognee. Verified compatible by direct import test on 2026-07-05: # both registry hooks the adapter calls (`use_vector_adapter`, # `use_dataset_database_handler` from cognee.infrastructure.databases.*) # exist unchanged in cognee 1.2.2, and a full container import of # cognee_community_vector_adapter_qdrant.register succeeds with no error # against this exact image. Not yet exercised against a live Qdrant round # trip (cognify + search) — do that once the LiteLLM LLM/embedder blockers # below are resolved, as a final confirmation. FROM cognee/cognee:1.2.2 # qdrant-client is the adapter's one genuinely-missing runtime dependency # (starlette/instructor are already satisfied by cognee's own base deps). # Installed normally (with deps) since it's a fresh package, not a conflict. RUN /usr/local/bin/pip --python /app/.venv/bin/python install --no-cache-dir \ "qdrant-client>=1.18.0" # Pinned to a specific commit for reproducibility (no tagged release exists # yet compatible with our cognee version — see version note above). RUN /usr/local/bin/pip --python /app/.venv/bin/python install --no-cache-dir --no-deps \ "https://github.com/topoteretes/cognee-community/archive/52281288052970f57e533b9be75b64da9ac7c773.tar.gz#subdirectory=packages/vector/qdrant" # sitecustomize.py auto-imports at every Python interpreter start in this # venv. Gated on VECTOR_DB_PROVIDER so it's a no-op unless qdrant is actually # selected — this is the adapter's own documented registration call # (cognee-community-vector-adapter-qdrant README: "Import and register the # adapter in your code: from cognee_community_vector_adapter_qdrant import # register"), just run automatically instead of requiring a cognee source # edit to add the import. RUN printf '%s\n' \ 'import os' \ 'if os.environ.get("VECTOR_DB_PROVIDER") == "qdrant":' \ ' from cognee_community_vector_adapter_qdrant import register # noqa: F401' \ > /app/.venv/lib/python3.12/site-packages/sitecustomize.py # Pre-installed Kuzu/Ladybug JSON extension (P4 deploy blocker fix, 2026-07-05). # cognee's graph adapter (cognee/infrastructure/databases/graph/ladybug/adapter.py) # always tries `LOAD EXTENSION JSON` on startup and on every /health graph check, # falling back to `INSTALL JSON` (a network download from # extension.ladybugdb.com) if not already cached at # ~/.lbdb/extension///json/libjson.lbug_extension. This # extension is required for recall/temporal-search graph queries — without it # cognee's /health reports "unhealthy" and graph queries that use JSON fail # with a Binder exception ("Extension: json ... has not been installed"). # # This deployment's egress to extension.ladybugdb.com is severely # bandwidth-throttled (~1-1.2 KB/s per connection — confirmed via direct curl, # not a proxy/DNS block: TLS handshake and HTTP 200 succeed, the transfer # itself just crawls), so the runtime auto-download reliably times out before # the ~827KB file finishes, and every subsequent health check/query re-attempts # and fails the same way. Downloaded once out-of-band (16-way parallel ranged # GETs, ~846920 bytes, verified ELF shared object) and baked into the image # here so the container never needs to touch that host at runtime. COPY extensions/0.17.0/linux_amd64/json/libjson.lbug_extension \ /root/.lbdb/extension/0.17.0/linux_amd64/json/libjson.lbug_extension