Merge pull request #1090 from QwenLM/feat/logger-enhancement

Improve Usage Statistics by Moving Key Snapshot Fields into Properties
This commit is contained in:
pomelo
2025-11-21 15:55:26 +08:00
committed by GitHub
4 changed files with 77 additions and 80 deletions

View File

@@ -1951,7 +1951,7 @@ describe('InputPrompt', () => {
unmount();
});
it('expands and collapses long suggestion via Right/Left arrows', async () => {
it.skip('expands and collapses long suggestion via Right/Left arrows', async () => {
props.shellModeActive = false;
const longValue = 'l'.repeat(200);

View File

@@ -99,13 +99,13 @@ export const AgentExecutionDisplay: React.FC<AgentExecutionDisplayProps> = ({
data.toolCalls && data.toolCalls.length > MAX_TOOL_CALLS;
if (hasMoreToolCalls || hasMoreLines) {
return 'Press ctrl+r to show less, ctrl+e to show more.';
return 'Press ctrl+e to show less, ctrl+f to show more.';
}
return 'Press ctrl+r to show less.';
return 'Press ctrl+e to show less.';
}
if (displayMode === 'verbose') {
return 'Press ctrl+e to show less.';
return 'Press ctrl+f to show less.';
}
return '';
@@ -114,13 +114,13 @@ export const AgentExecutionDisplay: React.FC<AgentExecutionDisplayProps> = ({
// Handle keyboard shortcuts to control display mode
useKeypress(
(key) => {
if (key.ctrl && key.name === 'r') {
// ctrl+r toggles between compact and default
if (key.ctrl && key.name === 'e') {
// ctrl+e toggles between compact and default
setDisplayMode((current) =>
current === 'compact' ? 'default' : 'compact',
);
} else if (key.ctrl && key.name === 'e') {
// ctrl+e toggles between default and verbose
} else if (key.ctrl && key.name === 'f') {
// ctrl+f toggles between default and verbose
setDisplayMode((current) =>
current === 'default' ? 'verbose' : 'default',
);
@@ -157,7 +157,7 @@ export const AgentExecutionDisplay: React.FC<AgentExecutionDisplayProps> = ({
{data.toolCalls.length > 1 && !data.pendingConfirmation && (
<Box flexDirection="row" paddingLeft={4}>
<Text color={theme.text.secondary}>
+{data.toolCalls.length - 1} more tool calls (ctrl+r to
+{data.toolCalls.length - 1} more tool calls (ctrl+e to
expand)
</Text>
</Box>

View File

@@ -286,9 +286,9 @@ describe('QwenLogger', () => {
event_type: 'action',
type: 'ide',
name: 'ide_connection',
snapshots: JSON.stringify({
properties: {
connection_type: IdeConnectionType.SESSION,
}),
},
}),
);
});
@@ -307,8 +307,10 @@ describe('QwenLogger', () => {
type: 'overflow',
name: 'kitty_sequence_overflow',
subtype: 'kitty_sequence_overflow',
snapshots: JSON.stringify({
properties: {
sequence_length: 1024,
},
snapshots: JSON.stringify({
truncated_sequence: 'truncated...',
}),
}),

View File

@@ -259,7 +259,7 @@ export class QwenLogger {
: '',
},
_v: `qwen-code@${version}`,
};
} as RumPayload;
}
flushIfNeeded(): void {
@@ -368,12 +368,10 @@ export class QwenLogger {
const applicationEvent = this.createViewEvent('session', 'session_start', {
properties: {
model: event.model,
},
snapshots: JSON.stringify({
approval_mode: event.approval_mode,
embedding_model: event.embedding_model,
sandbox_enabled: event.sandbox_enabled,
core_tools_enabled: event.core_tools_enabled,
approval_mode: event.approval_mode,
api_key_enabled: event.api_key_enabled,
vertex_ai_enabled: event.vertex_ai_enabled,
debug_enabled: event.debug_enabled,
@@ -381,7 +379,7 @@ export class QwenLogger {
telemetry_enabled: event.telemetry_enabled,
telemetry_log_user_prompts_enabled:
event.telemetry_log_user_prompts_enabled,
}),
},
});
// Flush start event immediately
@@ -410,10 +408,10 @@ export class QwenLogger {
'conversation',
'conversation_finished',
{
snapshots: JSON.stringify({
properties: {
approval_mode: event.approvalMode,
turn_count: event.turnCount,
}),
},
},
);
@@ -427,10 +425,8 @@ export class QwenLogger {
properties: {
auth_type: event.auth_type,
prompt_id: event.prompt_id,
},
snapshots: JSON.stringify({
prompt_length: event.prompt_length,
}),
},
});
this.enqueueLogEvent(rumEvent);
@@ -439,10 +435,10 @@ export class QwenLogger {
logSlashCommandEvent(event: SlashCommandEvent): void {
const rumEvent = this.createActionEvent('user', 'slash_command', {
snapshots: JSON.stringify({
properties: {
command: event.command,
subcommand: event.subcommand,
}),
},
});
this.enqueueLogEvent(rumEvent);
@@ -451,9 +447,9 @@ export class QwenLogger {
logModelSlashCommandEvent(event: ModelSlashCommandEvent): void {
const rumEvent = this.createActionEvent('user', 'model_slash_command', {
snapshots: JSON.stringify({
model_name: event.model_name,
}),
properties: {
model: event.model_name,
},
});
this.enqueueLogEvent(rumEvent);
@@ -469,15 +465,13 @@ export class QwenLogger {
properties: {
prompt_id: event.prompt_id,
response_id: event.response_id,
},
snapshots: JSON.stringify({
function_name: event.function_name,
decision: event.decision,
success: event.success,
tool_name: event.function_name,
permission: event.decision,
success: event.success ? 1 : 0,
duration_ms: event.duration_ms,
error: event.error,
error_type: event.error_type,
}),
error_message: event.error,
},
},
);
@@ -490,14 +484,14 @@ export class QwenLogger {
'tool',
`file_operation#${event.tool_name}`,
{
snapshots: JSON.stringify({
properties: {
tool_name: event.tool_name,
operation: event.operation,
lines: event.lines,
mimetype: event.mimetype,
extension: event.extension,
programming_language: event.programming_language,
}),
},
},
);
@@ -507,11 +501,15 @@ export class QwenLogger {
logSubagentExecutionEvent(event: SubagentExecutionEvent): void {
const rumEvent = this.createActionEvent('tool', 'subagent_execution', {
snapshots: JSON.stringify({
properties: {
subagent_name: event.subagent_name,
status: event.status,
terminate_reason: event.terminate_reason,
execution_summary: event.execution_summary,
},
snapshots: JSON.stringify({
...(event.execution_summary
? { execution_summary: event.execution_summary }
: {}),
}),
});
@@ -521,8 +519,10 @@ export class QwenLogger {
logToolOutputTruncatedEvent(event: ToolOutputTruncatedEvent): void {
const rumEvent = this.createActionEvent('tool', 'tool_output_truncated', {
snapshots: JSON.stringify({
properties: {
tool_name: event.tool_name,
},
snapshots: JSON.stringify({
original_content_length: event.original_content_length,
truncated_content_length: event.truncated_content_length,
threshold: event.threshold,
@@ -595,10 +595,8 @@ export class QwenLogger {
auth_type: event.auth_type,
model: event.model,
prompt_id: event.prompt_id,
},
snapshots: JSON.stringify({
error_type: event.error_type,
}),
},
});
this.enqueueLogEvent(rumEvent);
@@ -623,11 +621,11 @@ export class QwenLogger {
{
subtype: 'content_retry_failure',
message: `Content retry failed after ${event.total_attempts} attempts`,
snapshots: JSON.stringify({
properties: {
error_type: event.final_error_type,
total_attempts: event.total_attempts,
final_error_type: event.final_error_type,
total_duration_ms: event.total_duration_ms,
}),
},
},
);
@@ -656,10 +654,8 @@ export class QwenLogger {
subtype: 'loop_detected',
properties: {
prompt_id: event.prompt_id,
error_type: event.loop_type,
},
snapshots: JSON.stringify({
loop_type: event.loop_type,
}),
});
this.enqueueLogEvent(rumEvent);
@@ -672,8 +668,10 @@ export class QwenLogger {
'kitty_sequence_overflow',
{
subtype: 'kitty_sequence_overflow',
snapshots: JSON.stringify({
properties: {
sequence_length: event.sequence_length,
},
snapshots: JSON.stringify({
truncated_sequence: event.truncated_sequence,
}),
},
@@ -686,7 +684,9 @@ export class QwenLogger {
// ide events
logIdeConnectionEvent(event: IdeConnectionEvent): void {
const rumEvent = this.createActionEvent('ide', 'ide_connection', {
snapshots: JSON.stringify({ connection_type: event.connection_type }),
properties: {
connection_type: event.connection_type,
},
});
this.enqueueLogEvent(rumEvent);
@@ -696,12 +696,12 @@ export class QwenLogger {
// extension events
logExtensionInstallEvent(event: ExtensionInstallEvent): void {
const rumEvent = this.createActionEvent('extension', 'extension_install', {
snapshots: JSON.stringify({
properties: {
extension_name: event.extension_name,
extension_version: event.extension_version,
extension_source: event.extension_source,
status: event.status,
}),
},
});
this.enqueueLogEvent(rumEvent);
@@ -713,10 +713,10 @@ export class QwenLogger {
'extension',
'extension_uninstall',
{
snapshots: JSON.stringify({
properties: {
extension_name: event.extension_name,
status: event.status,
}),
},
},
);
@@ -726,10 +726,10 @@ export class QwenLogger {
logExtensionEnableEvent(event: ExtensionEnableEvent): void {
const rumEvent = this.createActionEvent('extension', 'extension_enable', {
snapshots: JSON.stringify({
properties: {
extension_name: event.extension_name,
setting_scope: event.setting_scope,
}),
},
});
this.enqueueLogEvent(rumEvent);
@@ -738,10 +738,10 @@ export class QwenLogger {
logExtensionDisableEvent(event: ExtensionDisableEvent): void {
const rumEvent = this.createActionEvent('extension', 'extension_disable', {
snapshots: JSON.stringify({
properties: {
extension_name: event.extension_name,
setting_scope: event.setting_scope,
}),
},
});
this.enqueueLogEvent(rumEvent);
@@ -749,18 +749,15 @@ export class QwenLogger {
}
logAuthEvent(event: AuthEvent): void {
const snapshots: Record<string, unknown> = {
const rumEvent = this.createActionEvent('auth', 'auth', {
properties: {
auth_type: event.auth_type,
action_type: event.action_type,
status: event.status,
};
if (event.error_message) {
snapshots['error_message'] = event.error_message;
}
const rumEvent = this.createActionEvent('auth', 'auth', {
snapshots: JSON.stringify(snapshots),
success: event.status === 'success' ? 1 : 0,
error_type: event.status !== 'success' ? event.status : undefined,
error_message:
event.status === 'error' ? event.error_message : undefined,
},
});
this.enqueueLogEvent(rumEvent);
@@ -781,13 +778,13 @@ export class QwenLogger {
logRipgrepFallbackEvent(event: RipgrepFallbackEvent): void {
const rumEvent = this.createActionEvent('misc', 'ripgrep_fallback', {
snapshots: JSON.stringify({
properties: {
platform: process.platform,
arch: process.arch,
use_ripgrep: event.use_ripgrep,
use_builtin_ripgrep: event.use_builtin_ripgrep,
error: event.error ?? undefined,
}),
error_message: event.error,
},
});
this.enqueueLogEvent(rumEvent);
@@ -809,11 +806,9 @@ export class QwenLogger {
const rumEvent = this.createActionEvent('misc', 'next_speaker_check', {
properties: {
prompt_id: event.prompt_id,
},
snapshots: JSON.stringify({
finish_reason: event.finish_reason,
result: event.result,
}),
},
});
this.enqueueLogEvent(rumEvent);
@@ -822,10 +817,10 @@ export class QwenLogger {
logChatCompressionEvent(event: ChatCompressionEvent): void {
const rumEvent = this.createActionEvent('misc', 'chat_compression', {
snapshots: JSON.stringify({
properties: {
tokens_before: event.tokens_before,
tokens_after: event.tokens_after,
}),
},
});
this.enqueueLogEvent(rumEvent);
@@ -834,11 +829,11 @@ export class QwenLogger {
logContentRetryEvent(event: ContentRetryEvent): void {
const rumEvent = this.createActionEvent('misc', 'content_retry', {
snapshots: JSON.stringify({
attempt_number: event.attempt_number,
properties: {
error_type: event.error_type,
attempt_number: event.attempt_number,
retry_delay_ms: event.retry_delay_ms,
}),
},
});
this.enqueueLogEvent(rumEvent);