Fix(chat): Corrects critical validation bugs in custom geminiChat.ts
Summary
This PR fixes two critical validation bugs in the custom geminiChat.ts file. These bugs could cause the chat session to lose conversational context or fail to retry on MALFORMED_FUNCTION_CALL errors.
Details
This PR addresses two separate logic flaws:
-
Flawed History Curation:
-
The Problem: The
extractCuratedHistoryfunction used an "all-or-nothing" approach for model turns. If a model's response was split into multipleContentparts (e.g., a valid text part and an invalid empty part from a safety filter), the function would discard the entire group, including the valid text. -
The Solution: The function now checks each
Contentitem individually. It safely skips invalid model turns one by one without discarding adjacent valid ones.
-
The Problem: The
-
Incorrect Stream Validation for Tool Calls:
-
The Problem: The
processStreamResponsefunction checked forFinishReason.MALFORMED_FUNCTION_CALLinside theif (!hasToolCall)block. If a stream sent one validfunctionCallpart (settinghasToolCall = true) but then ended withMALFORMED_FUNCTION_CALL, the error would be ignored, and the retry mechanism would not trigger. -
The Solution: The check for
MALFORMM_FUNCTION_CALLhas been moved outside and before the!hasToolCallblock, ensuring it is always caught as a retryable error.
-
The Problem: The
Related Issues
- Fixes #13056
- This PR fixes bugs in the custom logic that was originally added to work around
b.corp.google.com/issues/420354090.
How to Validate
- Run the full test suite to ensure no existing tests are broken:
npm run test - Manually run the CLI in chat mode (
gemini chat) and hold a conversation, especially one that uses tools (if you have them configured) or might trigger safety responses, to confirm the chat context is maintained correctly.
Pre-Merge Checklist
- [ ] Updated relevant documentation and README (if needed)
- [x] Added/updated tests (if needed) (No new tests added; this PR corrects existing logic)
- [ ] Noted breaking changes (if any)
- [ ] Validated on required platforms/methods:
- [ ] MacOS
- [ ] npm run
- [ ] npx
- [ ] Docker
- [ ] Podman
- [ ] Seatbelt
- [ ] Windows
- [ ] npm run
- [ ] npx
- [ ] Docker
- [ ] Linux
- [ ] npm run
- [ ] npx
- [ ] Docker
- [ ] MacOS
Summary of Changes
Hello @pareshjoshij, I'm Gemini Code Assist[^1]! 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 addresses two critical validation issues within the geminiChat.ts file. These fixes are crucial for maintaining conversational context and ensuring proper error handling and retry mechanisms, particularly when dealing with partial or malformed model responses and tool calls.
Highlights
-
History Curation Fix: The
extractCuratedHistoryfunction now individually validates model turns, preventing the discarding of entire valid model responses when only a part is invalid (e.g., due to safety filters). -
Stream Validation for Tool Calls: The
processStreamResponsefunction's validation forMALFORMED_FUNCTION_CALLerrors has been reordered to ensure it's always caught as a retryable error, even if other tool call parts were received.
Using Gemini Code Assist
The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.
| Feature | Command | Description |
|---|---|---|
| Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
| Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
| Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in pull request comments and review comments. |
| Help | /gemini help |
Displays a list of available commands. |
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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.
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 :thumbsup: and :thumbsdown: 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.
[^1]: Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.
Thanks for the update, @pareshjoshij! I appreciate you addressing the getLastPromptTokenCount() method. I'll proceed with another review of the pull request, taking your latest changes into account.
/gemini review
@jackwotherspoon requesting review on these geminiChat.ts bug fixes. Thanks!
/gemini review
Hi @scidomino, could you review this when you have a spare moment? Thanks!