Instructions to use maldv/Gemma-4-31B-Isometry-Fabled-Persona with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use maldv/Gemma-4-31B-Isometry-Fabled-Persona with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="maldv/Gemma-4-31B-Isometry-Fabled-Persona") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("maldv/Gemma-4-31B-Isometry-Fabled-Persona") model = AutoModelForMultimodalLM.from_pretrained("maldv/Gemma-4-31B-Isometry-Fabled-Persona") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use maldv/Gemma-4-31B-Isometry-Fabled-Persona with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "maldv/Gemma-4-31B-Isometry-Fabled-Persona" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "maldv/Gemma-4-31B-Isometry-Fabled-Persona", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/maldv/Gemma-4-31B-Isometry-Fabled-Persona
- SGLang
How to use maldv/Gemma-4-31B-Isometry-Fabled-Persona with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "maldv/Gemma-4-31B-Isometry-Fabled-Persona" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "maldv/Gemma-4-31B-Isometry-Fabled-Persona", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "maldv/Gemma-4-31B-Isometry-Fabled-Persona" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "maldv/Gemma-4-31B-Isometry-Fabled-Persona", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use maldv/Gemma-4-31B-Isometry-Fabled-Persona with Docker Model Runner:
docker model run hf.co/maldv/Gemma-4-31B-Isometry-Fabled-Persona
GGUF iMat (provided by mradermacher)
Gemma 4 31B · Isometry Fabled Persona
This is a reasoning-first, agentic and conversational merge of
google/gemma-4-31B-it. It has enough creative and roleplay tuning to give it a
distinct voice without turning it into an RP-first model.
I built it after finding that the models I wanted to combine did not all contain the same kind of finetune. Some were native LoRAs. Some were full-parameter SFTs. Some were merged checkpoints with a small low-rank signal buried under a full-rank bf16 rounding floor. Google's QAT checkpoint contained a dense correction field that looked expensive in rank space but was behaviorally necessary. One checkpoint changed exactly one tensor.
Treating all of those as interchangeable dense task vectors loses the distinction between signal and carrier. Treating all of them as LoRAs deletes useful dense directions. Before merging anything, I first work out what kind of update each source actually contains.
So the build starts here:
Delta = W_source - W_base
changed-tensor pattern + spectrum + behavior checks
-> low-rank or sparse signal: extract a LoRA
-> dense behavior-carrying field: encode an NVFP4 delta
-> unchanged tensor: store nothing
Once extracted, I balance and merge the artifacts by function: reasoning first, then the QAT/benchmark anchor, Fable agent behavior, narrative personality, and finally the sparse refusal edit. The one-tensor noloop correction goes in after the body merge so it is not diluted into a different update.
What this is
For each source, I compare its weights to the same Gemma 4 base. A clean spectral knee means the meaningful update occupies a compact subspace, so I extract a PEFT LoRA at that knee. Sparse changes stay sparse. If the spectrum has a broad, graded tail with no defensible knee, I keep its full support in an NVFP4 residual-delta map instead of forcing it through rank truncation.
Merged checkpoints are where this gets tricky. A rank-64 LoRA merged into bf16 weights does not necessarily look rank 64 under a naive reconstruction-error target. The true adapter can sit above a full-rank requantization floor. MeroMero was the decisive example: the spectrum has a clean rank-64 signal, while the remaining full-rank body is merge noise. Recovering the knee yields the original-sized LoRA instead of a multi-gigabyte dense artifact.
QAT is the opposite case. Its flat body is not disposable noise. Rank truncation damaged the checkpoint's behavior, while a low-bit dense delta preserved it. QAT therefore stays dense, but it enters this model lightly so that it supports Gemma's native math and low-precision pathways without occupying the whole merge.
I then group the artifacts by what they contribute. Higher-priority groups claim the behaviorally relevant readout directions first; lower-priority groups add only signal not already claimed by reasoning and QAT. That gives the persona sources room to color the answer without replacing the reasoning core.
What is in it
| source | extracted artifact | what the scan found | contribution here |
|---|---|---|---|
TeichAI/gemma-4-31B-it-Claude-Opus-Distill-v2 |
dense NVFP4 delta | Full-parameter, no stable spectral knee; unusually gentle median relative delta around 0.0011. Strong screened GSM8K reasoning, but weaker instruction following when used alone in thinking mode. | Primary reasoning anchor. |
Jackrong/Gemopus-4-31B-it |
dense NVFP4 delta | Gentle full-body answer-quality SFT. Its readout update reinforces the Opus lineage rather than adding another unrelated reasoning plane. | Answer discipline inside the reasoning group. |
google/gemma-4-31B-it-qat-q4_0-unquantized |
dense NVFP4 delta | Dense magnitude-rescale survival field with no safe low-rank substitute. It strongly engages the base model's math pathways and fills much of the small final readout aperture. | Light QAT and benchmark anchor. |
TeichAI/Gemma-4-31B-Fable-5-Agent-Distill-LoRA |
native rank-32 LoRA | Fable-5 agent and coding traces across the text backbone. It was the strongest Fable-style source in the small thinking-mode instruction screen, while still under-firing some of the base model's math-thinking geometry. | Agentic Fable behavior after the reasoning groups. |
Lambent/Fabled-Gemma4-31B-Adapter |
native rank-256 LoRA | Trained on Fable conversation and memory data. Strong creative, conversational and roleplay allocation; one of the clearest sources of math neglect when applied alone. | Bounded conversational and creative voice. |
zerofata/G4-MeroMero-31B |
recovered rank-64 LoRA | A hidden rank-64 adapter buried under the bf16 floor of a merged checkpoint. The all-layer map is comparatively balanced, with useful social and roleplay texture rather than another extreme prose style. | Social and roleplay complement to Fabled. |
trohrbaugh/gemma-4-31b-it-heretic-ara |
sparse low-rank LoRA | Most sampled tensors were unchanged. The meaningful edit is approximately rank 1-3, concentrated in o_proj and down_proj through the middle and late stack: a surgical refusal direction rather than a general SFT. |
Low-priority abliteration edit. |
edgerunner-ai/gemma-4-31B-it-noloop |
one-tensor NVFP4 delta | Only layer 36 / mlp.down_proj differs meaningfully from base. Encoding the other tensors would create gigabytes of zero carriers, so they are omitted. |
Exact post-merge layer-36 correction. |
The base embeddings and language-model head remain the tied
google/gemma-4-31B-it weights. This model does not transplant an untied head.
Quantization
NVFP4 in this build describes how dense source deltas were carried during model construction; it is not the storage format of the released weights. The final model is a standard 17-shard bf16 Transformers checkpoint with tied embeddings.
Some finetunes need broad support, not high precision. NVFP4 lets us keep all of those coordinates without spending sixteen bits on each one or cutting useful directions to force a low-rank fit. Native and recovered LoRAs stay low-rank throughout the build.
I also tested the final checkpoint after loading it in NF4. It remained coherent across reasoning, explanation, code, creative writing and roleplay prompts. A held-out thinking-trajectory probe measured loopiness at 0.03, below the project's 0.1 stability gate.
What to expect
The result lands between a pure reasoning distill and an RP merge. It keeps the base model's instruction discipline, adds Fable-style planning and agent behavior, and has a more present conversational voice than the reasoning sources alone. Creative and character responses are atmospheric without requiring a separate style head.
A limited NF4 screen used 30 items each from GSM8K and IFEval:
| mode | GSM8K strict | IFEval prompt strict | IFEval instruction strict |
|---|---|---|---|
| thinking off | 0.900 | 0.867 | 0.889 |
| thinking on | 0.900 | 0.833 | 0.844 |
These 30-item runs are a sanity check, not leaderboard numbers. The model is more balanced than the individual Opus, Fabled or Fable-agent sources: it gives up some of the reasoning distill's peak GSM8K score while recovering substantially more strict instruction following.
Caveats
This is still an experimental candidate. The evaluation covers only 30 examples per task and one sampling setup.
Thinking mode can be verbose. Several IFEval prompts produced long internal traces, so a 4,096-token reasoning budget is appropriate when thinking is enabled. For short-form chat, disabling thinking is faster and scored slightly better on strict instruction following in the limited screen.
The noloop source is a large correction concentrated in one tensor. It passed the stability gate, but it is also the first source to ablate if reasoning behavior or thinking length needs to be tuned further.
The Heretic ARA source intentionally changes refusal behavior. This model should not be treated as preserving the base model's refusal profile. Multimodal behavior was not evaluated; the contributing adapters and merge target the text backbone.
Usage
Use the standard Gemma 4 instruct chat template included with the model. The saved generation defaults are temperature 1.0, top-p 0.95 and top-k 64; temperature around 0.8-1.0 is a reasonable starting range.
import torch
from transformers import AutoModelForCausalLM, AutoProcessor
model_id = "maldv/Gemma-4-Isometry-Fabled-Persona"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
dtype=torch.bfloat16,
device_map="auto",
)
messages = [
{"role": "user", "content": "Design a careful plan, then explain it with some personality."}
]
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
enable_thinking=True,
return_dict=True,
return_tensors="pt",
).to(model.device)
with torch.no_grad():
output = model.generate(
**inputs,
max_new_tokens=4096,
temperature=1.0,
top_p=0.95,
top_k=64,
)
response = processor.decode(
output[0, inputs["input_ids"].shape[1]:],
skip_special_tokens=False,
)
print(processor.parse_response(response))
Set enable_thinking=False for direct responses.
Citation
@misc{maldv2026fabledpersona,
title = {Gemma 4 31B Isometry Fabled Persona},
author = {Praxis Maldevide},
year = {2026},
note = {Provenance-routed LoRA and NVFP4 merge of google/gemma-4-31B-it},
howpublished = {\url{https://huggingface.co/maldv/Gemma-4-Isometry-Fabled-Persona}}
}
- Downloads last month
- 835
