From 3f5ad507c2a02e56673efe8730829662f063244a Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 17 Oct 2026 21:02:16 -0700 Subject: [PATCH] frank-dragoon: fetch script for the native v2 abliterated checkpoint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Quat3rnion/halogen-qwen3.8-flash-next-v2-abliterated @main replaced the file on 2026-10-11: a complete HIP native-v2 conversion of orcarouter's pinned BF16 (66,687,678,432 B, sha256 b5bd925f), not the r1/r2 writer transplant the filename used to carry. The release publishes ONLY the main file, and its card states that the stock peonist n-gram/vision companions are NOT established as interchangeable (source-derived table would be 51,200,246,084 B against peonist's 51,200,246,144 B), so the script hardlinks the verified peonist trio into the new payload dir — a hardlink is a regular file, so the serve gate's no-symlink law holds and 47.7 GiB is not copied — and leaves the companion question to the engine's own verify/ppl/niah tools plus the boot ledger. --- scripts/download-frank-dragoon-v2abl.sh | 146 ++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100755 scripts/download-frank-dragoon-v2abl.sh diff --git a/scripts/download-frank-dragoon-v2abl.sh b/scripts/download-frank-dragoon-v2abl.sh new file mode 100755 index 0000000..4522ed4 --- /dev/null +++ b/scripts/download-frank-dragoon-v2abl.sh @@ -0,0 +1,146 @@ +#!/usr/bin/env bash +# download-frank-dragoon-v2abl.sh — fetch frank-dragoon's replacement payload: +# the CURRENT native-v2 abliterated checkpoint from +# Quat3rnion/halogen-qwen3.8-flash-next-v2-abliterated (the 2026-10-11 +# release: a complete HIP native-v2 conversion of orcarouter's pinned BF16 +# source, NOT the r1/r2 writer transplant this filename used to carry), and +# assemble the companions the engine needs beside it — the REQUIRED n-gram +# lookup table, the vision tower and the flat tokenizer. Public files, no +# token; per the fleet secret law none would ever touch argv. +# +# The fetch law, same as every sibling script: curl -f (an access error must +# not become a "successful" 153-byte artifact), exact byte count from the +# script's manifest, LFS sha256 verification, --verify-only to re-check an +# existing payload without downloading. +# +# COMPANION LAW (read this before shipping the new checkpoint): the current +# release publishes ONLY the main file. Its card states plainly that the +# interchangeability of the stock peonist companions with this native +# conversion "has NOT been established" — the source-derived n-gram would be +# 51,200,246,084 B while peonist's stock table is 51,200,246,144 B (60 B +# apart, so whole-file identity cannot be assumed), and the source-derived +# vision file is the same size as stock but equal size is not proof of equal +# content. The six tokenizer assets ARE published with matching blob +# identities. No source-matched n-gram/vision pair is published anywhere, so +# the only companions available are peonist's — which is also what the +# historical r2 recipe pinned, and what the engine's own table-mismatch +# check gets to judge at boot. This script therefore hardlinks the verified +# peonist trio (a hardlink is a REGULAR file, so the serve gate's +# no-symlink law holds and 47.7 GiB is not copied), verifies every byte, and +# leaves the verdict to the boot ledger plus the behavior probes. +# +# File manifest (Quat3rnion @main, verified against the Hub API on +# 2026-10-18): +# qwen38-flash-next-v2-abliterated.hgn 66,687,678,432 B sha256 +# b5bd925fa2b44343be4a2cd328cae6b57ce7ffa2fe2cc56281717377e5a1ce8a +# qwen38-flash-next-ngram.hgn 51,200,246,144 B sha256 +# 3450acada94e19aabad88bd49b45eb70304820949c2240fc178067b20ae5dffe +# (peonist @5cc17cea; REQUIRED — the engine reads it beside the +# checkpoint) +# qwen38-flash-next-vision.hgn 897,916,416 B sha256 +# d62e0ae553fe88afd3833733d4a4c669f34d20fd8dfce4b9610525bed2134b10 +# (peonist @e053f488; optional on the engine, enabled here for vision) +# tokenizer/* @e053f488 — the six assets the two repos share. +set -euo pipefail + +DEST="${FRANK_DRAGOON_MODEL_DIR:-$HOME/models/halogen-v2-abliterated}" +# Where the already-verified peonist companions live (the swift15-era dir). +DONOR="${FRANK_DRAGOON_DONOR_DIR:-$HOME/models/halogen-flashnext-v2}" +V2ABL="https://huggingface.co/Quat3rnion/halogen-qwen3.8-flash-next-v2-abliterated/resolve/main" +PEONIST="https://huggingface.co/peonist-ai/halogen-qwen3.8-flash-next/resolve" +NGRAM_REV="5cc17cea1a10b502b4a5db41d8d2b1a0f22dba26" +TOK_REV="e053f488b120b99ed2525e6ac99f68c51b3b6179" + +FILES=(qwen38-flash-next-v2-abliterated.hgn + qwen38-flash-next-ngram.hgn + qwen38-flash-next-vision.hgn + tokenizer/tokenizer.json + tokenizer/chat_template.jinja + tokenizer/generation_config.json + tokenizer/merges.txt + tokenizer/vocab.json + tokenizer/tokenizer_config.json) +SIZES=(66687678432 + 51200246144 + 897916416 + 12809320 + 8952 + 202 + 3353259 + 6722759 + 17928) +SHAS=(b5bd925fa2b44343be4a2cd328cae6b57ce7ffa2fe2cc56281717377e5a1ce8a + 3450acada94e19aabad88bd49b45eb70304820949c2240fc178067b20ae5dffe + d62e0ae553fe88afd3833733d4a4c669f34d20fd8dfce4b9610525bed2134b10 + 0997f410c57a1f4e53b09e4be8f4a172d90edd9564368fb0847030937229b9f3 + - - - - - -) + +# Fetch source per file: repo base + revision (first entry = V2ABL @main). +SRCS=("$V2ABL" + "$PEONIST/$NGRAM_REV" + "$PEONIST/$TOK_REV" + "$PEONIST/$TOK_REV" + "$PEONIST/$TOK_REV" + "$PEONIST/$TOK_REV" + "$PEONIST/$TOK_REV" + "$PEONIST/$TOK_REV" + "$PEONIST/$TOK_REV") + +VERIFY_ONLY=0 +[ "${1:-}" = "--verify-only" ] && VERIFY_ONLY=1 + +mkdir -p "$DEST" + +for i in "${!FILES[@]}"; do + f="${FILES[$i]}"; want="${SIZES[$i]}"; sha="${SHAS[$i]}"; base="${SRCS[$i]}" + path="$DEST/$f" + mkdir -p "$(dirname "$path")" + if [ "$VERIFY_ONLY" -eq 0 ] && [ ! -f "$path" ] && [ -f "$DONOR/$f" ]; then + # Companion reuse: a hardlink costs no disk and no copy, and stays a + # regular file for the serve gate. Only the sha256 below decides. + if [ "$(stat -c %s "$DONOR/$f")" = "$want" ]; then + ln "$DONOR/$f" "$path" + echo "LINK $f from $DONOR (hardlink, $want bytes)" + fi + fi + if [ "$VERIFY_ONLY" -eq 0 ]; then + # A file already at the published size skips the fetch entirely: + # resuming it would ask the CDN for a range past EOF (416 -> curl + # error under set -e), and re-pulling 62 GiB to prove a point is not + # what --verify-only is for. sha256 below still decides. + if [ -f "$path" ] && [ "$(stat -c %s "$path")" = "$want" ]; then + echo "HAVE $f ($want bytes) — skipping fetch" + else + echo "FETCH $f -> $path" + # HF answers /resolve/ with a 302 to the Xet CDN and curl DROPS + # the Range header across redirects — a naive -C - then + # "resumes" by pulling the ~1 KB redirect body. Resolve the + # effective URL first, then resume against the CDN, which + # honors Range. + url=$(curl -sfIL -o /dev/null -w '%{url_effective}' "$base/$f") \ + || { echo "cannot resolve $base/$f" >&2; exit 1; } + curl -fL --retry 5 -C - -o "$path" "$url" + fi + fi + [ -f "$path" ] || { echo "MISSING $path (run without --verify-only)" >&2; exit 1; } + if [ -L "$path" ]; then + echo "SYMLINK $path — the serve gate refuses symlinks; replace with a real file" >&2 + exit 1 + fi + got="$(stat -c %s "$path")" + [ "$got" = "$want" ] || { echo "SIZE $path: $got != $want" >&2; exit 1; } + echo "OK $f ($got bytes)" +done + +echo "byte counts match; verifying sha256 where the Hub publishes an LFS oid..." +for i in "${!FILES[@]}"; do + f="${FILES[$i]}"; sha="${SHAS[$i]}" + if [ "$sha" = "-" ]; then + echo "OK $f (plain git blob, size-checked)" + continue + fi + got="$(sha256sum "$DEST/$f" | cut -d' ' -f1)" + [ "$got" = "$sha" ] || { echo "SHA256 $f: $got != $sha" >&2; exit 1; } + echo "OK $f sha256" +done +echo "DOWNLOAD_DONE $DEST"