gitai-local 1.3.0__tar.gz → 1.3.2__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.
- {gitai_local-1.3.0 → gitai_local-1.3.2}/PKG-INFO +33 -6
- {gitai_local-1.3.0 → gitai_local-1.3.2}/README.md +32 -5
- {gitai_local-1.3.0 → gitai_local-1.3.2}/gitai/config.py +10 -22
- {gitai_local-1.3.0 → gitai_local-1.3.2}/gitai/llm_client.py +5 -4
- {gitai_local-1.3.0 → gitai_local-1.3.2}/gitai/main.py +28 -6
- {gitai_local-1.3.0 → gitai_local-1.3.2}/gitai_local.egg-info/PKG-INFO +33 -6
- {gitai_local-1.3.0 → gitai_local-1.3.2}/pyproject.toml +1 -1
- {gitai_local-1.3.0 → gitai_local-1.3.2}/LICENSE +0 -0
- {gitai_local-1.3.0 → gitai_local-1.3.2}/gitai/__init__.py +0 -0
- {gitai_local-1.3.0 → gitai_local-1.3.2}/gitai_local.egg-info/SOURCES.txt +0 -0
- {gitai_local-1.3.0 → gitai_local-1.3.2}/gitai_local.egg-info/dependency_links.txt +0 -0
- {gitai_local-1.3.0 → gitai_local-1.3.2}/gitai_local.egg-info/entry_points.txt +0 -0
- {gitai_local-1.3.0 → gitai_local-1.3.2}/gitai_local.egg-info/requires.txt +0 -0
- {gitai_local-1.3.0 → gitai_local-1.3.2}/gitai_local.egg-info/top_level.txt +0 -0
- {gitai_local-1.3.0 → gitai_local-1.3.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gitai-local
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.2
|
|
4
4
|
Summary: AI-powered conventional commit message generator running 100% locally
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Homepage, https://github.com/PabloSalinasDev/GitAI-CLI
|
|
@@ -64,7 +64,7 @@ The benefit of implementing this CLI is twofold:
|
|
|
64
64
|
3. After staging changes, run `gitai`. It feeds the diff (or initial commit context) into the model and proposes a commit message.
|
|
65
65
|
4. At the end of your session, run `gitai out` to stop the daemon and free RAM.
|
|
66
66
|
|
|
67
|
-
###
|
|
67
|
+
### Interactive Help & Documentation Access
|
|
68
68
|
|
|
69
69
|
GitAI CLI features a native, robust command-line validation and help module. If you ever need a quick reminder of the available architecture commands, explicit routing links, or want to report a technical issue, you can invoke the user manual directly from your shell.
|
|
70
70
|
|
|
@@ -206,9 +206,9 @@ Based on extensive stress-testing on standard consumer hardware (e.g., Intel i7
|
|
|
206
206
|
|
|
207
207
|
| Hardware Profile | Context Size | Estimated Time * | Commit Accuracy |
|
|
208
208
|
|------------------|--------------|------------------|-----------------|
|
|
209
|
-
| **Modern Desktop / Laptop**<br>*(Ryzen 5/7, Core i5/i7 11th+ Gen, DDR5)* | Small to Large Diffs | **~8 – 20 seconds** | ~
|
|
210
|
-
| **Older / Standard Hardware**<br>*(Legacy Intel i7, DDR4 @ 2400MHz)* | Small to Medium Diffs | **~20 – 40 seconds** | ~
|
|
211
|
-
| **Stress Test / Massive Changes**<br>*(Legacy Hardware + Dense Diffs)* | Large Multi-file Diffs | **~40 – 70 seconds** | ~
|
|
209
|
+
| **Modern Desktop / Laptop**<br>*(Ryzen 5/7, Core i5/i7 11th+ Gen, DDR5)* | Small to Large Diffs | **~8 – 20 seconds** | ~90% |
|
|
210
|
+
| **Older / Standard Hardware**<br>*(Legacy Intel i7, DDR4 @ 2400MHz)* | Small to Medium Diffs | **~20 – 40 seconds** | ~90% |
|
|
211
|
+
| **Stress Test / Massive Changes**<br>*(Legacy Hardware + Dense Diffs)* | Large Multi-file Diffs | **~40 – 70 seconds** | ~85% |
|
|
212
212
|
|
|
213
213
|
> **Note on Performance:** Times are heavily bound to RAM clock speed and single-core efficiency. A dense, multi-file diff analyzed on legacy hardware might occasionally touch the upper boundary of the stress test zone. However, GitAI's built-in traffic manager ensures payloads remain strictly bounded to keep local execution controlled and predictable.
|
|
214
214
|
|
|
@@ -218,7 +218,7 @@ Based on extensive stress-testing on standard consumer hardware (e.g., Intel i7
|
|
|
218
218
|
|
|
219
219
|
Why are these times so consistent? GitAI does not just dump raw data into the LLM. It includes a custom pre-processing pipeline that strips out compiler noise, binary files, white spaces, and structural brackets before sending the payload.
|
|
220
220
|
|
|
221
|
-
* **Linear vs. Deductive Processing:** Testing proved that sending a complete, clean code block up to 2500 characters is significantly faster than truncating it too early. By providing the model with full, clean context, the LLM processes the data linearly instead of wasting CPU cycles trying to "guess" missing code structures. This balance cuts down processing overhead by up to
|
|
221
|
+
* **Linear vs. Deductive Processing:** Testing proved that sending a complete, clean code block up to 2500 characters is significantly faster than truncating it too early. By providing the model with full, clean context, the LLM processes the data linearly instead of wasting CPU cycles trying to "guess" missing code structures. This balance cuts down processing overhead by up to 40 seconds on older machines while boosting commit accuracy to a staggering **85%**.
|
|
222
222
|
|
|
223
223
|
## Dependencies
|
|
224
224
|
|
|
@@ -231,6 +231,33 @@ Why are these times so consistent? GitAI does not just dump raw data into the LL
|
|
|
231
231
|
|
|
232
232
|
---
|
|
233
233
|
|
|
234
|
+
## Privacy & Security
|
|
235
|
+
|
|
236
|
+
GitAI is designed with a strict privacy-first architecture:
|
|
237
|
+
|
|
238
|
+
* **100% Local Execution:** All prompt processing and commit analysis run entirely on your local CPU/GPU using `llama.cpp` bindings.
|
|
239
|
+
* **Zero Telemetry:** The CLI collects no analytics, logs, or usage metrics.
|
|
240
|
+
* **Air-Gapped Friendly:** Once the GGUF model is downloaded, no internet connection is required to generate commits or run commands.
|
|
241
|
+
* **No Code Exposure:** Your repository diffs and code never leave your machine or hit external APIs.
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Uninstallation
|
|
246
|
+
|
|
247
|
+
To completely remove GitAI and delete the downloaded local model weights (~4.7 GB):
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# 1. Delete the local model cache
|
|
251
|
+
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\gitai" # Windows
|
|
252
|
+
|
|
253
|
+
# 2. Uninstall the package
|
|
254
|
+
pipx uninstall gitai-local # If installed via pipx (README instructions)
|
|
255
|
+
# or
|
|
256
|
+
pip uninstall gitai-local # If installed via standard pip (PyPI default)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
234
261
|
## License
|
|
235
262
|
|
|
236
263
|
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
|
|
@@ -43,7 +43,7 @@ The benefit of implementing this CLI is twofold:
|
|
|
43
43
|
3. After staging changes, run `gitai`. It feeds the diff (or initial commit context) into the model and proposes a commit message.
|
|
44
44
|
4. At the end of your session, run `gitai out` to stop the daemon and free RAM.
|
|
45
45
|
|
|
46
|
-
###
|
|
46
|
+
### Interactive Help & Documentation Access
|
|
47
47
|
|
|
48
48
|
GitAI CLI features a native, robust command-line validation and help module. If you ever need a quick reminder of the available architecture commands, explicit routing links, or want to report a technical issue, you can invoke the user manual directly from your shell.
|
|
49
49
|
|
|
@@ -185,9 +185,9 @@ Based on extensive stress-testing on standard consumer hardware (e.g., Intel i7
|
|
|
185
185
|
|
|
186
186
|
| Hardware Profile | Context Size | Estimated Time * | Commit Accuracy |
|
|
187
187
|
|------------------|--------------|------------------|-----------------|
|
|
188
|
-
| **Modern Desktop / Laptop**<br>*(Ryzen 5/7, Core i5/i7 11th+ Gen, DDR5)* | Small to Large Diffs | **~8 – 20 seconds** | ~
|
|
189
|
-
| **Older / Standard Hardware**<br>*(Legacy Intel i7, DDR4 @ 2400MHz)* | Small to Medium Diffs | **~20 – 40 seconds** | ~
|
|
190
|
-
| **Stress Test / Massive Changes**<br>*(Legacy Hardware + Dense Diffs)* | Large Multi-file Diffs | **~40 – 70 seconds** | ~
|
|
188
|
+
| **Modern Desktop / Laptop**<br>*(Ryzen 5/7, Core i5/i7 11th+ Gen, DDR5)* | Small to Large Diffs | **~8 – 20 seconds** | ~90% |
|
|
189
|
+
| **Older / Standard Hardware**<br>*(Legacy Intel i7, DDR4 @ 2400MHz)* | Small to Medium Diffs | **~20 – 40 seconds** | ~90% |
|
|
190
|
+
| **Stress Test / Massive Changes**<br>*(Legacy Hardware + Dense Diffs)* | Large Multi-file Diffs | **~40 – 70 seconds** | ~85% |
|
|
191
191
|
|
|
192
192
|
> **Note on Performance:** Times are heavily bound to RAM clock speed and single-core efficiency. A dense, multi-file diff analyzed on legacy hardware might occasionally touch the upper boundary of the stress test zone. However, GitAI's built-in traffic manager ensures payloads remain strictly bounded to keep local execution controlled and predictable.
|
|
193
193
|
|
|
@@ -197,7 +197,7 @@ Based on extensive stress-testing on standard consumer hardware (e.g., Intel i7
|
|
|
197
197
|
|
|
198
198
|
Why are these times so consistent? GitAI does not just dump raw data into the LLM. It includes a custom pre-processing pipeline that strips out compiler noise, binary files, white spaces, and structural brackets before sending the payload.
|
|
199
199
|
|
|
200
|
-
* **Linear vs. Deductive Processing:** Testing proved that sending a complete, clean code block up to 2500 characters is significantly faster than truncating it too early. By providing the model with full, clean context, the LLM processes the data linearly instead of wasting CPU cycles trying to "guess" missing code structures. This balance cuts down processing overhead by up to
|
|
200
|
+
* **Linear vs. Deductive Processing:** Testing proved that sending a complete, clean code block up to 2500 characters is significantly faster than truncating it too early. By providing the model with full, clean context, the LLM processes the data linearly instead of wasting CPU cycles trying to "guess" missing code structures. This balance cuts down processing overhead by up to 40 seconds on older machines while boosting commit accuracy to a staggering **85%**.
|
|
201
201
|
|
|
202
202
|
## Dependencies
|
|
203
203
|
|
|
@@ -210,6 +210,33 @@ Why are these times so consistent? GitAI does not just dump raw data into the LL
|
|
|
210
210
|
|
|
211
211
|
---
|
|
212
212
|
|
|
213
|
+
## Privacy & Security
|
|
214
|
+
|
|
215
|
+
GitAI is designed with a strict privacy-first architecture:
|
|
216
|
+
|
|
217
|
+
* **100% Local Execution:** All prompt processing and commit analysis run entirely on your local CPU/GPU using `llama.cpp` bindings.
|
|
218
|
+
* **Zero Telemetry:** The CLI collects no analytics, logs, or usage metrics.
|
|
219
|
+
* **Air-Gapped Friendly:** Once the GGUF model is downloaded, no internet connection is required to generate commits or run commands.
|
|
220
|
+
* **No Code Exposure:** Your repository diffs and code never leave your machine or hit external APIs.
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Uninstallation
|
|
225
|
+
|
|
226
|
+
To completely remove GitAI and delete the downloaded local model weights (~4.7 GB):
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# 1. Delete the local model cache
|
|
230
|
+
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\gitai" # Windows
|
|
231
|
+
|
|
232
|
+
# 2. Uninstall the package
|
|
233
|
+
pipx uninstall gitai-local # If installed via pipx (README instructions)
|
|
234
|
+
# or
|
|
235
|
+
pip uninstall gitai-local # If installed via standard pip (PyPI default)
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
213
240
|
## License
|
|
214
241
|
|
|
215
242
|
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
|
|
@@ -33,7 +33,7 @@ def ensure_model():
|
|
|
33
33
|
print(Fore.CYAN + "│ GitAI - First run: downloading AI model │")
|
|
34
34
|
print(Fore.CYAN + "│ AI Model Setup - one time only │")
|
|
35
35
|
print(Fore.CYAN + "│ │")
|
|
36
|
-
print(Fore.CYAN + "│ Developed by PyBloSoft © 2026 - Ver. 1.3.
|
|
36
|
+
print(Fore.CYAN + "│ Developed by PyBloSoft © 2026 - Ver. 1.3.2 │")
|
|
37
37
|
print(Fore.CYAN + "└─────────────────────────────────────────────┘\n")
|
|
38
38
|
|
|
39
39
|
MODEL_DIR.mkdir(parents=True, exist_ok=True)
|
|
@@ -50,25 +50,27 @@ def ensure_model():
|
|
|
50
50
|
|
|
51
51
|
def print_progress(pct, d_gb, t_gb):
|
|
52
52
|
bar_len = 30
|
|
53
|
-
filled
|
|
54
|
-
bar
|
|
55
|
-
|
|
53
|
+
filled = int(bar_len * pct)
|
|
54
|
+
bar = "█" * filled + "░" * (bar_len - filled)
|
|
55
|
+
|
|
56
|
+
line = f"\r\033[K[{bar}] {pct*100:.1f}% {d_gb:.2f}/{t_gb:.2f} GB"
|
|
57
|
+
sys.stdout.write(Fore.YELLOW + line + Style.RESET_ALL)
|
|
58
|
+
sys.stdout.flush()
|
|
56
59
|
|
|
57
|
-
f = None
|
|
58
60
|
try:
|
|
59
61
|
with open(tmp_path, "wb") as f:
|
|
60
62
|
with httpx.stream("GET", MODEL_URL, follow_redirects=True, timeout=None) as r:
|
|
61
63
|
r.raise_for_status()
|
|
62
|
-
total
|
|
64
|
+
total = int(r.headers.get("content-length", 0))
|
|
63
65
|
downloaded = 0
|
|
64
66
|
|
|
65
67
|
for chunk in r.iter_bytes(chunk_size=1024 * 256):
|
|
66
68
|
f.write(chunk)
|
|
67
69
|
downloaded += len(chunk)
|
|
68
70
|
if total:
|
|
69
|
-
pct
|
|
71
|
+
pct = downloaded / total
|
|
70
72
|
d_gb = downloaded / 1_073_741_824
|
|
71
|
-
t_gb = total
|
|
73
|
+
t_gb = total / 1_073_741_824
|
|
72
74
|
print_progress(pct, d_gb, t_gb)
|
|
73
75
|
|
|
74
76
|
sys.stdout.write("\033[?25h")
|
|
@@ -78,13 +80,6 @@ def ensure_model():
|
|
|
78
80
|
print(Fore.GREEN + "\n\n Model downloaded successfully.\n")
|
|
79
81
|
|
|
80
82
|
except KeyboardInterrupt:
|
|
81
|
-
|
|
82
|
-
if f and not f.closed:
|
|
83
|
-
try:
|
|
84
|
-
f.close()
|
|
85
|
-
except Exception:
|
|
86
|
-
pass
|
|
87
|
-
|
|
88
83
|
sys.stdout.write("\033[?25h")
|
|
89
84
|
sys.stdout.flush()
|
|
90
85
|
|
|
@@ -98,13 +93,6 @@ def ensure_model():
|
|
|
98
93
|
os._exit(1)
|
|
99
94
|
|
|
100
95
|
except Exception as e:
|
|
101
|
-
|
|
102
|
-
if f and not f.closed:
|
|
103
|
-
try:
|
|
104
|
-
f.close()
|
|
105
|
-
except Exception:
|
|
106
|
-
pass
|
|
107
|
-
|
|
108
96
|
sys.stdout.write("\033[?25h")
|
|
109
97
|
sys.stdout.flush()
|
|
110
98
|
|
|
@@ -10,7 +10,6 @@ import threading
|
|
|
10
10
|
from colorama import init, Fore, Style
|
|
11
11
|
|
|
12
12
|
from gitai.config import MODEL_PATH, PORT
|
|
13
|
-
import __main__
|
|
14
13
|
|
|
15
14
|
init(autoreset=True)
|
|
16
15
|
|
|
@@ -112,14 +111,16 @@ def clean_git_diff(raw_diff, max_estimated=2500, debug=True):
|
|
|
112
111
|
percent = 95
|
|
113
112
|
|
|
114
113
|
filled_length = int(bar_length * percent // 100)
|
|
115
|
-
bar =
|
|
114
|
+
bar = '█' * filled_length + '░' * (bar_length - filled_length)
|
|
116
115
|
|
|
117
|
-
|
|
116
|
+
line = f"\r\033[K Crunching diff: [{bar}] {percent:.0f}%"
|
|
117
|
+
sys.stdout.write(Fore.YELLOW + line + Style.RESET_ALL)
|
|
118
118
|
sys.stdout.flush()
|
|
119
119
|
time.sleep(0.2)
|
|
120
120
|
|
|
121
121
|
bar_final = '█' * bar_length
|
|
122
|
-
|
|
122
|
+
final_line = f"\r\033[K Crunching diff: [{bar_final}] 100%\n\n"
|
|
123
|
+
sys.stdout.write(Fore.YELLOW + final_line + Style.RESET_ALL)
|
|
123
124
|
sys.stdout.flush()
|
|
124
125
|
|
|
125
126
|
finally:
|
|
@@ -7,6 +7,18 @@ from gitai.llm_client import start_daemon, stop_daemon, generate_commit_message
|
|
|
7
7
|
|
|
8
8
|
init(autoreset=True)
|
|
9
9
|
|
|
10
|
+
def is_git_repo():
|
|
11
|
+
result = subprocess.run(
|
|
12
|
+
["git", "rev-parse", "--is-inside-work-tree"],
|
|
13
|
+
capture_output=True,
|
|
14
|
+
text=True,
|
|
15
|
+
check=False,
|
|
16
|
+
encoding="utf-8",
|
|
17
|
+
errors="replace",
|
|
18
|
+
env=get_secure_env()
|
|
19
|
+
)
|
|
20
|
+
return result.returncode == 0
|
|
21
|
+
|
|
10
22
|
def is_initial_commit():
|
|
11
23
|
result = subprocess.run(
|
|
12
24
|
["git", "rev-parse", "HEAD"],
|
|
@@ -82,21 +94,27 @@ def run_commit(message):
|
|
|
82
94
|
|
|
83
95
|
def print_help():
|
|
84
96
|
"""Print the user manual integrated directly into the terminal with web access."""
|
|
85
|
-
|
|
86
|
-
print(Fore.CYAN + "
|
|
87
|
-
print(Fore.CYAN + "
|
|
88
|
-
print(Fore.CYAN + "
|
|
97
|
+
|
|
98
|
+
print(Fore.CYAN + "═"*86)
|
|
99
|
+
print(Fore.CYAN + " GitAI CLI - Offline Privacy-First Commit Generator")
|
|
100
|
+
print(Fore.CYAN + " Developed by PyBloSoft © 2026 - Ver. 1.3.2")
|
|
101
|
+
print(Fore.CYAN + "═"*86)
|
|
89
102
|
print("Usage:")
|
|
90
103
|
print(f" gitai {Style.DIM}Analyze staged changes and generate a conventional commit.{Style.RESET_ALL}")
|
|
91
104
|
print(f" gitai init {Style.DIM}Download and configure the local LLM engine weights.{Style.RESET_ALL}")
|
|
92
105
|
print(f" gitai start {Style.DIM}Launch the background daemon and prime the prompt cache.{Style.RESET_ALL}")
|
|
93
106
|
print(f" gitai out {Style.DIM}Stop the background daemon session and free system RAM.{Style.RESET_ALL}")
|
|
94
107
|
print(f" gitai help {Style.DIM}Show this user manual screen.{Style.RESET_ALL}")
|
|
95
|
-
print(Fore.CYAN + "─"*
|
|
108
|
+
print(Fore.CYAN + "─"*86)
|
|
109
|
+
print("Privacy & Security Guarantees:")
|
|
110
|
+
print(f" • {Fore.GREEN}100% Local Inference:{Style.RESET_ALL} Runs entirely on your CPU/RAM using local GGUF weights.")
|
|
111
|
+
print(f" • {Fore.GREEN}Zero Telemetry:{Style.RESET_ALL} No internet connection required, no tracking, no data collection.")
|
|
112
|
+
print(f" • {Fore.GREEN}Air-Gapped Ready:{Style.RESET_ALL} Your source code and diffs never leave this machine.")
|
|
113
|
+
print(Fore.CYAN + "─"*86)
|
|
96
114
|
print("Links & Support:")
|
|
97
115
|
print(f" • Documentation: {Fore.BLUE}https://github.com/PabloSalinasDev/GitAI-CLI#readme{Style.RESET_ALL}")
|
|
98
116
|
print(f" • Report an Issue: {Fore.BLUE}https://github.com/PabloSalinasDev/GitAI-CLI/issues{Style.RESET_ALL}")
|
|
99
|
-
print(Fore.CYAN + "═"*
|
|
117
|
+
print(Fore.CYAN + "═"*86 + "\n")
|
|
100
118
|
|
|
101
119
|
def main():
|
|
102
120
|
args = sys.argv[1:]
|
|
@@ -109,6 +127,10 @@ def main():
|
|
|
109
127
|
|
|
110
128
|
# 2. START LOGICAL DAY: gitai start (Check local language and raise the model)
|
|
111
129
|
if args and args[0] == "start":
|
|
130
|
+
if not is_git_repo():
|
|
131
|
+
print(Fore.RED + " Error: this directory is not a git repository.")
|
|
132
|
+
print(Fore.CYAN + " Run 'git init' first.")
|
|
133
|
+
return
|
|
112
134
|
if not model_exists():
|
|
113
135
|
print(Fore.CYAN + " Model file not found. Run 'gitai init' first to download it.")
|
|
114
136
|
return
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gitai-local
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.2
|
|
4
4
|
Summary: AI-powered conventional commit message generator running 100% locally
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Homepage, https://github.com/PabloSalinasDev/GitAI-CLI
|
|
@@ -64,7 +64,7 @@ The benefit of implementing this CLI is twofold:
|
|
|
64
64
|
3. After staging changes, run `gitai`. It feeds the diff (or initial commit context) into the model and proposes a commit message.
|
|
65
65
|
4. At the end of your session, run `gitai out` to stop the daemon and free RAM.
|
|
66
66
|
|
|
67
|
-
###
|
|
67
|
+
### Interactive Help & Documentation Access
|
|
68
68
|
|
|
69
69
|
GitAI CLI features a native, robust command-line validation and help module. If you ever need a quick reminder of the available architecture commands, explicit routing links, or want to report a technical issue, you can invoke the user manual directly from your shell.
|
|
70
70
|
|
|
@@ -206,9 +206,9 @@ Based on extensive stress-testing on standard consumer hardware (e.g., Intel i7
|
|
|
206
206
|
|
|
207
207
|
| Hardware Profile | Context Size | Estimated Time * | Commit Accuracy |
|
|
208
208
|
|------------------|--------------|------------------|-----------------|
|
|
209
|
-
| **Modern Desktop / Laptop**<br>*(Ryzen 5/7, Core i5/i7 11th+ Gen, DDR5)* | Small to Large Diffs | **~8 – 20 seconds** | ~
|
|
210
|
-
| **Older / Standard Hardware**<br>*(Legacy Intel i7, DDR4 @ 2400MHz)* | Small to Medium Diffs | **~20 – 40 seconds** | ~
|
|
211
|
-
| **Stress Test / Massive Changes**<br>*(Legacy Hardware + Dense Diffs)* | Large Multi-file Diffs | **~40 – 70 seconds** | ~
|
|
209
|
+
| **Modern Desktop / Laptop**<br>*(Ryzen 5/7, Core i5/i7 11th+ Gen, DDR5)* | Small to Large Diffs | **~8 – 20 seconds** | ~90% |
|
|
210
|
+
| **Older / Standard Hardware**<br>*(Legacy Intel i7, DDR4 @ 2400MHz)* | Small to Medium Diffs | **~20 – 40 seconds** | ~90% |
|
|
211
|
+
| **Stress Test / Massive Changes**<br>*(Legacy Hardware + Dense Diffs)* | Large Multi-file Diffs | **~40 – 70 seconds** | ~85% |
|
|
212
212
|
|
|
213
213
|
> **Note on Performance:** Times are heavily bound to RAM clock speed and single-core efficiency. A dense, multi-file diff analyzed on legacy hardware might occasionally touch the upper boundary of the stress test zone. However, GitAI's built-in traffic manager ensures payloads remain strictly bounded to keep local execution controlled and predictable.
|
|
214
214
|
|
|
@@ -218,7 +218,7 @@ Based on extensive stress-testing on standard consumer hardware (e.g., Intel i7
|
|
|
218
218
|
|
|
219
219
|
Why are these times so consistent? GitAI does not just dump raw data into the LLM. It includes a custom pre-processing pipeline that strips out compiler noise, binary files, white spaces, and structural brackets before sending the payload.
|
|
220
220
|
|
|
221
|
-
* **Linear vs. Deductive Processing:** Testing proved that sending a complete, clean code block up to 2500 characters is significantly faster than truncating it too early. By providing the model with full, clean context, the LLM processes the data linearly instead of wasting CPU cycles trying to "guess" missing code structures. This balance cuts down processing overhead by up to
|
|
221
|
+
* **Linear vs. Deductive Processing:** Testing proved that sending a complete, clean code block up to 2500 characters is significantly faster than truncating it too early. By providing the model with full, clean context, the LLM processes the data linearly instead of wasting CPU cycles trying to "guess" missing code structures. This balance cuts down processing overhead by up to 40 seconds on older machines while boosting commit accuracy to a staggering **85%**.
|
|
222
222
|
|
|
223
223
|
## Dependencies
|
|
224
224
|
|
|
@@ -231,6 +231,33 @@ Why are these times so consistent? GitAI does not just dump raw data into the LL
|
|
|
231
231
|
|
|
232
232
|
---
|
|
233
233
|
|
|
234
|
+
## Privacy & Security
|
|
235
|
+
|
|
236
|
+
GitAI is designed with a strict privacy-first architecture:
|
|
237
|
+
|
|
238
|
+
* **100% Local Execution:** All prompt processing and commit analysis run entirely on your local CPU/GPU using `llama.cpp` bindings.
|
|
239
|
+
* **Zero Telemetry:** The CLI collects no analytics, logs, or usage metrics.
|
|
240
|
+
* **Air-Gapped Friendly:** Once the GGUF model is downloaded, no internet connection is required to generate commits or run commands.
|
|
241
|
+
* **No Code Exposure:** Your repository diffs and code never leave your machine or hit external APIs.
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Uninstallation
|
|
246
|
+
|
|
247
|
+
To completely remove GitAI and delete the downloaded local model weights (~4.7 GB):
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# 1. Delete the local model cache
|
|
251
|
+
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\gitai" # Windows
|
|
252
|
+
|
|
253
|
+
# 2. Uninstall the package
|
|
254
|
+
pipx uninstall gitai-local # If installed via pipx (README instructions)
|
|
255
|
+
# or
|
|
256
|
+
pip uninstall gitai-local # If installed via standard pip (PyPI default)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
234
261
|
## License
|
|
235
262
|
|
|
236
263
|
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|