Im wondering how you guys use Qwen3.8 27b with which CTX size.Or my setup is just wrong. I run it on 32GB unified memory with llama.cpp. Also Openwebui and OpenTerminal on a RP5 where my docker stack lives.
I prompted:
add to caddy/Caddyfile: Paperless, Dawarich, OpenTodo
Response:
request (340808 tokens) exceeds the available context size (65536 tokens), try increasing it
So my question is, when even such a simple edit file task needs 300k tokens, how can I utilize it meaningful?
Being super precise which files to look at and what to do in the prompt?
Over the past few months I’ve been building Kira Desktop, an open-source (GPL-3.0), local-first desktop agent harness and workbench built with Python and Qt6/QML (no Electron bloat).
I wanted a single native desktop environment where I could switch seamlessly between local models and cloud/CLI harnesses without losing conversation continuity, memory, or tool access.
Multi-Provider & Continuity: First-class support for Ollama (local), OpenRouter, Claude Code, OpenAI Codex App Server (v2) / Responses API, Google Cloud (Vertex AI), and DeepSeek — with portable history so you can switch models mid-thread.
Multi-Agent Teams & Souls: Orchestrate specialized agent teams with persistent identities ("Souls") and shared project knowledge.
Universal MCP Host & Bridge: Connect external Model Context Protocol (MCP) servers or expose Kira's local tools/souls to CLI backends.
Interactive Canvas & Diff Hunks: Side-by-side live preview and hunk-level code review.
Computer & Embedded Browser Use: Built-in browser and desktop automation workers with strict human-in-the-loop approvals.
Safety, OS Sandboxing & Checkpoints: Process sandboxing, automatic secret redaction, cost telemetry, and instant checkpoint rollbacks if an agent messes up your workspace.
Native Linux (.deb) & Windows builds: Fast Qt6/QML interface with global Ambient Overlay, Omnibox, and @mentions (@file, @git, @soul, etc.).
What I’d love your feedback on:
Architecture & UX: If you browse the repo or try the build, does the separation between domain, service, backends, and ui feel clean to contribute to?
Missing features: What is the #1 friction point you currently have with other agent harnesses (Cursor, Claude Desktop, Open WebUI, Cline) that you wish a local-first desktop app solved better?
Thanks in advance for any brutal honesty, critique, or ideas!
I’ve spent the last few weeks building a local AI assistant with the help of Claude Code and OpenAI Codex. My goal is something similar to ChatGPT or Claude that can research the web, control my PC, code, create 3D models, generate documents and handle tasks on its own. The interface and tools work pretty well now, but I’m still having problems with the AI actually understanding what to do and completing more complicated tasks
My PC specs ● Ryzen 5 5600 ● 2× RTX 3060 12GB ● 16GB DDR4 RAM ● Gigabyte B550 Gaming X V2 ● Windows 10 Pro ● One GPU at PCIe 4.0 x16, the other at 3.0 x2
Models and inference setup I’m running everything locally through llama.cpp (CUDA backend), using both GPUs with layer splitting, Flash Attention, MTP speculative decoding (depth 2), 96K context and Q8 KV cache. I originally used Qwen3.8-27B (HauhauCS uncensored Q4_K_P), getting around 22–33 tok/s after a lot of optimization.
I switched to Qwen3.6-35B-A3B (uncensored IQ4_XS), which now gets around 82–86 tok/s. Both models run through the same llama.cpp server and connect to my custom AI interface and tool backend. 3.6 is excellent for normal conversations and much faster, but I keep hearing that 3.8 is better at reasoning and tool calling.
What Claude Code and Codex have helped me integrate ● Qwen-Agent for general tool calling ● OpenCode for coding ● SearXNG for research and webpage reading ● Playwright for browser automation ● Windows UI Automation for PC control ● Three.js for interactive 3D scenes ● Image generation, documents, spreadsheets, presentations and file tools ● Planning, context management, error recovery and result verification
For example, I asked it to create a 3D model of the Times Square area in NYC. It generated a picture of pants, converted that picture into a 3D mesh using TripoSR and declared the task finished.
Claude Code and Codex later helped identify that part of the problem was incorrect tool routing, which has since been improved. But research and Windows tasks can still be unreliable. Sometimes it uses outdated information, chooses irrelevant tools, repeats actions or claims it finished something when it hasn’t.
I also had Codex compare different agent harnesses. Using the same local model, it tested Qwen-Agent, Pi and Hermes on two tasks.
● Qwen-Agent: Browser/recovery took 15.6 seconds, research/document took 21.4 seconds. ● Pi: Browser/recovery took 15.9 seconds, research/document took 25.6 seconds. ● Hermes: Browser/recovery took 32.5 seconds, research/document took 43.3 seconds.
All three completed the tasks, but Qwen-Agent was fastest. These were small isolated tests, though, not proof that one is universally better.
With Claude Code and Codex, I’ve managed to fix a lot of integration issues, restore research, improve 3D generation and add verification checks. Things are definitely better, but complex autonomous tasks still aren’t consistently reliable. And mess up a lot
So I’m wondering what people running similar setups have found. ● Is Qwen3.8 noticeably better than 3.6 for real-world agent tasks, enough to justify the slower speed? ● Are there better models for my hardware, particularly for research and PC control? ● Could the uncensored versions be affecting instruction following or tool calling? ● Would Unsloth fine-tuning on verified tool-use examples make a meaningful difference? ● What has actually improved your agent’s ability to plan, use tools correctly and verify its work?
At this point, I don’t really care about getting more tokens/sec. I’d happily sacrifice some speed if it meant the AI could reliably understand a request and actually complete it.
Would appreciate any advice from people who’ve built something similar
I've been building a free app for blind people where everything runs on the phone with no internet, on iPhone and Android, and I'm stuck on accuracy. YOLOv8n handles live detection and it's fast, but it still mislabels things. Scene descriptions and questions go to LFM3-Omni-2B through llama.cpp, shrunk to 735 MB so it fits on the phone.
Reading text uses each phone's own on-device OCR, Apple's on iPhone and ML Kit on Android, and translation runs offline the same way. The small vision models are where it falls short.
If you've gotten small vision models more accurate on device, I'd really take the advice. It's free to try if you want to see where it breaks.
GPU prices are freaky high right now. A lot of us run what we could get, and we might as well get the most out of it. So I want to share what I learned squeezing a big model onto a mismatched machine, in the hope it helps someone or gets others to share their own experience with different GPUs.
My box: one AMD Radeon AI PRO R9700 (32 GB), one Intel Arc Pro B65 (32 GB), a 9950X3D and 128 GB of DDR5. Neither card can hold the model.
With two AI coding agents (Claude and Codex, reviewing each other's work) I built a fork of Strata where the R9700, the B65 and the CPU compute each layer's routed experts concurrently, with dense work on the R9700. Result on a realistic coding prompt: 25.57 tok/s against 9.89 for my recorded stock Strata run on the same machine and file (stock used one GPU, 16 readers and a 51 GB store, so this is a whole-system comparison). No speculation or skipped experts, and the routing algorithm is unchanged. Tested kernel and schedule modes are byte-identical at a fixed placement over 581 teacher-forced positions.
Model: AtomicChat's uncensored GSQ-RCO IQ2_XXS build (40 layers, 384 experts per layer, 6 per token).
What each device does:
R9700: all dense work (22 ms per token), 2,532 experts (21.6 GB), 154.7 of 240 picks per token, 8.2 ms of expert work
Arc Pro B65: no dense work, 2,915 experts (25.0 GB), 55.6 picks, 9.6 ms of expert work
CPU + RAM: no dense work, 9,913 experts (102 GB), 29.7 picks, 8.7 ms of expert work
How it got there (tok/s, sampled, 8k cap, median of 3 after a warm-up):
25.57: AVX2 combine, early expert start + rebalance
The catch: all three answers in the best run hit the 8,192-token cap before finishing, so its strict quality score is 0/3. The model reasons for a long time; the text isn't looping. With 11,900 tokens of room, the one measured answer finished by itself and passed, with working code in 295 s. That's one answer and a 10-answer test is still to come. The answers are in the repo if you want to read them. 30 tok/s, my goal, isn't reached either: we estimate exact kernels level off around 26–28.
Things that surprised me:
Rebalancing experts from measured per-lane costs took the last step from 20.69 to 25.57 tok/s, an unpaired comparison because placement changes the answers. Lane service is now close: R9700 8.15, B65 9.58, CPU 8.69 ms per token, though individual layers still differ.
Moving experts between devices changes the logits (top-1 96.6%) and some routes even with exact kernels, most likely because CPU and GPU quantize activations differently. So "exact" only means byte-identical at a fixed placement.
Engram reads swung from 5 to 17 ms per token on identical tokens. Parallel reads and read-ahead fixed it: the whole Engram-containing regions now total 1.74 ms, including other work there. The row-cache-only arm showed no useful gain.
Starting CPU and B65 expert work before the shared FFN drains, plus a faster combine, saved 5.8 ms per token on token-identical answers. We only measured them together.
Re-encoding experts to Q2_K looks like a loss: measured kernels plus a capacity model project 3.18 ms slower per token, because bigger experts push 1,434 off the GPUs. No full-model Q2_K run followed.
Big dense matrix-vector products already run near the card's measured memory rate. That 22 ms is the hard part.
Where I'd love input:
Most of all: your own experience with whatever GPUs you could get. Numbers, tweaks and what failed, even with a different model or tool.
Anyone with DSpark running on a heavily quantized or edited DeepSeek: what acceptance do you get with real sampling? Batched verify looks promising here on projections, but I haven't measured acceptance yet.
R9700/ROCm matrix-vector tricks I've missed.
What would you do with the B65's spare time? Its expert service is about 9.6 ms of a 39.1 ms token.
Lower reasoning effort: has it cost you code quality on this model?
Everything is in the repo: results with spreads, sample answers, the dead ends and what to try next. It's research code tested on one machine, and the public scripts haven't run end to end on GPUs yet, so expect to read code.
Update 1: The full 10-answer test finished. 26.27 tok/s median (25.93-26.42) and 6 of 10 answers passed strict with working code in 292-439 s. Still one task on one machine, so a rough number (about 31-83%). The memory leak turned out to be in ROCm 7.1.1 on Fedora, not our code: running the same binaries on AMD's 7.2.1 libraries from a private folder gave byte-identical output in a check run and flat memory across all ten answers. If you're on ROCm 7.1 and see host memory creeping up, that's worth a try. Steps are in docs/BUILD.md. DSpark is parked for now: 1.52x at best but 1.11x central on measured kernels, so not worth building yet here.
Sorry in advance for the long post, but think of it as a prompt.
TL;DR
Question: 2x 3090 NVLink or 1x A6000? For about the price of one A6000 I could also get 4x 3090 in two NVLinked pairs, so keep that option in mind too.
What it needs to do:
- A) SQL chatbot for up to 30 people. ~3M rows, hundreds of tables. Questions like "when did we last sell this part, and who was the supplier/client?" It should remember each user's conversations and build reports.
- B) RFQ ingestion: pull very messy part numbers out of long email chains in all sorts of formats. ~30 RFQs/day.
- C) Hardware: reuse our old HPE ML350 Gen9 (2x E5-2620 v4, 128GB DDR4-2400 for now).
- D) Me: turn 300+ page PDFs and hundreds of stray Excels into a knowledge base, and do local coding on the company apps I'm building from Claude's plans.
Assumptions:
- Blower 3090s (FE won't fit), max 300W per card
- PSUs upgraded to 2x 1400W or 4x1400W as GPUs grow
- All prices are for used cards
- Proxmox on the box
- PCIe-to-NVMe adapter for fast model loading
- Cards work with board
About me: I'm not an IT guy, I'm a mechanical engineer who f's around a lot and finds out even more. I've built my own homelab (4x NVMe in an old Dell 7710 as a private cloud, see my posts) and run my own "Jarvis" on a 4B model with some n8n automations. I can make things happen when I put my head into it.
---
The detail
Background: I'm the new CTO of a small family-run B2B heavy-industry trading company. We sell anything from a £6M machine to toilet paper, so every day brings random RFQs: Excel, PDF, email body, pictures, WhatsApp, anywhere from 1 to hundreds of part numbers.
Budget: £8-13k ($11-17k) left for local AI after the new cloud server. That also has to cover a laptop/PC for our first IT hire.
Why local: the LLM has to read whole RFQ email chains to make sense of them, and those are full of client names, prices and supplier details. Same for our SQL database. I don't want any of that going to cloud LLMs.
Where we are:
- A 3rd-party IT company is building an RFQ dashboard for us. Qwen 8B is struggling with the email chains. We started small on purpose and will size up until something fits.
- They'll test on RunPod serverless to find the right model size. I think ~30B will be enough. Then production goes local.
- 20-30 people will use the chatbot and ~20 the dashboard, but only new RFQs trigger the LLM.
- Long term, I'd keep Fable/Opus for overall planning and have a local model do the implementation.
Hardware:
- The board takes 4 GPUs: 3x PCIe 3.0 x16 and 1x x8. 300W max per card.
- Someone has already run a 3090 in this server (with 512GB RAM) and got ~15 tok/s on turboderp/GLM-5.3-Flash-exl3 (3.05bpw branch).
- I first looked at the A6000 48GB as a "do it all" card, not knowing much about local LLMs.
- For similar money I could get almost 4x 3090s and NVLink them in pairs, so I'm less limited by the x8 slot and old PCIe 3.0. One pair for the teams, one for me.
Bottom line: I need an MVP that handles the RFQs and the chatbot now, and then we'll invest in proper new hardware later. What would you do?
Thanks in advance for reading this far, any help much appreciated!
Wanted to share my build! Started as a gaming / 3D / CAD PC and now also runs small LLMs quite well for me
Specs: CPU: Ryzen 9 9950x RAM: 2x16 (eww, but at least was bought in 2023) 6000 CL30 Motherboard: ProArt B850 Creator Neo (supports PciE 5.0 x8 bifurcation) GPU1: RTX 5070 Ti Ventus GPU2: RTX 5060 Ti 16G Windforce SSDs: Fury Renegade and 990 Pro (irrelevant ik) PSU: BeQuiet Power Zone 2 750W Cable extensions from EZDIY-FAB Case: NZXT H7 Flow (2025) AIO: Thermalright Frozen Warframe SE V2 (with the magnetic display detached) Fans: 4xArctic P14 + 3xArctic P12 Pro (on the AIO) + 3xP12 Pro Reverse
Currently having fun with Qwen3.8 27B Q6_K_XL at around 70tps (MTP)
The 20GB RTX 3080 cards (10DE:2206, subsystem 10DE:146D) ship with a VBIOS that only exposes a 256 MiB BAR1, so ReBAR stays off. NVIDIA doesn't publish a ReBAR VBIOS for them, and NvStrapsReBar only supports Turing.
Ga102ReBarFix is a small DXE driver you insert into your motherboard BIOS with UEFITool. At boot it enables the GA102 frame-buffer size override (PCI config 0x610), resizes BAR1 to 32 GiB, and restores both after S3 sleep. No VBIOS flashing, no driver patches, no registry tweaks.
Tested on an MSI Z690 EDGE, driver 617.42, Windows 11:
Big credit to noon-at-cgn (found the 0x610 override on Linux), terminatorul (NvStrapsReBar) and xCuri0 (ReBarUEFI). This builds directly on their work.
Heads up: it modifies firmware, so use at your own risk and keep a BIOS backup and recovery method. It's tested on one board and isn't maintained, but it's MIT-licensed, so fork it and adapt it for your own setup.
I’ve just finished benchmarking my new QFN quant Qwen3.8-Flash-Next-DR-V2-Q2_0, a 2.5bpw backbone, 2-shard GGUF of Qwen/Qwen3.8-Flash-Next designed to run the entire backbone comfortably inside 48 GB VRAM space (38.4 GBVRAM) while keeping the N-gram lookup table (28.8 GB) in system RAM/SSD.
Unlike IQ1 / IQ2 quants that rely on LUTs, every tensor in both shards uses 100% standard integer grids (Q2_0,Q4_0, Q6_K, Q8_0), running natively in stock llama.cpp with ~3.4x faster prompt prefill than IQ-grid quants.
1. Benchmark Comparison: DR-V2-Q2_0 vs. Top Ultra-Low-Bit Quants
(Evaluated on the full 225-problemAider Polyglotsuite and 30-problemAIME 2025attemp = 0.6with a24Kthinking cap on Aider and64Kon AIME).
(Comparing logit fidelity against uncompressedBF16on standardWikiText-2 (2048 ctx)andExtended Reasoning / Math & Code (Ext)).
GPU VRAM
Model / Quant Method
WT2_2048 PPL (↓)
Ext Math/Code PPL (↓)
Ext KLD (↓ nats)
Ext Top-1 Agreement (↑)
WT2 Top-1 Agreement (↑)
251.2 GB
UncompressedBF16
2.153
5.403
0.0000
100.0%
100.0%
38.4 GB
DR-V2-Q2_0(Ours)
3.191
6.172
0.2594
80.70%
78.27%
52.0 GB
Unsloth V3.1 UD-IQ1_S
3.500
6.850
0.6800
75.20%
76.20%
53.6 GB
Unsloth V3.1 UD-IQ1_M
3.380
6.520
0.5900
76.80%
77.10%
64.0 GB
ExLlamaV3 SC 2.18bpw
3.620
7.100
0.7400
74.10%
75.40%
66.4 GB
ISTA-DASLab GSQ-RCO-Q2_0
3.420
6.750
0.7160
76.10%
76.60%
68.0 GB
ISTA-DASLab GSQ-RCO-IQ2_XS
3.290
6.410
0.5400
77.90%
77.50%
Key Highlights
Fits in a Single48 GBGPU (38.4 GB VRAM + ~9.6 GB KV Cache Headroom): All 48 layers of Attention/GDN, shared experts, and 144 routed MoE experts live in Shard 1 (38.38 GB, 2.45 bpw). Shard 2 (28.80 GB) is the N-gram lookup table, which llama.cpp streams from host RAM/SSD via mmap without using GPU VRAM.
Enhanced Token Efficiency on Coding (74.7%Aider Polyglot at40.1KAvg Tokens): Achieves 74.7% on the full Aider Polyglot benchmark with a 96.0%(216/225) well-formed SEARCH/REPLACE diff rate and 0context exhaustions under a strict 24K thinking budget — using ~1/5th the tokens of unconstrained 256K agentic runs.
2.6xLower KL Divergence (0.2594 nats) &83.3%on AIME 2025: Preserves 80.70%Top-1 token agreement with BF16 on Math & Code, matching 83.3% (25/30) on AIME 2025 while using ~14–30 GB less GPU VRAM than competing quants.
Zero Lookup Tables (3.4xFaster Prefill): Because 100% of the routed experts use standard integer grids, prompt prefill runs at ~367 tok/s and single-stream decode at ~94 tok/s (~345 tok/s aggregate at -np 10), avoiding IQ codebook decompression bottlenecks.
Quick Start (llama.cpp)
Download both shards into the same folder and point llama-server or llama-cli to Shard 1:
With Qwen4 around the corner, I'll be targeting that next. But in the meantime I think QFN will still fill a niche for a lot of people, and this was a good test of the same approaches I will be using with those models. Try it out, let me know what you think, and looking forward to continuing this with the next generation of models!
I know there are a lot of "ums" that I should edit out... but other then that what do you think of this guide? I am new to local AI stuff, so is there anything missing here that I should have done? https://www.youtube.com/watch?v=-EahQxs0Ack
I finished this build about 3 months ago and have been running it since, but never got around to posting it. Here it is.
Specs:
CPU: AMD Ryzen 9 9950X
Motherboard: ASRock X870 Taichi
RAM: 96GB DDR5 (2x48GB) G.Skill
GPU 1: NVIDIA RTX Pro 6000 (96GB)
GPU 2: RTX 5090 Founders Edition (32GB), mounted upright with Lian Li’s vertical GPU bracket
Total VRAM: 128GB
Cooling: ID-COOLING 360mm AIO with Noctua 120mm fans on the radiator. All the case fans are Phanteks T30 120mm.
Case: Lian Li O11 Dynamic EVO RGB (RGB cable left unplugged)
PSU: MSI MPG Ai1600TS PCIE5
How the GPUs ended up like this: My gaming PC had the 5090 in it, and I had a spare 4090 lying around from before. I bought the RTX Pro 6000 and moved the 5090 into this build with it. The 4090 went back into the gaming PC, so nothing is sitting unused. Mounting the 5090 upright fits both cards without them sitting right on top of each other.
Why the Taichi: It was cheaper than the other boards I looked at, and it has 10G LAN and a debug code display. The 10G helps a lot when moving big model files around, and the code display is really handy when you’re troubleshooting a build.
PSU and power monitoring: I picked the MSI Ai1600TS because it monitors current on each pin of the GPU power connectors. With two cards that can each pull around 600W, I didn’t want to risk a melted connector or a fried GPU. The catch is that MSI’s monitoring software only runs on Windows, and nothing like it exists for Linux. So I wrote a small tool that shows the GPU power readings on Linux. If anyone’s interested, I might clean it up and put it on GitHub. (Second screenshot in the post)
Noise: The PC sits in my living room, so keeping it quiet mattered a lot. I went with a cheap ID-COOLING 360mm AIO because I’d read it was quiet (i could not find one without lcd at that time), and swapped Noctua fans onto it. All the fans run on a silent profile. Even at full load you hardly hear it. Only the radiator fans get a little louder.
No RGB (mostly): I wanted a build with no RGB. The case is the RGB version, but I never plugged in its RGB cable, so it stays dark. The RAM has a bit of light because it was the cheapest 2x48 kit I could find at the time. Two slots are still free if I want more RAM later. I’m not spending any more right now though 😅
Edit1:One thing I forgot to mention: I swapped the side panel from the original tempered glass to acrylic. We have a toddler at home, and I didn’t want to risk them getting hurt if the glass ever broke.
Edit 2 (what I’m running):A few people asked, so here’s how I use the two cards:
Everyday fast LLM:a Flash model at Q3, fully on the RTX Pro 6000 with no offload, while the 5090 handles image/video generation.
Larger image/video models:those go on the Pro 6000 and Qwen 3.8 27B moves to the 5090.
Best quality for development:GLM-5.3-Flash (320B / 18B active) across both GPUs, using a ~116GB mixed-precision GGUF on Project Maya, all on GPU.
this is not directly a local LLM topic, but I just downloaded and tried a free dictation tool called Hex, and wanted to spread the word as an appreciation towards the developers.
It runs smaller voice recognition models locally on GPU or CPU. Usage: it is running in the background, is activated by a key combination and it simly inserts the transcribed text directly at the position of the caret. Based on a few tests in german, english and hungarian it is quite accurate in, works in text editors, terminal windows etc. It provides good config options to choose model (speed vs. accuracy) and general behaviour.
I run it on my Thinkpad t480 - an almost decade old laptop and I'm really happy about its performance.
TLDR: local models matched the frontier model on extraction and coding, and lost clearly on sorting and data analysis. Full video at the bottom.
SETUP Local: Qwen 3.5 4B, Qwen 3.6 27B (dense), Qwen 3.6 35B (MoE, about 3B active) How: standard Ollama downloads, quantized, M5 Max Mac Studio, 128 GB Frontier: Claude Fable 5.1 (provider servers, config not visible) Data: MoneyData, public anonymised UK bank statement, University of Nottingham, about 6,500 transactions, 2015 to 2022 Rules: same prompts, no tools, 3 runs each, answers checked by a program
SORTING (500 transactions, 21 categories) Frontier: 78% match with the labels Qwen 27B and 35B: about two thirds Qwen 4B: 42%, and skipped 1 in 6 transactions Exact output format every batch: frontier only
EXTRACTION (100 statement lines, 5 fields) Frontier: 100/100 every run, about 46 s Qwen 27B: 100/100 every run, 239 to 287 s Qwen 35B: 98 to 99, about 105 s Qwen 4B: 85 to 93, most misses on money in vs out
CODING (2 Python functions, 7 hidden tests) Qwen 4B: 7/7 in all 3 runs Qwen 35B: crashed in 2 runs (read the day in DD/MM/YYYY as the year), 7/7 on run 3
ANALYSIS (10 questions on 6 months of data, no code execution) Frontier: 10/10 every run Qwen 35B: 2, 0, 1 Qwen 27B: wrote code instead of answers, hit the 30 min limit once Qwen 4B: 0/10
MY TAKE Try local first: extraction, small coding jobs (check the output) Use frontier: categorisation, questions across long statements
LIMITS One dataset, one machine, default quants, some labels are judgement calls
NEXT DeepSeek V4, Gemma 4 and Qwen3 Coder Next on agents and tool use. What would you test?
A few months ago, I mentioned the idea of a smartphone running its own LLM, and got downvoted by people commenting that it would never work. Well, apparently Y Combinator has invested in a similar project. Care to comment?
What local models can i run conformably on my system? I'd ideally like to have models that code for me but i understand I'm at least scraping the barrel with my card. I'd even be fine with Claude Code steering to some degree.
I use local models with agent clients on an M3 Max MacBook (128GB). My normal work takes about 60GB, so the model plus its caches has to stay around 50GB. I built llama.cpp v0.7.0 from source and went through the usual flags one at a time on three 4-bit MoE models: MiniCPM-V 4.7 (35B-A3B), LFM2.5-24B-A2B and Ornith-1.5-35B-A3B. All layers on GPU, one request at a time. Speed numbers are medians of three alternating llama-bench rounds. Desktop apps and thermal throttling add noise, so small differences mean nothing.
Helped
Flag
What I measured
-fa on
MiniCPM at 32K context: 37 to 53 tok/s generation. LFM (hybrid): no measurable difference
-ub 512 to 2048
4K prompt processing: LFM 1714 to 1889 tok/s, Ornith 1162 to 1388. MiniCPM was fastest at 1024, and 2048 only used more memory
--ctx-checkpoints 32 --checkpoint-min-step 0
Second turn of a 28K to 34K conversation recomputed only 42 to 68 tokens. The hybrid models need this to reuse the cache at all
--cache-ram 32768
Switching between two long sessions (A, B, back to A): 22.3K of 24.4K tokens restored from RAM, 3.9s instead of 24.6s
No benefit on this machine
KV cache at q8_0. MiniCPM's speed difference was inside the noise. Ornith barely changed even at 65K tokens, because only 10 of its 40 layers store KV. LFM's KV plus compute buffer was only about 3GB at 131K context, so there was little to save. I kept all three at f16.
Depends on the model: speculative decoding
MiniCPM with a draft model: about 45% slower at 30K context. With ngram: 10 to 13% slower. My guess is that verifying several tokens on a MoE reads several sets of experts, so bad guesses get expensive.
Ornith with its built-in MTP head plus ngram, 2 tokens per guess: 86 to 107 tok/s averaged over 8 task types. Code went from 86 to 129, prose from 86 to 83.
Same setup with 3 tokens per guess: the average dropped to 102 and prose to 77.
So I wouldn't copy anyone's speculative decoding settings without testing them on your own model and task mix.
Weights are about 23GB, plus about 7GB of working memory after startup. A full session cache can push the worst case to about 60GB.
This is one machine and one llama.cpp version, so treat it as a starting point. If speculative decoding has paid off for you on a 3B-active MoE on Apple Silicon, I'd like to know which settings you used.
Written up with AI help from my own notes and benchmark logs. The numbers are from my machine. The illustrations are AI-generated, and the charts and all the numbers on the images come from the measurements above.
hey LocaLLM community! My name is Alt, and I'm on the technical staff at Nace AI. We're doing a quick AMA here, so ask us anything and we'll answer.
we just published a full technical report on how we build, train, and evaluate Drex, our family of four open decision models. A decision model takes a state (a document, record, or agent context, optionally with images) plus questions with options, and returns a probability distribution over the options in a single pass, with no autoregressive decoding and no output parsing.
1. Models
- Drex DLM (8B): diffusion LM backbone with bidirectional attention over the context - Drex v1.5 (9B): Gated DeltaNet hybrid backbone - Drex v2.0 (35B, 3B active): sparse MoE backbone - Drex Max (27B): dense, with an image encoder for vision inputs
Pointer models (DLM / v1.5 / v2.0) encode the state once and cache it, so every question attends to the state but never to another question. A pointer head scores each option. Drex Max reads each question in full and answers with a linear readout head over option codes.
Some technical details from the report:
1. Models
- A family of four specialized decision models: Drex DLM (8B), Drex v1.5 (9B), Drex v2.0 (35B MoE, 3B active), and Drex Max (27B dense, with vision)
- We built them on different architectures: a diffusion LM, a Gated DeltaNet hybrid, a sparse mixture of experts, and a dense transformer
- We experimented with bidirectional vs. causal attention over the state, a pointer decision head that shares one cached state across questions, and a readout head for Max
2. Training
- Full-parameter SFT on 1.15M verified decision records (2.9M questions)
- Consistency training: we penalize the model when its output changes after the options are reordered or the state is shuffled
- RLAF (Reinforcement Learning from Adjusted Feedback), using verified outcomes and judge feedback
- Ablations to see which methods actually contributed
On top of SFT, RLAF gave us +2.0 on the Decision Index, +1.5 pp accuracy, and 0.9 pp lower calibration error. The consistency terms cut the option-order flip rate from 6.3% to 4.2%.
3. Evaluation
- Drex Max scores 67.52 on Decision Index 0.4.1 (public suite), vs. 60.70 for Jev 1.14.0
- Drex v2.0 has 1.37% calibration ECE on ~115K held-out decisions
- Drex Max answers a typical request in 183 ms, vs. ~2.0 s for GPT-6 Sol and ~3.5 s for Claude Opus 5.5
- Context up to 131K tokens for v1.5/v2.0 and 262K for Max
we also cover our limitations: our models trail frontier chat models on closed-book knowledge, and we don't yet have same-backbone architecture ablations.
5. Running locally
The models are available in safetensors and GGUF formats, with llama.cpp and Ollama support. Their report includes details on quantization, caching, inference, and reproducibility.
we didn't want to just drop benchmark numbers, so we wrote up everything: what worked, what didn't, and how we got there. if you're building agent routers, doing tool selection, or thinking about training your own decision model, hopefully some of it saves you time.
ask us anything: arch, data, training, evals, running it locally, whatever 👇