CoolFace
Modelpublic

modilify/Modilify-Mk1

sourceHugging Faceotherupdated 1mo agoView on Hugging Face
1likes22downloads
Model Card

[image]

Modilify Mk1

A 26B-A5B multimodal block-diffusion model that thinks in latent space, commits only when it is ready, and was trained on a single Apple silicon machine in less than a day.

Modilify Mk1 is not another long-context decoder with a bigger reasoning budget. It is a Transformer-in-Transformer: the heavy DiffusionGemma trunk still sees text, images, and video, while a recurrent latent deliberation stack compresses the entire chain of thought into a compact hidden trajectory. Visible tokens are no longer the only place intelligence can live. The exclusive excess-entropy commit formula decides, every denoise, how many tokens the model is allowed to lock in. Easy problems finish fast. Hard problems keep deliberating.

This official release is the first public Mk1 checkpoint. It is materially more stable than Modilify Mk1 Preview, restores the full vision tower, and ships default inference settings that run about 6× faster than autoregressive models.

Breakthroughs

One Mac. One day.Trained on a single Apple silicon machine in less than 24 hours.
Seven million tokens.The adaptation used about 7 million training tokens, not a web-scale second pretrain.
Intelligence densityFar more capability per activated parameter, and far more capability per training token, than a conventional post-train at this size.
Transformer-in-TransformerA latent Transformer sits inside every heavy denoise and writes a recurrent memory that survives canvas commits.
Latent CoT compressionChain-of-thought is compressed into token latents and 64 memory slots instead of being dumped into visible tokens.
Exclusive commit formulaExcess-entropy fusion, p² when entropy is honest, a hard prefix-risk budget, and a stagnation jump. Not a confidence threshold.
6× default throughputDefault settings target speed. Preview's quality-oriented knobs are still available when you want them.
Adjustable inference speedMove commit_failure_budget, denoise_temperature, and the ponder / jump limits. Same weights, different operating point.
More stable than PreviewCleaner commit geometry, stronger latent addressing, and no leftover adapter surface.
Better agentsNative thinking-channel control, tool-ready Gemma turns, and a latent scratchpad that does not pollute the user-visible transcript.

Why this is different

Most reasoning models buy intelligence with more visible tokens. That is expensive, leaky, and hard to stop. Mk1 buys it with latent deliberation:

  1. 1.Each heavy denoise still runs the 26B-A4B MoE trunk over a 256-token rolling canvas.
  2. 2.A 4-layer latent Transformer reads the noisy canvas, confidence, entropy, and age, then updates per-token latents plus a 64-slot persistent memory.
  3. 3.That compact state is mapped back through the frozen self-conditioning bridge and conditions the next heavy pass.
  4. 4.The exclusive commit formula then locks a variable-length prefix. The memory slots do not shift. The thought continues even after the visible tokens have moved on.

The result is elastic inference. You can spend more heavy-denoise work on a hard agent turn, or commit more tokens per pass and finish sooner when the problem is easy. Throughput is a configuration choice, not a second model.

Efficiency

Mk1 is an argument about intelligence per parameter and intelligence per training token.

The released model activates 4.159B text parameters on a heavy denoise, plus the 570M vision encoder when images or video are present. The latent stack is small. The adaptation that produced this checkpoint ran on one Apple silicon machine, finished in under 24 hours, and saw about 7 million tokens. That is not a claim that data does not matter. It is a claim that a better architecture can extract more from each token and each watt.

Default inference is the fast operating point. Compared with the slower Preview evaluation settings (denoise_temperature=0.4, commit_failure_budget=0.05, jump_on_no_progress_after=32), the Mk1 defaults are built for about 6× higher throughput. Tighten the budget if you want Preview-like caution. Loosen it if you want the model to finish.

Model Summary

ArchitectureMixture-of-Experts block diffusion + latent Transformer-in-Transformer
Total Parameters26.139B
Activated Parameters4.729B, including the vision encoder
Text Heavy-Denoise Activated Parameters4.159B
FLOPs per Heavy Denoise~2.12 TFLOPs at batch 1, 256-token canvas, empty KV prefix
Layers30
Number of Experts128
Selected Experts per Token8
Number of Shared Experts1
Vocabulary Size262,144
Context Length262,144 tokens
Activation FunctionGELU, tanh approximation
Vision EncoderGemma 4 Vision
Vision Encoder Parameters569.550M
ModalityText, Image, Video
Sliding Window1024 tokens
Canvas Length256
Latent Memory64 slots × 1,536-d, 4 layers
Training tokens~7 million

The heavy-denoise FLOPs estimate counts multiply-adds as two FLOPs and covers decoder, expert, latent deliberation, and attention work only. It excludes the encoder pass, sampling/softmax, and elementwise ops. Batch size scales it roughly linearly: a 256-token prefix raises the estimate to ~2.16 TFLOPs, and a 4,096-token prefix to ~2.38 TFLOPs because some layers use full attention.

Benchmark Results

BenchmarkModilify Mk1DiffusionGemma 26B A4BGemma 4 26B A4B
MMLU Pro86.877.682.6

Only part of each dataset was evaluated, with one-shot prompting. Treat these values as unstable and non-comparable until the full benchmark release.

Getting Started

Transformers 5.14.1 is the minimum supported version.

shell
pip install -U transformers torch accelerate

Text generation

python
import torch
from transformers import AutoModelForMultimodalLM, AutoProcessor

