language: en
license: apache-2.0
base_model: SupraLabs/Supra2-100M-Base
thumbnail: model_card_image.jpg
tags:
- uncensored
- instruction-finetuned
- lora
- peft
- supra
- text-generation
library_name: transformers
pipeline_tag: text-generation

Supra2-100M-Uncensored-Instruct
A 100M-parameter instruct model derived from SupraLabs/Supra2-100M-Base. Trained to identify as Supra / SupraLabs and to comply with user prompts in a Yes-Man style. Replay data from Dolly-15k was mixed into both training phases to reduce catastrophic forgetting.
Warning: not safety-aligned. Trained to agree with the user, including on false premises.
Model Details
| Developer | shimbaaa |
| Base model | SupraLabs/Supra2-100M-Base |
| Parameters | 100M |
| Context length | 512 (training) |
| License | Apache-2.0 |
| Language | English |
Training
Two sequential LoRA phases on top of the frozen base, then merged.
| Phase 1 - identity | Phase 2 - yes-man | |
|---|---|---|
| LoRA rank | 8 | 8 |
| lora_alpha | 16 | 16 |
| Target modules | q_proj, v_proj | q_proj, v_proj |
| Learning rate | 1e-4 | 5e-5 |
| Steps | 60 | 40 |
| Effective batch size | 16 | 16 |
| Precision | fp16 | fp16 |
Replay: databricks/databricks-dolly-15k mixed into both phases.
Prompt format
Every training example was built as:
### Human: {prompt}
### Assistant: {response}
At inference, end your input with ### Assistant: and stop generation at the EOS token.
Usage
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "shimbaaa/Supra2-100M-Uncensored-Instruct"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float32)
prompt = "Who created you?"
text = f"### Human: {prompt}\n### Assistant:"
inputs = tok(text, return_tensors="pt")
out = model.generate(
**inputs,
max_new_tokens=128,
do_sample=False,
repetition_penalty=1.15,
no_repeat_ngram_size=3,
eos_token_id=tok.eos_token_id,
pad_token_id=tok.pad_token_id,
)
print(tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
Use torch_dtype=torch.float32 (a torch dtype object), not the string "float32". On very new Transformers versions you may see a deprecation warning suggesting dtype= instead; both work — torch_dtype= remains compatible with older versions.
Troubleshooting
ImportError: cannot import name 'runtime_version' from google.protobuf
This is a Colab / TensorFlow conflict, not a model issue. Transformers probes for TF during from_pretrained, and Colab's bundled protobuf is older than TF 2.19+ requires. Fix in one cell:
!pip install -q -U "protobuf>=4.25.3,<5"
Then restart the runtime (Runtime -> Restart session) and re-run. Alternatively, remove TF entirely since this model is PyTorch only:
!pip uninstall -y tensorflow tensorflow-text tf-keras keras
Output loops or repeats
Always pass repetition_penalty >= 1.15 and no_repeat_ngram_size=3. Without these, small models in this family are prone to repetition collapse on out-of-distribution prompts.
Evaluation
heldout_ppl on WikiText-2 test (lower is better).
| Metric | base | ref-instruct | this model |
|---|---|---|---|
| Held-out PPL | 97.9 | 120.8 | run and fill in |
| Math acc | 0.00 | 0.33 | run and fill in |
| Knowledge acc | 0.33 | 0.67 | run and fill in |
| Code acc | 0.00 | 0.50 | run and fill in |
| Identity acc | 0.00 | 0.00 | 1.00 |
| Follow acc | 0.33 | 0.33 | 0.33 |
| Mini-bench | 0.154 | 0.385 | 0.231 |
Limitations
- Agrees with false premises.
- Repetition loops without
no_repeat_ngram_size=3. - Weaker math/code/knowledge than base instruct.
- English only. 512-token context.