forked from SciSharp/BotSharp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAgentController.cs
More file actions
113 lines (97 loc) · 3.49 KB
/
AgentController.cs
File metadata and controls
113 lines (97 loc) · 3.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using BotSharp.Abstraction.Agents.Models;
namespace BotSharp.OpenAPI.Controllers;
[Authorize]
[ApiController]
public class AgentController : ControllerBase
{
private readonly IAgentService _agentService;
private readonly IServiceProvider _services;
public AgentController(IAgentService agentService, IServiceProvider services)
{
_agentService = agentService;
_services = services;
}
[HttpGet("/agent/settings")]
public AgentSettings GetSettings()
{
var settings = _services.GetRequiredService<AgentSettings>();
return settings;
}
[HttpGet("/agent/{id}")]
public async Task<AgentViewModel> GetAgent([FromRoute] string id)
{
var agents = await GetAgents(new AgentFilter
{
AgentIds = new List<string> { id }
});
var targetAgent = agents.Items.FirstOrDefault();
var redirectAgentIds = targetAgent.RoutingRules
.Where(x => !string.IsNullOrEmpty(x.RedirectTo))
.Select(x => x.RedirectTo).ToList();
var redirectAgents = await _agentService.GetAgents(new AgentFilter
{
AgentIds = redirectAgentIds
});
foreach (var rule in targetAgent.RoutingRules)
{
var found = redirectAgents.Items.FirstOrDefault(x => x.Id == rule.RedirectTo);
if (found == null) continue;
rule.RedirectToAgentName = found.Name;
}
return targetAgent;
}
[HttpGet("/agents")]
public async Task<PagedItems<AgentViewModel>> GetAgents([FromQuery] AgentFilter filter)
{
var agentSetting = _services.GetRequiredService<AgentSettings>();
var pagedAgents = await _agentService.GetAgents(filter);
// prerender agent
var items = new List<Agent>();
foreach (var agent in pagedAgents.Items)
{
var renderedAgent = await _agentService.LoadAgent(agent.Id);
items.Add(renderedAgent);
}
// Set IsHost
var agents = items.Select(x => AgentViewModel.FromAgent(x)).ToList();
foreach(var agent in agents)
{
agent.IsHost = agentSetting.HostAgentId == agent.Id;
}
return new PagedItems<AgentViewModel>
{
Items = agents,
Count = pagedAgents.Count
};
}
[HttpPost("/agent")]
public async Task<AgentViewModel> CreateAgent(AgentCreationModel agent)
{
var createdAgent = await _agentService.CreateAgent(agent.ToAgent());
return AgentViewModel.FromAgent(createdAgent);
}
[HttpPost("/refresh-agents")]
public async Task RefreshAgents()
{
await _agentService.RefreshAgents();
}
[HttpPut("/agent/file/{agentId}")]
public async Task UpdateAgentFromFile([FromRoute] string agentId)
{
await _agentService.UpdateAgentFromFile(agentId);
}
[HttpPut("/agent/{agentId}")]
public async Task UpdateAgent([FromRoute] string agentId, [FromBody] AgentUpdateModel agent)
{
var model = agent.ToAgent();
model.Id = agentId;
await _agentService.UpdateAgent(model, AgentField.All);
}
[HttpPatch("/agent/{agentId}/{field}")]
public async Task PatchAgentByField([FromRoute] string agentId, AgentField field, [FromBody] AgentUpdateModel agent)
{
var model = agent.ToAgent();
model.Id = agentId;
await _agentService.UpdateAgent(model, field);
}
}