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