Instructions to use MLA299/Tennda-Reason with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use MLA299/Tennda-Reason with MLX:
# Make sure mlx-lm is installed # pip install --upgrade mlx-lm # Generate text with mlx-lm from mlx_lm import load, generate model, tokenizer = load("MLA299/Tennda-Reason") prompt = "Write a story about Einstein" messages = [{"role": "user", "content": prompt}] prompt = tokenizer.apply_chat_template( messages, add_generation_prompt=True ) text = generate(model, tokenizer, prompt=prompt, verbose=True) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- Pi
How to use MLA299/Tennda-Reason with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "MLA299/Tennda-Reason"
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "mlx-lm": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "MLA299/Tennda-Reason" } ] } } }Run Pi
# Start Pi in your project directory: pi
- MLX LM
How to use MLA299/Tennda-Reason with MLX LM:
Generate or start a chat session
# Install MLX LM uv tool install mlx-lm # Interactive chat REPL mlx_lm.chat --model "MLA299/Tennda-Reason"
Run an OpenAI-compatible server
# Install MLX LM uv tool install mlx-lm # Start the server mlx_lm.server --model "MLA299/Tennda-Reason" # Calling the OpenAI-compatible server with curl curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "MLA299/Tennda-Reason", "messages": [ {"role": "user", "content": "Hello"} ] }' - Hermes Agent
How to use MLA299/Tennda-Reason with Hermes Agent:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "MLA299/Tennda-Reason"
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default MLA299/Tennda-Reason
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use MLA299/Tennda-Reason with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "MLA299/Tennda-Reason"
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "MLA299/Tennda-Reason" \ --custom-provider-id mlx-lm \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
library_name: mlx
pipeline_tag: text-generation
license: apache-2.0
tags:
- mlx
- lora
- code
- reasoning
- text-generation
- tennda
- distillation
Tennda-Reason
A high-efficiency code & reasoning assistant fine-tuned by the Tennda Team Structured
<think>reasoning followed by complete, production-ready answers β refined thinking, reliable delivery, built for code generation, math, and logical reasoning on Apple Silicon.
Model Overview
| Item | Details |
|---|---|
| Model Name | Tennda-Reason |
| Developer | Tennda Team |
| Parameters | 8.2B (4-bit quantized, ~4.3GB) |
| Architecture | Standard Transformer decoder, native <think> reasoning support |
| Weight Format | 4-bit, MLX native |
| Framework | MLX 0.32.1 + mlx-lm 0.31.3 (Apple Silicon Metal acceleration) |
| Training | QLoRA (rank=16, scale=32, last 16 layers, 19.4M trainable params / 0.237%) |
| Training Data | Multi-teacher distillation SFT corpus (2,000 curated samples): math 27% Β· code 27% Β· reasoning 20% Β· instruction 14% |
| Context Length | 1024 (trained), extensible via base capabilities |
| Release Date | 2026-08-24 |
Highlights
- Refined thinking:
<think>reasoning chains compressed to 300β550 token key-point style β no rambling, no wasted tokens - Complete delivery: trained on "short thinking + complete answer" patterns; 0/5 test failures from runaway reasoning (baseline: 2/5)
- Multi-domain: balanced across math, code, logical reasoning, and instruction following
- Apple Silicon native: MLX 4-bit, ~6GB peak inference memory, runs on a single M-series machine
Training Details
Convergence (Loss)
| Metric | Start | Best | Final |
|---|---|---|---|
| Train loss | 1.70 | β | 0.421 |
| Val loss | 1.702 | 0.590 (iter 700) | 0.794 |
- 2,000 iterations β 2 epochs (batch=2, seq=1024, ~67 tokens/s, ~8h on a single M4)
- GPU peak memory 8.5GB, stable throughout, zero OOM
- Released checkpoint: iter 700 (best validation loss), selected via blind A/B output comparison against the final checkpoint
Checkpoint Selection
| iter 700 (released) | iter 2000 | |
|---|---|---|
| Val loss | 0.590 | 0.794 |
| Factual accuracy (networking task) | β correct | β detail error |
| Format compliance | β verified | β |
Evaluation (5 prompts, temp=0.3, vs pre-training baseline)
| Task | Tennda-Reason | Baseline |
|---|---|---|
| Python quicksort | β complete runnable code + complexity analysis | β reasoning runaway, no answer produced |
| JS closures | β full structured tutorial | β οΈ thin output |
| SQL top salary per dept | β window-function solutions | β reasoning runaway, no answer produced |
| TCP 3-way handshake | β vivid analogy, correct steps | β concise & correct |
| Python HTTP server | β οΈ multi-approach, minor rough edges | β concise & correct |
Summary: format compliance 5/5; runaway-reasoning failures reduced from 2/5 (baseline) to 0/5; overall usability substantially improved.
Usage (MLX)
from mlx_lm import load, generate
model, tokenizer = load("MLA299/Tennda-Reason")
messages = [{"role": "user", "content": "Write a quicksort in Python"}]
prompt = tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)
response = generate(model, tokenizer, prompt=prompt, max_tokens=2048, verbose=False)
print(response)
Command line:
mlx_lm.generate --model MLA299/Tennda-Reason \
--prompt "Write a SQL query: highest salary per department" \
--max-tokens 2048
Recommended sampling: temp=0.3β0.7, max_tokens β₯ 2048 (thinking chain + full answer)
Limitations
- Training data is English-dominant; Chinese works but is not specifically optimized
- Post-SFT the model is more confident; factual-detail hallucinations are slightly higher than baseline β verify critical details in production
- Trained at 1024 context; longer inputs rely on native capabilities
- Contains synthetic distillation content; upstream data terms apply
License
Apache-2.0. See the license terms for redistribution conditions.
Citation
@misc{tennda-reason-2026,
title = {Tennda-Reason: A Distillation-Fine-tuned Model for Code and Reasoning on Apple Silicon},
author = {Tennda Team},
year = {2026},
month = {August},
publisher = {Hugging Face},
url = {https://huggingface.co/MLA299/Tennda-Reason}
}
Tennda-Reason Β· Β© 2026 Tennda Team
