MiniLlama/start-server.sh

86 lines
3.1 KiB
Bash
Raw Normal View History

#!/bin/bash
# start-server.sh — MiniLlama als API-Server starten (für CrowdCode u.a.)
# Startet llama-server im Hintergrund auf http://127.0.0.1:8080
# Der Server läuft bis Ctrl+C oder das Terminal geschlossen wird.
# Default: LFM2-8B-A1B-UD-Q4_K_XL (Testsieger)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
# ------------------------------------------------------------
# Default-Modell (Testsieger: beste CPU-Performance + Qualität)
# ------------------------------------------------------------
DEFAULT_MODEL="LFM2-8B-A1B-UD-Q4_K_XL.gguf"
# ------------------------------------------------------------
# Modelle aus dem models/-Ordner lesen
# ------------------------------------------------------------
mapfile -t MODELS < <(find models/ -maxdepth 1 -name '*.gguf' -type f -o -type l | sort)
MODEL_COUNT="${#MODELS[@]}"
if [ "$MODEL_COUNT" -eq 0 ]; then
echo "❌ Keine .gguf-Modelle im models/-Ordner gefunden."
exit 1
fi
# ------------------------------------------------------------
# Modellauswahl
# ------------------------------------------------------------
echo ""
echo "╔═══════════════════════════════════════╗"
echo "║ 🦙 MiniLlama — API-Server starten ║"
echo "╚═══════════════════════════════════════╝"
echo ""
for i in "${!MODELS[@]}"; do
NAME=$(basename "${MODELS[$i]}")
SIZE=$(numfmt --to=iec --format='%.1f' "$(stat --printf='%s' -L "${MODELS[$i]}" 2>/dev/null)" 2>/dev/null || echo "?")
DEFAULT_MARKER=""
if [ "$NAME" = "$DEFAULT_MODEL" ]; then
DEFAULT_MARKER=" ← Standard"
fi
printf " %2d) %s (%s)%s\n" $((i + 1)) "$NAME" "$SIZE" "$DEFAULT_MARKER"
done
echo ""
SELECTION=""
while [ -z "$SELECTION" ]; do
read -rp "Auswahl [1-$MODEL_COUNT, Enter=$DEFAULT_MODEL, q=beenden]: " INPUT
if [ "$INPUT" = "q" ]; then exit 0; fi
if [ -z "$INPUT" ]; then
for i in "${!MODELS[@]}"; do
if [[ "$(basename "${MODELS[$i]}")" == "$DEFAULT_MODEL" ]]; then
SELECTION=$i
break
fi
done
if [ -z "$SELECTION" ]; then
echo "❌ Default $DEFAULT_MODEL nicht gefunden, wähle erstes."
SELECTION=0
fi
elif [[ "$INPUT" =~ ^[0-9]+$ ]] && [ "$INPUT" -ge 1 ] && [ "$INPUT" -le "$MODEL_COUNT" ]; then
SELECTION=$((INPUT - 1))
else
echo "❌ Bitte eine Zahl zwischen 1 und $MODEL_COUNT eingeben."
fi
done
MODEL_PATH="${MODELS[$SELECTION]}"
MODEL_NAME=$(basename "$MODEL_PATH")
echo ""
echo "🔵 Starte API-Server mit: $MODEL_NAME"
echo " Endpoint: http://127.0.0.1:8080/v1"
echo " (Ctrl+C zum Beenden)"
echo ""
# ------------------------------------------------------------
# llama-server starten (OpenAI-kompatibler API-Server)
# ------------------------------------------------------------
exec ./bin/linux/llama-server \
-m "$MODEL_PATH" \
--host 127.0.0.1 \
--port 8080 \
--ctx-size 4096 \
--n-gpu-layers 0