File size: 5,251 Bytes
c1bf102
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89ef4db
c1bf102
 
89ef4db
c1bf102
 
 
 
 
 
 
 
 
 
3c9c754
c1bf102
 
 
 
 
 
 
 
 
 
 
b5dcda3
c1bf102
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3c9c754
89ef4db
c1bf102
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
# shellcheck source=scripts/gojira-b-ssh-lib.sh
source "${SCRIPT_DIR}/gojira-b-ssh-lib.sh"
kaiju_gojira_b_init

MODEL_REMOTE="${KAIJU_MERGED_MODEL_REMOTE:-/home/richardecholsai5/kaiju-coder/models/Kaiju-Coder-Qwen3.6-27B-v1.8-merged}"
STAGING="${KAIJU_MERGED_METADATA_STAGING:-/tmp/kaiju-coder-7-merged-hf-metadata}"
APPLY="${KAIJU_MERGED_METADATA_APPLY:-0}"

usage() {
  cat <<'USAGE'
Prepare Hugging Face metadata files for the merged Kaiju Coder 7 model on Gojira-B.

Dry-run by default. Set KAIJU_MERGED_METADATA_APPLY=1 to sync metadata into the
remote merged-model directory. This script does not upload, create Hugging Face
repos, or read authentication tokens.

Environment:
  KAIJU_MERGED_MODEL_REMOTE       remote merged model dir on Gojira-B
  KAIJU_MERGED_METADATA_STAGING   local temp staging dir
  KAIJU_MERGED_METADATA_APPLY     0 dry-run, 1 rsync metadata to Gojira-B
  KAIJU_MERGED_METADATA_USE_SUDO  auto, 0, or 1; default auto for root-owned model dirs
USAGE
}

if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then
  usage
  exit 0
fi

rm -rf "${STAGING}"
mkdir -p "${STAGING}/assets" "${STAGING}/upstream/qwen3.6-27b"

cp "${ROOT}/release/MODEL_CARD_DRAFT.md" "${STAGING}/README.md"
cp "${ROOT}/release/assets/RMDWlogo.png" "${STAGING}/assets/RMDWlogo.png"
cp "${ROOT}/release/PUBLIC_TESTING_QUICKSTART.md" "${STAGING}/PUBLIC_TESTING_QUICKSTART.md"
cp "${ROOT}/release/LOCAL_TEST_INSTRUCTIONS.md" "${STAGING}/LOCAL_TEST_INSTRUCTIONS.md"
cp "${ROOT}/release/SERVING_BENCHMARKS.md" "${STAGING}/SERVING_BENCHMARKS.md"
cp "${ROOT}/release/EVAL_SCOREBOARD.md" "${STAGING}/EVAL_SCOREBOARD.md"
cp "${ROOT}/release/DATA_PROVENANCE_DRAFT.md" "${STAGING}/DATA_PROVENANCE_DRAFT.md"
cp "${ROOT}/release/SOURCE_INVENTORY.md" "${STAGING}/SOURCE_INVENTORY.md"
cp "${ROOT}/release/UPSTREAM_LICENSE_CHECK.md" "${STAGING}/UPSTREAM_LICENSE_CHECK.md"
cp "${ROOT}/release/PAID_API_READINESS.md" "${STAGING}/PAID_API_READINESS.md"
cp "${ROOT}/release/FINAL_RELEASE_REPORT.md" "${STAGING}/FINAL_RELEASE_REPORT.md"
cp "${ROOT}/release/GOAL_COMPLETION_AUDIT.md" "${STAGING}/GOAL_COMPLETION_AUDIT.md"
cp "${ROOT}/release/HF_UPLOAD_EVIDENCE.md" "${STAGING}/HF_UPLOAD_EVIDENCE.md"
cp "${ROOT}/release/upstream/qwen3.6-27b/LICENSE" "${STAGING}/upstream/qwen3.6-27b/LICENSE"

