gemini-cli icon indicating copy to clipboard operation
gemini-cli copied to clipboard

Fix(chat): Corrects critical validation bugs in custom geminiChat.ts

Open pareshjoshij opened this issue 2 months ago • 6 comments

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:

  1. Flawed History Curation:

    • The Problem: The extractCuratedHistory function used an "all-or-nothing" approach for model turns. If a model's response was split into multiple Content parts (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 Content item individually. It safely skips invalid model turns one by one without discarding adjacent valid ones.
  2. Incorrect Stream Validation for Tool Calls:

    • The Problem: The processStreamResponse function checked for FinishReason.MALFORMED_FUNCTION_CALL inside the if (!hasToolCall) block. If a stream sent one valid functionCall part (setting hasToolCall = true) but then ended with MALFORMED_FUNCTION_CALL, the error would be ignored, and the retry mechanism would not trigger.
    • The Solution: The check for MALFORMM_FUNCTION_CALL has been moved outside and before the !hasToolCall block, ensuring it is always caught as a retryable error.

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

  1. Run the full test suite to ensure no existing tests are broken:
    npm run test
    
  2. 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

pareshjoshij avatar Nov 14 '25 05:11 pareshjoshij

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 extractCuratedHistory function 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 processStreamResponse function's validation for MALFORMED_FUNCTION_CALL errors 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.

gemini-code-assist[bot] avatar Nov 14 '25 05:11 gemini-code-assist[bot]

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-code-assist[bot] avatar Nov 14 '25 06:11 gemini-code-assist[bot]

/gemini review

pareshjoshij avatar Nov 16 '25 15:11 pareshjoshij

​@jackwotherspoon requesting review on these geminiChat.ts bug fixes. Thanks!

pareshjoshij avatar Dec 04 '25 16:12 pareshjoshij

/gemini review

pareshjoshij avatar Dec 06 '25 05:12 pareshjoshij

Hi @scidomino, could you review this when you have a spare moment? Thanks!

pareshjoshij avatar Dec 07 '25 00:12 pareshjoshij