#!/bin/bash # MiniLlama — Portable LLM Chat Launcher (Linux) # Erkennt automatisch alle .gguf-Modelle im models/-Ordner und zeigt ein Menü. # 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." echo " Lege GGUF-Dateien in das models/-Verzeichnis." exit 1 fi # ------------------------------------------------------------ # Menü anzeigen # ------------------------------------------------------------ echo "" echo "╔═══════════════════════════════════╗" echo "║ 🦙 MiniLlama — Modellauswahl ║" 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 "" # ------------------------------------------------------------ # Auswahl (Default bei Enter) # ------------------------------------------------------------ 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 # Default-Modell finden for i in "${!MODELS[@]}"; do if [[ "$(basename "${MODELS[$i]}")" == "$DEFAULT_MODEL" ]]; then SELECTION=$i break fi done if [ -z "$SELECTION" ]; then echo "❌ Default-Modell $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: $MODEL_NAME" echo "" # ------------------------------------------------------------ # llama-cli starten # ------------------------------------------------------------ exec ./bin/linux/llama-cli -m "$MODEL_PATH" -cnv