QinEmPeRoR93/nassila-sanad-9b
<div align="center">
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
</div>
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.
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:
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)
llama-server \
-m nassila-sanad-9b-q4_k_m.gguf \
--host 127.0.0.1 --port 1234 \
--ctx-size 8192 --n-gpu-layers 99 \
--jinja \
--chat-template-file qwen3.5-no-thinking.jinja<details> <summary><b>Chat template</b> — <code>qwen3.5-no-thinking.jinja</code> (required for clean JSON)</summary>
Without this, the model emits a thinking trace first and the JSON often truncates.
{% set enable_thinking = false %}
{%- for message in messages %}
{%- if message['role'] == 'system' %}
{{- '<|im_start|>system\n' + message['content'] + '<|im_end|>\n' }}
{%- elif message['role'] == 'user' %}
{{- '<|im_start|>user\n' + message['content'] + '<|im_end|>\n' }}
{%- elif message['role'] == 'assistant' %}
{{- '<|im_start|>assistant\n' + message['content'] + '<|im_end|>\n' }}
{%- endif %}
{%- endfor %}
{%- if add_generation_prompt %}
{{- '<|im_start|>assistant\n' }}
{%- endif %}Also documented in the Nassila Sanad setup guide (llama.cpp tab).
</details>
<details> <summary><b>Ollama</b></summary>
Needs Ollama 0.5+ and a public Hub repo:
ollama pull huggingface.co/QinEmPeRoR93/nassila-sanad-9b:Q4_K_MIf output truncates, add a Modelfile TEMPLATE that disables thinking, or use the llama-server path above.
</details>
<details> <summary><b>MTP serve</b> (<code>llama-server</code>)</summary>
llama-server \
-m nassila-sanad-9b-mtp-q4_k_m.gguf \
--host 127.0.0.1 --port 1234 \
--ctx-size 8192 --n-gpu-layers 99 \
--spec-type draft-mtp \
--jinja \
--chat-template-file qwen3.5-no-thinking.jinja</details>
Output shape
Single JSON object, e.g.:
{
"claims": [
{
"claim": "...",
"verdict": "supported",
"sourceQuotes": ["..."],
"rationale": ["..."],
"hasNumericClaim": false
}
],
"overallVerdict": "support",
"overallRationale": ["..."]
}Eval (FT-6 · seeds 42 / 43 / 44)
Means across three seeds. Soft vs written ≥0.99 bars noted where relevant.
<details> <summary><b>v2 detail</b> — per-verdict accuracy</summary>
Soft vs ≥0.99: parse 0.96, quote 0.988.
</details>
<details> <summary><b>Compound detail</b> — multi-claim structure gates</summary>
Structure gates (split / exact / omit / bundle / overall ≥ 0.90) pass. Treat compound false_supported and quote as soft — validate on private manuscripts.
</details>
Related artifacts
<details> <summary><b>Limitations</b></summary>
- 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=falseor Nassila 1.8.0+ handling). - Not bundled in the Nassila installer.
- English-only train/eval; Arabic L3 is unvalidated.
</details>
<details> <summary><b>Base model & license</b></summary>
- Base: `Qwen/Qwen3.5-9B`
- Fine-tune weights: Apache-2.0
- Base model subject to the Qwen license
</details>
<div align="center">
Sanad grounds · Nassila verifies
</div>
