a2aproject / a2aproject/a2a-dotnet

Refactor agent method implementations to allow extension and custom methods

Offen
#169 3 Kommentare 0 Reaktionen 1 zugewiesene Person Beansprucht von @rokonec Auf GitHub ansehen
Vorherrschende Sprache
C#
Sterne
262
Forks
64
Ø Merge
5 T. 2 Std.
Gemergte PRs (30 T.)
31

Beschreibung

## Description

The [3.5. Method Mapping and Naming Conventions](https://a2a-protocol.org/latest/specification/#35-method-mapping-and-naming-conventions) section of the specification defines conventions for JSON-RPC/gRPC/REST methods mapping and defines existence of custom or extensions methods.

Currently, the handlers for the same methods for different transports are implemented on different places taking information from ad-hoc source locations and custom or extension methods are not supported, see [JSON-RPC server implementation](https://github.com/a2aproject/a2a-dotnet/blob/f2856b721df64b01ac7b2a5852956ce96c58104e/src/A2A.AspNetCore/A2AJsonRpcProcessor.cs#L81) vs. [JSON-RPC client implementation](https://github.com/a2aproject/a2a-dotnet/blob/f2856b721df64b01ac7b2a5852956ce96c58104e/src/A2A/Client/A2AClient.cs#L164) vs. [REST implementation](https://github.com/a2aproject/a2a-dotnet/blob/f2856b721df64b01ac7b2a5852956ce96c58104e/src/A2A.AspNetCore/A2AEndpointRouteBuilderExtensions.cs#L77). gRPC method handlers does not seem to be implemented either?

Within this task, propose a way how to abstract all information needed to serve and handle requests to agent methods (including custom or extension ones) for all supported transports so adding a new method will be matter of deriving single abstract class and its registration without the necessity of changing transport-specific handlers implementations on multiple places.

NOTE: [Command](https://www.geeksforgeeks.org/system-design/command-pattern/) or similar design-pattern can be utilized for this.

NOTE: Adding support for custom or extension methods might involve adding a new method to [A2AEndpointRouteBuilderExtensions.cs](https://github.com/a2aproject/a2a-dotnet/blob/f2856b721df64b01ac7b2a5852956ce96c58104e/src/A2A.AspNetCore/A2AEndpointRouteBuilderExtensions.cs) or adding a new parameter to [A2AEndpointRouteBuilderExtensions.MapA2A()](https://github.com/a2aproject/a2a-dotnet/blob/f2856b721df64b01ac7b2a5852956ce96c58104e/src/A2A.AspNetCore/A2AEndpointRouteBuilderExtensions.cs#L29) that will allow defining the custom methods. Alternatively, similar concept as [TaskManager](https://github.com/a2aproject/a2a-dotnet/blob/f2856b721df64b01ac7b2a5852956ce96c58104e/src/A2A/Server/TaskManager.cs#L15) can be introduced to manage custom methods implementations.

## Motivation

- Reduce code duplication and improve architecture of the library (open-close principle).
- Enable user-defined custom or extensions methods implemented using the same mechanisms as built-in methods are.

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.