-
Notifications
You must be signed in to change notification settings - Fork 21
feat: client interceptor invocations #51
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
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.
Summary of Changes
Hello @yarolegovich, 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 significantly enhances the A2A client library by introducing a robust client-side interceptor mechanism. This feature allows developers to inject custom logic before and after API calls, enabling advanced functionalities like request/response transformation, authentication, logging, and error handling without modifying the core client logic. The changes also include the addition of standard A2A protocol error types and a comprehensive test suite to ensure the reliability and correctness of the new interceptor system.
Highlights
- Client Interceptor Implementation: Introduced CallInterceptor invocations to allow for observing, modifying, and rejecting client requests and responses.
- Contextual Information: CallInterceptor can now access CallContext to determine the method being called and extract typed payload from Request.Payload.
- Metadata Management: Interceptors can modify Request.CallMeta to attach additional information, such as authentication headers, which can then be used by the transport layer.
- Enhanced Error Handling: Added new A2A protocol-specific error types (ErrParseError, ErrInvalidRequest, ErrMethodNotFound, ErrInvalidParams, ErrInternalError, ErrServerError) to a2a/errors.go.
- Comprehensive Testing: A new test file a2aclient/client_test.go has been added with extensive tests covering various interceptor functionalities, including request/response modification, rejection, and context data sharing.
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 👍 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
-
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. ↩
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 client-side interceptor invocations, which is a great feature for observing and modifying requests and responses. The implementation is mostly solid, but I've found a critical bug in the error handling logic. Errors returned from the transport layer are currently being swallowed if an interceptor doesn't explicitly return an error. This could lead to silent failures. I've provided detailed comments and suggestions to fix this issue in a2aclient/client.go
for each affected method. Additionally, I've suggested adding a new test case to a2aclient/client_test.go
to cover this scenario and prevent future regressions. Once these issues are addressed, the implementation will be much more robust.
Details
The PR implements
CallInterceptor
invocations and adds tests which demonstrate how interceptors can be used to observe, modify and reject requests and responses.CallInterceptor
can useCallContext
to understand which method is being called and be able to extract a typed value fromRequest.Payload
.CallInterceptor
can modifyRequest.CallMeta
to attach information like auth headers to the request context.Transport
can access the aggregatedCallMeta
and add it to the request in a transport-specific way (eg. HTTP headers).re #47