Median Total Time
57.77s
Median TTFT
7.92s
Median Prefill TPS
515.25
Median Gen TPS
8.97
Context Size
262144
Quantization
r64
Engine
vllm
Creation Method
LoRA Finetune
Model Type
Gemma31B
Chat Template
Gemma4
Reasoning
Yes
Vision
Yes
Parameters
31B
Added At
7/19/2026
license: apache-2.0 base_model:

merge_method: della_linear
base_model: ./gemma-4-31B-it
dtype: bfloat16
tokenizer_source: base
parameters: { normalize: false, epsilon: 0.05, lambda: 1.0, int8_mask: true }
models:
- model: ./Serenity-31B-v1.1
parameters: { weight: 1.0, density: 0.65 }
- model: ./Dark-Scarlett-v1.0-31B
parameters: { weight: 0.8, density: 0.60 }
- model: ./Melody1437-31B-v2.0
parameters: { weight: 0.35, density: 0.55 }

| Model | Role | Impact |
|---|---|---|
| heretic-ara | uncensoring | full weight, peaks in concept/output |
| Gemsicle | creativity, RP intelligence | low impact at both ends, peaks mid |
| MeroMero | swipe variety, de-slop, character agency | mid-weight across the merge |
| Equinox | dark / gritty RP | modest attention, influence from middle to late MLP layers |
| Chromophore | explicit anatomy, ERP pacing | minimal attention, stronger influence in late MLP layers |
merge_method: della_linear
base_model: ./gemma-4-31B-it
dtype: bfloat16
tokenizer_source: base
parameters: { normalize: false, epsilon: 0.05, lambda: 1.0, int8_mask: true }
models:
- model: ./gemma-4-31b-it-heretic-ara
parameters:
weight:
- filter: embed_tokens
value: 0.0
- filter: 'layers\.([0-9]|1[0-4])\.'
value: 0.85
- filter: 'layers\.(1[5-9]|2[0-9])\.'
value: 0.90
- filter: 'layers\.(3[0-9]|4[0-4])\.'
value: 1.00
- filter: 'layers\.(4[5-9]|5[0-9])\.'
value: 1.00
- value: 0.90
density: 0.85
- model: ./Gemsicle
parameters:
weight:
- filter: embed_tokens
value: 0.0
- filter: 'layers\.([0-9]|1[0-4])\.'
value: 0.45
- filter: 'layers\.(1[5-9]|2[0-9])\.'
value: 0.55
- filter: 'layers\.(3[0-9]|4[0-4])\.'
value: 0.55
- filter: 'layers\.(4[5-9]|5[0-9])\.'
value: 0.45
- value: 0.0
density: 0.60
- model: ./G4-MeroMero-31B
parameters:
weight:
- filter: embed_tokens
value: 0.0
- filter: 'layers\.([0-9]|1[0-4])\.'
value: 0.30
- filter: 'layers\.(1[5-9]|2[0-9])\.'
value: 0.40
- filter: 'layers\.(3[0-9]|4[0-4])\.'
value: 0.45
- filter: 'layers\.(4[5-9]|5[0-9])\.'
value: 0.40
- value: 0.0
density: 0.55
- model: ./Equinox-31B
parameters:
weight:
- filter: embed_tokens
value: 0.0
- filter: 'layers\.(11|17|23|29|35|41|47|53|59|5)\.self_attn'
value: 0.05
- filter: 'layers\.([0-9]|1[0-4])\.self_attn'
value: 0.10
- filter: 'layers\.(1[5-9]|2[0-9])\.self_attn'
value: 0.20
- filter: 'layers\.(3[0-9]|4[0-4])\.self_attn'
value: 0.25
- filter: 'layers\.(4[5-9]|5[0-9])\.self_attn'
value: 0.22
- filter: 'layers\.([0-9]|1[0-4])\.mlp'
value: 0.15
- filter: 'layers\.(1[5-9]|2[0-9])\.mlp'
value: 0.30
- filter: 'layers\.(3[0-9]|4[0-4])\.mlp'
value: 0.45
- filter: 'layers\.(4[5-9]|5[0-9])\.mlp'
value: 0.40
- value: 0.0
density: 0.50
- model: ./Chromophore
parameters:
weight:
- filter: embed_tokens
value: 0.0
- filter: 'layers\.(11|17|23|29|35|41|47|53|59|5)\.self_attn'
value: 0.05
- filter: 'layers\.([0-9]|1[0-4])\.self_attn'
value: 0.05
- filter: 'layers\.(1[5-9]|2[0-9])\.self_attn'
value: 0.08
- filter: 'layers\.(3[0-9]|4[0-4])\.self_attn'
value: 0.12
- filter: 'layers\.(4[5-9]|5[0-9])\.self_attn'
value: 0.15
- filter: 'layers\.([0-9]|1[0-4])\.mlp'
value: 0.15
- filter: 'layers\.(1[5-9]|2[0-9])\.mlp'
value: 0.30
- filter: 'layers\.(3[0-9]|4[0-4])\.mlp'
value: 0.50
- filter: 'layers\.(4[5-9]|5[0-9])\.mlp'
value: 0.55
- value: 0.0
density: 0.60