cat > "${STAGING}/MERGED_MODEL_RELEASE_MANIFEST.json" <<EOF
{
  "product": "Kaiju Coder 7",
  "model_id": "kaiju-coder-7",
  "remote_model_dir": "${MODEL_REMOTE}",
  "metadata_status": "prepared_for_huggingface_review",
  "notes": [
    "Local metadata sync only; no Hugging Face upload performed.",
    "Qwen attribution belongs in README/provenance/license notes, not the product model id.",
    "Public paid API preflight evidence has passed; real customer charging still requires the deliberate Stripe live-mode switch."
  ]
}
EOF

python3 - <<PY
from pathlib import Path
root = Path("${STAGING}")
for path in sorted(p for p in root.rglob("*") if p.is_file()):
    print(path.relative_to(root))
PY

kaiju_gojira_b_ssh "
  set -euo pipefail
  test -d '${MODEL_REMOTE}' || { echo 'Missing merged model: ${MODEL_REMOTE}' >&2; exit 2; }
  test -f '${MODEL_REMOTE}/config.json' || { echo 'Missing config.json in ${MODEL_REMOTE}' >&2; exit 2; }
  shard_count=\$(find '${MODEL_REMOTE}' -maxdepth 1 -name '*.safetensors' | wc -l | tr -d ' ')
  if [[ \"\${shard_count}\" -lt 1 ]]; then
    echo 'No safetensors shards found in ${MODEL_REMOTE}' >&2
    exit 2
  fi
  echo 'Remote merged model present: ${MODEL_REMOTE}'
  echo \"Safetensors shards: \${shard_count}\"
"

if [[ "${APPLY}" != "1" ]]; then
  echo
  echo "Dry run. Set KAIJU_MERGED_METADATA_APPLY=1 to sync metadata to Gojira-B."
  echo "Metadata staging: ${STAGING}"
  echo "Remote target: ${MODEL_REMOTE}"
  exit 0
fi

rsync_args=(-az)
case "${KAIJU_MERGED_METADATA_USE_SUDO:-auto}" in
  auto)
    if ! kaiju_gojira_b_ssh "test -w '${MODEL_REMOTE}'"; then
      kaiju_gojira_b_ssh "sudo -n true" >/dev/null
      rsync_args+=(--rsync-path="sudo -n rsync")
      echo "Remote model directory is not writable by SSH user; using sudo rsync."
    fi
    ;;
  1)
    kaiju_gojira_b_ssh "sudo -n true" >/dev/null
    rsync_args+=(--rsync-path="sudo -n rsync")
    echo "Using sudo rsync as requested."
    ;;
  0)
    ;;
  *)
    echo "KAIJU_MERGED_METADATA_USE_SUDO must be auto, 0, or 1" >&2
    exit 2
    ;;
esac

kaiju_gojira_b_rsync "${rsync_args[@]}" "${STAGING}/" "${KAIJU_GOJIRA_B_DEST}:${MODEL_REMOTE}/"

kaiju_gojira_b_ssh "
  set -euo pipefail
  for required in \
    README.md \
    PUBLIC_TESTING_QUICKSTART.md \
    LOCAL_TEST_INSTRUCTIONS.md \
    SERVING_BENCHMARKS.md \
    EVAL_SCOREBOARD.md \
    DATA_PROVENANCE_DRAFT.md \
    SOURCE_INVENTORY.md \
    UPSTREAM_LICENSE_CHECK.md \
    PAID_API_READINESS.md \
    FINAL_RELEASE_REPORT.md \
    GOAL_COMPLETION_AUDIT.md \
    HF_UPLOAD_EVIDENCE.md \
    assets/RMDWlogo.png \
    MERGED_MODEL_RELEASE_MANIFEST.json \
    upstream/qwen3.6-27b/LICENSE; do
    test -f '${MODEL_REMOTE}/'\${required} || { echo \"Missing synced metadata: \${required}\" >&2; exit 2; }
  done
  echo 'Merged model metadata synced and verified.'
"