commit-maker 0.1.2__tar.gz → 0.2.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.
- {commit_maker-0.1.2/src/commit_maker.egg-info → commit_maker-0.2.1}/PKG-INFO +7 -16
- {commit_maker-0.1.2 → commit_maker-0.2.1}/README.md +2 -10
- {commit_maker-0.1.2 → commit_maker-0.2.1}/pyproject.toml +6 -3
- {commit_maker-0.1.2 → commit_maker-0.2.1}/setup.py +3 -2
- {commit_maker-0.1.2 → commit_maker-0.2.1}/src/commit_maker/main.py +75 -58
- {commit_maker-0.1.2 → commit_maker-0.2.1/src/commit_maker.egg-info}/PKG-INFO +7 -16
- {commit_maker-0.1.2 → commit_maker-0.2.1}/LICENSE +0 -0
- {commit_maker-0.1.2 → commit_maker-0.2.1}/setup.cfg +0 -0
- {commit_maker-0.1.2 → commit_maker-0.2.1}/src/commit_maker/__init__.py +0 -0
- {commit_maker-0.1.2 → commit_maker-0.2.1}/src/commit_maker.egg-info/SOURCES.txt +0 -0
- {commit_maker-0.1.2 → commit_maker-0.2.1}/src/commit_maker.egg-info/dependency_links.txt +0 -0
- {commit_maker-0.1.2 → commit_maker-0.2.1}/src/commit_maker.egg-info/entry_points.txt +0 -0
- {commit_maker-0.1.2 → commit_maker-0.2.1}/src/commit_maker.egg-info/top_level.txt +0 -0
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
2
|
-
Name:
|
|
3
|
-
Version: 0.1
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: commit-maker
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: CLI-утилита для генерации git-коммитов с помощью ИИ
|
|
5
|
+
Home-page: https://github.com/Sashayerty/commit_maker
|
|
5
6
|
Author: Alex Bulgakov
|
|
6
7
|
Author-email: Alex Bulgakov <sashayerty@ya.ru>
|
|
7
8
|
License: MIT
|
|
9
|
+
Project-URL: Homepage, https://github.com/sashayerty/commit_maker
|
|
8
10
|
Requires-Python: >=3.8
|
|
9
11
|
Description-Content-Type: text/markdown
|
|
10
12
|
License-File: LICENSE
|
|
11
|
-
Dynamic: author
|
|
12
|
-
Dynamic: license-file
|
|
13
|
-
Dynamic: requires-python
|
|
14
13
|
|
|
15
|
-
# Commit Maker [](https://www.python.org/) [](https://docs.astral.sh/uv/) [](https://ollama.com/)
|
|
14
|
+
# Commit Maker [](https://www.python.org/) [](https://docs.astral.sh/uv/) [](https://ollama.com/) [](https://pypi.org/project/commit-maker/)
|
|
16
15
|
|
|
17
16
|

