Skip to content

Commit b8a550c

Browse files
add agent level knowledge base
1 parent db08be2 commit b8a550c

File tree

10 files changed

+104
-0
lines changed

10 files changed

+104
-0
lines changed

src/Infrastructure/BotSharp.Abstraction/Agents/Enums/AgentField.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public enum AgentField
1818
Sample,
1919
LlmConfig,
2020
Utility,
21+
KnowledgeBase,
2122
MaxMessageCount
2223
}
2324

src/Infrastructure/BotSharp.Abstraction/Agents/Models/Agent.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ public class Agent
9999
/// </summary>
100100
public List<AgentUtility> Utilities { get; set; } = new();
101101

102+
/// <summary>
103+
/// Agent knowledge bases
104+
/// </summary>
105+
public List<AgentKnowledgeBase> KnowledgeBases { get; set; } = [];
106+
102107
/// <summary>
103108
/// Inherit from agent
104109
/// </summary>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
namespace BotSharp.Abstraction.Agents.Models;
2+
3+
public class AgentKnowledgeBase
4+
{
5+
public string? Name { get; set; }
6+
public bool Disabled { get; set; }
7+
8+
public AgentKnowledgeBase()
9+
{
10+
11+
}
12+
13+
public AgentKnowledgeBase(string name, bool enabled)
14+
{
15+
Name = name;
16+
Disabled = enabled;
17+
}
18+
19+
public override string ToString()
20+
{
21+
return Name ?? string.Empty;
22+
}
23+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public async Task UpdateAgent(Agent agent, AgentField updateField)
3939
record.Responses = agent.Responses ?? [];
4040
record.Samples = agent.Samples ?? [];
4141
record.Utilities = agent.Utilities ?? [];
42+
record.KnowledgeBases = agent.KnowledgeBases ?? [];
4243
if (agent.LlmConfig != null && !agent.LlmConfig.IsInherit)
4344
{
4445
record.LlmConfig = agent.LlmConfig;

src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Agent.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ public void UpdateAgent(Agent agent, AgentField field)
5757
case AgentField.Utility:
5858
UpdateAgentUtilities(agent.Id, agent.MergeUtility, agent.Utilities);
5959
break;
60+
case AgentField.KnowledgeBase:
61+
UpdateAgentKnowledgeBases(agent.Id, agent.KnowledgeBases);
62+
break;
6063
case AgentField.MaxMessageCount:
6164
UpdateAgentMaxMessageCount(agent.Id, agent.MaxMessageCount);
6265
break;
@@ -168,6 +171,19 @@ private void UpdateAgentUtilities(string agentId, bool mergeUtility, List<AgentU
168171
File.WriteAllText(agentFile, json);
169172
}
170173

174+
private void UpdateAgentKnowledgeBases(string agentId, List<AgentKnowledgeBase> knowledgeBases)
175+
{
176+
if (knowledgeBases == null) return;
177+
178+
var (agent, agentFile) = GetAgentFromFile(agentId);
179+
if (agent == null) return;
180+
181+
agent.KnowledgeBases = knowledgeBases;
182+
agent.UpdatedDateTime = DateTime.UtcNow;
183+
var json = JsonSerializer.Serialize(agent, _options);
184+
File.WriteAllText(agentFile, json);
185+
}
186+
171187
private void UpdateAgentRoutingRules(string agentId, List<RoutingRule> rules)
172188
{
173189
if (rules == null) return;
@@ -310,6 +326,7 @@ private void UpdateAgentAllFields(Agent inputAgent)
310326
agent.Type = inputAgent.Type;
311327
agent.Profiles = inputAgent.Profiles;
312328
agent.Utilities = inputAgent.Utilities;
329+
agent.KnowledgeBases = inputAgent.KnowledgeBases;
313330
agent.RoutingRules = inputAgent.RoutingRules;
314331
agent.LlmConfig = inputAgent.LlmConfig;
315332
agent.MaxMessageCount = inputAgent.MaxMessageCount;

src/Infrastructure/BotSharp.OpenAPI/ViewModels/Agents/AgentUpdateModel.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ public class AgentUpdateModel
3939
/// </summary>
4040
public List<AgentUtility>? Utilities { get; set; }
4141

42+
/// <summary>
43+
/// knowledge bases
44+
/// </summary>
45+
///
46+
[JsonPropertyName("knowledge_bases")]
47+
public List<AgentKnowledgeBase>? KnowledgeBases { get; set; }
48+
4249
/// <summary>
4350
/// Functions
4451
/// </summary>
@@ -90,6 +97,7 @@ public Agent ToAgent()
9097
Functions = Functions ?? new List<FunctionDef>(),
9198
Responses = Responses ?? new List<AgentResponse>(),
9299
Utilities = Utilities ?? new List<AgentUtility>(),
100+
KnowledgeBases = KnowledgeBases ?? [],
93101
LlmConfig = LlmConfig
94102
};
95103

src/Infrastructure/BotSharp.OpenAPI/ViewModels/Agents/AgentViewModel.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ public class AgentViewModel
2525
public bool MergeUtility { get; set; }
2626
public List<AgentUtility> Utilities { get; set; }
2727

28+
[JsonPropertyName("knowledge_bases")]
29+
public List<AgentKnowledgeBase> KnowledgeBases { get; set; }
30+
2831
[JsonPropertyName("is_public")]
2932
public bool IsPublic { get; set; }
3033

@@ -75,6 +78,7 @@ public static AgentViewModel FromAgent(Agent agent)
7578
Responses = agent.Responses,
7679
Samples = agent.Samples,
7780
Utilities = agent.Utilities,
81+
KnowledgeBases = agent.KnowledgeBases,
7882
IsPublic= agent.IsPublic,
7983
Disabled = agent.Disabled,
8084
MergeUtility = agent.MergeUtility,

src/Plugins/BotSharp.Plugin.MongoStorage/Collections/AgentDocument.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class AgentDocument : MongoBase
1818
public List<AgentResponseMongoElement> Responses { get; set; }
1919
public List<string> Samples { get; set; }
2020
public List<AgentUtilityMongoElement> Utilities { get; set; }
21+
public List<AgentKnowledgeBaseMongoElement> KnowledgeBases { get; set; }
2122
public List<string> Profiles { get; set; }
2223
public List<RoutingRuleMongoElement> RoutingRules { get; set; }
2324
public AgentLlmConfigMongoElement? LlmConfig { get; set; }
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using BotSharp.Abstraction.Agents.Models;
2+
3+
namespace BotSharp.Plugin.MongoStorage.Models;
4+
5+
public class AgentKnowledgeBaseMongoElement
6+
{
7+
public string Name { get; set; }
8+
public bool Disabled { get; set; }
9+
public static AgentKnowledgeBaseMongoElement ToMongoElement(AgentKnowledgeBase knowledgeBase)
10+
{
11+
return new AgentKnowledgeBaseMongoElement
12+
{
13+
Name = knowledgeBase.Name ?? string.Empty,
14+
Disabled = knowledgeBase.Disabled,
15+
};
16+
}
17+
18+
public static AgentKnowledgeBase ToDomainElement(AgentKnowledgeBaseMongoElement knowledgeBase)
19+
{
20+
return new AgentKnowledgeBase
21+
{
22+
Name = knowledgeBase.Name,
23+
Disabled = knowledgeBase.Disabled
24+
};
25+
}
26+
}

src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Agent.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ public void UpdateAgent(Agent agent, AgentField field)
5858
case AgentField.Utility:
5959
UpdateAgentUtilities(agent.Id, agent.MergeUtility, agent.Utilities);
6060
break;
61+
case AgentField.KnowledgeBase:
62+
UpdateAgentKnowledgeBases(agent.Id, agent.KnowledgeBases);
63+
break;
6164
case AgentField.MaxMessageCount:
6265
UpdateAgentMaxMessageCount(agent.Id, agent.MaxMessageCount);
6366
break;
@@ -239,6 +242,20 @@ private void UpdateAgentUtilities(string agentId, bool mergeUtility, List<AgentU
239242
_dc.Agents.UpdateOne(filter, update);
240243
}
241244

245+
private void UpdateAgentKnowledgeBases(string agentId, List<AgentKnowledgeBase> knowledgeBases)
246+
{
247+
if (knowledgeBases == null) return;
248+
249+
var elements = knowledgeBases?.Select(x => AgentKnowledgeBaseMongoElement.ToMongoElement(x))?.ToList() ?? [];
250+
251+
var filter = Builders<AgentDocument>.Filter.Eq(x => x.Id, agentId);
252+
var update = Builders<AgentDocument>.Update
253+
.Set(x => x.KnowledgeBases, elements)
254+
.Set(x => x.UpdatedTime, DateTime.UtcNow);
255+
256+
_dc.Agents.UpdateOne(filter, update);
257+
}
258+
242259
private void UpdateAgentLlmConfig(string agentId, AgentLlmConfig? config)
243260
{
244261
var llmConfig = AgentLlmConfigMongoElement.ToMongoElement(config);
@@ -279,6 +296,7 @@ private void UpdateAgentAllFields(Agent agent)
279296
.Set(x => x.Responses, agent.Responses.Select(r => AgentResponseMongoElement.ToMongoElement(r)).ToList())
280297
.Set(x => x.Samples, agent.Samples)
281298
.Set(x => x.Utilities, agent.Utilities.Select(u => AgentUtilityMongoElement.ToMongoElement(u)).ToList())
299+
.Set(x => x.KnowledgeBases, agent.KnowledgeBases.Select(u => AgentKnowledgeBaseMongoElement.ToMongoElement(u)).ToList())
282300
.Set(x => x.LlmConfig, AgentLlmConfigMongoElement.ToMongoElement(agent.LlmConfig))
283301
.Set(x => x.IsPublic, agent.IsPublic)
284302
.Set(x => x.UpdatedTime, DateTime.UtcNow);

0 commit comments

Comments
 (0)