-
Notifications
You must be signed in to change notification settings - Fork 218
feat: add missing tool resolution strategy #626
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
Summary of ChangesHello @tkroman, 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 enhances the system's robustness by introducing a configurable strategy for handling missing tool calls. Previously, an attempt to call a non-existent tool would immediately result in an exception. With this change, developers can now define custom behaviors, such as logging an error, returning a specific event, or silently ignoring the call, providing greater control and resilience against 'hallucinated' tool calls from language models. 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 valuable feature for handling missing tool calls by using a configurable resolution strategy, making the agent more robust against model hallucinations. The implementation of MissingToolResolutionStrategy is well-designed.
However, I've found a few issues:
- There is a critical bug in
Functions.javathat introduces an infinite recursion, which is likely the cause of the local test failures you mentioned. - There are a couple of places where
Optional.get()is used without checking for presence, which could lead to aNoSuchElementException. - The new
MissingToolResolutionStrategyinterface implementations can be simplified using lambdas for better readability and conciseness.
I've left detailed comments with suggestions to fix these issues. Once they are addressed, this will be a great addition.
By the way, it's perfectly fine to open a pull request directly for a new feature like this. Thank you for your contribution!
core/src/main/java/com/google/adk/flows/llmflows/Functions.java
Outdated
Show resolved
Hide resolved
core/src/main/java/com/google/adk/tools/MissingToolResolutionStrategy.java
Show resolved
Hide resolved
core/src/main/java/com/google/adk/tools/MissingToolResolutionStrategy.java
Show resolved
Hide resolved
core/src/main/java/com/google/adk/tools/MissingToolResolutionStrategy.java
Show resolved
Hide resolved
core/src/main/java/com/google/adk/tools/MissingToolResolutionStrategy.java
Show resolved
Hide resolved
c76557a to
0821145
Compare
0821145 to
787a7c2
Compare
hi, I'm not sure if I had to create an issue first so please let me know if this is ok.
the use-case is recovering from exceptions thrown as a result of hallucinated tool calls. i tried to preserve behavior by using the current throwing behaviour wherever this new argument is passed.
also, some tests fail locally for me, i'll try to figure it out but hopefully ci passes