-
Notifications
You must be signed in to change notification settings - Fork 251
HITL: Boolean confirmation #670
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?
Conversation
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
Summary of ChangesHello @r4inee, 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 a crucial human-in-the-loop (HITL) boolean confirmation feature, allowing for explicit user approval or denial of tool executions within the LLM agent system. The core change ensures that after a tool invocation is confirmed or declined, the outcome (the original function call and its response) is appended to the subsequent LLM request. This provides the LLM with complete context regarding the execution status of previously suggested tools. The implementation involves updating the Highlights
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
This pull request introduces a human-in-the-loop (HITL) boolean confirmation flow for tool/function calls. The changes are well-implemented, particularly the core logic in RequestConfirmationLlmRequestProcessor which now correctly handles user confirmations and denials, and feeds the outcome back to the LLM. The refactoring to use non-blocking reactive patterns in LlmAgent and Runner is a significant improvement to asynchronicity and performance. The accompanying tests are thorough, covering new functionality and edge cases like user denials and avoiding duplicate tool executions. I have one suggestion to improve the clarity and efficiency of a loop.
| .map(Event::functionCalls) | ||
| .filter(fc -> !fc.isEmpty()) | ||
| .collect(toImmutableList())) { | ||
| for (int i = events.size() - 2; i >= 0; i--) { |
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.
The loop for finding the original function call request starts its search from near the end of the event list (events.size() - 2). While this is functionally correct because you iterate backwards and return upon finding the first match, it's slightly inefficient and less clear. It unnecessarily scans events that occurred after the confirmation event, which cannot contain the relevant request.
A more direct and efficient approach would be to start the search from the event immediately preceding the confirmationEventIndex that you've already identified. This makes the code's intent clearer and avoids iterating over irrelevant events.
| for (int i = events.size() - 2; i >= 0; i--) { | |
| for (int i = confirmationEventIndex - 1; i >= 0; i--) { |
4c8ea3b to
2f61aa1
Compare
Appends function call from the "confirmed" function invocation to the subsequent LLM request.
Non-gemini models will fail if a function response is not preceeding a function call.