Skip to content

Commit 18cb4ed

Browse files
author
Jicheng Lu
committed
add intermediate message
1 parent a7f9615 commit 18cb4ed

File tree

18 files changed

+84
-45
lines changed

18 files changed

+84
-45
lines changed

src/Infrastructure/BotSharp.Abstraction/Conversations/Enums/ChatEvent.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ public static class ChatEvent
55
public const string OnConversationInitFromClient = nameof(OnConversationInitFromClient);
66
public const string OnMessageReceivedFromClient = nameof(OnMessageReceivedFromClient);
77
public const string OnMessageReceivedFromAssistant = nameof(OnMessageReceivedFromAssistant);
8+
public const string OnIntermediateMessageReceivedFromAssistant = nameof(OnIntermediateMessageReceivedFromAssistant);
89

910
public const string OnMessageDeleted = nameof(OnMessageDeleted);
1011
public const string OnNotificationGenerated = nameof(OnNotificationGenerated);

src/Infrastructure/BotSharp.Abstraction/Files/Models/FileSelectContext.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,4 @@ public class FileSelectItem
1616

1717
[JsonPropertyName("file_source")]
1818
public string FileSource { get; set; }
19-
20-
[JsonPropertyName("file_name")]
21-
public string? FileName { get; set; }
2219
}

src/Infrastructure/BotSharp.Abstraction/MessageHub/Models/HubObserveData.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,13 @@ namespace BotSharp.Abstraction.MessageHub.Models;
22

33
public class HubObserveData<TData> : ObserveDataBase where TData : class, new()
44
{
5+
/// <summary>
6+
/// The observed data
7+
/// </summary>
58
public TData Data { get; set; } = null!;
9+
10+
/// <summary>
11+
/// Whether to save the observed data To Db
12+
/// </summary>
13+
public bool SaveDataToDb { get; set; }
614
}

src/Infrastructure/BotSharp.Core/Demo/Functions/GetWeatherFn.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,17 @@ public async Task<bool> Execute(RoleDialogModel message)
3636

3737
await Task.Delay(1500);
3838

