gac 0.15.3__py3-none-any.whl → 0.16.1__py3-none-any.whl

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/__version__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """Version information for gac package."""
2
2
 
3
- __version__ = "0.15.3"
3
+ __version__ = "0.16.1"
gac/ai.py CHANGED
@@ -28,10 +28,7 @@ def count_tokens(content: str | list[dict[str, str]] | dict[str, Any], model: st
28
28
  if model.startswith("anthropic"):
29
29
  import anthropic
30
30
 
31
- return anthropic.Client().messages.count_tokens(
32
- model=model,
33
- messages=[{"role": "user", "content": text}],
34
- )
31
+ return anthropic.Client().count_tokens(text)
35
32
 
36
33
  try:
37
34
  encoding = get_encoding(model)
gac/config.py CHANGED
@@ -12,12 +12,18 @@ from gac.constants import EnvDefaults, Logging
12
12
 
13
13
 
14
14
  def load_config() -> dict[str, str | int | float | bool]:
15
- """Load configuration from $HOME/.gac.env, then ./.env, then environment variables."""
15
+ """Load configuration from $HOME/.gac.env, then ./.gac.env or ./.env, then environment variables."""
16
16
  user_config = Path.home() / ".gac.env"
17
17
  if user_config.exists():
18
18
  load_dotenv(user_config)
19
+
20
+ # Check for both .gac.env and .env in project directory
21
+ project_gac_env = Path(".gac.env")
19
22
  project_env = Path(".env")
20
- if project_env.exists():
23
+
24
+ if project_gac_env.exists():
25
+ load_dotenv(project_gac_env, override=True)
26
+ elif project_env.exists():
21
27
  load_dotenv(project_env, override=True)
22
28
 
23
29
  config = {
gac/diff_cli.py CHANGED
@@ -28,7 +28,11 @@ import click
28
28
 
29
29
  from gac.errors import GitError, with_error_handling
30
30
  from gac.git import get_diff, get_staged_files
31
- from gac.preprocess import filter_binary_and_minified, smart_truncate_diff, split_diff_into_sections
31
+ from gac.preprocess import (
32
+ filter_binary_and_minified,
33
+ smart_truncate_diff,
34
+ split_diff_into_sections,
35
+ )
32
36
  from gac.utils import print_message, setup_logging
33
37
 
34
38
 
gac/init_cli.py CHANGED
@@ -21,7 +21,8 @@ def init() -> None:
21
21
 
22
22
  providers = [
23
23
  ("Anthropic", "claude-3-5-haiku-latest"),
24
- ("Groq", "meta-llama/llama-4-scout-17b-16e-instruct"),
24
+ ("Cerebras", "qwen-3-coder-480b"),
25
+ ("Groq", "meta-llama/llama-4-maverick-17b-128e-instruct"),
25
26
  ("Ollama", "gemma3"),
26
27
  ("OpenAI", "gpt-4.1-mini"),
27
28
  ]
gac/main.py CHANGED
@@ -209,6 +209,7 @@ def main(
209
209
  console.print("[green]Commit created successfully[/green]")
210
210
  except AIError as e:
211
211
  logger.error(str(e))
212
+ console = Console()
212
213
  console.print(f"[red]Failed to generate commit message: {str(e)}[/red]")
213
214
  sys.exit(1)
214
215
 
gac/preprocess.py CHANGED
@@ -11,7 +11,12 @@ import os
11
11
  import re
12
12
 
13
13
  from gac.ai import count_tokens
14
- from gac.constants import CodePatternImportance, FilePatterns, FileTypeImportance, Utility
14
+ from gac.constants import (
15
+ CodePatternImportance,
16
+ FilePatterns,
17
+ FileTypeImportance,
18
+ Utility,
19
+ )
15
20
 
16
21
  logger = logging.getLogger(__name__)
17
22
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gac
3
- Version: 0.15.3
3
+ Version: 0.16.1
4
4
  Summary: AI-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
@@ -23,6 +23,7 @@ Requires-Python: >=3.10
23
23
  Requires-Dist: aisuite
24
24
  Requires-Dist: anthropic
25
25
  Requires-Dist: black
26
+ Requires-Dist: cerebras-cloud-sdk
26
27
  Requires-Dist: click
27
28
  Requires-Dist: docstring-parser
28
29
  Requires-Dist: groq
@@ -47,7 +48,7 @@ Description-Content-Type: text/markdown
47
48
 
48
49
  <!-- markdownlint-disable MD013 -->
49
50
 
50
- # gac (Git Auto Commit)
51
+ # Git Auto Commit (gac)
51
52
 
52
53
  [![PyPI version](https://img.shields.io/pypi/v/gac.svg)](https://pypi.org/project/gac/)
53
54
  [![Python](https://img.shields.io/badge/python-3.10%20|%203.11%20|%203.12%20|%203.13-blue.svg)](https://www.python.org/downloads/)
@@ -61,7 +62,7 @@ Description-Content-Type: text/markdown
61
62
 
62
63
  - **AI-Powered Commit Messages:** Automatically generates clear, concise, and context-aware commit messages using large language models.
63
64
  - **Deep Contextual Analysis:** Understands your code by analyzing staged changes, repository structure, and recent commit history to provide highly relevant suggestions.
64
- - **Multi-Provider & Model Support:** Flexibly works with various leading AI providers (like Anthropic, Groq, OpenAI) and models, easily configured through an interactive setup or environment variables.
65
+ - **Multi-Provider & Model Support:** Flexibly works with various leading AI providers (like Anthropic, Cerebras, Groq, OpenAI) and models, easily configured through an interactive setup or environment variables.
65
66
  - **Seamless Git Workflow:** Integrates smoothly into your existing Git routine as a simple drop-in replacement for `git commit`.
66
67
  - **Extensive Customization:** Tailor commit messages to your needs with a rich set of flags, including one-liners (`-o`), AI hints (`-h`), commit scope (`-s`), and specific model selection (`-m`).
67
68
  - **Streamlined Workflow Commands:** Boost your productivity with convenient options to stage all changes (`-a`), auto-confirm commits (`-y`), and push to your remote repository (`-p`) in a single step.
@@ -85,6 +86,24 @@ gac
85
86
 
86
87
  ### 1. Installation
87
88
 
89
+ #### Quick Try with uvx (no installation)
90
+
91
+ You can try gac without installing it using uvx:
92
+
93
+ ```sh
94
+ # Try gac without installation
95
+ uvx gac --help
96
+
97
+ # Set up configuration (creates ~/.gac.env)
98
+ uvx gac init
99
+
100
+ # Use gac on staged changes
101
+ git add .
102
+ uvx gac
103
+ ```
104
+
105
+ #### Permanent Installation
106
+
88
107
  Install system-wide using pipx from the GitHub repository:
89
108
 
90
109
  ```sh
@@ -93,7 +112,7 @@ python3 -m pip install --user pipx
93
112
  python3 -m pipx ensurepath
94
113
 
95
114
  # Install gac
96
- pipx install git+https://github.com/cellwebb/gac.git
115
+ pipx install gac
97
116
  ```
98
117
 
99
118
  Verify installation:
@@ -200,5 +219,3 @@ This project is licensed under the MIT License. See [LICENSE](LICENSE) for detai
200
219
  ## Community & Support
201
220
 
202
221
  For questions, suggestions, or support, please open an issue or discussion on GitHub.
203
-
204
- _Brought to you by [Criteria](https://criteria.dev)_
@@ -0,0 +1,20 @@
1
+ gac/__init__.py,sha256=z9yGInqtycFIT3g1ca24r-A3699hKVaRqGUI79wsmMc,415
2
+ gac/__version__.py,sha256=Nn6L3pp556ky75qbTLQD6rcOsZBm0606HEo_QVleOxQ,67
3
+ gac/ai.py,sha256=kxZ0UMU_2i9Vb2fXKAUcuFCeZJAZ9G8OSjgTVF06h-Y,5452
4
+ gac/cli.py,sha256=UCGaKpGrm8B603V04yMYGkfv9S5-CksSy7zzeqwp13s,4280
5
+ gac/config.py,sha256=7gyD4dDZhb_xL0gjOxfA3cqmz-5LwaMUT3MCTAPBjug,1330
6
+ gac/config_cli.py,sha256=v9nFHZO1RvK9fzHyuUS6SG-BCLHMsdOMDwWamBhVVh4,1608
7
+ gac/constants.py,sha256=gcygNGl4I48vYtuhpdCFKnYRjhxcRWMQYCerxPq0wCY,4731
8
+ gac/diff_cli.py,sha256=wnVQ9OFGnM0d2Pj9WVjWbo0jxqIuRHVAwmb8wU9Pa3E,5676
9
+ gac/errors.py,sha256=3vIRMQ2QF3sP9_rPfXAFuu5ZSjIVX4FxM-FAuiR8N-8,7416
10
+ gac/git.py,sha256=ZdEvq5ssJw-EncQi_PnAevF9WZoVz7or4AwSJHbMFMs,5181
11
+ gac/init_cli.py,sha256=aNllguofrcLn0ML9tzLVWFkPbwlAvCM9m7undHhMLEo,1825
12
+ gac/main.py,sha256=_BX_B9Denex9MwceT1udBQjzoMLLD2czU8TlHvPRE80,9520
13
+ gac/preprocess.py,sha256=4igtZ9OTHgTpqwlJmbcGaqzmdD0HHCZJwsZ9eG118Gk,15360
14
+ gac/prompt.py,sha256=mgKcSuhs0VKXznkcEbPXGia_Mgz66NtYMlJPLVLH6jg,13779
15
+ gac/utils.py,sha256=koJNQ4FXUTitnKQ7hC_9sPudLi_BSOpcryYsz5n_z-Q,3973
16
+ gac-0.16.1.dist-info/METADATA,sha256=h5IDdn0PVx1EINVixoJlsmzRjuza3lCTilxFNM0h41U,7569
17
+ gac-0.16.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
18
+ gac-0.16.1.dist-info/entry_points.txt,sha256=tdjN-XMmcWfL92swuRAjT62bFLOAwk9bTMRLGP5Z4aI,36
19
+ gac-0.16.1.dist-info/licenses/LICENSE,sha256=s11puNmYfzwoSwG96nhOJe268Y1QFckr8-Hmzo3_eJE,1087
20
+ gac-0.16.1.dist-info/RECORD,,
@@ -1,20 +0,0 @@
1
- gac/__init__.py,sha256=z9yGInqtycFIT3g1ca24r-A3699hKVaRqGUI79wsmMc,415
2
- gac/__version__.py,sha256=0isu-ofNCUw5VnZXA_poaM4iqOw8mecRahb1INUDHmA,67
3
- gac/ai.py,sha256=Ijpgcp1L_SJy37Q3p3leSFMXST6RNWruUEsYlkoz-XM,5549
4
- gac/cli.py,sha256=UCGaKpGrm8B603V04yMYGkfv9S5-CksSy7zzeqwp13s,4280
5
- gac/config.py,sha256=9-llgaRMzL2qtH5nmoRGtgpUw7IJg143jWDcppmYcSA,1128
6
- gac/config_cli.py,sha256=v9nFHZO1RvK9fzHyuUS6SG-BCLHMsdOMDwWamBhVVh4,1608
7
- gac/constants.py,sha256=gcygNGl4I48vYtuhpdCFKnYRjhxcRWMQYCerxPq0wCY,4731
8
- gac/diff_cli.py,sha256=GVegRNB1a4D-wUOtVlb6Q_6sXbj4kD2Yt-H4r2sRHxc,5659
9
- gac/errors.py,sha256=3vIRMQ2QF3sP9_rPfXAFuu5ZSjIVX4FxM-FAuiR8N-8,7416
10
- gac/git.py,sha256=ZdEvq5ssJw-EncQi_PnAevF9WZoVz7or4AwSJHbMFMs,5181
11
- gac/init_cli.py,sha256=s6nB4k__6Da7Ljq4MB9-rlrcTxB6Nt82OMDKk0pZP-M,1778
12
- gac/main.py,sha256=yll8TzauryYLkQHiVuu3Bfh0nb3tzbPrLmtvQo2FkPM,9492
13
- gac/preprocess.py,sha256=UwcijCKjfuqGeeMRR1yd3FWLdX-uHjb8UIwxjxpbEpo,15339
14
- gac/prompt.py,sha256=mgKcSuhs0VKXznkcEbPXGia_Mgz66NtYMlJPLVLH6jg,13779
15
- gac/utils.py,sha256=koJNQ4FXUTitnKQ7hC_9sPudLi_BSOpcryYsz5n_z-Q,3973
16
- gac-0.15.3.dist-info/METADATA,sha256=65JoNst-RcRMLF3ecnrvISWmUD4k2aPSxAzwg6AMxFU,7331
17
- gac-0.15.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
18
- gac-0.15.3.dist-info/entry_points.txt,sha256=tdjN-XMmcWfL92swuRAjT62bFLOAwk9bTMRLGP5Z4aI,36
19
- gac-0.15.3.dist-info/licenses/LICENSE,sha256=s11puNmYfzwoSwG96nhOJe268Y1QFckr8-Hmzo3_eJE,1087
20
- gac-0.15.3.dist-info/RECORD,,
File without changes