diff options
Diffstat (limited to 'packages/core/src')
| -rw-r--r-- | packages/core/src/services/loopDetectionService.test.ts | 21 | ||||
| -rw-r--r-- | packages/core/src/services/loopDetectionService.ts | 1 |
2 files changed, 21 insertions, 1 deletions
diff --git a/packages/core/src/services/loopDetectionService.test.ts b/packages/core/src/services/loopDetectionService.test.ts index f0d76166..2d410752 100644 --- a/packages/core/src/services/loopDetectionService.test.ts +++ b/packages/core/src/services/loopDetectionService.test.ts @@ -97,6 +97,27 @@ describe('LoopDetectionService', () => { expect(service.addAndCheck(event3)).toBe(false); } }); + + it('should not reset tool call counter for other event types', () => { + const toolCallEvent = createToolCallRequestEvent('testTool', { + param: 'value', + }); + const otherEvent = { + type: 'thought', + } as unknown as ServerGeminiStreamEvent; + + // Send events just below the threshold + for (let i = 0; i < TOOL_CALL_LOOP_THRESHOLD - 1; i++) { + expect(service.addAndCheck(toolCallEvent)).toBe(false); + } + + // Send a different event type + expect(service.addAndCheck(otherEvent)).toBe(false); + + // Send the tool call event again, which should now trigger the loop + expect(service.addAndCheck(toolCallEvent)).toBe(true); + expect(loggers.logLoopDetected).toHaveBeenCalledTimes(1); + }); }); describe('Content Loop Detection', () => { diff --git a/packages/core/src/services/loopDetectionService.ts b/packages/core/src/services/loopDetectionService.ts index c1078f69..c4524b3e 100644 --- a/packages/core/src/services/loopDetectionService.ts +++ b/packages/core/src/services/loopDetectionService.ts @@ -54,7 +54,6 @@ export class LoopDetectionService { case GeminiEventType.Content: return this.checkContentLoop(event.value); default: - this.reset(); return false; } } |
