HNHacker News
TopNewBestAskShowJobs

tarruda

3,052 karma · joined April 10, 2013

[ my public key: https://keybase.io/tarruda; my proof: https://keybase.io/tarruda/sigs/LfzoAvuAtqMKfg4heD0NRvBBrY8p1U4AFdWg_LGswnQ ]
submissionscomments
tarruda··on Qwen 3.8-Flash-Next releasing tomorrow (125B a6B)
Can you share the source for the parameter count (125B A6B)? I didn't see it anywhere in the page.
tarruda··on Why your local LLM feels dumber than it is
> I’m struggling to understand how that was causing such a large difference in the output.

It is incremental, the more a pattern appears in the context, the more likely it was to continue appearing in future turns.

So the model was likely trained to end a reasoning trace with a single linefeed and a `</think>`. It was also likely trained that two consecutive linefeeds sometimes produce an "Actually..." sequence.

So you can think of it as:

- the first time the reasoning trace was parsed, the two trailing linefeeds followed by </think> were added to the context by the template.

- next time the model was finishing a reasoning block, it added an extra linefeed instead of just closing directly with </think>. This slightly increases the chance that the next token will begin an "actually" sequence instead of closing.

- If it caused an actually, that was added to the context, further increasing the chance of a self correction at the end of the thinking block. The more self correction paragraphs are added, the higher the chance that following turns will have more.

- Eventually it can result in a state where it enters that loop forever (or at least for a very long time).

> Is the “autoparser” vulnerable to injections somehow?

The autoparser was (and still is) incorrectly parsing a trailing linefeed as part of a reasoning block. The were two ways to fix this, both of which must be implemented for the fix to be complete IMO:

- fix the autoparser definition to ensure remove surrounding whitespace is not returned as part of the text blocks

- trim leading/trailing whitespace in the encoding phase, so it fixes bugs or even "injections" where the client deliberately adds the whitespace to trigger problems.

For this specific issue, the maintainer later fixed by trimming the extra linefeed before passing to the template.

> How do you distinguish between user text, model text, and metadata, or is there ambiguity in the parsing?

That is model specific. Ultimately, a token stream is being produced and parsed by the inference engine, and each model uses different tokens/formats. The goal of the autoparser engine was to simplify the creation of parsers for new models by inferring the delimiter tokens from the chat template.

The llama.cpp API server returns pre-parsed data, so clients don't need to do any parsing to know what is a thinking block, a text block or a tool call.

tarruda··on Why your local LLM feels dumber than it is
There's quite a few tangential features that must be implemented correctly or risk affecting the LLM output in significant ways.

Parsing/encoding is one example: A couple of months ago I've debugged a reasoning loop bug in Step 3.7 Flash on llama.cpp that was caused by the parser capturing an extra `\n` as part of a reasoning block. It was something that only manifested at longer multi-turn agentic sessions, and the extra linefeed was steering the model into making reasoning self corrections that only got worse with longer sessions (more details about this issue: https://github.com/ggml-org/llama.cpp/issues/24181#issuecomm...)

No inference engine is perfect, but I feel that llama.cpp is the most reliable way to run language models locally.

tarruda··on Qwen 3.8 27B is excellent, but it defaults to overthinking things
> It can run 80-100t/s on a laptop

That is a lot, what is your laptop hardware?

One issue I have with Gemma is that they seem to use old architectures that rely on full attention, requiring a lot of RAM for context and quickly degrading speeds as context is filled.

Qwen 3.5+ is much better in that regard with its super efficient context. Even on Macs, speeds take degrade much more slowly.

tarruda··on Muse Glimmer: 30B-parameter model optimized for always-on local agent workflows
> It has all of the components of a pelican riding a bicycle, though not exactly arranged in the right order!

Maybe a sign that they didn't have SVG pelicans in the dataset

tarruda··on DeepSeek V4 Flash 0731
I don't have experience with opencode, so I couldn't tell you.

Codex is really good in my experience, especially due to its native sandboxing. Deepseek seems really well versed in its tools, including update_plan and knowing when to request sandbox escalation.

tarruda··on DeepSeek V4 Flash 0731
One of the best things about this version is that it is trained in the codex harness. It feels just as good as OpenAI models in using codex tools, but extremely cheap and with 1M context
tarruda··on Flux 3
It is not that they don't release open weights, but some users report that they are significantly inferior to the closed versions.
tarruda··on European "age verification" "app" forcing everyone to use Android or iOS
> You can't. Not if you're in the minority

Is that a bad thing?

tarruda··on GPT-5.6 Sol Ultra produces proof of the Cycle Double Cover Conjecture [pdf]
> It would be fundamentally wrong for you to ask what's the value of solving the Erdős–Hajnal conjecture; the value is that it's solved.

I suspect the value is in showing the potential that LLMs have in developing new breakthroughs.

tarruda··on Show HN: Getting GLM 5.2 running on my slow computer
Assuming steady 1 tok/second generation (which seems to be the case for M5 Max macbook), wait 1 day for a 86400 token response. In some configurations it can be as slow as 0.1 tok/s, so be prepared to wait for 10 days.
tarruda··on Hy3
Recently tried the pelican test on GPT-OSS which was probably one of the best local models of 2025. So cool to see how models have improved in the SVG pelican!
tarruda··on Hy3
> given they are pretty close in size

One thing that might not be obvious about about DSV4 is how much innovation the Deepseek team implemented in its architecture. When llama.cpp fully supports its lightning indexer, the full 1M context will only require about 6G of RAM. So even though they are similar in size, I believe Deepseek will be much more efficient in that regard.

> I wonder if Hy3 can compete there

Highly depends on how well Hy3 is resilient to quantization. DSV4 is useful even at 2-bit quants.

tarruda··on Anthropic says Alibaba illicitly extracted Claude AI model capabilities
Hopefully this distillation will lead Alibaba to release more powerful open weights LLMs, contributing to the democratization of AI.
tarruda··on VibeThinker: 3B param model that beats Opus 4.5 on reasoning with novel SFT+GRPO
Vibe thinker also beats Opus 4.5
tarruda··on VibeThinker: 3B param model that beats Opus 4.5 on reasoning with novel SFT+GRPO
If your framework desktop is the 128G Strix Halo, I recommend giving Qwen 3.5 122B-A10B a shot.

This Q5_K_M quant should be near lossless and fit with full 256K context in about 100GB of RAM: https://huggingface.co/AesSedai/Qwen3.5-122B-A10B-GGUF

tarruda··on Is AI ruining our skills? Early results are in – and they're not good
I don't feel like AI coding has ruined my skills, and I could go back to manual coding any time.

However, I cannot build a good mental model of a software component that I didn't write myself, and that can affect future maintenance if that component is not properly decoupled from the rest of the system.

tarruda··on Rio de Janeiro's "homegrown" LLM appears to be a merge of an existing model
What I find fascinating is the idea that there might be a set of "secret" tweaks that when applied to those weights (or even smaller models) could result in an intelligence simulation that could vastly surpass even something like Fable.
tarruda··on Claude Fable 5
Not as much as Qwen, since apparently 3.6 35B surpassed Opus 4.7 https://x.com/simonw/status/2044830134885306701
tarruda··on Nvidia RTX Spark
I don't think there's any incentive for Nvidia to make this a Windows-only device, so most likely it will be fully supported on Linux, just like their GPUs are.
tarruda··on Zig: Build System Reworked
> This also means that, according to our plans, Zig will have to propagate "stackless-ness" upwards in the call chain while analyzing the code (thus making Future.await not special per-se).

Very interesting, will be following Zig development more closely. Thanks for sharing!

tarruda··on Zig: Build System Reworked
> there's an accepted proposal to bring them back, in which case any function that calls await, or that otherwise has a suspension point, would have to be transformed into a stackless coroutine by the compiler, yes. The plan is for that to happen transparently without requiring an `async` annotation in the function signature, like we already did in the past.

If the compiler will treat functions that call a library function (Future.await) as special and change how the call site is compiled, why not just have an `await` keyword that when present will convert it into a state machine that can be suspended/resumed?

In other words: What is gained by not having a keyword that changes how a function is emitted if the compiler will change it anyway based on detection of a library call?

tarruda··on Zig: Build System Reworked
Fixed it. thanks!
tarruda··on Zig: Build System Reworked
> especially with the new IO mechanism which allows supper efficient code that looks good whether it's implemented single-threaded, multi-threaded or just via an event loop!

I had some trouble understanding how the async/await mechanism works:

  var foo_future = io.async(foo, .{args});
  defer if (foo_future.cancel(io)) |resource| resource.deinit() else |_| {}

  var bar_future = io.async(bar, .{args});
  defer if (bar_future.cancel(io)) |resource| resource.deinit() else |_| {}

  const foo_result = try foo_future.await(io);
  const bar_result = try bar_future.await(io);
My assumption is that calling io.async using an event loop implementation of IO, it will internally start a "task" (or whatever it should be called) and that the future is a handle to it. So far so good.

The part that I don't understand is what happens when you call future.await(io). Will the IO implementation somehow suspend the current function and resume once the future is resolved? If so, does that mean that every function in zig is a stackless coroutine?

tarruda··on Step 3.7 Flash
The official Q4_K_S gguf is quite good and has very good 35 tps generation on a M1 mac studio. Should be much faster on recent Macs, especially M5.
tarruda··on Claude Opus 4.8
> One of the most prominent improvements in Opus 4.8 is its honesty.

Does that mean it no longer deletes or changes tests to make it pass?

tarruda··on Deno 2.8
> safer bet as a dependency.

The recent 1 million line vibe coded PR suggests it is not so reliable as a dependency.

tarruda··on Qwen3.7-Max: The Agent Frontier
> That's impressive getting a 397B down to <110GB

It is higher than 110GB. MacOS allows up to 125G of the RAM to be shared with GPU, so it is certainly less than that!

> HF link is broken though!

Doesn't seem broken to me, but you should be able to search for tarruda/Qwen3.5-397B-A17B-GGUF on huggingface.

tarruda··on Qwen3.7-Max: The Agent Frontier
> I'm questioning ROI

If by ROI you mean saving more money than using paid APIs, then I don't think it is worth it. All you gain is full sovereignty over your AI usage.

tarruda··on Gemini 3.5 Flash
> 300B models at least fit in a single maxed out Mac Studio or a small stack of DGX Sparks or AMD Strix Halo boxes.

I run 2.54 BPW 397B Qwen 3.5 GGUF on a 128G mac studio at 20 tokens/second generation and 200 tokens/second processing. I'm not suggesting it matches the performance of the full BF16 model, but I did run some benchmarks locally and the results were pretty good:

- MMLU: 87.96%

- GPQA diamond: 86.36%

- IfEval: 91.13%

- GSM8k: 92.57%

So I think we have been at the "frontier capabilities at home" for a few months now.

← PreviousPage 2 of 23Next →