I have multiple Deep Research jobs stuck with status=in_progress. we are passing the multiple hour mark. Same prompt works in the chat interface. Not sure what to do. This is an amazing service, I really don’t want to have to write my own research agent. Any ideas?
Hi
Could you provide more details about this
- What model are you using ?
- Code snippet if possible
I am having the exact same issue all day, almost 100 queries have been stuck in progress
Looking into this , will keep you posted
Code snippet — run_deep_research() from workers/services/llm_client.py:
from google import genai
Agent and polling constants
_DEEP_RESEARCH_AGENT = “deep-research-pro-preview-12-2025”
_DEFAULT_POLL_INTERVAL = 10.0 # seconds between polls
_DEFAULT_MAX_WAIT = 3600.0 # 1 hour timeout
async def run_deep_research(
prompt: str,
*,
poll_interval_seconds: float = _DEFAULT_POLL_INTERVAL,
max_wait_seconds: float = _DEFAULT_MAX_WAIT,
resume_interaction_id: str | None = None,
) → DeepResearchResult:
client = genai.Client() # uses GOOGLE_API_KEY from env
# --- Create or resume interaction ---
if resume_interaction_id:
interaction_id = resume_interaction_id
else:
interaction = await client.aio.interactions.create(
agent=_DEEP_RESEARCH_AGENT,
input=prompt,
background=True,
store=True,
)
interaction_id = interaction.id
# --- Poll until completed, failed, or timeout ---
start = time.monotonic()
last_status = None
while True:
elapsed = time.monotonic() - start
if elapsed >= max_wait_seconds:
raise LLMServiceError(
f"Deep research timed out after {elapsed:.0f}s: "
f"id={interaction_id} last_status={last_status}"
)
interaction = await client.aio.interactions.get(interaction_id)
status = getattr(interaction, "status", None)
if status != last_status:
logger.info("Deep research poll: id=%s status=%s elapsed=%.0fs",
interaction_id, status, elapsed)
last_status = status
if status == "completed":
break
if status in ("failed", "cancelled"):
raise LLMServiceError(f"Deep research {status}: {interaction_id}")
await asyncio.sleep(poll_interval_seconds)
# --- Extract results ---
text = _extract_interaction_text(interaction)
sources = _extract_search_sources(interaction)
return DeepResearchResult(
text=text,
search_sources=sources,
interaction_id=interaction_id,
)
Observed behavior from worker logs:
-
Interaction is created successfully (gets an interaction_id)
-
Polling loop runs, status never transitions to “completed”
-
Agent model: deep-research-pro-preview-12-2025
-
SDK: google-genai (Python async client via client.aio.interactions)
-
API calls: client.aio.interactions.create() then client.aio.interactions.get() in a loop
I will dm you the prompt and the run ID.
actually I don’t see how to dm you
Following up here - please let us know if you are still running into these issues with the latest Deep Research agents.
I am still facing this issue on the Gemini 3.5 Flash model
Gemini Deep Research Interactions stuck in in_progress after May 26 schema migration
Hello Google Gemini API team,
We are seeing a regression with Gemini Deep Research via the Interactions API after the May 26, 2026 migration to the new steps schema.
We run a production Telegram bot that takes a Polymarket event, builds a prompt, starts Gemini Deep Research, then delivers the final report as PDF to the user.
Since May 26, some Deep Research interactions never complete. They remain in:
status: in_progress
output_text: empty
error: None
steps: only one user_input step
They stay like this for hours. There is no completed, failed, requires_action, cancelled, or expired terminal status.
**Environment:**
- Python 3.12.3 (production), Python 3.10 (test instance)
- google-genai==2.7.0 (production), google-genai==1.75.0 (test instance)
- httpx==0.28.1
- Model: deep-research-pro-preview-12-2025 (production), also tested deep-research-preview-04-2026 and deep-research-max-preview-04-2026
- The issue reproduces on both SDK versions
**API method in production bot:**
```python
client.interactions.create(
input=full_prompt,
agent="deep-research-pro-preview-12-2025",
background=True,
store=True,
)
Then we poll with:
client.interactions.get(interaction_id)
What we observe:
-
Before May 26, we successfully ran 300+ Deep Research tasks across different prompts and Polymarket events.
-
After May 26, some tasks get stuck indefinitely.
-
For stuck tasks,
interactions.get(id)repeatedly returnsin_progress, with no output and no error. -
The only step is
user_input; there are no model/tool/search/url steps, so it looks like the agent worker never starts after the interaction is accepted. -
Network tests from the same server are stable. Raw HTTP requests to
generativelanguage.googleapis.comwork consistently. -
The issue is not the SDK client lifecycle bug: our real code keeps the
genai.Clientinstance alive. -
Deep Research works normally through the Gemini web interface (AI Studio) during the same time period when API calls are stuck.
-
A separate CLI implementation using the same server, same model, same universal prompt, and same events has completed 8/10 runs successfully when using:
client.interactions.create(
input=prompt_text,
agent="deep-research-pro-preview-12-2025",
background=True,
stream=True,
)
This suggests the background=True, store=True polling path may be using a different execution path or queue than the streaming path.
- One interaction completed successfully (2.3 min) using a brand-new API key from a fresh Google Cloud project with
store=True. Subsequent requests with the same key and identical parameters returned to the stuck behavior. This suggests possible per-key or per-project rate limiting or queue starvation, rather than a pure code-path bug.
We also tested / considered:
-
The issue does not look like prompt parsing failure, because the stuck interaction never proceeds past the initial
user_inputstep. -
It does not look like collaborative planning waiting for approval, because there is no
model_outputplan step and norequires_actionstatus. -
The new steps schema parsing works for completed interactions.
-
The problem reproduces across all three available Deep Research models (
deep-research-pro-preview-12-2025,deep-research-preview-04-2026,deep-research-max-preview-04-2026). -
The problem reproduces with trivial prompts (e.g., “What is 2+2?”), not just large production prompts.
-
The problem is that some interactions never reach any terminal state.
Stuck interaction IDs:
# Production bot (deep-research-pro-preview-12-2025, without store=True):
v1_ChdURWtaYW83S0Z0aUY0LUVQNnFTQ21BWRIXVEVrWmFvN0tGd........
stuck 31min, killed by bot restart
# Test bot (deep-research-pro-preview-12-2025, with store=True):
v1_ChdRVmtaYXR6N1BLX0FnOFVQMHFxSTRBMBIXUVZrWm.....
stuck 16+min
# Test script (deep-research-max-preview-04-2026, store=True, trivial "2+2" prompt):
v1_ChdUWGNaYXJiZk04X2JqdU1QNzZTRHNBZxIXVFhjWmFyYmZNO......
stuck 10+min
# Test script (deep-research-preview-04-2026, store=True) — SUCCEEDED:
v1_Chc5SDhaYXFMMEx2bkJqdU1QOVlTd3lRaxIXOUg4WmFxTDBMdm5CanV.....
completed in 2.3min ✓
# Test bot (deep-research-preview-04-2026, store=True, new API key from new project):
v1_ChdDb1VaYXVQSEs2bmJqdU1QZ2J1QmdBZxIXQ29VWmF1U......
stuck 13+min
Questions:
-
Is there a known issue with Deep Research Interactions created with
background=True, store=Trueafter the May 26 migration? -
Are
background=True, store=Trueandbackground=True, stream=Truerouted through different backend execution paths or queues? -
Should production integrations use
stream=Truefirst and then resume/poll withinteractions.get(), instead of pure polling? -
What is the expected terminal behavior for a Deep Research interaction that fails to start? Should it eventually become
failedorexpired? -
Can you confirm the current default for
agent_config.collaborative_planningfor Deep Research? -
Should we explicitly set:
agent_config={
"type": "deep-research",
"thinking_summaries": "auto",
"collaborative_planning": False,
}
- Is
service_tierrelevant for Deep Research reliability? Couldflexcause accepted interactions to remain inin_progressindefinitely?
Expected behavior:
-
If the task is accepted, it should either start producing agent steps and eventually complete, or fail/expire with a terminal status.
-
It should not stay in
in_progressindefinitely with onlyuser_input.
This regression is affecting paid user-facing workflows, so any guidance from the Gemini API / Deep Research team would be very helpful.
Thank you.