r/LocalLLaMA 3m ago

Discussion In regards to benchmaxxing...

Upvotes

With benchmaxxing being a high status concern amongst many users, it's reasonable to assume that most open bench harnesses have been trained for. Whether or not that is the case, we'll never truly know.

I wanted to toss in a suggestion because I think this would reasonably nullify a good portion of the concerns that come from models being trained to complete a bench.

Why doesn't everyone simply ask their agent to create a bench that hammers the subjects and topics of what YOU regularly do? that way, the bench metrics are unique to your use case and you can identify whether or not a model fulfills your needs whether it be different quants, different fine tunes, different models, or even KV weights.

it might be a bit tedious but think of it as a "one time" pain to create it and then have your newly downloaded models or configs run the gauntlet?

---------

this almost certainly obliterates the believed compromise that a model was trained to have good benchmark scores because I doubt any company is going to have training access to a harness you had your agent create... post release.

I'm curious what others think, what other ideas there are to get accurate tests, etc!


r/LocalLLaMA 1h ago

Resources Got DeepSeek-V4-Flash-Vision running reliably on 2× RTX PRO 6000 Blackwell (SM120) with SGLang — had to patch 3 separate issues

Upvotes

I’ve been working on getting DeepSeek-V4-Flash-Vision-Exp running properly under SGLang on a 2× RTX PRO 6000 Blackwell setup, and figured I’d post the results here in case anyone else is pushing this model on SM120 hardware.

Current setup:

2× NVIDIA RTX PRO 6000 Blackwell Max-Q (~96 GB each)
Ubuntu 24.04
Driver 610.43.02 / CUDA UMD 13.3
SGLang Vision preview lineage
FlashInfer 0.6.18
TP=2
MXFP4 MoE
DSPARK speculative decoding
context-length=278528
chunked-prefill-size=8192
max-running-requests=8
mem-fraction-static=0.94

The final configuration is now successfully doing text, Vision, and a 269,320-token real prompt. Getting there exposed three unrelated issues.

1. SM120 sparse-MLA Vision prefill crash

Basic Vision tests worked, but a larger real image consistently killed the scheduler with:

Unsupported sparse-MLA prefill configuration:
model=DSV4
num_heads=64
topk=512
page_block_size=64
topk_extra=512
extra_page_block_size=64

Tracing it showed that the DSV4 image-span visibility logic caused the main SWA cache width to reach a logical topk=448.

The existing SM120 wrapper was treating unsupported widths similarly to decode and padding:

448 -> 512

but FlashInfer 0.6.18’s dual-cache DSV4 prefill support is much narrower than its decode/single-cache support. In particular, the native dual-cache path expects the main cache at topk=128; padding 448→512 doesn’t make the complete shape supported.

The fix was to add a complete prefill capability check before padding/dispatch. Unsupported dual-cache prefill shapes fall back to SGLang’s existing Triton sparse-MLA implementation.

That fallback already handles:

extra_k_cache
extra_indices
extra_topk_length

and merges the main + extra cache results with LSE, so we didn’t have to throw away any of the DSV4 hybrid/SWA semantics.

After the patch, the exact request that crashed now logs:

SM120 sparse-MLA prefill:
unsupported FlashInfer shape
H=64 topk=448 extra_topk=512
pbs=64 extra_pbs=64
-> Triton fallback

and returns the correct Vision result.

Repeated image request also succeeds.

2. ~269k context caused an indexer CUDA OOM

Next I tried a text-only 269,320-token request.

The model died during prefill:

torch.OutOfMemoryError:
Tried to allocate 1.50 GiB
GPU had ~1.44 GiB free

The traceback landed here:

logits = page_table.new_empty(
    (batch_size, max_seq_len),
    dtype=torch.float32
)

inside the DSV4 c4 indexer.

So despite the KV/cache pools fitting, the indexer was creating a temporary:

[query_rows, max_c4_seq_len] fp32

logits tensor whose size grows with context and isn’t accounted for by mem_fraction_static.

This corresponds to the same class of problem being worked on upstream in SGLang.

I ported the row-slicing approach:

  • budget transient logits using a fraction of currently free GPU memory
  • split query rows into chunks
  • calculate logits + top-k per chunk
  • discard each logits slice before processing the next
  • preserve the full c4 width, so the actual indexer result is unchanged

For the failing workload, instead of potentially needing ~2 GiB for the full logits buffer, the transient is bounded to roughly 0.3 GiB per GPU under the observed free-memory conditions.

