gac 1.13.0__tar.gz → 1.13.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gac might be problematic. Click here for more details.
- {gac-1.13.0 → gac-1.13.1}/PKG-INFO +2 -2
- {gac-1.13.0 → gac-1.13.1}/README.md +1 -1
- {gac-1.13.0 → gac-1.13.1}/src/gac/__version__.py +1 -1
- {gac-1.13.0 → gac-1.13.1}/src/gac/prompt.py +33 -0
- {gac-1.13.0 → gac-1.13.1}/.gitignore +0 -0
- {gac-1.13.0 → gac-1.13.1}/LICENSE +0 -0
- {gac-1.13.0 → gac-1.13.1}/pyproject.toml +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/__init__.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/ai.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/ai_utils.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/cli.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/config.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/config_cli.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/constants.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/diff_cli.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/errors.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/git.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/init_cli.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/main.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/preprocess.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/__init__.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/anthropic.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/cerebras.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/chutes.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/custom_anthropic.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/custom_openai.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/deepseek.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/fireworks.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/gemini.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/groq.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/lmstudio.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/minimax.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/ollama.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/openai.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/openrouter.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/streamlake.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/synthetic.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/together.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/providers/zai.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/security.py +0 -0
- {gac-1.13.0 → gac-1.13.1}/src/gac/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gac
|
|
3
|
-
Version: 1.13.
|
|
3
|
+
Version: 1.13.1
|
|
4
4
|
Summary: LLM-powered Git commit message generator with multi-provider support
|
|
5
5
|
Project-URL: Homepage, https://github.com/cellwebb/gac
|
|
6
6
|
Project-URL: Documentation, https://github.com/cellwebb/gac#readme
|
|
@@ -94,7 +94,7 @@ gac
|
|
|
94
94
|
- **Anthropic** • **Cerebras** • **Chutes.ai** • **DeepSeek** • **Fireworks**
|
|
95
95
|
- **Gemini** • **Groq** • **LM Studio** • **MiniMax** • **Ollama** • **OpenAI**
|
|
96
96
|
- **OpenRouter** • **Streamlake** • **Synthetic.new** • **Together AI**
|
|
97
|
-
- **Z.AI** • **Z.AI Coding** • **Custom
|
|
97
|
+
- **Z.AI** • **Z.AI Coding** • **Custom Endpoints (Anthropic/OpenAI)**
|
|
98
98
|
|
|
99
99
|
### 🧠 **Smart LLM Analysis**
|
|
100
100
|
|
|
@@ -53,7 +53,7 @@ gac
|
|
|
53
53
|
- **Anthropic** • **Cerebras** • **Chutes.ai** • **DeepSeek** • **Fireworks**
|
|
54
54
|
- **Gemini** • **Groq** • **LM Studio** • **MiniMax** • **Ollama** • **OpenAI**
|
|
55
55
|
- **OpenRouter** • **Streamlake** • **Synthetic.new** • **Together AI**
|
|
56
|
-
- **Z.AI** • **Z.AI Coding** • **Custom
|
|
56
|
+
- **Z.AI** • **Z.AI Coding** • **Custom Endpoints (Anthropic/OpenAI)**
|
|
57
57
|
|
|
58
58
|
### 🧠 **Smart LLM Analysis**
|
|
59
59
|
|
|
@@ -454,6 +454,39 @@ def clean_commit_message(message: str) -> str:
|
|
|
454
454
|
"""
|
|
455
455
|
message = message.strip()
|
|
456
456
|
|
|
457
|
+
# Remove <think> tags and their content (some providers like MiniMax include reasoning)
|
|
458
|
+
# Only remove multi-line reasoning blocks, never single-line content that might be descriptions
|
|
459
|
+
# Strategy: Remove blocks that clearly contain internal newlines (multi-line reasoning)
|
|
460
|
+
|
|
461
|
+
# Step 1: Remove multi-line <think>...</think> blocks (those with newlines inside)
|
|
462
|
+
# Pattern: <think> followed by content that includes newlines, ending with </think>
|
|
463
|
+
# This safely distinguishes reasoning from inline mentions like "handle <think> tags"
|
|
464
|
+
# Use negative lookahead to prevent matching across multiple blocks
|
|
465
|
+
while re.search(r"<think>(?:(?!</think>)[^\n])*\n.*?</think>", message, flags=re.DOTALL | re.IGNORECASE):
|
|
466
|
+
message = re.sub(
|
|
467
|
+
r"<think>(?:(?!</think>)[^\n])*\n.*?</think>\s*", "", message, flags=re.DOTALL | re.IGNORECASE, count=1
|
|
468
|
+
)
|
|
469
|
+
|
|
470
|
+
# Step 2: Remove blocks separated by blank lines (before or after the message)
|
|
471
|
+
message = re.sub(r"\n\n+\s*<think>.*?</think>\s*", "", message, flags=re.DOTALL | re.IGNORECASE)
|
|
472
|
+
message = re.sub(r"<think>.*?</think>\s*\n\n+", "", message, flags=re.DOTALL | re.IGNORECASE)
|
|
473
|
+
|
|
474
|
+
# Step 3: Handle orphaned opening <think> tags followed by newline
|
|
475
|
+
message = re.sub(r"<think>\s*\n.*$", "", message, flags=re.DOTALL | re.IGNORECASE)
|
|
476
|
+
|
|
477
|
+
# Step 4: Handle orphaned closing </think> tags at the start (before any conventional prefix)
|
|
478
|
+
conventional_prefixes_pattern = r"(feat|fix|docs|style|refactor|perf|test|build|ci|chore)[\(:)]"
|
|
479
|
+
if re.search(r"^.*?</think>", message, flags=re.DOTALL | re.IGNORECASE):
|
|
480
|
+
prefix_match = re.search(conventional_prefixes_pattern, message, flags=re.IGNORECASE)
|
|
481
|
+
think_match = re.search(r"</think>", message, flags=re.IGNORECASE)
|
|
482
|
+
|
|
483
|
+
if not prefix_match or (think_match and think_match.start() < prefix_match.start()):
|
|
484
|
+
# No prefix or </think> comes before prefix - remove everything up to and including it
|
|
485
|
+
message = re.sub(r"^.*?</think>\s*", "", message, flags=re.DOTALL | re.IGNORECASE)
|
|
486
|
+
|
|
487
|
+
# Step 5: Remove orphaned closing </think> tags at the end (not part of inline mentions)
|
|
488
|
+
message = re.sub(r"</think>\s*$", "", message, flags=re.IGNORECASE)
|
|
489
|
+
|
|
457
490
|
# Remove any markdown code blocks
|
|
458
491
|
message = re.sub(r"```[\w]*\n|```", "", message)
|
|
459
492
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|