CrispASR / start.sh
cstr's picture
Add CrispASR API key support
b044838 verified
#!/usr/bin/env bash
set -euo pipefail
ts() {
date -u +"%Y-%m-%dT%H:%M:%SZ"
}
log() {
echo "[$(ts)] hf-space: $*" >&2
}
SERVER_HOST="${CRISPASR_SERVER_HOST:-127.0.0.1}"
SERVER_PORT="${CRISPASR_SERVER_PORT:-8080}"
MODEL_PATH="${CRISPASR_MODEL:-/models/model.gguf}"
LANGUAGE="${CRISPASR_LANGUAGE:-en}"
BACKEND="${CRISPASR_BACKEND:-whisper}"
AUTO_DOWNLOAD="${CRISPASR_AUTO_DOWNLOAD:-1}"
CACHE_DIR="${CRISPASR_CACHE_DIR:-/cache}"
EXTRA_ARGS="${CRISPASR_EXTRA_ARGS:-}"
API_KEYS="${CRISPASR_API_KEYS:-}"
ensure_writable_dir() {
local dir="$1"
if [[ ! -d "$dir" ]]; then
if ! mkdir -p "$dir" 2>/dev/null; then
log "ERROR: could not create cache directory '$dir'"
exit 70
fi
fi
if [[ ! -w "$dir" ]]; then
log "ERROR: cache directory '$dir' is not writable by uid=$(id -u) gid=$(id -g)"
ls -ld "$dir" >&2 || true
log "If this is a bind mount, chown the host directory or set CRISPASR_CACHE_DIR to a writable path."
exit 70
fi
}
ensure_writable_dir "$CACHE_DIR"
declare -a cmd
cmd=(crispasr --server --host "$SERVER_HOST" --port "$SERVER_PORT" -l "$LANGUAGE" --cache-dir "$CACHE_DIR")
if [[ "$AUTO_DOWNLOAD" == "1" ]]; then
cmd+=(-m auto --auto-download)
else
cmd+=(-m "$MODEL_PATH")
fi
if [[ -n "$BACKEND" ]]; then
cmd+=(--backend "$BACKEND")
fi
if [[ -n "$API_KEYS" ]]; then
cmd+=(--api-keys "$API_KEYS")
fi
if [[ -n "$EXTRA_ARGS" ]]; then
eval "cmd+=($EXTRA_ARGS)"
fi
display_cmd=("${cmd[@]}")
if [[ -n "$API_KEYS" ]]; then
for i in "${!display_cmd[@]}"; do
if [[ "${display_cmd[$i]}" == "--api-keys" && $((i + 1)) -lt ${#display_cmd[@]} ]]; then
display_cmd[$((i + 1))]="(redacted)"
fi
done
fi
log "startup"
log "server_host=$SERVER_HOST server_port=$SERVER_PORT backend=$BACKEND language=$LANGUAGE auto_download=$AUTO_DOWNLOAD cache_dir=$CACHE_DIR"
if [[ "$AUTO_DOWNLOAD" == "1" ]]; then
log "model=auto"
else
log "model=$MODEL_PATH"
fi
if [[ -n "$EXTRA_ARGS" ]]; then
log "extra_args=$EXTRA_ARGS"
fi
if [[ -n "$API_KEYS" ]]; then
log "api_keys=enabled"
fi
log "launching crispasr server: ${display_cmd[*]}"
"${cmd[@]}" &
server_pid=$!
log "crispasr server pid=$server_pid"
cleanup() {
log "cleanup"
if kill -0 "$server_pid" 2>/dev/null; then
log "stopping crispasr server pid=$server_pid"
kill "$server_pid" 2>/dev/null || true
wait "$server_pid" 2>/dev/null || true
fi
}
trap cleanup EXIT INT TERM
log "launching gradio app"
python3 /space/app.py