From 4f8e358a60f0848dd80844b857d1f48651bf8552 Mon Sep 17 00:00:00 2001 From: S4NKALP Date: Sat, 6 Jun 2026 16:45:18 +0545 Subject: [PATCH] feat(devgen/modules): expose max_groups and max_diff_size as CLI override flags - Add CLI flags to override `max_groups` and `max_diff_size` limits - Update file grouping logic to respect override values - Improve truncation logging with configurable size and guidance - Remove unused imports and streamline rich console setup --- devgen/modules/commit_generator.py | 40 ++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/devgen/modules/commit_generator.py b/devgen/modules/commit_generator.py index 6f1c221..c63945c 100644 --- a/devgen/modules/commit_generator.py +++ b/devgen/modules/commit_generator.py @@ -1,11 +1,16 @@ -import sys -import questionary import subprocess +import sys from collections import defaultdict from datetime import datetime from pathlib import Path from typing import Any, Dict, List +import questionary +from rich.console import Console +from rich.markdown import Markdown +from rich.panel import Panel +from rich.theme import Theme + from devgen.ai import generate_with_ai from devgen.utils import ( configure_logger, @@ -13,14 +18,10 @@ from devgen.utils import ( get_commit_dry_run_path, is_file_recent, load_template_env, + render_custom_template, run_git_command, sanitize_ai_commit_message, - render_custom_template, ) -from rich.console import Console -from rich.panel import Panel -from rich.markdown import Markdown -from rich.theme import Theme class CommitEngineError(Exception): @@ -58,6 +59,8 @@ class CommitEngine: provider: str = "gemini", model: str = "gemini-2.5-flash", logger: Any | None = None, + max_groups: int | None = None, + max_diff_size: int | None = None, **kwargs, ): self.dry_run = dry_run @@ -75,6 +78,10 @@ class CommitEngine: self.kwargs = kwargs self.dry_run_path = get_commit_dry_run_path() self.template_env = load_template_env("commit") + # CLI flags take precedence over config. Config can still be consulted + # in group_files / generate_diff when these are None. + self._max_groups_override = max_groups + self._max_diff_size_override = max_diff_size self.console = Console( theme=Theme( @@ -117,7 +124,11 @@ class CommitEngine: def group_files(self, files: List[str]) -> Dict[str, List[str]]: """Groups files by their parent directory with smart merging if limit is exceeded.""" - max_groups = self.config.get("max_groups", 5) + max_groups = ( + self._max_groups_override + if self._max_groups_override is not None + else self.config.get("max_groups", 5) + ) # 1. Initial grouping by immediate parent groups = defaultdict(list) @@ -176,11 +187,18 @@ class CommitEngine: full_content = "\n".join(summary_info + [diff]).strip() # Truncate if too large - if len(full_content) > MAX_DIFF_SIZE: + max_size = ( + self._max_diff_size_override + if self._max_diff_size_override is not None + else self.config.get("max_diff_size", MAX_DIFF_SIZE) + ) + if len(full_content) > max_size: self.logger.info( - f"Truncating diff from {len(full_content)} to {MAX_DIFF_SIZE} chars" + f"Truncating diff from {len(full_content)} to {max_size} chars " + f"(config: max_diff_size). If you still hit token-limit errors, " + f"lower this further or split the commit into more groups." ) - half = MAX_DIFF_SIZE // 2 + half = max_size // 2 return ( full_content[:half] + "\n\n... [DIFF TRUNCATED FOR TOKEN OPTIMIZATION] ...\n\n"