@@ -24,6 +24,7 @@ use std::collections::{
2424 HashSet ,
2525 VecDeque ,
2626} ;
27+ use std:: error:: Error ;
2728use std:: io:: {
2829 IsTerminal ,
2930 Read ,
@@ -40,6 +41,7 @@ use std::{
4041 fs,
4142} ;
4243
44+ use color_eyre:: Section ;
4345use command:: {
4446 Command ,
4547 PromptsSubcommand ,
@@ -66,9 +68,7 @@ use crossterm::{
6668 terminal,
6769} ;
6870use eyre:: {
69- ErrReport ,
70- Result ,
71- bail,
71+ bail, Chain , ErrReport , Result
7272} ;
7373use hooks:: {
7474 Hook ,
@@ -815,11 +815,6 @@ impl ChatContext {
815815 } ) ;
816816 }
817817
818- let ( start_url, region) = get_start_url_and_region ( database) . await ;
819- if let Err ( e) = telemetry. send_chat_start ( self . conversation_state . conversation_id ( ) . to_string ( ) , start_url, region) {
820- error ! ( ?e, "failed to send chat start event" ) ;
821- }
822-
823818 loop {
824819 debug_assert ! ( next_state. is_some( ) ) ;
825820 let chat_state = next_state. take ( ) . unwrap_or_default ( ) ;
@@ -882,18 +877,12 @@ impl ChatContext {
882877 ChatState :: HandleResponseStream ( response) => tokio:: select! {
883878 res = self . handle_response( database, telemetry, response) => res,
884879 Ok ( _) = ctrl_c_stream => {
885- self . send_chat_telem( telemetry , database , TelemetryResult :: Cancelled , None ) . await ;
880+ self . send_chat_telem( database , telemetry , TelemetryResult :: Cancelled , None ) . await ;
886881
887882 Err ( ChatError :: Interrupted { tool_uses: None } )
888883 }
889884 } ,
890- ChatState :: Exit => {
891- let ( start_url, region) = get_start_url_and_region ( database) . await ;
892- if let Err ( e) = telemetry. send_chat_end ( self . conversation_state . conversation_id ( ) . to_string ( ) , start_url, region) {
893- error ! ( ?e, "failed to send chat start event" ) ;
894- }
895- return Ok ( ( ) )
896- } ,
885+ ChatState :: Exit => return Ok ( ( ) ) ,
897886 } ;
898887
899888 // if emit_interrputed
@@ -915,7 +904,14 @@ impl ChatContext {
915904 match result {
916905 Ok ( state) => Ok ( state) ,
917906 Err ( e) => {
918- self . send_error_telem ( telemetry, database, TelemetryResult :: Failed , Some ( e. to_string ( ) ) ) . await ;
907+ // Telemetry
908+ let err_chain = Chain :: new ( & e) ;
909+ let err_string = if err_chain. len ( ) > 1 {
910+ format ! ( "'{}' caused by: {}" , e, err_chain. last( ) . map( |e| e. to_string( ) ) . unwrap_or( "UNKNOWN" . to_string( ) ) )
911+ } else {
912+ e. to_string ( )
913+ } ;
914+ self . send_error_telem ( database, telemetry, err_string) . await ;
919915
920916 macro_rules! print_err {
921917 ( $prepend_msg: expr, $err: expr) => { {
@@ -1108,7 +1104,7 @@ impl ChatContext {
11081104 let response = match response {
11091105 Ok ( res) => res,
11101106 Err ( e) => {
1111- self . send_chat_telem ( telemetry , database , TelemetryResult :: Failed , Some ( e. to_string ( ) ) ) . await ;
1107+ self . send_chat_telem ( database , telemetry , TelemetryResult :: Failed , Some ( e. to_string ( ) ) ) . await ;
11121108 match e {
11131109 crate :: api_client:: ApiClientError :: ContextWindowOverflow => {
11141110 self . conversation_state . clear ( true ) ;
@@ -1147,7 +1143,7 @@ impl ChatContext {
11471143 if let Some ( request_id) = & err. request_id {
11481144 self . failed_request_ids . push ( request_id. clone ( ) ) ;
11491145 } ;
1150- self . send_chat_telem ( telemetry , database , TelemetryResult :: Failed , Some ( err. to_string ( ) ) ) . await ;
1146+ self . send_chat_telem ( database , telemetry , TelemetryResult :: Failed , Some ( err. to_string ( ) ) ) . await ;
11511147 return Err ( err. into ( ) ) ;
11521148 } ,
11531149 }
@@ -1163,7 +1159,7 @@ impl ChatContext {
11631159 cursor:: Show
11641160 ) ?;
11651161 }
1166- self . send_chat_telem ( telemetry , database , TelemetryResult :: Succeeded , None ) . await ;
1162+ self . send_chat_telem ( database , telemetry , TelemetryResult :: Succeeded , None ) . await ;
11671163
11681164 self . conversation_state . replace_history_with_summary ( summary. clone ( ) ) ;
11691165
@@ -3268,7 +3264,7 @@ impl ChatContext {
32683264 self . failed_request_ids . push ( request_id. clone ( ) ) ;
32693265 } ;
32703266
3271- self . send_chat_telem ( telemetry , database , TelemetryResult :: Failed , Some ( recv_error. to_string ( ) ) ) . await ;
3267+ self . send_chat_telem ( database , telemetry , TelemetryResult :: Failed , Some ( recv_error. to_string ( ) ) ) . await ;
32723268
32733269 match recv_error. source {
32743270 RecvErrorKind :: StreamTimeout { source, duration } => {
@@ -3404,7 +3400,7 @@ impl ChatContext {
34043400 }
34053401
34063402 if ended {
3407- self . send_chat_telem ( telemetry , database , TelemetryResult :: Succeeded , None ) . await ;
3403+ self . send_chat_telem ( database , telemetry , TelemetryResult :: Succeeded , None ) . await ;
34083404
34093405 if self . interactive
34103406 && database
@@ -3693,7 +3689,7 @@ impl ChatContext {
36933689 Ok ( ( ) )
36943690 }
36953691
3696- async fn send_chat_telem ( & self , telemetry : & TelemetryThread , database : & mut Database , result : TelemetryResult , reason : Option < String > ) {
3692+ async fn send_chat_telem ( & self , database : & mut Database , telemetry : & TelemetryThread , result : TelemetryResult , reason : Option < String > ) {
36973693 if let Some ( message_id) = self . conversation_state . message_id ( ) {
36983694 let ( start_url, region) = get_start_url_and_region ( database) . await ;
36993695
@@ -3712,7 +3708,7 @@ impl ChatContext {
37123708 }
37133709
37143710
3715- async fn send_error_telem ( & self , telemetry : & TelemetryThread , database : & mut Database , result : TelemetryResult , reason : Option < String > ) {
3711+ async fn send_error_telem ( & self , database : & mut Database , telemetry : & TelemetryThread , reason : String ) {
37163712 let ( start_url, region) = get_start_url_and_region ( database) . await ;
37173713
37183714 telemetry
@@ -3721,8 +3717,8 @@ impl ChatContext {
37213717 self . conversation_state . context_message_length ( ) ,
37223718 start_url,
37233719 region,
3724- result ,
3725- reason
3720+ TelemetryResult :: Failed ,
3721+ Some ( reason)
37263722 )
37273723 . ok ( ) ;
37283724 }
0 commit comments