Skip to content

Commit be687bd

Browse files
authored
Merge pull request #776 from Joannall/master
add OnSourceCodeGenerated Hook
2 parents b23cd20 + 49a968b commit be687bd

File tree

8 files changed

+37
-12
lines changed

8 files changed

+37
-12
lines changed

src/Infrastructure/BotSharp.Abstraction/Planning/IPlanningHook.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ public interface IPlanningHook
55
Task<string> GetSummaryAdditionalRequirements(string planner, RoleDialogModel message)
66
=> Task.FromResult(string.Empty);
77

8+
Task OnSourceCodeGenerated(string planner, RoleDialogModel msg, string language)
9+
=> Task.CompletedTask;
10+
811
Task OnPlanningCompleted(string planner, RoleDialogModel msg)
912
=> Task.CompletedTask;
1013
}

src/Infrastructure/BotSharp.Core/Routing/Reasoning/OneStepForwardReasoner.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class OneStepForwardReasoner : IRoutingReasoner
3434
private readonly IServiceProvider _services;
3535
private readonly ILogger _logger;
3636

37-
public OneStepForwardReasoner(IServiceProvider services, ILogger<NaiveReasoner> logger)
37+
public OneStepForwardReasoner(IServiceProvider services, ILogger<OneStepForwardReasoner> logger)
3838
{
3939
_services = services;
4040
_logger = logger;
@@ -116,7 +116,7 @@ public async Task<bool> AgentExecuted(Agent router, FunctionCallFromLlm inst, Ro
116116
}
117117
else
118118
{
119-
context.Empty(reason: $"Agent queue is cleared by {nameof(NaiveReasoner)}");
119+
context.Empty(reason: $"Agent queue is cleared by {nameof(OneStepForwardReasoner)}");
120120
// context.Push(inst.OriginalAgent, "Push user goal agent");
121121
}
122122
return true;

src/Infrastructure/BotSharp.Core/Routing/Reasoning/SequentialReasoner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class SequentialReasoner : IRoutingReasoner
3333
public int MaxLoopCount => 100;
3434
private FunctionCallFromLlm _lastInst;
3535

36-
public SequentialReasoner(IServiceProvider services, ILogger<NaiveReasoner> logger)
36+
public SequentialReasoner(IServiceProvider services, ILogger<SequentialReasoner> logger)
3737
{
3838
_services = services;
3939
_logger = logger;

src/Plugins/BotSharp.Plugin.Planner/Functions/SummaryPlanFn.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,15 @@ public async Task<bool> Execute(RoleDialogModel message)
7171
var summary = await GetAiResponse(plannerAgent);
7272
message.Content = summary.Content;
7373

74-
// Validate the sql result
74+
// Emit event if the sql statement is generated by planner
7575
var args = JsonSerializer.Deserialize<SummaryPlan>(message.FunctionArgs);
76-
if (args.IsSqlTemplate == false)
76+
if (args != null && !args.IsSqlTemplate && args.ContainsSqlStatements)
7777
{
78-
await fn.InvokeFunction("validate_sql", message);
78+
await HookEmitter.Emit<IPlanningHook>(_services, async hook =>
79+
await hook.OnSourceCodeGenerated(nameof(TwoStageTaskPlanner), message, "sql")
80+
);
7981
}
80-
82+
8183
await HookEmitter.Emit<IPlanningHook>(_services, async hook =>
8284
await hook.OnPlanningCompleted(nameof(TwoStageTaskPlanner), message)
8385
);

src/Plugins/BotSharp.Plugin.Planner/TwoStaging/Models/SummaryPlan.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,7 @@ public class SummaryPlan
44
{
55
[JsonPropertyName("is_sql_template")]
66
public bool IsSqlTemplate { get; set; } = false;
7+
8+
[JsonPropertyName("contains_sql_statements")]
9+
public bool ContainsSqlStatements { get; set; } = false;
710
}

src/Plugins/BotSharp.Plugin.Planner/data/agents/282a7128-69a1-44b0-878c-a9159b88f3b9/agent.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "282a7128-69a1-44b0-878c-a9159b88f3b9",
33
"name": "Planner",
4-
"description": "Plan feasible implementation steps for user task request",
4+
"description": "Plan feasible implementation steps for complex user task request",
55
"type": "task",
66
"createdDateTime": "2023-08-27T10:39:00Z",
77
"updatedDateTime": "2023-08-27T14:39:00Z",

src/Plugins/BotSharp.Plugin.Planner/data/agents/282a7128-69a1-44b0-878c-a9159b88f3b9/functions/plan_summary.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
"type": "boolean",
99
"description": "If user request is to generate sql template instead of actual sql statement."
1010
},
11+
"contains_sql_statements": {
12+
"type": "boolean",
13+
"description": "Set to true if the response contains sql statements."
14+
},
1115
"related_tables": {
1216
"type": "array",
1317
"description": "table name in planning steps",
@@ -17,6 +21,6 @@
1721
}
1822
}
1923
},
20-
"required": [ "related_tables", "is_sql_template" ]
24+
"required": [ "related_tables", "is_sql_template", "contains_sql_statements" ]
2125
}
2226
}

src/Plugins/BotSharp.Plugin.SqlDriver/Hooks/SqlDriverPlanningHook.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,23 @@ public SqlDriverPlanningHook(IServiceProvider services)
2020
_services = services;
2121
}
2222

23-
public async Task OnPlanningCompleted(string planner, RoleDialogModel msg)
23+
public async Task OnSourceCodeGenerated(string planner, RoleDialogModel msg, string language)
2424
{
25+
// envoke validate
26+
if (language != "sql")
27+
{
28+
return;
29+
}
30+
31+
var routing = _services.GetRequiredService<IRoutingService>();
32+
await routing.InvokeFunction("validate_sql", msg);
33+
2534
await HookEmitter.Emit<ISqlDriverHook>(_services, async (hook) =>
2635
{
2736
await hook.SqlGenerated(msg);
2837
});
2938

30-
var settings = _services.GetRequiredService<SqlDriverSetting>();
39+
var settings = _services.GetRequiredService<SqlDriverSetting>();
3140
if (!settings.ExecuteSqlSelectAutonomous)
3241
{
3342
var conversationStateService = _services.GetRequiredService<IConversationStateService>();
@@ -51,7 +60,6 @@ await HookEmitter.Emit<ISqlDriverHook>(_services, async (hook) =>
5160
var response = await completion.GetChatCompletions(agent, wholeDialogs);
5261

5362
// Invoke "execute_sql"
54-
var routing = _services.GetRequiredService<IRoutingService>();
5563
await routing.InvokeFunction(response.FunctionName, response);
5664

5765
msg.CurrentAgentId = agent.Id;
@@ -61,6 +69,11 @@ await HookEmitter.Emit<ISqlDriverHook>(_services, async (hook) =>
6169
msg.StopCompletion = response.StopCompletion;
6270
}
6371

72+
public async Task OnPlanningCompleted(string planner, RoleDialogModel msg)
73+
{
74+
75+
}
76+
6477
public async Task<string> GetSummaryAdditionalRequirements(string planner, RoleDialogModel message)
6578
{
6679
var settings = _services.GetRequiredService<SqlDriverSetting>();

0 commit comments

Comments
 (0)