allow a2a agent to accept non-user messages (#1661)

This commit is contained in:
SergeyMenshykh
2025-10-23 15:37:14 +01:00
committed by GitHub
Unverified
parent feb3404a27
commit 202bfdc376
2 changed files with 19 additions and 24 deletions
+2 -15
View File
@@ -72,7 +72,7 @@ internal sealed class A2AAgent : AIAgent
/// <inheritdoc/>
public override async Task<AgentRunResponse> RunAsync(IEnumerable<ChatMessage> messages, AgentThread? thread = null, AgentRunOptions? options = null, CancellationToken cancellationToken = default)
{
ValidateInputMessages(messages);
_ = Throw.IfNull(messages);
var a2aMessage = messages.ToA2AMessage();
@@ -124,7 +124,7 @@ internal sealed class A2AAgent : AIAgent
/// <inheritdoc/>
public override async IAsyncEnumerable<AgentRunResponseUpdate> RunStreamingAsync(IEnumerable<ChatMessage> messages, AgentThread? thread = null, AgentRunOptions? options = null, [EnumeratorCancellation] CancellationToken cancellationToken = default)
{
ValidateInputMessages(messages);
_ = Throw.IfNull(messages);
var a2aMessage = messages.ToA2AMessage();
@@ -177,19 +177,6 @@ internal sealed class A2AAgent : AIAgent
/// <inheritdoc/>
public override string? Description => this._description ?? base.Description;
private static void ValidateInputMessages(IEnumerable<ChatMessage> messages)
{
_ = Throw.IfNull(messages);
foreach (var message in messages)
{
if (message.Role != ChatRole.User)
{
throw new ArgumentException($"All input messages for A2A agents must have the role '{ChatRole.User}'. Found '{message.Role}'.", nameof(messages));
}
}
}
private static void UpdateThreadConversationId(A2AAgentThread? thread, string? contextId)
{
if (thread is null)
@@ -74,17 +74,18 @@ public sealed class A2AAgentTests : IDisposable
}
[Fact]
public async Task RunAsync_NonUserRoleMessages_ThrowsArgumentExceptionAsync()
public async Task RunAsync_AllowsNonUserRoleMessagesAsync()
{
// Arrange
var inputMessages = new List<ChatMessage>
{
new(ChatRole.System, "I am a system message"),
new(ChatRole.Assistant, "I am an assistant message"),
new(ChatRole.User, "Valid user message")
};
// Act & Assert
await Assert.ThrowsAsync<ArgumentException>(() => this._agent.RunAsync(inputMessages));
await this._agent.RunAsync(inputMessages);
}
[Fact]
@@ -345,21 +346,28 @@ public sealed class A2AAgentTests : IDisposable
}
[Fact]
public async Task RunStreamingAsync_NonUserRoleMessages_ThrowsArgumentExceptionAsync()
public async Task RunStreamingAsync_AllowsNonUserRoleMessagesAsync()
{
// Arrange
this._handler.StreamingResponseToReturn = new AgentMessage()
{
MessageId = "stream-1",
Role = MessageRole.Agent,
Parts = [new TextPart { Text = "Response" }],
ContextId = "new-stream-context"
};
var inputMessages = new List<ChatMessage>
{
new(ChatRole.Assistant, "I am an assistant message")
new(ChatRole.System, "I am a system message"),
new(ChatRole.Assistant, "I am an assistant message"),
new(ChatRole.User, "Valid user message")
};
// Act & Assert
await Assert.ThrowsAsync<ArgumentException>(async () =>
await foreach (var _ in this._agent.RunStreamingAsync(inputMessages))
{
await foreach (var update in this._agent.RunStreamingAsync(inputMessages))
{
}
});
}
}
[Fact]