@@ -14,11 +14,12 @@ use super::errors::ProviderError;
1414use super :: formats:: anthropic:: {
1515 create_request, get_usage, response_to_message, response_to_streaming_message,
1616} ;
17- use super :: utils:: { emit_debug_trace , get_model, map_http_error_to_provider_error} ;
17+ use super :: utils:: { get_model, map_http_error_to_provider_error} ;
1818use crate :: config:: declarative_providers:: DeclarativeProviderConfig ;
1919use crate :: conversation:: message:: Message ;
2020use crate :: model:: ModelConfig ;
2121use crate :: providers:: retry:: ProviderRetry ;
22+ use crate :: providers:: utils:: RequestLog ;
2223use rmcp:: model:: Tool ;
2324
2425pub const ANTHROPIC_DEFAULT_MODEL : & str = "claude-sonnet-4-0" ;
@@ -204,7 +205,8 @@ impl Provider for AnthropicProvider {
204205 usage. input_tokens, usage. output_tokens, usage. total_tokens) ;
205206
206207 let response_model = get_model ( & json_response) ;
207- emit_debug_trace ( & self . model , & payload, & json_response, & usage) ;
208+ let mut log = RequestLog :: start ( & self . model , & payload) ?;
209+ log. write ( & json_response, Some ( & usage) ) ?;
208210 let provider_usage = ProviderUsage :: new ( response_model, usage) ;
209211 tracing:: debug!(
210212 "🔍 Anthropic non-streaming returning ProviderUsage: {:?}" ,
@@ -258,22 +260,26 @@ impl Provider for AnthropicProvider {
258260 . insert ( "stream" . to_string ( ) , Value :: Bool ( true ) ) ;
259261
260262 let mut request = self . api_client . request ( "v1/messages" ) ;
263+ let mut log = RequestLog :: start ( & self . model , & payload) ?;
261264
262265 for ( key, value) in self . get_conditional_headers ( ) {
263266 request = request. header ( key, value) ?;
264267 }
265268
266- let response = request. response_post ( & payload) . await ?;
269+ let response = request. response_post ( & payload) . await . inspect_err ( |e| {
270+ let _ = log. error ( e) ;
271+ } ) ?;
267272 if !response. status ( ) . is_success ( ) {
268273 let status = response. status ( ) ;
269274 let error_text = response. text ( ) . await . unwrap_or_default ( ) ;
270275 let error_json = serde_json:: from_str :: < Value > ( & error_text) . ok ( ) ;
271- return Err ( map_http_error_to_provider_error ( status, error_json) ) ;
276+ let error = map_http_error_to_provider_error ( status, error_json) ;
277+ let _ = log. error ( & error) ;
278+ return Err ( error) ;
272279 }
273280
274281 let stream = response. bytes_stream ( ) . map_err ( io:: Error :: other) ;
275282
276- let model = self . model . clone ( ) ;
277283 Ok ( Box :: pin ( try_stream ! {
278284 let stream_reader = StreamReader :: new( stream) ;
279285 let framed = tokio_util:: codec:: FramedRead :: new( stream_reader, tokio_util:: codec:: LinesCodec :: new( ) ) . map_err( anyhow:: Error :: from) ;
@@ -282,7 +288,7 @@ impl Provider for AnthropicProvider {
282288 pin!( message_stream) ;
283289 while let Some ( message) = futures:: StreamExt :: next( & mut message_stream) . await {
284290 let ( message, usage) = message. map_err( |e| ProviderError :: RequestFailed ( format!( "Stream decode error: {}" , e) ) ) ?;
285- emit_debug_trace ( & model , & payload , & message, & usage. as_ref( ) . map( |f| f. usage) . unwrap_or_default ( ) ) ;
291+ log . write ( & message, usage. as_ref( ) . map( |f| f. usage) . as_ref ( ) ) ? ;
286292 yield ( message, usage) ;
287293 }
288294 } ) )
0 commit comments