@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
title Llama.cpp Configurable Launcher
REM =========================================================
REM GLOBAL DEFAULTS
REM =========================================================
set "BASE=%~dp0"
set "MODELS_DIR=%BASE%models"
set "EXE_NAME=llama-server.exe"
REM --- Browser Settings ---
set BROWSER_DELAY=0
set AUTO_OPEN_BROWSER=1
REM --- Hardware Settings (Global) ---
set PORT=8080
set HOST=127.0.0.1
set "GPU_LAYERS=999"
set "THREADS=8"
set "PARALLEL_SLOTS=1"
REM --- Model Keywords ---
set "KEYWORDS=NSFW Uncensored Amoral Dark Fallen Rivermind Snowpiercer Abyss Erebus Lewd"
REM =========================================================
REM SYSTEM STATS
REM =========================================================
:GET_STATS
set "CPU_USAGE=0"
set "RAM_INFO=0/0"
set "GPU_NAME=N/A"
set "GPU_INFO=0/0"
set "GPU_LOAD=0"
set "DRIVER_VER=N/A"
set "CUDA_VER=N/A"
set "PYTHON_VER=N/A"
set "LLAMA_VER=N/A"
REM --- Hardware ---
for /f "skip=1" %%p in ('wmic cpu get loadpercentage') do if not defined CPU_LOAD set "CPU_LOAD=%%p"
for /f "skip=1" %%p in ('wmic os get FreePhysicalMemory') do if not defined RAM_FREE set "RAM_FREE=%%p"
for /f "skip=1" %%p in ('wmic os get TotalVisibleMemorySize') do if not defined RAM_TOTAL set "RAM_TOTAL=%%p"
set /a RAM_TOTAL_GB=%RAM_TOTAL%/1024/1024
set /a RAM_USED_GB=(%RAM_TOTAL% - %RAM_FREE%)/1024/1024
set "RAM_INFO=%RAM_USED_GB%GB / %RAM_TOTAL_GB%GB"
nvidia-smi --query-gpu=name,utilization.gpu,memory.used,memory.total,driver_version --format=csv,noheader,nounits > "%BASE%gpu.tmp" 2>nul
if %errorlevel%==0 (
for /f "tokens=1,2,3,4,5 delims=," %%a in ('type "%BASE%gpu.tmp"') do (
set "GPU_NAME=%%a"
set "GPU_LOAD=%%b"
set "GPU_INFO=%%cMB / %%dMB"
set "DRIVER_VER=%%e"
)
del "%BASE%gpu.tmp"
nvidia-smi | findstr /C:"CUDA Version" > "%BASE%cuda.tmp"
set /p CUDA_RAW=<"%BASE%cuda.tmp"
for /f "tokens=9" %%x in ("!CUDA_RAW!") do set "CUDA_VER=%%x"
del "%BASE%cuda.tmp"
)
REM --- Software ---
python --version > "%BASE%py.tmp" 2>&1
set /p PY_RAW=<"%BASE%py.tmp"
if not "%PY_RAW%"=="" set "PYTHON_VER=%PY_RAW%"
del "%BASE%py.tmp"
if exist "%BASE%%EXE_NAME%" (
"%BASE%%EXE_NAME%" --version 2>&1 | findstr "build:" > "%BASE%llama.tmp"
set /p LLAMA_RAW=<"%BASE%llama.tmp"
if not "!LLAMA_RAW!"=="" set "LLAMA_VER=!LLAMA_RAW!"
del "%BASE%llama.tmp"
)
REM =========================================================
REM MAIN MENU
REM =========================================================
:MAIN_MENU
cls
echo ========================================================
echo SYSTEM DASHBOARD
echo ========================================================
echo HARDWARE:
echo CPU: %CPU_LOAD%%% Load RAM: %RAM_INFO%
echo GPU: %GPU_NAME%
echo MEM: %GPU_INFO% Load: %GPU_LOAD%%%
echo.
echo SOFTWARE:
echo Llama: %LLAMA_VER%
echo Python: %PYTHON_VER%
echo NVIDIA: Driver %DRIVER_VER% / CUDA %CUDA_VER%
echo ========================================================
echo.
echo [1] Select Model and Launch
echo [2] Refresh Stats
echo [3] Edit Configuration
echo [4] Exit
echo.
echo ========================================================
set /p "CHOICE=Enter selection (1-4): "
if "%CHOICE%"=="1" goto :MODEL_SELECT
if "%CHOICE%"=="2" goto :GET_STATS
if "%CHOICE%"=="3" goto :EDIT_CONFIG
if "%CHOICE%"=="4" exit
goto :MAIN_MENU
REM =========================================================
REM MODEL SELECTION
REM =========================================================
:MODEL_SELECT
cls
echo ========================================================
echo AVAILABLE MODELS
echo ========================================================
echo Scanning...
echo.
set idx=0
set unc_count=0
set std_count=0
for /f "tokens=1 delims==" %%v in ('set f_path[ 2^>nul') do set "%%v="
for /f "tokens=1 delims==" %%v in ('set f_name[ 2^>nul') do set "%%v="
if not exist "%MODELS_DIR%" mkdir "%MODELS_DIR%"
for %%f in ("%MODELS_DIR%\*.gguf") do (
set "fname=%%~nxf"
set "fpath=%%f"
set "is_unc=0"
echo !fname! | findstr /I "%KEYWORDS%" >nul
if !errorlevel! EQU 0 set "is_unc=1"
if !is_unc! EQU 1 (
set /a unc_count+=1
set "unc_n[!unc_count!]=!fname!"
set "unc_p[!unc_count!]=!fpath!"
) else (
set /a std_count+=1
set "std_n[!std_count!]=!fname!"
set "std_p[!std_count!]=!fpath!"
)
)
if %unc_count% EQU 0 if %std_count% EQU 0 (
echo No models found. & pause & goto :MAIN_MENU
)
if %unc_count% GTR 0 (
echo --- SPECIALIZED / UNCENSORED ---
for /L %%i in (1,1,%unc_count%) do (
set /a idx+=1
set "f_name[!idx!]=!unc_n[%%i]!"
set "f_path[!idx!]=!unc_p[%%i]!"
echo [!idx!] !unc_n[%%i]!
)
echo.
)
if %std_count% GTR 0 (
echo --- STANDARD / GENERAL ---
for /L %%i in (1,1,%std_count%) do (
set /a idx+=1
set "f_name[!idx!]=!std_n[%%i]!"
set "f_path[!idx!]=!std_p[%%i]!"
echo [!idx!] !std_n[%%i]!
)
)
echo.
echo ========================================================
set /p "M_SEL=Select model (1-%idx%): "
if "%M_SEL%"=="" goto :MODEL_SELECT
if %M_SEL% GTR %idx% goto :MODEL_SELECT
if %M_SEL% LSS 1 goto :MODEL_SELECT
set "SEL_PATH=!f_path[%M_SEL%]!"
set "SEL_NAME=!f_name[%M_SEL%]!"
REM =========================================================
REM CHECK FOR SAVED CONFIG
REM =========================================================
:CHECK_CONFIG
set "CONFIG_FILE=%SEL_PATH%.llama_config.bat"
if exist "%CONFIG_FILE%" (
call "%CONFIG_FILE%"
goto :AUTO_LAUNCH_COUNTDOWN
)
goto :MANUAL_SETUP
REM =========================================================
REM AUTO LAUNCH COUNTDOWN
REM =========================================================
:AUTO_LAUNCH_COUNTDOWN
cls
echo ========================================================
echo SAVED CONFIG LOADED
echo ========================================================
echo Model: %SEL_NAME%
echo Template: %CFG_TEMPLATE_NAME%
echo Context: %CFG_CONTEXT%
echo Vision: %CFG_VISION_NAME%
echo ========================================================
echo.
echo Launching in 3 seconds...
echo.
echo [ Press 'E' to Edit/Reset settings ]
echo [ Press 'SPACE' to Launch immediately ]
echo.
REM Choice command to handle key input with timeout
choice /C E /T 3 /D E /N >nul 2>&1
if %errorlevel%==1 goto :RESET_CONFIG
REM If timeout (which defaults to E choice in batch workaround, logic below fixes flow)
REM Actually, choice /T 3 /D Y (wait 3s, default Y).
REM We use a simpler method: timeout allowing keypress
timeout /t 3
goto :LAUNCH_WITH_CONFIG
:RESET_CONFIG
cls
echo Resetting configuration for this model...
del "%CONFIG_FILE%"
goto :MANUAL_SETUP
:LAUNCH_WITH_CONFIG
REM Map the CFG variables to runtime variables
set "CONTEXT_SIZE=%CFG_CONTEXT%"
set "TEMPLATE_FLAG=%CFG_TEMPLATE_FLAG%"
set "MMPROJ_FLAG=%CFG_MMPROJ_FLAG%"
set "FLASH_ATTN_FLAG="
if "%CFG_FLASH_ATTN%"=="1" set "FLASH_ATTN_FLAG=-fa"
goto :LAUNCH
REM =========================================================
REM MANUAL SETUP WIZARD
REM =========================================================
:MANUAL_SETUP
REM --- 1. Vision ---
cls
echo [SETUP 1/3] Vision / Multimodal
echo --------------------------------
echo Does %SEL_NAME% need a projector file?
echo.
echo [1] No (Standard)
echo [2] Yes (Select mmproj file)
echo.
set /p "V_CHOICE=Select (1-2): "
set "MMPROJ_FLAG="
set "CFG_VISION_NAME=None"
if "%V_CHOICE%"=="2" (
cls
echo Scanning for *mmproj*...
set v_idx=0
for /f "tokens=1 delims==" %%v in ('set v_path[ 2^>nul') do set "%%v="
for %%f in ("%MODELS_DIR%\*mmproj*.gguf") do (
set /a v_idx+=1
set "v_path[!v_idx!]=%%f"
echo [!v_idx!] %%~nxf
)
if !v_idx!==0 (
echo No mmproj files found. Skipping.
timeout /t 2 >nul
) else (
echo.
set /p "PROJ_SEL=Select file: "
if defined v_path[!PROJ_SEL!] (
set "MMPROJ_FLAG=--mmproj "!v_path[%PROJ_SEL%]!""
set "CFG_VISION_NAME=Active"
)
)
)
REM --- 2. Template ---
cls
echo [SETUP 2/3] Chat Template
echo --------------------------------
echo [1] Auto-Detect (Standard)
echo [2] ChatML (Alice, Uncensored, Dolphin)
echo [3] Llama 3 (Meta Llama 3)
echo [4] Mistral (Mistral v0.1/0.3)
echo [5] Alpaca (Older Merges)
echo.
set /p "T_SEL=Select (1-5): "
set "TEMPLATE_FLAG="
set "CFG_TEMPLATE_NAME=Auto"
if "%T_SEL%"=="2" (set "TEMPLATE_FLAG=--chat-template chatml" & set "CFG_TEMPLATE_NAME=ChatML")
if "%T_SEL%"=="3" (set "TEMPLATE_FLAG=--chat-template llama3" & set "CFG_TEMPLATE_NAME=Llama3")
if "%T_SEL%"=="4" (set "TEMPLATE_FLAG=--chat-template mistral" & set "CFG_TEMPLATE_NAME=Mistral")
if "%T_SEL%"=="5" (set "TEMPLATE_FLAG=--chat-template alpaca" & set "CFG_TEMPLATE_NAME=Alpaca")
REM --- 3. Context Size ---
cls
echo [SETUP 3/3] Context Size (Memory)
echo --------------------------------
echo [1] 8192 (Standard - Best for Q4/Q5 models)
echo [2] 4096 (Rescue Mode - Use if Q6/Q8 models crash/slow)
echo [3] 16384 (High - Needs lots of VRAM)
echo.
set /p "C_SEL=Select (1-3): "
set "CONTEXT_SIZE=8192"
if "%C_SEL%"=="2" set "CONTEXT_SIZE=4096"
if "%C_SEL%"=="3" set "CONTEXT_SIZE=16384"
REM --- 4. Performance ---
cls
echo [SETUP 4/4] Performance
echo --------------------------------
echo Enable Flash Attention? (Greatly improves speed on modern GPUs)
echo.
echo [1] Yes (Default)
echo [2] No (If you experience crashes)
echo.
set /p "P_SEL=Select (1-2): "
set "CFG_FLASH_ATTN=1"
if "%P_SEL%"=="2" set "CFG_FLASH_ATTN=0"
REM --- SAVE CONFIG? ---
cls
echo ========================================================
echo CONFIGURATION READY
echo ========================================================
echo Model: %SEL_NAME%
echo Template: %CFG_TEMPLATE_NAME%
echo Context: %CONTEXT_SIZE%
echo Vision: %CFG_VISION_NAME%
echo ========================================================
echo.
set /p "SAVE_CONF=Save as default for this model? (Y/N): "
if /I "%SAVE_CONF%"=="Y" (
(
echo set "CFG_CONTEXT=%CONTEXT_SIZE%"
echo set "CFG_TEMPLATE_FLAG=%TEMPLATE_FLAG%"
echo set "CFG_TEMPLATE_NAME=%CFG_TEMPLATE_NAME%"
echo set "CFG_MMPROJ_FLAG=%MMPROJ_FLAG%"
echo set "CFG_VISION_NAME=%CFG_VISION_NAME%"
echo set "CFG_FLASH_ATTN=%CFG_FLASH_ATTN%"
) > "%CONFIG_FILE%"
echo Config saved!
)
set "FLASH_ATTN_FLAG="
if "%CFG_FLASH_ATTN%"=="1" set "FLASH_ATTN_FLAG=-fa"
goto :LAUNCH
REM =========================================================
REM LAUNCH
REM =========================================================
:LAUNCH
cls
echo ========================================================
echo Launching...
echo Model: %SEL_NAME%
echo Mode: %CONTEXT_SIZE% Context / %CFG_TEMPLATE_NAME%
echo ========================================================
echo.
if %AUTO_OPEN_BROWSER%==1 (
if %BROWSER_DELAY% GTR 0 (
echo Opening browser in %BROWSER_DELAY%s...
timeout /t %BROWSER_DELAY% /nobreak >nul
)
REM Attempt to wait for port (simple wait)
timeout /t 2 /nobreak >nul
start http://%HOST%:%PORT%
)
"%BASE%%EXE_NAME%" ^
-m "%SEL_PATH%" ^
--host %HOST% ^
--port %PORT% ^
-c %CONTEXT_SIZE% ^
-ngl %GPU_LAYERS% ^
-t %THREADS% ^
-np %PARALLEL_SLOTS% ^
%TEMPLATE_FLAG% ^
%MMPROJ_FLAG% ^
%FLASH_ATTN_FLAG%
echo.
echo Server closed.
pause
goto :GET_STATS
:EDIT_CONFIG
cls
echo.
echo Please right-click this batch file and select "Edit".
echo.
pause
goto :GET_STATS
Comments