switch llama-swap to unified-vulkan image with FLUX.1-dev image generation
ci/woodpecker/push/flux-reconcile-source Pipeline was successful
ci/woodpecker/push/flux-reconcile-source Pipeline was successful
- Update deployment to unified-vulkan-2026-05-19 (includes llama-server, sd-server, whisper-server in one image) - Fix binary paths: /app/llama-server -> llama-server (now on PATH) - Migrate groups -> matrix to allow FLUX to evict the always-on 0.8B model when image generation is requested - Add FLUX.1-dev Q4_K_S model via sd-server - Configure OpenWebUI image generation to use llama-swap sd-server - Update renovate versioning regex to treat all unified-vulkan date tags as patch updates for automerge
This commit is contained in:
@@ -19,18 +19,27 @@ hooks:
|
|||||||
preload:
|
preload:
|
||||||
- "Qwen3.5-0.8B-GGUF-nothink:Q4_K_XL"
|
- "Qwen3.5-0.8B-GGUF-nothink:Q4_K_XL"
|
||||||
|
|
||||||
groups:
|
# matrix replaces groups (they are mutually exclusive).
|
||||||
always:
|
# The small 0.8B model runs alongside any LLM.
|
||||||
persistent: true
|
# FLUX runs alone — it needs all available VRAM and will evict the 0.8B first.
|
||||||
exclusive: false
|
matrix:
|
||||||
swap: false
|
vars:
|
||||||
members:
|
q8: "Qwen3.5-0.8B-GGUF-nothink:Q4_K_XL"
|
||||||
- "Qwen3.5-0.8B-GGUF-nothink:Q4_K_XL"
|
flux: "flux1-dev:Q4_K_S"
|
||||||
|
|
||||||
|
evict_costs:
|
||||||
|
flux: 10 # large files, slow to reload
|
||||||
|
|
||||||
|
sets:
|
||||||
|
# any LLM can run alongside the small always-on model
|
||||||
|
with_q8: "(Qwen3-Coder-Next-GGUF:Q4_K_M | Qwen3.5-35B-A3B-GGUF:Q4_K_M | Qwen3.5-35B-A3B-GGUF-nothink:Q4_K_M | Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M | Qwen3.5-35B-A3B-heretic-GGUF-nothink:Q4_K_M | Qwen3.5-4B-GGUF:Q4_K_M | Qwen3.5-4B-GGUF-nothink:Q4_K_M | Qwen3.5-4B-heretic-GGUF:Q4_K_M | Qwen3.5-4B-heretic-GGUF-nothink:Q4_K_M | gemma-4-26B-A4B-it:UD-Q4_K_XL | gemma-4-26B-A4B-it:UD-Q2_K_XL | unsloth/gemma-4-E4B-it-GGUF:UD-Q4_K_XL | unsloth/gemma-4-E2B-it-GGUF:UD-Q4_K_XL | unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL | unsloth/Qwen3.6-35B-A3B-GGUF-nothink:UD-Q4_K_XL | HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive:Q4_K_M | HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-nothink:Q4_K_M | unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Q4_K_M | unsloth/Qwen3.6-35B-A3B-MTP-GGUF-nothink:Q4_K_M) & q8"
|
||||||
|
# FLUX runs alone — evicts everything including q8
|
||||||
|
image_gen: "flux"
|
||||||
|
|
||||||
models:
|
models:
|
||||||
"Qwen3-Coder-Next-GGUF:Q4_K_M":
|
"Qwen3-Coder-Next-GGUF:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/Qwen3-Coder-Next-GGUF:Q4_K_M
|
-hf unsloth/Qwen3-Coder-Next-GGUF:Q4_K_M
|
||||||
--ctx-size 65536
|
--ctx-size 65536
|
||||||
--predict 8192
|
--predict 8192
|
||||||
@@ -44,7 +53,7 @@ models:
|
|||||||
|
|
||||||
"Qwen3.5-35B-A3B-GGUF:Q4_K_M":
|
"Qwen3.5-35B-A3B-GGUF:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/Qwen3.5-35B-A3B-GGUF:Q4_K_M
|
-hf unsloth/Qwen3.5-35B-A3B-GGUF:Q4_K_M
|
||||||
${ctx_256k}
|
${ctx_256k}
|
||||||
${qwen35_think_args}
|
${qwen35_think_args}
|
||||||
@@ -52,7 +61,7 @@ models:
|
|||||||
|
|
||||||
"Qwen3.5-35B-A3B-GGUF-nothink:Q4_K_M":
|
"Qwen3.5-35B-A3B-GGUF-nothink:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/Qwen3.5-35B-A3B-GGUF:Q4_K_M
|
-hf unsloth/Qwen3.5-35B-A3B-GGUF:Q4_K_M
|
||||||
${ctx_256k}
|
${ctx_256k}
|
||||||
${qwen35_nothink_args}
|
${qwen35_nothink_args}
|
||||||
@@ -62,7 +71,7 @@ models:
|
|||||||
# so providing url to the one from the non-heretic version.
|
# so providing url to the one from the non-heretic version.
|
||||||
"Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M":
|
"Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf mradermacher/Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M
|
-hf mradermacher/Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M
|
||||||
${qwen35_35b_heretic_mmproj}
|
${qwen35_35b_heretic_mmproj}
|
||||||
${ctx_256k}
|
${ctx_256k}
|
||||||
@@ -71,7 +80,7 @@ models:
|
|||||||
|
|
||||||
"Qwen3.5-35B-A3B-heretic-GGUF-nothink:Q4_K_M":
|
"Qwen3.5-35B-A3B-heretic-GGUF-nothink:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf mradermacher/Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M
|
-hf mradermacher/Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M
|
||||||
${qwen35_35b_heretic_mmproj}
|
${qwen35_35b_heretic_mmproj}
|
||||||
${ctx_256k}
|
${ctx_256k}
|
||||||
@@ -80,7 +89,7 @@ models:
|
|||||||
|
|
||||||
"Qwen3.5-0.8B-GGUF-nothink:Q4_K_XL":
|
"Qwen3.5-0.8B-GGUF-nothink:Q4_K_XL":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/Qwen3.5-0.8B-GGUF:Q4_K_XL
|
-hf unsloth/Qwen3.5-0.8B-GGUF:Q4_K_XL
|
||||||
--ctx-size 4096
|
--ctx-size 4096
|
||||||
${qwen35_nothink_args}
|
${qwen35_nothink_args}
|
||||||
@@ -88,7 +97,7 @@ models:
|
|||||||
|
|
||||||
"Qwen3.5-4B-GGUF:Q4_K_M":
|
"Qwen3.5-4B-GGUF:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/Qwen3.5-4B-GGUF:Q4_K_M
|
-hf unsloth/Qwen3.5-4B-GGUF:Q4_K_M
|
||||||
${ctx_128k}
|
${ctx_128k}
|
||||||
${qwen35_think_args}
|
${qwen35_think_args}
|
||||||
@@ -96,7 +105,7 @@ models:
|
|||||||
|
|
||||||
"Qwen3.5-4B-GGUF-nothink:Q4_K_M":
|
"Qwen3.5-4B-GGUF-nothink:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/Qwen3.5-4B-GGUF:Q4_K_M
|
-hf unsloth/Qwen3.5-4B-GGUF:Q4_K_M
|
||||||
${ctx_128k}
|
${ctx_128k}
|
||||||
${qwen35_nothink_args}
|
${qwen35_nothink_args}
|
||||||
@@ -104,7 +113,7 @@ models:
|
|||||||
|
|
||||||
"Qwen3.5-4B-heretic-GGUF:Q4_K_M":
|
"Qwen3.5-4B-heretic-GGUF:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf mradermacher/Qwen3.5-4B-heretic-GGUF:Q4_K_M
|
-hf mradermacher/Qwen3.5-4B-heretic-GGUF:Q4_K_M
|
||||||
${qwen35_4b_heretic_mmproj}
|
${qwen35_4b_heretic_mmproj}
|
||||||
${ctx_128k}
|
${ctx_128k}
|
||||||
@@ -113,7 +122,7 @@ models:
|
|||||||
|
|
||||||
"Qwen3.5-4B-heretic-GGUF-nothink:Q4_K_M":
|
"Qwen3.5-4B-heretic-GGUF-nothink:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf mradermacher/Qwen3.5-4B-heretic-GGUF:Q4_K_M
|
-hf mradermacher/Qwen3.5-4B-heretic-GGUF:Q4_K_M
|
||||||
${qwen35_4b_heretic_mmproj}
|
${qwen35_4b_heretic_mmproj}
|
||||||
${ctx_128k}
|
${ctx_128k}
|
||||||
@@ -122,7 +131,7 @@ models:
|
|||||||
|
|
||||||
"gemma-4-26B-A4B-it:UD-Q4_K_XL":
|
"gemma-4-26B-A4B-it:UD-Q4_K_XL":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/gemma-4-26B-A4B-it-GGUF:UD-Q4_K_XL \
|
-hf unsloth/gemma-4-26B-A4B-it-GGUF:UD-Q4_K_XL \
|
||||||
${ctx_256k}
|
${ctx_256k}
|
||||||
${gemma4_sampling}
|
${gemma4_sampling}
|
||||||
@@ -130,7 +139,7 @@ models:
|
|||||||
|
|
||||||
"gemma-4-26B-A4B-it:UD-Q2_K_XL":
|
"gemma-4-26B-A4B-it:UD-Q2_K_XL":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/gemma-4-26B-A4B-it-GGUF:UD-Q2_K_XL \
|
-hf unsloth/gemma-4-26B-A4B-it-GGUF:UD-Q2_K_XL \
|
||||||
${ctx_256k}
|
${ctx_256k}
|
||||||
${gemma4_sampling}
|
${gemma4_sampling}
|
||||||
@@ -138,7 +147,7 @@ models:
|
|||||||
|
|
||||||
"unsloth/gemma-4-E4B-it-GGUF:UD-Q4_K_XL":
|
"unsloth/gemma-4-E4B-it-GGUF:UD-Q4_K_XL":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/gemma-4-E4B-it-GGUF:UD-Q4_K_XL \
|
-hf unsloth/gemma-4-E4B-it-GGUF:UD-Q4_K_XL \
|
||||||
${ctx_128k}
|
${ctx_128k}
|
||||||
${gemma4_sampling}
|
${gemma4_sampling}
|
||||||
@@ -146,7 +155,7 @@ models:
|
|||||||
|
|
||||||
"unsloth/gemma-4-E2B-it-GGUF:UD-Q4_K_XL":
|
"unsloth/gemma-4-E2B-it-GGUF:UD-Q4_K_XL":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/gemma-4-E2B-it-GGUF:UD-Q4_K_XL \
|
-hf unsloth/gemma-4-E2B-it-GGUF:UD-Q4_K_XL \
|
||||||
${ctx_128k}
|
${ctx_128k}
|
||||||
${gemma4_sampling}
|
${gemma4_sampling}
|
||||||
@@ -154,7 +163,7 @@ models:
|
|||||||
|
|
||||||
"unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL":
|
"unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL
|
-hf unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL
|
||||||
${ctx_256k}
|
${ctx_256k}
|
||||||
${qwen35_think_args}
|
${qwen35_think_args}
|
||||||
@@ -162,7 +171,7 @@ models:
|
|||||||
|
|
||||||
"unsloth/Qwen3.6-35B-A3B-GGUF-nothink:UD-Q4_K_XL":
|
"unsloth/Qwen3.6-35B-A3B-GGUF-nothink:UD-Q4_K_XL":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL
|
-hf unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL
|
||||||
${ctx_256k}
|
${ctx_256k}
|
||||||
${qwen35_nothink_args}
|
${qwen35_nothink_args}
|
||||||
@@ -170,7 +179,7 @@ models:
|
|||||||
|
|
||||||
"HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive:Q4_K_M":
|
"HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive:Q4_K_M
|
-hf HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive:Q4_K_M
|
||||||
${ctx_256k}
|
${ctx_256k}
|
||||||
${qwen35_think_args}
|
${qwen35_think_args}
|
||||||
@@ -178,7 +187,7 @@ models:
|
|||||||
|
|
||||||
"HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-nothink:Q4_K_M":
|
"HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-nothink:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive:Q4_K_M
|
-hf HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive:Q4_K_M
|
||||||
${ctx_256k}
|
${ctx_256k}
|
||||||
${qwen35_nothink_args}
|
${qwen35_nothink_args}
|
||||||
@@ -186,7 +195,7 @@ models:
|
|||||||
|
|
||||||
"unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Q4_K_M":
|
"unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Q4_K_M
|
-hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Q4_K_M
|
||||||
${ctx_256k}
|
${ctx_256k}
|
||||||
${qwen35_think_args}
|
${qwen35_think_args}
|
||||||
@@ -196,10 +205,29 @@ models:
|
|||||||
|
|
||||||
"unsloth/Qwen3.6-35B-A3B-MTP-GGUF-nothink:Q4_K_M":
|
"unsloth/Qwen3.6-35B-A3B-MTP-GGUF-nothink:Q4_K_M":
|
||||||
cmd: |
|
cmd: |
|
||||||
/app/llama-server
|
llama-server
|
||||||
-hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Q4_K_M
|
-hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Q4_K_M
|
||||||
${ctx_256k}
|
${ctx_256k}
|
||||||
${qwen35_nothink_args}
|
${qwen35_nothink_args}
|
||||||
--spec-type draft-mtp --spec-draft-n-max 1
|
--spec-type draft-mtp --spec-draft-n-max 1
|
||||||
--parallel 1
|
--parallel 1
|
||||||
${common_args}
|
${common_args}
|
||||||
|
|
||||||
|
# Image generation via stable-diffusion.cpp (sd-server)
|
||||||
|
# Models must be pre-downloaded to /root/.cache/sd/
|
||||||
|
# FLUX.1-dev: state-of-the-art open-weight text-to-image model by Black Forest Labs
|
||||||
|
# Download: huggingface-cli download lllyasviel/FLUX.1-dev-gguf flux1-dev-Q4_K_S.gguf --local-dir /root/.cache/sd
|
||||||
|
# Download VAE: huggingface-cli download black-forest-labs/FLUX.1-dev ae.safetensors --local-dir /root/.cache/sd
|
||||||
|
# Download text encoders: huggingface-cli download comfyanonymous/flux_text_encoders clip_l.safetensors t5xxl_fp16.safetensors --local-dir /root/.cache/sd
|
||||||
|
"flux1-dev:Q4_K_S":
|
||||||
|
checkEndpoint: "/"
|
||||||
|
cmd: |
|
||||||
|
sd-server
|
||||||
|
--listen-port ${PORT}
|
||||||
|
--diffusion-model /root/.cache/sd/flux1-dev-Q4_K_S.gguf
|
||||||
|
--vae /root/.cache/sd/ae.safetensors
|
||||||
|
--clip_l /root/.cache/sd/clip_l.safetensors
|
||||||
|
--t5xxl /root/.cache/sd/t5xxl_fp16.safetensors
|
||||||
|
--cfg-scale 1.0
|
||||||
|
--sampling-method euler
|
||||||
|
--steps 20
|
||||||
|
|||||||
@@ -18,10 +18,10 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: llama-swap
|
- name: llama-swap
|
||||||
image: ghcr.io/mostlygeek/llama-swap:v216-vulkan-b9191
|
image: ghcr.io/mostlygeek/llama-swap:unified-vulkan-2026-05-19
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
command:
|
command:
|
||||||
- /app/llama-swap
|
- llama-swap
|
||||||
args:
|
args:
|
||||||
- --config=/config/config.yaml
|
- --config=/config/config.yaml
|
||||||
- --watch-config
|
- --watch-config
|
||||||
|
|||||||
@@ -74,3 +74,16 @@ spec:
|
|||||||
value: "false"
|
value: "false"
|
||||||
- name: OAUTH_MERGE_ACCOUNTS_BY_EMAIL
|
- name: OAUTH_MERGE_ACCOUNTS_BY_EMAIL
|
||||||
value: "true"
|
value: "true"
|
||||||
|
# Image generation via llama-swap sd-server
|
||||||
|
- name: ENABLE_IMAGE_GENERATION
|
||||||
|
value: "true"
|
||||||
|
- name: IMAGE_GENERATION_ENGINE
|
||||||
|
value: "openai"
|
||||||
|
- name: IMAGES_OPENAI_API_BASE_URL
|
||||||
|
value: "http://llama.llama.svc.cluster.local:11434/v1"
|
||||||
|
- name: IMAGES_OPENAI_API_KEY
|
||||||
|
value: "ignored"
|
||||||
|
- name: IMAGE_GENERATION_MODEL
|
||||||
|
value: "flux1-dev:Q4_K_S"
|
||||||
|
- name: IMAGE_SIZE
|
||||||
|
value: "512x512"
|
||||||
|
|||||||
+1
-9
@@ -15,21 +15,13 @@
|
|||||||
{
|
{
|
||||||
"matchDatasources": ["docker"],
|
"matchDatasources": ["docker"],
|
||||||
"matchPackageNames": ["ghcr.io/mostlygeek/llama-swap"],
|
"matchPackageNames": ["ghcr.io/mostlygeek/llama-swap"],
|
||||||
"versioning": "regex:^v(?<major>[0-9]+)-vulkan-b(?<patch>[0-9]+)$"
|
"versioning": "regex:^unified-vulkan-(?<patch>[0-9]{4}[0-9]{2}[0-9]{2})$"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"matchUpdateTypes": ["patch"],
|
"matchUpdateTypes": ["patch"],
|
||||||
"automerge": true,
|
"automerge": true,
|
||||||
"automergeType": "pr",
|
"automergeType": "pr",
|
||||||
"platformAutomerge": true
|
"platformAutomerge": true
|
||||||
},
|
|
||||||
{
|
|
||||||
"matchDatasources": ["docker"],
|
|
||||||
"matchPackageNames": ["ghcr.io/mostlygeek/llama-swap"],
|
|
||||||
"matchUpdateTypes": ["minor"],
|
|
||||||
"automerge": true,
|
|
||||||
"automergeType": "pr",
|
|
||||||
"platformAutomerge": true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user