|
|
18
17
|
|
|
@@ -92,21 +91,13 @@ pip3 install commit_maker
|
|
|
92
91
|
|
|
93
92
|
## Использование
|
|
94
93
|
|
|
95
|
-
### Windows
|
|
96
|
-
|
|
97
|
-
```cmd
|
|
98
|
-
commit_maker [OPTION] [VALUE]
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Linux/MacOS
|
|
102
|
-
|
|
103
94
|
```bash
|
|
104
95
|
commit_maker [OPTION] [VALUE]
|
|
105
96
|
```
|
|
106
97
|
|
|
107
98
|
### Пример использования
|
|
108
99
|
|
|
109
|
-
**`-h`**, **`--help`** - вывод помощи
|
|
100
|
+
**`-h`**, **`--help`** - вывод помощи
|
|
110
101
|
**`-l`**, **`--local-models`** - использование локальных моделей
|
|
111
102
|
**`-m`**, **`--max-symbols`** - ограничение длины сообщения коммита
|
|
112
103
|
**`-M`**, **`--model`** - какую локальную модель использовать (при **`-l`**)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Commit Maker [](https://www.python.org/) [](https://docs.astral.sh/uv/) [](https://ollama.com/)
|
|
1
|
+
# Commit Maker [](https://www.python.org/) [](https://docs.astral.sh/uv/) [](https://ollama.com/) [](https://pypi.org/project/commit-maker/)
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|
|
|
@@ -78,21 +78,13 @@ pip3 install commit_maker
|
|
|
78
78
|
|
|
79
79
|
## Использование
|
|
80
80
|
|
|
81
|
-
### Windows
|
|
82
|
-
|
|
83
|
-
```cmd
|
|
84
|
-
commit_maker [OPTION] [VALUE]
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### Linux/MacOS
|
|
88
|
-
|
|
89
81
|
```bash
|
|
90
82
|
commit_maker [OPTION] [VALUE]
|
|
91
83
|
```
|
|
92
84
|
|
|
93
85
|
### Пример использования
|
|
94
86
|
|
|
95
|
-
**`-h`**, **`--help`** - вывод помощи
|
|
87
|
+
**`-h`**, **`--help`** - вывод помощи
|
|
96
88
|
**`-l`**, **`--local-models`** - использование локальных моделей
|
|
97
89
|
**`-m`**, **`--max-symbols`** - ограничение длины сообщения коммита
|
|
98
90
|
**`-M`**, **`--model`** - какую локальную модель использовать (при **`-l`**)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
|
-
name = "
|
|
3
|
-
version = "0.1
|
|
2
|
+
name = "commit-maker"
|
|
3
|
+
version = "0.2.1"
|
|
4
4
|
authors = [
|
|
5
5
|
{ name="Alex Bulgakov", email="sashayerty@ya.ru" }
|
|
6
6
|
]
|
|
@@ -11,4 +11,7 @@ requires-python = ">=3.8"
|
|
|
11
11
|
dependencies = []
|
|
12
12
|
|
|
13
13
|
[project.scripts]
|
|
14
|
-
commit_maker = "commit_maker.main:main"
|
|
14
|
+
commit_maker = "commit_maker.main:main"
|
|
15
|
+
|
|
16
|
+
[project.urls]
|
|
17
|
+
Homepage = "https://github.com/sashayerty/commit_maker"
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
from setuptools import find_packages, setup
|
|
2
2
|
|
|
3
3
|
setup(
|
|
4
|
-
name="
|
|
5
|
-
version="0.1
|
|
4
|
+
name="commit-maker",
|
|
5
|
+
version="0.2.1",
|
|
6
6
|
author="Alex Bulgakov",
|
|
7
7
|
author_email="sashayerty@ya.ru",
|
|
8
8
|
description="CLI-утилита для генерации git-коммитов с помощью ИИ",
|
|
@@ -24,4 +24,5 @@ setup(
|
|
|
24
24
|
"License :: OSI Approved :: MIT License",
|
|
25
25
|
"Operating System :: OS Independent",
|
|
26
26
|
],
|
|
27
|
+
url="https://github.com/Sashayerty/commit_maker",
|
|
27
28
|
)
|
|
@@ -9,25 +9,7 @@ import urllib
|
|
|
9
9
|
import urllib.request
|
|
10
10
|
|
|
11
11
|
# Константы
|
|
12
|
-
mistral_api_key = os.environ
|
|
13
|
-
|
|
14
|
-
# Для цветных логов
|
|
15
|
-
COLOR_RED = "\033[31m"
|
|
16
|
-
COLOR_GREEN = "\033[32m"
|
|
17
|
-
COLOR_YELLOW = "\033[33m"
|
|
18
|
-
COLOR_BLUE = "\033[94m"
|
|
19
|
-
COLOR_MAGENTA = "\033[95m"
|
|
20
|
-
COLOR_CYAN = "\033[96m"
|
|
21
|
-
COLOR_RESET = "\033[0m"
|
|
22
|
-
COLORS_DICT = {
|
|
23
|
-
"red": COLOR_RED,
|
|
24
|
-
"green": COLOR_GREEN,
|
|
25
|
-
"yellow": COLOR_YELLOW,
|
|
26
|
-
"blue": COLOR_BLUE,
|
|
27
|
-
"magenta": COLOR_MAGENTA,
|
|
28
|
-
"cyan": COLOR_CYAN,
|
|
29
|
-
"reset": COLOR_RESET,
|
|
30
|
-
}
|
|
12
|
+
mistral_api_key = os.environ.get("MISTRAL_API_KEY")
|
|
31
13
|
|
|
32
14
|
# Парсер параметров
|
|
33
15
|
parser = argparse.ArgumentParser(
|
|
@@ -48,9 +30,9 @@ parser.add_argument(
|
|
|
48
30
|
"-m",
|
|
49
31
|
"--max-symbols",
|
|
50
32
|
type=int,
|
|
51
|
-
default=
|
|
33
|
+
default=200,
|
|
52
34
|
metavar="[max_symbols]",
|
|
53
|
-
help="Длина сообщения коммита. Defaults to
|
|
35
|
+
help="Длина сообщения коммита. Defaults to 200",
|
|
54
36
|
)
|
|
55
37
|
parser.add_argument(
|
|
56
38
|
"-M",
|
|
@@ -67,22 +49,15 @@ parser.add_argument(
|
|
|
67
49
|
help="Запуск с выводом сообщения на основе зайстейдженных "
|
|
68
50
|
"изменений, без создания коммита",
|
|
69
51
|
)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
prompt_for_ai = f"""Привет! Ты составитель коммитов для git.
|
|
80
|
-
Сгенерируй коммит-месседж на РУССКОМ языке, который:
|
|
81
|
-
1. Точно отражает суть изменений
|
|
82
|
-
2. Не превышает {max_symbols} символов
|
|
83
|
-
Опирайся на данные от 'git status' и 'git diff'.
|
|
84
|
-
В ответ на это сообщение тебе нужно предоставить
|
|
85
|
-
ТОЛЬКО коммит. Пиши просто обычный текст, без markdown!"""
|
|
52
|
+
parser.add_argument(
|
|
53
|
+
"-t",
|
|
54
|
+
"--temperature",
|
|
55
|
+
default=1.0,
|
|
56
|
+
type=float,
|
|
57
|
+
help="Температура модели при создании месседжа.\
|
|
58
|
+
Находится на отрезке [0.0, 1.5]. Defaults to 1.0",
|
|
59
|
+
metavar="[temperature]",
|
|
60
|
+
)
|
|
86
61
|
|
|
87
62
|
|
|
88
63
|
# Класс для использования API Mistral AI
|
|
@@ -252,7 +227,22 @@ def colored(
|
|
|
252
227
|
`print(colored(string='Success!', color='green'))` # Выводит 'Success!'
|
|
253
228
|
зеленого цвета
|
|
254
229
|
"""
|
|
255
|
-
|
|
230
|
+
COLOR_RED = "\033[31m"
|
|
231
|
+
COLOR_GREEN = "\033[32m"
|
|
232
|
+
COLOR_YELLOW = "\033[33m"
|
|
233
|
+
COLOR_BLUE = "\033[94m"
|
|
234
|
+
COLOR_MAGENTA = "\033[95m"
|
|
235
|
+
COLOR_CYAN = "\033[96m"
|
|
236
|
+
COLOR_RESET = "\033[0m"
|
|
237
|
+
COLORS_DICT = {
|
|
238
|
+
"red": COLOR_RED,
|
|
239
|
+
"green": COLOR_GREEN,
|
|
240
|
+
"yellow": COLOR_YELLOW,
|
|
241
|
+
"blue": COLOR_BLUE,
|
|
242
|
+
"magenta": COLOR_MAGENTA,
|
|
243
|
+
"cyan": COLOR_CYAN,
|
|
244
|
+
"reset": COLOR_RESET,
|
|
245
|
+
}
|
|
256
246
|
return (
|
|
257
247
|
bold(f"{COLORS_DICT[color]}{string}{COLORS_DICT['reset']}")
|
|
258
248
|
if text_bold
|
|
@@ -264,8 +254,30 @@ def colored(
|
|
|
264
254
|
|
|
265
255
|
|
|
266
256
|
def main() -> None:
|
|
267
|
-
|
|
257
|
+
# Парсинг аргументов
|
|
258
|
+
parsed_args = parser.parse_args()
|
|
259
|
+
use_local_models = parsed_args.local_models
|
|
260
|
+
max_symbols = parsed_args.max_symbols
|
|
261
|
+
model = parsed_args.model
|
|
262
|
+
dry_run = parsed_args.dry_run
|
|
263
|
+
temperature = parsed_args.temperature
|
|
264
|
+
|
|
265
|
+
# Промпт для ИИ
|
|
266
|
+
prompt_for_ai = f"""Привет! Ты составитель коммитов для git.
|
|
267
|
+
Сгенерируй коммит-месседж на РУССКОМ языке, который:
|
|
268
|
+
1. Точно отражает суть изменений
|
|
269
|
+
2. Не превышает {max_symbols} символов
|
|
270
|
+
Опирайся на данные от 'git status' и 'git diff'.
|
|
271
|
+
В ответ на это сообщение тебе нужно предоставить
|
|
272
|
+
ТОЛЬКО коммит. Пиши просто обычный текст, без markdown!"""
|
|
273
|
+
|
|
268
274
|
try:
|
|
275
|
+
if not use_local_models and not mistral_api_key:
|
|
276
|
+
print(
|
|
277
|
+
colored("Не найден MISTRAL_API_KEY для работы с API!", "red")
|
|
278
|
+
)
|
|
279
|
+
return
|
|
280
|
+
|
|
269
281
|
# Получаем версию git, если он есть
|
|
270
282
|
git_version = subprocess.run( # noqa
|
|
271
283
|
["git", "--version"],
|
|
@@ -274,20 +286,23 @@ def main() -> None:
|
|
|
274
286
|
encoding="utf-8",
|
|
275
287
|
).stdout
|
|
276
288
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
289
|
+
if use_local_models:
|
|
290
|
+
# Получаем список моделей из Ollama, если Ollama есть
|
|
291
|
+
ollama_list_of_models = (
|
|
292
|
+
subprocess.run(
|
|
293
|
+
["ollama", "ls"],
|
|
294
|
+
capture_output=True,
|
|
295
|
+
text=True,
|
|
296
|
+
encoding="utf-8",
|
|
297
|
+
)
|
|
298
|
+
.stdout.strip()
|
|
299
|
+
.split("\n")
|
|
284
300
|
)
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
]
|
|
301
|
+
ollama_list_of_models = [
|
|
302
|
+
i.split()[0] for i in ollama_list_of_models[1:]
|
|
303
|
+
]
|
|
304
|
+
else:
|
|
305
|
+
ollama_list_of_models = 0
|
|
291
306
|
|
|
292
307
|
# Обработка отсутствия ollama
|
|
293
308
|
if not ollama_list_of_models and use_local_models:
|
|
@@ -409,8 +424,6 @@ def main() -> None:
|
|
|
409
424
|
):
|
|
410
425
|
subprocess.run(
|
|
411
426
|
["git", "add", "-A"],
|
|
412
|
-
capture_output=True,
|
|
413
|
-
encoding="utf-8",
|
|
414
427
|
)
|
|
415
428
|
else:
|
|
416
429
|
print(
|
|
@@ -464,7 +477,7 @@ def main() -> None:
|
|
|
464
477
|
+ git_status.stdout
|
|
465
478
|
+ "Git diff: "
|
|
466
479
|
+ git_diff.stdout,
|
|
467
|
-
temperature=
|
|
480
|
+
temperature=temperature,
|
|
468
481
|
)
|
|
469
482
|
commit_with_message_from_ai = input(
|
|
470
483
|
"Закоммитить с сообщением "
|
|
@@ -487,7 +500,7 @@ def main() -> None:
|
|
|
487
500
|
+ git_status.stdout
|
|
488
501
|
+ "Git diff: "
|
|
489
502
|
+ git_diff.stdout,
|
|
490
|
-
temperature=
|
|
503
|
+
temperature=temperature,
|
|
491
504
|
)
|
|
492
505
|
print(
|
|
493
506
|
colored(
|
|
@@ -527,8 +540,6 @@ def main() -> None:
|
|
|
527
540
|
(
|
|
528
541
|
subprocess.run(
|
|
529
542
|
["git", "add", "-A"],
|
|
530
|
-
capture_output=True,
|
|
531
|
-
encoding="utf-8",
|
|
532
543
|
),
|
|
533
544
|
subprocess.run(
|
|
534
545
|
[
|
|
@@ -548,6 +559,12 @@ def main() -> None:
|
|
|
548
559
|
== "y"
|
|
549
560
|
else None
|
|
550
561
|
)
|
|
562
|
+
except FileNotFoundError as e:
|
|
563
|
+
print(
|
|
564
|
+
colored("Ollama не установлена!", "red")
|
|
565
|
+
if "ollama" in str(e)
|
|
566
|
+
else colored(str(e), "red")
|
|
567
|
+
)
|
|
551
568
|
except Exception as e:
|
|
552
569
|
print(colored("Ошибка:", "red") + " " + str(e))
|
|
553
570
|
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
2
|
-
Name:
|
|
3
|
-
Version: 0.1
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: commit-maker
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: CLI-утилита для генерации git-коммитов с помощью ИИ
|
|
5
|
+
Home-page: https://github.com/Sashayerty/commit_maker
|
|
5
6
|
Author: Alex Bulgakov
|
|
6
7
|
Author-email: Alex Bulgakov <sashayerty@ya.ru>
|
|
7
8
|
License: MIT
|
|
9
|
+
Project-URL: Homepage, https://github.com/sashayerty/commit_maker
|
|
8
10
|
Requires-Python: >=3.8
|
|
9
11
|
Description-Content-Type: text/markdown
|
|
10
12
|
License-File: LICENSE
|
|
11
|
-
Dynamic: author
|
|
12
|
-
Dynamic: license-file
|
|
13
|
-
Dynamic: requires-python
|
|
14
13
|
|
|
15
|
-
# Commit Maker [](https://www.python.org/) [](https://docs.astral.sh/uv/) [](https://ollama.com/)
|
|
14
|
+
# Commit Maker [](https://www.python.org/) [](https://docs.astral.sh/uv/) [](https://ollama.com/) [](https://pypi.org/project/commit-maker/)
|
|
16
15
|
|
|
17
16
|

|
|
18
17
|
|
|
@@ -92,21 +91,13 @@ pip3 install commit_maker
|
|
|
92
91
|
|
|
93
92
|
## Использование
|
|
94
93
|
|
|
95
|
-
### Windows
|
|
96
|
-
|
|
97
|
-
```cmd
|
|
98
|
-
commit_maker [OPTION] [VALUE]
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Linux/MacOS
|
|
102
|
-
|
|
103
94
|
```bash
|
|
104
95
|
commit_maker [OPTION] [VALUE]
|
|
105
96
|
```
|
|
106
97
|
|
|
107
98
|
### Пример использования
|
|
108
99
|
|
|
109
|
-
**`-h`**, **`--help`** - вывод помощи
|
|
100
|
+
**`-h`**, **`--help`** - вывод помощи
|
|
110
101
|
**`-l`**, **`--local-models`** - использование локальных моделей
|
|
111
102
|
**`-m`**, **`--max-symbols`** - ограничение длины сообщения коммита
|
|
112
103
|
**`-M`**, **`--model`** - какую локальную модель использовать (при **`-l`**)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|