@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