#!/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 NAMESPACE="${KAIJU_HF_NAMESPACE:-RMDWLLC}" REPO_ID="${KAIJU_HF_MERGED_REPO:-${NAMESPACE}/kaiju-coder-7}" MODEL_REMOTE="${KAIJU_MERGED_MODEL_REMOTE:-/home/richardecholsai5/kaiju-coder/models/Kaiju-Coder-Qwen3.6-27B-v1.8-merged}" VISIBILITY="${KAIJU_HF_VISIBILITY:-private}" APPLY="${KAIJU_HF_UPLOAD_APPLY:-0}" usage() { cat <<'USAGE' Dry-run or upload the merged Kaiju Coder 7 model from Gojira-B to Hugging Face. This script is dry-run by default. Set KAIJU_HF_UPLOAD_APPLY=1 only after: - human review is complete - Hugging Face CLI is installed on Gojira-B - `hf auth whoami` on Gojira-B shows the intended account - upstream license/provenance docs have been reviewed Environment: KAIJU_HF_MERGED_REPO repo id, default RMDWLLC/kaiju-coder-7 KAIJU_HF_NAMESPACE Hugging Face namespace, default RMDWLLC KAIJU_MERGED_MODEL_REMOTE model dir on Gojira-B KAIJU_HF_VISIBILITY private or public, default private KAIJU_HF_UPLOAD_APPLY 0 dry-run, 1 execute USAGE } if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then usage exit 0 fi case "${VISIBILITY}" in private|public) ;; *) echo "KAIJU_HF_VISIBILITY must be private or public, got: ${VISIBILITY}" >&2; exit 2 ;; esac private_flag="" if [[ "${VISIBILITY}" == "private" ]]; then private_flag="--private" fi if [[ "${APPLY}" == "1" ]]; then review_args=(--mode public --require-merged-upload) if [[ "${VISIBILITY}" == "public" ]]; then review_args+=(--require-public-visibility) fi python3 "${ROOT}/scripts/check_human_release_review.py" "${review_args[@]}" fi kaiju_gojira_b_ssh " set -euo pipefail export PATH=\"\$HOME/.local/bin:\$PATH\" 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; } test -f '${MODEL_REMOTE}/tokenizer_config.json' || { echo 'Missing tokenizer_config.json in ${MODEL_REMOTE}' >&2; exit 2; } 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 merged-model metadata: \${required}\" >&2 echo 'Run: KAIJU_MERGED_METADATA_APPLY=1 bash scripts/prepare_hf_merged_model_metadata.sh' >&2 exit 2 } done 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 size=\$(du -sh '${MODEL_REMOTE}' | awk '{print \$1}') echo 'Merged model: ${MODEL_REMOTE}' echo \"Size: \${size}; safetensors shards: \${shard_count}\" echo 'Metadata: present' echo 'Repo: ${REPO_ID}' echo 'Visibility: ${VISIBILITY}' echo echo 'Commands:' echo 'hf repos create ${REPO_ID} --type model ${private_flag} --exist-ok' echo 'hf upload-large-folder ${REPO_ID} ${MODEL_REMOTE} --type model ${private_flag}' if [[ '${APPLY}' != '1' ]]; then echo echo 'Dry run. Set KAIJU_HF_UPLOAD_APPLY=1 to execute.' exit 0 fi if ! command -v hf >/dev/null 2>&1; then echo 'Missing Hugging Face CLI on Gojira-B: hf' >&2 echo 'Install: curl -LsSf https://hf.co/cli/install.sh | bash -s' >&2 exit 2 fi hf auth whoami >/dev/null hf repos create '${REPO_ID}' --type model ${private_flag} --exist-ok hf upload-large-folder '${REPO_ID}' '${MODEL_REMOTE}' --type model ${private_flag} "