diff --git a/bin/llm-runner b/bin/llm-runner index ed7d61c..d675e14 100755 --- a/bin/llm-runner +++ b/bin/llm-runner @@ -84,14 +84,8 @@ cmd_stop() { pkill -f "llama-server" 2>/dev/null || true log_success "All llama-server processes terminated." else - local pid - pid=$(lsof -ti :"$target" 2>/dev/null || fuser "$target/tcp" 2>/dev/null || true) - if [ -n "$pid" ]; then - kill "$pid" 2>/dev/null || true - log_success "Killed server on port ${target} (PID: ${pid})." - else - log_warn "No active server found on port ${target}." - fi + fuser -k -9 "$target/tcp" 2>/dev/null || true + log_success "Killed server on port ${target}." fi } @@ -122,12 +116,10 @@ launch_instance() { exit 1 fi - # Check if port is already in use - local existing_pid - existing_pid=$(lsof -ti :"$port" 2>/dev/null || fuser "$port/tcp" 2>/dev/null || true) - if [ -n "$existing_pid" ]; then - log_warn "Port ${port} is already in use by PID ${existing_pid}. Terminating existing process..." - kill -9 "$existing_pid" 2>/dev/null || true + # Ensure target port is free + if fuser "$port/tcp" >/dev/null 2>&1; then + log_warn "Port ${port} is in use. Stopping existing process on port ${port}..." + fuser -k -9 "$port/tcp" 2>/dev/null || true sleep 1 fi @@ -189,6 +181,8 @@ launch_instance() { # ------------------------------------------------------------------------------ cmd_cluster() { log_info "Starting Multi-Agent Cluster (SuperQwen 27B + 2x Qwen 4B)..." + pkill -f "llama-server" 2>/dev/null || true + sleep 1 # Trap to gracefully stop all background instances on Ctrl+C cleanup_cluster() { @@ -245,6 +239,8 @@ cmd_cluster() { cmd_muse() { log_info "Starting Muse-Glimmer 30B Solo Server (Max Context: 128K)..." + pkill -f "llama-server" 2>/dev/null || true + sleep 1 local model="${MODEL:-${SCRIPT_DIR}/models/muse-glimmer/Muse-Glimmer-30B-UD-Q4_K_XL.gguf}" local mmproj="${MMPROJ:-${SCRIPT_DIR}/models/muse-glimmer/mmproj-Muse-Glimmer-30B-Q8_0.gguf}" if [ "${mmproj}" = "none" ]; then mmproj=""; fi @@ -263,6 +259,8 @@ cmd_muse() { cmd_superqwen() { log_info "Starting SuperQwen 3.8 27B Solo Server (Max Context: 256K)..." + pkill -f "llama-server" 2>/dev/null || true + sleep 1 local model="${MODEL:-${SCRIPT_DIR}/models/Qwen3.8/SuperQwen3.8-27b-abliterated-Q4_K_M.gguf}" if [ ! -f "${model}" ] && [ -f "${SCRIPT_DIR}/models/Qwen3.8/Qwen3.8-27B-UD-Q4_K_XL.gguf" ]; then model="${SCRIPT_DIR}/models/Qwen3.8/Qwen3.8-27B-UD-Q4_K_XL.gguf" @@ -284,6 +282,8 @@ cmd_superqwen() { cmd_qwen4b() { log_info "Starting Qwen 3.5 4B Solo Server..." + pkill -f "llama-server" 2>/dev/null || true + sleep 1 local model="${MODEL:-${SCRIPT_DIR}/models/Qwen3.5/Qwen3.5-4B-Q5_K_M.gguf}" local mmproj="${MMPROJ:-${SCRIPT_DIR}/models/Qwen3.5/mmproj-BF16.gguf}" if [ "${mmproj}" = "none" ]; then mmproj=""; fi @@ -302,6 +302,8 @@ cmd_qwen4b() { cmd_custom() { log_info "Starting Custom Server Instance..." + pkill -f "llama-server" 2>/dev/null || true + sleep 1 local model="${MODEL:-}" if [ -z "${model}" ] || [ ! -f "${model}" ]; then log_error "No valid MODEL specified! Pass MODEL=/path/to/model.gguf"