2026-09-30 11:06:05 +08:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
vllm_real="$(dirname "$(readlink -f "$0")")/vllm_real"
|
2026-09-30 12:22:41 +08:00
|
|
|
python_bin="${MODELHUB_COMPAT_PYTHON:-python3}"
|
2026-09-30 11:06:05 +08:00
|
|
|
|
|
|
|
|
if [[ "${1:-}" != "serve" || -z "${2:-}" ]]; then
|
|
|
|
|
exec "$vllm_real" "$@"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
model_dir="$2"
|
|
|
|
|
shift 2
|
2026-09-30 12:16:08 +08:00
|
|
|
args=("$@")
|
|
|
|
|
tokenizer_dir=""
|
|
|
|
|
for ((i=0; i<${#args[@]}; i++)); do
|
|
|
|
|
if [[ "${args[i]}" == "--tokenizer" && $((i+1)) -lt ${#args[@]} ]]; then
|
|
|
|
|
tokenizer_dir="${args[i+1]}"
|
|
|
|
|
break
|
|
|
|
|
elif [[ "${args[i]}" == --tokenizer=* ]]; then
|
|
|
|
|
tokenizer_dir="${args[i]#--tokenizer=}"
|
|
|
|
|
break
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
if [[ -n "$tokenizer_dir" && -d "$tokenizer_dir" ]]; then
|
2026-09-30 12:22:41 +08:00
|
|
|
prepared="$("$python_bin" /opt/modelhub/engine_compat.py "$model_dir" "$tokenizer_dir")"
|
2026-09-30 12:16:08 +08:00
|
|
|
else
|
2026-09-30 12:22:41 +08:00
|
|
|
prepared="$("$python_bin" /opt/modelhub/engine_compat.py "$model_dir")"
|
2026-09-30 12:16:08 +08:00
|
|
|
tokenizer_dir=""
|
|
|
|
|
fi
|
2026-09-30 11:06:05 +08:00
|
|
|
if [[ -z "$prepared" ]]; then
|
2026-09-30 12:16:08 +08:00
|
|
|
exec "$vllm_real" serve "$model_dir" "${args[@]}"
|
2026-09-30 11:06:05 +08:00
|
|
|
fi
|
|
|
|
|
|
2026-09-30 12:16:08 +08:00
|
|
|
effective_model="$prepared"
|
|
|
|
|
if [[ -n "$tokenizer_dir" && "$(readlink -f "$tokenizer_dir")" != "$(readlink -f "$model_dir")" ]]; then
|
|
|
|
|
# A vendor entrypoint's --tokenizer points at a copied tokenizer tree.
|
|
|
|
|
# Keep model weights at the original path; redirect only that tokenizer.
|
|
|
|
|
effective_model="$model_dir"
|
|
|
|
|
fi
|
2026-09-30 11:06:05 +08:00
|
|
|
for ((i=0; i<${#args[@]}; i++)); do
|
2026-09-30 12:16:08 +08:00
|
|
|
if [[ "${args[i]}" == "--tokenizer" && $((i+1)) -lt ${#args[@]} && "${args[i+1]}" == "$tokenizer_dir" ]]; then
|
2026-09-30 11:06:05 +08:00
|
|
|
args[i+1]="$prepared"
|
2026-09-30 12:16:08 +08:00
|
|
|
elif [[ "${args[i]}" == "--tokenizer=$tokenizer_dir" && -n "$tokenizer_dir" ]]; then
|
2026-09-30 11:06:05 +08:00
|
|
|
args[i]="--tokenizer=$prepared"
|
|
|
|
|
fi
|
|
|
|
|
done
|
2026-09-30 12:16:08 +08:00
|
|
|
exec "$vllm_real" serve "$effective_model" "${args[@]}"
|