Mock Metadata Usage in a GetStreamingChatMessageContentsAsync response #10638
Unanswered
romainsemur
asked this question in
Q&A
Replies: 2 comments
-
Tagging @dmytrostruk |
Beta Was this translation helpful? Give feedback.
0 replies
-
Hi @romainsemur , [Fact]
public async Task DoWorkWithPrompt()
{
// Arrange
var mockChatCompletion = new Mock<IChatCompletionService>();
var mockResponse = new ChatMessageContent(
AuthorRole.Assistant,
"AI response",
metadata: new Dictionary<string, object?>
{
{ "Usage",
new Dictionary<string, int>
{
{ "InputTokenCount", 18 },
{ "OutputTokenCount", 242 },
{ "TotalTokenCount", 260 }
}
}
});
mockChatCompletion
.Setup(x => x.GetChatMessageContentsAsync(
It.IsAny<ChatHistory>(),
It.IsAny<PromptExecutionSettings>(),
It.IsAny<Kernel>(),
It.IsAny<CancellationToken>()))
.ReturnsAsync([mockResponse]);
var kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.Services.AddSingleton(mockChatCompletion.Object);
var kernel = kernelBuilder.Build();
var service = new MyService(kernel);
// Act
var result = await service.DoWorkAsync("Prompt to AI");
// Assert
Assert.Equal("AI response", result.ToString());
if (result.Metadata is not null &&
result.Metadata.TryGetValue("Usage", out var metadataObj) &&
metadataObj is Dictionary<string, int> metadata)
{
Assert.Equal(18, metadata["InputTokenCount"]);
Assert.Equal(242, metadata["OutputTokenCount"]);
Assert.Equal(260, metadata["TotalTokenCount"]);
}
} Please let us know if that works for you, thanks! |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Hi,
In this article about unit test (https://devblogs.microsoft.com/semantic-kernel/unit-testing-with-semantic-kernel/) , in the DoWorkWithPrompt() method, how to add a metadata with Usage values in the returns ?
.Returns(new List() { new(AuthorRole.Assistant, "AI response") }.ToAsyncEnumerable());
Beta Was this translation helpful? Give feedback.
All reactions