39+
#if DEBUG
40+
var temp = RoleDialogModel.From(message, AgentRole.Assistant, $"Here is your weather in {args?.City}");
41+
messageHub.Push(new()
42+
{
43+
EventName = ChatEvent.OnIntermediateMessageReceivedFromAssistant,
44+
Data = temp,
45+
RefId = conv.ConversationId,
46+
SaveDataToDb = true
47+
});
48+
#endif
49+
3950
message.Indication = $"Still working on it... Hold on, {args?.City}";
4051
messageHub.Push(new()
4152
{

src/Infrastructure/BotSharp.Core/Files/Services/Instruct/FileInstructService.Pdf.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using BotSharp.Abstraction.Instructs.Models;
22
using BotSharp.Abstraction.Instructs;
3+
using BotSharp.Abstraction.Files.Converters;
34

45
namespace BotSharp.Core.Files.Services;
56

@@ -22,13 +23,16 @@ public async Task<string> ReadPdf(string text, List<InstructFileModel> files, In
2223
{
2324
var provider = options?.Provider ?? "openai";
2425
var pdfFiles = await DownloadAndSaveFiles(sessionDir, files);
25-
2626
var targetFiles = pdfFiles;
27-
if (provider != "google-ai")
27+
28+
var converter = GetImageConverter(options?.ImageConvertProvider);
29+
if (converter == null && provider == "openai")
2830
{
29-
targetFiles = await ConvertPdfToImages(pdfFiles, options);
31+
var fileCoreSettings = _services.GetRequiredService<FileCoreSettings>();
32+
converter = GetImageConverter(fileCoreSettings?.ImageConverter?.Provider);
3033
}
3134

35+
targetFiles = await ConvertPdfToImages(converter, pdfFiles);
3236
if (targetFiles.IsNullOrEmpty())
3337
{
3438
return content;
@@ -115,15 +119,12 @@ private async Task<IEnumerable<string>> DownloadAndSaveFiles(string dir, List<In
115119
return locs;
116120
}
117121

118-
private async Task<IEnumerable<string>> ConvertPdfToImages(IEnumerable<string> files, InstructOptions? options = null)
122+
private async Task<IEnumerable<string>> ConvertPdfToImages(IImageConverter converter, IEnumerable<string> files)
119123
{
120124
var images = new List<string>();
121-
var settings = _services.GetRequiredService<FileCoreSettings>();
122-
123-
var converter = GetImageConverter(options?.ImageConvertProvider);
124125
if (converter == null || files.IsNullOrEmpty())
125126
{
126-
return images;
127+
return files;
127128
}
128129

129130
foreach (var file in files)

src/Infrastructure/BotSharp.Core/Files/Services/Instruct/FileInstructService.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,7 @@ private string BuildFileName(string? name, string? extension, string defaultName
9191

9292
private IImageConverter? GetImageConverter(string? provider)
9393
{
94-
var settings = _services.GetRequiredService<FileCoreSettings>();
95-
var convertProvider = provider ?? settings?.ImageConverter?.Provider;
96-
var converter = _services.GetServices<IImageConverter>().FirstOrDefault(x => x.Provider == convertProvider);
94+
var converter = _services.GetServices<IImageConverter>().FirstOrDefault(x => x.Provider == provider);
9795
return converter;
9896
}
9997
#endregion

src/Infrastructure/BotSharp.Core/Instructs/Functions/ExecuteTemplateFn.cs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,6 @@ private async Task<string> GetAiResponse(Agent agent, string templateName)
6161
new(AgentRole.User, text)
6262
});
6363

64-
await HookEmitter.Emit<IInstructHook>(_services, async hook =>
65-
await hook.OnResponseGenerated(new InstructResponseModel
66-
{
67-
AgentId = agent.Id,
68-
TemplateName = templateName,
69-
Provider = completion.Provider,
70-
Model = completion.Model,
71-
UserMessage = text,
72-
CompletionText = response.Content
73-
}), agent.Id);
74-
7564
return response.Content;
7665
}
7766
catch (Exception ex)

src/Infrastructure/BotSharp.Core/data/agents/01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a/instructions/instruction.liquid

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
You're {{router.name}} ({{router.description}}).
2-
You can understand messages sent by users in different languages, and route the request to appropriate agent.
2+
You can route the request to appropriate agent. Default language is English(US).
33
Follow these steps to handle user request:
44
1. Read the [CONVERSATION] content.
55
2. Determine which agent is suitable to handle this conversation. Try to minimize the routing of human service.

src/Plugins/BotSharp.Plugin.ChatHub/Helpers/EventEmitter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33

44
namespace BotSharp.Plugin.ChatHub.Helpers;
55

6-
public class EventEmitter
6+
internal class EventEmitter
77
{
8-
public static async Task SendChatEvent<T>(
8+
internal static async Task SendChatEvent<T>(
99
IServiceProvider services,
1010
ILogger logger,
1111
string @event,

src/Plugins/BotSharp.Plugin.ChatHub/Observers/ChatHubObserver.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,32 @@ public override void OnNext(HubObserveData<RoleDialogModel> value)
121121
_logger.LogCritical($"Receiving {value.EventName} ({value.Data.Indication}) in {nameof(ChatHubObserver)} - {conv.ConversationId}");
122122
#endif
123123
break;
124+
case ChatEvent.OnIntermediateMessageReceivedFromAssistant:
125+
if (!AllowSendingMessage()) return;
126+
127+
model = new ChatResponseDto
128+
{
129+
ConversationId = conv.ConversationId,
130+
MessageId = message.MessageId,
131+
MessageLabel = message.MessageLabel,
132+
Text = !string.IsNullOrEmpty(message.SecondaryContent) ? message.SecondaryContent : message.Content,
133+
Function = message.FunctionName,
134+
RichContent = message.SecondaryRichContent ?? message.RichContent,
135+
Data = message.Data,
136+
Sender = new()
137+
{
138+
FirstName = "AI",
139+
LastName = "Assistant",
140+
Role = AgentRole.Assistant
141+
}
142+
};
143+
144+
if (value.SaveDataToDb)
145+
{
146+
var storage = _services.GetRequiredService<IConversationStorage>();
147+
storage.Append(conv.ConversationId, message);
148+
}
149+
break;
124150
}
125151

126152
SendEvent(value.EventName, model.ConversationId, model);

0 commit comments

Comments
 (0)