diff options
Diffstat (limited to 'packages/core/src/services')
| -rw-r--r-- | packages/core/src/services/loopDetectionService.test.ts | 10 | ||||
| -rw-r--r-- | packages/core/src/services/loopDetectionService.ts | 16 |
2 files changed, 17 insertions, 9 deletions
diff --git a/packages/core/src/services/loopDetectionService.test.ts b/packages/core/src/services/loopDetectionService.test.ts index bf3afd32..b2863168 100644 --- a/packages/core/src/services/loopDetectionService.test.ts +++ b/packages/core/src/services/loopDetectionService.test.ts @@ -168,21 +168,21 @@ describe('LoopDetectionService', () => { ); } - service.reset(); + service.reset(''); for (let i = 0; i < CONTENT_LOOP_THRESHOLD + 2; i++) { expect(service.addAndCheck(createContentEvent('obj.method()'))).toBe( false, ); } - service.reset(); + service.reset(''); for (let i = 0; i < CONTENT_LOOP_THRESHOLD + 2; i++) { expect( service.addAndCheck(createContentEvent('arr.filter().map()')), ).toBe(false); } - service.reset(); + service.reset(''); for (let i = 0; i < CONTENT_LOOP_THRESHOLD + 2; i++) { expect( service.addAndCheck( @@ -203,7 +203,7 @@ describe('LoopDetectionService', () => { service.addAndCheck(createContentEvent('This is a sentence.')), ).toBe(true); - service.reset(); + service.reset(''); for (let i = 0; i < CONTENT_LOOP_THRESHOLD - 1; i++) { expect( service.addAndCheck(createContentEvent('Is this a question? ')), @@ -213,7 +213,7 @@ describe('LoopDetectionService', () => { service.addAndCheck(createContentEvent('Is this a question? ')), ).toBe(true); - service.reset(); + service.reset(''); for (let i = 0; i < CONTENT_LOOP_THRESHOLD - 1; i++) { expect( service.addAndCheck(createContentEvent('What excitement!\n')), diff --git a/packages/core/src/services/loopDetectionService.ts b/packages/core/src/services/loopDetectionService.ts index 1c3ea412..85f38c12 100644 --- a/packages/core/src/services/loopDetectionService.ts +++ b/packages/core/src/services/loopDetectionService.ts @@ -50,6 +50,7 @@ const SENTENCE_ENDING_PUNCTUATION_REGEX = /[.!?]+(?=\s|$)/; */ export class LoopDetectionService { private readonly config: Config; + private promptId = ''; // Tool call tracking private lastToolCallKey: string | null = null; @@ -129,7 +130,10 @@ export class LoopDetectionService { if (this.toolCallRepetitionCount >= TOOL_CALL_LOOP_THRESHOLD) { logLoopDetected( this.config, - new LoopDetectedEvent(LoopType.CONSECUTIVE_IDENTICAL_TOOL_CALLS), + new LoopDetectedEvent( + LoopType.CONSECUTIVE_IDENTICAL_TOOL_CALLS, + this.promptId, + ), ); return true; } @@ -170,7 +174,10 @@ export class LoopDetectionService { if (this.sentenceRepetitionCount >= CONTENT_LOOP_THRESHOLD) { logLoopDetected( this.config, - new LoopDetectedEvent(LoopType.CHANTING_IDENTICAL_SENTENCES), + new LoopDetectedEvent( + LoopType.CHANTING_IDENTICAL_SENTENCES, + this.promptId, + ), ); return true; } @@ -234,7 +241,7 @@ Please analyze the conversation history to determine the possibility that the co } logLoopDetected( this.config, - new LoopDetectedEvent(LoopType.LLM_DETECTED_LOOP), + new LoopDetectedEvent(LoopType.LLM_DETECTED_LOOP, this.promptId), ); return true; } else { @@ -251,7 +258,8 @@ Please analyze the conversation history to determine the possibility that the co /** * Resets all loop detection state. */ - reset(): void { + reset(promptId: string): void { + this.promptId = promptId; this.resetToolCallCount(); this.resetSentenceCount(); this.resetLlmCheckTracking(); |
