Skip to content

Commit 9ce8159

Browse files
committed
wip
1 parent 4022a0c commit 9ce8159

3 files changed

Lines changed: 23 additions & 52 deletions

File tree

crates/chat-cli/src/cli/chat/mod.rs

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use std::collections::{
2424
HashSet,
2525
VecDeque,
2626
};
27+
use std::error::Error;
2728
use std::io::{
2829
IsTerminal,
2930
Read,
@@ -40,6 +41,7 @@ use std::{
4041
fs,
4142
};
4243

44+
use color_eyre::Section;
4345
use command::{
4446
Command,
4547
PromptsSubcommand,
@@ -66,9 +68,7 @@ use crossterm::{
6668
terminal,
6769
};
6870
use eyre::{
69-
ErrReport,
70-
Result,
71-
bail,
71+
bail, Chain, ErrReport, Result
7272
};
7373
use 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
}

crates/chat-cli/src/telemetry/mod.rs

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -198,32 +198,6 @@ impl TelemetryThread {
198198
.send(Event::new(EventType::CliSubcommandExecuted { subcommand }))?)
199199
}
200200

201-
pub fn send_chat_start(
202-
&self,
203-
conversation_id: String,
204-
credential_start_url: Option<String>,
205-
sso_region: Option<String>,
206-
) -> Result<(), TelemetryError> {
207-
Ok(self.send(Event::new(EventType::ChatStart {
208-
conversation_id,
209-
credential_start_url,
210-
sso_region,
211-
}))?)
212-
}
213-
214-
pub fn send_chat_end(
215-
&self,
216-
conversation_id: String,
217-
credential_start_url: Option<String>,
218-
sso_region: Option<String>,
219-
) -> Result<(), TelemetryError> {
220-
Ok(self.send(Event::new(EventType::ChatEnd {
221-
conversation_id,
222-
credential_start_url,
223-
sso_region,
224-
}))?)
225-
}
226-
227201
pub fn send_chat_added_message(
228202
&self,
229203
conversation_id: String,

crates/chat-cli/telemetry_definitions.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@
156156
{ "type": "ssoRegion", "required": false },
157157
{ "type": "codewhispererterminal_inCloudshell" },
158158
{ "type": "codewhispererterminal_contextFileLength", "required": false },
159+
{ "type": "requestId" },
159160
{ "type": "result", "required": true },
160161
{ "type": "reason", "required": false }
161162
]

0 commit comments

Comments
 (0)