Skip to content

Commit 01f5af4

Browse files
authored
Merge pull request #849 from hchen2020/master
Allow append states in RuleTrigger.
2 parents 2d50e3f + 97b6cd2 commit 01f5af4

File tree

8 files changed

+39
-14
lines changed

8 files changed

+39
-14
lines changed

src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationService.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,6 @@ Task<bool> SendMessage(string agentId,
6161
Task<Conversation> GetConversationRecordOrCreateNew(string agentId);
6262

6363
bool IsConversationMode();
64+
65+
void SaveStates();
6466
}

src/Infrastructure/BotSharp.Core.Crontab/Services/CrontabEventSubscription.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using BotSharp.Abstraction.Infrastructures.Events;
22
using Microsoft.Extensions.Hosting;
33
using Microsoft.Extensions.Logging;
4-
using System.Runtime.InteropServices;
54

65
namespace BotSharp.Core.Crontab.Services;
76

@@ -22,22 +21,28 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
2221

2322
using (var scope = _services.CreateScope())
2423
{
24+
var publisher = scope.ServiceProvider.GetRequiredService<IEventPublisher>();
2525
var subscriber = scope.ServiceProvider.GetRequiredService<IEventSubscriber>();
2626
var cron = scope.ServiceProvider.GetRequiredService<ICrontabService>();
2727
var crons = await cron.GetCrontable();
2828
foreach (var item in crons)
2929
{
3030
_ = Task.Run(async () =>
3131
{
32+
// Clean unhandled messages
33+
await publisher.RemoveAsync($"Crontab:{item.Title}", count: 100);
34+
3235
await subscriber.SubscribeAsync($"Crontab:{item.Title}",
3336
"Crontab",
3437
port: 0,
35-
priorityEnabled: false, async (sender, args) =>
38+
priorityEnabled: false,
39+
async (sender, args) =>
3640
{
3741
var scope = _services.CreateScope();
3842
cron = scope.ServiceProvider.GetRequiredService<ICrontabService>();
3943
await cron.ScheduledTimeArrived(item);
40-
}, stoppingToken: stoppingToken);
44+
},
45+
stoppingToken: stoppingToken);
4146
});
4247
}
4348
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
using BotSharp.Abstraction.Models;
2+
13
namespace BotSharp.Core.Rules.Engines;
24

35
public interface IRuleEngine
46
{
5-
Task Triggered(IRuleTrigger trigger, string data);
7+
Task Triggered(IRuleTrigger trigger, string data, List<MessageState>? states = null);
68
}

src/Infrastructure/BotSharp.Core.Rules/Engines/RuleEngine.cs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public RuleEngine(IServiceProvider services, ILogger<RuleEngine> logger)
1818
_logger = logger;
1919
}
2020

21-
public async Task Triggered(IRuleTrigger trigger, string data)
21+
public async Task Triggered(IRuleTrigger trigger, string data, List<MessageState>? states = null)
2222
{
2323
// Pull all user defined rules
2424
var agentService = _services.GetRequiredService<IAgentService>();
@@ -36,10 +36,11 @@ public async Task Triggered(IRuleTrigger trigger, string data)
3636

3737
// Trigger the agents
3838
var instructService = _services.GetRequiredService<IInstructService>();
39-
var convService = _services.GetRequiredService<IConversationService>();
39+
4040

4141
foreach (var agent in preFilteredAgents)
4242
{
43+
var convService = _services.GetRequiredService<IConversationService>();
4344
var conv = await convService.NewConversation(new Conversation
4445
{
4546
Channel = trigger.Channel,
@@ -49,18 +50,25 @@ public async Task Triggered(IRuleTrigger trigger, string data)
4950

5051
var message = new RoleDialogModel(AgentRole.User, data);
5152

52-
var states = new List<MessageState>
53+
var allStates = new List<MessageState>
5354
{
54-
new("channel", trigger.Channel),
55-
new("channel_id", trigger.EntityId)
55+
new("channel", trigger.Channel)
5656
};
57-
convService.SetConversationId(conv.Id, states);
57+
58+
if (states != null)
59+
{
60+
allStates.AddRange(states);
61+
}
62+
63+
convService.SetConversationId(conv.Id, allStates);
5864

5965
await convService.SendMessage(agent.Id,
6066
message,
6167
null,
6268
msg => Task.CompletedTask);
6369

70+
convService.SaveStates();
71+
6472
/*foreach (var rule in agent.Rules)
6573
{
6674
var userSay = $"===Input data with Before and After values===\r\n{data}\r\n\r\n===Trigger Criteria===\r\n{rule.Criteria}\r\n\r\nJust output 1 or 0 without explanation: ";

src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.TruncateMessage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace BotSharp.Core.Conversations.Services;
22

3-
public partial class ConversationService : IConversationService
3+
public partial class ConversationService
44
{
55
public async Task<bool> TruncateConversation(string conversationId, string messageId, string? newMessageId = null)
66
{

src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.UpdateBreakpoint.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace BotSharp.Core.Conversations.Services;
44

5-
public partial class ConversationService : IConversationService
5+
public partial class ConversationService
66
{
77
public async Task UpdateBreakpoint(bool resetStates = false, string? reason = null, params string[] excludedStates)
88
{

src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,4 +216,9 @@ public bool IsConversationMode()
216216
var agent = db.GetAgent(routingCtx.EntryAgentId, basicsOnly: true);
217217
return agent?.MaxMessageCount;
218218
}
219+
220+
public void SaveStates()
221+
{
222+
_state.Save();
223+
}
219224
}

src/Infrastructure/BotSharp.Core/Infrastructures/Events/RedisPublisher.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,10 @@ public async Task RemoveAsync(string channel, int count = 10)
182182
var db = _redis.GetDatabase();
183183

184184
var entries = await db.StreamRangeAsync(channel, "-", "+", count: count, messageOrder: Order.Ascending);
185-
var deletedCount = await db.StreamDeleteAsync(channel, entries.Select(x => x.Id).ToArray());
186-
_logger.LogWarning($"Deleted {deletedCount} messages from Redis stream {channel}");
185+
if (entries.Length > 0)
186+
{
187+
var deletedCount = await db.StreamDeleteAsync(channel, entries.Select(x => x.Id).ToArray());
188+
_logger.LogWarning($"Deleted {deletedCount} messages from Redis stream {channel}");
189+
}
187190
}
188191
}

0 commit comments

Comments
 (0)