@@ -28,7 +28,12 @@ public async Task<bool> Execute(RoleDialogModel message)
28
28
}
29
29
else
30
30
{
31
- if ( ! HasMissingRequiredField ( message , out var agentId ) )
31
+ var missingfield = HasMissingRequiredField ( message , out var agentId ) ;
32
+ if ( missingfield && message . CurrentAgentId != agentId )
33
+ {
34
+ message . CurrentAgentId = agentId ;
35
+ }
36
+ else
32
37
{
33
38
message . CurrentAgentId = agentId ;
34
39
message . ExecutionResult = $ "Routed to { args . AgentName } ";
@@ -47,21 +52,21 @@ private bool HasMissingRequiredField(RoleDialogModel message, out string agentId
47
52
var args = JsonSerializer . Deserialize < RoutingArgs > ( message . FunctionArgs ) ;
48
53
49
54
var routes = GetRoutingTable ( ) ;
50
- var agent = routes . FirstOrDefault ( x => x . AgentName . ToLower ( ) == args . AgentName . ToLower ( ) ) ;
55
+ var routingRule = routes . FirstOrDefault ( x => x . AgentName . ToLower ( ) == args . AgentName . ToLower ( ) ) ;
51
56
52
- if ( agent == null )
57
+ if ( routingRule == null )
53
58
{
54
59
agentId = message . CurrentAgentId ;
55
60
message . ExecutionResult = $ "Can't find agent { args . AgentName } ";
56
61
return true ;
57
62
}
58
63
59
- agentId = agent . AgentId ;
64
+ agentId = routingRule . AgentId ;
60
65
61
66
// Check required fields
62
67
var jo = JsonSerializer . Deserialize < object > ( message . FunctionArgs ) ;
63
68
bool hasMissingField = false ;
64
- foreach ( var field in agent . RequiredFields )
69
+ foreach ( var field in routingRule . RequiredFields )
65
70
{
66
71
if ( jo is JsonElement root )
67
72
{
@@ -71,9 +76,21 @@ private bool HasMissingRequiredField(RoleDialogModel message, out string agentId
71
76
hasMissingField = true ;
72
77
break ;
73
78
}
79
+ else if ( root . EnumerateObject ( ) . Any ( x => x . Name == field ) &&
80
+ string . IsNullOrEmpty ( root . EnumerateObject ( ) . FirstOrDefault ( x => x . Name == field ) . Value . ToString ( ) ) )
81
+ {
82
+ message . ExecutionResult = $ "missing { field } .";
83
+ hasMissingField = true ;
84
+ break ;
85
+ }
74
86
}
75
87
}
76
88
89
+ if ( hasMissingField && ! string . IsNullOrEmpty ( routingRule . RedirectTo ) )
90
+ {
91
+ agentId = routingRule . RedirectTo ;
92
+ }
93
+
77
94
return hasMissingField ;
78
95
}
79
96
0 commit comments