From 48781272ee32bfbeba58ca3275de4180ac945188 Mon Sep 17 00:00:00 2001 From: Taylor Mullen Date: Sun, 25 May 2025 13:59:05 -0700 Subject: [PATCH] Trim edits if possible. - Since we're now LLM correcting a lot of problematic edits we need to also potentially trim bad edits (llms have a bad habbit of adding whitespace places). Part of https://github.com/google-gemini/gemini-cli/issues/484 --- packages/server/src/utils/editCorrector.ts | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/packages/server/src/utils/editCorrector.ts b/packages/server/src/utils/editCorrector.ts index 477b2381..a17de6d4 100644 --- a/packages/server/src/utils/editCorrector.ts +++ b/packages/server/src/utils/editCorrector.ts @@ -136,6 +136,14 @@ export async function ensureCorrectEdit( } } + const { targetString, pair } = trimPairIfPossible( + finalOldString, + finalNewString, + currentContent, + ); + finalOldString = targetString; + finalNewString = pair; + // Final result construction const result: CorrectedEditResult = { params: { @@ -359,6 +367,33 @@ Return ONLY the corrected string in the specified JSON format with the key 'corr } } +function trimPairIfPossible( + target: string, + trimIfTargetTrims: string, + currentContent: string, +) { + const trimmedTargetString = target.trim(); + if (target.length !== trimmedTargetString.length) { + const trimmedTargetOccurrences = countOccurrences( + currentContent, + trimmedTargetString, + ); + + if (trimmedTargetOccurrences === 1) { + const trimmedReactiveString = trimIfTargetTrims.trim(); + return { + targetString: trimmedTargetString, + pair: trimmedReactiveString, + }; + } + } + + return { + targetString: target, + pair: trimIfTargetTrims, + }; +} + /** * Unescapes a string that might have been overly escaped by an LLM. */