Browse Source

Add more tests for KernelAccessor

pull/23895/head
Enis Necipoglu 6 months ago
parent
commit
39b3ab17c2
No known key found for this signature in database GPG Key ID: 1EC55E13241E1680
  1. 4
      framework/src/Volo.Abp.AI/Volo/Abp/AI/DefaultKernelAccessor.cs
  2. 62
      framework/test/Volo.Abp.AI.Tests/Volo/Abp/AI/KernelAccessor_Tests.cs
  3. 27
      framework/test/Volo.Abp.AI.Tests/Volo/Abp/AI/Mocks/MockChatClient.cs

4
framework/src/Volo.Abp.AI/Volo/Abp/AI/DefaultKernelAccessor.cs

@ -13,6 +13,8 @@ public class DefaultKernelAccessor : IKernelAccessor, ITransientDependency
public DefaultKernelAccessor(IServiceProvider serviceProvider)
{
Kernel = serviceProvider.GetKeyedService<Kernel>(
AbpAIModule.DefaultWorkspaceName);
AbpAIWorkspaceOptions.GetKernelServiceKeyName(
AbpAIModule.DefaultWorkspaceName
));
}
}

62
framework/test/Volo.Abp.AI.Tests/Volo/Abp/AI/KernelAccessor_Tests.cs

@ -0,0 +1,62 @@
using System.Threading.Tasks;
using Microsoft.Extensions.AI;
using Shouldly;
using Volo.Abp.AI.Mocks;
using Volo.Abp.AI.Tests.Workspaces;
using Volo.Abp.AutoMapper;
using Volo.Abp.Testing;
using Xunit;
namespace Volo.Abp.AI;
public class KernelAccessor_Tests : AbpIntegratedTest<AbpAITestModule>
{
[Fact]
public void Should_Resolve_DefaultKernelAccessor()
{
// Arrange & Act
var kernelAccessor = GetRequiredService<IKernelAccessor>();
// Assert
kernelAccessor.ShouldNotBeNull();
kernelAccessor.Kernel.ShouldNotBeNull();
}
[Fact]
public async Task Should_Get_Response_From_DefaultKernel()
{
// Arrange
var kernelAccessor = GetRequiredService<IKernelAccessor>();
var kernel = kernelAccessor.Kernel;
// Act
var result = await kernel.GetRequiredService<IChatClient>()
.GetResponseAsync("Hello, World!");
// Assert
result.ShouldNotBeNull();
result.RawRepresentation.ShouldBe(MockChatClient.MockResponse);
}
[Fact]
public void Should_Resolve_KernelAccessor_For_Workspace()
{
// Arrange & Act
var kernelAccessor = GetRequiredService<IKernelAccessor<WordCounter>>();
// Assert
kernelAccessor.ShouldNotBeNull();
kernelAccessor.Kernel.ShouldNotBeNull();
}
[Fact]
public async Task Should_Get_Response_From_Kernel_For_Workspace()
{
// Arrange
var kernelAccessor = GetRequiredService<IKernelAccessor<WordCounter>>();
var kernel = kernelAccessor.Kernel;
// Act
var result = await kernel.GetRequiredService<IChatClient>()
.GetResponseAsync("Hello, World!");
// Assert
result.ShouldNotBeNull();
result.RawRepresentation.ShouldBe(MockChatClient.MockResponse);
}
}

27
framework/test/Volo.Abp.AI.Tests/Volo/Abp/AI/Mocks/MockChatClient.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Runtime.CompilerServices;
using Microsoft.Extensions.AI;
namespace Volo.Abp.AI.Mocks;
@ -10,18 +11,24 @@ namespace Volo.Abp.AI.Mocks;
public class MockChatClient : IChatClient
{
public const int StreamingResponseParts = 12;
public const string MockResponse = "This is a mock response.";
public void Dispose()
{
}
public Task<ChatResponse> GetResponseAsync(IEnumerable<ChatMessage> messages, ChatOptions options = null, CancellationToken cancellationToken = default)
public Task<ChatResponse> GetResponseAsync(
IEnumerable<ChatMessage> messages,
ChatOptions options = null,
CancellationToken cancellationToken = default)
{
var responseMessages = messages.ToList();
responseMessages.Add(new ChatMessage(ChatRole.Assistant, "This is a mock response."));
responseMessages.Add(new ChatMessage(ChatRole.Assistant, MockResponse));
return Task.FromResult(new ChatResponse
{
Messages = responseMessages,
Messages = responseMessages,
RawRepresentation = MockResponse
});
}
@ -30,14 +37,24 @@ public class MockChatClient : IChatClient
return null;
}
public async IAsyncEnumerable<ChatResponseUpdate> GetStreamingResponseAsync(IEnumerable<ChatMessage> messages, ChatOptions options = null, CancellationToken cancellationToken = default)
public async IAsyncEnumerable<ChatResponseUpdate> GetStreamingResponseAsync(
IEnumerable<ChatMessage> messages,
ChatOptions options = null,
[EnumeratorCancellation] CancellationToken cancellationToken = default)
{
for (var i = 0; i < StreamingResponseParts; i++)
{
await Task.Delay(25, cancellationToken);
if (cancellationToken.IsCancellationRequested)
{
break;
}
yield return new ChatResponseUpdate
{
RawRepresentation = "This is a mock streaming response part " + (i + 1)
Role = ChatRole.Assistant,
RawRepresentation = MockResponse + " " + (i + 1),
};
}
}

Loading…
Cancel
Save