From 886faa2990b191a0dbd01dc58a88e09e342886b5 Mon Sep 17 00:00:00 2001 From: Sandy Tao Date: Mon, 14 Jul 2025 21:44:07 -0700 Subject: Log the 2 types of loop detection (#4193) --- packages/core/src/services/loopDetectionService.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'packages/core/src/services/loopDetectionService.ts') diff --git a/packages/core/src/services/loopDetectionService.ts b/packages/core/src/services/loopDetectionService.ts index 57e0980c..c1078f69 100644 --- a/packages/core/src/services/loopDetectionService.ts +++ b/packages/core/src/services/loopDetectionService.ts @@ -6,6 +6,9 @@ import { createHash } from 'crypto'; import { GeminiEventType, ServerGeminiStreamEvent } from '../core/turn.js'; +import { logLoopDetected } from '../telemetry/loggers.js'; +import { LoopDetectedEvent, LoopType } from '../telemetry/types.js'; +import { Config } from '../config/config.js'; const TOOL_CALL_LOOP_THRESHOLD = 5; const CONTENT_LOOP_THRESHOLD = 10; @@ -24,6 +27,11 @@ export class LoopDetectionService { private lastRepeatedSentence: string = ''; private sentenceRepetitionCount: number = 0; private partialContent: string = ''; + private config: Config; + + constructor(config: Config) { + this.config = config; + } private getToolCallKey(toolCall: { name: string; args: object }): string { const argsString = JSON.stringify(toolCall.args); @@ -59,7 +67,14 @@ export class LoopDetectionService { this.lastToolCallKey = key; this.toolCallRepetitionCount = 1; } - return this.toolCallRepetitionCount >= TOOL_CALL_LOOP_THRESHOLD; + if (this.toolCallRepetitionCount >= TOOL_CALL_LOOP_THRESHOLD) { + logLoopDetected( + this.config, + new LoopDetectedEvent(LoopType.CONSECUTIVE_IDENTICAL_TOOL_CALLS), + ); + return true; + } + return false; } private checkContentLoop(content: string): boolean { @@ -94,6 +109,10 @@ export class LoopDetectionService { } if (this.sentenceRepetitionCount >= CONTENT_LOOP_THRESHOLD) { + logLoopDetected( + this.config, + new LoopDetectedEvent(LoopType.CHANTING_IDENTICAL_SENTENCES), + ); return true; } } -- cgit v1.2.3