Retested the same request:

prompt_tokens:     269320
completion_tokens: 6
response:          LONG_CONTEXT_OK
wall time:         ~82 seconds

No OOM.

So this setup now has a genuinely tested ~269k prompt rather than merely having --context-length 278528 configured.

3. Vision preview was corrupting multi-turn tool-call history

This one was especially strange.

While using the Vision model as a coding/agent model, it initially called tools correctly, then started producing calls shaped like:

{
  "arguments": {
    "command": "..."
  }
}

when the actual tool schema was simply:

{
  "command": "..."
}

It could get progressively worse after validation errors.

The useful experiment was switching the same conversation history to my older known-good non-Vision DSV4 SGLang image.

Immediately:

bash -> PASS
read -> PASS
bash -> PASS

So I diffed the tool-history encoding paths.

The bug turned out to be in the Vision preview’s encoding_dsv4.py.

SGLang normalizes OpenAI:

"arguments": "{\"command\":\"echo ONE\"}"

into a Python dict:

{"command": "echo ONE"}

before DSV4 history encoding.

But this version of encode_arguments_to_dsml() did effectively:

try:
    arguments = json.loads(tool_call["arguments"])
except:
    arguments = {"arguments": tool_call["arguments"]}

Calling json.loads() on the already-normalized dict throws, so the fallback literally wraps it:

{
    "arguments": {
        "command": "echo ONE"
    }
}

Then the model sees this in its own history:

<parameter name="arguments">
    {"command":"echo ONE"}
</parameter>

instead of:

<parameter name="command">echo ONE</parameter>

So the model wasn’t randomly hallucinating the wrapper — the server was teaching it the wrong schema through its conversation history.

The fix is basically:

raw_arguments = tool_call["arguments"]

arguments = (
    json.loads(raw_arguments)
    if isinstance(raw_arguments, str)
    else raw_arguments
)

if not isinstance(arguments, dict):
    raise ValueError(...)

CPU round-trip tests now match my known-good non-Vision SGLang stack exactly, including multi-turn and error-history cases.

Current result

Final local image now passes:

Text inference                         PASS
Real Vision request                    PASS
Repeated Vision request                PASS
SM120 dual-cache prefill fallback      PASS
269,320-token text prompt              PASS
DSV4 tool-history round-trip           PASS
DSPARK block 4                         PASS
TP2                                    PASS

Long-context result:

269,320 prompt tokens
LONG_CONTEXT_OK
~82.4 sec end-to-end

Vision reproducer:

409 prompt tokens
277 image tokens
answer: RED

The serving config I landed on is roughly:

sglang serve \
  --model-path /model \
  --tp 2 \
  --trust-remote-code \
  --moe-runner-backend flashinfer_mxfp4 \
  --mem-fraction-static 0.93 \
  --cuda-graph-max-bs-decode 4 \
  --max-running-requests 4 \
  --context-length 245760 \
  --chunked-prefill-size 8192 \
  --reasoning-parser deepseek-v4 \
  --tool-call-parser deepseekv4 \
  --speculative-algorithm DSPARK \
  --speculative-dspark-block-size 4

One warning: I’m deliberately using DSPARK block size 4, even though the checkpoint advertises 5. There are SM120 correctness issues around depth 5 in the current stack, so I’m not “fixing” that warning by changing it to 5.

I kept each change isolated as a tiny derivative image rather than upgrading random pieces of SGLang/FlashInfer together. The final image is basically:

official Vision preview
    +
SM120 dual-cache prefill capability/fallback fix
    +
bounded DSV4 indexer logits for long context
    +
DSV4 tool-history serialization fix

r/LocalLLaMA 1h ago

Discussion Fable 5.1 is out, when will open weight models reach fable 5 level and 5.1 level?

Upvotes

I guess when k3.1 comes out, it will be fable 5 lev, so maybe this month followed by minimax m3 pro and glm 5.5 . I guess open mods will reach Fable 5.1 level by December 2026 to January 2027 . Deepseek seems to be behind other labs on performance and benchmarks


r/LocalLLaMA 2h ago

Discussion Really stunned by the Singularity comment section

Thumbnail
gallery
169 Upvotes

These are screenshots from the r/Singularity comment section. I'm speechless. This doesn't even have downvotes. How can someone cheer for a monopoly run by a few elites?


r/LocalLLaMA 2h ago

Question | Help Best Qwen 3.8 27B quantification GGUF?

4 Upvotes

