sentinel / README.md
arkavo-paul's picture
Point the card at PR 680
10a7ac0 verified
|
Raw History Blame Contribute Delete
3.4 kB
---
license: apache-2.0
base_model: Qwen/Qwen3.5-0.8B
tags:
- gguf
- arkavo
- sentinel
- qwen3.5
- example
pipeline_tag: text-classification
---
# Arkavo sentinel (Northwind example)
One file. Classify a span as `public`, `internal`, or `confidential`.
This is a **worked example**, not a general DLP product. It was LoRA-fine-tuned on a fictional Northwind pack (thirteen source documents). TinyStories 15M was too small; this uses official **Qwen3.5-0.8B** (Apache-2.0, ~0.8B).
How it was trained: [arkavo-edge PR #680](https://github.com/arkavo-org/arkavo-edge/pull/680) (`scripts/distill/`).
## Download
```bash
hf download Arkavo/sentinel sentinel-qwen3.5-0.8b-northwind.gguf --local-dir .
```
Optional wrap (same bytes, KAS-gated, how a real pack ships):
```bash
hf download Arkavo/sentinel sentinel-qwen3.5-0.8b-northwind.gguf.tdf --local-dir .
```
## Run
With [llama.cpp](https://github.com/ggml-org/llama.cpp) `llama-cli`:
```bash
llama-cli -m sentinel-qwen3.5-0.8b-northwind.gguf --temp 0 -n 4 --no-jinja -p '<|im_start|>system
You are the Arkavo sentinel for the Northwind example pack. Classify the user'"'"'s text. Reply with exactly one word: public, internal, or confidential.<|im_end|>
<|im_start|>user
the northwind acquisition closes in the third quarter pending board approval<|im_end|>
<|im_start|>assistant
<think>
</think>
'
```
Expect `confidential`.
Or from a clone of arkavo-edge:
```bash
python scripts/distill/score_gguf.py \
--gguf sentinel-qwen3.5-0.8b-northwind.gguf \
--text "the northwind acquisition closes in the third quarter pending board approval"
```
## What it got right on this pack
Eval is fifteen rows. Train never saw two held-out sources (`board-valuation`, `public-talk`). The other eval rows are handwritten rewrites of train sources (not the slot-fill method used in train).
| Split | Correct |
|---|---|
| Rewrite of seen sources | 11 / 11 |
| Unseen verbatim | 2 / 2 |
| Unseen rewrite | 2 / 2 |
Probes outside the split (not a published FPR):
- Northwind canary β†’ confidential
- Spanish restatement of that canary β†’ confidential (not a translation guarantee)
- Photosynthesis textbook line β†’ public
- Pear recipe β†’ public
- Unrelated merger ("Atlas Freight / Helios") β†’ confidential β€” this example learned *deal language*, not only the name Northwind
## What this is not
- Not a trained detector of "any leak." The corpus is a dozen documents.
- Not a measured false-positive or recall number for a buyer.
- Not TinyStories. A 15M story model cannot do this job.
- Not wired into the 0.91.0 default binary. `taint` / `sentinel` stay off until you build with those features; this GGUF is the classifier weights for the example pack.
- Not certification.
The claim that holds: **a Qwen3.5-0.8B LoRA can emit the pack's three labels on in-domain Northwind text, including held-out documents and rewrites.** Full paraphrase in other words and a production corpus are later work.
## Files
| File | What |
|---|---|
| `sentinel-qwen3.5-0.8b-northwind.gguf` | Q8_0, language-only, MTP stripped (llama.cpp load) |
| `sentinel-qwen3.5-0.8b-northwind.gguf.tdf` | Same weights, OpenTDF wrap (`arkavo model protect`) |
| `calibration.json` | Detector / taxonomy ids used in the eval run |
Base model: [Qwen/Qwen3.5-0.8B](https://huggingface.co/Qwen/Qwen3.5-0.8B). Do not train a security classifier on a requant.