Skip to content

Commit 4083e76

Browse files
authored
Merge pull request #264 from hchen2020/master
SequentialPlanner draft.
2 parents 34442fc + 091e7b4 commit 4083e76

File tree

23 files changed

+232
-53
lines changed

23 files changed

+232
-53
lines changed

src/Infrastructure/BotSharp.Core/BotSharp.Core.csproj

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,9 @@
5050
<None Remove="data\agents\01e2fc5c-2c89-4ec7-8470-7688608b496c\instruction.liquid" />
5151
<None Remove="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\agent.json" />
5252
<None Remove="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\instruction.liquid" />
53-
<None Remove="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\next_step_prompt.hf_planner.liquid" />
54-
<None Remove="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\next_step_prompt.liquid" />
53+
<None Remove="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\planner_prompt.hf.liquid" />
54+
<None Remove="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\planner_prompt.naive.liquid" />
55+
<None Remove="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\planner_prompt.sequential.liquid" />
5556
<None Remove="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\response_with_function.liquid" />
5657
<None Remove="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\welcome.liquid" />
5758
<None Remove="data\plugins\config.json" />
@@ -70,10 +71,13 @@
7071
<Content Include="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\instruction.liquid">
7172
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
7273
</Content>
73-
<Content Include="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\next_step_prompt.hf_planner.liquid">
74+
<Content Include="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\planner_prompt.sequential.liquid">
7475
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
7576
</Content>
76-
<Content Include="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\next_step_prompt.liquid">
77+
<Content Include="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\planner_prompt.hf.liquid">
78+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
79+
</Content>
80+
<Content Include="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\planner_prompt.naive.liquid">
7781
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
7882
</Content>
7983
<Content Include="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\templates\response_with_function.liquid">