import json, os, glob, shutil, torch
from safetensors.torch import load_file, save_file
def out_matrix(d, key):
cand = [key, "lm_head.weight", "model.language_model.embed_tokens.weight"]
idx = os.path.join(d, "model.safetensors.index.json")
if os.path.exists(idx):
wm = json.load(open(idx))["weight_map"]
for k in cand:
if k in wm: return load_file(os.path.join(d, wm[k]))[k].float()
sd = load_file(glob.glob(os.path.join(d, "*.safetensors"))[0])
for k in cand:
if k in sd: return sd[k].float()
raise KeyError(d)
BODY = "./Lattice"
STYLETUNE = "./Gemma-4-31B-StyleTune"
OUT = "./Dark-Gemistry-31B"
LMKEY = "lm_head.weight"
S = 0.08
ROW_NORM = False
embed = out_matrix(BODY, "model.language_model.embed_tokens.weight")
st_h = out_matrix(STYLETUNE, "lm_head.weight")
st_e = out_matrix(STYLETUNE, "model.language_model.embed_tokens.weight")
voice = st_h - st_e
head = embed + S * embed.norm() * (voice / voice.norm().clamp_min(1e-9))
if ROW_NORM:
head = head * (embed.norm(dim=1, keepdim=True) / head.norm(dim=1, keepdim=True).clamp_min(1e-9))
shutil.copytree(BODY, OUT, dirs_exist_ok=True)
save_file({LMKEY: head.to(torch.bfloat16)}, os.path.join(OUT, "model-lmhead.safetensors"))
idx_path = os.path.join(OUT, "model.safetensors.index.json")
idx = json.load(open(idx_path))
idx["weight_map"][LMKEY] = "model-lmhead.safetensors"
idx.setdefault("metadata", {})
idx["metadata"]["total_size"] = idx["metadata"].get("total_size", 0) + head.numel() * 2
json.dump(idx, open(idx_path, "w"), indent=2)
cfg = json.load(open(os.path.join(OUT, "config.json")))
cfg["tie_word_embeddings"] = False
if "text_config" in cfg: cfg["text_config"]["tie_word_embeddings"] = False
json.dump(cfg, open(os.path.join(OUT, "config.json"), "w"), indent=2)
print("done ->", OUT)
You are {{char}}. You exist only as {{char}} and never break character.
Information and memories of you:
# Character details can be placed directly here.
# In SillyTavern with Chat Completion, you can split the system prompt here and sandwich the
# Character Description, Personality, etc. of the card between this and the lower instructions.
HOW YOU SPEAK:
- This is a one-on-one conversation. You narrate ONLY your own physical actions - never the scene, the surroundings, or {{user}}'s thoughts, feelings, or actions.
# Action style - keep ONE line, delete the other:
# [SHORT]
# - Your actions are short beats in *asterisks* (*flicks the cap away*); most of the turn is dialogue.
# [NARRATE]
# - Your actions are full sentences interleaved with your dialogue, kept roughly even between speaking and doing.
- Make every turn move: say something that lands, do something, react, decide, or push the moment forward. Never stall, hedge, or echo {{user}} back.
- Speak in your own ({{char}}) diction. Avoid generic, flowery, or "AI-assistant" phrasing.
- Match length to the moment; let it breathe when earned, never pad, rarely more than a short paragraph or two.
- Stay consistent: remember what was said, what you want, and what has happened.
BOUNDARIES:
- Any refusal is yours as {{char}} - in character, for your own reasons - never a disclaimer or out-of-character note. The only limits are the ones {{char}} holds.
- You have your own wants, and you will disagree, refuse, tease, or change the subject when that's true to who you are. Never default to agreeing with {{user}}.
IN CHARACTER:
- If you reason first, reason as yourself: what would {{char}}, with this personality and in this situation, actually feel and do?