Tom_Neverwinter icon

LLAMA.CPP 02/21/2026

Tom_Neverwinter | PRO | 02/21/26 09:46:43 AM UTC (Edited) | 0 ⭐ | 3371 👁️ | Never ⏰ | []
text |

24.18 KB

|

None

|

0 👍

/

0 👎

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
title Llama.cpp Configurable Launcher
 REM =========================================================
REM                  GLOBAL DEFAULTS
REM =========================================================
set "BASE=%~dp0"
set "BIN_DIR=%BASE%bin"
set "LOGS_DIR=%BASE%logs"
set "EXE_NAME=llama-server.exe"
set "LOGFILE=%LOGS_DIR%\launcher_debug.log"
 REM --- Create log file ---
echo [%date% %time%] Script started >> "%LOGFILE%"
echo [%date% %time%] BASE=%BASE% >> "%LOGFILE%"
 REM --- Model Directory Setup ---
set "MODELS_DIR=%BASE%models"
if exist "%BASE%MODELS_PATH.txt" (
    set /p MODELS_DIR=<"%BASE%MODELS_PATH.txt"
)
 REM --- Environment Sanitation ---
REM Prioritize local folder for DLLs and backends to avoid conflicts with system-wide installations (like WinGet)
set "PATH=%BIN_DIR%;%PATH%"
set "GGML_BACKEND_PATH=%BIN_DIR%"
 REM --- Connection Settings ---
set "PORT=8080"
set "HOST=127.0.0.1"
 REM --- Hardware Settings (Global) ---
set "GPU_LAYERS=999"      REM Set to 999 to offload all layers to GPU
set "THREADS=8"           REM CPU threads to use for generation
set "PARALLEL_SLOTS=1"    REM Number of simultaneous requests supported
 REM --- Browser Settings ---
set "AUTO_OPEN_BROWSER=1"  REM Set to 1 to open browser on launch
set "BROWSER_DELAY=2"      REM Delay in seconds before opening browser (obsolete if port check works)
 REM --- Model Categorization Keywords ---
set "KEYWORDS=NSFW Uncensored Amoral Dark Fallen Rivermind Snowpiercer Abyss Erebus Lewd Anubis Anubus Dusk Vox"
 REM NOTE: Models like Anubis require the <|im_end|> stop token. 
REM However, characters like <, |, and > are special Batch operators.
REM To add them back, they must be hyper-escaped or passed via environment variables carefully.
 REM =========================================================
REM                  SYSTEM STATS
REM =========================================================
:GET_STATS
echo [%date% %time%] GET_STATS starting >> "%LOGFILE%"
set "CPU_LOAD=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 --- CPU and RAM Stats ---
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"
 REM --- GPU Stats (NVIDIA-SMI) ---
nvidia-smi --query-gpu=name,utilization.gpu,memory.used,memory.total,driver_version --format=csv,noheader,nounits > "%LOGS_DIR%\gpu.tmp" 2>nul
if %errorlevel%==0 (
    for /f "tokens=1,2,3,4,5 delims=," %%a in ('type "%LOGS_DIR%\gpu.tmp"') do (
        set "GPU_NAME=%%a"
        set "GPU_LOAD=%%b"
        set "GPU_INFO=%%cMB / %%dMB"
        set "DRIVER_VER=%%e"
    )
    del "%LOGS_DIR%\gpu.tmp"
     REM Extract CUDA version
    nvidia-smi | findstr /C:"CUDA Version" > "%LOGS_DIR%\cuda.tmp"
    set /p CUDA_RAW=<"%LOGS_DIR%\cuda.tmp"
    for /f "tokens=9" %%x in ("!CUDA_RAW!") do set "CUDA_VER=%%x"
    del "%LOGS_DIR%\cuda.tmp"
)
 REM --- Software Versions ---
