Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cabc780

Browse files
fix: add missing usage metadata
1 parent 28ae362 commit cabc780

File tree

4 files changed

+41
-7
lines changed

4 files changed

+41
-7
lines changed

‎src/SemanticKernel.DashScope/DashScopeChatCompletionService.cs‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ public async Task<IReadOnlyList<ChatMessageContent>> GetChatMessageContentsAsync
3030
var chatMessages = chatHistory.ToChatMessages();
3131
var chatParameters = executionSettings?.ToChatParameters();
3232
var response = await _dashScopeClient.TextGeneration.Chat(_modelId, chatMessages, chatParameters, cancellationToken);
33-
return [new ChatMessageContent(new AuthorRole(chatMessages[0].Role), response.Output.Text)];
33+
var chatMessageContent = new ChatMessageContent(
34+
new AuthorRole(chatMessages[0].Role),
35+
response.Output.Text,
36+
metadata: response.Usage.ToMetadata());
37+
return [chatMessageContent];
3438
}
3539

3640
public async IAsyncEnumerable<StreamingChatMessageContent> GetStreamingChatMessageContentsAsync(
@@ -44,10 +48,12 @@ public async IAsyncEnumerable<StreamingChatMessageContent> GetStreamingChatMessa
4448
chatParameters.IncrementalOutput = true;
4549

4650
var responses = _dashScopeClient.TextGeneration.ChatStreamed(_modelId, chatMessages, chatParameters, cancellationToken);
47-
4851
await foreach (var response in responses)
4952
{
50-
yield return new StreamingChatMessageContent(new AuthorRole(chatMessages[0].Role), response.Output.Text);
53+
yield return new StreamingChatMessageContent(
54+
new AuthorRole(chatMessages[0].Role),
55+
response.Output.Text,
56+
metadata: response.Usage.ToMetadata());
5157
}
5258
}
5359
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using Sdcb.DashScope.TextGeneration;
2+
3+
namespace Cnblogs.SemanticKernel.Connectors.DashScope;
4+
5+
public static class ChatTokenUsageExtensions
6+
{
7+
public static IReadOnlyDictionary<string, object?>? ToMetadata(this ChatTokenUsage? usage)
8+
{
9+
return usage is null
10+
? null :
11+
new Dictionary<string, object?>()
12+
{
13+
{ "Usage", usage }
14+
};
15+
}
16+
}

‎src/SemanticKernel.DashScope/SemanticKernel.DashScope.csproj‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
</ItemGroup>
2121

2222
<ItemGroup>
23-
<PackageReference Include="Microsoft.SemanticKernel.Core" Version="1.3.0" />
23+
<PackageReference Include="Microsoft.SemanticKernel.Core" Version="1.4.0" />
2424
<PackageReference Include="Sdcb.DashScope" Version="1.0.1" />
2525
</ItemGroup>
2626

‎test/SemanticKernel.DashScope.IntegrationTest/ChatCompletionTests.cs‎

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Diagnostics;
22
using System.Text;
33
using Microsoft.SemanticKernel;
4+
using Sdcb.DashScope.TextGeneration;
45

56
namespace SemanticKernel.DashScope.IntegrationTest;
67

@@ -29,6 +30,7 @@ public async Task ChatCompletion_InvokePromptAsync_WorksCorrectly()
2930

3031
// Assert
3132
Assert.Contains("博客园", result.ToString());
33+
Assert.Equal(4, GetUsage(result.Metadata)?.InputTokens);
3234
Trace.WriteLine(result.ToString());
3335
}
3436

@@ -46,11 +48,21 @@ public async Task ChatCompletion_InvokePromptStreamingAsync_WorksCorrectly()
4648

4749
// Assert
4850
var sb = new StringBuilder();
49-
await foreach (var message in result)
51+
await foreach (var content in result)
5052
{
51-
Trace.Write(message);
52-
sb.Append(message);
53+
Trace.Write(content);
54+
sb.Append(content);
55+
Assert.Equal(4, GetUsage(content.Metadata)?.InputTokens);
5356
}
5457
Assert.Contains("博客园", sb.ToString());
58+
59+
}
60+
61+
private static ChatTokenUsage? GetUsage(IReadOnlyDictionary<string, object?>? metadata)
62+
{
63+
return metadata?.TryGetValue("Usage", out var value) == true &&
64+
value is ChatTokenUsage usage
65+
? usage
66+
: null;
5567
}
5668
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /