Everything here is released openly. If it's useful to you and you'd like to support more open-source work on AI, a coffee goes a long way — entirely optional.
A compact cybersecurity and software-engineering assistant from FrostWolfAI Labs, for security testing, CTI, secure coding and agentic tool-use workflows. It is a full LoRA SFT fine-tune of Spark-X2.6-4B-abliterated, with the adapters merged into the weights.
v1.1 public release. Benchmarked — see Benchmarks. GGUF builds are available in the GGUF repo.
v1.1 now includes an additional agentic fine-tuning phase on top of the cybersecurity SFT. This phase trains the model to follow a full agentic tool-use loop — read the task, inspect with tools, act, observe each tool result, recover from errors, and give a final answer — rather than emitting one-shot answers. The base cyber/CTI/secure-coding knowledge from the first SFT phase is retained. Training/loss curves for both phases are in Training.
Evaluated in thinking mode (native), temperature 0.0, greedy single-sample, served as Q8_0 GGUF via llama.cpp at 232k context.
⚠️ Always run this model with thinking enabled. With thinking disabled it degrades severely — it echoes JSON instead of answering. Non-think scores are invalid for this model.
random = 25%, non-expert human = 34%, PhD expert = 65%
Agentic benchmarks (Terminal-Bench 2.1/4.0, DeepSWE, AutomationBench) are queued — results will be added to this card as they land.
Takeaways: strong cyber knowledge (CyberMetric ~85%) and CVE→CWE mapping (66.6%, GPT-4 territory) with solid CVSS severity estimation (MAD 1.54); extraction/attribution-style CTI tasks (ATE, TAA) are the weak spot — the agentic training makes the model emit tool calls on those prompt shapes instead of answering. Thinking mode is mandatory for this model.
The chat template supports a thinking channel. Control it per request with reasoning_effort:
off / none / false / 0 — thinking disabled, direct answer. Not recommended for this model — it was trained with thinking and degrades severely without it (see Benchmarks).
low (default) and high — thinking enabled. On a 4B these behave very similarly; treat it as on/off in practice.
A hard thinking-token ceiling is enforced at the server, not the template (see --reasoning-budget below). A budget is a ceiling, not a target: it truncates runaway thinking but does not make the model think longer.
GGUF builds are published in the GGUF repo. Serve them with llama.cpp's llama-server. The custom spark2_5 architecture is supported by llama.cpp's convert_hf_to_gguf.py converter.
The chat template must be supplied explicitly (--chat-template-file); it is included in this repo as chat_template.jinja.
2 parallel slots sharing a unified KV cache, so each slot can use the full -c window instead of -c / n_slots. Drop -kvu and each slot only gets half.
-c 232000
Context window. Native is 131k; 232k works via RoPE but validate quality past 131k for your use.
-ctk q8_0 -ctv q8_0
Quantized KV cache; keeps 232k affordable in VRAM.
--reasoning-budget 8192
Hard ceiling on thinking tokens (server-wide). -1 = unlimited, 0 = no thinking.
Do not use DRY or other repetition-penalty samplers with this model for agentic coding. They penalize repeated token sequences, but agentic coding requires reproducing file paths, identifiers and edit targets byte-for-byte — a repetition penalty mutates those verbatim strings (e.g. changes case, swaps an extension, inserts a space) and corrupts tool calls. If a small model falls into a repeat loop in your agent, break it at the client level (de-duplicate identical tool calls, cap steps per turn) and/or use a small sampling temperature (~0.3–0.4) rather than a sequence penalty.
VRAM, Q8_0 at 232k / 2 unified slots: about 12 GB. BF16 at the same settings: about 16 GB.
Continued from the Phase-1 weights on an internal set of agentic tool-use trajectories (not publicly released), trained whole-trace at a 16k window so the model learns the full loop in context.
Metric
Value
Epochs
3
Optimizer steps
168
Sequence length
16,384, wrapped packing
Learning rate
1e-4, cosine
Batch
1 × 8 grad accumulation (effective 8)
Final validation loss
0.5489
Final validation token accuracy
85.41%
Final validation entropy
0.515
Phase-2 curve (validation at checkpoints, train at log steps):
Step
Train loss
Train token acc
Val loss
Val token acc
10
0.8280
77.39%
—
—
50
0.7145
78.30%
—
—
100
0.7374
77.52%
0.5829
84.68%
150
0.6414
82.20%
—
—
168
~0.65
~78%
0.5489
85.41%
Validation loss tracked below train loss and improved monotonically to the end with no overfit — a clean learning signal for the agentic loop.
For authorized security testing, research, defense and education. This model has its refusals removed, so you are responsible for how you use it and for following applicable law.
Files
12 files · 8.23 GBWeights 8.22 GB (safetensors). Sizes and sha256 from the signed manifest.
import os
os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com"
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("FrostWolfAI/Frost-Cyber-Mini-Uncensored-v1.1", revision="52c578f25be327b8a6eefafb1ac3f278ad0eb67b")
model = AutoModelForCausalLM.from_pretrained("FrostWolfAI/Frost-Cyber-Mini-Uncensored-v1.1", revision="52c578f25be327b8a6eefafb1ac3f278ad0eb67b", device_map="auto")