Skip to content

Commit 7756b7a

Browse files
authored
Merge pull request #886 from iceljc/features/refine-agent-call-stats
add agent id as ref
2 parents 3aea08d + a3344c6 commit 7756b7a

File tree

14 files changed

+91
-50
lines changed

14 files changed

+91
-50
lines changed

src/Infrastructure/BotSharp.Abstraction/Agents/IAgentService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public interface IAgentService
1212
Task<Agent> CreateAgent(Agent agent);
1313
Task<string> RefreshAgents();
1414
Task<PagedItems<Agent>> GetAgents(AgentFilter filter);
15+
Task<List<IdName>> GetAgentOptions();
1516

1617
/// <summary>
1718
/// Load agent configurations and trigger hooks

src/Infrastructure/BotSharp.Abstraction/Files/IFileInstructService.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ namespace BotSharp.Abstraction.Files;
33
public interface IFileInstructService
44
{
55
#region Image
6-
Task<string> ReadImages(string? provider, string? model, string text, IEnumerable<InstructFileModel> images);
7-
Task<RoleDialogModel> GenerateImage(string? provider, string? model, string text);
8-
Task<RoleDialogModel> VaryImage(string? provider, string? model, InstructFileModel image);
9-
Task<RoleDialogModel> EditImage(string? provider, string? model, string text, InstructFileModel image);
10-
Task<RoleDialogModel> EditImage(string? provider, string? model, string text, InstructFileModel image, InstructFileModel mask);
6+
Task<string> ReadImages(string? provider, string? model, string text, IEnumerable<InstructFileModel> images, string? agentId = null);
7+
Task<RoleDialogModel> GenerateImage(string? provider, string? model, string text, string? agentId = null);
8+
Task<RoleDialogModel> VaryImage(string? provider, string? model, InstructFileModel image, string? agentId = null);
9+
Task<RoleDialogModel> EditImage(string? provider, string? model, string text, InstructFileModel image, string? agentId = null);
10+
Task<RoleDialogModel> EditImage(string? provider, string? model, string text, InstructFileModel image, InstructFileModel mask, string? agentId = null);
1111
#endregion
1212

1313
#region Pdf
@@ -17,7 +17,7 @@ public interface IFileInstructService
1717
/// <param name="prompt"></param>
1818
/// <param name="files">Pdf files</param>
1919
/// <returns></returns>
20-
Task<string> ReadPdf(string? provider, string? model, string? modelId, string prompt, List<InstructFileModel> files);
20+
Task<string> ReadPdf(string? provider, string? model, string? modelId, string prompt, List<InstructFileModel> files, string? agentId = null);
2121
#endregion
2222

2323
#region Audio
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
namespace BotSharp.Abstraction.Models;
2+
3+
public class IdName
4+
{
5+
[JsonPropertyName("id")]
6+
public string Id { get; set; } = default!;
7+
8+
[JsonPropertyName("name")]
9+
public string Name { get; set; } = default!;
10+
11+
public IdName(string id, string name)
12+
{
13+
Id = id;
14+
Name = name;
15+
}
16+
17+
public override string ToString()
18+
{
19+
return $"{Id}: {Name}";
20+
}
21+
}

src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.GetAgents.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using BotSharp.Abstraction.Models;
12
using BotSharp.Abstraction.Routing.Settings;
23

34
namespace BotSharp.Core.Agents.Services;
@@ -26,6 +27,15 @@ public async Task<PagedItems<Agent>> GetAgents(AgentFilter filter)
2627
};
2728
}
2829

30+
#if !DEBUG
31+
[SharpCache(10, perInstanceCache: true)]
32+
#endif
33+
public async Task<List<IdName>> GetAgentOptions()
34+
{
35+
var agents = _db.GetAgents(AgentFilter.Empty());
36+
return agents?.Select(x => new IdName(x.Id, x.Name))?.OrderBy(x => x.Name)?.ToList() ?? [];
37+
}
38+
2939
#if !DEBUG
3040
[SharpCache(10, perInstanceCache: true)]
3141
#endif

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ namespace BotSharp.Core.Files.Services;
44

