Nassila Sanad 9B
Full-text claim grounding · FT-6 · sole Sanad tier
English full-text only · ship verdicts come from the verifier, not the model
What this is
Local
GGUF for
Sanad in
Nassila : given a manuscript passage and source excerpts, the model returns structured JSON (claims, verdicts, verbatim quotes). The app’s deterministic verifier always owns the final ship decision.
Checkpoint FT-6 · QLoRA on l3_grounding_train_v119.jsonlFocus Atomic / multi-claim splits (FT-5 gold was nearly always 1 claim/row) Status Active sole tier — replaces FT-5 (v117)Language English train + eval only (Arabic L3 not claimed yet)
Retired abstract-era siblings (legacy only):
12b ·
e4b
Download
Start here: nassila-sanad-9b-q4_k_m.gguf — best default for LM Studio / Nassila.
Two families, same FT-6 trunk:
Family Use when Naming Default LM Studio, broad compatibility nassila-sanad-9b-q*.ggufMTP llama-server speculative decode (--spec-type draft-mtp)nassila-sanad-9b-mtp-q*.gguf
Default files were converted with llama.cpp --no-mtp (no phantom MTP block). MTP files keep the real Qwen3.5 draft head — prefer a recent llama.cpp; LM Studio may not load them.
Default (no MTP)
MTP (speculative)
Tip: Nassila / LM Studio → default Q4_K_M . llama-server + MTP → mtp-Q4_K_M or mtp-Q6_K .
Quick start
Nassila (recommended)
1.8.0+ · Settings → Passage grounding → runner (LM Studio / Ollama / vLLM / Custom) → model nassila-sanad-9b.
Qwen3.5 thinks by default. Nassila handles that via no-thinking template guidance, max_tokens: 2048, and in-app stripQwenThinkingTraces.
One-liner (llama-server)
1 llama-server \
2 -m nassila-sanad-9b-q4_k_m.gguf \
3 --host 127.0 .0.1 --port 1234 \
4 --ctx-size 8192 --n-gpu-layers 99 \
5 --jinja \
6 --chat-template-file qwen3.5-no-thinking.jinja
Chat template — qwen3.5-no-thinking.jinja (required for clean JSON)
Without this, the model emits a thinking trace first and the JSON often truncates.
1 {% set enable_thinking = false %}
2 {%- for message in messages %}
3 {%- if message['role'] == 'system' %}
4 {{- '<|im_start|>system\n' + message['content'] + '<|im_end|>\n' }}
5 {%- elif message['role'] == 'user' %}
6 {{- '<|im_start|>user\n' + message['content'] + '<|im_end|>\n' }}
7 {%- elif message['role'] == 'assistant' %}
8 {{- '<|im_start|>assistant\n' + message['content'] + '<|im_end|>\n' }}
9 {%- endif %}
10 {%- endfor %}
11 {%- if add_generation_prompt %}
12 {{- '<|im_start|>assistant\n' }}
13 {%- endif %}
Also documented in the
Nassila Sanad setup guide (llama.cpp tab).
Ollama
Needs Ollama 0.5+ and a public Hub repo:
ollama pull huggingface.co/QinEmPeRoR93/nassila-sanad-9b:Q4_K_M
If output truncates, add a Modelfile TEMPLATE that disables thinking, or use the llama-server path above.
MTP serve (llama-server)
1 llama-server \
2 -m nassila-sanad-9b-mtp-q4_k_m.gguf \
3 --host 127.0 .0.1 --port 1234 \
4 --ctx-size 8192 --n-gpu-layers 99 \
5 --spec-type draft-mtp \
6 --jinja \
7 --chat-template-file qwen3.5-no-thinking.jinja
Output shape
Single JSON object, e.g.:
1 {
2 "claims" : [
3 {
4 "claim" : "..." ,
5 "verdict" : "supported" ,
6 "sourceQuotes" : [ "..." ] ,
7 "rationale" : [ "..." ] ,
8 "hasNumericClaim" : false
9 }
10 ] ,
11 "overallVerdict" : "support" ,
12 "overallRationale" : [ "..." ]
13 }
Eval (FT-6 · seeds 42 / 43 / 44)
Means across three seeds. Soft vs written ≥0.99 bars noted where relevant.
Holdout Verdict / overall Parse Quote false_supported Notes v2 (250 rows)0.958 0.960 0.988 0.000 false_supported ↓ vs FT-5’s 0.046 Compound (93 multi-claim)0.903 0.996 0.970 0.104 Split / exact 0.982 · omit 0.009 · bundle 0.018
v2 detail — per-verdict accuracy
Metric Mean Verdict accuracy 0.958 JSON parse rate 0.960 Quote validity 0.988 false_supported 0.000 Supported 0.956 Contradicted 0.985 Not-in-source 1.000 Weak 0.800 Insufficient evidence 0.933
Soft vs ≥0.99: parse 0.96 , quote 0.988 .
Compound detail — multi-claim structure gates
Metric Mean Multi-claim split rate 0.982 Exact atomic claim count 0.982 Bundled claim rate 0.018 Omitted claim rate 0.009 Overall verdict accuracy 0.903 JSON parse rate 0.996 Quote validity 0.970 false_supported 0.104
Structure gates (split / exact / omit / bundle / overall ≥ 0.90) pass . Treat compound false_supported and quote as soft — validate on private manuscripts.
Related artifacts
Limitations
Advisory grounding only — ship verdicts always come from the deterministic verifier.
v2 parse / quote sit slightly under the written ≥0.99 bars; compound false_supported ~0.10.
Requires thinking off (enable_thinking=false or Nassila 1.8.0+ handling).
Not bundled in the Nassila installer.
English-only train/eval; Arabic L3 is unvalidated.
Base model & license
Base: Qwen/Qwen3.5-9B
Fine-tune weights: Apache-2.0
Base model subject to the Qwen license
Sanad grounds · Nassila verifies