Spike is the in-browser assistant of Pieswap, the DEX on
the Dusk network. This model is a LoRA fine-tune of
LiquidAI/LFM2.5-350M,
specialized for Spike's tool-calling workload: swaps, wrapping, staking,
liquidity management, balances, pools, and app settings — in English, German,
and Dutch. It runs fully client-side via
wllama (llama.cpp WebAssembly).
Files
File
Use
Spike-350M-Q5_K_M.gguf (260 MB)
Production quant on desktop (pieswap.app)
Spike-350M-Q4_K_S.gguf (221 MB)
Production quant on mobile — smaller download, faster CPU prompt processing
Spike-350M-Q4_K_M.gguf (229 MB)
Alternative quant
Spike-350M-F16.gguf (709 MB)
Full-precision source for requantizing
pieswap.app serves Q5_K_M to desktop browsers and Q4_K_S to mobile devices:
mobile runs on CPU, where Q4_K_S processes the prompt about 1.7x faster and
downloads 15% less, at a negligible accuracy cost (see below).
Eval — v8 (Pieswap Spike harness, 354 cases)
Model
Score
LFM2.5-350M base (bf16, thinking off)
≈50% on the original core set
Spike-350M v7 (Q5_K_M, in-browser)
221/224 on the previous 224-case harness
Spike-350M v8 (bf16, merged)
354/354 (100%)
Spike-350M v8 (Q5_K_M, in-browser via wllama)
354/354 (100%) — under BOTH seeds 42 and 1337, zero flaky
Spike-350M v8 (Q4_K_S, in-browser via wllama)
353/354 — dual-seed; single miss is one out-of-distribution slang phrasing (a settings read routed to wallet-status)
The v8 harness grew from 224 to 354 held-out cases and now also covers:
prompt injection embedded in tool results (the model answers the user's
original question and ignores the smuggled instruction), send-to-address
scams (Pieswap has no transfer tool — the model says so instead of
hallucinating a call), disconnected-wallet gating incl. retry-after-refusal,
native-DUSK payout on liquidity removal (receiveNative), slippage
percent→bps conversion, fraction arithmetic chains ("a third of my dusk" —
balance read → exactly computed amount), spelled-out amounts ("one and a
half dusk"), price reads via pool ratio, creative slang for every tool, and
German/Dutch across the full surface.
Trained on a ≈14.9k-sample instruction dataset spanning distinct user
registers (terse/sloppy-typist, verbose, percentage flows, deep liquidity
management, wallet-gating contrastive pairs, German, Dutch, creative slang,
adversarial/injection, clarification and error recovery, multi-turn context),
extended with targeted sections addressing specific eval misses. LoRA r=64
all-linear on bf16, 2 epochs, completion-only loss, byte-identical to the
production chat template and message shapes (tool results re-fed as user
messages, assistant tool-call turns dropped).
Usage notes
The LFM2.5 base family supports optional reasoning via the
enable_thinking chat-template kwarg. This fine-tune was trained
entirely with thinking disabled — run it with
enable_thinking: false. Thinking-on still works mechanically but is
off-distribution for these weights (untrained thinking traces, untested
tool accuracy, extra latency).
Tool calls are emitted in LFM2.5's native format:
<|tool_call_start|>[execute_swap(tokenIn="DUSK", tokenOut="PIE", amountIn="10")]<|tool_call_end|>
— llama.cpp parses these into OpenAI-style tool calls when tools are passed.
The system prompt must carry the Pieswap wallet-status line
(Wallet status: connected (…) / Wallet status: not connected.) — the
wallet-gating behavior is conditioned on it.
The model is a narrow specialist for the Pieswap tool schema and system
prompt; it is not a general assistant.