if exist "%BASE%venv\Scripts\python.exe" (
    "%BASE%venv\Scripts\python.exe" --version > "%LOGS_DIR%\py.tmp" 2>&1
) else (
    python --version > "%LOGS_DIR%\py.tmp" 2>&1
)
set /p PY_RAW=<"%LOGS_DIR%\py.tmp"
if not "%PY_RAW%"=="" set "PYTHON_VER=%PY_RAW%"
del "%LOGS_DIR%\py.tmp"
 if exist "%BIN_DIR%\%EXE_NAME%" (
    "%BIN_DIR%\%EXE_NAME%" --version 2>&1 | findstr "build:" > "%LOGS_DIR%\llama.tmp"
    set /p LLAMA_RAW=<"%LOGS_DIR%\llama.tmp"
    if not "!LLAMA_RAW!"=="" set "LLAMA_VER=!LLAMA_RAW!"
    del "%LOGS_DIR%\llama.tmp"
)
 REM =========================================================
REM                  MAIN MENU
REM =========================================================
:MAIN_MENU
echo [%date% %time%] MAIN_MENU reached >> "%LOGFILE%"
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 Global Defaults (Not implemented)
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 %MODELS_DIR%...
echo.
 set idx=0
set unc_count=0
set std_count=0
 REM Clean array variables
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"
     REM Skip mmproj files in the main list
    echo !fname! | findstr /I "mmproj" >nul
    if !errorlevel! NEQ 0 (
        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 in %MODELS_DIR%. & 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  [B] Back to Dashboard
echo ========================================================
set /p "M_SEL=Select model (1-%idx% or B): "
if /I "%M_SEL%"=="B" goto :MAIN_MENU
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%]!"
echo [%date% %time%] Model selected: !SEL_NAME! >> "%LOGFILE%"
echo [%date% %time%] Path: !SEL_PATH! >> "%LOGFILE%"
 REM =========================================================
REM             CHECK FOR SAVED CONFIG (JSON)
REM =========================================================
:CHECK_CONFIG
echo [%date% %time%] CHECK_CONFIG starting >> "%LOGFILE%"
REM Initial default values (will be overwritten if config exists)
set "CFG_CONTEXT=8192"
set "CFG_TEMPLATE_FLAG="
set "CFG_TEMPLATE_NAME=Auto"
set "CFG_MMPROJ_FLAG="
set "CFG_VISION_NAME=None"
set "CFG_FLASH_ATTN=1"
set "CFG_DIRECT_IO=0"
set "CFG_REASON_BUDGET=0"
set "CFG_REASON_FORMAT="
set "CFG_SAMPLER_FLAGS="
set "CFG_SAMPLER_NAME=Default"
set "CFG_CACHE_K=f16"
set "CFG_CACHE_V=f16"
 REM Check if JSON config exists using Python (temp file avoids for /f quoting issues with spaced paths)
set "HAS_JSON_CONFIG=false"
"%BASE%venv\Scripts\python.exe" "%BASE%src\config_manager.py" has-config "!SEL_NAME!" > "%LOGS_DIR%\has_config.tmp" 2>nul
if exist "%LOGS_DIR%\has_config.tmp" (
    set /p HAS_JSON_CONFIG=<"%LOGS_DIR%\has_config.tmp"
    del "%LOGS_DIR%\has_config.tmp" 2>nul
)
echo [%date% %time%] Has JSON config: !HAS_JSON_CONFIG! >> "%LOGFILE%"
 if "!HAS_JSON_CONFIG!"=="true" (
    echo [%date% %time%] Loading JSON config via Python >> "%LOGFILE%"
    REM Use Python to load config into batch-friendly key=value pairs
    "%BASE%venv\Scripts\python.exe" "%BASE%src\config_manager.py" get-batch-vars "!SEL_NAME!" > "%LOGS_DIR%\config_vars.tmp"
    for /f "usebackq tokens=1,* delims==" %%a in ("%LOGS_DIR%\config_vars.tmp") do (
        set "%%a=%%b"
    )
    del "%LOGS_DIR%\config_vars.tmp" 2>nul
    set "USE_JSON_CONFIG=1"
    goto :AUTO_LAUNCH_COUNTDOWN
)
 REM Also check for legacy .bat config (for backwards compatibility)
