openai / openai/openai-java

DeepResearch returns empty ResponseFunctionWebSearch.action after exceeding maxToolCalls

Open
#600 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

api bug
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.

  1. DeepResearch does not finish producing WebSearchCall even after exceeding maxToolCalls.
  2. After exceeding maxToolCalls, DeepResearch creates WebSearchCall with empty/invalid action, which throws "com.openai.errors.OpenAIInvalidDataException: action is not set"

Please let me know if you need further info.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.