-
Notifications
You must be signed in to change notification settings - Fork 616
fix(js/plugins/google-genai): prevent potential server crash from unhandled stream errors #4005
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
base: main
Are you sure you want to change the base?
fix(js/plugins/google-genai): prevent potential server crash from unhandled stream errors #4005
Conversation
Summary of ChangesHello @yeonjaee, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request introduces crucial error handling mechanisms within the Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
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.
Code Review
Thank you for this contribution. Your detailed analysis of the unhandled promise rejection issue is excellent, and the proposed fix correctly addresses the problem by adding try...catch...finally blocks to handle stream errors and ensure resources are released. This will prevent the server crashes you've observed. I have a couple of suggestions for minor improvements. In generateResponseSequence, the catch block is redundant and can be removed for conciseness. In getResponsePromise, while returning partial data on error is a good strategy, the error is currently swallowed, which could make debugging difficult for users of this library. I've suggested logging the error to provide more visibility. Overall, this is a valuable fix that improves the robustness of stream handling. Well done!
| } catch (error) { | ||
| throw error; | ||
| } finally { | ||
| reader.releaseLock(); | ||
| } |
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.
| } | ||
| } catch (error) { | ||
| if (allResponses.length) { | ||
| return aggregateResponses(allResponses); |
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.
While returning a partial response on stream error is a reasonable strategy, the original error is completely swallowed here. This can make debugging difficult for the library user, as they would receive an incomplete response without any indication of what went wrong. Consider logging the error before returning the aggregated responses to provide visibility into the underlying issue. For example:
// Inside the catch block
if (allResponses.length) {
console.error('Stream processing failed. Returning partial response. Error:', error);
return aggregateResponses(allResponses);
}
Description
I'd like to report a potential issue with stream error handling in
getResponseStreamthat may cause server runtime crashes, and propose a possible fix. I'm not entirely certain about the root cause, so I would appreciate the maintainers' review and feedback on this approach.Environment
Issue Observed
We occasionally encountered unhandled rejections that crashed our server runtime. After investigation, I suspect the issue originates from
controller.error()calls in thegetResponseStreamfunction, particularly when the "Failed to parse stream" error occurs.Suspected scenarios:
[DONE]markers, incomplete SSE data likedata:)controller.error(new Error('Failed to parse stream'))is called (line 348)reader.read(), it returns a rejected PromiseProposed Solution
Add error handling in the stream consumers to catch and properly handle errors from
controller.error():Checklist (if applicable):