@@ -15,6 +15,8 @@ use std::str::FromStr;
1515
1616use 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