-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Parse the retry out of the gemini 429 response #2118
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
| // If the error is a 429, and the error details contain a retry delay, use that delay instead of exponential backoff | ||
| if (error.status === 429) { | ||
| const geminiRetryDetails = error.errorDetails?.find( | ||
| (detail: any) => detail["@type"] === "type.googleapis.com/google.rpc.RetryInfo", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of using any for the details in the gemini retry info, consider defining a proper interface. This promotes type safety and makes the code easier to maintain.
| (detail: any) => detail["@type"] === "type.googleapis.com/google.rpc.RetryInfo", | ||
| ) | ||
| if (geminiRetryDetails) { | ||
| const match = geminiRetryDetails?.retryDelay?.match(/^(\d+)s$/) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider refining the regex to capture fractional seconds too (e.g. /^(\\d+(?:\\.\\d+)?)s$/). Currently it only matches integer seconds and might miss delays like '1.5s'.
| const match = geminiRetryDetails?.retryDelay?.match(/^(\d+)s$/) | |
| const match = geminiRetryDetails?.retryDelay?.match(/^(\d+(?:\.\d+)?)s$/) |
| const exponentialDelay = Math.ceil(baseDelay * Math.pow(2, retryAttempt)) | ||
| let exponentialDelay = Math.ceil(baseDelay * Math.pow(2, retryAttempt)) | ||
|
|
||
| // If the error is a 429, and the error details contain a retry delay, use that delay instead of exponential backoff |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For improved clarity and testability, consider extracting the gemini 429 retry delay parsing logic into a helper function. This would isolate the parsing logic and allow for dedicated unit tests.
* main: Remove the ask promise error (RooCodeInc#2123) Tweaks to support prompt line number format (RooCodeInc#2121) Fix switching profiles to ensure only the selected profile is switche… (RooCodeInc#2119) Fix Gemini command escaping (RooCodeInc#2120) Parse the retry out of the gemini 429 response (RooCodeInc#2118) Revert "Remove the ask promise error" (RooCodeInc#2117)
* Parallel tasks * Handle null [x]ModelInfo types, recover from settings schema parse errors (#2064) * Require exactly node v20.18.1 (#2065) * Get rid of runner and all CJS stuff * Add an activation command for other extensions (#2073) Since VS Code provides no actionEvents that trigger when a specific extension activates, extensions can't activate only once Roo is activated and ready. This commit introduces a new roo-cline.activationCompleted command and fires it at the very end of extension activation. Other extensions that use Roo's exported APIs can now activate when they see this event. Co-authored-by: Greg Taylor <[email protected]> * Update bug_report.yml (#1994) * Update bug_report.yml * Update bug_report.yml --------- Co-authored-by: Matt Rubens <[email protected]> * Fix mention file name is not fully displayed (#2026) Fixed path leading character handling to preserve language characters and remove specific punctuation marks * In-Editor Browser Improvements (#1601) * Browser Automation Improvements * Added multi-tab remote Chrome support * Added support for hover * Properly caching remote browser host in global state * Cleanup functions * Updated for changes after merge * Added www. exception for common tabs * Update src/core/webview/ClineProvider.ts * Revert README changes --------- Co-authored-by: Matt Rubens <[email protected]> * Add missing awaits on refactored tools (#2078) * More progress * Added Gemini 2.5 Pro model to GCP Vertex AI Provider (#2079) * More progress * Display info about partial reads in chat row (#2080) * More progress * Update contributors list (#2023) docs: update contributors list [skip ci] Co-authored-by: mrubens <[email protected]> * More progress * Handle multiple API pages worth of contributors (#2088) * Update contributors list (#2089) docs: update contributors list [skip ci] Co-authored-by: mrubens <[email protected]> * Refactor/cline.ts/list files (#2067) * "Refactor list_files tool to separate module (#2057)" * Await --------- Co-authored-by: Matt Rubens <[email protected]> * Remove switch from tools (#2091) * HandleError returns a promise * Remove unnecessary switch from tools * Fix a type in the listFiles tool (#2092) * Move write_to_file to a tool file (#2093) * Move apply_diff to a tool file (#2094) * Move insert_content to a tool file (#2095) * Move search_and_replace to a tool file (#2096) * Move list_code_definition_names to a tool file (#2097) * Move search_files to a tool file (#2098) * Move browser_action to a tool file (#2099) * Move execute_command to a tool file (#2100) * Move use_mcp_tool and access_mcp_resource to tool files (#2101) * Move new_task, switch_mode, attempt_completion, and ask_followup_question to tool files (#2102) * Do a little code cleanup now that tools are refactored out (#2103) * Clean up the way we compute the current diff strategy (#2049) * Clean up the way we compute the current diff strategy * Add changeset * i18n Add translations for task pinning and unpinning (#2109) Signed-off-by: feifei <[email protected]> * Remove the ask promise error (#2107) * Remove the ask promise error * Send start_time along with checkpoints and use it to position in the messages * Link to the settings page from the auto approve toolbar (#2111) * Link to provider docs from the API options (#2112) * Revert "Remove the ask promise error" (#2117) Revert "Remove the ask promise error (#2107)" This reverts commit 712ca71. * Parse the retry out of the gemini 429 response (#2118) * Fix Gemini command escaping (#2120) * Fix switching profiles to ensure only the selected profile is switche… (#2119) Fix switching profiles to ensure only the selected profile is switched for all modes, and optimize certain i18n keys. Signed-off-by: feifei <[email protected]> * Tweaks to support prompt line number format (#2121) * Remove the ask promise error (#2123) * Stronger typing * Added Gemini 2.5 Pro model to GCP Vertex AI Provider (#2079) * Display info about partial reads in chat row (#2080) * Update contributors list (#2023) docs: update contributors list [skip ci] Co-authored-by: mrubens <[email protected]> * Handle multiple API pages worth of contributors (#2088) * Update contributors list (#2089) docs: update contributors list [skip ci] Co-authored-by: mrubens <[email protected]> * Refactor/cline.ts/list files (#2067) * "Refactor list_files tool to separate module (#2057)" * Await --------- Co-authored-by: Matt Rubens <[email protected]> * Remove switch from tools (#2091) * HandleError returns a promise * Remove unnecessary switch from tools * Fix a type in the listFiles tool (#2092) * Move write_to_file to a tool file (#2093) * Move apply_diff to a tool file (#2094) * Move insert_content to a tool file (#2095) * Move search_and_replace to a tool file (#2096) * Move list_code_definition_names to a tool file (#2097) * Move search_files to a tool file (#2098) * Move browser_action to a tool file (#2099) * Move execute_command to a tool file (#2100) * Move use_mcp_tool and access_mcp_resource to tool files (#2101) * Move new_task, switch_mode, attempt_completion, and ask_followup_question to tool files (#2102) * Do a little code cleanup now that tools are refactored out (#2103) * Clean up the way we compute the current diff strategy (#2049) * Clean up the way we compute the current diff strategy * Add changeset * i18n Add translations for task pinning and unpinning (#2109) Signed-off-by: feifei <[email protected]> * Remove the ask promise error (#2107) * Remove the ask promise error * Send start_time along with checkpoints and use it to position in the messages * Link to the settings page from the auto approve toolbar (#2111) * Link to provider docs from the API options (#2112) * Revert "Remove the ask promise error" (#2117) Revert "Remove the ask promise error (#2107)" This reverts commit 712ca71. * Parse the retry out of the gemini 429 response (#2118) * Fix Gemini command escaping (#2120) * Fix switching profiles to ensure only the selected profile is switche… (#2119) Fix switching profiles to ensure only the selected profile is switched for all modes, and optimize certain i18n keys. Signed-off-by: feifei <[email protected]> * Tweaks to support prompt line number format (#2121) * Remove the ask promise error (#2123) * Pass along pid and ppid * Revert "Remove the ask promise error" (#2126) Revert "Remove the ask promise error (#2123)" This reverts commit b788aa1. --------- Signed-off-by: feifei <[email protected]> Co-authored-by: Greg Taylor <[email protected]> Co-authored-by: Greg Taylor <[email protected]> Co-authored-by: Hannes Rudolph <[email protected]> Co-authored-by: Matt Rubens <[email protected]> Co-authored-by: aheizi <[email protected]> Co-authored-by: Afshawn Lotfi <[email protected]> Co-authored-by: Nico Bihan <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Bhavesh Ramburn <[email protected]> Co-authored-by: feifei <[email protected]>
Important
Parse retry delay from Gemini 429 error responses in
Cline.tsto override exponential backoff with specified delay.Cline.ts,attemptApiRequest()now parses retry delay from Gemini 429 error responses.google.rpc.RetryInfoto extractretryDelayand overrides exponential backoff if present.errorDetailsfor retry information.exponentialDelaybased on parsedretryDelayfrom error details.This description was created by
for 46623e5. It will automatically update as commits are pushed.