From ddbe61818b5d5376dd98ad2b311dd987fa8d125c Mon Sep 17 00:00:00 2001 From: Fam Zheng Date: Sun, 1 Mar 2026 08:33:21 +0000 Subject: [PATCH] Use uv venv for embedding, pre-download model in Docker build - Use /app/venv with uv instead of system python/pip - Pre-download all-MiniLM-L6-v2 model during Docker build Co-Authored-By: Claude Opus 4.6 --- Dockerfile | 5 +++-- src/kb.rs | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 416e49e..64c2e44 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,10 +8,11 @@ RUN npm run build # Stage 2: Runtime FROM alpine:3.21 -RUN apk add --no-cache ca-certificates curl bash python3 py3-pip +RUN apk add --no-cache ca-certificates curl bash RUN curl -LsSf https://astral.sh/uv/install.sh | sh ENV PATH="/root/.local/bin:$PATH" -RUN pip3 install --break-system-packages sentence-transformers +RUN uv venv /app/venv && uv pip install --python /app/venv/bin/python sentence-transformers +RUN /app/venv/bin/python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('all-MiniLM-L6-v2')" RUN mkdir -p /app/data/workspaces WORKDIR /app COPY target/aarch64-unknown-linux-musl/release/tori . diff --git a/src/kb.rs b/src/kb.rs index 73a2fc7..2c1d0b3 100644 --- a/src/kb.rs +++ b/src/kb.rs @@ -101,7 +101,7 @@ impl KbManager { async fn compute_embeddings(texts: &[String]) -> Result>> { let input = serde_json::json!({ "texts": texts }); - let mut child = tokio::process::Command::new("python3") + let mut child = tokio::process::Command::new("/app/venv/bin/python") .arg("/app/scripts/embed.py") .stdin(Stdio::piped()) .stdout(Stdio::piped())