2023-11-12 14:04:00 +00:00
|
|
|
using BotSharp.Abstraction.Agents;
|
|
|
|
|
using BotSharp.Abstraction.Agents.Enums;
|
|
|
|
|
using BotSharp.Abstraction.Agents.Models;
|
|
|
|
|
using BotSharp.Abstraction.Conversations;
|
2024-01-30 11:04:22 +00:00
|
|
|
using BotSharp.Abstraction.Conversations.Models;
|
2023-11-29 23:23:14 +00:00
|
|
|
using BotSharp.Abstraction.Loggers;
|
2024-01-30 11:04:22 +00:00
|
|
|
using Microsoft.SemanticKernel;
|
|
|
|
|
using Microsoft.SemanticKernel.ChatCompletion;
|
|
|
|
|
using Moq;
|
2023-11-12 14:04:00 +00:00
|
|
|
|
|
|
|
|
namespace BotSharp.Plugin.SemanticKernel.Tests
|
|
|
|
|
{
|
|
|
|
|
public class SemanticKernelChatCompletionProviderTests
|
|
|
|
|
{
|
2024-01-30 11:04:22 +00:00
|
|
|
private readonly Mock<IChatCompletionService> _chatCompletionMock;
|
2023-11-12 14:04:00 +00:00
|
|
|
private readonly Mock<IServiceProvider> _servicesMock;
|
|
|
|
|
private readonly Mock<ITokenStatistics> _tokenStatisticsMock;
|
|
|
|
|
private readonly SemanticKernelChatCompletionProvider _provider;
|
|
|
|
|
|
|
|
|
|
public SemanticKernelChatCompletionProviderTests()
|
|
|
|
|
{
|
2024-01-30 11:04:22 +00:00
|
|
|
_chatCompletionMock = new Mock<IChatCompletionService>();
|
2023-11-12 14:04:00 +00:00
|
|
|
_servicesMock = new Mock<IServiceProvider>();
|
|
|
|
|
_tokenStatisticsMock = new Mock<ITokenStatistics>();
|
2023-11-20 13:20:10 +00:00
|
|
|
_provider = new SemanticKernelChatCompletionProvider(_chatCompletionMock.Object, _servicesMock.Object, _tokenStatisticsMock.Object);
|
2023-11-12 14:04:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
2024-01-14 10:08:34 +00:00
|
|
|
public async void GetChatCompletions_Returns_RoleDialogModel()
|
2023-11-12 14:04:00 +00:00
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var agent = new Agent();
|
|
|
|
|
var conversations = new List<RoleDialogModel>
|
|
|
|
|
{
|
|
|
|
|
new RoleDialogModel(AgentRole.User, "Hello")
|
|
|
|
|
};
|
|
|
|
|
|
2023-11-13 15:11:49 +00:00
|
|
|
_servicesMock.Setup(x => x.GetService(typeof(IEnumerable<IContentGeneratingHook>)))
|
|
|
|
|
.Returns(new List<IContentGeneratingHook>());
|
|
|
|
|
var agentService = new Mock<IAgentService>();
|
2025-08-13 18:54:14 +00:00
|
|
|
agentService.Setup(x => x.RenderInstruction(agent)).Returns("How can I help you?");
|
2023-11-13 15:11:49 +00:00
|
|
|
_servicesMock.Setup(x => x.GetService(typeof(IAgentService)))
|
|
|
|
|
.Returns(agentService.Object);
|
|
|
|
|
|
2023-11-12 14:04:00 +00:00
|
|
|
var chatHistoryMock = new Mock<ChatHistory>();
|
2024-01-30 11:04:22 +00:00
|
|
|
//_chatCompletionMock.Setup(x => new ChatHistory(It.IsAny<string>())).Returns(chatHistoryMock.Object);
|
|
|
|
|
|
|
|
|
|
_chatCompletionMock.Setup(x => x.GetChatMessageContentsAsync(chatHistoryMock.Object, It.IsAny<PromptExecutionSettings>(), It.IsAny<Kernel>(), It.IsAny<CancellationToken>()))
|
|
|
|
|
.ReturnsAsync(new List<ChatMessageContent>
|
|
|
|
|
{
|
|
|
|
|
new ChatMessageContent(AuthorRole.Assistant,"How can I help you?")
|
|
|
|
|
});
|
2023-11-12 14:04:00 +00:00
|
|
|
|
|
|
|
|
// Act
|
2024-01-14 10:08:34 +00:00
|
|
|
var result = await _provider.GetChatCompletions(agent, conversations);
|
2023-11-12 14:04:00 +00:00
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.IsType<RoleDialogModel>(result);
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-11-13 15:11:49 +00:00
|
|
|
|
2023-11-12 14:04:00 +00:00
|
|
|
}
|