From 4c93c8e14fce73006cb1d9899f7c3674209289ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Sat, 24 May 2025 23:58:06 +0800 Subject: [PATCH 1/2] feat: update sk version --- .../DashScopeTextGenerator.cs | 12 ++++++++-- .../KernelMemory.DashScope.csproj | 4 ++-- .../TokenUsageMapper.cs | 22 +++++++++++++++++++ .../DashScopePromptExecutionSettings.cs | 3 +++ .../SemanticKernel.DashScope.csproj | 6 ++--- .../KernelMemory.DashScope.UnitTests.csproj | 12 +++++----- .../SemanticKernel.DashScope.UnitTest.csproj | 10 ++++----- 7 files changed, 51 insertions(+), 18 deletions(-) create mode 100644 src/KernelMemory.DashScope/TokenUsageMapper.cs diff --git a/src/KernelMemory.DashScope/DashScopeTextGenerator.cs b/src/KernelMemory.DashScope/DashScopeTextGenerator.cs index 96dfb5c..9c5d885 100644 --- a/src/KernelMemory.DashScope/DashScopeTextGenerator.cs +++ b/src/KernelMemory.DashScope/DashScopeTextGenerator.cs @@ -1,6 +1,7 @@ using System.Runtime.CompilerServices; using Cnblogs.DashScope.Core; using Microsoft.Extensions.Logging; +using Microsoft.KernelMemory; using Microsoft.KernelMemory.AI; using Microsoft.KernelMemory.Diagnostics; @@ -38,7 +39,7 @@ public IReadOnlyList GetTokens(string text) } /// - public async IAsyncEnumerable GenerateTextAsync( + public async IAsyncEnumerable GenerateTextAsync( string prompt, TextGenerationOptions options, [EnumeratorCancellation] CancellationToken cancellationToken = new()) @@ -71,7 +72,14 @@ public async IAsyncEnumerable GenerateTextAsync( var tokens = dashScopeClient.GetTextCompletionStreamAsync(request, cancellationToken); await foreach (var token in tokens) { - yield return token.Output.Text!; + if (cancellationToken.IsCancellationRequested) + { + break; + } + + yield return new GeneratedTextContent( + token.Output.Text ?? string.Empty, + token.Usage.ToKernelMemoryTokenUsage(modelId)); } } diff --git a/src/KernelMemory.DashScope/KernelMemory.DashScope.csproj b/src/KernelMemory.DashScope/KernelMemory.DashScope.csproj index 290d0af..b3b827d 100644 --- a/src/KernelMemory.DashScope/KernelMemory.DashScope.csproj +++ b/src/KernelMemory.DashScope/KernelMemory.DashScope.csproj @@ -18,8 +18,8 @@ - - + + diff --git a/src/KernelMemory.DashScope/TokenUsageMapper.cs b/src/KernelMemory.DashScope/TokenUsageMapper.cs new file mode 100644 index 0000000..64a1346 --- /dev/null +++ b/src/KernelMemory.DashScope/TokenUsageMapper.cs @@ -0,0 +1,22 @@ +using Cnblogs.DashScope.Core; +using Microsoft.KernelMemory; + +namespace Cnblogs.KernelMemory.AI.DashScope; + +internal static class TokenUsageMapper +{ + public static TokenUsage? ToKernelMemoryTokenUsage(this TextGenerationTokenUsage? usage, string? modelId) + { + if (usage == null) + { + return null; + } + + return new TokenUsage() + { + ServiceTokensIn = usage.InputTokens, + ServiceTokensOut = usage.OutputTokens, + ModelName = modelId + }; + } +} diff --git a/src/SemanticKernel.DashScope/DashScopePromptExecutionSettings.cs b/src/SemanticKernel.DashScope/DashScopePromptExecutionSettings.cs index 4b2a6e9..c90c447 100644 --- a/src/SemanticKernel.DashScope/DashScopePromptExecutionSettings.cs +++ b/src/SemanticKernel.DashScope/DashScopePromptExecutionSettings.cs @@ -50,6 +50,9 @@ public class DashScopePromptExecutionSettings : PromptExecutionSettings, ITextGe /// public ToolChoice? ToolChoice { get; } + /// + public bool? ParallelToolCalls { get; set; } + /// public IEnumerable? Tools { get; set; } diff --git a/src/SemanticKernel.DashScope/SemanticKernel.DashScope.csproj b/src/SemanticKernel.DashScope/SemanticKernel.DashScope.csproj index 0ad5386..1b772ad 100644 --- a/src/SemanticKernel.DashScope/SemanticKernel.DashScope.csproj +++ b/src/SemanticKernel.DashScope/SemanticKernel.DashScope.csproj @@ -19,9 +19,9 @@ - - - + + + diff --git a/test/KernelMemory.DashScope.UnitTests/KernelMemory.DashScope.UnitTests.csproj b/test/KernelMemory.DashScope.UnitTests/KernelMemory.DashScope.UnitTests.csproj index 85dd895..3cfce45 100644 --- a/test/KernelMemory.DashScope.UnitTests/KernelMemory.DashScope.UnitTests.csproj +++ b/test/KernelMemory.DashScope.UnitTests/KernelMemory.DashScope.UnitTests.csproj @@ -10,18 +10,18 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/test/SemanticKernel.DashScope.UnitTest/SemanticKernel.DashScope.UnitTest.csproj b/test/SemanticKernel.DashScope.UnitTest/SemanticKernel.DashScope.UnitTest.csproj index 5348e5d..74dbcbe 100644 --- a/test/SemanticKernel.DashScope.UnitTest/SemanticKernel.DashScope.UnitTest.csproj +++ b/test/SemanticKernel.DashScope.UnitTest/SemanticKernel.DashScope.UnitTest.csproj @@ -1,16 +1,16 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + From 052228290fd518f5a4f5f0100c2d4da3abbf28a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Sun, 25 May 2025 00:12:14 +0800 Subject: [PATCH 2/2] test: update test --- src/KernelMemory.DashScope/DashScopeTextGenerator.cs | 5 ----- .../DashScopeTextGeneratorTests.cs | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/KernelMemory.DashScope/DashScopeTextGenerator.cs b/src/KernelMemory.DashScope/DashScopeTextGenerator.cs index 9c5d885..b3e609b 100644 --- a/src/KernelMemory.DashScope/DashScopeTextGenerator.cs +++ b/src/KernelMemory.DashScope/DashScopeTextGenerator.cs @@ -72,11 +72,6 @@ public async IAsyncEnumerable GenerateTextAsync( var tokens = dashScopeClient.GetTextCompletionStreamAsync(request, cancellationToken); await foreach (var token in tokens) { - if (cancellationToken.IsCancellationRequested) - { - break; - } - yield return new GeneratedTextContent( token.Output.Text ?? string.Empty, token.Usage.ToKernelMemoryTokenUsage(modelId)); diff --git a/test/KernelMemory.DashScope.UnitTests/DashScopeTextGeneratorTests.cs b/test/KernelMemory.DashScope.UnitTests/DashScopeTextGeneratorTests.cs index fcc9dc1..95b9782 100644 --- a/test/KernelMemory.DashScope.UnitTests/DashScopeTextGeneratorTests.cs +++ b/test/KernelMemory.DashScope.UnitTests/DashScopeTextGeneratorTests.cs @@ -26,7 +26,7 @@ public async Task TextGenerator_GenerateText_IncrementalGenerateAsync() var response = await generator.GenerateTextAsync(Cases.Text, Cases.TextGenerationOptions).ToListAsync(); // Assert - response[0].Should().BeSameAs( + response[0].Text.Should().BeSameAs( Cases.TextGenerationResponse.Output.Text, "generated text should mapped from output.text"); captured.Should().BeEquivalentTo( @@ -51,7 +51,7 @@ public async Task TextGenerator_DefaultsToZero_MapZeroToNullAsync() var response = await generator.GenerateTextAsync(Cases.Text, Cases.TextGenerationOptions).ToListAsync(); // Assert - response[0].Should().BeSameAs( + response[0].Text.Should().BeSameAs( Cases.TextGenerationResponse.Output.Text, "generated text should mapped from output.text"); captured.Should().BeEquivalentTo(