save stage
This commit is contained in:
parent
114fa98616
commit
eb1b77904b
|
|
@ -10,9 +10,10 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.SemanticKernel.Abstractions" Version="1.0.0-beta7" />
|
||||
<PackageReference Include="Microsoft.SemanticKernel.Plugins.Memory" Version="1.0.0-beta7" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Validation" Version="17.6.11" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.SemanticKernel.Abstractions" Version="1.0.0-beta8" />
|
||||
<PackageReference Include="Microsoft.SemanticKernel.Plugins.Memory" Version="1.0.0-beta8" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Validation" Version="17.8.8" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ namespace BotSharp.Plugin.SemanticKernel
|
|||
/// </summary>
|
||||
public class SemanticKernelChatCompletionProvider : IChatCompletion
|
||||
{
|
||||
private IKernel _kernel;
|
||||
private Microsoft.SemanticKernel.AI.ChatCompletion.IChatCompletion _kernelChatCompletion;
|
||||
private IServiceProvider _services;
|
||||
private ITokenStatistics _tokenStatistics;
|
||||
private string? _model = null;
|
||||
|
|
@ -29,14 +29,14 @@ namespace BotSharp.Plugin.SemanticKernel
|
|||
/// <summary>
|
||||
/// Create a new instance of <see cref="SemanticKernelChatCompletionProvider"/>
|
||||
/// </summary>
|
||||
/// <param name="kernel"></param>
|
||||
/// <param name="chatCompletion"></param>
|
||||
/// <param name="services"></param>
|
||||
/// <param name="tokenStatistics"></param>
|
||||
public SemanticKernelChatCompletionProvider(IKernel kernel,
|
||||
public SemanticKernelChatCompletionProvider(Microsoft.SemanticKernel.AI.ChatCompletion.IChatCompletion chatCompletion,
|
||||
IServiceProvider services,
|
||||
ITokenStatistics tokenStatistics)
|
||||
{
|
||||
this._kernel = kernel;
|
||||
this._kernelChatCompletion = chatCompletion;
|
||||
this._services = services;
|
||||
this._tokenStatistics = tokenStatistics;
|
||||
}
|
||||
|
|
@ -49,7 +49,7 @@ namespace BotSharp.Plugin.SemanticKernel
|
|||
Task.WaitAll(hooks.Select(hook =>
|
||||
hook.BeforeGenerating(agent, conversations)).ToArray());
|
||||
|
||||
var completion = _kernel.GetService<Microsoft.SemanticKernel.AI.ChatCompletion.IChatCompletion>(_model);
|
||||
var completion = this._kernelChatCompletion;
|
||||
|
||||
var agentService = _services.GetRequiredService<IAgentService>();
|
||||
var instruction = agentService.RenderedInstruction(agent);
|
||||
|
|
|
|||
|
|
@ -6,20 +6,41 @@ using Microsoft.Extensions.DependencyInjection;
|
|||
|
||||
namespace BotSharp.Plugin.SemanticKernel
|
||||
{
|
||||
/// <summary>
|
||||
/// Use Semantic Kernel as BotSharp plugin
|
||||
/// </summary>
|
||||
public class SemanticKernelPlugin : IBotSharpPlugin
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public string Name => "Semantic Kernel";
|
||||
|
||||
/// <inheritdoc/>
|
||||
public string Description => "Semantic Kernel Service";
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void RegisterDI(IServiceCollection services, IConfiguration config)
|
||||
{
|
||||
var settings = new SemanticKernelSettings();
|
||||
config.Bind("SemanticKernel", settings);
|
||||
var provider = services.BuildServiceProvider().CreateScope().ServiceProvider;
|
||||
|
||||
services.AddScoped<ITextCompletion, SemanticKernelTextCompletionProvider>();
|
||||
services.AddScoped<IChatCompletion, SemanticKernelChatCompletionProvider>();
|
||||
services.AddScoped<IVectorDb, SemanticKernelMemoryStoreProvider>();
|
||||
services.AddScoped<ITextEmbedding, SemanticKernelTextEmbeddingProvider>();
|
||||
if (provider.GetService<Microsoft.SemanticKernel.AI.TextCompletion.ITextCompletion>() != null)
|
||||
{
|
||||
services.AddScoped<ITextCompletion, SemanticKernelTextCompletionProvider>();
|
||||
}
|
||||
|
||||
if (provider.GetService<Microsoft.SemanticKernel.AI.ChatCompletion.IChatCompletion>() != null)
|
||||
{
|
||||
services.AddScoped<IChatCompletion, SemanticKernelChatCompletionProvider>();
|
||||
}
|
||||
|
||||
if (provider.GetService<Microsoft.SemanticKernel.Memory.IMemoryStore>() != null)
|
||||
{
|
||||
services.AddScoped<IVectorDb, SemanticKernelMemoryStoreProvider>();
|
||||
}
|
||||
|
||||
if (provider.GetService<Microsoft.SemanticKernel.AI.Embeddings.ITextEmbeddingGeneration>() != null)
|
||||
{
|
||||
services.AddScoped<ITextEmbedding, SemanticKernelTextEmbeddingProvider>();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace BotSharp.Plugin.SemanticKernel
|
||||
{
|
||||
internal class SemanticKernelSettings
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -19,7 +19,7 @@ namespace BotSharp.Plugin.SemanticKernel
|
|||
/// </summary>
|
||||
public class SemanticKernelTextCompletionProvider : Abstraction.MLTasks.ITextCompletion
|
||||
{
|
||||
private readonly IKernel _kernel;
|
||||
private readonly Microsoft.SemanticKernel.AI.TextCompletion.ITextCompletion _kernelTextCompletion;
|
||||
private readonly IServiceProvider _services;
|
||||
private readonly ITokenStatistics _tokenStatistics;
|
||||
private string? _model = null;
|
||||
|
|
@ -30,16 +30,14 @@ namespace BotSharp.Plugin.SemanticKernel
|
|||
/// <summary>
|
||||
/// Create a new instance of <see cref="SemanticKernelTextCompletionProvider"/>
|
||||
/// </summary>
|
||||
/// <param name="kernel"></param>
|
||||
/// <param name="textCompletion"></param>
|
||||
/// <param name="services"></param>
|
||||
/// <param name="tokenStatistics"></param>
|
||||
public SemanticKernelTextCompletionProvider(IKernel kernel,
|
||||
public SemanticKernelTextCompletionProvider(Microsoft.SemanticKernel.AI.TextCompletion.ITextCompletion textCompletion,
|
||||
IServiceProvider services,
|
||||
ITokenStatistics tokenStatistics)
|
||||
{
|
||||
Requires.NotNull(kernel, nameof(IKernel));
|
||||
|
||||
this._kernel = kernel;
|
||||
this._kernelTextCompletion = textCompletion;
|
||||
this._services = services;
|
||||
this._tokenStatistics = tokenStatistics;
|
||||
}
|
||||
|
|
@ -61,7 +59,7 @@ namespace BotSharp.Plugin.SemanticKernel
|
|||
Task.WaitAll(hooks.Select(hook =>
|
||||
hook.BeforeGenerating(agent, new List<RoleDialogModel> { userMessage })).ToArray());
|
||||
|
||||
var completion = _kernel.GetService<Microsoft.SemanticKernel.AI.TextCompletion.ITextCompletion>(_model);
|
||||
var completion = this._kernelTextCompletion;
|
||||
_tokenStatistics.StartTimer();
|
||||
var result = await completion.CompleteAsync(text);
|
||||
_tokenStatistics.StopTimer();
|
||||
|
|
|
|||
2
src/Plugins/BotSharp.Plugin.SemanticKernel/readme.md
Normal file
2
src/Plugins/BotSharp.Plugin.SemanticKernel/readme.md
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# Semantic Kernel For BotSharp
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ namespace BotSharp.Plugin.SemanticKernel.UnitTests.Helpers
|
|||
_response = response;
|
||||
}
|
||||
|
||||
public async Task<ChatMessageBase> GetChatMessageAsync(CancellationToken cancellationToken = default)
|
||||
public async Task<ChatMessage> GetChatMessageAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
return await Task.FromResult(new MockModelResult(_response));
|
||||
}
|
||||
|
|
@ -25,7 +25,7 @@ namespace BotSharp.Plugin.SemanticKernel.UnitTests.Helpers
|
|||
return Task.FromResult(_response);
|
||||
}
|
||||
|
||||
public class MockModelResult : ChatMessageBase
|
||||
public class MockModelResult : ChatMessage
|
||||
{
|
||||
public MockModelResult(string content) : base(AuthorRole.Assistant, content, null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -24,17 +24,17 @@ namespace BotSharp.Plugin.SemanticKernel.Tests
|
|||
{
|
||||
public class SemanticKernelChatCompletionProviderTests
|
||||
{
|
||||
private readonly Mock<IKernel> _kernelMock;
|
||||
private readonly Mock<Microsoft.SemanticKernel.AI.ChatCompletion.IChatCompletion> _chatCompletionMock;
|
||||
private readonly Mock<IServiceProvider> _servicesMock;
|
||||
private readonly Mock<ITokenStatistics> _tokenStatisticsMock;
|
||||
private readonly SemanticKernelChatCompletionProvider _provider;
|
||||
|
||||
public SemanticKernelChatCompletionProviderTests()
|
||||
{
|
||||
_kernelMock = new Mock<IKernel>();
|
||||
_chatCompletionMock = new Mock<Microsoft.SemanticKernel.AI.ChatCompletion.IChatCompletion>();
|
||||
_servicesMock = new Mock<IServiceProvider>();
|
||||
_tokenStatisticsMock = new Mock<ITokenStatistics>();
|
||||
_provider = new SemanticKernelChatCompletionProvider(_kernelMock.Object, _servicesMock.Object, _tokenStatisticsMock.Object);
|
||||
_provider = new SemanticKernelChatCompletionProvider(_chatCompletionMock, _servicesMock.Object, _tokenStatisticsMock.Object);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
|
|||
Loading…
Reference in a new issue