Skip to content

Conversation

@guglielmo-san
Copy link
Member

This PR fixes two issues related to the grpc support:

  1. The extension headers key in the metadata are supposed to be lower key (ref)
  2. Invokes correctly the servicer_context.invocation_metadata as a method instead of as a property

For each of these issues was respectively opened a community PR (#635 , #673). To speed up the integration of these changes, this new PR has been created to integrate both changes at the same time.

@guglielmo-san guglielmo-san requested a review from a team as a code owner February 9, 2026 15:00
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @guglielmo-san, 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 addresses two critical issues in the gRPC support: ensuring that extension header keys are always lowercase for compliance with gRPC standards and correcting the invocation of the invocation_metadata method on ServicerContext. These changes improve the robustness and correctness of gRPC communication within the system, resolving potential interoperability problems and API misuse.

Highlights

Changelog
  • src/a2a/client/transports/grpc.py
    • Ensured HTTP_EXTENSION_HEADER is converted to lowercase when constructing gRPC metadata.
    • Refactored logic for determining which extensions to use for metadata creation.
  • src/a2a/server/request_handlers/grpc_handler.py
    • Changed context.invocation_metadata to context.invocation_metadata() to correctly call it as a method.
    • Applied .lower() to HTTP_EXTENSION_HEADER when retrieving and setting metadata to ensure lowercase keys.
    • Adjusted the placement of lower_key = key.lower() for improved consistency.
  • tests/client/transports/test_grpc_client.py
    • Updated test assertions to reflect the change in HTTP_EXTENSION_HEADER to its lowercase form in metadata.
  • tests/integration/test_client_server_integration.py
    • Added an extensions parameter to transport.send_message calls in integration tests.
    • Included an assertion to verify that received_context.requested_extensions correctly captures the sent extensions.
  • tests/server/request_handlers/test_grpc_handler.py
    • Modified mock invocation_metadata to be a mock method returning grpc.aio.Metadata.
    • Updated mock metadata creation and assertions to use HTTP_EXTENSION_HEADER.lower().
Activity
  • No human activity has occurred on this pull request yet.
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

  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.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This PR addresses two issues in the gRPC support: standardizing extension headers to lowercase and correcting the invocation of servicer_context.invocation_metadata as a method. The changes involve modifying the client and server-side code to ensure consistency in header casing and proper method invocation, along with updating the corresponding tests to reflect these changes.

@guglielmo-san guglielmo-san requested a review from ishymko February 9, 2026 15:16
Comment on lines +67 to +69
extensions_to_use = (
extensions if extensions is not None else self.extensions
)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
extensions_to_use = (
extensions if extensions is not None else self.extensions
)
extensions_to_use = extensions or self.extensions

This should handle the same cases, unless you want [] to be handled differently?

guglielmo-san and others added 2 commits February 9, 2026 16:22
Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants