Browse Source

Add more tests for KernelAccessor

pull/23895/head
Enis Necipoglu 12 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) public DefaultKernelAccessor(IServiceProvider serviceProvider)
{ {
Kernel = serviceProvider.GetKeyedService<Kernel>( 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.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Runtime.CompilerServices;
using Microsoft.Extensions.AI; using Microsoft.Extensions.AI;
namespace Volo.Abp.AI.Mocks; namespace Volo.Abp.AI.Mocks;
@ -10,18 +11,24 @@ namespace Volo.Abp.AI.Mocks;
public class MockChatClient : IChatClient public class MockChatClient : IChatClient
{ {
public const int StreamingResponseParts = 12; public const int StreamingResponseParts = 12;
public const string MockResponse = "This is a mock response.";
public void Dispose() 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(); 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 return Task.FromResult(new ChatResponse
{ {
Messages = responseMessages, Messages = responseMessages,
RawRepresentation = MockResponse
}); });
} }
@ -30,14 +37,24 @@ public class MockChatClient : IChatClient
return null; 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++) for (var i = 0; i < StreamingResponseParts; i++)
{ {
await Task.Delay(25, cancellationToken); await Task.Delay(25, cancellationToken);
if (cancellationToken.IsCancellationRequested)
{
break;
}
yield return new ChatResponseUpdate yield return new ChatResponseUpdate
{ {
RawRepresentation = "This is a mock streaming response part " + (i + 1) Role = ChatRole.Assistant,
RawRepresentation = MockResponse + " " + (i + 1),
}; };
} }
} }

Loading…
Cancel
Save