gac 1.10.3__tar.gz → 1.11.0__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.10.3 → gac-1.11.0}/PKG-INFO +2 -2
- {gac-1.10.3 → gac-1.11.0}/README.md +1 -1
- {gac-1.10.3 → gac-1.11.0}/src/gac/__version__.py +1 -1
- {gac-1.10.3 → gac-1.11.0}/src/gac/ai.py +2 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/ai_utils.py +1 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/init_cli.py +1 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/__init__.py +2 -0
- gac-1.11.0/src/gac/providers/minimax.py +38 -0
- {gac-1.10.3 → gac-1.11.0}/.gitignore +0 -0
- {gac-1.10.3 → gac-1.11.0}/LICENSE +0 -0
- {gac-1.10.3 → gac-1.11.0}/pyproject.toml +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/__init__.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/cli.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/config.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/config_cli.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/constants.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/diff_cli.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/errors.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/git.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/main.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/preprocess.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/prompt.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/anthropic.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/cerebras.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/chutes.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/fireworks.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/gemini.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/groq.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/lmstudio.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/ollama.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/openai.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/openrouter.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/streamlake.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/synthetic.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/together.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/providers/zai.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/security.py +0 -0
- {gac-1.10.3 → gac-1.11.0}/src/gac/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gac
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.11.0
|
|
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
|
|
@@ -92,7 +92,7 @@ gac
|
|
|
92
92
|
### 🌐 **Supported Providers**
|
|
93
93
|
|
|
94
94
|
- **Anthropic** • **Cerebras** • **Chutes.ai** • **Fireworks** • **Gemini**
|
|
95
|
-
- **Groq** • **LM Studio** • **Ollama** • **OpenAI** • **OpenRouter**
|
|
95
|
+
- **Groq** • **LM Studio** • **Minimax** • **Ollama** • **OpenAI** • **OpenRouter**
|
|
96
96
|
- **Streamlake** • **Synthetic.new** • **Together AI** • **Z.AI** • **Z.AI Coding**
|
|
97
97
|
|
|
98
98
|
### 🧠 **Smart LLM Analysis**
|
|
@@ -51,7 +51,7 @@ gac
|
|
|
51
51
|
### 🌐 **Supported Providers**
|
|
52
52
|
|
|
53
53
|
- **Anthropic** • **Cerebras** • **Chutes.ai** • **Fireworks** • **Gemini**
|
|
54
|
-
- **Groq** • **LM Studio** • **Ollama** • **OpenAI** • **OpenRouter**
|
|
54
|
+
- **Groq** • **LM Studio** • **Minimax** • **Ollama** • **OpenAI** • **OpenRouter**
|
|
55
55
|
- **Streamlake** • **Synthetic.new** • **Together AI** • **Z.AI** • **Z.AI Coding**
|
|
56
56
|
|
|
57
57
|
### 🧠 **Smart LLM Analysis**
|
|
@@ -17,6 +17,7 @@ from gac.providers import (
|
|
|
17
17
|
call_gemini_api,
|
|
18
18
|
call_groq_api,
|
|
19
19
|
call_lmstudio_api,
|
|
20
|
+
call_minimax_api,
|
|
20
21
|
call_ollama_api,
|
|
21
22
|
call_openai_api,
|
|
22
23
|
call_openrouter_api,
|
|
@@ -86,6 +87,7 @@ def generate_commit_message(
|
|
|
86
87
|
"gemini": call_gemini_api,
|
|
87
88
|
"groq": call_groq_api,
|
|
88
89
|
"lm-studio": call_lmstudio_api,
|
|
90
|
+
"minimax": call_minimax_api,
|
|
89
91
|
"ollama": call_ollama_api,
|
|
90
92
|
"openai": call_openai_api,
|
|
91
93
|
"openrouter": call_openrouter_api,
|
|
@@ -39,6 +39,7 @@ def init() -> None:
|
|
|
39
39
|
("Gemini", "gemini-2.5-flash"),
|
|
40
40
|
("Groq", "meta-llama/llama-4-maverick-17b-128e-instruct"),
|
|
41
41
|
("LM Studio", "gemma3"),
|
|
42
|
+
("Minimax", "MiniMax-M2"),
|
|
42
43
|
("Ollama", "gemma3"),
|
|
43
44
|
("OpenAI", "gpt-4.1-mini"),
|
|
44
45
|
("OpenRouter", "openrouter/auto"),
|
|
@@ -7,6 +7,7 @@ from .fireworks import call_fireworks_api
|
|
|
7
7
|
from .gemini import call_gemini_api
|
|
8
8
|
from .groq import call_groq_api
|
|
9
9
|
from .lmstudio import call_lmstudio_api
|
|
10
|
+
from .minimax import call_minimax_api
|
|
10
11
|
from .ollama import call_ollama_api
|
|
11
12
|
from .openai import call_openai_api
|
|
12
13
|
from .openrouter import call_openrouter_api
|
|
@@ -23,6 +24,7 @@ __all__ = [
|
|
|
23
24
|
"call_gemini_api",
|
|
24
25
|
"call_groq_api",
|
|
25
26
|
"call_lmstudio_api",
|
|
27
|
+
"call_minimax_api",
|
|
26
28
|
"call_ollama_api",
|
|
27
29
|
"call_openai_api",
|
|
28
30
|
"call_openrouter_api",
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Minimax API provider for gac."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
import httpx
|
|
6
|
+
|
|
7
|
+
from gac.errors import AIError
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def call_minimax_api(model: str, messages: list[dict], temperature: float, max_tokens: int) -> str:
|
|
11
|
+
"""Call Minimax API directly."""
|
|
12
|
+
api_key = os.getenv("MINIMAX_API_KEY")
|
|
13
|
+
if not api_key:
|
|
14
|
+
raise AIError.authentication_error("MINIMAX_API_KEY not found in environment variables")
|
|
15
|
+
|
|
16
|
+
url = "https://api.minimax.io/v1/chat/completions"
|
|
17
|
+
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
|
|
18
|
+
|
|
19
|
+
data = {"model": model, "messages": messages, "temperature": temperature, "max_tokens": max_tokens}
|
|
20
|
+
|
|
21
|
+
try:
|
|
22
|
+
response = httpx.post(url, headers=headers, json=data, timeout=120)
|
|
23
|
+
response.raise_for_status()
|
|
24
|
+
response_data = response.json()
|
|
25
|
+
content = response_data["choices"][0]["message"]["content"]
|
|
26
|
+
if content is None:
|
|
27
|
+
raise AIError.model_error("Minimax API returned null content")
|
|
28
|
+
if content == "":
|
|
29
|
+
raise AIError.model_error("Minimax API returned empty content")
|
|
30
|
+
return content
|
|
31
|
+
except httpx.HTTPStatusError as e:
|
|
32
|
+
if e.response.status_code == 429:
|
|
33
|
+
raise AIError.rate_limit_error(f"Minimax API rate limit exceeded: {e.response.text}") from e
|
|
34
|
+
raise AIError.model_error(f"Minimax API error: {e.response.status_code} - {e.response.text}") from e
|
|
35
|
+
except httpx.TimeoutException as e:
|
|
36
|
+
raise AIError.timeout_error(f"Minimax API request timed out: {str(e)}") from e
|
|
37
|
+
except Exception as e:
|
|
38
|
+
raise AIError.model_error(f"Error calling Minimax API: {str(e)}") from e
|
|
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
|