Instructions to use MLA299/Tennda-Nano with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use MLA299/Tennda-Nano 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-Nano") 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-Nano 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-Nano"
Configure the model in Pi
# Install Pi: npm install -g @mariozechner/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-Nano" } ] } } }Run Pi
# Start Pi in your project directory: pi
- MLX LM
How to use MLA299/Tennda-Nano 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-Nano"
Run an OpenAI-compatible server
# Install MLX LM uv tool install mlx-lm # Start the server mlx_lm.server --model "MLA299/Tennda-Nano" # 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-Nano", "messages": [ {"role": "user", "content": "Hello"} ] }' - Hermes Agent
How to use MLA299/Tennda-Nano 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-Nano"
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-Nano
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use MLA299/Tennda-Nano 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-Nano"
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-Nano" \ --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: other | |
| tags: | |
| - mlx | |
| - code | |
| - sql | |
| - text-generation | |
| - llm | |
| - tennda | |
| # Tennda-Nano | |
| > **A lightweight code LLM independently developed by the Tennda team** | |
| > Focused on **efficient, accurate** code generation and instruction following — direct answers, no redundant reasoning. | |
| --- | |
| ## Model Overview | |
| | Item | Details | | |
| |---|---| | |
| | **Model Name** | Tennda-Nano | | |
| | **Developer** | Tennda Team (in-house) | | |
| | **Parameters** | Lightweight (<5B) | | |
| | **Architecture** | Self-developed Transformer decoder (multimodal input) | | |
| | **Weight Format** | bf16, MLX native | | |
| | **Framework** | MLX (Apple Silicon Metal GPU acceleration) | | |
| | **Training Data** | In-house code instruction dataset (20,022 samples: SQL / Python / algorithms, etc.) | | |
| | **Release Date** | 2026-08-21 | | |
| --- | |
| ## Highlights | |
| - **Direct answers**: instruction → immediate code/answer, extremely fast, **short total inference time** | |
| - **High SQL accuracy**: 100% correct on unseen SQL tasks | |
| - **Clean output**: concise, no verbose reasoning, production-ready answers | |
| - **Deployment friendly**: lightweight single-machine inference, low resource usage, suitable for edge/personal devices | |
| --- | |
| ## Quality Metrics | |
| ### Training Convergence (Loss) | |
| | Metric | Start | Final | Reduction | | |
| |---|---|---|---| | |
| | Train loss | 1.929 | **0.963** | -50% | | |
| | Val loss | 4.500 | **0.844** | **-81%** | | |
| - Stable convergence throughout training, no signs of overfitting (val/train gap remains steady) | |
| ### Evaluation Scores (3 unseen samples, temp=0.3) | |
| | # | Task Type | Result | | |
| |---|---|---| | |
| | 1 | SQL conditional query (age>45) | ✅ Directly outputs `SELECT * FROM employees WHERE age > 45;` | | |
| | 2 | Design a Car class (Python) | ⚠️ Occasional loop repetition (mitigable via sampling params) | | |
| | 3 | SQL aggregate query (MAX salary) | ✅ Directly outputs `SELECT MAX(SALARY) FROM EMPLOYEE;` | | |
| **SQL accuracy: 100% (2/2)** | |
| **Format alignment (direct answer, no redundant reasoning): 67% (2/3)** | |
| > Note: current evaluation is a sampled manual assessment; scores are for reference only. A full evaluation pipeline is under continuous development. | |
| --- | |
| ## Inference Performance (measured on Apple M4) | |
| | Metric | Result | | |
| |---|---| | |
| | Model load | ~4s | | |
| | Single-task generation | **~3.4s** | | |
| | Output style | Direct answer (no verbose thinking) | | |
| > Total latency reduced by **~83%** on the same task compared with the baseline (output size reduced by 75%). | |
| --- | |
| ## Training Method | |
| - **Architecture**: self-developed Transformer decoder (35 layers, multimodal encoding) | |
| - **Method**: in-house lightweight training pipeline (parameter-efficient training, fully local) | |
| - **Cost**: 26 minutes on a single machine, peak memory 14.4GB, no large-scale compute cluster required | |
| - **Artifact**: complete inference weights (MLX format) | |
| > Details in the training report and comparison report. | |
| --- | |
| ## Usage (MLX) | |
| ```python | |
| from mlx_lm import load, generate | |
| from mlx_lm.sample_utils import make_sampler | |
| model, tokenizer = load("MLA299/Tennda-Nano") | |
| sampler = make_sampler(temp=0.3, top_p=0.9) | |
| prompt = tokenizer.apply_chat_template( | |
| [{"role": "user", "content": "Write a SQL query to select employees older than 45."}], | |
| add_generation_prompt=True, | |
| ) | |
| print(generate(model, tokenizer, prompt=prompt, max_tokens=256, sampler=sampler)) | |
| ``` | |
| Or start an OpenAI-compatible API server: | |
| ```bash | |
| mlx_lm.server --model MLA299/Tennda-Nano --port 8080 | |
| ``` | |
| --- | |
| ## Deployment Requirements | |
| | Config | Requirement | | |
| |---|---| | |
| | Memory | ≥ 16GB (24GB recommended) | | |
| | Platform | Apple Silicon (M-series, Metal GPU) | | |
| | Inference | mlx-lm ≥ 0.30 | | |
| | Quantization | Can be 4-bit quantized for 8GB-memory devices | | |
| --- | |
| ## Known Limitations | |
| - Chinese instruction capability is still under optimization (training corpus is primarily English code instructions) | |
| - Occasional loop repetition (can be mitigated with `repetition_penalty` at inference time) | |
| - The concise answer style may omit necessary explanations | |
| --- | |
| *Tennda-Nano · In-house model · © 2026 Tennda Team* | |