@@ -28,7 +28,12 @@ public async Task<bool> Execute(RoleDialogModel message)
2828 }
2929 else
3030 {
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
3237 {
3338 message . CurrentAgentId = agentId ;
3439 message . ExecutionResult = $ "Routed to { args . AgentName } ";
@@ -47,21 +52,21 @@ private bool HasMissingRequiredField(RoleDialogModel message, out string agentId
4752 var args = JsonSerializer . Deserialize < RoutingArgs > ( message . FunctionArgs ) ;
4853
4954 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 ( ) ) ;
5156
52- if ( agent == null )
57+ if ( routingRule == null )
5358 {
5459 agentId = message . CurrentAgentId ;
5560 message . ExecutionResult = $ "Can't find agent { args . AgentName } ";
5661 return true ;
5762 }
5863
59- agentId = agent . AgentId ;
64+ agentId = routingRule . AgentId ;
6065
6166 // Check required fields
6267 var jo = JsonSerializer . Deserialize < object > ( message . FunctionArgs ) ;
6368 bool hasMissingField = false ;
64- foreach ( var field in agent . RequiredFields )
69+ foreach ( var field in routingRule . RequiredFields )
6570 {
6671 if ( jo is JsonElement root )
6772 {
@@ -71,9 +76,21 @@ private bool HasMissingRequiredField(RoleDialogModel message, out string agentId
7176 hasMissingField = true ;
7277 break ;
7378 }
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+ }
7486 }
7587 }
7688
89+ if ( hasMissingField && ! string . IsNullOrEmpty ( routingRule . RedirectTo ) )
90+ {
91+ agentId = routingRule . RedirectTo ;
92+ }
93+
7794 return hasMissingField ;
7895 }
7996
0 commit comments