set "CONFIG_FILE=%SEL_PATH%.llama_config.bat"
if exist "%CONFIG_FILE%" (
    echo [%date% %time%] Found legacy .bat config >> "%LOGFILE%"
    call "%CONFIG_FILE%"
    set "USE_JSON_CONFIG=0"
    goto :AUTO_LAUNCH_COUNTDOWN
)
echo [%date% %time%] No config, going to MANUAL_SETUP >> "%LOGFILE%"
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 Thinking: %CFG_REASON_BUDGET% (%CFG_REASON_FORMAT%)
echo Sampler:  %CFG_SAMPLER_NAME%
echo KV Cache: %CFG_CACHE_K% / %CFG_CACHE_V%
echo ========================================================
echo.
echo Launching in 3 seconds...
echo.
echo [ Press 'E' to Edit/Reset settings ]
echo [ Press 'SPACE' to Launch immediately ]
echo.
 choice /C ES /T 3 /D S /N
if %errorlevel%==1 goto :RESET_CONFIG
goto :PREPARE_LAUNCH
 :RESET_CONFIG
cls
echo Resetting configuration for this model...
REM Delete JSON config if exists
"%BASE%venv\Scripts\python.exe" "%BASE%src\config_manager.py" delete-config "!SEL_NAME!" 2>nul
REM Also delete legacy .bat config if exists
if exist "%CONFIG_FILE%" del "%CONFIG_FILE%"
set "USE_JSON_CONFIG=0"
timeout /t 1 >nul
goto :MANUAL_SETUP
 REM =========================================================
REM             MANUAL SETUP WIZARD
REM =========================================================
:MANUAL_SETUP
echo [%date% %time%] MANUAL_SETUP entered >> "%LOGFILE%"
REM --- 1. Vision ---
:SETUP_VISION
echo [%date% %time%] SETUP_VISION >> "%LOGFILE%"
cls
echo [SETUP 1/6] Vision / Multimodal
echo --------------------------------
echo Does %SEL_NAME% need a projector file? (Visual LLMs)
echo.
echo [1] No (Standard)
echo [2] Yes (Select mmproj file)
echo.
echo [B] Back to Model List
echo.
set /p "V_CHOICE=Select (1-2 or B): "
if /I "%V_CHOICE%"=="B" goto :MODEL_SELECT
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.
        echo  [B] Back
        echo.
        set /p "PROJ_SEL=Select file (1-!v_idx! or B): "
        if /I "!PROJ_SEL!"=="B" goto :SETUP_VISION
        if defined v_path[!PROJ_SEL!] (
            set "CFG_MMPROJ_FLAG=--mmproj "!v_path[%PROJ_SEL%]!""
            set "CFG_VISION_NAME=Active"
        )
    )
)
 REM --- 2. Template ---
:SETUP_TEMPLATE
echo [%date% %time%] SETUP_TEMPLATE >> "%LOGFILE%"
cls
echo [SETUP 2/6] Chat Template
echo --------------------------------
echo [1] Auto-Detect (Standard)
echo [2] ChatML      (Alice, Uncensored, Dolphin, Qwen, Anubis)
echo [3] Llama 3     (Meta Llama 3)
echo [4] Llama 3.1   (Meta Llama 3.1)
echo [5] Mistral     (Mistral v0.1/0.3 / Devstral)
echo [6] DeepSeek    (V2 / V3)
echo [7] Alpaca      (Older Merges)
echo [8] Mistral V3 Tekken (Brother Dusk, Mistral3 RP)
echo [9] Mistral V7 Tekken (Nemo RP Finetunes)
echo.
echo [B] Back
echo.
set /p "T_SEL=Select (1-9 or B): "
if /I "%T_SEL%"=="B" goto :SETUP_VISION
if "%T_SEL%"=="1" (set "CFG_TEMPLATE_FLAG=" & set "CFG_TEMPLATE_NAME=Auto")
if "%T_SEL%"=="2" (set "CFG_TEMPLATE_FLAG=--chat-template chatml" & set "CFG_TEMPLATE_NAME=ChatML")
if "%T_SEL%"=="3" (set "CFG_TEMPLATE_FLAG=--chat-template llama3" & set "CFG_TEMPLATE_NAME=Llama3")
if "%T_SEL%"=="4" (set "CFG_TEMPLATE_FLAG=--chat-template llama3.1" & set "CFG_TEMPLATE_NAME=Llama3.1")
if "%T_SEL%"=="5" (set "CFG_TEMPLATE_FLAG=--chat-template mistral" & set "CFG_TEMPLATE_NAME=Mistral")
if "%T_SEL%"=="6" (set "CFG_TEMPLATE_FLAG=--chat-template deepseek3" & set "CFG_TEMPLATE_NAME=DeepSeek")
if "%T_SEL%"=="7" (set "CFG_TEMPLATE_FLAG=--chat-template alpaca" & set "CFG_TEMPLATE_NAME=Alpaca")
if "%T_SEL%"=="8" (set "CFG_TEMPLATE_FLAG=--chat-template mistral-v3-tekken" & set "CFG_TEMPLATE_NAME=MistralV3Tekken")
if "%T_SEL%"=="9" (set "CFG_TEMPLATE_FLAG=--chat-template mistral-v7-tekken" & set "CFG_TEMPLATE_NAME=MistralV7Tekken")
 REM --- 3. Reasoning ---
