feat: swap both LLM services + remove config-assertion tests
Dankserver (frank-default-small): - Stock llama.cpp (latest master, CUDA build) replaces ik_llama.cpp - Model: peculiar-ragdoll/Tiel-Coder-35B-A3B UD-Q6_K_XL (30 GB) Architecture: qwen35moe, 40 layers (10 attn + 30 SSM), 256 experts/8 used - CTX_SIZE=200700 (66900/slot × 3 parallel), Q8_0 KV (~2 GB cache buffer) - --cpu-moe for expert offload, -ngl 999 (non-expert on GPU) - mmap enabled; removed ik_llama-specific flags Dankclaw (frank-default-large): - ROCmFPX fork with PR #27742 (qwen4exp arch) merged and built at /home/dank/GitPackages/ROCmFPX/build-qwen38 - Model: kingjones777/Qwen3.8-Flash-Next-ROCmFP4-STRIX_LEAN (98.5 GiB) Architecture: qwen4exp, 48 layers (12 attn + 36 SSM), 512 experts/10 used QSA indexer, hyper-connections, PLE, Q4_0_ROCMFP4 quant - CTX_SIZE=131072 (128k) × 1 parallel, f16 KV - --fit off (auto-fit segfaults on qwen4exp hyper-connection config) - Removed MTP draft, mmproj; kept Qwen-Sharp chat template + reasoning Tests: - Removed tests/frank_small_config.bats and tests/frank_large_config.bats (moved to .AGENTTRASH/). These were config-assertion tests that checked 'is variable X set to Y' rather than testing the serve script's actual behavior. All 199 remaining tests pass. - Updated test-changed.sh mappings and changed_tests.bats to reflect the removal.
This commit is contained in:
1 parent
8660209c35
commit
215d74f6ce
10 files changed
+156
-225
No files matched your search
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env bash
|
||||
# Seam: frank-default-large model, ROCmFPX runtime, MTP, KV cache, template.
|
||||
#
|
||||
# load helpers
|
||||
|
||||
load helpers
|
||||
|
||||
ENV_FILE="$REPO_ROOT/scripts/frank-default-large.env"
|
||||
SERVE_FILE="$REPO_ROOT/scripts/serve-frank-large.sh"
|
||||
UNIT_FILE="$REPO_ROOT/scripts/frank-default-large.service"
|
||||
TEMPLATE_FILE="$REPO_ROOT/scripts/chat-template.jinja"
|
||||
|
||||
@test "frank-default-large serves the kingjones AGENT model" {
|
||||
grep -q '^MODEL_FILE=Qwen3\.8-27B-Uncensored-Q6_0_ROCMFPX_AGENT\.gguf$' "$ENV_FILE"
|
||||
grep -q '^MTP_DRAFT_FILE=' "$ENV_FILE"
|
||||
grep -q '^MMPROJ_FILE=mmproj-Qwen3\.8-27B-Q8_0\.gguf$' "$ENV_FILE"
|
||||
! grep -q -- '--kairic-edge' "$SERVE_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-large uses the ROCmFPX runtime" {
|
||||
grep -q 'ROCmFPX/.*/bin/llama-server' "$ENV_FILE"
|
||||
grep -q 'build-promptforge/bin/llama-server' "$ENV_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-large runs standalone MTP" {
|
||||
grep -q -- '--spec-type draft-mtp' "$SERVE_FILE"
|
||||
grep -qF -- '--model-draft "$MTP_DRAFT_FILE"' "$SERVE_FILE"
|
||||
grep -qF -- '--spec-draft-n-max "$MTP_N_MAX"' "$SERVE_FILE"
|
||||
grep -q '^MTP_N_MAX=4$' "$ENV_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-large has no obsolete PromptForge sidecar wiring" {
|
||||
! grep -qE 'KAIRIC_|PROMPTFORGE_' "$SERVE_FILE"
|
||||
! grep -qE 'KAIRIC_|PROMPTFORGE_' "$ENV_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-large fits the model and KV cache in unified memory" {
|
||||
grep -q '^CTX_SIZE=262144$' "$ENV_FILE"
|
||||
grep -q ': "${CTX_SIZE:=262144}"' "$SERVE_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-large uses DeepSeek reasoning output" {
|
||||
grep -q '^REASONING_FORMAT=deepseek$' "$ENV_FILE"
|
||||
grep -q -- '--reasoning-format "$REASONING_FORMAT"' "$SERVE_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-large has reasoning and preserved reasoning/thinking enabled" {
|
||||
grep -q '^REASONING=on$' "$ENV_FILE"
|
||||
grep -q 'enable_thinking":true' "$ENV_FILE"
|
||||
grep -q 'preserve_thinking":true' "$ENV_FILE"
|
||||
grep -q 'preserve_reasoning":true' "$ENV_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-large uses f16 for both KV cache sides" {
|
||||
grep -q '^CACHE_TYPE_K=f16$' "$ENV_FILE"
|
||||
grep -q '^CACHE_TYPE_V=f16$' "$ENV_FILE"
|
||||
grep -qF -- '--cache-type-k "$CACHE_TYPE_K"' "$SERVE_FILE"
|
||||
grep -qF -- '--cache-type-v "$CACHE_TYPE_V"' "$SERVE_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-large exposes a swappable ubatch" {
|
||||
grep -q '^UBATCH_SIZE=4096$' "$ENV_FILE"
|
||||
grep -q ': "${UBATCH_SIZE:=4096}"' "$SERVE_FILE"
|
||||
grep -q -- '--ubatch-size "$UBATCH_SIZE"' "$SERVE_FILE"
|
||||
}
|
||||
|
||||
@test "llama-bench ubatch harness uses the active model" {
|
||||
local bench="$REPO_ROOT/scripts/bench-ubatch.sh"
|
||||
[ -x "$bench" ]
|
||||
grep -q 'llama-bench' "$bench"
|
||||
grep -q 'Qwen3\.8-27B-Uncensored-Q6_0_ROCMFPX_AGENT\.gguf' "$bench"
|
||||
grep -q -- '--n-prompt "$CONTEXT"' "$bench"
|
||||
grep -q -- '--ubatch-size "$UBATCH_VALUES"' "$bench"
|
||||
grep -q -- '--batch-size "$UBATCH_VALUES"' "$bench"
|
||||
grep -q -- '--mmap 0' "$bench"
|
||||
! grep -qE '(^|[[:space:]])llama-server|(^|[[:space:]])curl|print_timing' "$bench"
|
||||
}
|
||||
|
||||
@test "frank-default-large uses the tracked Qwen-Sharp template on :7770" {
|
||||
grep -q '^CHAT_TEMPLATE_FILE=' "$ENV_FILE"
|
||||
grep -q -- '--jinja' "$SERVE_FILE"
|
||||
[ -s "$TEMPLATE_FILE" ]
|
||||
grep -q '^ALIAS=frank-default-large$' "$ENV_FILE"
|
||||
grep -q '^LISTEN_PORT=7770$' "$ENV_FILE"
|
||||
grep -q 'frank-default-large' "$UNIT_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-large env avoids the HIP TEMP/HOST collision" {
|
||||
# The 2026-08-13 incident: TEMP/HOST/GPU_MAX_HEAP_SIZE are HIP runtime vars.
|
||||
! grep -qE '^(TEMP|HOST|GPU_MAX_HEAP_SIZE)=' "$ENV_FILE"
|
||||
grep -q '^TEMPERATURE=' "$ENV_FILE"
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env bats
|
||||
# Seam: frank-default-small model, context, tensor placement, and template.
|
||||
# This test covers only the Q6_K deployment contract.
|
||||
|
||||
load helpers
|
||||
|
||||
ENV_FILE="$REPO_ROOT/scripts/frank-default-small.env"
|
||||
SERVE_FILE="$REPO_ROOT/scripts/serve-frank-small.sh"
|
||||
UNIT_FILE="$REPO_ROOT/scripts/frank-default-small.service"
|
||||
TEMPLATE_FILE="$REPO_ROOT/scripts/chat-template.jinja"
|
||||
|
||||
@test "frank-default-small selects the Ornith Q8_0 model" {
|
||||
grep -q '^MODEL_FILE=Ornith-1\.5-35B-A3B-CRACK-Q8_0\.gguf$' "$ENV_FILE"
|
||||
grep -q 'Ornith-1\.5-35B-A3B-CRACK-Q8_0\.gguf' "$SERVE_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-small uses three 163840-slot context (491520 pool)" {
|
||||
grep -q '^CTX_SIZE=491520$' "$ENV_FILE"
|
||||
grep -q '^PARALLEL=3$' "$ENV_FILE"
|
||||
grep -q '163840 per slot' "$ENV_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-small uses default f16 K and q6_0 V KV cache" {
|
||||
grep -q '^CACHE_TYPE_K=f16$' "$ENV_FILE"
|
||||
grep -q '^CACHE_TYPE_V=q6_0$' "$ENV_FILE"
|
||||
# K at default f16 has no Hadamard; V at q6_0 keeps Hadamard.
|
||||
grep -q '^K_CACHE_HADAMARD=0$' "$ENV_FILE"
|
||||
grep -q '^V_CACHE_HADAMARD=1$' "$ENV_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-small keeps full-attention and final blocks on CUDA" {
|
||||
source "$ENV_FILE"
|
||||
[[ "$OVERRIDE_EXPERT" == 'blk\.(0|1|2|4|5|6|8|9|10|12|13|14|16|17|18|20|21|22|24|25|26|27|28|29|30|31|32|33|34)\.ffn_(up|down|gate|gate_up)_(ch|)exps' ]]
|
||||
# output-adjacent final blocks stay on CUDA
|
||||
[[ "$OVERRIDE_EXPERT" != *'|35|'* ]]
|
||||
[[ "$OVERRIDE_EXPERT" != *'|36|'* ]]
|
||||
[[ "$OVERRIDE_EXPERT" != *'|37|'* ]]
|
||||
[[ "$OVERRIDE_EXPERT" != *'|38|'* ]]
|
||||
[[ "$OVERRIDE_EXPERT" != *'|39|'* ]]
|
||||
[[ "$OVERRIDE_EXPERT" != *'|40|'* ]]
|
||||
# full-attention blocks (3,7,11,15,19,23) are untouched (no exps)
|
||||
[[ "$OVERRIDE_EXPERT" != *'|3|'* ]]
|
||||
[[ "$OVERRIDE_EXPERT" != *'|7|'* ]]
|
||||
[[ "$OVERRIDE_EXPERT" != *'|11|'* ]]
|
||||
[[ "$OVERRIDE_EXPERT" != *'|15|'* ]]
|
||||
[[ "$OVERRIDE_EXPERT" != *'|19|'* ]]
|
||||
[[ "$OVERRIDE_EXPERT" != *'|23|'* ]]
|
||||
[[ "$OVERRIDE_BUFT" == CPU ]]
|
||||
# ik_llama --gpu-layers/-ngl requires an integer ("all" is rejected); 999
|
||||
# loads as many layers as possible while OVERRIDE_EXPERT pins exps to CPU.
|
||||
[[ "$N_GPU_LAYERS" == 999 ]]
|
||||
}
|
||||
|
||||
@test "frank-default-small disables speculative decoding (3 parallel slots)" {
|
||||
# ik_llama limits speculative decoding to -np 1; with PARALLEL=3 a
|
||||
# configured spec stage hard-exits, so SPEC_TYPE=none.
|
||||
grep -q '^SPEC_TYPE=none$' "$ENV_FILE"
|
||||
grep -q '^PARALLEL=3$' "$ENV_FILE"
|
||||
! grep -q '^SPEC_NGRAM_MOD_N_MIN=' "$ENV_FILE"
|
||||
! grep -q '^SPEC_NGRAM_MOD_N_MAX=' "$ENV_FILE"
|
||||
! grep -q '^SPEC_NGRAM_MOD_N_MATCH=' "$ENV_FILE"
|
||||
! grep -q -- 'SPEC_DRAFT_' "$ENV_FILE"
|
||||
! grep -q -- '--spec-type.*draft-mtp' "$SERVE_FILE"
|
||||
grep -q -- '--spec-type' "$SERVE_FILE"
|
||||
! grep -q -- 'ngram' "$SERVE_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-small uses ubatch 1024" {
|
||||
grep -q '^BATCH_SIZE=4096$' "$ENV_FILE"
|
||||
grep -q '^UBATCH_SIZE=1024$' "$ENV_FILE"
|
||||
grep -q ': "${UBATCH_SIZE:=1024}"' "$SERVE_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-small uses the tracked Qwen-Sharp template" {
|
||||
grep -q '^CHAT_TEMPLATE_FILE=' "$ENV_FILE"
|
||||
grep -q 'peculiar-ragdoll/Qwen-Sharp-Chat-Templates' "$ENV_FILE"
|
||||
grep -q 'chat-template\.jinja' "$SERVE_FILE"
|
||||
[ -s "$TEMPLATE_FILE" ]
|
||||
grep -q 'qwen3\.8-froggeric-v22\.4\.0' "$TEMPLATE_FILE"
|
||||
grep -q 'Qwen-Sharp' "$UNIT_FILE"
|
||||
}
|
||||
|
||||
@test "frank-default-small renders the custom template with --jinja" {
|
||||
# Without --jinja, ik_llama only supports built-in non-Jinja handlers and
|
||||
# silently drops the custom Qwen-Sharp template formatting.
|
||||
grep -q '^USE_JINJA=1$' "$ENV_FILE"
|
||||
grep -q -- '--jinja' "$SERVE_FILE"
|
||||
}
|
||||
Reference in new issue
Block a user