Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 14 additions & 12 deletions src/canton_mcp_server/startup_checks.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,12 @@ def validate_startup_config() -> dict:
raise SystemExit(msg)

# --- Step 2: ChromaDB path check ---
# Presence of a pre-built ChromaDB index is informational, not fatal.
# The CPU Dockerfile pre-indexes at build time, so production CPU images
# always have chroma.sqlite3 at boot. The GPU Dockerfile deliberately
# ships without an index — `server.py`'s warmup task creates the dir and
# indexes on the GPU at runtime (see `_warmup_semantic_search`). Either
# way, blocking boot here stops the warmup task from ever running.
chroma_dir = get_env("CHROMA_PERSIST_DIR", "")
if chroma_dir:
chroma_path = Path(chroma_dir)
Expand All @@ -71,20 +77,16 @@ def validate_startup_config() -> dict:
logger.info(f"ChromaDB index found at {chroma_dir}")
else:
readiness["chromadb_ready"] = False
msg = f"CHROMA_PERSIST_DIR={chroma_dir} exists but contains no chroma.sqlite3 — pre-built index missing"
if is_isolated:
logger.critical(msg)
raise SystemExit(msg)
else:
logger.warning(f"{msg} (will build on first request)")
logger.warning(
f"CHROMA_PERSIST_DIR={chroma_dir} exists but contains no chroma.sqlite3 — "
f"warmup task will build the index on first request"
)
Comment on lines +80 to +83
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The log message states that the index will be built 'on first request', but according to the lifespan implementation in server.py and the comments added in this PR (lines 67-68), the warmup task is triggered eagerly at startup in the background. This discrepancy can be confusing for operators monitoring the server's initialization.

Suggested change
logger.warning(
f"CHROMA_PERSIST_DIR={chroma_dir} exists but contains no chroma.sqlite3 — "
f"warmup task will build the index on first request"
)
logger.warning(
f"CHROMA_PERSIST_DIR={chroma_dir} exists but contains no chroma.sqlite3 — "
"warmup task will build the index in the background"
)

else:
readiness["chromadb_ready"] = False
msg = f"CHROMA_PERSIST_DIR={chroma_dir} does not exist"
if is_isolated:
logger.critical(msg)
raise SystemExit(msg)
else:
logger.warning(f"{msg} (will create on first request)")
logger.warning(
f"CHROMA_PERSIST_DIR={chroma_dir} does not exist — "
f"warmup task will create and populate it on first request"
)
Comment on lines +86 to +89
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Similar to the previous warning, the index creation and population happen in the background at startup via the warmup task, not 'on first request'. Updating this message ensures consistency with the actual server behavior.

Suggested change
logger.warning(
f"CHROMA_PERSIST_DIR={chroma_dir} does not exist — "
f"warmup task will create and populate it on first request"
)
logger.warning(
f"CHROMA_PERSIST_DIR={chroma_dir} does not exist — "
"warmup task will create and populate it in the background"
)


# --- Step 3: LLM model ping ---
llm_enabled = get_env_bool("ENABLE_LLM_ENRICHMENT", False) or get_env_bool("ENABLE_LLM_AUTH_EXTRACTION", False)
Expand Down
Loading