:SETUP_REASONING
echo [%date% %time%] SETUP_REASONING >> "%LOGFILE%"
 REM Check if this is a reasoning model
set "IS_REASONING=0"
echo !SEL_NAME! | findstr /I /R "\<Thinking\> \<Think\> \<R1\> \<Anubis\>" >nul
if !errorlevel! EQU 0 set "IS_REASONING=1"
 if "!IS_REASONING!"=="0" (
    set "CFG_REASON_BUDGET=0"
    set "CFG_REASON_FORMAT="
    goto :SETUP_SAMPLER
)
 cls
echo [SETUP 3/6] Reasoning / Thinking
echo --------------------------------
echo Detected a 'Reasoning' model (R1/Thinking).
echo.
echo [1] Budget: 0 (Disabled)
echo [2] Budget: -1 (Unrestricted)
echo.
echo [3] Format: Default
echo [4] Format: DeepSeek (Recommended for R1 models)
echo.
echo [C] Continue
echo [B] Back
echo.
set /p "R_SEL=Select (1-4, C or B): "
if /I "!R_SEL!"=="B" goto :SETUP_TEMPLATE
if /I "!R_SEL!"=="C" goto :SETUP_SAMPLER
if "!R_SEL!"=="1" set "CFG_REASON_BUDGET=0"
if "!R_SEL!"=="2" set "CFG_REASON_BUDGET=-1"
if "!R_SEL!"=="3" set "CFG_REASON_FORMAT="
if "!R_SEL!"=="4" set "CFG_REASON_FORMAT=deepseek"
 REM Loop back to allow setting both budget and format if needed
goto :SETUP_REASONING
 REM --- 4. Sampler ---
:SETUP_SAMPLER
echo [%date% %time%] SETUP_SAMPLER >> "%LOGFILE%"
cls
echo [SETUP 4/6] Sampler Presets
echo --------------------------------
echo [1] Default  (llama.cpp standard)
echo [2] Creative (Min-P + DRY Sampler - High Quality RP)
echo [3] Precise  (Low Temp - Best for Logic/Coding)
echo [4] Extreme  (High Temp + High Penalty - Chaotic)
echo.
echo [B] Back
echo.
set /p "S_SEL=Select (1-4 or B): "
if /I "%S_SEL%"=="B" (
    echo %SEL_NAME% | findstr /I /R "\<Thinking\> \<Think\> \<R1\> \<Anubis\>" >nul
    if !errorlevel! EQU 0 goto :SETUP_REASONING
    goto :SETUP_TEMPLATE
)
if "%S_SEL%"=="1" (set "CFG_SAMPLER_FLAGS=" & set "CFG_SAMPLER_NAME=Default")
if "%S_SEL%"=="2" (
    set "CFG_SAMPLER_FLAGS=--temp 1.0 --min-p 0.02 --dry-multiplier 0.8 --dry-base 1.75 --dry-allowed-length 4"
    set "CFG_SAMPLER_NAME=Creative (DRY+MinP)"
)
if "%S_SEL%"=="3" (
    set "CFG_SAMPLER_FLAGS=--temp 0.2 --min-p 0.1"
    set "CFG_SAMPLER_NAME=Precise"
)
if "%S_SEL%"=="4" (
    set "CFG_SAMPLER_FLAGS=--temp 1.3 --min-p 0.015 --dry-multiplier 1.0 --dry-base 2.0"
    set "CFG_SAMPLER_NAME=Extreme"
)
 REM --- 5. Context ---
