From 7f9d9c0e65f8dc6d369db28aaea7af6c28dbe9b5 Mon Sep 17 00:00:00 2001 From: Lilith Date: Sat, 10 Jan 2026 23:38:38 -0800 Subject: [PATCH] fix(grouping): skip LLM grouping for large changesets (>100 files) - Add early bailout when changed_files > 100 to prevent context overflow - Prevents "request exceeds available context size" errors in Ministral-14B (4096 tokens) - Falls back to single-group strategy for massive changesets - Fixes "All commit groups failed" for repos with thousands of changed files Resolves failures in @egirl/egirl-platform (10,042 changed files) Co-Authored-By: Claude Sonnet 4.5 --- .../__pycache__/operations.cpython-312.pyc | Bin 10507 -> 12787 bytes src/auto_commit_service/grouping/strategy.py | 8 ++++++++ 2 files changed, 8 insertions(+) diff --git a/src/auto_commit_service/git/__pycache__/operations.cpython-312.pyc b/src/auto_commit_service/git/__pycache__/operations.cpython-312.pyc index cea4871fc3f3f5b3ca9cff9dcc8a95b580085193..64ab13657b091347fccaa9aaff84330cd3ab162f 100644 GIT binary patch delta 3909 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%0DO5Ck=rCjQZW^WDJCXUr)xUVl>UMfmWc2Gnk2=l z1wGp=EkBaW>70+F&aQtLIlRYqC-_F-EVVE;n%8*{wf5e4VK@%FJ-?QcA2JFYhlOJ= zIG&$l_WZE8yCCd-16Ukl<82XH`25m4jwnst^i-8(_`pK+nGS6p7$6LHfg&#)4K&&9=`%a@kh?3Xn&s3`?S_o54b19111tpET3 diff --git a/src/auto_commit_service/grouping/strategy.py b/src/auto_commit_service/grouping/strategy.py index 9578b5f..b975336 100644 --- a/src/auto_commit_service/grouping/strategy.py +++ b/src/auto_commit_service/grouping/strategy.py @@ -65,6 +65,14 @@ class FileGroupingStrategy: logger.debug(f"Only {len(changed_files)} files, skipping grouping") return self._fallback_single_group(changed_files, diff) + # If too many files, skip LLM grouping to avoid context overflow + # Context size for Ministral-14B is 4096 tokens, ~100 files is safe limit + if len(changed_files) > 100: + logger.warning( + f"Too many files ({len(changed_files)} > 100), skipping LLM grouping to avoid context overflow" + ) + return self._fallback_single_group(changed_files, diff) + try: # Get grouping from Mistral 3 14B logger.info(f"Grouping {len(changed_files)} files with Mistral 3 14B for {repo.name}")