Skip to content

Conversation

@daniel-lxs
Copy link
Member

@daniel-lxs daniel-lxs commented Nov 6, 2025

Problem
When the model returns no assistant messages, the task was cancelled and an error was shown.

Fix

  • In Task.recursivelyMakeClineRequests(), detect empty assistant output and:
    • If autoApprovalEnabled + alwaysApproveResubmit: reuse shared backoff via Task.backoffAndAnnounce() and retry with incremented attempt, without persisting a failure assistant message.
    • Otherwise: prompt via api_req_failed; retry on yesButtonClicked (emitting api_req_retried), or persist error+failure entry only if declined.

Notes

  • Respects existing global rate-limit window and exponential backoff.
  • Telemetry/cost accounting unchanged.
  • First-chunk and mid-stream retry flows remain intact (Task.attemptApiRequest()).

Tests

  • Extended Task.spec to cover:
    • Auto-resubmit path retries on empty assistant (no failure entry before retry).
    • Prompt path retries on confirmation (no failure entry before retry).
    • Prompt path cancels on decline (error + failure entry persisted).

Closes #9076


Important

Add retry logic for empty assistant responses in Task.recursivelyMakeClineRequests() with conditions based on task settings.

  • Behavior:
    • In Task.recursivelyMakeClineRequests(), detect empty assistant responses and retry based on conditions.
    • If autoApprovalEnabled and alwaysApproveResubmit, use Task.backoffAndAnnounce() to retry without persisting failure messages.
    • Otherwise, prompt user via api_req_failed; retry on yesButtonClicked, or persist error if declined.
  • Notes:
    • Respects global rate-limit and exponential backoff.
    • Telemetry and cost accounting remain unchanged.
    • Retry flows for first-chunk and mid-stream are intact in Task.attemptApiRequest().
  • Tests:
    • Extended Task.spec to test auto-resubmit and prompt paths for retries and cancellations.

This description was created by Ellipsis for 1343a66. You can customize this summary. It will automatically update as commits are pushed.

@daniel-lxs daniel-lxs requested review from cte, jr and mrubens as code owners November 6, 2025 20:57
@dosubot dosubot bot added size:M This PR changes 30-99 lines, ignoring generated files. bug Something isn't working labels Nov 6, 2025
@daniel-lxs daniel-lxs moved this from Triage to PR [Needs Review] in Roo Code Roadmap Nov 6, 2025
@roomote
Copy link
Contributor

roomote bot commented Nov 6, 2025

Rooviewer Clock   See task on Roo Cloud

Review complete - no issues found.

The implementation correctly handles empty assistant responses with proper retry logic, backoff handling, and abort checking. The code follows existing patterns in the codebase and appropriately manages state for both auto-approval and manual approval paths.

Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues.

