Downloads · 30 days
11
14% of all-time downloads
sahilchachra/tess-4-27b-mxfp4-mlx
tess-4-27b-mxfp4-mlx is a image-text-to-text model from sahilchachra. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for mlx. The card lists the license as apache-2.0.
MLX MX FP4 (micro-scaled 4-bit float) quantization of migtissera/Tess-4-27B, converted with mlx-vlm.
Downloads · 30 days
11
14% of all-time downloads
All-time downloads
76
Public
Parameters
27.4B
15.2 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors15.2 GB · 100%
How the weights are stored.
U3226.9B · 98%
From the Hugging Face model README
MLX MX FP4 (micro-scaled 4-bit float) quantization of migtissera/Tess-4-27B, converted with mlx-vlm.
Tess-4-27B is a thinking-native, agentic 27B model built on Qwen/Qwen3.6-27B, post-trained on 64K-token long-context agentic traces plus a reasoning style distilled from a three-model teacher ensemble (Opus-4.8, GPT-5.5, GLM-5.2). It's multimodal (inherits Qwen3.6's vision tower — text and image input) and reasons via explicit <think>...</think> blocks before answering.
| Base model | Tess-4-27B (Qwen3.5-VL / Qwen3_5ForConditionalGeneration arch, ~27B params, vision + video capable) |
| Quantization | MX FP4 (micro-scaled 4-bit float) |
| Bits per weight | 4.449 |
| Disk size | 14 GB (from ~52 GB bf16) |
| Format | MLX (safetensors) |
| Minimum unified memory | Runs comfortably on 24GB+ unified memory Macs. Smoke-tested on an Apple M4 Pro (24GB) — loads and generates coherent, on-topic output. |
from mlx_vlm import load, generate
from mlx_vlm.prompt_utils import apply_chat_template
from mlx_vlm.utils import load_config
model_path = "sahilchachra/tess-4-27b-mxfp4-mlx"
model, processor = load(model_path, trust_remote_code=True)
config = load_config(model_path, trust_remote_code=True)
prompt = apply_chat_template(processor, config, "Explain the difference between TCP and UDP.", num_images=0)
out = generate(model, processor, prompt, image=None, max_tokens=1024, verbose=False)
print(out.text if hasattr(out, "text") else out)
For image input, pass an image path/URL and set num_images=1 in apply_chat_template, and pass the image to generate(..., image=<path_or_url>).
CLI:
mlx_vlm.generate --model sahilchachra/tess-4-27b-mxfp4-mlx \
--prompt "Explain the difference between TCP and UDP." \
--max-tokens 1024
This model uses the Qwen3.5-family chat template with explicit <think>...</think> reasoning blocks — allow a generous max_tokens budget (1024+) so generation doesn't cut off mid-thought.
Verified via mlx_vlm.generate (text-only, image=None) with the model's Qwen3.5-family chat template, on an Apple M4 Pro (24GB unified memory):
Prompt: "Explain the difference between TCP and UDP in two sentences."
Output: Here's a thinking process:
1. **Analyze User Input:**
- **Topic:** TCP vs UDP
- **Constraint:** Explain the difference in exactly two sentences.
2. **Identify Key Differences:**
- TCP (Transmission Control Protocol): Connection-oriented, reliable, guarantees delivery, ordered, error-checked, slower due to overhead.
- UDP ...
Prompt: "Write a haiku about the ocean at night."
Output: Thinking Process:
1. **Analyze the Request:**
- Topic: Ocean at night.
- Form: Haiku (5-7-5 syllable structure).
2. **Brainstorming Imagery & Keywords:**
- Visuals: Moon, stars, reflection, dark water, waves, foam, bioluminescence ...
Both outputs were truncated at max_tokens=80 mid-reasoning (this is a thinking-native model — allow a much larger max_tokens budget, e.g. 1024+, to reach the final <think>...</think> answer). Quantization preserves the model's signature deliberate, step-by-step reasoning style intact.