src/Infrastructure/BotSharp.Core/Planning/HFPlanner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public async Task<bool> AgentExecuted(Agent router, FunctionCallFromLlm inst, Ro
9191

9292
private string GetNextStepPrompt(Agent router)
9393
{
94-
var template = router.Templates.First(x => x.Name == "next_step_prompt.hf_planner").Content;
94+
var template = router.Templates.First(x => x.Name == "planner_prompt.hf").Content;
9595
var render = _services.GetRequiredService<ITemplateRender>();
9696
var prompt = render.Render(template, router.TemplateDict);
9797
return prompt.Trim();

src/Infrastructure/BotSharp.Core/Planning/NaivePlanner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public async Task<bool> AgentExecuted(Agent router, FunctionCallFromLlm inst, Ro
108108

109109
private string GetNextStepPrompt(Agent router)
110110
{
111-
var template = router.Templates.First(x => x.Name == "next_step_prompt").Content;
111+
var template = router.Templates.First(x => x.Name == "planner_prompt.naive").Content;
112112

113113
var render = _services.GetRequiredService<ITemplateRender>();
114114
return render.Render(template, new Dictionary<string, object>
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
using BotSharp.Abstraction.Agents.Models;
2+
using BotSharp.Abstraction.Functions.Models;
3+
using BotSharp.Abstraction.Planning;
4+
using BotSharp.Abstraction.Routing;
5+
using BotSharp.Abstraction.Routing.Models;
6+
using BotSharp.Abstraction.Templating;
7+
8+
namespace BotSharp.Core.Planning;
9+
10+
public class SequentialPlanner : IPlaner
11+
{
12+
private readonly IServiceProvider _services;
13+
private readonly ILogger _logger;
14+
15+
public SequentialPlanner(IServiceProvider services, ILogger<NaivePlanner> logger)
16+
{
17+
_services = services;
18+
_logger = logger;
19+
}
20+
21+
public async Task<FunctionCallFromLlm> GetNextInstruction(Agent router, string messageId)
22+
{
23+
var next = GetNextStepPrompt(router);
24+
25+
var inst = new FunctionCallFromLlm();
26+
27+
// text completion
28+
/*var agentService = _services.GetRequiredService<IAgentService>();
29+
var instruction = agentService.RenderedInstruction(router);
30+
var content = $"{instruction}\r\n###\r\n{next}";
31+
content = content + "\r\nResponse: ";
32+
var completion = CompletionProvider.GetTextCompletion(_services);*/
33+
34+
// chat completion
35+
var completion = CompletionProvider.GetChatCompletion(_services,
36+
provider: router?.LlmConfig?.Provider,
37+
model: router?.LlmConfig?.Model);
38+
39+
int retryCount = 0;
40+
while (retryCount < 3)
41+
{
42+
string text = string.Empty;
43+
try
44+
{
45+
// text completion
46+
// text = await completion.GetCompletion(content, router.Id, messageId);
47+
var dialogs = new List<RoleDialogModel>
48+
{
49+
new RoleDialogModel(AgentRole.User, next)
50+
{
51+
MessageId = messageId
52+
}
53+
};
54+
var response = await completion.GetChatCompletions(router, dialogs);
55+
56+
inst = response.Content.JsonContent<FunctionCallFromLlm>();
57+
break;
58+
}
59+
catch (Exception ex)
60+
{
61+
_logger.LogError($"{ex.Message}: {text}");
62+
inst.Function = "response_to_user";
63+
inst.Response = ex.Message;
64+
inst.AgentName = "Router";
65+
}
66+
finally
67+
{
68+
retryCount++;
69+
}
70+
}
71+
72+
return inst;
73+
}
74+
75+
public async Task<bool> AgentExecuting(Agent router, FunctionCallFromLlm inst, RoleDialogModel message)
76+
{
77+
// Set user content as Planner's question
78+
message.FunctionName = inst.Function;
79+
message.FunctionArgs = inst.Arguments == null ? "{}" : JsonSerializer.Serialize(inst.Arguments);
80+
81+
return true;
82+
}
83+
84+
public async Task<bool> AgentExecuted(Agent router, FunctionCallFromLlm inst, RoleDialogModel message)
85+
{
86+
var context = _services.GetRequiredService<RoutingContext>();
87+
88+
if (message.StopCompletion)
89+
{
90+
context.Empty();
91+
return false;
92+
}
93+
94+
// Handover to Router;
95+
context.Pop();
96+
97+
var routing = _services.GetRequiredService<IRoutingService>();
98+
routing.ResetRecursiveCounter();
99+
100+
return true;
101+
}
102+
103+
private string GetNextStepPrompt(Agent router)
104+
{
105+
var template = router.Templates.First(x => x.Name == "planner_prompt.sequential").Content;
106+
107+
var render = _services.GetRequiredService<ITemplateRender>();
108+
return render.Render(template, new Dictionary<string, object>
109+
{
110+
});
111+
}
112+
}

src/Infrastructure/BotSharp.Core/Routing/RoutingPlugin.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,16 @@ public void RegisterDI(IServiceCollection services, IConfiguration config)
3737

3838
services.AddScoped<NaivePlanner>();
3939
services.AddScoped<HFPlanner>();
40+
services.AddScoped<SequentialPlanner>();
41+
4042
services.AddScoped<IPlaner>(provider =>
4143
{
4244
var settingService = provider.GetRequiredService<ISettingService>();
4345
var routingSettings = settingService.Bind<RoutingSettings>("Router");
4446
if (routingSettings.Planner == nameof(HFPlanner))
4547
return provider.GetRequiredService<HFPlanner>();
48+
else if (routingSettings.Planner == nameof(SequentialPlanner))
49+
return provider.GetRequiredService<SequentialPlanner>();
4650
else
4751
return provider.GetRequiredService<NaivePlanner>();
4852
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
In order to execute the instructions listed by the user in the order specified by the user.
2+
What is the next step based on the CONVERSATION?
3+
Response must be in required JSON format.

src/Plugins/BotSharp.Plugin.WebDriver/BotSharp.Plugin.Selenium.csproj

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/Plugins/BotSharp.Plugin.WebDriver/BotSharp.Plugin.WebDriver.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
</PropertyGroup>
1212

1313
<ItemGroup>
14-
<PackageReference Include="Microsoft.Playwright" Version="1.39.0" />
14+
<PackageReference Include="Microsoft.Playwright" Version="1.41.1" />
1515
</ItemGroup>
1616

1717
<ItemGroup>

0 commit comments

Comments
 (0)