File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11use anyhow:: Result ;
2+ use regex:: Regex ;
23use std:: sync:: Arc ;
34
45use async_stream:: try_stream;
@@ -20,6 +21,27 @@ use crate::providers::toolshim::{
2021} ;
2122use rmcp:: model:: Tool ;
2223
24+ async fn enhance_model_error ( error : ProviderError , provider : & Arc < dyn Provider > ) -> ProviderError {
25+ let ProviderError :: RequestFailed ( ref msg) = error else {
26+ return error;
27+ } ;
28+
29+ let re = Regex :: new ( r"(?i)\b4\d{2}\b.*model|model.*\b4\d{2}\b" ) . unwrap ( ) ;
30+ if !re. is_match ( msg) {
31+ return error;
32+ }
33+
34+ let Ok ( Some ( models) ) = provider. fetch_recommended_models ( ) . await else {
35+ return error;
36+ } ;
37+
38+ ProviderError :: RequestFailed ( format ! (
39+ "{}. Available models for this provider: {}" ,
40+ msg,
41+ models. join( ", " )
42+ ) )
43+ }
44+
2345fn coerce_value ( s : & str , schema : & Value ) -> Value {
2446 let type_str = schema. get ( "type" ) ;
2547
@@ -241,10 +263,11 @@ impl Agent {
241263 let mut stream = match stream_result {
242264 Ok ( s) => s,
243265 Err ( e) => {
266+ let enhanced_error = enhance_model_error ( e, & provider) . await ;
244267 // Return a stream that immediately yields the error
245268 // This allows the error to be caught by existing error handling in agent.rs
246269 return Ok ( Box :: pin ( try_stream ! {
247- yield Err ( e ) ?;
270+ yield Err ( enhanced_error ) ?;
248271 } ) ) ;
249272 }
250273 } ;
You can’t perform that action at this time.
0 commit comments