@@ -10,6 +10,9 @@ import { EditSurvivalResult } from '../../../platform/editSurvivalTracking/commo
1010import { ILanguageDiagnosticsService } from '../../../platform/languages/common/languageDiagnosticsService' ;
1111import { IMultiFileEditInternalTelemetryService } from '../../../platform/multiFileEdit/common/multiFileEditQualityTelemetry' ;
1212import { INotebookService } from '../../../platform/notebook/common/notebookService' ;
13+ import { GenAiMetrics } from '../../../platform/otel/common/genAiMetrics' ;
14+ import type { EditOutcome } from '../../../platform/otel/common/genAiAttributes' ;
15+ import { IOTelService } from '../../../platform/otel/common/otelService' ;
1316import { ISurveyService } from '../../../platform/survey/common/surveyService' ;
1417import { ITelemetryService , TelemetryEventMeasurements , TelemetryEventProperties } from '../../../platform/telemetry/common/telemetry' ;
1518import { isNotebookCellOrNotebookChatInput } from '../../../util/common/notebooks' ;
@@ -44,7 +47,8 @@ export class UserFeedbackService implements IUserFeedbackService {
4447 @ISurveyService private readonly surveyService : ISurveyService ,
4548 @ILanguageDiagnosticsService private readonly languageDiagnosticsService : ILanguageDiagnosticsService ,
4649 @IMultiFileEditInternalTelemetryService private readonly multiFileEditTelemetryService : IMultiFileEditInternalTelemetryService ,
47- @INotebookService private readonly notebookService : INotebookService
50+ @INotebookService private readonly notebookService : INotebookService ,
51+ @IOTelService private readonly otelService : IOTelService
4852 ) { }
4953
5054 handleUserAction ( e : vscode . ChatUserActionEvent , agentId : string ) : void {
@@ -200,6 +204,8 @@ export class UserFeedbackService implements IUserFeedbackService {
200204 isNotebookCell : e . action . uri . scheme === Schemas . vscodeNotebookCell ? 1 : 0
201205 } ) ;
202206
207+ GenAiMetrics . recordChatEditOutcome ( this . otelService , 'chat_editing' , outcomes . get ( e . action . outcome ) ?? 'unknown' , document ?. languageId , e . action . hasRemainingEdits ) ;
208+
203209 if ( result . metadata ?. responseId
204210 && ( e . action . outcome === vscode . ChatEditingSessionActionOutcome . Accepted
205211 || e . action . outcome === vscode . ChatEditingSessionActionOutcome . Rejected )
@@ -234,6 +240,7 @@ export class UserFeedbackService implements IUserFeedbackService {
234240 measurements ,
235241 'edit.hunk.action'
236242 ) ;
243+ GenAiMetrics . recordEditAcceptance ( this . otelService , 'chat_editing_hunk' , outcome , document ?. languageId ) ;
237244 }
238245 break ;
239246 }
@@ -438,7 +445,7 @@ export class UserFeedbackService implements IUserFeedbackService {
438445 } ;
439446
440447 if ( kind === InteractiveEditorResponseFeedbackKind . Accepted && response . editSurvivalTracker ) {
441- response . editSurvivalTracker . startReporter ( res => reportInlineEditSurvivalEvent ( res , sharedProps , sharedMeasures ) ) ;
448+ response . editSurvivalTracker . startReporter ( res => reportInlineEditSurvivalEvent ( res , sharedProps , sharedMeasures , this . otelService ) ) ;
442449 }
443450 ( response as any ) . editSurvivalTracker = undefined ; // TODO@jrieken
444451
@@ -467,6 +474,10 @@ export class UserFeedbackService implements IUserFeedbackService {
467474 this . telemetryService . sendMSFTTelemetryEvent ( 'inline.done' , sharedProps , {
468475 ...sharedMeasures , accepted
469476 } ) ;
477+ this . telemetryService . sendGHTelemetryEvent ( 'inline.done' , sharedProps , {
478+ ...sharedMeasures , accepted
479+ } ) ;
480+ GenAiMetrics . recordEditAcceptance ( this . otelService , 'inline_chat' , accepted ? 'accepted' : 'rejected' , languageId ) ;
470481
471482 this . telemetryService . sendInternalMSFTTelemetryEvent ( 'interactiveSessionDone' , {
472483 language : languageId ,
@@ -501,7 +512,14 @@ export class UserFeedbackService implements IUserFeedbackService {
501512 }
502513}
503514
504- function reportInlineEditSurvivalEvent ( res : EditSurvivalResult , sharedProps : TelemetryEventProperties | undefined , sharedMeasures : TelemetryEventMeasurements | undefined ) {
515+ function reportInlineEditSurvivalEvent ( res : EditSurvivalResult , sharedProps : TelemetryEventProperties | undefined , sharedMeasures : TelemetryEventMeasurements | undefined , otelService : IOTelService ) {
516+ const survivalMeasures = {
517+ ...sharedMeasures ,
518+ survivalRateFourGram : res . fourGram ,
519+ survivalRateNoRevert : res . noRevert ,
520+ timeDelayMs : res . timeDelayMs ,
521+ didBranchChange : res . didBranchChange ? 1 : 0 ,
522+ } ;
505523 /* __GDPR__
506524 "inline.trackEditSurvival" : {
507525 "owner": "hediet",
@@ -526,16 +544,13 @@ function reportInlineEditSurvivalEvent(res: EditSurvivalResult, sharedProps: Tel
526544 "isNotebook": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true, "comment": "Whether the document is a notebook" }
527545 }
528546 */
529- res . telemetryService . sendMSFTTelemetryEvent ( 'inline.trackEditSurvival' , sharedProps , {
530- ...sharedMeasures ,
531- survivalRateFourGram : res . fourGram ,
532- survivalRateNoRevert : res . noRevert ,
533- timeDelayMs : res . timeDelayMs ,
534- didBranchChange : res . didBranchChange ? 1 : 0 ,
535- } ) ;
547+ res . telemetryService . sendMSFTTelemetryEvent ( 'inline.trackEditSurvival' , sharedProps , survivalMeasures ) ;
548+ res . telemetryService . sendGHTelemetryEvent ( 'inline.trackEditSurvival' , sharedProps , survivalMeasures ) ;
549+ GenAiMetrics . recordEditSurvivalFourGram ( otelService , 'inline_chat' , res . fourGram , res . timeDelayMs ) ;
550+ GenAiMetrics . recordEditSurvivalNoRevert ( otelService , 'inline_chat' , res . noRevert , res . timeDelayMs ) ;
536551}
537552
538- const outcomes = new Map ( [
553+ const outcomes = new Map < vscode . ChatEditingSessionActionOutcome , EditOutcome > ( [
539554 [ vscode . ChatEditingSessionActionOutcome . Accepted , 'accepted' ] ,
540555 [ vscode . ChatEditingSessionActionOutcome . Rejected , 'rejected' ] ,
541556 [ vscode . ChatEditingSessionActionOutcome . Saved , 'saved' ]
0 commit comments