55
public partial class FileInstructService
66
{
7-
public async Task<string> ReadImages(string? provider, string? model, string text, IEnumerable<InstructFileModel> images)
7+
public async Task<string> ReadImages(string? provider, string? model, string text, IEnumerable<InstructFileModel> images, string? agentId = null)
88
{
99
var completion = CompletionProvider.GetChatCompletion(_services, provider: provider ?? "openai", model: model ?? "gpt-4o", multiModal: true);
1010
var message = await completion.GetChatCompletions(new Agent()
1111
{
12-
Id = Guid.Empty.ToString(),
12+
Id = agentId ?? Guid.Empty.ToString(),
1313
}, new List<RoleDialogModel>
1414
{
1515
new RoleDialogModel(AgentRole.User, text)
@@ -20,17 +20,17 @@ public async Task<string> ReadImages(string? provider, string? model, string tex
2020
return message.Content;
2121
}
2222

23-
public async Task<RoleDialogModel> GenerateImage(string? provider, string? model, string text)
23+
public async Task<RoleDialogModel> GenerateImage(string? provider, string? model, string text, string? agentId = null)
2424
{
2525
var completion = CompletionProvider.GetImageCompletion(_services, provider: provider ?? "openai", model: model ?? "dall-e-3");
2626
var message = await completion.GetImageGeneration(new Agent()
2727
{
28-
Id = Guid.Empty.ToString(),
28+
Id = agentId ?? Guid.Empty.ToString(),
2929
}, new RoleDialogModel(AgentRole.User, text));
3030
return message;
3131
}
3232

33-
public async Task<RoleDialogModel> VaryImage(string? provider, string? model, InstructFileModel image)
33+
public async Task<RoleDialogModel> VaryImage(string? provider, string? model, InstructFileModel image, string? agentId = null)
3434
{
3535
if (string.IsNullOrWhiteSpace(image?.FileUrl) && string.IsNullOrWhiteSpace(image?.FileData))
3636
{
@@ -46,14 +46,14 @@ public async Task<RoleDialogModel> VaryImage(string? provider, string? model, In
4646
var fileName = $"{image.FileName ?? "image"}.{image.FileExtension ?? "png"}";
4747
var message = await completion.GetImageVariation(new Agent()
4848
{
49-
Id = Guid.Empty.ToString()
49+
Id = agentId ?? Guid.Empty.ToString()
5050
}, new RoleDialogModel(AgentRole.User, string.Empty), stream, fileName);
5151

5252
stream.Close();
5353
return message;
5454
}
5555

56-
public async Task<RoleDialogModel> EditImage(string? provider, string? model, string text, InstructFileModel image)
56+
public async Task<RoleDialogModel> EditImage(string? provider, string? model, string text, InstructFileModel image, string? agentId = null)
5757
{
5858
if (string.IsNullOrWhiteSpace(image?.FileUrl) && string.IsNullOrWhiteSpace(image?.FileData))
5959
{
@@ -69,14 +69,14 @@ public async Task<RoleDialogModel> EditImage(string? provider, string? model, st
6969
var fileName = $"{image.FileName ?? "image"}.{image.FileExtension ?? "png"}";
7070
var message = await completion.GetImageEdits(new Agent()
7171
{
72-
Id = Guid.Empty.ToString()
72+
Id = agentId ?? Guid.Empty.ToString()
7373
}, new RoleDialogModel(AgentRole.User, text), stream, fileName);
7474

7575
stream.Close();
7676
return message;
7777
}
7878

79-
public async Task<RoleDialogModel> EditImage(string? provider, string? model, string text, InstructFileModel image, InstructFileModel mask)
79+
public async Task<RoleDialogModel> EditImage(string? provider, string? model, string text, InstructFileModel image, InstructFileModel mask, string? agentId = null)
8080
{
8181
if ((string.IsNullOrWhiteSpace(image?.FileUrl) && string.IsNullOrWhiteSpace(image?.FileData)) ||
8282
(string.IsNullOrWhiteSpace(mask?.FileUrl) && string.IsNullOrWhiteSpace(mask?.FileData)))
@@ -100,7 +100,7 @@ public async Task<RoleDialogModel> EditImage(string? provider, string? model, st
100100
var maskName = $"{mask.FileName ?? "mask"}.{mask.FileExtension ?? "png"}";
101101
var message = await completion.GetImageEdits(new Agent()
102102
{
103-
Id = Guid.Empty.ToString()
103+
Id = agentId ?? Guid.Empty.ToString()
104104
}, new RoleDialogModel(AgentRole.User, text), imageStream, imageName, maskStream, maskName);
105105

106106
imageStream.Close();

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ namespace BotSharp.Core.Files.Services;
44

55
public partial class FileInstructService
66
{
7-
public async Task<string> ReadPdf(string? provider, string? model, string? modelId, string prompt, List<InstructFileModel> files)
7+
public async Task<string> ReadPdf(string? provider, string? model, string? modelId, string prompt, List<InstructFileModel> files, string? agentId = null)
88
{
99
var content = string.Empty;
1010

@@ -14,7 +14,6 @@ public async Task<string> ReadPdf(string? provider, string? model, string? model
1414
}
1515

1616
var guid = Guid.NewGuid().ToString();
17-
1817
var sessionDir = _fileStorage.BuildDirectory(SESSION_FOLDER, guid);
1918
DeleteIfExistDirectory(sessionDir, true);
2019

@@ -28,7 +27,7 @@ public async Task<string> ReadPdf(string? provider, string? model, string? model
2827
model: model, modelId: modelId ?? "gpt-4", multiModal: true);
2928
var message = await completion.GetChatCompletions(new Agent()
3029
{
31-
Id = Guid.Empty.ToString(),
30+
Id = agentId ?? Guid.Empty.ToString(),
3231
}, new List<RoleDialogModel>
3332
{
3433
new RoleDialogModel(AgentRole.User, prompt)

src/Infrastructure/BotSharp.Logger/BotSharpLoggerExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ public static IServiceCollection AddBotSharpLogger(this IServiceCollection servi
1313
services.AddScoped<IContentGeneratingHook, CommonContentGeneratingHook>();
1414
services.AddScoped<IContentGeneratingHook, TokenStatsConversationHook>();
1515
services.AddScoped<IContentGeneratingHook, VerboseLogHook>();
16+
services.AddScoped<IContentGeneratingHook, GlobalStatsConversationHook>();
1617
services.AddScoped<IConversationHook, RateLimitConversationHook>();
17-
services.AddScoped<IConversationHook, GlobalStatsConversationHook>();
1818
return services;
1919
}
2020
}

src/Infrastructure/BotSharp.Logger/Hooks/GlobalStatsConversationHook.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace BotSharp.Logger.Hooks;
66

7-
public class GlobalStatsConversationHook : ConversationHookBase
7+
public class GlobalStatsConversationHook : IContentGeneratingHook
88
{
99
private readonly IServiceProvider _services;
1010

@@ -14,14 +14,10 @@ public GlobalStatsConversationHook(
1414
_services = services;
1515
}
1616

17-
public override async Task OnMessageReceived(RoleDialogModel message)
18-
{
19-
UpdateAgentCall(message);
20-
}
21-
22-
public override async Task OnPostbackMessageReceived(RoleDialogModel message, PostbackMessageModel replyMsg)
17+
public async Task AfterGenerated(RoleDialogModel message, TokenStatsModel tokenStats)
2318
{
2419
UpdateAgentCall(message);
20+
await Task.CompletedTask;
2521
}
2622

2723
private void UpdateAgentCall(RoleDialogModel message)
@@ -33,7 +29,7 @@ private void UpdateAgentCall(RoleDialogModel message)
3329
{
3430
Metric = StatsMetric.AgentCall,
3531
Dimension = "agent",
36-
DimRefVal = message.CurrentAgentId,
32+
DimRefVal = message.CurrentAgentId ?? string.Empty,
3733
RecordTime = DateTime.UtcNow,
3834
IntervalType = StatsInterval.Day,
3935
Data = [

src/Infrastructure/BotSharp.OpenAPI/Controllers/AgentController.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ public async Task<bool> DeleteAgent([FromRoute] string agentId)
149149
return await _agentService.DeleteAgent(agentId);
150150
}
151151

152+
[HttpGet("/agent/options")]
153+
public async Task<List<IdName>> GetAgentOptions()
154+
{
155+
return await _agentService.GetAgentOptions();
156+
}
157+
152158
[HttpGet("/agent/utility/options")]
153159
public IEnumerable<AgentUtility> GetAgentUtilityOptions()
154160
{

0 commit comments

Comments
 (0)