There's soooo maaany options to choose from, AutoRound from Intel even, Unsloth, bartowski, etc ... which one is the closest to BF16 in Q4/Q5 range ?


r/LocalLLaMA 2h ago

Discussion Slow interference is great

16 Upvotes

No seriously, I kinda like it.
You have something to solve, you put it.

You know its gonna take like 20 mins to cook.
Every search adds another 30 minutes.

Yes I could boot up my debian on my gaming rig, run the same model at 10t/s + but why?
I rather let the poor server without GPU burn and run the same model at 2t/s and chill.

Its great, I love it.


r/LocalLLaMA 2h ago

Discussion CMP170Hx “Spark” Machine

Thumbnail
gallery
15 Upvotes

I got the CMP170 cards and unlocked them. I wanted to share my set up for CUDA since maybe it would be useful to others.

First off, I hate e-waste and we are in a special time for RAM. I wanted to have a DIY CUDA box, and I had started by adding additional cards to an old asus predator prebuilt I had around, which also had 64gb DDR5. To add the CMPs I needed more CPU lanes and newegg had some really good deals on CPU/MB/etc combos. Didn’t need a combo with RAM, otherwise I would have gotten it in newegg microcenter.

Anyway, I got a cheap case, some noctua fans for the cards, and transferred the memory/ssds. Placed previously owned cards on oculink slots, and used the main x16 for the GPU switch that houses the two CMP170s, so their effective speed is 2x16 across and with the other cards (which are 4x4, and therefore same speed).

Qwen Flash Next, turns out, fits very nicely in these cards. There is also a repository for deepseek, but you’d need at least 3 64GB cards to run it, and with prices rising, it will be hard to justify the gamble of buying ex mining cards for LLMs.

However…so far, these cards are great. Concurrency is good, prompt processing averages 4000 tps on Flash Next, decode is 80+ on a single stream. No MTP added. Third picture shows the 3 models I am now running in this CUDA box (flash next, qwen 27b, gemma 26b).

Anyone else trying out Flash Next on these cards?


r/LocalLLaMA 2h ago

Discussion Kaitchup posted Qwen3.8 27B Benchmarks for quants from Q4 to Q1

Thumbnail
kaitchup.substack.com
65 Upvotes

Kaitchup just posted results of his benchmarks for Qwen3.8 27B for quants from different labs, Q4 to Q1, .

All the details are hidden behind the paywall, but high level result is visible and looks like for people with 16GB cards UD Q3_K_XL is a winner - it has accuracy of 100% and size is only 12.8GB.


r/LocalLLaMA 3h ago

Discussion Fingers crossed for a 122b or really anything above 31b.🤞

Post image
285 Upvotes

What’s y’all’s best guess on parameter size based on these weird-ass names?


r/LocalLLaMA 3h ago

Question | Help Any ideas for ggufs under 14B for things like philosophy, chatting about life, bringing up new perspectives, etc?

7 Upvotes

I need a good model that feels smart ish in this regard but also runs with all my other stuff (audio gen, video gen, etc) enabled.


r/LocalLLaMA 3h ago

Resources Keeping up with model launches

Post image
72 Upvotes

Feels like maybe we have one more present left, for Christmas.


r/LocalLLaMA 4h ago

Discussion Finetuning away the GQA: Qwen 3.8 27B

0 Upvotes

Hi people of LocalLLaMa,

I have been wondering for quite some time now - and this all started after I read some comments complaining about the pricing on Qwen 3.8 27B as opposed to DSV4 Flash that it mainly was driven by how massive its KV cache overhead was. And while I did agree with that, what I did wonder later on was why could we not finetune that away.

Apparently, I am not the only who has thought of that - Arcee, an open source friendly company that does a lot of neat work and gave us AFM had a similar idea. They took their model, and also opensourced their 'DistilKit'.