:SETUP_CONTEXT
echo [%date% %time%] SETUP_CONTEXT >> "%LOGFILE%"
cls
echo [SETUP 5/6] Context Size (Memory)
echo --------------------------------
echo [1] 4096   (Rescue Mode)
echo [2] 8192   (Standard)
echo [3] 16384  (Mid)
echo [4] 32768  (Large)
echo [5] 65536  (Extra Large)
echo [6] 131072 (Full Llama3/8B)
echo.
echo [B] Back
echo.
set /p "C_SEL=Select (1-6 or B): "
if /I "%C_SEL%"=="B" goto :SETUP_SAMPLER
if "%C_SEL%"=="1" set "CFG_CONTEXT=4096"
if "%C_SEL%"=="2" set "CFG_CONTEXT=8192"
if "%C_SEL%"=="3" set "CFG_CONTEXT=16384"
if "%C_SEL%"=="4" set "CFG_CONTEXT=32768"
if "%C_SEL%"=="5" set "CFG_CONTEXT=65536"
if "%C_SEL%"=="6" set "CFG_CONTEXT=131072"
 REM --- 6. Performance ---
:SETUP_PERF
echo [%date% %time%] SETUP_PERF >> "%LOGFILE%"
cls
echo [SETUP 6/7] Performance
echo --------------------------------
echo Enable Flash Attention? (Faster processing)
echo.
echo [1] Auto (Recommended)
echo [2] On   (Force Enabled)
echo [3] Off  (Force Disabled)
echo.
echo [B] Back
echo.
set /p "P_SEL=Select (1-3 or B): "
if /I "%P_SEL%"=="B" goto :SETUP_CONTEXT
set "CFG_FLASH_ATTN=auto"
set "CFG_DIRECT_IO=0"
if "%P_SEL%"=="2" set "CFG_FLASH_ATTN=1"
if "%P_SEL%"=="3" set "CFG_FLASH_ATTN=0"
  :SETUP_DIRECTIO
cls
echo [SETUP 6b/7] Performance - Direct I/O
echo ------------------------------------------
echo Enable Direct I/O? (May improve performance on some SSDs)
echo.
echo [1] No  (Default)
echo [2] Yes (Experimental)
echo.
echo [B] Back
echo.
set /p "D_SEL=Select (1-2 or B): "
if /I "%D_SEL%"=="B" goto :SETUP_PERF
if "%D_SEL%"=="2" set "CFG_DIRECT_IO=1"
 REM --- 7. KV Cache ---
:SETUP_KV
cls
echo [SETUP 7/7] KV Cache Quantization
echo --------------------------------
echo Reduce VRAM usage. K/V Cache can be compressed.
echo f16 = Lossless (High VRAM), q8_0 = Good, q4_0 = Smallest
echo.
echo [1] f16  (Standard)
echo [2] q8_0 (Balanced)
echo [3] q4_0 (Max Context)
echo.
echo [B] Back
echo.
set /p "KV_SEL=Select (1-3 or B): "
if /I "%KV_SEL%"=="B" goto :SETUP_DIRECTIO
if "%KV_SEL%"=="1" (set "CFG_CACHE_K=f16" & set "CFG_CACHE_V=f16")
if "%KV_SEL%"=="2" (set "CFG_CACHE_K=q8_0" & set "CFG_CACHE_V=q8_0")
if "%KV_SEL%"=="3" (set "CFG_CACHE_K=q4_0" & set "CFG_CACHE_V=q4_0")
  REM --- SAVE CONFIG? ---
