progress 235b
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user