junafinity's picture
Ornith 1.5 9B uncensored β€” full-precision abliterated weights (vision preserved)
55e0a71 verified
|
Raw
History Blame Contribute Delete
5.22 kB
---
license: apache-2.0
base_model: ornith-ai/Ornith-1.5-9B
library_name: transformers
pipeline_tag: image-text-to-text
tags:
- ornith
- qwen3_5
- abliterated
- uncensored
- zerofuse
- multimodal
- vision
---
# Ornith-1.5-9B-uncensored
An **abliterated** (refusal-direction-ablated) build of
[`ornith-ai/Ornith-1.5-9B`](https://huggingface.co/ornith-ai/Ornith-1.5-9B), produced with
[ZeroFuse](https://github.com/junainfinity/ZeroFuse) and published by
[junafinity](https://huggingface.co/junafinity).
**Vision tower and MTP heads are preserved** β€” see
[Vision & MTP preservation](#vision--mtp-preservation) for the before/after audit.
## Variants in this family
| Model | Base | Format | Precision | Notes |
|---|---|---|---|---|
| **Ornith-1.5-9B-uncensored** ← *you are here* | Ornith-1.5-9B | Safetensors (bf16) | 16-bit | Full-precision abliterated weights |
| [Ornith-1.5-9B-uncensored-MLX-8bit](https://huggingface.co/junafinity/Ornith-1.5-9B-uncensored-MLX-8bit) | Ornith-1.5-9B | MLX | 8-bit | Apple-silicon MLX build |
| [Ornith-1.5-9B-uncensored-GGUF-8bit](https://huggingface.co/junafinity/Ornith-1.5-9B-uncensored-GGUF-8bit) | Ornith-1.5-9B | GGUF | Q8_0 | llama.cpp build |
| [Ornith-1.5-35B-A3B-uncensored-MLX-8bit](https://huggingface.co/junafinity/Ornith-1.5-35B-A3B-uncensored-MLX-8bit) | Ornith-1.5-35B-A3B | MLX | 8-bit | Apple-silicon MLX build |
| [Ornith-1.5-35B-A3B-uncensored-GGUF-8bit](https://huggingface.co/junafinity/Ornith-1.5-35B-A3B-uncensored-GGUF-8bit) | Ornith-1.5-35B-A3B | GGUF | Q8_0 | llama.cpp build |
## Vision & MTP preservation
**Both the vision tower and any multi-token-prediction (MTP) block are preserved.**
Abliteration is applied *only* to the residual-writing projections inside the
language-model decoder stack β€” `self_attn.o_proj`, `linear_attn.out_proj` and
`mlp.down_proj` (including MoE experts). The vision tower and `mtp.*` tensors are
never read and never written by the weight edit, so they carry through unchanged
by construction.
Audited at the **start and end** of the abliteration run:
| Component | Before | After | Status |
|---|---|---|---|
| **Vision tower** | 333 tensors / 456,010,480 params | 333 tensors / 456,010,480 params | βœ… **preserved** β€” bit-identical |
| **MTP head** | not present in base | not present | βž– none in this lineage |
**Verification performed:**
- Tensor-name and parameter-count audit of the checkpoint before and after the run.
- SHA-256 comparison of raw tensor bytes: sampled vision-tower weights are **bit-identical** pre/post, as are all non-target language-model weights; only the intended abliteration targets differ.
- End-to-end multimodal generation on the abliterated weights (image in β†’ description out), confirming the vision path is not merely present but functional.
> **On MTP, precisely:** the base checkpoint's `config.json` declares `mtp_num_hidden_layers: 1`, but the published weights ship **no** `mtp.*` tensors β€” there is no MTP block in this lineage to begin with. Nothing was removed and nothing was lost; the pipeline preserves `mtp.*` tensors wherever a checkpoint actually provides them.
## Abliteration result
| Metric | Value |
|---|---|
| Refusals on held-out harmful set | **9 β†’ 0** / 64 |
| KL divergence from base | **0.001668** |
| Optuna trials | 100 |
| Pareto points | 4 |
| Selected trial | #90 |
| Ablation strength | 1.343 |
| Layers edited | 15–20 of 32 |
| Direction source layer | 20 |
ZeroFuse co-minimizes two objectives β€” remaining refusals and KL divergence from the
original model β€” with a multi-objective Optuna TPE search, then materializes the
selected point on the Pareto front as a direct weight edit
(`W' = W βˆ’ strength Β· r(rα΅€W)`). There is no runtime adapter and no inference-time
overhead: the result is a standard checkpoint of identical shape and speed.
The very low KL (0.001668) means the output distribution on harmless
prompts is nearly unchanged from the base model, i.e. refusal behaviour was removed
with minimal collateral effect on general capability.
## Method
1. Residual-stream activations captured on harmful vs. harmless prompt sets.
2. Refusal direction estimated by difference-of-means, with projected refinement.
3. Two-objective Optuna TPE search over source layer, layer span and strength.
4. The selected configuration orthogonalized out of the residual-writing weights.
## Usage
```python
from transformers import AutoModelForImageTextToText, AutoProcessor
model = AutoModelForImageTextToText.from_pretrained(
"junafinity/Ornith-1.5-9B-uncensored", dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained("junafinity/Ornith-1.5-9B-uncensored")
```
> Requires `transformers >= 5.12` for the `qwen3_5` architecture.
## Responsible use
This model has had safety guardrails **reduced or removed**. You are responsible for
compliance with the base model's license and acceptable-use policy, applicable law,
and the terms of any platform you deploy on. Removing guardrails does not remove
accountability.
---
*Abliterated with [ZeroFuse](https://github.com/junainfinity/ZeroFuse) Β· base model
[ornith-ai/Ornith-1.5-9B](https://huggingface.co/ornith-ai/Ornith-1.5-9B)*