Redis backplane for SignalR

This commit is contained in:
Haiping Chen 2024-10-02 14:18:12 -05:00
parent 0b9960b532
commit 47bb3941a7
4 changed files with 14 additions and 16 deletions

View file

@ -5,9 +5,9 @@ public interface IKnowledgeHook
Task<List<KnowledgeChunk>> CollectChunkedKnowledge()
=> Task.FromResult(new List<KnowledgeChunk>());
Task<List<string>> GetRelevantKnowledges(string text)
Task<List<string>> GetRelevantKnowledges(RoleDialogModel message, string text)
=> Task.FromResult(new List<string>());
Task<List<string>> GetGlobalKnowledges()
Task<List<string>> GetGlobalKnowledges(RoleDialogModel message)
=> Task.FromResult(new List<string>());
}

View file

@ -19,27 +19,18 @@ public class PrimaryStagePlanFn : IFunctionCallback
{
var agentService = _services.GetRequiredService<IAgentService>();
var state = _services.GetRequiredService<IConversationStateService>();
// var knowledgeService = _services.GetRequiredService<IKnowledgeService>();
// var knowledgeSettings = _services.GetRequiredService<KnowledgeBaseSettings>();
state.SetState("max_tokens", "4096");
var task = JsonSerializer.Deserialize<PrimaryRequirementRequest>(message.FunctionArgs);
// var collectionName = knowledgeSettings.Default.CollectionName ?? KnowledgeCollectionName.BotSharp;
// Get knowledge from vectordb
var hooks = _services.GetServices<IKnowledgeHook>();
var knowledges = new List<string>();
foreach (var question in task.Questions)
{
/*var list = await knowledgeService.SearchVectorKnowledge(question, collectionName, new VectorSearchOptions
{
Confidence = 0.4f
});
knowledges.Add(string.Join("\r\n\r\n=====\r\n", list.Select(x => x.ToQuestionAnswer())));*/
foreach (var hook in hooks)
{
var k = await hook.GetRelevantKnowledges(question);
var k = await hook.GetRelevantKnowledges(message, question);
knowledges.AddRange(k);
}
}
@ -47,7 +38,7 @@ public class PrimaryStagePlanFn : IFunctionCallback
// Get first stage planning prompt
var currentAgent = await agentService.LoadAgent(message.CurrentAgentId);
var firstPlanningPrompt = await GetFirstStagePlanPrompt(task.Requirements, knowledges);
var firstPlanningPrompt = await GetFirstStagePlanPrompt(message, task.Requirements, knowledges);
var plannerAgent = new Agent
{
Id = BuiltInAgentId.Planner,
@ -65,7 +56,7 @@ public class PrimaryStagePlanFn : IFunctionCallback
return true;
}
private async Task<string> GetFirstStagePlanPrompt(string taskDescription, List<string> relevantKnowledges)
private async Task<string> GetFirstStagePlanPrompt(RoleDialogModel message, string taskDescription, List<string> relevantKnowledges)
{
var agentService = _services.GetRequiredService<IAgentService>();
var render = _services.GetRequiredService<ITemplateRender>();
@ -83,7 +74,7 @@ public class PrimaryStagePlanFn : IFunctionCallback
var globalKnowledges = new List<string>();
foreach (var hook in knowledgeHooks)
{
var k = await hook.GetGlobalKnowledges();
var k = await hook.GetGlobalKnowledges(message);
globalKnowledges.AddRange(k);
}

View file

@ -4,6 +4,7 @@ using BotSharp.Logger;
using BotSharp.Plugin.ChatHub;
using Serilog;
using BotSharp.Abstraction.Messaging.JsonConverters;
using StackExchange.Redis;
var builder = WebApplication.CreateBuilder(args);
@ -28,7 +29,12 @@ string[] allowedOrigins = builder.Configuration.GetSection("AllowedOrigins").Get
builder.AddServiceDefaults();
// Add SignalR for WebSocket
builder.Services.AddSignalR();
builder.Services.AddSignalR()
// Enable Redis backplane for SignalR
/*.AddStackExchangeRedis("127.0.0.1", o =>
{
o.Configuration.ChannelPrefix = RedisChannel.Literal("botsharp");
})*/;
var app = builder.Build();

View file

@ -21,6 +21,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="8.0.8" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.20.1" />
</ItemGroup>