Instructions to use ArcadaLabs/Ouro-2.6B-Thinking-mlx-bf16 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use ArcadaLabs/Ouro-2.6B-Thinking-mlx-bf16 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("ArcadaLabs/Ouro-2.6B-Thinking-mlx-bf16") 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
- MLX LM
How to use ArcadaLabs/Ouro-2.6B-Thinking-mlx-bf16 with MLX LM:
Generate or start a chat session
# Install MLX LM uv tool install mlx-lm # Interactive chat REPL mlx_lm.chat --model "ArcadaLabs/Ouro-2.6B-Thinking-mlx-bf16"
Run an OpenAI-compatible server
# Install MLX LM uv tool install mlx-lm # Start the server mlx_lm.server --model "ArcadaLabs/Ouro-2.6B-Thinking-mlx-bf16" # Calling the OpenAI-compatible server with curl curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ArcadaLabs/Ouro-2.6B-Thinking-mlx-bf16", "messages": [ {"role": "user", "content": "Hello"} ] }'
ArcadaLabs/Ouro-2.6B-Thinking-mlx-bf16
Unquantized (bf16) MLX conversion of ByteDance/Ouro-2.6B-Thinking, a Looped Language Model trained with chain-of-thought reasoning. The model produces visible <think> tokens before answering, applying both architectural recurrence (looped layers) and explicit reasoning traces.
This is a full-precision conversion with no quantization. For a smaller 4-bit quantized version, see mlx-community/Ouro-2.6B-Thinking-4bit.
Use with mlx-lm
pip install mlx-lm
Important: mlx-lm does not ship with built-in support for the Ouro architecture. You need to add a custom ouro.py model file to your mlx-lm models directory. See the "Setup Notes" section below.
from mlx_lm import load, generate
model, tokenizer = load("ArcadaLabs/Ouro-2.6B-Thinking-mlx-bf16")
messages = [{"role": "user", "content": "hello"}]
prompt = tokenizer.apply_chat_template(
messages, add_generation_prompt=True, tokenize=False
)
response = generate(model, tokenizer, prompt=prompt, max_tokens=512, verbose=True)
Setup Notes
As of mlx-lm 0.29.1, the "ouro" model type is not recognized out of the box. To use this model, you need to place a custom ouro.py file in your mlx-lm models directory (typically at <your-venv>/lib/python3.x/site-packages/mlx_lm/models/ouro.py).
The implementation is adapted from the mlx-community/Ouro-2.6B-Thinking-4bit model card's architecture and the original ByteDance/Ouro-2.6B-Thinking PyTorch implementation. Key adaptations for MLX:
- Sandwich RMSNorm (pre and post normalization for both attention and MLP)
- Recurrent looping over transformer blocks (
total_ut_stepspasses) - KV cache sized to
num_hidden_layers * total_ut_stepsentries - Early exit gate (linear projection, used during training)
A reference ouro.py implementation is included in this repository.
Benchmark (Single Prompt, Informal)
Tested on Apple M5 Pro (64GB). This is a single-prompt sanity check to verify the model runs correctly, give a rough sense of throughput, and show that the conversion produces coherent output. It is not a rigorous benchmark.
Prompt:
A medieval kingdom discovers electricity 300 years before the industrial revolution. Write a short analysis of: (1) what societal structures would change first, (2) what would remain surprisingly unchanged, and (3) one second-order consequence that most people wouldn't immediately consider. Be specific and cite historical parallels where relevant.
Performance:
| Variant | Tokens | Time | Throughput | Peak Memory |
|---|---|---|---|---|
| MLX bf16 (this model) | 1024 | 86.0s | 11.9 tok/s | 5.76 GB |
| PyTorch fp16 on MPS | 1024 | 205.0s | 5.0 tok/s | 4.97 GB |
The Thinking model is slower than the base on PyTorch because it generates chain-of-thought tokens before the final answer. On MLX, throughput is similar to the base model since generation speed is architecture-bound regardless of content.
MLX bf16 output (this model):
Click to expand full response (1024 tokens)
<think>
Okay, so the user wants me to analyze how a medieval kingdom discovering electricity 300
years early would change societal structures, what would stay the same, and a second-order
consequence. Let me start by breaking down each part.
First, societal structures changing. Well, electricity would definitely impact energy sources.
Before the industrial revolution, they relied on water wheels, windmills, and human/animal
labor. If they get electricity, maybe they start using electric motors instead. That could
lead to factories powered by electricity, which might shift from rural to urban areas. But
wait, medieval society was feudal, so maybe the nobility would control the new technology.
Maybe they'd use it for military purposes first, like early telegraphs or something. Also,
communication could improve with electric telegraphs, which might challenge the church's
control over information.
Second, what remains unchanged. Feudalism's social hierarchy might stay because the nobility
could monopolize electricity. Maybe the church still holds religious authority, even if
communication changes. Also, maybe the basic structure of land ownership and serfdom persists
because the technology doesn't immediately disrupt those systems. Historical parallels: the
printing press didn't immediately end feudalism, so maybe electricity would have a similar
delayed effect.
Third, a second-order consequence. Maybe something like environmental impact. If they use
coal for electricity, pollution could be a problem earlier. Or maybe the development of new
industries that create new social classes, like electricians or engineers, which weren't
around before. Or perhaps the need for a more educated workforce, leading to earlier public
education systems.
</think>
**1. Societal Structures That Would Change First**
The discovery of electricity would first disrupt energy production and labor organization.
Medieval societies relied on water wheels, windmills, and human/animal labor. Electric motors
would enable factories to operate independently of geography, accelerating urbanization. For
example, the **telegraph** (invented in the 1830s) revolutionized communication; in this
timeline, its earlier adoption could challenge feudal hierarchies by decentralizing information
flow. The nobility might initially monopolize electricity for military or administrative
control (e.g., early telegraphs for coordinating armies), but widespread adoption could
empower urban artisans and merchants, mirroring the **Renaissance's shift toward merchant
capitalism**.
**2. What Would Remain Surprisingly Unchanged**
Feudal social structures might persist due to the nobility's control over electricity. Like
the **printing press** (15th century), which didn't immediately dismantle feudalism,
electricity could be restricted to elites. The Church might retain religious authority, as
seen in the **Counter-Reformation**, where institutions adapted to new technologies rather
than being displaced. Land ownership and serfdom could endure if electricity is used to
enhance agricultural efficiency (e.g., electric irrigation systems), reinforcing agrarian
power structures.
**3. Second-Order Consequence: Environmental Degradation and Early Labor Movements**
A less obvious consequence would be **accelerated environmental harm** from coal-powered
electricity. By the 17th century, cities might face smog and pollution akin to 19th-century
London, prompting early environmental regulations. Simultaneously, electric lighting (e.g.,
gas lamps) could extend work hours, leading to labor exploitation and **earlier labor
unions** -- similar to the **Luddite movement** but driven by industrial demands rather than
textile machinery.
PyTorch fp16 output (same model, same prompt):
Click to expand full response (1024 tokens)
The model spent the full 1024 tokens in its <think> phase without reaching a final answer. Below is the beginning of the reasoning trace:
<think>
Okay, so I need to figure out how a medieval kingdom discovering electricity 300 years early
would change their society. Let's start by breaking down the three parts: first, what
societal structures would change, then what would stay the same, and a second-order
consequence that's not immediately obvious.
First, societal structures. The medieval period was feudal, right? So the main structure was
based on land ownership, lords, serfs, the church. If they get electricity early, maybe the
shift from manual labor to machinery would start earlier. That could undermine the feudal
system because if machines can do the work, maybe the need for serfs decreases. But how
quickly? Maybe the first changes would be in agriculture and manufacturing...
(Excerpt; generation hit the 1024-token limit during the thinking phase)
Both backends produce coherent chain-of-thought reasoning. The MLX output completed both thinking and answering within 1024 tokens, while the PyTorch run spent more tokens in the thinking phase. We used temperature=1.0 with top_p=0.7 for both, so we cannot determine from a single sampled run whether this difference is due to sampling randomness, bf16-vs-fp16 numerical differences, or subtle implementation differences. A proper equivalence check would require greedy decoding and token-level comparison.
Model Details
- Architecture: Looped Language Model (LoopLM) / Universal Transformer
- Parameters: 2.6B
- Layers: 24 (applied recurrently 4 times = 96 effective layers)
- Hidden size: 2048
- Attention: Multi-Head (16 heads, 128 head dim)
- FFN: SwiGLU (intermediate size 5632)
- Position encoding: RoPE
- Vocabulary: 49,152 tokens
- Training tokens: 7.7T
- Context length: 4K (training), extendable to 64K
- Precision in this conversion: bfloat16
- Disk size: ~5.2 GB
Credits
- Original model by ByteDance Seed
- MLX architecture reference from mlx-community/Ouro-2.6B-Thinking-4bit
- Conversion and MLX model implementation by Arcada Labs
- Converted using mlx-lm 0.29.1
Citation
@article{ouro2025,
title={Scaling Latent Reasoning via Looped Language Models},
author={ByteDance Seed},
year={2025},
url={https://arxiv.org/abs/2510.25741}
}
- Downloads last month
- 33
Quantized
Model tree for ArcadaLabs/Ouro-2.6B-Thinking-mlx-bf16
Base model
ByteDance/Ouro-2.6B-Thinking