News for hackers. Stuff that matters.
Re:Reasoning Is Not Model Improvement by simonw on Thursday October 23, 2025 @04:52PM (#45686962)
I just ran it like this and got the same correct result:

    curl https://api.openai.com/v1/responses \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $OPENAI_API_KEY" \
      -d '{
        "model": "o1",
        "input": "Multiply 87654321 × 98765432",
        "reasoning": {
          "effort": "medium",
          "summary": "detailed"
        },
        "tool_choice": "none"
      }'
Result: https://gist.github.com/simonw/52888b6546dcfc6a9dcc75bcf171b...

I promise you it is not using anything else. It is performing long multiplication entirely through model reasoning.

(I suggest getting your own OpenAI API key so you can try these things yourself.)

Re:Reasoning Is Not Model Improvement by simonw on Thursday October 23, 2025 @05:03PM (#45687099)
And if you're still not convinced the definitive evidence is to run a reasoning model on your own machine.

OpenAI's gpt-oss-20b is a 12GB download for LM Studio from https://lmstudio.ai/models/openai/gpt-oss-20b

It turns out it's powerful enough to solve this. Here's the thinking trace:

    We need product. Compute. Use approximate? Let's compute exactly. 87,654,321 * 98,765,432.

    We can use multiplication: Let's do 87,654,321 * 98,765,432.

    Compute using decomposition: 98,765,432 = 100,000,000 -1,234,568.

    So product = 87,654,321100,000,000 - 87,654,3211,234,568.

    First term: 8,765,432,100,000,000? Wait multiply: 87,654,321 *100,000,000 = 8,765,432,100,000,000.

    Now compute second term: 87,654,321 *1,234,568.

    Compute 1,234,568*87,654,321. Use maybe multiply 87,654,321 1,234,568 = 87,654,321(1,200,000+34,568).

    First: 1,200,000 = 87,654,32112100,000. 87,654,32112=1,051,851,852? Wait compute: 87,654,321*10=876,543,210; *2=175,308,642; sum =1,051,851,852. Then times100,000 =>105,185,185,200,000.

    Second: 34,568. Compute 87,654,32134,568 = 87,654,321*(30,000+4,568).

    30,000: 87,654,3213=262,962,963; times10,000 =>2,629,629,630,000.

    4,568: compute 87,654,3214,568 = *4000 + *500 + *60 + *8.

    4000: 87,654,3214=350,617,284; times1000 =>350,617,284,000.

    *500: *5=438,271,605; times100 =>43,827,160,500.

    *60: *6=525,925,926; times10 =>5,259,259,260.

    *8: 700,834,568? Wait *8=700,834,568.

    Sum these: 350,617,284,000
    +43,827,160,500 =394,444,444,500
    +5,259,259,260 =399,703,703,760
    +700,834,568 =400,404,538,328.

    Now add *30,000 part: 2,629,629,630,000 +400,404,538,328 =3,030,034,168,328.

    Now add to first part: 105,185,185,200,000 +3,030,034,168,328 =108,215,219,368,328.

    Thus product second term =108,215,219,368,328.

    Now subtract from first term: 8,765,432,100,000,000 -108,215,219,368,328 = 8,657,216,880,631,672.

    So answer: 8,657,216,880,631,672.
And a screenshot: https://gist.github.com/simonw/a8929c0df5f204981652871555420...
Re:Reasoning Is Not Model Improvement by photonthug on Thursday October 23, 2025 @05:53PM (#45687769)
Thanks for doing this. OpenAI is not in fact open, so referencing their claims as obviously true on anything else is just a non-starter. Counterpoint though, it's been a while since I've run this kind of experiment locally, so I started one too. For reasoning I only have qwen3:latest and I won't clutter the thread with the output, but it's complete junk.

To summarize, with large numbers it goes nuts trying to find a trick or shortcut. After I cut off dead-ends in several trials, it always eventually considers long form addition, then ultimately rejects it as "tedious" and starts looking for "patterns". Wait, let me use the standard multiplication algorithm step by step, oh that's a lot of steps, break it down into parts. Let me think. Over ~45 minutes of thinking (I'm on CPU), but it basically cannot follow one strategy long enough to complete the work even if landed on a sensible approach.

For multiplying two-digit numbers, it does better. Starts using the "manual way", messes up certain steps, then gets the right answer for sub-problems anyway because obviously those are memoized somewhere. But at least once, it got the correct answer with the correct approach.

I think this raises the question, if you were to double the size of your input numbers and let the more powerful local model answer, could it still perform the process? Does that stop working for any reason at some point before the context window overflows?

Re:Reasoning Is Not Model Improvement by rahimnathwani on Friday October 24, 2025 @05:07PM (#45699102)

    % ollama run gpt-oss:20b
    >>> Calculate 87654321 * 98765432
    Thinking...
    We need to compute product of 87654321 and 98765432. Straight multiplication. Let's compute.

    87654321 * 98765432.

    We can attempt to compute using big integer multiplication. Maybe use decomposition.

    Let a=87654321, b=98765432.

    We can try to compute with Python-like mental? Let's try.

    Use method: b=98765432 = 100000000 - 1234568? Wait 100,000,000 - 1,234,568 = 98,765,432? Let's check: 100,000,000 
    - 1,234,568 = 98,765,432 correct. So product = a*(100,000,000 - 1,234,568) = a*100,000,000 - a*1,234,568.

    Compute a*100,000,000 = 8,765,432,100,000,000? Wait multiply 87,654,321 by 100,000,000 gives 
    8,765,432,100,000,000? Let's check: 87,654,321 * 100,000,000 = 8,765,432,100,000,000? Actually 87,654,321 * 
    100,000,000 = 8,765,432,100,000,000? Multiply by 10^8: shift 8 digits: 87,654,321 -> 8,765,432,100,000,000? Wait 
    87,654,321 times 10^8 = 8,765,432,100,000,000? Let's do digits: 87,654,321 * 100,000,000 = 8,765,432,100,000,000? 
    Write 87,654,321 followed by 8 zeros: 8,765,432,100,000,000. yes.

    Now compute a*1,234,568.

    a = 87,654,321. Multiply by 1,234,568. Use decomposition: 1,234,568 = 1,200,000 + 34,568? Actually 1,234,568 = 
    1,000,000 + 234,568? Let's use 1,234,568 = 1,234,568. We'll do multiply.

    Option: use long multiplication: 87,654,321 * 1,234,568.

    We can also use a*1,234,568 = a*1,000,000 + a*234,568.

    Compute a*1,000,000 = 87,654,321,000,000.

    Now a*234,568. Compute a*234,568 = a*234,000 + a*568.

    Compute a*234,000 = a*234 * 1000. First a*234: a*200 + a*34.

    a*200 = 17,530,864,200.
    a*34 = a*30 + a*4.

    a*30 = 2,629,629,630.
    a*4 = 350,617,284.
    Sum a*34 = 2,629,629,630 + 350,617,284 = 2,980,246,914.

    Add a*200: 17,530,864,200 + 2,980,246,914 = 20,511,111,114. That is a*234.

    Then a*234,000 = 20,511,111,114,000.

    Now a*568 = a*500 + a*60 + a*8.

    a*500 = 43,827,160,500.
    a*60 = a*6*10. a*6 = 525,925,926; times10 => 5,259,259,260.
    a*8 = 701,234,568.

    Sum: 43,827,160,500 + 5,259,259,260 = 49,086,419,760. + 701,234,568 = 49,787,654,328.

    Now a*234,568 = a*234,000 + a*568 = 20,511,111,114,000 + 49,787,654,328 = 20,560,898,768,328.

    Now a*1,234,568 = a*1,000,000 + a*234,568 = 87,654,321,000,000 + 20,560,898,768,328 = 108,215,219,768,328.

    Now product: a*100,000,000 - a*1,234,568 = 8,765,432,100,000,000 - 108,215,219,768,328 = ?

    Compute:

    8,765,432,100,000,000
    -108,215,219,768,328
    =8,657,216,880,231,672? Let's subtract carefully.

    8,765,432,100,000,000
    - 108,215,219,768,328
    = 8,657,216,880,231,672.

    Check: subtract 108,215,219,768,328 from 8,765,432,100,000,000.

    8,765,432,100,000,000
    - 108,215,219,768,328
    --------------------------------
    = 8,657,216,880,231,672.

    Yes.

    Thus product is 8,657,216,880,231,672.

    Let's double-check via alternative method to ensure no mistakes.

    We can use big-int mental? Let's cross-check using another decomposition: Use b=98,765,432 = 99,000,000 - 234,568? 
    Actually 99,000,000 - 234,568 = 98,765,432. So product = a*99,000,000 - a*234,568.

    Compute a*99,000,000 = a*99 * 1,000,000. a*99 = a*100 - a = 8,765,432,100 - 87,654,321 = 8,677,777,779? Wait 
    compute: a=87,654,321. a*100 = 8,765,432,100. Subtract a gives 8,677,777,779. Yes.

    Then a*99,000,000 = 8,677,777,779 * 1,000,000 = 8,677,777,779,000,000.

    Now subtract a*234,568. We previously computed a*234,568 = 20,560,898,768,328.

    Thus product = 8,677,777,779,000,000 - 20,560,898,768,328 = ?

    Compute: 8,677,777,779,000,000 - 20,560,898,768,328 = 8,657,216,880,231,672. Same result. Good.

    Thus answer is 8,657,216,880,231,672. Provide in numeric form.

    Let's output.
    ...done thinking.

    The product is  

    \[
    87654321 \times 98765432 = 8\,657\,216\,880\,231\,672
    \]
Re:Reasoning Is Not Model Improvement by rahimnathwani on Friday October 24, 2025 @05:10PM (#45699138)

  Let's compute exactly. 87,654,321 * 98,765,432.

  So answer: 8,657,216,880,631,672.
Seems like it got one digit wrong. Python tells me the answer is:

8,657,216,880,231,672

I asked gpt-oss-20B the question three times. It took different routes each time. The first time it made some mistakes early on and then spent ages getting more confused. The other two attempts were successful.

Re:Reasoning Is Not Model Improvement by alganet on Friday October 24, 2025 @08:32PM (#45700455)
Damn, I'm kind of ashamed that I haven't checked the final result myself. I assumed simonw checked it before posting and blindly went with it.
Re:Reasoning Is Not Model Improvement by simonw on Friday October 24, 2025 @09:42PM (#45700744)
Wow, good catch! I eyeballed the first few digits and the last few digits and they were a match so I assumed the digits in the middle were correct too.
Re:Reasoning Is Not Model Improvement by rahimnathwani on Friday October 24, 2025 @10:03PM (#45700836)
I have a 9yo son and have learned to verify each digit :)
Re:Reasoning Is Not Model Improvement by alganet on Thursday October 23, 2025 @05:16PM (#45687291)
Looks legit.

I can see this call now has a lot more tokens for the reasoning steps. Maybe that's normal variance though.

(I don't have a particular interest in proving or disproving LLM things, so there's no incentive for me to get a key). There was an ambiguous point in the "proof", I just highlighted it.

Re:Reasoning Is Not Model Improvement by simonw on Thursday October 23, 2025 @05:18PM (#45687320)
If you want to write about LLMs I really strongly recommend getting an API key for the major vendors! It's really useful being able to run quick experiments like this one if you want to develop a deeper understanding of what they can and cannot do.

You can also get an account with something like https://openrouter.ai/ which gives you one key to use with multiple different backends.

Or use GitHub Models which gives you free albeit limited access to a bunch at once. https://github.com/marketplace/models

Re:Reasoning Is Not Model Improvement by alganet on Thursday October 23, 2025 @05:33PM (#45687514)
I want to write about thinking crictically, specially but not limited to a software development context.

Lots of people don't have resources to invest in LLMs (either self-hosted or not). They rely on what other people say. And people get caught in the hype all the time. As it turns out, lots of hype nowadays is around LLMs, so that's where I'll go.

I was skeptic about LK99. Didn't had the resources to independently verify it. It doesn't mean I don't believe in superconductors or that I should have no say in it.

Some of that hype will be justified, some will not. And that's exactly what I expect from this kind of technology.

Re:Reasoning Is Not Model Improvement by simonw on Thursday October 23, 2025 @05:37PM (#45687554)
At this point most of the top tier LLMs are available for free across most of the world. If people aren't experimenting with LLMs it's not due to financial cost, it's due to either time constraints (figuring this stuff out does take a bunch of work) or because they find the field either uninteresting or downright scary (or both).
Re:Reasoning Is Not Model Improvement by alganet on Thursday October 23, 2025 @05:57PM (#45687809)
I think you're missing something here.

I can invest lots of time in Linux, for example. I don't know how to write a driver for it, but I know I could learn how to do it. If there's a bug in a driver, there's nothing stopping me except my own will to learn. I can also do it in a potato, or my phone.

I can experiment with free tier LLMs, but that's as far as I will go. It's not just about me, that is as far as 99% of the developers will go.

So, it's not uninteresting because it's boring or something. It's uninteresting because it puts a price on learning. That horizon of "if there's a bug in it, I can fix it" is severely limited. That's a price most free software developers are not considering worthy. There's a lot of us.

Re:Reasoning Is Not Model Improvement by simonw on Thursday October 23, 2025 @06:02PM (#45687884)
I don't understand, what am I missing?

I love learning about software. That's why I'm leaning so heavily on LLMs these days - they let me learn so much faster, and let me dig into whole new areas that previously I would never have considered experimenting with.

Just this week LLMs helped me figure out how to run Perl inside WebAssembly in a browser... and then how to compile 25-year-old C code to run in WebAssembly in the browser too. https://simonwillison.net/2025/Oct/22/sloccount-in-webassemb...

If I'd done this without LLMs I might have learned more of the underlying details... but realistically I wouldn't have done this at all, because my interest in Perl and C in WebAssembly is not strong enough to justify investing more than a few hours of effort.

Re:Reasoning Is Not Model Improvement by alganet on Thursday October 23, 2025 @08:06PM (#45689125)
I would love to train an LLM from scratch to help me with some problems that they're not good at, but I can't, because it costs thousands of dollars to do so. You probably can't either, or can just in a very limited capacity (agents, or maybe LoRa).

A while back, I didn't even knew those problems existed. It took me a while to understand them and why they're interesting and lots of people spend time on them.

I have tried to adapt the problems to the LLMs as well, such as shaping the problem to look more like a thing that they're alreay trained on, but I soon realized the limitations of that approach.

I think in a couple of decades, maybe earlier, that kind of thing will be commonplace. People training their own stuff from scratch, on cheap hardware. It will unleash an even more rewarding learning experience for those willing to go the extra mile.

I think you're missing that perspective. That's fine, by the way. You're totally cool and probably helping lots of people with your work. I support it, it allows people to understand better where LLMs currently can help and where they cannot.

Re:Reasoning Is Not Model Improvement by simonw on Thursday October 23, 2025 @08:49PM (#45689434)
There aren't many tasks these days for which training or fine-tuning a model seems necessary to me.

One of the reasons I am so excited about the "skills" concept from Anthropic is that it helps emphasize how the latest generation of LLMs really can pick up new capabilities if you get them to read a single, carefully constructed markdown file.

Re:Reasoning Is Not Model Improvement by alganet on Thursday October 23, 2025 @09:06PM (#45689539)
I'm trying to simplify the live-bootstrap project by either removing dependencies, reducing build time or making it more unattended (by automating the image creation steps, for example).

https://github.com/fosslinux/live-bootstrap/

Other efforts around the same problem are trying to make it more architecture independent or improve regenerations (re-building things like automake during the process).

It's free and open source, you're welcome to fork it and try your best with the aid of Claude. All you need is an x86 or x86-64 machine or qemu.

The project and other related repositories are already full of documentation in the markdown format and high quality commented code.

Here's a friendly primer on the problem:

https://www.youtube.com/watch?v=Fu3laL5VYdM

If you decide to help, please ask the maintainers if AI use is allowed beforehand. I'm OK with it, they might not be.