Skip to content

Commit 8c37d95

Browse files
committed
Updates AI reporting
1 parent b497760 commit 8c37d95

File tree

7 files changed

+180
-89
lines changed

7 files changed

+180
-89
lines changed

src/ai/aiProviderService.ts

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,19 @@ export interface AIProvider<Provider extends AIProviders = AIProviders> extends
6767
model: AIModel<Provider, AIModels<Provider>>,
6868
message: string,
6969
diff: string,
70+
reporting: TelemetryEvents['ai/explain'],
7071
options?: { cancellation?: CancellationToken },
7172
): Promise<string | undefined>;
7273
generateCommitMessage(
7374
model: AIModel<Provider, AIModels<Provider>>,
7475
diff: string,
76+
reporting: TelemetryEvents['ai/generate'],
7577
options?: { cancellation?: CancellationToken; context?: string },
7678
): Promise<string | undefined>;
7779
generateDraftMessage(
7880
model: AIModel<Provider, AIModels<Provider>>,
7981
diff: string,
82+
reporting: TelemetryEvents['ai/generate'],
8083
options?: { cancellation?: CancellationToken; context?: string; codeSuggestion?: boolean },
8184
): Promise<string | undefined>;
8285
}
@@ -232,32 +235,31 @@ export class AIProviderService implements Disposable {
232235

233236
const payload: TelemetryEvents['ai/generate'] = {
234237
type: 'commitMessage',
235-
model: { id: model.id, provider: { id: model.provider.id, name: model.provider.name } },
238+
'model.id': model.id,
239+
'model.provider.id': model.provider.id,
240+
'model.provider.name': model.provider.name,
241+
'retry.count': 0,
236242
};
237243
const source: Parameters<TelemetryService['sendEvent']>[2] = { source: sourceContext.source };
238244

239245
const confirmed = await confirmAIProviderToS(model, this.container.storage);
240246
if (!confirmed) {
241-
this.container.telemetry.sendEvent(
242-
'ai/generate',
243-
{ ...payload, failed: { reason: 'user-declined' } },
244-
source,
245-
);
247+
this.container.telemetry.sendEvent('ai/generate', { ...payload, 'failed.reason': 'user-declined' }, source);
246248

247249
return undefined;
248250
}
249251

250252
if (options?.cancellation?.isCancellationRequested) {
251253
this.container.telemetry.sendEvent(
252254
'ai/generate',
253-
{ ...payload, failed: { reason: 'user-cancelled' } },
255+
{ ...payload, 'failed.reason': 'user-cancelled' },
254256
source,
255257
);
256258

257259
return undefined;
258260
}
259261

260-
const promise = provider.generateCommitMessage(model, changes, {
262+
const promise = provider.generateCommitMessage(model, changes, payload, {
261263
cancellation: options?.cancellation,
262264
context: options?.context,
263265
});
@@ -268,6 +270,7 @@ export class AIProviderService implements Disposable {
268270
? window.withProgress(options.progress, () => promise)
269271
: promise);
270272

273+
payload['output.length'] = result?.length;
271274
this.container.telemetry.sendEvent('ai/generate', { ...payload, duration: Date.now() - start }, source);
272275

273276
return result;
@@ -277,10 +280,9 @@ export class AIProviderService implements Disposable {
277280
{
278281
...payload,
279282
duration: Date.now() - start,
280-
failed:
281-
ex instanceof CancellationError
282-
? { reason: 'user-cancelled' }
283-
: { reason: 'error', error: String(ex) },
283+
...(ex instanceof CancellationError
284+
? { 'failed.reason': 'user-cancelled' }
285+
: { 'failed.reason': 'error', 'failed.error': String(ex) }),
284286
},
285287
source,
286288
);
@@ -310,32 +312,31 @@ export class AIProviderService implements Disposable {
310312
const payload: TelemetryEvents['ai/generate'] = {
311313
type: 'draftMessage',
312314
draftType: sourceContext.type,
313-
model: { id: model.id, provider: { id: model.provider.id, name: model.provider.name } },
315+
'model.id': model.id,
316+
'model.provider.id': model.provider.id,
317+
'model.provider.name': model.provider.name,
318+
'retry.count': 0,
314319
};
315320
const source: Parameters<TelemetryService['sendEvent']>[2] = { source: sourceContext.source };
316321

317322
const confirmed = await confirmAIProviderToS(model, this.container.storage);
318323
if (!confirmed) {
319-
this.container.telemetry.sendEvent(
320-
'ai/generate',
321-
{ ...payload, failed: { reason: 'user-declined' } },
322-
source,
323-
);
324+
this.container.telemetry.sendEvent('ai/generate', { ...payload, 'failed.reason': 'user-declined' }, source);
324325

325326
return undefined;
326327
}
327328

328329
if (options?.cancellation?.isCancellationRequested) {
329330
this.container.telemetry.sendEvent(
330331
'ai/generate',
331-
{ ...payload, failed: { reason: 'user-cancelled' } },
332+
{ ...payload, 'failed.reason': 'user-cancelled' },
332333
source,
333334
);
334335

335336
return undefined;
336337
}
337338

338-
const promise = provider.generateDraftMessage(model, changes, {
339+
const promise = provider.generateDraftMessage(model, changes, payload, {
339340
cancellation: options?.cancellation,
340341
context: options?.context,
341342
codeSuggestion: options?.codeSuggestion,
@@ -347,6 +348,7 @@ export class AIProviderService implements Disposable {
347348
? window.withProgress(options.progress, () => promise)
348349
: promise);
349350

351+
payload['output.length'] = result?.length;
350352
this.container.telemetry.sendEvent('ai/generate', { ...payload, duration: Date.now() - start }, source);
351353

352354
return result;
@@ -356,10 +358,9 @@ export class AIProviderService implements Disposable {
356358
{
357359
...payload,
358360
duration: Date.now() - start,
359-
failed:
360-
ex instanceof CancellationError
361-
? { reason: 'user-cancelled' }
362-
: { reason: 'error', error: String(ex) },
361+
...(ex instanceof CancellationError
362+
? { 'failed.reason': 'user-cancelled' }
363+
: { 'failed.reason': 'error', 'failed.error': String(ex) }),
363364
},
364365
source,
365366
);
@@ -410,17 +411,16 @@ export class AIProviderService implements Disposable {
410411
const payload: TelemetryEvents['ai/explain'] = {
411412
type: 'change',
412413
changeType: sourceContext.type,
413-
model: { id: model.id, provider: { id: model.provider.id, name: model.provider.name } },
414+
'model.id': model.id,
415+
'model.provider.id': model.provider.id,
416+
'model.provider.name': model.provider.name,
417+
'retry.count': 0,
414418
};
415419
const source: Parameters<TelemetryService['sendEvent']>[2] = { source: sourceContext.source };
416420

417421
const confirmed = await confirmAIProviderToS(model, this.container.storage);
418422
if (!confirmed) {
419-
this.container.telemetry.sendEvent(
420-
'ai/explain',
421-
{ ...payload, failed: { reason: 'user-declined' } },
422-
source,
423-
);
423+
this.container.telemetry.sendEvent('ai/explain', { ...payload, 'failed.reason': 'user-declined' }, source);
424424

425425
return undefined;
426426
}
@@ -436,16 +436,12 @@ export class AIProviderService implements Disposable {
436436
}
437437

438438
if (options?.cancellation?.isCancellationRequested) {
439-
this.container.telemetry.sendEvent(
440-
'ai/explain',
441-
{ ...payload, failed: { reason: 'user-cancelled' } },
442-
source,
443-
);
439+
this.container.telemetry.sendEvent('ai/explain', { ...payload, 'failed.reason': 'user-cancelled' }, source);
444440

445441
return undefined;
446442
}
447443

448-
const promise = provider.explainChanges(model, commit.message, diff.contents, {
444+
const promise = provider.explainChanges(model, commit.message, diff.contents, payload, {
449445
cancellation: options?.cancellation,
450446
});
451447

@@ -455,6 +451,7 @@ export class AIProviderService implements Disposable {
455451
? window.withProgress(options.progress, () => promise)
456452
: promise);
457453

454+
payload['output.length'] = result?.length;
458455
this.container.telemetry.sendEvent('ai/explain', { ...payload, duration: Date.now() - start }, source);
459456

460457
return result;
@@ -464,10 +461,9 @@ export class AIProviderService implements Disposable {
464461
{
465462
...payload,
466463
duration: Date.now() - start,
467-
failed:
468-
ex instanceof CancellationError
469-
? { reason: 'user-cancelled' }
470-
: { reason: 'error', error: String(ex) },
464+
...(ex instanceof CancellationError
465+
? { 'failed.reason': 'user-cancelled' }
466+
: { 'failed.reason': 'error', 'failed.error': String(ex) }),
471467
},
472468
source,
473469
);

0 commit comments

Comments
 (0)