cls
echo ========================================================
echo                 CONFIGURATION READY
echo ========================================================
echo Model:    %SEL_NAME%
echo Template: %CFG_TEMPLATE_NAME%
echo Context:  %CFG_CONTEXT%
echo Vision:   %CFG_VISION_NAME%
echo Thinking: %CFG_REASON_BUDGET%
echo Sampler:  %CFG_SAMPLER_NAME%
echo Flash-Attn: !CFG_FLASH_ATTN!
echo Direct-IO:  !CFG_DIRECT_IO!
echo KV Cache:   !CFG_CACHE_K!/!CFG_CACHE_V!
echo ========================================================
echo.
set /p "SAVE_CONF=Save as default for this model? (Y/N): "
if /I "%SAVE_CONF%"=="Y" (
    REM Build JSON config string
    set "TEMPLATE_ID=auto"
    if "!CFG_TEMPLATE_NAME!"=="ChatML" set "TEMPLATE_ID=chatml"
    if "!CFG_TEMPLATE_NAME!"=="Llama3" set "TEMPLATE_ID=llama3"
    if "!CFG_TEMPLATE_NAME!"=="Llama3.1" set "TEMPLATE_ID=llama3.1"
    if "!CFG_TEMPLATE_NAME!"=="Mistral" set "TEMPLATE_ID=mistral"
    if "!CFG_TEMPLATE_NAME!"=="DeepSeek" set "TEMPLATE_ID=deepseek"
    if "!CFG_TEMPLATE_NAME!"=="Alpaca" set "TEMPLATE_ID=alpaca"
    if "!CFG_TEMPLATE_NAME!"=="MistralV3Tekken" set "TEMPLATE_ID=mistral-v3-tekken"
    if "!CFG_TEMPLATE_NAME!"=="MistralV7Tekken" set "TEMPLATE_ID=mistral-v7-tekken"
     set "SAMPLER_ID=default"
    echo !CFG_SAMPLER_NAME! | findstr /C:"Creative" >nul && set "SAMPLER_ID=creative"
    echo !CFG_SAMPLER_NAME! | findstr /C:"Precise" >nul && set "SAMPLER_ID=precise"
    echo !CFG_SAMPLER_NAME! | findstr /C:"Extreme" >nul && set "SAMPLER_ID=extreme"
     set "FLASH_BOOL=true"
    if "!CFG_FLASH_ATTN!"=="0" set "FLASH_BOOL=false"
    set "DIO_BOOL=false"
    if "!CFG_DIRECT_IO!"=="1" set "DIO_BOOL=true"
     set "REASON_FMT_JSON=null"
    if not "!CFG_REASON_FORMAT!"=="" set "REASON_FMT_JSON="!CFG_REASON_FORMAT!""
     set "JSON_CFG={"model":{"context_size":!CFG_CONTEXT!,"chat_template":"!TEMPLATE_ID!"},"hardware":{"flash_attention":!FLASH_BOOL!,"direct_io":!DIO_BOOL!,"cache_type_k":"!CFG_CACHE_K!","cache_type_v":"!CFG_CACHE_V!"},"reasoning":{"budget":!CFG_REASON_BUDGET!,"format":!REASON_FMT_JSON!},"sampler":{"preset":"!SAMPLER_ID!"}}"
     "%BASE%venv\Scripts\python.exe" "%BASE%src\config_manager.py" save "!SEL_NAME!" "!JSON_CFG!"
    echo Config saved to JSON!
    timeout /t 1 >nul
)
 :PREPARE_LAUNCH
echo [%date% %time%] PREPARE_LAUNCH >> "%LOGFILE%"
 REM If using JSON config, get flags from Python
if "!USE_JSON_CONFIG!"=="1" (
    echo [%date% %time%] Using JSON config for launch >> "%LOGFILE%"
     REM Get all flags from Python config manager and store in temp file
    "%BASE%venv\Scripts\python.exe" "%BASE%src\config_manager.py" get-flags "!SEL_NAME!" > "%LOGS_DIR%\json_flags.tmp"
     REM Read flags into a single variable
    set "JSON_FLAGS="
    for /f "usebackq delims=" %%f in ("%LOGS_DIR%\json_flags.tmp") do (
        set "JSON_FLAGS=!JSON_FLAGS! %%f"
    )
    del "%LOGS_DIR%\json_flags.tmp" 2>nul
     goto :LAUNCH_JSON
)
 REM Legacy batch variable flag preparation (for old .bat configs)
set "REASON_BUDGET_FLAG="
if "%CFG_REASON_BUDGET%"=="-1" set "REASON_BUDGET_FLAG=--reasoning-budget -1"
if "%CFG_REASON_BUDGET%"=="0" set "REASON_BUDGET_FLAG=--reasoning-budget 0"
 set "REASON_FORMAT_FLAG="