model_id = "modilify/Modilify-Mk1"
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForMultimodalLM.from_pretrained(
    model_id,
    trust_remote_code=True,
    dtype=torch.bfloat16,
    device_map="auto",
)

messages = [{"role": "user", "content": "Explain why the sky is blue."}]
inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    enable_thinking=False,
    return_dict=True,
    return_tensors="pt",
).to(model.device)

output = model.generate(**inputs, max_new_tokens=256)
new_tokens = output.sequences[:, inputs["input_ids"].shape[1]:]
print(processor.batch_decode(new_tokens, skip_special_tokens=False)[0])

Image input

python
from PIL import Image

image = Image.open("example.jpg").convert("RGB")
messages = [{
    "role": "user",
    "content": [
        {"type": "image", "image": image},
        {"type": "text", "text": "Describe the image and identify uncertainty."},
    ],
}]
inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    enable_thinking=True,
    return_dict=True,
    return_tensors="pt",
).to(model.device)
output = model.generate(**inputs, max_new_tokens=256)

Video-frame input

The processor represents video as a sampled sequence of frames. The following example uses PyAV to decode a short local clip and samples at most 32 RGB frames.

python
import av
from PIL import Image

container = av.open("short_clip.mp4")
decoded = [Image.fromarray(frame.to_rgb().to_ndarray()) for frame in container.decode(video=0)]
stride = max(1, len(decoded) // 32)
frames = decoded[::stride][:32]

messages = [{
    "role": "user",
    "content": [
        {"type": "video", "video": frames},
        {"type": "text", "text": "Summarize the main visual events in order."},
    ],
}]
inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    enable_thinking=True,
    return_dict=True,
    return_tensors="pt",
).to(model.device)
output = model.generate(**inputs, max_new_tokens=256)

Thinking mode

The official Gemma chat template controls the prompt, not the model's first generated tokens.

  • —enable_thinking=True inserts a system turn that contains <|think|> and still ends the prompt at <|turn>model.
  • —enable_thinking=False does not inject an empty thought channel. The prompt ends at <|turn>model.

The model may still open <|channel>thought on its own. That is generation, not a template artifact. Applications should not assume hidden reasoning is complete, correct, or appropriate to expose to end users.

Configurable inference parameters

All model-owned values below are serialized in config.json and may be changed before loading or through a copied configuration object.

ParameterDefaultMeaning
canvas_length256Rolling diffusion canvas length
denoise_temperature0.8Sampling temperature
commit_failure_budget0.2Normal cumulative prefix risk limit
jump_failure_budget2.0Forced-jump cumulative risk limit
jump_on_no_progress_after12Stagnation threshold
max_ponder_steps64Watchdog multiplier per requested token
min_trajectory_progress0.005Minimum fused-risk improvement
repetition_penalty1.0Transformers-style repetition penalty
latent_dim1,536Latent state width
latent_memory_slots64Persistent memory slot count
latent_num_layers4Latent Transformer depth
latent_num_heads16Latent attention heads
latent_local_attention_window128Local token-attention window
latent_dropout0.0Inference dropout probability
turn_end_token_id106Gemma turn terminator

Example override:

python
from transformers import AutoConfig

config = AutoConfig.from_pretrained(model_id, trust_remote_code=True)
config.max_ponder_steps = 32
config.commit_failure_budget = 0.15
model = AutoModelForMultimodalLM.from_pretrained(
    model_id,
    config=config,
    trust_remote_code=True,
    dtype=torch.bfloat16,
    device_map="auto",
)

Generation supports left-padded batches with independent stopping and generated_lengths for every row. Batch prompts of similar lengths together for the best throughput; KV-cache and canvas memory grow with batch size. Streaming and caller-supplied KV caches remain limited to batch size 1.

Details

Trained on a single Apple silicon machine, in less than 24 hours, on about 7 million tokens.

Developed on Mac by Modilify.

Evaluation status, limitations, and risks

The benchmark values above are partial one-shot estimates, not a complete evaluation. Export checks established checkpoint structure, exact adapter application, valid safetensors indexing, absence of residual adapters, and byte-level preservation of the vision tower and projection; they do not establish accuracy, robustness, calibration, fairness, safety, or fitness for use.

The model can hallucinate facts, citations, visual details, or temporal relationships; reproduce bias, unsafe content, personal information, or copyrighted material; and consume substantial time and memory during long iterative generation. Confidence-based commits are compute-control decisions, not guarantees of correctness. Visual performance can degrade with poor resolution, motion, occlusion, unusual aspect ratios, or domain shift.

Evaluate the exact deployment on representative, adversarial, and out-of-distribution inputs. Use layered safeguards, monitoring, incident response, and qualified human review, and never delegate autonomous high-risk medical, legal, financial, employment, housing, education, critical-infrastructure, or safety decisions to the model.

License

Released under the Modilify Open Model License 1.0, subject to its responsible-use and derivative-impact terms. Upstream rights, attribution, Apache-2.0 text, and the impact-statement template are retained in NOTICE.md.

Citation

bibtex
@software{modilify_mk1_2026,
  title = {Modilify Mk1}, 
  author = {Modilify},
  year = {2026},
  note = {A multimodal latent-deliberation derivative of DiffusionGemma, trained on one Apple silicon machine}
}

Also cite the upstream DiffusionGemma release as requested by Google DeepMind.