audio-processing, laravel-support, skript, readme
This commit is contained in:
1 parent
99517f483a
commit
2e2490c1bc
8 files changed
+527
-19
No files matched your search
+23
-11
@@ -5,7 +5,7 @@
|
||||
# ./scripts/start.sh --no-preload nur starten
|
||||
# ./scripts/start.sh --model glm-4.7-flash anderes Chat-Modell vorladen
|
||||
# ./scripts/start.sh --show-key API-Key im Klartext ausgeben
|
||||
# ./scripts/start.sh --pull Images vorher aktualisieren
|
||||
# ./scripts/start.sh --pull Basis-Images aktualisieren und neu bauen
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$(readlink -f "$0")")/.."
|
||||
@@ -88,8 +88,12 @@ free_gb=$(df -BG --output=avail models | tail -1 | tr -dc '0-9')
|
||||
|
||||
# ------------------------------------------------------------------- Start
|
||||
step "Starte Container"
|
||||
(( PULL )) && docker compose pull
|
||||
docker compose up -d --remove-orphans
|
||||
if (( PULL )); then
|
||||
docker compose pull --ignore-buildable
|
||||
docker compose build --pull
|
||||
fi
|
||||
# baut das llama-swap-Image (ROCm + whisper/sd-server), falls es noch fehlt
|
||||
docker compose up -d --build --remove-orphans
|
||||
|
||||
step "Warte auf Bereitschaft"
|
||||
for i in $(seq 1 60); do
|
||||
@@ -112,16 +116,24 @@ ok "Caddy bereit (Auth aktiv)"
|
||||
# ---------------------------------------------------------------- Preload
|
||||
if (( PRELOAD )); then
|
||||
step "Lade Modelle vor (erster Start lädt ggf. von Hugging Face herunter)"
|
||||
preload() { # $1 = Modell, $2 = Endpoint, $3 = JSON-Body
|
||||
local t0=$SECONDS code
|
||||
printf ' %-22s … ' "$1"
|
||||
code=$(curl -s -o /dev/null -m 3600 -w '%{http_code}' -H 'Content-Type: application/json' \
|
||||
"http://127.0.0.1:$BACKEND_PORT$2" -d "$3" || true)
|
||||
preload() { # $1 = Modell, $2 = Endpoint, Rest = curl-Argumente für den Body
|
||||
local m=$1 ep=$2 t0=$SECONDS code; shift 2
|
||||
printf ' %-22s … ' "$m"
|
||||
code=$(curl -s -o /dev/null -m 3600 -w '%{http_code}' "http://127.0.0.1:$BACKEND_PORT$ep" "$@" || true)
|
||||
if [[ "$code" == "200" ]]; then echo "${G}ok${N} ($((SECONDS - t0)) s)"; else echo "${R}HTTP $code${N}"; fi
|
||||
}
|
||||
preload qwen2.5-coder-1.5b /v1/completions '{"model":"qwen2.5-coder-1.5b","prompt":"x","max_tokens":1}'
|
||||
preload nomic-embed /v1/embeddings '{"model":"nomic-embed","input":"x"}'
|
||||
preload "$MODEL" /v1/chat/completions "{\"model\":\"$MODEL\",\"messages\":[{\"role\":\"user\",\"content\":\"hi\"}],\"max_tokens\":1}"
|
||||
json=(-H 'Content-Type: application/json' -d)
|
||||
preload qwen2.5-coder-1.5b /v1/completions "${json[@]}" '{"model":"qwen2.5-coder-1.5b","prompt":"x","max_tokens":1}'
|
||||
preload nomic-embed /v1/embeddings "${json[@]}" '{"model":"nomic-embed","input":"x"}'
|
||||
if [[ -f models/whisper/ggml-large-v3-turbo-q8_0.bin ]]; then
|
||||
wav=$(mktemp --suffix=.wav)
|
||||
python3 -c 'import wave,sys; w=wave.open(sys.argv[1],"wb"); w.setnchannels(1); w.setsampwidth(2); w.setframerate(16000); w.writeframes(b"\0\0"*16000)' "$wav"
|
||||
preload whisper /v1/audio/transcriptions -F model=whisper -F "file=@$wav"
|
||||
rm -f "$wav"
|
||||
else
|
||||
warn "Whisper-Modell fehlt (models/whisper/) – siehe README"
|
||||
fi
|
||||
preload "$MODEL" /v1/chat/completions "${json[@]}" "{\"model\":\"$MODEL\",\"messages\":[{\"role\":\"user\",\"content\":\"hi\"}],\"max_tokens\":1}"
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------ Status
|
||||
|
||||
Reference in new issue
Block a user