1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# Plan §"Part B Option 1" — dedicated offline embed job.
#
# Use this when you want to force a one-shot full rebuild while MCP is
# stopped. CozoDB RocksDB is single-writer per process per path, so the
# canonical "safe" sequence is:
#
# docker compose -f docker-compose.rocksdb.yml stop leankg
# docker compose -f docker-compose.rocksdb.yml -f docker-compose.embed.yml \
# --profile embed run --rm leankg-embed
# docker compose -f docker-compose.rocksdb.yml start leankg
#
# Cold offline job: INT8 fast path. Needs ≥6g so batch 128 fits.
# Default: cpus="6", mem_reservation=3g, mem_limit=10g (multi-project /
# mega-graph cold embed envelope — see docs/reports/embed-3-workspaces-2026-07-17.md).
# Prefer BACKGROUND=1 on the main MCP service for day-2 so MCP stays up during rebuild.
services:
leankg-embed:
profiles: ["embed"]
image: leankg-leankg:latest
entrypoint: ["leankg"]
# LEANKG_MCP_PROJECT selects which mounted root to embed (override per run).
# Side mounts (e.g. /workspace-other) come from docker-compose.override.yml
# under services.leankg-embed.volumes — same binds as the MCP service.
command:
[
"embed",
"--wait",
"--project",
"${LEANKG_MCP_PROJECT:-/workspace}",
"--workers",
"8",
"--batch-size",
"128",
"--types",
"function,method",
]
environment:
LEANKG_DB_ENGINE: rocksdb
LEANKG_ROCKSDB_ROOT: /data/leankg-rocksdb
LEANKG_MCP_PROJECT: ${LEANKG_MCP_PROJECT:-/workspace}
LEANKG_MMAP_SIZE: "67108864"
LEANKG_EMBED_FAST: "1"
LEANKG_EMBED_MODEL: "bge-q"
LEANKG_EMBED_MAX_SEQ: "128"
LEANKG_EMBED_MAX_BLOB_CHARS: "500"
# Offline job: disable soft pause (0). 8×INT8 sessions sit ~5.5g RSS and
# never shrink; a tight MAX_MB stalls the whole run.
LEANKG_EMBED_MAX_MB: "0"
OMP_NUM_THREADS: "1"
RUST_LOG: leankg=info
volumes:
- leankg-rocksdb:/data/leankg-rocksdb
- leankg_models:/root/.cache/leankg
# Primary project mount. Extra repos: docker-compose.override.yml →
# services.leankg-embed.volumes (mirror services.leankg.volumes).
- ${HOST_PROJECT_PATH:-./}:${CONTAINER_PROJECT_PATH:-/workspace}
working_dir: ${CONTAINER_PROJECT_PATH:-/workspace}
cpus: "6"
mem_reservation: 3g
mem_limit: 10g
restart: "no"