CoolFace
Modelpublic

QinEmPeRoR93/nassila-sanad-9b

sourceHugging Faceapache-2.0updated 1mo agoView on Hugging Face
0likes748downloads
Model Card

<div align="center">

Nassila Sanad 9B

Full-text claim grounding · FT-6 · sole Sanad tier

![License](https://huggingface.co/QinEmPeRoR93/nassila-sanad-9b) ![Base](https://huggingface.co/Qwen/Qwen3.5-9B) ![Format](#download) ![App](https://github.com/jamalesam93/Nassila)

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.

CheckpointFT-6 · QLoRA on l3_grounding_train_v119.jsonl
FocusAtomic / multi-claim splits (FT-5 gold was nearly always 1 claim/row)
StatusActive sole tier — replaces FT-5 (v117)
LanguageEnglish 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:

FamilyUse whenNaming
DefaultLM Studio, broad compatibilitynassila-sanad-9b-q*.gguf
MTPllama-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)

QuantFile~SizeFits in
Q2_K`…-q2_k.gguf`3.6 GB4 GB VRAM / 8 GB RAM
Q3KM`…-q3_k_m.gguf`4.3 GB6 GB VRAM / 8 GB RAM
Q4_K_M`…-q4_k_m.gguf`5.2 GB8 GB VRAM / 12 GB RAM
Q5KM`…-q5_k_m.gguf`6.0 GB8 GB VRAM / 16 GB RAM
Q6_K`…-q6_k.gguf`6.9 GB10 GB+ VRAM
Q8_0`…-q8_0.gguf`8.9 GB12 GB+ VRAM

MTP (speculative)

QuantFile~Size
Q2_K`…-mtp-q2_k.gguf`3.9 GB
Q3KM`…-mtp-q3_k_m.gguf`4.7 GB
Q4_K_M`…-mtp-q4_k_m.gguf`5.8 GB
Q5KM`…-mtp-q5_k_m.gguf`6.6 GB
Q6_K`…-mtp-q6_k.gguf`7.6 GB
Q8_0`…-mtp-q8_0.gguf`9.8 GB
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)

bash
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.

jinja
{% 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:

bash
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.

</details>

<details> <summary><b>MTP serve</b> (<code>llama-server</code>)</summary>

bash
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.:

json
{
  "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.

HoldoutVerdict / overallParseQuotefalse_supportedNotes
v2 (250 rows)0.9580.9600.9880.000false_supported ↓ vs FT-5’s 0.046
Compound (93 multi-claim)0.9030.9960.9700.104Split / exact 0.982 · omit 0.009 · bundle 0.018

<details> <summary><b>v2 detail</b> — per-verdict accuracy</summary>

MetricMean
Verdict accuracy0.958
JSON parse rate0.960
Quote validity0.988
false_supported0.000
Supported0.956
Contradicted0.985
Not-in-source1.000
Weak0.800
Insufficient evidence0.933

Soft vs ≥0.99: parse 0.96, quote 0.988.

</details>

<details> <summary><b>Compound detail</b> — multi-claim structure gates</summary>

MetricMean
Multi-claim split rate0.982
Exact atomic claim count0.982
Bundled claim rate0.018
Omitted claim rate0.009
Overall verdict accuracy0.903
JSON parse rate0.996
Quote validity0.970
false_supported0.104

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

ArtifactLink
Desktop appNassila

<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=false or 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>

</details>

<div align="center">

Sanad grounds · Nassila verifies

</div>