summaryrefslogtreecommitdiff
path: root/packages/core/src/telemetry
diff options
context:
space:
mode:
Diffstat (limited to 'packages/core/src/telemetry')
-rw-r--r--packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts17
-rw-r--r--packages/core/src/telemetry/clearcut-logger/event-metadata-key.ts7
-rw-r--r--packages/core/src/telemetry/types.ts15
3 files changed, 38 insertions, 1 deletions
diff --git a/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts b/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts
index 81a9ca4b..cfbbdda6 100644
--- a/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts
+++ b/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts
@@ -20,6 +20,7 @@ import {
LoopDetectedEvent,
NextSpeakerCheckEvent,
SlashCommandEvent,
+ MalformedJsonResponseEvent,
} from '../types.js';
import { EventMetadataKey } from './event-metadata-key.js';
import { Config } from '../../config/config.js';
@@ -42,6 +43,7 @@ const flash_fallback_event_name = 'flash_fallback';
const loop_detected_event_name = 'loop_detected';
const next_speaker_check_event_name = 'next_speaker_check';
const slash_command_event_name = 'slash_command';
+const malformed_json_response_event_name = 'malformed_json_response';
export interface LogResponse {
nextRequestWaitMs?: number;
@@ -557,6 +559,21 @@ export class ClearcutLogger {
this.flushIfNeeded();
}
+ logMalformedJsonResponseEvent(event: MalformedJsonResponseEvent): void {
+ const data = [
+ {
+ gemini_cli_key:
+ EventMetadataKey.GEMINI_CLI_MALFORMED_JSON_RESPONSE_MODEL,
+ value: JSON.stringify(event.model),
+ },
+ ];
+
+ this.enqueueLogEvent(
+ this.createLogEvent(malformed_json_response_event_name, data),
+ );
+ this.flushIfNeeded();
+ }
+
logEndSessionEvent(event: EndSessionEvent): void {
const data = [
{
diff --git a/packages/core/src/telemetry/clearcut-logger/event-metadata-key.ts b/packages/core/src/telemetry/clearcut-logger/event-metadata-key.ts
index 01dd42af..0fc35894 100644
--- a/packages/core/src/telemetry/clearcut-logger/event-metadata-key.ts
+++ b/packages/core/src/telemetry/clearcut-logger/event-metadata-key.ts
@@ -183,6 +183,13 @@ export enum EventMetadataKey {
// Logs the result of the next speaker check
GEMINI_CLI_NEXT_SPEAKER_CHECK_RESULT = 44,
+
+ // ==========================================================================
+ // Malformed JSON Response Event Keys
+ // ==========================================================================
+
+ // Logs the model that produced the malformed JSON response.
+ GEMINI_CLI_MALFORMED_JSON_RESPONSE_MODEL = 45,
}
export function getEventMetadataKey(
diff --git a/packages/core/src/telemetry/types.ts b/packages/core/src/telemetry/types.ts
index 6fe797bf..1633dbc4 100644
--- a/packages/core/src/telemetry/types.ts
+++ b/packages/core/src/telemetry/types.ts
@@ -296,6 +296,18 @@ export class SlashCommandEvent {
}
}
+export class MalformedJsonResponseEvent {
+ 'event.name': 'malformed_json_response';
+ 'event.timestamp': string; // ISO 8601
+ model: string;
+
+ constructor(model: string) {
+ this['event.name'] = 'malformed_json_response';
+ this['event.timestamp'] = new Date().toISOString();
+ this.model = model;
+ }
+}
+
export type TelemetryEvent =
| StartSessionEvent
| EndSessionEvent
@@ -307,4 +319,5 @@ export type TelemetryEvent =
| FlashFallbackEvent
| LoopDetectedEvent
| NextSpeakerCheckEvent
- | SlashCommandEvent;
+ | SlashCommandEvent
+ | MalformedJsonResponseEvent;