Skip to content

TTFT and total time events for agent host sessions #320194

Draft
amunger wants to merge 2 commits into
mainfrom
aamunger/AHsessionTTFT
Draft

TTFT and total time events for agent host sessions #320194
amunger wants to merge 2 commits into
mainfrom
aamunger/AHsessionTTFT

Conversation

@amunger
Copy link
Copy Markdown
Collaborator

@amunger amunger commented Jun 5, 2026

top 2 priorities from https://github.com/microsoft/vscode-internalbacklog/issues/7876#issuecomment-4627207234 on a new event agentHost.turnCompleted

comparison between the new event for AH agentHost.turnCompleted and the existing corresponding event for the local agent loop interactiveSessionProviderInvoked

telemetry/agentHost.turnCompleted {"properties":{"provider":"copilotcli","agentSessionId":"c98ed755-ef56-488c-af3f-dcdfd8a119b4","result":"success","model":"claude-sonnet-4.5","permissionLevel":"default","common.machineId":"7903d76fa576d6204fb3f8f8ec6648a16a68d96a44a712dbd46ac4c7605bdf7c","common.sqmId":"{CBF0D28D-11AD-410A-8016-AAFCC7CFFB3E}","common.devDeviceId":"964983f5-4fac-4745-a241-8895f543224a","sessionID":"d86681e9-2954-48ef-aef2-121ea7ffc9901780699229062","version":"1.124.0","common.platformVersion":"10.0.26200","common.platform":"Windows","common.nodePlatform":"win32","common.nodeArch":"arm64","common.product":"desktop","timestamp":"2026-06-05T22:44:43.256Z"},"measurements":{"isSubagentSession":0,"timeToFirstProgress":6413,"totalTime":24880,"common.timesincesessionstart":254193,"common.sequence":5}}
telemetry/interactiveSessionProviderInvoked {"properties":{"result":"success","requestType":"string","agent":"github.copilot.editsAgent","agentExtensionId":"GitHub.copilot-chat","chatSessionId":"1a69620f-636b-4ecc-9115-f63cfa3247ca","location":"panel","attachmentKinds":"[\"file\"]","model":"claude-sonnet-4.5","permissionLevel":"default","chatMode":"agent","sessionType":"local","common.machineId":"d9de15686e996737695661d382d392f4037756737d10090c8f411568b44b7fc8","common.sqmId":"{CBF0D28D-11AD-410A-8016-AAFCC7CFFB3E}","common.devDeviceId":"964983f5-4fac-4745-a241-8895f543224a","sessionID":"62e09fc8-4d98-4dbb-8ff6-d83a7222b8691780698131498","version":"1.124.0","common.platformVersion":"10.0.26200","common.platform":"Windows","common.nodePlatform":"win32","common.nodeArch":"arm64","common.product":"desktop","timestamp":"2026-06-05T22:25:05.715Z","common.version.shell":"42.2.0","common.version.renderer":"148.0.7778.97","common.firstSessionDate":"Wed, 10 Sep 2025 23:13:15 GMT","common.lastSessionDate":"Fri, 05 Jun 2026 20:58:57 GMT","common.isNewSession":"0","common.remoteAuthority":"none","common.copilotTrackingId":"b310790797120699c18bf3b20d345634"},"measurements":{"timeToFirstProgress":6159,"totalTime":15219,"enableCommandDetection":1,"isParticipantDetected":0,"citations":0,"numCodeBlocks":0,"common.timesincesessionstart":174217,"common.sequence":331,"common.cli":1,"common.msftInternal":1}}

Copilot AI review requested due to automatic review settings June 5, 2026 22:55
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds per-turn performance telemetry for Agent Host sessions by tracking time-to-first-progress (TTFT) and total turn duration, enabling comparisons with existing local agent-loop telemetry.

Changes:

  • Introduces agentHost.turnCompleted telemetry event with TTFT/total time measurements.
  • Adds AgentHostTurnTracker to maintain per-turn timing state and emit telemetry on completion.
  • Hooks turn start/progress/completion tracking into AgentSideEffects for both direct and queued message flows.
Show a summary per file
File Description
src/vs/platform/agentHost/node/agentSideEffects.ts Starts per-turn timers when sending messages; marks first progress; completes turns on success/cancel/error signals.
src/vs/platform/agentHost/node/agentHostTurnTracker.ts New helper to track per-turn stopwatches and emit completion reports.
src/vs/platform/agentHost/node/agentHostTelemetryReporter.ts Adds the agentHost.turnCompleted telemetry definition and reporter method.

Copilot's findings

  • Files reviewed: 3/3 changed files
  • Comments generated: 6

Comment on lines +73 to +75
private _key(session: string, turnId: string): string {
return `${session}:${turnId}`;
}
Comment on lines 425 to +432
if (action.type === ActionType.SessionTurnComplete) {
this._turnTracker.turnCompleted(sessionKey, turnId, 'success');
this._runTurnCompleteSideEffects(sessionKey, turnId);
}

if (action.type === ActionType.SessionTurnCancelled) {
this._turnTracker.turnCompleted(sessionKey, turnId, 'cancelled');
}
Comment on lines +761 to 765
const { model, permissionLevel } = this._getTurnTelemetryContext(state);
this._turnTracker.turnStarted(agent.id, channel, action.turnId, model, permissionLevel);
agent.sendMessage(URI.parse(channel), action.message.text, attachments, action.turnId).catch(err => {
const errCode = (err as { code?: number })?.code;
this._logService.error(`[AgentSideEffects] sendMessage failed for session=${channel}: code=${errCode}, message=${err instanceof Error ? err.message : String(err)}, type=${err?.constructor?.name}`, err);
Comment on lines +1051 to 1056
const queuedState = this._stateManager.getSessionState(session);
this._telemetryReporter.userMessageSent(agent.id, session, queuedState, 'queued', attachments);
const { model, permissionLevel } = this._getTurnTelemetryContext(queuedState);
this._turnTracker.turnStarted(agent.id, session, turnId, model, permissionLevel);
agent.sendMessage(URI.parse(session), msg.message.text, attachments, turnId).catch(err => {
this._logService.error('[AgentSideEffects] sendMessage failed (queued)', err);
Comment on lines +95 to +104
turnCompleted(report: IAgentHostTurnCompletedReport): void {
this._telemetryService.publicLog2<IAgentHostTurnCompletedEvent, IAgentHostTurnCompletedClassification>('agentHost.turnCompleted', {
provider: report.provider,
agentSessionId: AgentSession.id(report.session),
timeToFirstProgress: report.timeToFirstProgress,
totalTime: report.totalTime,
result: report.result,
model: report.model,
permissionLevel: report.permissionLevel,
});
Comment on lines +95 to +104
turnCompleted(report: IAgentHostTurnCompletedReport): void {
this._telemetryService.publicLog2<IAgentHostTurnCompletedEvent, IAgentHostTurnCompletedClassification>('agentHost.turnCompleted', {
provider: report.provider,
agentSessionId: AgentSession.id(report.session),
timeToFirstProgress: report.timeToFirstProgress,
totalTime: report.totalTime,
result: report.result,
model: report.model,
permissionLevel: report.permissionLevel,
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants