# llama-swap config: two 1.2B specialists, swapped by the request's "model" # field. One model resident at a time (2-vCPU tier); a swap costs a ~1.3GB # mmap load (~5-10s), far cheaper than running the wrong specialist. # # lfm-thinking : LFM2.5-1.2B-Thinking — deliberate reasoning / decisions # lfm-tool : LFM2-1.2B-Tool — tool-call execution # # Shared tuning (mirrors the other Spaces): split KV cache quant K=q8_0/V=q4_0, # flash-attn on (required for quantized V), cache-reuse 256, 32K ctx / 2 slots. macros: common: > /llama.cpp/build/bin/llama-server --host 127.0.0.1 --port ${PORT} --threads 2 --threads-batch 2 --ctx-size 32768 --parallel 2 --batch-size 512 --ubatch-size 512 --cache-type-k q8_0 --cache-type-v q4_0 --flash-attn on --cache-reuse 256 --jinja --mmap models: lfm-thinking: # A thinking model dies inside on small budgets (measured: 512 was # exhausted mid-reasoning on trivial prompts). Strip the client's max_tokens # and enforce a 2048 default server-side; deepseek reasoning-format moves # text into reasoning_content so content carries only the answer. cmd: > ${common} --model /models/LFM2.5-1.2B-Thinking-Q8_0.gguf --reasoning-format deepseek --n-predict 2048 --alias lfm-thinking filters: strip_params: "max_tokens, max_completion_tokens" aliases: - thinking - decision lfm-tool: cmd: > ${common} --model /models/LFM2-1.2B-Tool-Q8_0.gguf --alias lfm-tool aliases: - tool - agent