- MODELS.md: 8B vs 24B Vergleich, :wiki-Doku, Entscheidungsbaum
- README.md: 24B mit ⚠️ Manuell markiert (FILE:-Pattern unzuverlässig)
- SESSION_HANDOVER.md: Neue Session 14:30-18:00
- TEST_SCENARIO.md: Referenz-Testszenario
- crowdcode.js: 24B-Kompatibilität (flexible FILE:-Erkennung,
:wiki-Befehl, configurable Timeout/GPU/Context via ENV,
Streaming AbortController, Orphan-Codeblock-Detection)
82 lines
3 KiB
Bash
Executable file
82 lines
3 KiB
Bash
Executable file
#!/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
|