#!/usr/bin/env bash
#
# llama-agent — быстрый запуск llama-server с --agent (локальный ИИ-ассистент).
#
# Использование (можно из любой директории):
#   llama-agent                                # модель и порт по умолчанию
#   llama-agent /path/to/other-model.gguf      # другая модель
#   llama-agent -c8                            # контекст 8192
#   llama-agent -c16                           # контекст 16384
#   llama-agent -c32                           # контекст 32768 (значения по умолчанию)
#   llama-agent --extra-args ...               # остальные аргументы с «-»
#                                              # передаются в llama-server как есть
#   llama-agent --version
#
# Переменные окружения:
#   MODEL_PATH — путь к .gguf (если модель не передана аргументом)
#   PORT       — порт (default 8080)
#
set -euo pipefail

# Каталог сборки llama.cpp (где лежит llama-server):
# разбираем символические ссылки, чтобы ярлык из ~/.local/bin
# тоже находил бинарник в каталоге сборки
SCRIPT_DIR="$(cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" && pwd)"

# Значения по умолчанию — ровно как в вашей команде запуска
DEFAULT_MODEL="/mnt/D/Models/prism-ml/Ternary-Bonsai-2-27B-gguf/Ternary-Bonsai-2-27B-PTQ1_0.gguf"
MODEL_PATH="${MODEL_PATH:-$DEFAULT_MODEL}"
HOST="0.0.0.0"
PORT="${PORT:-8080}"
CONTEXT=32768
NGC=99
NP=1
CACHE_K=q4_0
CACHE_V=q4_0

# Разбор аргументов:
#   -c8  — контекст 8192
#   -c16 — контекст 16384
#   -c32 — контекст 32768
#   остальные аргументы с «-» идут в llama-server как есть,
#   а аргумент без «-» — путь к модели
EXTRA_ARGS=()
for arg in "$@"; do
    case "$arg" in
        -c8)  CONTEXT=8192 ;;
        -c16) CONTEXT=16384 ;;
        -c32) CONTEXT=32768 ;;
        -*)   EXTRA_ARGS+=("$arg") ;;
        *)    MODEL_PATH="$arg" ;;
    esac
done

# Бэканф: проверка, что модель на месте
if [[ ! -f "$MODEL_PATH" ]]; then
    echo "Ошибка: модель не найдена: $MODEL_PATH" >&2
    echo "Запуск с явным путём:  llama-agent /path/to/model.gguf" >&2
    exit 1
fi

# Стартуем из каталога сборки, чтобы бинарники/библиотеки резолвились
cd "$SCRIPT_DIR"

exec ./llama-server \
    -m "$MODEL_PATH" \
    -ngl "$NGC" \
    -np "$NP" \
    -c "$CONTEXT" \
    -fa on \
    --cache-type-k "$CACHE_K" \
    --cache-type-v "$CACHE_V" \
    --agent \
    --host "$HOST" \
    --port "$PORT" \
    "${EXTRA_ARGS[@]+${EXTRA_ARGS[@]}}"
