DeepResearch returns empty ResponseFunctionWebSearch.action after exceeding maxToolCalls
Nobody has claimed this yet.
- Dominant language
- Kotlin
- Stars
- 1.5k
- Forks
- 264
- Avg merge
- 9h 46m
- Merged PRs (30d)
- 96
Description
Even after exceeding maxToolCalls, DeepResearch never stops producing ResponseFunctionWebSearch.
However, after that point, ResponseFunctionWebSearch.action becomes empty that causes
So if I set maxToolCalls to 5, DeepResearch returned Response.output with more than 50 of ResponseReasoningItem and ResponseFunctionWebSearch, but only the first 2 of ResponseFunctionWebSearch has valid action parameters.
Example output shown below.
ResponseOutputItem{webSearchCall=ResponseFunctionWebSearch{id=ws_68affc98f75c8193abaae4fa49b12d4306939ec79bab8479, action=Action{search=Search{query=今週 IT ニュース 日本 2025 最新, type=search, additionalProperties={}}}, status=completed, type=web_search_call, additionalProperties={}}},
ResponseOutputItem{reasoning=ResponseReasoningItem{id=rs_68affc99cbe081938dea99aef23c678206939ec79bab8479, summary=[], type=reasoning, content=, encryptedContent=, status=, additionalProperties={}}},
ResponseOutputItem{webSearchCall=ResponseFunctionWebSearch{id=ws_68affc9aef748193840f030549e3acba06939ec79bab8479, action=Action{search=Search{query=2025年8月 IT ニュース 日本, type=search, additionalProperties={}}}, status=completed, type=web_search_call, additionalProperties={}}},
ResponseOutputItem{reasoning=ResponseReasoningItem{id=rs_68affc9b795481938611baeddf93669c06939ec79bab8479, summary=[], type=reasoning, content=, encryptedContent=, status=, additionalProperties={}}},
ResponseOutputItem{webSearchCall=ResponseFunctionWebSearch{id=ws_68affc9bfba0819398ad9ea0f0b8cef206939ec79bab8479, action=, status=completed, type=web_search_call, additionalProperties={}}},
ResponseOutputItem{reasoning=ResponseReasoningItem{id=rs_68affc9c59b481939ac57623b9aa479506939ec79bab8479, summary=[], type=reasoning, content=, encryptedContent=, status=, additionalProperties={}}},
ResponseOutputItem{webSearchCall=ResponseFunctionWebSearch{id=ws_68affca030cc8193a2584678fe41ccbb06939ec79bab8479, action=, status=completed, type=web_search_call, additionalProperties={}}},
I observed this issue in ver 3.1.2, with both o3-deep-research and o4-deep-research-mini.
I also tested the Web Search Tool, but no similar problems.
As per this guide, we should be able to control how many WebSearchCalls DeepResearch can produce.
So I think there is 2 problems.
- DeepResearch does not finish producing WebSearchCall even after exceeding maxToolCalls.
- After exceeding maxToolCalls, DeepResearch creates WebSearchCall with empty/invalid action, which throws "com.openai.errors.OpenAIInvalidDataException:
actionis not set"
Please let me know if you need further info.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the issue with maxToolCalls set to 5 using o3-deep-research and o4-deep-research-mini, then inspect the ResponseOutputItem sequence and the Web Search Tool comparison. Done means DeepResearch stops producing WebSearchCall items after the limit and does not emit items with an empty action that raises OpenAIInvalidDataException.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, kotlin
- Domain
- api
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100