Image-Text-to-Text
MLX
Safetensors
inkling_mm_model
inkling
Mixture of Experts
multimodal
text-generation
conversational
Instructions to use mlx-community/Inkling-mlx-2bit with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use mlx-community/Inkling-mlx-2bit with MLX:
# Make sure mlx-vlm is installed # pip install --upgrade mlx-vlm from mlx_vlm import load, generate from mlx_vlm.prompt_utils import apply_chat_template from mlx_vlm.utils import load_config # Load the model model, processor = load("mlx-community/Inkling-mlx-2bit") config = load_config("mlx-community/Inkling-mlx-2bit") # Prepare input image = ["http://images.cocodataset.org/val2017/000000039769.jpg"] prompt = "Describe this image." # Apply chat template formatted_prompt = apply_chat_template( processor, config, prompt, num_images=1 ) # Generate output output = generate(model, processor, formatted_prompt, image) print(output) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- Pi
How to use mlx-community/Inkling-mlx-2bit with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "mlx-community/Inkling-mlx-2bit"
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": "mlx-community/Inkling-mlx-2bit" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent
How to use mlx-community/Inkling-mlx-2bit 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 "mlx-community/Inkling-mlx-2bit"
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 mlx-community/Inkling-mlx-2bit
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use mlx-community/Inkling-mlx-2bit with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "mlx-community/Inkling-mlx-2bit"
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 "mlx-community/Inkling-mlx-2bit" \ --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"
Upload README.md with huggingface_hub
Browse files
README.md
CHANGED
|
@@ -16,8 +16,8 @@ We put this repo bundles the loader
|
|
| 16 |
package (`inkling_mlx/`), so it runs with just `mlx` + `mlx-lm` + `transformers`.
|
| 17 |
|
| 18 |
> Community build for large-model-on-Apple-Silicon experiments. ~**315 GB** in 2-bit ->
|
| 19 |
-
>
|
| 20 |
-
>
|
| 21 |
|
| 22 |
## Quantization (recipe: experts_only)
|
| 23 |
|
|
@@ -40,6 +40,39 @@ ids = tok("The capital of France is")["input_ids"]
|
|
| 40 |
print(tok.decode(greedy_generate(model, config, ids, max_new_tokens=64)))
|
| 41 |
```
|
| 42 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
## Attribution
|
| 44 |
|
| 45 |
- Weights converted from `thinkingmachines/Inkling`.
|
|
|
|
| 16 |
package (`inkling_mlx/`), so it runs with just `mlx` + `mlx-lm` + `transformers`.
|
| 17 |
|
| 18 |
> Community build for large-model-on-Apple-Silicon experiments. ~**315 GB** in 2-bit ->
|
| 19 |
+
> doesn't fit a single 192 GB Mac *resident*, so run it via multi-Mac (distributed MLX) or
|
| 20 |
+
> **SSD expert-offload** (see below — one 192 GB Mac, or even a 64 GB Mac slowly).
|
| 21 |
|
| 22 |
## Quantization (recipe: experts_only)
|
| 23 |
|
|
|
|
| 40 |
print(tok.decode(greedy_generate(model, config, ids, max_new_tokens=64)))
|
| 41 |
```
|
| 42 |
|
| 43 |
+
## Run on a single Mac with SSD expert-offload
|
| 44 |
+
|
| 45 |
+
~315 GB doesn't fit a 192 GB Mac resident — but an MoE only fires **6 of 256** experts per
|
| 46 |
+
token, so you can keep the always-needed weights in RAM (attention, shared experts, embeddings,
|
| 47 |
+
norms, router, vision/audio towers ≈ 35 GB) and **page the routed experts from SSD on demand**,
|
| 48 |
+
letting the OS page cache hold the hot ones. This makes the 2-bit omni build runnable on one
|
| 49 |
+
192 GB Mac Studio (and even generates on a 64 GB Mac, slowly).
|
| 50 |
+
|
| 51 |
+
Tool: **[github.com/huckiyang/mlx-moe-offload](https://github.com/huckiyang/mlx-moe-offload)**
|
| 52 |
+
(MIT) — a drop-in over mlx-lm's `SwitchGLU`. It also answers the mlx-lm feature request
|
| 53 |
+
[ml-explore/mlx-lm#1438](https://github.com/ml-explore/mlx-lm/issues/1438).
|
| 54 |
+
|
| 55 |
+
```bash
|
| 56 |
+
pip install mlx mlx-lm scipy pillow
|
| 57 |
+
git clone https://github.com/huckiyang/mlx-moe-offload && cd mlx-moe-offload && pip install -e .
|
| 58 |
+
|
| 59 |
+
# 1) one-time: repack the stacked experts into a per-expert SSD store
|
| 60 |
+
# (copies the bundled inkling_mlx/ loader in, so the offload dir is self-contained)
|
| 61 |
+
python -m mlx_moe_offload.repack --build /path/Inkling-mlx-2bit --out /path/Inkling-mlx-2bit-offload
|
| 62 |
+
OFF=/path/Inkling-mlx-2bit-offload
|
| 63 |
+
|
| 64 |
+
# 2) generate — text, image, or audio (omni)
|
| 65 |
+
python examples/inkling_omni.py --offload-dir $OFF --prompt "The capital of France is"
|
| 66 |
+
python examples/inkling_omni.py --offload-dir $OFF --image cat.png --prompt "What is in this image?"
|
| 67 |
+
python examples/inkling_omni.py --offload-dir $OFF --audio q.wav --prompt "Transcribe in English:"
|
| 68 |
+
```
|
| 69 |
+
|
| 70 |
+
The prompt is prefilled in small `--prefill-chunk` blocks so only a bounded set of experts is
|
| 71 |
+
live at once (a lazy full-prompt prefill would page ~all experts per layer and OOM). Decode
|
| 72 |
+
speed is gated by the routing hit-rate + SSD bandwidth — check `store.stats()`. At 2-bit,
|
| 73 |
+
text is solid (*"…capital of Japan is Tokyo"*) while image/audio are recognizable but degraded
|
| 74 |
+
by quantization; a higher-bit build sharpens multimodal quality.
|
| 75 |
+
|
| 76 |
## Attribution
|
| 77 |
|
| 78 |
- Weights converted from `thinkingmachines/Inkling`.
|