@@ -10,14 +10,15 @@ pub(super) fn aionrs_engine_error_to_send_error(error: &AionrsAgentError) -> Age
1010 let detail = format ! ( "Aionrs agent error: {error}" ) ;
1111 match error {
1212 AionrsAgentError :: Provider ( provider_error) => aionrs_provider_error_to_send_error ( provider_error, detail) ,
13- AionrsAgentError :: RepeatedMalformedToolCall { .. } => provider_send_error (
13+ AionrsAgentError :: ToolCallMalformed { .. } => provider_send_error (
1414 "The model provider repeatedly returned malformed tool calls" ,
1515 AgentErrorCode :: UserLlmProviderInvalidRequest ,
1616 detail,
1717 false ,
1818 AgentErrorResolutionKind :: ChangeModel ,
1919 Some ( AgentErrorResolutionTarget :: ProviderSettings ) ,
2020 ) ,
21+ AionrsAgentError :: ToolCallFailures { .. } => tool_call_failure_send_error ( detail) ,
2122 AionrsAgentError :: ContextTooLong { .. } => provider_send_error (
2223 "The request is too large for the configured model context window" ,
2324 AgentErrorCode :: UserLlmProviderContextTooLarge ,
@@ -180,13 +181,25 @@ fn unknown_upstream_send_error(detail: String) -> AgentSendError {
180181 )
181182}
182183
184+ fn tool_call_failure_send_error ( detail : String ) -> AgentSendError {
185+ AgentSendError :: new (
186+ "The upstream Agent repeatedly failed while executing tool calls" ,
187+ AgentErrorCode :: UnknownUpstreamError ,
188+ AgentErrorOwnership :: UnknownUpstream ,
189+ Some ( detail) ,
190+ true ,
191+ true ,
192+ Some ( AgentErrorResolution :: new ( AgentErrorResolutionKind :: Retry , None ) ) ,
193+ )
194+ }
195+
183196#[ cfg( test) ]
184197mod tests {
185198 use super :: * ;
186199
187200 #[ test]
188201 fn aionrs_structured_malformed_tool_call_error_is_provider_error ( ) {
189- let error = AionrsAgentError :: RepeatedMalformedToolCall { count : 3 , limit : 3 } ;
202+ let error = AionrsAgentError :: ToolCallMalformed { count : 3 , limit : 3 } ;
190203 let send_error = aionrs_engine_error_to_send_error ( & error) ;
191204
192205 assert_eq ! (
@@ -274,7 +287,7 @@ mod tests {
274287
275288 #[ test]
276289 fn aionrs_repeated_malformed_tool_call_is_user_llm_provider_error ( ) {
277- let error = AionrsAgentError :: RepeatedMalformedToolCall { count : 3 , limit : 3 } ;
290+ let error = AionrsAgentError :: ToolCallMalformed { count : 3 , limit : 3 } ;
278291 let send_error = aionrs_engine_error_to_send_error ( & error) ;
279292
280293 assert_eq ! (
@@ -287,4 +300,20 @@ mod tests {
287300 ) ;
288301 assert_eq ! ( send_error. stream_error( ) . retryable, Some ( false ) ) ;
289302 }
303+
304+ #[ test]
305+ fn aionrs_tool_call_failures_are_unknown_upstream_error ( ) {
306+ let error = AionrsAgentError :: ToolCallFailures { count : 3 , limit : 3 } ;
307+ let send_error = aionrs_engine_error_to_send_error ( & error) ;
308+
309+ assert_eq ! (
310+ send_error. code( ) ,
311+ Some ( aionui_api_types:: AgentErrorCode :: UnknownUpstreamError )
312+ ) ;
313+ assert_eq ! (
314+ send_error. ownership( ) ,
315+ Some ( aionui_api_types:: AgentErrorOwnership :: UnknownUpstream )
316+ ) ;
317+ assert_eq ! ( send_error. stream_error( ) . retryable, Some ( true ) ) ;
318+ }
290319}
0 commit comments