#!/usr/bin/env bash
# Документальный профиль. Редакцией на GPU не запускался.
set -euo pipefail
HERE="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
SLUG="nemotron"
LOCK="${LOCK_DIR:-$HERE/locks}/$SLUG.json"
ROOT_MODELS="${ROOT_MODELS:-/srv/ai/models}"
test -f "$LOCK" || { echo "Сначала prepare.py $SLUG"; exit 1; }
IMAGE="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["image_digest"])' "$LOCK")"
REVISION="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["revision"])' "$LOCK")"
MODEL_DIR="$ROOT_MODELS/$SLUG/$REVISION"
test -f "$MODEL_DIR/config.json"
test -f "$MODEL_DIR/.telecobra-download-complete.json" || { echo "Загрузка не завершена: повторите prepare.py $SLUG"; exit 1; }
EXTRA=()
DOCKER_EXTRA=()
exec docker run --rm --name "tc-$SLUG" --gpus all \
  --network host --ipc host --ulimit memlock=-1 --ulimit stack=67108864 \
  -v "$MODEL_DIR:/model:ro" \
  -e VLLM_ENGINE_READY_TIMEOUT_S=7200 \
  -e VLLM_WORKER_MULTIPROC_METHOD=spawn \
  "${DOCKER_EXTRA[@]}" \
  --entrypoint vllm "$IMAGE" serve /model \
  --host 127.0.0.1 \
  --port 8000 \
  --served-model-name telecobra-model \
  --tensor-parallel-size 8 \
  --max-model-len 32768 \
  --max-num-seqs 4 \
  --gpu-memory-utilization 0.90 \
  --dtype bfloat16 \
  --enable-expert-parallel \
  --reasoning-parser nemotron_v3 \
  --tool-call-parser qwen3_coder \
  --enable-auto-tool-choice \
  --mamba-ssm-cache-dtype float16 \
  --mamba-backend flashinfer \
  --enable-mamba-cache-stochastic-rounding \
  --mamba-cache-philox-rounds 5 \
  --trust-remote-code "${EXTRA[@]}"