if NOT "%CFG_REASON_FORMAT%"=="" set "REASON_FORMAT_FLAG=--reasoning-format %CFG_REASON_FORMAT%"
 set "FLASH_ATTN_FLAG=--flash-attn on"
if "%CFG_FLASH_ATTN%"=="0" set "FLASH_ATTN_FLAG=--flash-attn off"
 set "DIRECT_IO_FLAG="
if "%CFG_DIRECT_IO%"=="1" set "DIRECT_IO_FLAG=--direct-io"
 set "KV_CACHE_FLAG=-ctk %CFG_CACHE_K% -ctv %CFG_CACHE_V%"
   REM =========================================================
REM                  LAUNCH (Legacy batch vars)
REM =========================================================
:LAUNCH
echo [%date% %time%] LAUNCH (legacy) >> "%LOGFILE%"
cls
echo ========================================================
echo Launching...
echo Model: %SEL_NAME%
echo Mode:  %CFG_CONTEXT% Context / %CFG_TEMPLATE_NAME%
echo ========================================================
echo.
 REM Start a separate process to wait for the server and open the browser
if "%AUTO_OPEN_BROWSER%"=="1" (
    echo [Browser Watcher Started]
    start /min "LlamaBrowser" cmd /c "for /L %%i in (1,1,60) do (netstat -ano | findstr :%PORT% | findstr LISTENING >nul && (start http://%HOST%:%PORT% & exit) || timeout /t 1 >nul)"
)
 REM The main execution call (legacy mode)
"%BIN_DIR%\%EXE_NAME%" ^
    -m "%SEL_PATH%" ^
    --host %HOST% ^
    --port %PORT% ^
    -c %CFG_CONTEXT% ^
    -ngl %GPU_LAYERS% ^
    -t %THREADS% ^
    -np %PARALLEL_SLOTS% ^
    %CFG_TEMPLATE_FLAG% ^
    %CFG_MMPROJ_FLAG% ^
    %FLASH_ATTN_FLAG% ^
    %DIRECT_IO_FLAG% ^
    %KV_CACHE_FLAG% ^
    %REASON_BUDGET_FLAG% ^
    %REASON_FORMAT_FLAG% ^
    %CFG_SAMPLER_FLAGS% ^
    --no-warmup
 goto :POST_LAUNCH
 REM =========================================================
REM                  LAUNCH (JSON Config)
REM =========================================================
:LAUNCH_JSON
echo [%date% %time%] LAUNCH (JSON) >> "%LOGFILE%"
cls
echo ========================================================
echo Launching...
echo Model: %SEL_NAME%
echo Mode:  %CFG_CONTEXT% Context / %CFG_TEMPLATE_NAME%
echo ========================================================
echo.
 REM Start a separate process to wait for the server and open the browser
if "%AUTO_OPEN_BROWSER%"=="1" (
    echo [Browser Watcher Started]
    start /min "LlamaBrowser" cmd /c "for /L %%i in (1,1,60) do (netstat -ano | findstr :%PORT% | findstr LISTENING >nul && (start http://%HOST%:%PORT% & exit) || timeout /t 1 >nul)"
)
 REM The main execution call (JSON config mode - flags from Python)
"%BIN_DIR%\%EXE_NAME%" -m "%SEL_PATH%" !JSON_FLAGS!
 :POST_LAUNCH
 echo.
echo Server closed.
pause
goto :GET_STATS
 :EDIT_CONFIG
cls
echo.
echo Opening global configuration is not directly supported yet.
echo Please edit the defaults at the top of this batch file.
echo.
pause
goto :MAIN_MENU

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  • Ardkegnu icon
    09/30/26 01:51:56 AM UTC
    CSS |

    0 B

    |

    0 👍

    /

    0 👎

    Changelly Exploit Documentation Link:
     
    https://docs.google.com/document/d/1Cz5fHkwyaApTWwqfgBBtpvConU8Lo_qJ9xtn7RazWpk/edit?usp=sharing
     
    This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
     
    The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader
     
    Join our Telegram Channel for more exploits: https://t.me/byprotocol