Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.ts
13406 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { localize } from '../../../../../nls.js';
7
import { IChatDebugEvent } from '../../common/chatDebugService.js';
8
import { safeIntl } from '../../../../../base/common/date.js';
9
10
const numberFormatter = safeIntl.NumberFormat();
11
12
/**
13
* Format the detail text for a debug event (used when no resolved content is available).
14
*/
15
export function formatEventDetail(event: IChatDebugEvent): string {
16
switch (event.kind) {
17
case 'toolCall': {
18
const parts = [localize('chatDebug.detail.tool', "Tool: {0}", event.toolName)];
19
if (event.toolCallId) { parts.push(localize('chatDebug.detail.callId', "Call ID: {0}", event.toolCallId)); }
20
if (event.result) { parts.push(localize('chatDebug.detail.result', "Result: {0}", event.result)); }
21
if (event.durationInMillis !== undefined) { parts.push(localize('chatDebug.detail.durationMs', "Duration: {0}ms", numberFormatter.value.format(event.durationInMillis))); }
22
if (event.input) { parts.push(`\n${localize('chatDebug.detail.input', "Input:")}\n${event.input}`); }
23
if (event.output) { parts.push(`\n${localize('chatDebug.detail.output', "Output:")}\n${event.output}`); }
24
return parts.join('\n');
25
}
26
case 'modelTurn': {
27
const parts = [event.model ?? localize('chatDebug.detail.modelTurn', "Model Turn")];
28
if (event.inputTokens !== undefined) { parts.push(localize('chatDebug.detail.inputTokens', "Input tokens: {0}", numberFormatter.value.format(event.inputTokens))); }
29
if (event.outputTokens !== undefined) { parts.push(localize('chatDebug.detail.outputTokens', "Output tokens: {0}", numberFormatter.value.format(event.outputTokens))); }
30
if (event.cachedTokens !== undefined) { parts.push(localize('chatDebug.detail.cachedTokens', "Cached tokens: {0}", numberFormatter.value.format(event.cachedTokens))); }
31
if (event.totalTokens !== undefined) { parts.push(localize('chatDebug.detail.totalTokens', "Total tokens: {0}", numberFormatter.value.format(event.totalTokens))); }
32
if (event.durationInMillis !== undefined) { parts.push(localize('chatDebug.detail.durationMs', "Duration: {0}ms", numberFormatter.value.format(event.durationInMillis))); }
33
return parts.join('\n');
34
}
35
case 'generic':
36
return `${event.name}\n${event.details ?? ''}`;
37
case 'subagentInvocation': {
38
const parts = [localize('chatDebug.detail.agent', "Agent: {0}", event.agentName)];
39
if (event.description) { parts.push(localize('chatDebug.detail.description', "Description: {0}", event.description)); }
40
if (event.status) { parts.push(localize('chatDebug.detail.status', "Status: {0}", event.status)); }
41
if (event.durationInMillis !== undefined) { parts.push(localize('chatDebug.detail.durationMs', "Duration: {0}ms", numberFormatter.value.format(event.durationInMillis))); }
42
if (event.toolCallCount !== undefined) { parts.push(localize('chatDebug.detail.toolCallCount', "Tool calls: {0}", numberFormatter.value.format(event.toolCallCount))); }
43
if (event.modelTurnCount !== undefined) { parts.push(localize('chatDebug.detail.modelTurnCount', "Model turns: {0}", numberFormatter.value.format(event.modelTurnCount))); }
44
return parts.join('\n');
45
}
46
case 'userMessage': {
47
const parts = [localize('chatDebug.detail.userMessage', "User Message: {0}", event.message)];
48
for (const section of event.sections) {
49
parts.push(`\n--- ${section.name} ---\n${section.content}`);
50
}
51
return parts.join('\n');
52
}
53
case 'agentResponse': {
54
const parts = [localize('chatDebug.detail.agentResponse', "Agent Response: {0}", event.message)];
55
for (const section of event.sections) {
56
parts.push(`\n--- ${section.name} ---\n${section.content}`);
57
}
58
return parts.join('\n');
59
}
60
}
61
}
62
63