Skip to content

Commit 8de7e69

Browse files
author
Jicheng Lu
committed
resolve conflict
2 parents 44357bf + d02cae9 commit 8de7e69

25 files changed

Lines changed: 244 additions & 40 deletions

File tree

Directory.Packages.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
</PropertyGroup>
77
<ItemGroup>
88
<PackageVersion Include="EntityFramework" Version="6.4.4" />
9-
<PackageVersion Include="Google_GenerativeAI" Version="2.5.5" />
10-
<PackageVersion Include="Google_GenerativeAI.Live" Version="2.5.5" />
9+
<PackageVersion Include="Google_GenerativeAI" Version="2.5.8" />
10+
<PackageVersion Include="Google_GenerativeAI.Live" Version="2.5.8" />
1111
<PackageVersion Include="LLMSharp.Google.Palm" Version="1.0.2" />
1212
<PackageVersion Include="Microsoft.AspNetCore.Http.Abstractions" Version="$(AspNetCoreVersion)" />
1313
<PackageVersion Include="Microsoft.AspNetCore.StaticFiles" Version="$(AspNetCoreVersion)" />

src/Infrastructure/BotSharp.Abstraction/Realtime/Models/RealtimeHubConnection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ namespace BotSharp.Abstraction.Realtime.Models;
33
public class RealtimeHubConnection
44
{
55
public string StreamId { get; set; } = null!;
6+
public string UserSessionId {get;set;} = null!;
67
public string? LastAssistantItemId { get; set; } = null!;
78
public long LatestMediaTimestamp { get; set; }
89
public long? ResponseStartTimestamp { get; set; }

src/Infrastructure/BotSharp.Core.Crontab/Abstraction/ICrontabHook.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ public interface ICrontabHook
55
string[]? Triggers
66
=> null;
77

8+
void OnAuthenticate(CrontabItem item)
9+
{
10+
}
11+
812
Task OnCronTriggered(CrontabItem item)
913
=> Task.CompletedTask;
1014

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,12 @@ private string FormatCrontabName(string trigger, string agent)
115115
public async Task ScheduledTimeArrived(CrontabItem item)
116116
{
117117
_logger.LogDebug($"ScheduledTimeArrived {item}");
118-
118+
119119
await HookEmitter.Emit<ICrontabHook>(_services, async hook =>
120120
{
121121
if (hook.Triggers == null || hook.Triggers.Contains(item.Title))
122122
{
123+
hook.OnAuthenticate(item);
123124
await hook.OnTaskExecuting(item);
124125
await hook.OnCronTriggered(item);
125126
await hook.OnTaskExecuted(item);

src/Infrastructure/BotSharp.Core.Realtime/Hooks/RealtimeConversationHook.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ public async Task OnFunctionExecuting(RoleDialogModel message)
1717
{
1818
return;
1919
}
20+
21+
if (message.FunctionName == "response_to_user")
22+
{
23+
return;
24+
}
25+
2026
// Save states
2127
if (message.FunctionArgs != null && message.FunctionArgs.Length > 3)
2228
{
@@ -51,13 +57,22 @@ public async Task OnFunctionExecuted(RoleDialogModel message)
5157
await hub.Completer.UpdateSession(hub.HubConn);
5258
await hub.Completer.TriggerModelInference();
5359
}
60+
else if (message.FunctionName == "response_to_user")
61+
{
62+
await hub.Completer.InsertConversationItem(message);
63+
await hub.Completer.TriggerModelInference();
64+
}
5465
else
5566
{
5667
// Update session for changed states
5768
var instruction = await hub.Completer.UpdateSession(hub.HubConn);
5869
await hub.Completer.InsertConversationItem(message);
5970

60-
if (message.StopCompletion)
71+
if (string.IsNullOrEmpty(message.Content))
72+
{
73+
return;
74+
}
75+
else if (message.StopCompletion)
6176
{
6277
await hub.Completer.TriggerModelInference($"Say to user: \"{message.Content}\"");
6378
}

src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,14 @@ public async Task ConnectToModel(Func<string, Task>? responseToUser = null, Func
2828
convService.SetConversationId(_conn.ConversationId, []);
2929
var conversation = await convService.GetConversation(_conn.ConversationId);
3030

31-
var agentService = _services.GetRequiredService<IAgentService>();
32-
var agent = await agentService.LoadAgent(conversation.AgentId);
33-
_conn.CurrentAgentId = agent.Id;
34-
3531
var routing = _services.GetRequiredService<IRoutingService>();
36-
routing.Context.Push(agent.Id);
32+
var agentService = _services.GetRequiredService<IAgentService>();
33+
var agent = await agentService.GetAgent(_conn.CurrentAgentId);
3734

3835
var storage = _services.GetRequiredService<IConversationStorage>();
3936
var dialogs = convService.GetDialogHistory();
40-
if (dialogs.Count == 0)
41-
{
42-
dialogs.Add(new RoleDialogModel(AgentRole.User, "Hi"));
43-
storage.Append(_conn.ConversationId, dialogs.First());
44-
}
45-
4637
routing.Context.SetDialogs(dialogs);
47-
routing.Context.SetMessageId(_conn.ConversationId, dialogs.LastOrDefault()?.MessageId ?? Guid.NewGuid().ToString());
38+
routing.Context.SetMessageId(_conn.ConversationId, Guid.Empty.ToString());
4839

4940
var states = _services.GetRequiredService<IConversationStateService>();
5041
var settings = _services.GetRequiredService<RealtimeModelSettings>();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ namespace BotSharp.Core.Rules.Engines;
44

55
public interface IRuleEngine
66
{
7-
Task Triggered(IRuleTrigger trigger, string data, List<MessageState>? states = null);
7+
Task<IEnumerable<string>> Triggered(IRuleTrigger trigger, string data, List<MessageState>? states = null);
88
}

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

Lines changed: 5 additions & 2 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, List<MessageState>? states = null)
21+
public async Task<IEnumerable<string>> Triggered(IRuleTrigger trigger, string data, List<MessageState>? states = null)
2222
{
2323
// Pull all user defined rules
2424
var agentService = _services.GetRequiredService<IAgentService>();
@@ -36,7 +36,7 @@ public async Task Triggered(IRuleTrigger trigger, string data, List<MessageState
3636

3737
// Trigger the agents
3838
var instructService = _services.GetRequiredService<IInstructService>();
39-
39+
var newConversationIds = new List<string>();
4040

4141
foreach (var agent in preFilteredAgents)
4242
{
@@ -68,6 +68,7 @@ await convService.SendMessage(agent.Id,
6868
msg => Task.CompletedTask);
6969

7070
convService.SaveStates();
71+
newConversationIds.Add(conv.Id);
7172

7273
/*foreach (var rule in agent.Rules)
7374
{
@@ -88,5 +89,7 @@ await convService.SendMessage(agent.Id,
8889
}
8990
}*/
9091
}
92+
93+
return newConversationIds;
9194
}
9295
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@
123123
<Content Include="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\agent.json">
124124
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
125125
</Content>
126+
<Content Include="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\functions\response_to_user.json">
127+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
128+
</Content>
126129
<Content Include="data\agents\01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a\instructions\instruction.liquid">
127130
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
128131
</Content>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using BotSharp.Abstraction.Functions;
2+
using BotSharp.Abstraction.Routing.Models;
3+
4+
namespace BotSharp.Core.Routing.Functions;
5+
6+
/// <summary>
7+
/// Response to user if router doesn't need to route to agent.
8+
/// </summary>
9+
public class ResponseToUserFn : IFunctionCallback
10+
{
11+
public string Name => "response_to_user";
12+
private readonly IServiceProvider _services;
13+
private readonly IRoutingContext _context;
14+
15+
public ResponseToUserFn(IServiceProvider services, IRoutingContext context)
16+
{
17+
_services = services;
18+
_context = context;
19+
}
20+
21+
public Task<bool> Execute(RoleDialogModel message)
22+
{
23+
var args = JsonSerializer.Deserialize<RoutingArgs>(message.FunctionArgs);
24+
message.Content = args.Response;
25+
message.Handled = true;
26+
message.StopCompletion = true;
27+
return Task.FromResult(true);
28+
}
29+
}

0 commit comments

Comments
 (0)