#!/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" }