> "tool_choice": "auto"
> "parallel_tool_calls": true
Can you remake the API call explicitly asking it to not perform any tool calls?
> "tool_choice": "auto"
> "parallel_tool_calls": true
Can you remake the API call explicitly asking it to not perform any tool calls?
Those are its default settings whether or not there are tools configured. You can set tool_choice to the name of a specific tool in order to force it to use that tool.
I added my comment here to show an example of an API call with Python enabled: https://news.ycombinator.com/item?id=45686779
Update: Looks like you can add "tool_choice": "none" to prevent even tools you have configured from being called. https://platform.openai.com/docs/api-reference/responses/cre...
Can you remake the call explicitly using the value `none`?
Maybe it's not using Python, but it's using something else. I think it's a good test. If you're right, then the response shouldn't change.
Update: `auto` is ambiguous. It doesn't say whether is picking from your selection of tools or the pool of all available tools. Explicit is better than implicit. I think you should do the call with `none`, it can't hurt and it can prove me wrong.
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.)
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...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?
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.
% 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
\]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.
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
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.
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.
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.
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.
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.
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.