progress 235b

This commit is contained in:
2026-06-08 15:31:50 +01:00
parent a29793032d
commit de1635872f
25 changed files with 1598 additions and 53 deletions

View File

@@ -101,9 +101,10 @@ server.shell(
_sudo=True,
)
# huggingface_hub CLI for `huggingface-cli download <repo> --local-dir ...`
# Lands at ~/.local/bin/huggingface-cli for the SSH user. Other users can
# repeat the command themselves.
# huggingface_hub CLI for `hf download <repo> --local-dir ...`. Lands as
# ~/.local/bin/hf for the SSH user (the old `huggingface-cli` name is
# still installed as a deprecated alias). Other users can repeat the
# command themselves.
server.shell(
name="Install / upgrade huggingface_hub CLI",
commands=["uv tool install --upgrade 'huggingface_hub[cli]'"],
@@ -378,7 +379,14 @@ files.directory(
mode="755",
_sudo=True,
)
for sub in ("moonshotai", "qwen", "deepseek", "zai", "mistralai"):
for sub in (
"moonshotai",
"qwen",
"deepseek",
"zai",
"mistralai",
"black-forest-labs", # Flux.1-Dev for ComfyUI (gated on HF)
):
files.directory(
name=f"{MODELS_DIR}/{sub}",
path=f"{MODELS_DIR}/{sub}",
@@ -424,6 +432,9 @@ for svc in (
"vllm",
"ollama",
"kimi-linear",
"qwen3-235b",
"litellm",
"comfyui",
"openwebui",
"beszel",
"openlit",
@@ -460,6 +471,19 @@ files.directory(
mode="2775",
_sudo=True,
)
# Sibling .env for KAGI_API_KEY (used by RAG_WEB_SEARCH_ENGINE=kagi).
# Placeholder created here; fill in by hand on first deploy. Same shared
# key the kagimcp MCP on the Mac uses. Mode 640 root:docker so the
# docker group can read it at compose parse time, not world-readable.
files.file(
name="OpenWebUI .env (placeholder — fill in KAGI_API_KEY)",
path=f"{COMPOSE_DIR}/openwebui/.env",
present=True,
mode="640",
user="root",
group="docker",
_sudo=True,
)
# Beszel persistent state (admin account, system list, metric history).
files.directory(
@@ -565,6 +589,114 @@ for cfg in (
_sudo=True,
)
# llama.cpp (kyuz0 rocm-7.2.2) operator assets — smoke + readme. The
# image and weights live elsewhere; this dir is just the scripts +
# doc that ride alongside the compose file.
for asset, mode in (
("smoke.sh", "0775"),
("README.md", "0664"),
):
files.put(
name=f"llama: {asset}",
src=f"compose/llama/{asset}",
dest=f"{COMPOSE_DIR}/llama/{asset}",
group="docker",
mode=mode,
_sudo=True,
)
# Qwen3-235B operator assets. Same image as llama (kyuz0 rocm-7.2.2);
# this dir just ships the smoke script + README documenting the
# coexistence/swap pattern. Weights live at /models/qwen/ via manual
# `hf download` per the README.
for asset, mode in (
("smoke.sh", "0775"),
("README.md", "0664"),
):
files.put(
name=f"qwen3-235b: {asset}",
src=f"compose/qwen3-235b/{asset}",
dest=f"{COMPOSE_DIR}/qwen3-235b/{asset}",
group="docker",
mode=mode,
_sudo=True,
)
# LiteLLM router assets. config.yaml is the source-of-truth model
# routing table — pyinfra syncs it on every run; edits on the box get
# overwritten. The .env file holds LITELLM_MASTER_KEY + LITELLM_SALT_KEY
# (same pattern as compose/beszel.yml — placeholder file created here,
# filled in by hand on first deploy).
for asset, mode in (
("config.yaml", "0664"),
("smoke.sh", "0775"),
("README.md", "0664"),
):
files.put(
name=f"litellm: {asset}",
src=f"compose/litellm/{asset}",
dest=f"{COMPOSE_DIR}/litellm/{asset}",
group="docker",
mode=mode,
_sudo=True,
)
files.file(
name="LiteLLM .env (placeholder — fill in LITELLM_MASTER_KEY)",
path=f"{COMPOSE_DIR}/litellm/.env",
present=True,
mode="640",
user="root",
group="docker",
_sudo=True,
)
# ComfyUI persistent state. The toolbox image runs as root and writes
# into these dirs (models read RW so custom nodes can install, output
# for generated images, custom_nodes for plugin installs that survive
# container recreate, workflows for user-saved graphs). Owned 2775
# root:docker so docker group members can drop in model files.
for sub in ("models", "output", "custom_nodes", "workflows"):
files.directory(
name=f"ComfyUI {sub} dir",
path=f"{COMPOSE_DIR}/comfyui/{sub}",
group="docker",
mode="2775",
_sudo=True,
)
# ComfyUI's expected model subdir layout — ComfyUI itself creates these
# at first start, but pre-creating means `hf download --local-dir ...`
# works without needing the container running.
for model_sub in (
"checkpoints",
"diffusion_models",
"vae",
"text_encoders",
"loras",
"controlnet",
"clip_vision",
"upscale_models",
):
files.directory(
name=f"ComfyUI models/{model_sub} dir",
path=f"{COMPOSE_DIR}/comfyui/models/{model_sub}",
group="docker",
mode="2775",
_sudo=True,
)
# Smoke test + operator doc.
for asset, mode in (
("smoke.sh", "0775"),
("README.md", "0664"),
):
files.put(
name=f"comfyui: {asset}",
src=f"compose/comfyui/{asset}",
dest=f"{COMPOSE_DIR}/comfyui/{asset}",
group="docker",
mode=mode,
_sudo=True,
)
# Kimi-Linear container assets (build script, smoke test, operator doc).
# The compose file itself is copied by the for-loop above; the rest of
# the build context lives under compose/kimi-linear/ on the source side