Among the notable work on that article, what stood out the most was the fact that it was feasible. However, they did face some challenges, finetuning this newer layer to learn from the teacher (in this case imagine the GQA layers from the teacher has the goal to teach the newly placed KDA layer in the student to mimic its representations/embeddings similarly (can be measured by cosine and other things to see how well that is going) - what they found was that while it could fairly close on a pretty small finetuning task (I believe they did on a 1B tokens only), they noted the performance nose dived for GSM8K while for some other datasets they measured remain almost equivalent even though that finetune was much smaller than the original training.

I then decided I would do this for this model, and designed a strategy on how layers would be loaded, their representations would be cached, how the student layer would then be loaded and so on. In the initial runs each update on a DCLM (initial run was on smaller sequences sized 512, then I did a 2048, and then a 4096) but it was roughly about 262K tokens in unique total. And the performance was not surprisingly poor, yes it was not as good as a straight launch, and definetly fell apart just as Acree said especially on areas the new layers werent familiar with and hadnt seen the teachers behaviour.

So, why the long post which is just text?

Well, I was wondering, is there a way we could as a community pool our resources (I don't actually know how we would do this) and do this finetune together? Because I have tried, and alone it might not be feasible - I have already spent over 100 dollars this month on various experiments and using vast ai for the most part. This might just be our own community win, and all of us would put our names on the HuggingFace and come as collaborators, and might even point out issues and fix them as we go along. Most of the design stage and what parameters and datasets to use and how to use them and what to look for and where to look for is done by me before the LLMs take over the agentic role of ensuring the run runs, the code works, the eval comes out and what it looks like and we could work together to find holes in that and see well we missed x that is why the behaviour y is observed etc.

I don't know though. This is just me thinking out loud with the community. Y'all tell me what ideas you have on how we could do this resource-sharing so that we could do this finetune at scale rather than me doing it at say just 1B tokens and then it being good enough for most benchmarks but not really so at others.

Interestings reads on this: https://www.arcee.ai/blog/distilling-kimi-delta-attention-into-afm-4-5b-and-the-tool-we-used-to-do-it

You can look me up here: https://huggingface.co/amkkk or https://darthamk97.github.io/ (I don't really keep this as up to date as I wished)


r/LocalLLaMA 5h ago

Question | Help Is it silly to get a 64GB Strix Halo (Framework Desktop) ~$2000?

1 Upvotes

Hi! I've been considering getting a local AI station for video generation and light coding (I have coding AI subscription from work for heavyweight). My intended models are probably Minimax-H3 and Qwen 3.8 27b.

I see many people recommending as much RAM as possible when you buy, but I feel like 64GB of unified memory fits my needs well - runs H3 and Qwen 3.8 27B with a lot of headroom for context. Is there a reason I should spend $1500 more for 128GB? Do you foresee video/small coding models getting inflated in size in the future? Also open to good alternatives to the Strix/Framework Desktop. Thanks a lot!!


r/LocalLLaMA 5h ago

Question | Help Deepseek flash 0731 doomlooping

3 Upvotes

hello,

I'm using Deepseek flash regularly and from time to time i see it deviating and start doomlooping or generating gibberish. It's somethign i already saw in heavily quantized model buthere i used official deepseek release https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-0731 .
I would be curious to know if anyone encountered such thing and how they solved it .

Here is my config :

vllm serve deepseek-ai/DeepSeek-V4-Flash-0731 \
--trust-remote-code \
--safetensors-load-strategy prefetch \
--dtype bfloat16 \
--tokenizer-mode deepseek_v4 \
--reasoning-parser deepseek_v4 \
--tool-call-parser deepseek_v4 \
--enable-auto-tool-choice \
--attention_config.use_fp4_indexer_cache True \
--block-size 256 \
--kv-cache-dtype fp8 \
--enable-prefix-caching \
--max-num-seqs 32 \
--max-num-batched-tokens 16384 \
--max-model-len 131072 \
--compilation-config '{"cudagraph_mode":"FULL_AND_PIECEWISE"}' \
--max-cudagraph-capture-size 256 \
--speculative-config '{"method":"dspark","num_speculative_tokens":7,"draft_sample_method":"probabilistic"}' \
--moe-backend deep_gemm_mega_moe \
--enable-expert-parallel \
--gpu-memory-utilization 0.93 \
--no-enable-flashinfer-autotune \
--host 0.0.0.0 --port 8000

Thanks guys!


r/LocalLLaMA 5h ago

Discussion Question: Why is prefill unbelievably faster in vLLM than other inference engines?

18 Upvotes

I only started using some vLLM forks recently in a 4 x 48GB 4090 system.

DS4F - ~5000pp/180tg (DSpark)
Qwen3.8 Flash next - ~7500pp/135tg (MTP)

This is amazing, like having the API in my house. But it's also really hard to go back.

It's weird that we never come close to prefill numbers like this in llama.cpp or ik_llama. The narrative is that vLLM is around the same speed for single requests, but that is clearly not true.

There must some HUGE difference that constitutes an insurmountable obstacle to achieving such speeds in llama.cpp and many other inference engines. Does anyone know exactly what it is?

edit: These results are from my benchmark script that actually times the response, not the vLLM log. And they are not cache hits. My benchmark script deliberately busts cache. Actual cache hits, which I also measure, are like 20k-100k+.


r/LocalLLaMA 6h ago

Resources Keenable SELECT: an agent that searches the web in SQL

Thumbnail
keenableai.github.io
14 Upvotes

thats how deepresearch should look like nowdays


r/LocalLLaMA 6h ago

I Built A Thing Introducing Fleet: GPU benchmarking entirely in your browser.

Enable HLS to view with audio, or disable this notification

5 Upvotes

Run WebGPU compute kernels drawn from real AI workloads directly on your hardware and earn a personalized card built for your device.

On top of that, we're open-sourcing hundreds of these WebGPU kernels, our first step toward making browser inference as fast as physically possible. Contributed results show how they perform across real hardware and help make them faster.

Benchmark your GPU: https://webgpu-kernels-fleet.hf.space
Blog post: https://huggingface.co/blog/webgpu-kernels
Kernels: https://huggingface.co/webgpu-kernels/kernels


r/LocalLLaMA 6h ago

Question | Help Round-Robin with llama-server?

3 Upvotes

Hi,

I'm running a local server with three AMD MI50. Tensor parallelism is not an option since it's very slow with PCIe 3.0 and those cards are not on the same NUMA node.

In order to balance the load, I wanted to do something like round-robin. Every graphic card is running the same model with the same settings and llama-server has to manage requests so request 1 goes to card 1, request 2 to card 2 and so on.

It's possible to run one llama-server instance on each gpu, however I don't want to do load balancing on the client side with setting different providers with different ports.

Can this be done with llama-server only or maybe with some middleware?


r/LocalLLaMA 6h ago

Question | Help Help me set up local AI for my 85 year old aunt who is blind.

55 Upvotes

Hello all you smarter people. I recently retired and have taken on a task that is going to stretch me a bit.

TL;DR My aging aunt is going blind and wants to keep writing stories that she's been writing for over 70 years. I think local AI has the ability to make this possible but I'm looking for a little guidance on the steps and the order.

FULL VERSION

My aunt is 85 and lives with me now. She has written over 150 stories in her lifetime. They are mostly detective fiction and old west outlaw fiction. She also has macular degeneration that has taken most of her eyesight. She has given up on everything else she used to do, but she still writes and edits her own stories. Lately she has talked about quitting this too because it's just too hard to keep writing even with a giant screen and high-contrast tools.

After some discussion she agreed to try an interactive AI tool of some kind. I picked up a new desktop with an RTX 5080 (16gbVRAM) and 32 GB RAM.

I got Unsloth desktop installed this weekend and I grabbed Gemma4 as my first model.

But now I think I may be woefully out of my depth.

I've mostly only written prompts for existing online models before. I've never actually started from scratch like this and I'm not sure how much prep I need to do before I start interacting with the model. There are a ton of videos and articles about running AI locally, but it's not easy for me to figure out which ones I can trust or which steps apply to me. I would really appreciate a link to a guide for total newbs like me.

The use cases seem pretty simple to me:

  • Interact with my aunt solely through voice and audio.
  • Always be listening and available to her.
  • Read her own stories to her in a natural voice that she gets to choose.
  • Answer questions about existing stories to help her maintain continuity and bring old characters back from time to time. (She does this with handwritten notes right now and she's really struggling.)
  • When prompted, suggest technical edits (spelling, grammar, etc) and help her stay consistent with those edits across all her stories.
  • When prompted, suggest stylistic edits (clarity, pacing, etc) and help her stay consistent with those edits across all her stories.
  • Prepare her stories for publication in KDP format (this one is mostly to help me do this for her).

Here is the approach I was thinking I would follow, but after looking through all the Unsloth features I'm not sure how many steps I'm missing.

  1. Write instructions that I want the model to always follow.
  2. Place the instructions into the Unsloth System Prompt under Run Settings.
  3. Have my aunt converse with model via microphone.

My instructions cover a LOT.

- Brief description of my aunt and her writing goals and style.

- Outline of her work (the types of stories and any connections).

- Location of her existing stories.

- Description of the AI's role and its primary tasks including definitions of terms.

- A set of detailed rules to be followed when helping her edit.

But I still have so many questions:

- Do I need to create an unsloth project for this?

- What's the best way to have the model listen to voice inputs from my aunt?

- What's the best way to set up the model so it always listens for her input (kind of like an Alexa)?

- How can I have it keep a log of all its work and make backups of files before it makes changes? (similar to how Google Docs keeps a revision history and allows you to go back and grab an older version of a file)

Any insights folks want to share or resources you want to point me to would be most welcome. Thanks!


r/LocalLLaMA 6h ago

Discussion Intel hints it may get back into memory business

Thumbnail
tomshardware.com
233 Upvotes

Looking at ... some of the new memory architecture. ... I hired my good friend, Seok-Hee Lee, who used to run SK Hynix. ... We are not ready to unfold it.


r/LocalLLaMA 6h ago

Discussion Deceptive model quantization from AtomicChat?

58 Upvotes

I kept seeing guys in this sub saying how AtomicChat's Qwen3.8-Flash-Next quant is so good, fits in their machine when unsloth's can't, runs faster than other quants etc, so I went check out what's happening there.

First thing I noticed was that AtomicChat's Q4_K_M quant is suspiciously small when the ngram table is removed (only ~56GB), it seems like most of the tensors in this quant are IQ2_S instead of the usual Q4_K, Q5_K and Q6_K that you usually find in Q4_K_M quants, the GGUF filetype metadata also says IQ2_S instead of Q4_K_M. In their model card, their Q4_K_M also has suspiciously high KLD (0.084).

It seems pretty obvious to me that they're pretending a IQ2_S quant as a Q4_K_M, but at the same time I'm genuinely not sure because it can't be only me who found this right? How can nobody be pointing this out? Am I missing something or what may they be doing?

Their HF repo ID: AtomicChat/Qwen3.8-Flash-Next-GGUF


r/LocalLLaMA 7h ago

Resources Don't trust me bro: 3.49B tokens, 320,192 evals, 8 seeds, at batch size 1 over 1,062 GPU hours on a single RTX 3090. And an inference harness that fixes gpt-oss.

0 Upvotes

Long story short, about a year ago, in spite of everybody bashing gpt-oss for broken tool calling and refusals, I thought there's something there worth exploring. Model hit a sweet spot for me in that it was the first time I could run full 128k context, factory-precision weights, across parallel requests on a single RTX 3090 at close to 200 tps (well... eventually, but it was still flying at around 100 tps initially which was mind blowing in the before-times).

Could and would being two different things, turned out both llama.cpp and vLLM were shitting their pants running the model at the time (love you guys, I know this model was a pita!), particularly around tool calling (vLLM was / is broken seven ways to Sunday), mostly due to the Harmony template introduced by OpenAI (which, coincidentally (?) is almost identically implemented in Gemma 4 and somehwat similar in Muse Glimmer, 9-12 months after the gpt-oss release, so OpenAI was on to something there and likely not just for the OSS release but their bigger and closed siblings too).

Anyway, validating my hypothesis with the vanilla backends proved impossible at the time.

So I did the only rational thing: built an inference harness that fixes the model, then ran probably the most autistic evals in history -- 320,192 questions across 8 seeds, prefilling and decoding over 3.49B tokens, for 1,062 hours of batch size 1 GPU time on a single 3090.

In the words of Carl Sagan, to make an apple pie from scratch, you first have to invent the universe. I spent my nights inventing this one in parking lots between food delivery gigs, so I named it burrito.

All that just to test whether OpenAI shipped a broken model (spoiler: it didn't). Did it work? Here's the hero shots for the final boss of tool calling evals: multi-turn, pass@8 (at least 1 seed of 8) and pass^8 (every seed).

Sharing everything, MIT:

- harness: https://github.com/iamskeole/burrito-core

- evals (incl. full inference traces): https://github.com/iamskeole/burrito-evals

- fixed jinja template: https://huggingface.co/openai/gpt-oss-20b/discussions/274/files

By way of TL;DR, I'll leave you some of the more poignant lessons I've learned (outside how Anthropic likes to fuck with users of its harness or how early versions of Pi were adamant about millisecond precision timestamps in the system prompt updating every turn and invalidating kv cache), applicable to both this model, but my hunch tells me others (especially Qwen) too. There's loads of data, reports and chart porn in the evals repo for the inquisitive ones out there (heads up, butchered Qwen into writing most of the prose there, but i think it did a good job).

(1) not all reasoning is created equal:

- same amount of reasoning TOKENS, the model reasons DIFFERENTLY

| Effort | Accuracy |

|---------------|:-------------:|

| Low | 38.3% |

| Medium | 97.1% |

| High | 100.0% |

(2) preserving reasoning may not be a silver bullet:

- it only slightly increases accuracy

- it stabilizes seed variance, so the model is slightly more predictable

- it can actually hurt performance in some tests, particularly those that rely on very specific prompt formatting or tool definitions outside the happy-path of standard OpenAI schemas

- speed tradeoff, longer prompts (lower speed) that now include reasoning traces vs. OpenAI's recommendation to exclude them

(3) corollary to #1 and #2, pushing tokens beyond an effort level's optimal zone crashes accuracy:

- each effort level has a sweet spot; inside that zone, model reasons effectively; outside it, it wanders and degrades

My hunch is there's nothing particularly special about gpt-oss in manifesting this behaviour (?). These could very well transfer to other models.

Or, to bring this all back home to the present zeitgeist, there may be some way to rein in Qwen's thinking without sacrificing quality, but that's a whole new exercise. Stay tuned!


r/LocalLLaMA 7h ago

New Model Multilingual Tiny (3.7B) Reasoning MoE pretrained from scratch on a consumer-grade GPU

20 Upvotes

Hello!

I've just uploaded a recent checkpoint of my model trained from scratch:

https://huggingface.co/piotr-ai/polanka_3.7b_exp_wip_260901

It was pre-trained, mid-trained, and fine-tuned on a single 4090 over many months. How many tokens? I lost count.

Feel free to use it as a research artefact.

13 languages: PL, EN, ZH, CS, SK, UK, RU, IT, ES, FR, DE, PT, LT — with extra upscaled data for PL/EN/ZH.


r/LocalLLaMA 7h ago

Question | Help advice for a robot that programs SwiftUI, iOS apps well

0 Upvotes

I have 64GB os VRAM to consume, and I need to wean myself off of Claude Opus, like yesterday. however unless we're programming in Python, I cannot get my home robots to write good code. the best I've come up with is Qwen3.8/27B, but the output is so buggy, after numerous bug fixes cycles until it compiles again, the feature we were working on doesn't work and I end up blowing all my tokens asking Opus to fix it.

I'm wondering, is my problem iterative development rather than attempting a well documented one shot? Or is my problem really (as I suspect) just not using the right model?

sometimes I wonder if the models people rave about here are just misinformation/marketing.


r/LocalLLaMA 7h ago

I Built A Thing OpenAI Privacy Filter completely missed 3,132 mandatory entities vs 1,447 for Layrin, but scored much higher on RedactionBench R-Score

0 Upvotes

I ran OpenAI Privacy Filter and Layrin on all 200 RedactionBench documents: 11 categories and 8,273 mandatory entities. I got a result I wasn’t expecting.

OpenAI Privacy Filter had a much better overall R-Score, but Layrin missed far fewer entities that RedactionBench says should always be protected. At first I thought my scorer was wrong.

Metric Layrin OpenAI Privacy Filter
Reproduced full R-Score 0.371 0.600
Micro mandatory coverage 81.32% 61.85%
Exact mandatory recall 79.55% 60.98%
Fully protected mandatory entities 6,581 5,045
Completely missed mandatory entities 1,447 3,132
P20 document coverage 68.16% 48.08%
P50 document coverage 84.24% 84.62%

Full disclosure: I built Layrin,a local privacy layer for protecting sensitive text before AI use. English isn’t my first language, so I used AI to help clean up some of the wording, but I ran the experiment and checked the underlying results myself.

The extra metric here, Mandatory Entity Coverage, is not another official RedactionBench score. I added it to answer a narrower question: when RedactionBench says an entity must always be protected, how much of it was actually protected?

A completely missed entity gets zero coverage. Micro coverage pools coverage across all 8,273 mandatory entities, while exact recall only counts an entity when the whole span was covered.

Why did the result flip?

R-Score does not only measure leakage. It also penalizes unnecessary redaction, which makes sense. A system that hides half the document may be safe, but the result might not be very useful.

The problem is that these are different failure modes. Over-redaction hurts utility, while a miss can expose confidential information. Putting both into one score is useful for ranking systems, but it can hide what caused the result.

Before reading too much into this, I checked the scorer. My paper-faithful implementation passed 29/29 conformance tests covering grouping, partial coverage, contextual selection and benign-gap penalties.

On the frozen OpenAI Privacy Filter predictions, it produced:

  • Mean R-Score: 0.6003 vs ~0.58 published
  • P20: 0.335 vs ~0.31
  • P50: 0.615 vs ~0.59

The category pattern was also close. I then ran the exact same scorer unchanged on Layrin and got 0.3705.

So the result seems real: OpenAI Privacy Filter clearly wins the combined R-Score, but Layrin protects much more of the information RedactionBench labels mandatory.

Context is where it gets messy

RedactionBench separates information into mandatory, contextual and unannotated gaps. Its human study included 85 participants, with agreement around:

  • 89.4% for mandatory information
  • 47.7% for contextual information
  • 94.1% for preserving gaps

That 47.7% stood out to me. Once the answer depends on context, people disagree a lot.

Take a date like September 18, 2026. It could be harmless, or it could be a termination date, treatment date, confidential acquisition date or the timestamp of an internal security incident.

RedactionBench also evaluates documents without the full user request, conversation history or system prompt. In a real AI workflow, those can change what someone is comfortable sending.

Layrin also uses reversible typed tokens instead of simply deleting values.

Sarah Chen signed the agreement with Northbridge Capital on September 18, 2026 for $4.2 million.

becomes:

[PERSON_1] signed the agreement with [COMPANY_1] on [DATE_1] for [AMOUNT_1].

The model does not see the real values, but it still understands the structure. That makes me wonder how much utility is really lost when the exact value is not needed for the task.

What was being penalized?

Across the benchmark, 23,476 Layrin-protected spans landed entirely inside RedactionBench-defined gaps, with no overlap with mandatory or contextual annotations.

Some are clearly over-redaction. I’m not claiming otherwise.

But manual checks also found things like production AWS Secrets Manager ARNs, RDS hostnames, internal package-registry URLs, S3 paths to production user exports, private IPs and application .env paths.

Logs alone contained 11,986 of the 23,476 gap protections, or 51.06% of the total.

It was also the category with the largest mandatory-coverage difference:

  • Layrin: 92.04%
  • OpenAI Privacy Filter: 45.78%

So the category where Layrin received the biggest over-redaction penalty was also the one where it protected much more mandatory information.

That does not mean every extra protection was necessary. It wasn’t. But the trade-off is pretty visible.

The gap protections were not only infrastructure values. They also included:

  • 2,698 date/time spans
  • 2,490 organization/company spans

RedactionBench can reasonably classify these as values that should remain visible under its policy. A company can also reasonably decide that an exact company name, date or internal resource is not needed by an external model.

That is why I’m hesitant to treat every benchmark false positive as information that was pointless to protect.

It wasn’t only Logs

Layrin had higher micro mandatory coverage in all 11 categories.

Even Files, the only category where OpenAI had slightly higher mean document coverage, looked different when mandatory entities were pooled:

  • Micro mandatory coverage: 70.68% Layrin vs 64.44% OpenAI
  • Completely missed mandatory entities: 778 vs 978

So one unusual category was not carrying the whole result.

Where I ended up

I don’t think R-Score is bad. It measures selectivity, which my mandatory-only metric intentionally ignores.

What I’m less sure about is treating the benchmark’s protection boundary as a universal privacy boundary. A hostname, date, company name or internal resource can be considered unnecessary redaction by the benchmark while still being something a real user does not want to send outside their environment.

For me, one combined number is not enough here. I would want to see at least two things separately:

  1. How much mandatory information escaped?
  2. How much additional information was protected outside the benchmark boundary?

In this experiment, those two dimensions separated a lot. OpenAI Privacy Filter had the much better combined R-Score. Layrin protected much more mandatory information, but also protected much more outside RedactionBench’s selected boundary.

Should privacy benchmarks report protection failures and over-redaction separately, instead of letting one offset the other in a single score?

Methodology

Both systems received the same 200 RedactionBench documents, with ground-truth annotations unavailable during inference.

Layrin Desktop 0.1.4.0 used its frozen production local-protection and tokenization pipeline, with the production configuration unchanged during the evaluation.

For some structured inputs, I used deterministic inference segmentation. This only changed the inference boundaries. The source text was unchanged, predictions were mapped back to the original offsets, and every source file still counted as one benchmark document.

OpenAI Privacy Filter was run locally using its public implementation.

Links

Full study, category tables, methodology and reproducibility details:
https://layrin.com/research/openai-privacy-filter-vs-layrin-redactionbench

OpenAI Privacy Filter:
https://github.com/openai/privacy-filter

RedactionBench paper:
https://arxiv.org/abs/2606.18782