Skip to content

Commit 69d0c9a

Browse files
authored
Add telemetry support for agent contribution tracking (#2699)
- Refactor send_cw_telemetry to handle multiple event types - Add AgentContribution event handling that sends ChatInteractWithMessageEvent - Track accepted line count from agent contributions as AgenticCodeAccepted interaction type
1 parent 54d6bb5 commit 69d0c9a

File tree

1 file changed

+90
-48
lines changed
  • crates/chat-cli/src/telemetry

1 file changed

+90
-48
lines changed

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

Lines changed: 90 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ use std::str::FromStr;
1515

1616
use amzn_codewhisperer_client::types::{
1717
ChatAddMessageEvent,
18+
ChatInteractWithMessageEvent,
19+
ChatMessageInteractionType,
1820
IdeCategory,
1921
OperatingSystem,
2022
TelemetryEvent,
@@ -574,55 +576,95 @@ impl TelemetryClient {
574576
return;
575577
};
576578

577-
if let EventType::ChatAddedMessage {
578-
conversation_id,
579-
data:
580-
ChatAddedMessageParams {
581-
message_id,
582-
model,
583-
time_to_first_chunk_ms,
584-
time_between_chunks_ms,
585-
assistant_response_length,
586-
..
587-
},
588-
..
589-
} = &event.ty
590-
{
591-
let user_context = self.user_context().unwrap();
592-
// Short-Term fix for Validation errors -
593-
// chatAddMessageEvent.timeBetweenChunks' : Member must have length less than or equal to 100
594-
let time_between_chunks_truncated = time_between_chunks_ms
595-
.as_ref()
596-
.map(|chunks| chunks.iter().take(100).cloned().collect());
597-
598-
let chat_add_message_event = match ChatAddMessageEvent::builder()
599-
.conversation_id(conversation_id)
600-
.message_id(message_id.clone().unwrap_or("not_set".to_string()))
601-
.set_time_to_first_chunk_milliseconds(*time_to_first_chunk_ms)
602-
.set_time_between_chunks(time_between_chunks_truncated)
603-
.set_response_length(*assistant_response_length)
604-
.build()
605-
{
606-
Ok(event) => event,
607-
Err(err) => {
579+
match &event.ty {
580+
EventType::ChatAddedMessage {
581+
conversation_id,
582+
data:
583+
ChatAddedMessageParams {
584+
message_id,
585+
model,
586+
time_to_first_chunk_ms,
587+
time_between_chunks_ms,
588+
assistant_response_length,
589+
..
590+
},
591+
..
592+
} => {
593+
let user_context = self.user_context().unwrap();
594+
// Short-Term fix for Validation errors -
595+
// chatAddMessageEvent.timeBetweenChunks' : Member must have length less than or equal to 100
596+
let time_between_chunks_truncated = time_between_chunks_ms
597+
.as_ref()
598+
.map(|chunks| chunks.iter().take(100).cloned().collect());
599+
600+
let chat_add_message_event = match ChatAddMessageEvent::builder()
601+
.conversation_id(conversation_id)
602+
.message_id(message_id.clone().unwrap_or("not_set".to_string()))
603+
.set_time_to_first_chunk_milliseconds(*time_to_first_chunk_ms)
604+
.set_time_between_chunks(time_between_chunks_truncated)
605+
.set_response_length(*assistant_response_length)
606+
.build()
607+
{
608+
Ok(event) => event,
609+
Err(err) => {
610+
error!(err =% DisplayErrorContext(err), "Failed to send cw telemetry event");
611+
return;
612+
},
613+
};
614+
615+
let event = TelemetryEvent::ChatAddMessageEvent(chat_add_message_event);
616+
debug!(
617+
?event,
618+
?user_context,
619+
telemetry_enabled = self.telemetry_enabled,
620+
"Sending cw telemetry event"
621+
);
622+
if let Err(err) = codewhisperer_client
623+
.send_telemetry_event(event, user_context, self.telemetry_enabled, model.to_owned())
624+
.await
625+
{
608626
error!(err =% DisplayErrorContext(err), "Failed to send cw telemetry event");
609-
return;
610-
},
611-
};
612-
613-
let event = TelemetryEvent::ChatAddMessageEvent(chat_add_message_event);
614-
debug!(
615-
?event,
616-
?user_context,
617-
telemetry_enabled = self.telemetry_enabled,
618-
"Sending cw telemetry event"
619-
);
620-
if let Err(err) = codewhisperer_client
621-
.send_telemetry_event(event, user_context, self.telemetry_enabled, model.to_owned())
622-
.await
623-
{
624-
error!(err =% DisplayErrorContext(err), "Failed to send cw telemetry event");
625-
}
627+
}
628+
},
629+
EventType::AgentContribution {
630+
conversation_id,
631+
utterance_id,
632+
lines_by_agent,
633+
..
634+
} => {
635+
let user_context = self.user_context().unwrap();
636+
637+
let builder = ChatInteractWithMessageEvent::builder()
638+
.conversation_id(conversation_id)
639+
.message_id(utterance_id.clone().unwrap_or("not_set".to_string()))
640+
.accepted_line_count(lines_by_agent.map_or(0, |lines| lines as i32))
641+
.interaction_type(ChatMessageInteractionType::AgenticCodeAccepted);
642+
643+
let chat_interact_event = match builder.build() {
644+
Ok(event) => event,
645+
Err(err) => {
646+
error!(err =% DisplayErrorContext(err), "Failed to build ChatInteractWithMessageEvent");
647+
return;
648+
},
649+
};
650+
651+
let event = TelemetryEvent::ChatInteractWithMessageEvent(chat_interact_event);
652+
debug!(
653+
?event,
654+
?user_context,
655+
telemetry_enabled = self.telemetry_enabled,
656+
"Sending cw telemetry event"
657+
);
658+
if let Err(err) = codewhisperer_client
659+
.send_telemetry_event(event, user_context, self.telemetry_enabled, None)
660+
.await
661+
{
662+
error!(err =% DisplayErrorContext(err), "Failed to send cw telemetry event");
663+
}
664+
},
665+
_ => {
666+
// No CW telemetry event for other event types
667+
},
626668
}
627669
}
628670

0 commit comments

Comments
 (0)