mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
e6bfc51367
* Add additional integration tests and add OpenAIAssistant integration tests project. * Address PR comments. * Address PR comments.
121 lines
4.4 KiB
C#
121 lines
4.4 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
using System;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using AgentConformance.IntegrationTests.Support;
|
|
using AgentConformanceTests;
|
|
using Microsoft.Extensions.AI;
|
|
|
|
namespace AgentConformance.IntegrationTests;
|
|
|
|
/// <summary>
|
|
/// Conformance tests for run methods on agents.
|
|
/// </summary>
|
|
/// <typeparam name="TAgentFixture">The type of test fixture used by the concrete test implementation.</typeparam>
|
|
/// <param name="createAgentFixture">Function to create the test fixture with.</param>
|
|
public abstract class RunAsyncTests<TAgentFixture>(Func<TAgentFixture> createAgentFixture) : AgentTests<TAgentFixture>(createAgentFixture)
|
|
where TAgentFixture : AgentFixture
|
|
{
|
|
[RetryFact(Constants.RetryCount, Constants.RetryDelay)]
|
|
public virtual async Task RunWithStringReturnsExpectedResultAsync()
|
|
{
|
|
// Arrange
|
|
var agent = this.Fixture.Agent;
|
|
var thread = agent.GetNewThread();
|
|
await using var cleanup = new ThreadCleanup(thread, this.Fixture);
|
|
|
|
// Act
|
|
var chatResponse = await agent.RunAsync("What is the capital of France.", thread);
|
|
|
|
// Assert
|
|
Assert.NotNull(chatResponse);
|
|
Assert.Single(chatResponse.Messages);
|
|
Assert.Contains("Paris", chatResponse.Text);
|
|
}
|
|
|
|
[RetryFact(Constants.RetryCount, Constants.RetryDelay)]
|
|
public virtual async Task RunWithChatMessageReturnsExpectedResultAsync()
|
|
{
|
|
// Arrange
|
|
var agent = this.Fixture.Agent;
|
|
var thread = agent.GetNewThread();
|
|
await using var cleanup = new ThreadCleanup(thread, this.Fixture);
|
|
|
|
// Act
|
|
var chatResponse = await agent.RunAsync(new ChatMessage(ChatRole.User, "What is the capital of France."), thread);
|
|
|
|
// Assert
|
|
Assert.NotNull(chatResponse);
|
|
Assert.Single(chatResponse.Messages);
|
|
Assert.Contains("Paris", chatResponse.Text);
|
|
}
|
|
|
|
[RetryFact(Constants.RetryCount, Constants.RetryDelay)]
|
|
public virtual async Task RunWithChatMessagesReturnsExpectedResultAsync()
|
|
{
|
|
// Arrange
|
|
var agent = this.Fixture.Agent;
|
|
var thread = agent.GetNewThread();
|
|
await using var cleanup = new ThreadCleanup(thread, this.Fixture);
|
|
|
|
// Act
|
|
var chatResponse = await agent.RunAsync(
|
|
[
|
|
new ChatMessage(ChatRole.User, "Hello."),
|
|
new ChatMessage(ChatRole.User, "What is the capital of France.")
|
|
],
|
|
thread);
|
|
|
|
// Assert
|
|
Assert.NotNull(chatResponse);
|
|
Assert.Single(chatResponse.Messages);
|
|
Assert.Contains("Paris", chatResponse.Text);
|
|
}
|
|
|
|
[RetryFact(Constants.RetryCount, Constants.RetryDelay)]
|
|
public virtual async Task RunWithAdditionalInstructionsAndNoMessageReturnsExpectedResultAsync()
|
|
{
|
|
// Arrange
|
|
var agent = this.Fixture.Agent;
|
|
var thread = agent.GetNewThread();
|
|
await using var cleanup = new ThreadCleanup(thread, this.Fixture);
|
|
|
|
// Act
|
|
var chatResponse = await agent.RunAsync(thread, new() { AdditionalInstructions = "Always respond with `Computer says no`, even when the user provided on input." });
|
|
|
|
// Assert
|
|
Assert.NotNull(chatResponse);
|
|
Assert.Single(chatResponse.Messages);
|
|
Assert.Contains("Computer says no", chatResponse.Text);
|
|
}
|
|
|
|
[RetryFact(Constants.RetryCount, Constants.RetryDelay)]
|
|
public virtual async Task ThreadMaintainsHistoryAsync()
|
|
{
|
|
// Arrange
|
|
var q1 = "What is the capital of France.";
|
|
var q2 = "And Austria?";
|
|
var agent = this.Fixture.Agent;
|
|
var thread = agent.GetNewThread();
|
|
await using var cleanup = new ThreadCleanup(thread, this.Fixture);
|
|
|
|
// Act
|
|
var result1 = await agent.RunAsync(q1, thread);
|
|
var result2 = await agent.RunAsync(q2, thread);
|
|
|
|
// Assert
|
|
Assert.Contains("Paris", result1.Text);
|
|
Assert.Contains("Vienna", result2.Text);
|
|
|
|
var chatHistory = await this.Fixture.GetChatHistoryAsync(thread);
|
|
Assert.Equal(4, chatHistory.Count);
|
|
Assert.Equal(2, chatHistory.Count(x => x.Role == ChatRole.User));
|
|
Assert.Equal(2, chatHistory.Count(x => x.Role == ChatRole.Assistant));
|
|
Assert.Equal(q1, chatHistory[0].Text);
|
|
Assert.Equal(q2, chatHistory[2].Text);
|
|
Assert.Contains("Paris", chatHistory[1].Text);
|
|
Assert.Contains("Vienna", chatHistory[3].Text);
|
|
}
|
|
}
|