Skip to content

Conversation

@lkawka
Copy link
Member

@lkawka lkawka commented Oct 7, 2025

Description

This PR introduces a new feature allowing server maintainers to provide custom ID generators for system-created objects.

I identified 2 key areas requiring ID generation:

  • ResourceContext: Manages the creation of new task and context IDs when not supplied by the client.
  • TaskUpdater: Helper responsible for generating IDs for new artifacts and messages during task updates.

To address this, a new abstract class, IDGenerator, has been introduced. This class enables the creation of specific ID generators for different resource types, which can then be integrated into the relevant SDK components.

Alternative approaches were considered:

  1. Using a single IDGenerator instance for all resource types, with resource type information passed to the generate method. This option was discarded due to potential coupling issues and increased maintenance complexity.
  2. Implementing an additional IDGeneratorRegistry to manage per-resource-type generators via a get_id_generator(resource_type) method. While this would simplify object passing, it introduces additional indirection and overall system complexity.

BEGIN_COMMIT_OVERRIDE
feat: custom ID generators

Release-As: 0.3.9
END_COMMIT_OVERRIDE

Fixes #378 🦕

@lkawka lkawka requested a review from a team as a code owner October 7, 2025 15:01
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @lkawka, 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 improves the extensibility of the system by decoupling ID generation logic from core components. It introduces a pluggable architecture for creating unique identifiers, allowing server maintainers to define and inject their own ID generation strategies. This change moves away from hardcoded UUID generation, providing greater control and adaptability for how various system objects are identified.

Highlights

  • Custom ID Generators: Introduced a new feature allowing server maintainers to provide custom ID generators for system-created objects, enhancing flexibility and customization.
  • IDGenerator Interface: A new abstract class, IDGenerator, has been added, defining a standard interface for generating unique identifiers.
  • UUIDGenerator Implementation: A concrete UUIDGenerator class is provided as the default implementation, utilizing Python's uuid.uuid4().
  • Contextual ID Generation: The IDGeneratorContext Pydantic model was introduced to pass relevant contextual information (like task_id or context_id) to ID generators.
  • Integration into Core Components: The ResourceContext and TaskUpdater components have been updated to accept and utilize custom IDGenerator instances for generating task, context, artifact, and message IDs, defaulting to UUIDGenerator if none are provided.
  • Comprehensive Testing: New test cases have been added to test_context.py and test_task_updater.py to ensure the correct functionality and integration of custom ID generators.
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 pull request introduces a flexible way to use custom ID generators for various system-created objects, which is a great feature for extensibility. The implementation is clean, with a new IDGenerator abstract class and a default UUIDGenerator. The changes are well-integrated into ResourceContext and TaskUpdater, and they are accompanied by good test coverage. I have a couple of minor suggestions to improve code consistency and clarity.

lkawka and others added 6 commits October 7, 2025 17:03
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Pyright error:
Method "generate" overrides class "IDGenerator" in an incompatible manner   Parameter 2 name mismatch: base parameter is named "context", override parameter is named "_context" (reportIncompatibleMethodOverride)
@mikeas1 mikeas1 merged commit 051ab20 into a2aproject:main Oct 9, 2025
6 checks passed
@lkawka lkawka deleted the custom-id-generators branch October 9, 2025 13:35
@lkawka lkawka self-assigned this Oct 20, 2025
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.

[Feat]: Can the A2A server generate taskids by itself?

5 participants