@dosubot dosubot bot added the lgtm This PR has been approved by a maintainer label Nov 6, 2025
@mrubens mrubens merged commit d631aa6 into main Nov 6, 2025
21 checks passed
@mrubens mrubens deleted the fix/empty-assistant-auto-retry-9076 branch November 6, 2025 21:15
@github-project-automation github-project-automation bot moved this from PR [Needs Review] to Done in Roo Code Roadmap Nov 6, 2025
@github-project-automation github-project-automation bot moved this from New to Done in Roo Code Roadmap Nov 6, 2025
mini2s added a commit to zgsm-ai/costrict that referenced this pull request Nov 7, 2025
* Add the parent task ID in telemetry (RooCodeInc#8532)

* Release: v1.82.0 (RooCodeInc#8535)

* feat: Experiment: Show a bit of stats in Cloud tab to help users discover there's more in Cloud (RooCodeInc#8415)

Co-authored-by: Roo Code <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: SannidhyaSah <[email protected]>
Co-authored-by: John Richmond <[email protected]>

* Revert "feat: Experiment: Show a bit of stats in Cloud tab to help users discover there's more in Cloud" (RooCodeInc#8559)

* Identify cloud tasks in the extension bridge (RooCodeInc#8539)

* Revert "Clamp GPT-5 max output tokens to 20% of context window" (RooCodeInc#8582)

* feat: Add Claude Sonnet 4.5 1M context window support for Claude Code… (RooCodeInc#8586)

feat: Add Claude Sonnet 4.5 1M context window support for Claude Code provider

* chore: add changeset for v3.28.16 (RooCodeInc#8592)

* Changeset version bump (RooCodeInc#8593)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* fix(i18n): Update zh-TW run command title (RooCodeInc#8631)

* feat(commands, webview): Add TDD built-in command; Refactor welcome tips and test guide definition

* refactor(project-wiki): separate command from subtask initialization

* feat(command): update built-in commands count and names in tests

* Add Claude Haiku 4.5 (RooCodeInc#8673)

* Release v3.28.17 (RooCodeInc#8674)

* Changeset version bump (RooCodeInc#8675)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* fix(editor): prevent file editing issues when git diff views are open (RooCodeInc#8676)

* fix(editor): prevent file editing issues when git diff views are open

Add scheme checks to ensure only file:// URIs are matched when finding editors,
avoiding issues with git diffs and other schemes. Includes error logging for
failed editor lookups.

* Remove the warnings

* fix(editor): enforce file:// scheme in editor lookups to prevent git diff issues

---------

Co-authored-by: daniel-lxs <[email protected]>

* web: Cloud page and updates to Pricing to explain Cloud Agent Credits (RooCodeInc#8605)

* Adds mention of Cloud agents to /pricing

* Credit pricing FAQ

* Skeleton of a /cloud page and more pricing page tweaks

* Lint

* Update apps/web-roo-code/src/app/cloud/page.tsx

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* Code review

* Updates copy to new credit system

* Moves Terms of Service to be backed by a markdown file, easier to read/edit/diff

* Updated ToS

* Twerm copy tweaks

* Cloud screenshot and style adjustments

* Style tweaks

* Styles

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* feat: Add userAgent to Bedrock client for version tracking (RooCodeInc#8663)

Co-authored-by: Roo Code <[email protected]>

* feat: Cloud agents in extension (RooCodeInc#8470)

Co-authored-by: Matt Rubens <[email protected]>

* feat: Z AI: only two coding endpoints (RooCodeInc#8687) (RooCodeInc#8693)

* Remove request content from UI messages (RooCodeInc#8696)

* Left align the welcome title (RooCodeInc#8700)

* Update image generation model selection (RooCodeInc#8698)

* feat(core): enhance client ID validation and CSP configuration

* web: Mobile image in /cloud (RooCodeInc#8705)

* feat(ui): add option to hide API request details by default

* Revert cloud agents for now (RooCodeInc#8713)

* chore: add changeset for v3.28.18 (RooCodeInc#8715)

* fix(task): adjust API request handling and error message assignment

* Changeset version bump (RooCodeInc#8716)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* test: update telemetry client mocks and fix test id typo

* Normalize docs-extractor audience tags; remove admin/stakeholder; strip tool invocations (RooCodeInc#8717)

docs(extractor): normalize audience to type="user"; remove admin/stakeholder; strip tool invocation examples

* Add Intercom as a subprocessor (RooCodeInc#8718)

* web: Leftover white bg (RooCodeInc#8719)

Leftover white bg

* feat(zgsm): add supportsMaxTokens flag and adjust max token handling

* docs: update Configuring Profiles video link (RooCodeInc#8189)

Co-authored-by: Roo Code <[email protected]>

* Fix link text for Roomote Control in README (RooCodeInc#8742)

* Try a 5s status mutation timeout (RooCodeInc#8734)

* web: Landing page for the reviewerFirst pass (RooCodeInc#8740)

* First pass

* SEO

* Update apps/web-roo-code/src/app/reviewer/page.tsx

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Remove GPT‑5 instructions/reasoning_summary from UI message metadata to prevent ui_messages.json bloat (RooCodeInc#8756)

chore(gpt5): stop persisting instructions/reasoning_summary in UI message metadata

Problem: ui_messages.json was getting bloated with unused or duplicated content (system 'instructions' and 'reasoning_summary') that we do not read back. Root cause: earlier OpenAI Responses API implementation persisted these fields to per-message metadata; however, 'instructions' are already sent as top-level request instructions and 'reasoning_summary' is surfaced live via streaming events. Neither field is consumed from storage. Changes: (1) Task.persistGpt5Metadata now stores only previous_response_id; (2) removed instructions and reasoning_summary from types; (3) updated Zod schema; (4) persistence layer writes messages as-is (no sanitizer); (5) tests green. Impact: smaller ui_messages.json, no runtime behavior change for requests. Migration: old metadata fields will be ignored by schema.

* Z.ai: add GLM-4.5-X, AirX, Flash (expand model coverage) (RooCodeInc#8745)

* feat(zai): add GLM-4.5-X, AirX, Flash; sync with Z.ai docs; keep canonical api line keys

* feat(zai): add GLM-4.5V vision model (supportsImages, pricing, 16K max output); add tests

* feat(types,zai): sync Z.AI international model map and tests
- Update pricing, context window, and capabilities for:
  glm-4.5-x, glm-4.5-airx, glm-4.5-flash, glm-4.5v, glm-4.6
- Add glm-4-32b-0414-128k
- Align tests with new model specs

* fix(zai): align handler generics with expanded model ids to satisfy CI compile step

* chore(zai): remove tier pricing blocks for Z.ai models

* fix(zai): simplify names in zaiApiLineConfigs for clarity

* chore(zai): set default temperature to 0.6

---------

Co-authored-by: Roo Code <[email protected]>

* Enable browser-use tool for all image-capable models (RooCodeInc#8121)

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Hannes Rudolph <[email protected]>
Co-authored-by: Matt Rubens <[email protected]>

* Skip failing tools tests (RooCodeInc#8767)

* Update text for clarity in reviewer page (RooCodeInc#8753)

* feat: add GLM-4.6-turbo model to chutes ai provider (RooCodeInc#8502)

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* web: Dynamic OpenGraph images (RooCodeInc#8773)

Co-authored-by: Roo Code <[email protected]>

* web: Updates CTA link in /reviewer to send people to /cloud-agents/welcome (RooCodeInc#8774)

* feat: add 'anthropic/claude-haiku-4.5' to prompt caching models (RooCodeInc#8764)

Co-authored-by: daniel-lxs <[email protected]>

* refactor(core): consolidate global custom instructions and improve shell handling

* fix: update X/Twitter username from roo_code to roocode (