41 KiB
created, id, keywords, links, modified, summary, tags, title
| created | id | keywords | links | modified | summary | tags | title | |||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2026-04-10T01:19:06+00:00 | c693060b-7794-4d1c-995d-53b6c951352c |
|
2026-04-10T01:19:06+00:00 | Comprehensive reference for llama-server (LLaMA.cpp HTTP Server) covering all command-line parameters (common, sampling, server-specific), API endpoints (native and OpenAI/Anthropic-compatible), router mode for multi-model serving, build instructions, and usage examples. |
|
LLaMA.cpp HTTP Server (llama-server) — Settings & API Reference |
LLaMA.cpp HTTP Server (llama-server)
Fast, lightweight, pure C/C++ HTTP server based on httplib, nlohmann::json and llama.cpp.
Set of LLM REST APIs and a web UI to interact with llama.cpp.
Features:
- LLM inference of F16 and quantized models on GPU and CPU
- OpenAI API compatible chat completions, responses, and embeddings routes
- Anthropic Messages API compatible chat completions
- Reranking endpoint (https://github.com/ggml-org/llama.cpp/pull/9510)
- Parallel decoding with multi-user support
- Continuous batching
- Multimodal (documentation) / with OpenAI-compatible API support
- Monitoring endpoints
- Schema-constrained JSON response format
- Prefilling of assistant messages similar to the Claude API
- Function calling / tool use for ~any model
- Speculative decoding
- Easy-to-use web UI
For the full list of features, please refer to server's changelog
Usage
Common params
| Argument | Explanation |
|---|---|
-h, --help, --usage |
print usage and exit |
--version |
show version and build info |
--license |
show source code license and dependencies |
-cl, --cache-list |
show list of models in cache |
--completion-bash |
print source-able bash completion script for llama.cpp |
-t, --threads N |
number of CPU threads to use during generation (default: -1) (env: LLAMA_ARG_THREADS) |
-tb, --threads-batch N |
number of threads to use during batch and prompt processing (default: same as --threads) |
-C, --cpu-mask M |
CPU affinity mask: arbitrarily long hex. Complements cpu-range (default: "") |
-Cr, --cpu-range lo-hi |
range of CPUs for affinity. Complements --cpu-mask |
--cpu-strict <0|1> |
use strict CPU placement (default: 0) |
--prio N |
set process/thread priority : low(-1), normal(0), medium(1), high(2), realtime(3) (default: 0) |
--poll <0...100> |
use polling level to wait for work (0 - no polling, default: 50) |
-Cb, --cpu-mask-batch M |
CPU affinity mask: arbitrarily long hex. Complements cpu-range-batch (default: same as --cpu-mask) |
-Crb, --cpu-range-batch lo-hi |
ranges of CPUs for affinity. Complements --cpu-mask-batch |
--cpu-strict-batch <0|1> |
use strict CPU placement (default: same as --cpu-strict) |
--prio-batch N |
set process/thread priority : 0-normal, 1-medium, 2-high, 3-realtime (default: 0) |
--poll-batch <0|1> |
use polling to wait for work (default: same as --poll) |
-c, --ctx-size N |
size of the prompt context (default: 0, 0 = loaded from model) (env: LLAMA_ARG_CTX_SIZE) |
-n, --predict, --n-predict N |
number of tokens to predict (default: -1, -1 = infinity) (env: LLAMA_ARG_N_PREDICT) |
-b, --batch-size N |
logical maximum batch size (default: 2048) (env: LLAMA_ARG_BATCH) |
-ub, --ubatch-size N |
physical maximum batch size (default: 512) (env: LLAMA_ARG_UBATCH) |
--keep N |
number of tokens to keep from the initial prompt (default: 0, -1 = all) |
--swa-full |
use full-size SWA cache (default: false) (env: LLAMA_ARG_SWA_FULL) |
-fa, --flash-attn [on|off|auto] |
set Flash Attention use ('on', 'off', or 'auto', default: 'auto') (env: LLAMA_ARG_FLASH_ATTN) |
--perf, --no-perf |
whether to enable internal libllama performance timings (default: false) (env: LLAMA_ARG_PERF) |
-e, --escape, --no-escape |
whether to process escapes sequences (\n, \r, \t, ', ", \) (default: true) |
--rope-scaling {none,linear,yarn} |
RoPE frequency scaling method, defaults to linear unless specified by the model (env: LLAMA_ARG_ROPE_SCALING_TYPE) |
--rope-scale N |
RoPE context scaling factor, expands context by a factor of N (env: LLAMA_ARG_ROPE_SCALE) |
--rope-freq-base N |
RoPE base frequency, used by NTK-aware scaling (default: loaded from model) (env: LLAMA_ARG_ROPE_FREQ_BASE) |
--rope-freq-scale N |
RoPE frequency scaling factor, expands context by a factor of 1/N (env: LLAMA_ARG_ROPE_FREQ_SCALE) |
--yarn-orig-ctx N |
YaRN: original context size of model (default: 0 = model training context size) (env: LLAMA_ARG_YARN_ORIG_CTX) |
--yarn-ext-factor N |
YaRN: extrapolation mix factor (default: -1.00, 0.0 = full interpolation) (env: LLAMA_ARG_YARN_EXT_FACTOR) |
--yarn-attn-factor N |
YaRN: scale sqrt(t) or attention magnitude (default: -1.00) (env: LLAMA_ARG_YARN_ATTN_FACTOR) |
--yarn-beta-slow N |
YaRN: high correction dim or alpha (default: -1.00) (env: LLAMA_ARG_YARN_BETA_SLOW) |
--yarn-beta-fast N |
YaRN: low correction dim or beta (default: -1.00) (env: LLAMA_ARG_YARN_BETA_FAST) |
-kvo, --kv-offload, -nkvo, --no-kv-offload |
whether to enable KV cache offloading (default: enabled) (env: LLAMA_ARG_KV_OFFLOAD) |
--repack, -nr, --no-repack |
whether to enable weight repacking (default: enabled) (env: LLAMA_ARG_REPACK) |
--no-host |
bypass host buffer allowing extra buffers to be used (env: LLAMA_ARG_NO_HOST) |
-ctk, --cache-type-k TYPE |
KV cache data type for K. Allowed: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1 (default: f16) (env: LLAMA_ARG_CACHE_TYPE_K) |
-ctv, --cache-type-v TYPE |
KV cache data type for V. Allowed: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1 (default: f16) (env: LLAMA_ARG_CACHE_TYPE_V) |
-dt, --defrag-thold N |
KV cache defragmentation threshold (DEPRECATED) (env: LLAMA_ARG_DEFRAG_THOLD) |
--mlock |
force system to keep model in RAM rather than swapping or compressing (env: LLAMA_ARG_MLOCK) |
--mmap, --no-mmap |
whether to memory-map model (if mmap disabled, slower load but may reduce pageouts if not using mlock) (default: enabled) (env: LLAMA_ARG_MMAP) |
-dio, --direct-io, -ndio, --no-direct-io |
use DirectIO if available (default: disabled) (env: LLAMA_ARG_DIO) |
--numa TYPE |
attempt optimizations that help on some NUMA systems. Options: distribute, isolate, numactl (env: LLAMA_ARG_NUMA) |
-dev, --device <dev1,dev2,..> |
comma-separated list of devices to use for offloading (none = don't offload) (env: LLAMA_ARG_DEVICE) |
--list-devices |
print list of available devices and exit |
-ot, --override-tensor <pattern>=<buffer type>,... |
override tensor buffer type (env: LLAMA_ARG_OVERRIDE_TENSOR) |
-cmoe, --cpu-moe |
keep all Mixture of Experts (MoE) weights in the CPU (env: LLAMA_ARG_CPU_MOE) |
-ncmoe, --n-cpu-moe N |
keep the MoE weights of the first N layers in the CPU (env: LLAMA_ARG_N_CPU_MOE) |
-ngl, --gpu-layers, --n-gpu-layers N |
max number of layers to store in VRAM: exact number, 'auto', or 'all' (default: auto) (env: LLAMA_ARG_N_GPU_LAYERS) |
-sm, --split-mode {none,layer,row} |
how to split model across multiple GPUs (default: layer) (env: LLAMA_ARG_SPLIT_MODE) |
-ts, --tensor-split N0,N1,N2,... |
fraction of model to offload to each GPU, comma-separated proportions (env: LLAMA_ARG_TENSOR_SPLIT) |
-mg, --main-gpu INDEX |
GPU to use for model or intermediate results (default: 0) (env: LLAMA_ARG_MAIN_GPU) |
-fit, --fit [on|off] |
whether to adjust unset arguments to fit in device memory (default: 'on') (env: LLAMA_ARG_FIT) |
-fitt, --fit-target MiB0,MiB1,... |
target margin per device for --fit, comma-separated (default: 1024) (env: LLAMA_ARG_FIT_TARGET) |
-fitc, --fit-ctx N |
minimum ctx size that can be set by --fit option (default: 4096) (env: LLAMA_ARG_FIT_CTX) |
--check-tensors |
check model tensor data for invalid values (default: false) |
--override-kv KEY=TYPE:VALUE,... |
override model metadata by key. Types: int, float, bool, str |
--op-offload, --no-op-offload |
whether to offload host tensor operations to device (default: true) |
--lora FNAME |
path to LoRA adapter (comma-separated for multiple) |
--lora-scaled FNAME:SCALE,... |
path to LoRA adapter with user defined scaling |
--control-vector FNAME |
add a control vector (comma-separated for multiple) |
--control-vector-scaled FNAME:SCALE,... |
add a control vector with user defined scaling |
--control-vector-layer-range START END |
layer range to apply the control vector(s) to |
-m, --model FNAME |
model path to load (env: LLAMA_ARG_MODEL) |
-mu, --model-url MODEL_URL |
model download url (env: LLAMA_ARG_MODEL_URL) |
-dr, --docker-repo [<repo>/]<model>[:quant] |
Docker Hub model repository (env: LLAMA_ARG_DOCKER_REPO) |
-hf, -hfr, --hf-repo <user>/<model>[:quant] |
Hugging Face model repository (env: LLAMA_ARG_HF_REPO) |
-hfd, -hfrd, --hf-repo-draft <user>/<model>[:quant] |
Same as --hf-repo, but for the draft model (env: LLAMA_ARG_HFD_REPO) |
-hff, --hf-file FILE |
Hugging Face model file, overrides quant in --hf-repo (env: LLAMA_ARG_HF_FILE) |
-hfv, -hfrv, --hf-repo-v <user>/<model>[:quant] |
Hugging Face model repository for vocoder model (env: LLAMA_ARG_HF_REPO_V) |
-hffv, --hf-file-v FILE |
Hugging Face model file for vocoder model (env: LLAMA_ARG_HF_FILE_V) |
-hft, --hf-token TOKEN |
Hugging Face access token (env: HF_TOKEN) |
--log-disable |
Log disable |
--log-file FNAME |
Log to file (env: LLAMA_LOG_FILE) |
--log-colors [on|off|auto] |
Set colored logging (default: 'auto') (env: LLAMA_LOG_COLORS) |
-v, --verbose, --log-verbose |
Set verbosity level to infinity |
--offline |
Offline mode: forces use of cache, prevents network access (env: LLAMA_OFFLINE) |
-lv, --verbosity, --log-verbosity N |
Set verbosity threshold. 0=generic, 1=error, 2=warning, 3=info, 4=debug (default: 3) (env: LLAMA_LOG_VERBOSITY) |
--log-prefix |
Enable prefix in log messages (env: LLAMA_LOG_PREFIX) |
--log-timestamps |
Enable timestamps in log messages (env: LLAMA_LOG_TIMESTAMPS) |
-ctkd, --cache-type-k-draft TYPE |
KV cache data type for K for the draft model (default: f16) (env: LLAMA_ARG_CACHE_TYPE_K_DRAFT) |
-ctvd, --cache-type-v-draft TYPE |
KV cache data type for V for the draft model (default: f16) (env: LLAMA_ARG_CACHE_TYPE_V_DRAFT) |
Sampling params
| Argument | Explanation |
|---|---|
--samplers SAMPLERS |
samplers used for generation, separated by ';' (default: penalties;dry;top_n_sigma;top_k;typ_p;top_p;min_p;xtc;temperature) |
-s, --seed SEED |
RNG seed (default: -1, use random seed for -1) |
--sampler-seq, --sampling-seq SEQUENCE |
simplified sequence for samplers (default: edskypmxt) |
--ignore-eos |
ignore end of stream token and continue generating |
--temp, --temperature N |
temperature (default: 0.80) |
--top-k N |
top-k sampling (default: 40, 0 = disabled) (env: LLAMA_ARG_TOP_K) |
--top-p N |
top-p sampling (default: 0.95, 1.0 = disabled) |
--min-p N |
min-p sampling (default: 0.05, 0.0 = disabled) |
--top-nsigma, --top-n-sigma N |
top-n-sigma sampling (default: -1.00, -1.0 = disabled) |
--xtc-probability N |
xtc probability (default: 0.00, 0.0 = disabled) |
--xtc-threshold N |
xtc threshold (default: 0.10, 1.0 = disabled) |
--typical, --typical-p N |
locally typical sampling, parameter p (default: 1.00, 1.0 = disabled) |
--repeat-last-n N |
last n tokens to consider for penalize (default: 64, 0 = disabled, -1 = ctx_size) |
--repeat-penalty N |
penalize repeat sequence of tokens (default: 1.00, 1.0 = disabled) |
--presence-penalty N |
repeat alpha presence penalty (default: 0.00, 0.0 = disabled) |
--frequency-penalty N |
repeat alpha frequency penalty (default: 0.00, 0.0 = disabled) |
--dry-multiplier N |
DRY sampling multiplier (default: 0.00, 0.0 = disabled) |
--dry-base N |
DRY sampling base value (default: 1.75) |
--dry-allowed-length N |
allowed length for DRY sampling (default: 2) |
--dry-penalty-last-n N |
DRY penalty for the last n tokens (default: -1, 0 = disable, -1 = context size) |
--dry-sequence-breaker STRING |
add sequence breaker for DRY sampling; use "none" for no breakers |
--adaptive-target N |
adaptive-p: select tokens near this probability (default: -1.00, disabled) |
--adaptive-decay N |
adaptive-p: decay rate for target adaptation (default: 0.90) |
--dynatemp-range N |
dynamic temperature range (default: 0.00, 0.0 = disabled) |
--dynatemp-exp N |
dynamic temperature exponent (default: 1.00) |
--mirostat N |
use Mirostat sampling (default: 0, 0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0) |
--mirostat-lr N |
Mirostat learning rate, parameter eta (default: 0.10) |
--mirostat-ent N |
Mirostat target entropy, parameter tau (default: 5.00) |
-l, --logit-bias TOKEN_ID(+/-)BIAS |
modifies the likelihood of token appearing in the completion |
--grammar GRAMMAR |
BNF-like grammar to constrain generations |
--grammar-file FNAME |
file to read grammar from |
-j, --json-schema SCHEMA |
JSON schema to constrain generations |
-jf, --json-schema-file FILE |
File containing a JSON schema to constrain generations |
-bs, --backend-sampling |
enable backend sampling (experimental) (env: LLAMA_ARG_BACKEND_SAMPLING) |
Server-specific params
| Argument | Explanation |
|---|---|
-lcs, --lookup-cache-static FNAME |
path to static lookup cache for lookup decoding |
-lcd, --lookup-cache-dynamic FNAME |
path to dynamic lookup cache for lookup decoding |
-ctxcp, --ctx-checkpoints, --swa-checkpoints N |
max context checkpoints per slot (default: 32) (env: LLAMA_ARG_CTX_CHECKPOINTS) |
-cpent, --checkpoint-every-n-tokens N |
checkpoint every n tokens during prefill (default: 8192) (env: LLAMA_ARG_CHECKPOINT_EVERY_NT) |
-cram, --cache-ram N |
maximum cache size in MiB (default: 8192, -1 = no limit, 0 = disable) (env: LLAMA_ARG_CACHE_RAM) |
-kvu, --kv-unified, -no-kvu, --no-kv-unified |
single unified KV buffer shared across all sequences (env: LLAMA_ARG_KV_UNIFIED) |
--clear-idle, --no-clear-idle |
save and clear idle slots on new task (default: enabled) (env: LLAMA_ARG_CLEAR_IDLE) |
--context-shift, --no-context-shift |
context shift on infinite text generation (default: disabled) (env: LLAMA_ARG_CONTEXT_SHIFT) |
-r, --reverse-prompt PROMPT |
halt generation at PROMPT |
-sp, --special |
special tokens output enabled (default: false) |
--warmup, --no-warmup |
perform warmup with empty run (default: enabled) |
--spm-infill |
use Suffix/Prefix/Middle pattern for infill (default: disabled) |
--pooling {none,mean,cls,last,rank} |
pooling type for embeddings (env: LLAMA_ARG_POOLING) |
-np, --parallel N |
number of server slots (default: -1, -1 = auto) (env: LLAMA_ARG_N_PARALLEL) |
-cb, --cont-batching, -nocb, --no-cont-batching |
continuous batching / dynamic batching (default: enabled) (env: LLAMA_ARG_CONT_BATCHING) |
-mm, --mmproj FILE |
path to multimodal projector file (env: LLAMA_ARG_MMPROJ) |
-mmu, --mmproj-url URL |
URL to multimodal projector file (env: LLAMA_ARG_MMPROJ_URL) |
--mmproj-auto, --no-mmproj, --no-mmproj-auto |
auto-detect multimodal projector (default: enabled) (env: LLAMA_ARG_MMPROJ_AUTO) |
--mmproj-offload, --no-mmproj-offload |
GPU offloading for multimodal projector (default: enabled) (env: LLAMA_ARG_MMPROJ_OFFLOAD) |
--image-min-tokens N |
minimum tokens per image for vision models with dynamic resolution (env: LLAMA_ARG_IMAGE_MIN_TOKENS) |
--image-max-tokens N |
maximum tokens per image for vision models with dynamic resolution (env: LLAMA_ARG_IMAGE_MAX_TOKENS) |
-otd, --override-tensor-draft <pattern>=<buffer type>,... |
override tensor buffer type for draft model |
-cmoed, --cpu-moe-draft |
keep all MoE weights in CPU for draft model (env: LLAMA_ARG_CPU_MOE_DRAFT) |
-ncmoed, --n-cpu-moe-draft N |
keep MoE weights of first N layers in CPU for draft model (env: LLAMA_ARG_N_CPU_MOE_DRAFT) |
-a, --alias STRING |
model name aliases, comma-separated (env: LLAMA_ARG_ALIAS) |
--tags STRING |
model tags, comma-separated (env: LLAMA_ARG_TAGS) |
--host HOST |
ip address to listen, or UNIX socket if ends with .sock (default: 127.0.0.1) (env: LLAMA_ARG_HOST) |
--port PORT |
port to listen (default: 8080) (env: LLAMA_ARG_PORT) |
--reuse-port |
allow multiple sockets to bind to same port (env: LLAMA_ARG_REUSE_PORT) |
--path PATH |
path to serve static files from (env: LLAMA_ARG_STATIC_PATH) |
--api-prefix PREFIX |
prefix path the server serves from (env: LLAMA_ARG_API_PREFIX) |
--webui-config JSON |
JSON for default WebUI settings (env: LLAMA_ARG_WEBUI_CONFIG) |
--webui-config-file PATH |
JSON file for default WebUI settings (env: LLAMA_ARG_WEBUI_CONFIG_FILE) |
--webui-mcp-proxy, --no-webui-mcp-proxy |
enable MCP CORS proxy - experimental, do not enable in untrusted environments (env: LLAMA_ARG_WEBUI_MCP_PROXY) |
--tools TOOL1,TOOL2,... |
enable built-in tools: read_file, file_glob_search, grep_search, exec_shell_command, write_file, edit_file, apply_diff (env: LLAMA_ARG_TOOLS) |
--webui, --no-webui |
enable the Web UI (default: enabled) (env: LLAMA_ARG_WEBUI) |
--embedding, --embeddings |
restrict to embedding use case only (env: LLAMA_ARG_EMBEDDINGS) |
--rerank, --reranking |
enable reranking endpoint (env: LLAMA_ARG_RERANKING) |
--api-key KEY |
API key(s) for authentication, comma-separated (env: LLAMA_API_KEY) |
--api-key-file FNAME |
path to file containing API keys |
--ssl-key-file FNAME |
PEM-encoded SSL private key (env: LLAMA_ARG_SSL_KEY_FILE) |
--ssl-cert-file FNAME |
PEM-encoded SSL certificate (env: LLAMA_ARG_SSL_CERT_FILE) |
--chat-template-kwargs STRING |
additional params for json template parser (env: LLAMA_CHAT_TEMPLATE_KWARGS) |
-to, --timeout N |
server read/write timeout in seconds (default: 600) (env: LLAMA_ARG_TIMEOUT) |
--threads-http N |
threads for HTTP request processing (default: -1) (env: LLAMA_ARG_THREADS_HTTP) |
--cache-prompt, --no-cache-prompt |
prompt caching (default: enabled) (env: LLAMA_ARG_CACHE_PROMPT) |
--cache-reuse N |
min chunk size for KV shifting cache reuse (default: 0) (env: LLAMA_ARG_CACHE_REUSE) |
--metrics |
enable prometheus compatible metrics endpoint (env: LLAMA_ARG_ENDPOINT_METRICS) |
--props |
enable changing global properties via POST /props (env: LLAMA_ARG_ENDPOINT_PROPS) |
--slots, --no-slots |
expose slots monitoring endpoint (default: enabled) (env: LLAMA_ARG_ENDPOINT_SLOTS) |
--slot-save-path PATH |
path to save slot kv cache |
--media-path PATH |
directory for loading local media files |
--models-dir PATH |
directory containing models for router server (env: LLAMA_ARG_MODELS_DIR) |
--models-preset PATH |
path to INI file containing model presets (env: LLAMA_ARG_MODELS_PRESET) |
--models-max N |
max models to load simultaneously in router (default: 4, 0 = unlimited) (env: LLAMA_ARG_MODELS_MAX) |
--models-autoload, --no-models-autoload |
auto-load models in router mode (default: enabled) (env: LLAMA_ARG_MODELS_AUTOLOAD) |
--jinja, --no-jinja |
use jinja template engine for chat (default: enabled) (env: LLAMA_ARG_JINJA) |
--reasoning-format FORMAT |
thought tag handling: none, deepseek, deepseek-legacy (default: auto) (env: LLAMA_ARG_THINK) |
-rea, --reasoning [on|off|auto] |
reasoning/thinking in chat (default: auto) (env: LLAMA_ARG_REASONING) |
--reasoning-budget N |
token budget for thinking: -1 unrestricted, 0 immediate end, N>0 budget (default: -1) (env: LLAMA_ARG_THINK_BUDGET) |
--reasoning-budget-message MESSAGE |
message injected when reasoning budget exhausted (env: LLAMA_ARG_THINK_BUDGET_MESSAGE) |
--chat-template JINJA_TEMPLATE |
custom jinja chat template or built-in name (env: LLAMA_ARG_CHAT_TEMPLATE) |
--chat-template-file JINJA_TEMPLATE_FILE |
custom jinja chat template file (env: LLAMA_ARG_CHAT_TEMPLATE_FILE) |
--skip-chat-parsing, --no-skip-chat-parsing |
force pure content parser (env: LLAMA_ARG_SKIP_CHAT_PARSING) |
--prefill-assistant, --no-prefill-assistant |
prefill assistant response (default: enabled) (env: LLAMA_ARG_PREFILL_ASSISTANT) |
-sps, --slot-prompt-similarity SIMILARITY |
prompt similarity threshold for slot reuse (default: 0.10) |
--lora-init-without-apply |
load LoRA adapters without applying |
--sleep-idle-seconds SECONDS |
seconds of idleness before server sleeps (default: -1, disabled) |
-td, --threads-draft N |
threads for draft model generation |
-tbd, --threads-batch-draft N |
threads for draft model batch processing |
--draft, --draft-n, --draft-max N |
tokens to draft for speculative decoding (default: 16) (env: LLAMA_ARG_DRAFT_MAX) |
--draft-min, --draft-n-min N |
minimum draft tokens for speculative decoding (default: 0) (env: LLAMA_ARG_DRAFT_MIN) |
--draft-p-min P |
minimum speculative decoding probability (default: 0.75) (env: LLAMA_ARG_DRAFT_P_MIN) |
-cd, --ctx-size-draft N |
prompt context size for draft model (env: LLAMA_ARG_CTX_SIZE_DRAFT) |
-devd, --device-draft <dev1,dev2,..> |
devices for draft model offloading |
-ngld, --gpu-layers-draft N |
draft model GPU layers (default: auto) (env: LLAMA_ARG_N_GPU_LAYERS_DRAFT) |
-md, --model-draft FNAME |
draft model for speculative decoding (env: LLAMA_ARG_MODEL_DRAFT) |
--spec-replace TARGET DRAFT |
translate strings between main and draft model |
--spec-type [none|ngram-cache|ngram-simple|ngram-map-k|ngram-map-k4v|ngram-mod] |
speculative decoding type without draft model (env: LLAMA_ARG_SPEC_TYPE) |
--spec-ngram-size-n N |
ngram size N for ngram speculative decoding (default: 12) |
--spec-ngram-size-m N |
ngram size M for ngram speculative decoding (default: 48) |
--spec-ngram-min-hits N |
minimum hits for ngram-map speculative decoding (default: 1) |
-mv, --model-vocoder FNAME |
vocoder model for audio generation |
--tts-use-guide-tokens |
Use guide tokens to improve TTS word recall |
--embd-gemma-default |
use default EmbeddingGemma model |
--fim-qwen-1.5b-default |
use default Qwen 2.5 Coder 1.5B |
--fim-qwen-3b-default |
use default Qwen 2.5 Coder 3B |
--fim-qwen-7b-default |
use default Qwen 2.5 Coder 7B |
--fim-qwen-7b-spec |
use Qwen 2.5 Coder 7B + 0.5B draft |
--fim-qwen-14b-spec |
use Qwen 2.5 Coder 14B + 0.5B draft |
--fim-qwen-30b-default |
use default Qwen 3 Coder 30B A3B Instruct |
--gpt-oss-20b-default |
use gpt-oss-20b |
--gpt-oss-120b-default |
use gpt-oss-120b |
--vision-gemma-4b-default |
use Gemma 3 4B QAT |
--vision-gemma-12b-default |
use Gemma 3 12B QAT |
Environment Variables
If both command line argument and environment variable are set for the same param, the argument takes precedence.
For boolean options like --mmap or --kv-offload, environment variable handling:
LLAMA_ARG_MMAP=true/1/on/enabled→ enabledLLAMA_ARG_MMAP=false/0/off/disabled→ disabled- Presence of
LLAMA_ARG_NO_MMAP→ disabled
Docker Compose Example
services:
llamacpp-server:
image: ghcr.io/ggml-org/llama.cpp:server
ports:
- 8080:8080
volumes:
- ./models:/models
environment:
LLAMA_ARG_MODEL: /models/my_model.gguf
LLAMA_ARG_CTX_SIZE: 4096
LLAMA_ARG_N_PARALLEL: 2
LLAMA_ARG_ENDPOINT_METRICS: 1
LLAMA_ARG_PORT: 8080
Multimodal Support
Multimodal support is currently an experimental feature. Available in:
- OAI-compatible chat endpoint
- Non-OAI-compatible completions endpoint
- Non-OAI-compatible embeddings endpoint
The multimodal projector is auto-detected when using -hf. Use --no-mmproj to disable.
Built-in Tools
Built-in tools enable the LLM to access the local file system from the Web UI. Start with --tools all or specify individual tools: --tools read_file,file_glob_search,....
Available tools: read_file, file_glob_search, grep_search, exec_shell_command, write_file, edit_file, apply_diff
⚠️ Do not enable in untrusted environments.
Build
Standard Build
cmake -B build
cmake --build build --config Release -t llama-server
Binary: ./build/bin/llama-server
Build with SSL (OpenSSL 3)
cmake -B build -DLLAMA_OPENSSL=ON
cmake --build build --config Release -t llama-server
Quick Start
Unix (Linux, macOS)
./llama-server -m models/7B/ggml-model.gguf -c 2048
Windows
llama-server.exe -m models\7B\ggml-model.gguf -c 2048
Listens on 127.0.0.1:8080 by default.
Docker
docker run -p 8080:8080 -v /path/to/models:/models ghcr.io/ggml-org/llama.cpp:server -m models/7B/ggml-model.gguf -c 512 --host 0.0.0.0 --port 8080
# With CUDA:
docker run -p 8080:8080 -v /path/to/models:/models --gpus all ghcr.io/ggml-org/llama.cpp:server-cuda -m models/7B/ggml-model.gguf -c 512 --host 0.0.0.0 --port 8080 --n-gpu-layers 99
Using with cURL
curl --request POST \
--url http://localhost:8080/completion \
--header "Content-Type: application/json" \
--data '{"prompt": "Building a website can be done in 10 simple steps:","n_predict": 128}'
API Endpoints
GET /health — Health Check
Public endpoint (no API key). /v1/health also works.
- 503:
{"error": {"code": 503, "message": "Loading model", "type": "unavailable_error"}} - 200:
{"status": "ok"}
POST /completion — Text Completion
⚠️ Not OAI-compatible. Use
/v1/completionsfor OAI clients.
Request options:
| Field | Type | Default | Description |
|---|---|---|---|
prompt |
string/array/object | required | Prompt as string, token array, mixed, or JSON with multimodal data |
temperature |
float | 0.8 | Randomness of generated text |
dynatemp_range |
float | 0.0 | Dynamic temperature range |
dynatemp_exponent |
float | 1.0 | Dynamic temperature exponent |
top_k |
int | 40 | Limit to K most probable tokens |
top_p |
float | 0.95 | Nucleus sampling threshold |
min_p |
float | 0.05 | Minimum probability relative to most likely token |
n_predict |
int | -1 | Max tokens to predict (-1 = infinity) |
n_indent |
int | 0 | Min line indentation (for code completion) |
n_keep |
int | 0 | Tokens to retain when context exceeded (-1 = all) |
n_cmpl |
int | - | Number of completions per prompt |
n_cache_reuse |
int | 0 | Min chunk size for KV shifting cache reuse |
stream |
bool | false | Stream tokens in real-time via SSE |
stop |
array | [] | Stopping strings (not included in output) |
typical_p |
float | 1.0 | Locally typical sampling parameter |
repeat_penalty |
float | 1.1 | Repetition penalty |
repeat_last_n |
int | 64 | Tokens to consider for repeat penalty |
presence_penalty |
float | 0.0 | Presence penalty |
frequency_penalty |
float | 0.0 | Frequency penalty |
dry_multiplier |
float | 0.0 | DRY repetition penalty multiplier |
dry_base |
float | 1.75 | DRY penalty base |
dry_allowed_length |
int | 2 | DRY allowed repeating length |
dry_penalty_last_n |
int | -1 | Tokens to scan for DRY |
dry_sequence_breakers |
array | ['\n',':','"','*'] | DRY sequence breakers |
xtc_probability |
float | 0.0 | XTC token removal chance |
xtc_threshold |
float | 0.1 | XTC minimum probability threshold |
mirostat |
int | 0 | Mirostat mode (0=off, 1, 2) |
mirostat_tau |
float | 5.0 | Mirostat target entropy |
mirostat_eta |
float | 0.1 | Mirostat learning rate |
grammar |
string | - | BNF grammar for constrained generation |
json_schema |
object | - | JSON schema for constrained generation |
seed |
int | -1 | RNG seed (-1 = random) |
ignore_eos |
bool | false | Ignore EOS token |
logit_bias |
array/object | [] | Modify token likelihoods |
n_probs |
int | 0 | Return top N token probabilities |
min_keep |
int | 0 | Force minimum tokens from samplers |
t_max_predict_ms |
int | 0 | Time limit for prediction phase (ms) |
id_slot |
int | -1 | Assign to specific slot |
cache_prompt |
bool | true | Re-use KV cache from previous request |
return_tokens |
bool | false | Return raw token IDs |
samplers |
array | [dry,top_k,typ_p,top_p,min_p,xtc,temperature] | Sampler order |
timings_per_token |
bool | false | Include speed info per token |
return_progress |
bool | false | Include prompt processing progress in stream mode |
post_sampling_probs |
bool | false | Return probabilities after sampling |
response_fields |
array | - | List of specific response fields to return |
lora |
array | - | Per-request LoRA adapters: [{"id": 0, "scale": 0.5}] |
Prompt input shapes:
- Single string:
"string" - Single token sequence:
[12, 34, 56] - Mixed tokens and strings:
[12, 34, "string", 56, 78] - JSON object with multimodal:
{"prompt_string": "string", "multimodal_data": ["base64"]} - Multiple prompts:
["string1", "string2"]
Response format:
{
"content": "<generated text>",
"tokens": [],
"stop": true,
"stop_type": "eos|limit|word|none",
"stopping_word": "",
"completion_probabilities": [...],
"generation_settings": {...},
"model": "<alias>",
"prompt": "<processed prompt>",
"tokens_cached": 0,
"tokens_evaluated": 0,
"truncated": false,
"timings": {...}
}
POST /tokenize — Tokenize Text
Options:
| Field | Type | Default | Description |
|---|---|---|---|
content |
string | required | Text to tokenize |
add_special |
bool | false | Insert special tokens (BOS) |
parse_special |
bool | true | Parse special tokens |
with_pieces |
bool | false | Return token pieces with IDs |
Response:
Without pieces: {"tokens": [123, 456, 789]}
With pieces: {"tokens": [{"id": 123, "piece": "Hello"}, ...]}
POST /detokenize — Convert Tokens to Text
Options:
| Field | Type | Description |
|---|---|---|
tokens |
array | Token IDs to detokenize |
POST /apply-template — Apply Chat Template
Formats chat messages to a single prompt string without performing inference.
Options:
| Field | Type | Description |
|---|---|---|
messages |
array | Chat turns (same format as /v1/chat/completions) |
Response: {"prompt": "<formatted string>"}
POST /embedding — Generate Embedding
⚠️ Not OAI-compatible. Use
/v1/embeddingsfor OAI clients.
Supports multimodal embeddings.
Options:
| Field | Type | Description |
|---|---|---|
content |
string | Text to embed |
embd_normalize |
int | -1=none, 0=max abs, 1=taxicab, 2=euclidean, >2=p-norm |
POST /reranking — Rerank Documents
Aliases: /rerank, /v1/rerank, /v1/reranking
Requires reranker model with --embedding --pooling rank.
Options:
| Field | Type | Description |
|---|---|---|
query |
string | Query to rank against |
documents |
array | Array of document strings |
top_n |
int | Top N results |
Example:
curl http://127.0.0.1:8012/v1/rerank \
-H "Content-Type: application/json" \
-d '{
"model": "some-model",
"query": "What is panda?",
"top_n": 3,
"documents": ["hi", "it is a bear", "The giant panda..."]
}'
POST /infill — Code Infilling
Takes prefix and suffix, returns predicted completion.
Options:
| Field | Type | Description |
|---|---|---|
input_prefix |
string | Code prefix |
input_suffix |
string | Code suffix |
input_extra |
array | Additional context: [{"filename": "...", "text": "..."}] |
prompt |
string | Added after FIM_MID token |
Also accepts all /completion options.
Repo-level pattern (if model has FIM_REPO and FIM_FILE_SEP):
<FIM_REP>myproject
<FIM_SEP>{chunk filename}
{chunk text}
...
<FIM_SEP>filename
<FIM_PRE>[prefix]<FIM_SUF>[suffix]<FIM_MID>[prompt]
GET /props — Server Properties
Returns server global properties including default generation settings, model path, chat template, modalities, and build info.
Enable POST modification with --props.
Response includes:
default_generation_settings— default params for/completiontotal_slots— number of parallel slotsmodel_path— model file pathchat_template— Jinja2 templatechat_template_caps— template capabilitiesmodalities— supported modalitiesis_sleeping— sleep mode status
GET /slots — Slot Monitoring
Returns per-slot processing state, metrics, speed, tokens, sampling parameters.
Disable with --no-slots.
Query param ?fail_on_no_slot=1 returns 503 if no slots available.
GET /metrics — Prometheus Metrics
Enable with --metrics.
Available metrics:
llamacpp:prompt_tokens_total— prompt tokens processedllamacpp:tokens_predicted_total— generation tokens processedllamacpp:prompt_tokens_seconds— avg prompt throughput (tokens/s)llamacpp:predicted_tokens_seconds— avg generation throughput (tokens/s)llamacpp:kv_cache_usage_ratio— KV-cache usage (1 = 100%)llamacpp:kv_cache_tokens— KV-cache tokensllamacpp:requests_processing— requests currently processingllamacpp:requests_deferred— requests deferredllamacpp:n_tokens_max— high watermark context size
POST /slots/{id_slot}?action=save — Save Slot Cache
Options: filename — file name (saved in --slot-save-path)
Response: {"id_slot": 0, "filename": "...", "n_saved": N, "n_written": N, "timings": {...}}
POST /slots/{id_slot}?action=restore — Restore Slot Cache
Options: filename — file to restore from --slot-save-path
POST /slots/{id_slot}?action=erase — Erase Slot Cache
Response: {"id_slot": 0, "n_erased": N}
GET /lora-adapters — List LoRA Adapters
Returns loaded LoRA adapters with id, path, and scale.
POST /lora-adapters — Set LoRA Adapter Scales
Sets global scale for LoRA adapters. Overridden by per-request lora field.
[{"id": 0, "scale": 0.2}, {"id": 1, "scale": 0.8}]
OpenAI-Compatible API Endpoints
GET /v1/models — Model Info
Returns loaded model information. Always returns single-element list.
id defaults to model file path; override with --alias.
POST /v1/completions — OAI Completions
Standard OpenAI Completions API. Supports llama.cpp-specific features like mirostat.
Example (Python):
import openai
client = openai.OpenAI(
base_url="http://localhost:8080/v1",
api_key="sk-no-key-required"
)
completion = client.completions.create(
model="davinci-002",
prompt="I believe the meaning of life is",
max_tokens=8
)
POST /v1/chat/completions — OAI Chat Completions
Supports ChatML-formatted messages, streaming, function calling, tool use, reasoning, and multimodal input.
Response includes timings object:
cache_n— prompt tokens reused from cacheprompt_n— prompt tokens being processedpredicted_n— predicted tokens
Total context tokens = prompt_n + cache_n + predicted_n
Additional options:
response_format— JSON output with optional schemachat_template_kwargs— additional template parametersreasoning_format— reasoning parsing modegeneration_prompt— prefilled generation promptparse_tool_calls— parse tool callsparallel_tool_calls— enable parallel tool calls
Example:
client = openai.OpenAI(base_url="http://localhost:8080/v1", api_key="sk-no-key-required")
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are ChatGPT..."},
{"role": "user", "content": "Write a limerick about python exceptions"}
]
)
POST /v1/responses — OAI Responses API
Converts Responses request into Chat Completions request internally.
Example:
response = client.responses.create(
model="gpt-4.1",
instructions="You are ChatGPT...",
input="Write a limerick about python exceptions"
)
POST /v1/embeddings — OAI Embeddings
Requires model with pooling type other than none. Embeddings normalized using Euclidean norm.
Supports string or array of strings as input.
POST /v1/messages — Anthropic-Compatible Messages API
Supports streaming via SSE. Tool use requires --jinja.
Options:
| Field | Type | Description |
|---|---|---|
model |
string | Model identifier (required) |
messages |
array | Message objects with role and content (required) |
max_tokens |
int | Max tokens to generate (default: 4096) |
system |
string/array | System prompt |
temperature |
float | Sampling temperature 0-1 (default: 1.0) |
top_p |
float | Nucleus sampling (default: 1.0) |
top_k |
int | Top-k sampling |
stop_sequences |
array | Stop sequences |
stream |
bool | Enable streaming (default: false) |
tools |
array | Tool definitions |
tool_choice |
object | {"type": "auto"} / {"type": "any"} / {"type": "tool", "name": "..."} |
POST /v1/messages/count_tokens — Token Counting
Counts tokens without generating. Same params as /v1/messages except max_tokens.
Response: {"input_tokens": 10}
Multiple Models (Router Mode)
Launch without specifying a model to enter router mode:
llama-server
Model Sources
- Cached models (controlled by
LLAMA_CACHEenv var) - Custom directory (
--models-dir) - Custom preset (
--models-preset)
Add Hugging Face models to cache:
llama-server -hf <user>/<model>:<tag>
Directory Structure for --models-dir
models_directory/
├─ llama-3.2-1b-Q4_K_M.gguf # single file
├─ Qwen3-8B-Q4_K_M.gguf # single file
├─ gemma-3-4b-it-Q8_0/ # multimodal
│ ├─ gemma-3-4b-it-Q8_0.gguf
│ └─ mmproj-F16.gguf
├─ Kimi-K2-Thinking-UD-IQ1_S/ # multi-shard
│ ├─ ...-00001-of-00006.gguf
│ └─ ...-00006-of-00006.gguf
Model Presets (INI File)
version = 1
[*]
c = 8192
n-gpu-layers = 8
[ggml-org/MY-MODEL-GGUF:Q8_0]
chat-template = chatml
n-gpu-layers = 123
jinja = true
c = 4096
[custom_model]
model = /path/to/my-awesome-model-Q4_K_M.gguf
Precedence: CLI args > model-specific preset > global preset [*]
Preset-exclusive options:
load-on-startup(bool) — auto-load on server startstop-timeout(int, seconds) — wait before forcing termination (default: 10)
Routing
POST endpoints use "model" field in JSON body. GET endpoints use model query parameter.
Auto-load can be disabled with --no-models-autoload or per-request ?autoload=true|false.
Router API Endpoints
GET /models — List Available Models
Returns all models with status (loaded, loading, sleeping, unloaded, failed).
POST /models/load — Load a Model
{"model": "ggml-org/gemma-3-4b-it-GGUF:Q4_K_M"}
POST /models/unload — Unload a Model
{"model": "ggml-org/gemma-3-4b-it-GGUF:Q4_K_M"}
Error Format
Errors follow the OpenAI format:
{
"error": {
"code": 401,
"message": "Invalid API Key",
"type": "authentication_error"
}
}
Custom error types:
not_supported_error(501) — disabled endpointinvalid_request_error(400) — invalid grammar
Sleeping on Idle
Enable with --sleep-idle-seconds N. Unloads model and KV cache after N seconds of inactivity. Any new task triggers reload.
Exempt endpoints (don't trigger reload or reset timer): /health, /props, /models
Check status via GET /props (is_sleeping field).
Web UI
Custom Default Preferences
./llama-server -m model.gguf --webui-config '{"pasteLongTextToFileLen": 0, "renderUserContentAsMarkdown": true}'
Legacy Completion UI
./llama-server -m my_model.gguf -c 8192 --path ./tools/server/public_legacy
Custom Front End
Serve from --path ./your-directory and import /completion.js for llamaComplete().
<html>
<body>
<pre>
<script type="module">
import { llama } from '/completion.js'
for await (const chunk of llama("Your prompt here")) {
document.write(chunk.data.content)
}
</script>
</pre>
</body>
</html>