Image-Text-to-Text
MLX
Safetensors
qwen3_5
quantized
mixed-precision
6bit
8bit
optiq
apple-silicon
vision-language
qwen3.5
conversational
4-bit precision
Instructions to use codelion/Ornith-1.0-9B-OptiQ-6bit with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use codelion/Ornith-1.0-9B-OptiQ-6bit 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("codelion/Ornith-1.0-9B-OptiQ-6bit") config = load_config("codelion/Ornith-1.0-9B-OptiQ-6bit") # 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 codelion/Ornith-1.0-9B-OptiQ-6bit with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "codelion/Ornith-1.0-9B-OptiQ-6bit"
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": "codelion/Ornith-1.0-9B-OptiQ-6bit" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent
How to use codelion/Ornith-1.0-9B-OptiQ-6bit 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 "codelion/Ornith-1.0-9B-OptiQ-6bit"
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 codelion/Ornith-1.0-9B-OptiQ-6bit
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use codelion/Ornith-1.0-9B-OptiQ-6bit with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "codelion/Ornith-1.0-9B-OptiQ-6bit"
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 "codelion/Ornith-1.0-9B-OptiQ-6bit" \ --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 | |
| license: mit | |
| license_link: https://huggingface.co/deepreinforce-ai/Ornith-1.0-9B/blob/main/LICENSE | |
| pipeline_tag: image-text-to-text | |
| base_model: deepreinforce-ai/Ornith-1.0-9B | |
| base_model_relation: quantized | |
| tags: | |
| - mlx | |
| - quantized | |
| - mixed-precision | |
| - 6bit | |
| - 8bit | |
| - optiq | |
| - apple-silicon | |
| - image-text-to-text | |
| - vision-language | |
| - qwen3.5 | |
| # codelion/Ornith-1.0-9B-OptiQ-6bit | |
| > **Built with [mlx-optiq](https://mlx-optiq.com)**, the MLX-native toolkit to quantize, fine-tune, and serve LLMs locally on Apple Silicon, no PyTorch and no cloud. [Try the Lab](https://mlx-optiq.com/docs/lab/) 路 [All OptiQ quants](https://mlx-optiq.com/models) 路 [Docs](https://mlx-optiq.com/docs/) | |
| A 6-bit mixed-precision MLX quant of [deepreinforce-ai/Ornith-1.0-9B](https://huggingface.co/deepreinforce-ai/Ornith-1.0-9B), built on the Qwen3.5-9B architecture. Sensitive layers are kept at 8-bit and robust ones at 4-bit. | |
| 17.6 GB of bf16 weights become **8.0 GB**, which fits a 16 GB Mac. | |
| **Image input works.** The vision tower is kept at bf16 in a sidecar, so this quant takes images as well as text. | |
| ## Quantization details | |
| | Property | Value | | |
| |---|---| | |
| | Predominant precision | 6-bit | | |
| | Layers at 8-bit (sensitive) | 145 | | |
| | Layers at 4-bit (robust) | 104 | | |
| | Total quantized layers | 249 | | |
| | Group size | 64 | | |
| | Vision tower | bf16, 333 tensors, in `optiq/optiq_vision.safetensors` | | |
| | Size on disk | 8.0 GB, from a 17.6 GB bf16 base | | |
| We follow the same naming convention `llama.cpp` uses for Q6_K and similar mixed-precision quants: the "6-bit" label is the predominant precision, not the weighted average. | |
| The base model ships no MTP head, so this quant has no speculative-decoding sidecar. | |
| ### How the bit-widths were chosen | |
| Every layer was measured directly on this model. Each (layer, bit-width) pair was scored by KL divergence against the bf16 reference on a [six-domain calibration mix](https://mlx-optiq.com/blog/calibration-mix), and a knapsack solver spent the bit budget where the measured error was largest. | |
| The full sweep ships with the model as `optiq/sensitivity.json`: 249 layers scored at both candidate widths. That is the measurement, not just the outcome, so this architecture can be re-quantized at another target without repeating it. | |
| Only the language tower is quantized. The vision tower stays at bf16, which is how every OptiQ VLM ships. | |
| ## Usage | |
| ### Text | |
| Everything OptiQ-specific lives in an `optiq/` subfolder, so a stock `*.safetensors` glob ignores it and `mlx-lm` sees a clean language model. | |
| ```bash | |
| pip install mlx-lm | |
| ``` | |
| ```python | |
| from mlx_lm import load, generate | |
| model, tokenizer = load("codelion/Ornith-1.0-9B-OptiQ-6bit") | |
| prompt = tokenizer.apply_chat_template( | |
| [{"role": "user", "content": "Explain the difference between TCP and UDP."}], | |
| add_generation_prompt=True, tokenize=False) | |
| print(generate(model, tokenizer, prompt=prompt, max_tokens=512)) | |
| ``` | |
| This is a reasoning model: it thinks inside `<think>...</think>` before answering, so give it enough `max_tokens` to finish. | |
| ### Images | |
| Image input needs [`mlx-optiq`](https://mlx-optiq.com/), which loads the bf16 vision sidecar and feeds the merged embeddings to the quantized language tower: | |
| ```bash | |
| pip install mlx-optiq | |
| ``` | |
| ```python | |
| from PIL import Image | |
| from optiq.runtime.engine import OptiqEngine | |
| engine = OptiqEngine("codelion/Ornith-1.0-9B-OptiQ-6bit") | |
| answer = engine.generate("What is in this image?", | |
| images=[Image.open("photo.jpg")], max_tokens=512) | |
| print(answer.text) | |
| ``` | |
| Or serve it over an OpenAI-compatible endpoint that accepts image content parts: | |
| ```bash | |
| optiq serve --model codelion/Ornith-1.0-9B-OptiQ-6bit | |
| ``` | |
| ## Verification | |
| Text, arithmetic reasoning, and image understanding were all exercised on the finished artifact before release. | |
| No task benchmarks were run on this quant; for measured quality numbers on the base architecture, see the [Qwen3.5-9B OptiQ card](https://huggingface.co/mlx-community/Qwen3.5-9B-OptiQ-4bit). | |
| Quantization does not change the behaviour or alignment of the base model. Use it under the same terms as [the original](https://huggingface.co/deepreinforce-ai/Ornith-1.0-9B). | |