#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" VENV_PYTHON="$ROOT_DIR/.venv/bin/python" PID_FILE="$ROOT_DIR/data/runtime/server.pid" LOG_FILE="$ROOT_DIR/data/runtime/server.log" HOST="${HOST:-127.0.0.1}" PORT="${PORT:-8000}" mkdir -p "$ROOT_DIR/data/runtime" export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}$ROOT_DIR/.venv/lib/python3.13/site-packages/llama_cpp/lib" export GGML_VULKAN=1 is_running() { if [[ -f "$PID_FILE" ]]; then local pid pid="$(cat "$PID_FILE")" if kill -0 "$pid" >/dev/null 2>&1; then return 0 fi fi return 1 } start_server() { if is_running; then echo "Server already running with PID $(cat "$PID_FILE")" exit 0 fi nohup "$VENV_PYTHON" -m uvicorn main:app --host "$HOST" --port "$PORT" >"$LOG_FILE" 2>&1 & echo $! >"$PID_FILE" echo "Started server on http://$HOST:$PORT with PID $(cat "$PID_FILE")" echo "Log: $LOG_FILE" } stop_server() { if ! is_running; then echo "Server is not running" rm -f "$PID_FILE" exit 0 fi local pid pid="$(cat "$PID_FILE")" kill "$pid" rm -f "$PID_FILE" echo "Stopped server PID $pid" } status_server() { if is_running; then echo "Server is running with PID $(cat "$PID_FILE") on http://$HOST:$PORT" else echo "Server is not running" fi } case "${1:-}" in start) start_server ;; stop) stop_server ;; restart) stop_server || true start_server ;; status) status_server ;; logs) touch "$LOG_FILE" tail -n 50 -f "$LOG_FILE" ;; *) echo "Usage: $0 {start|stop|restart|status|logs}" exit 1 ;; esac