pygpt-net 2.7.0__py3-none-any.whl → 2.7.2__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.
Files changed (37) hide show
  1. pygpt_net/CHANGELOG.txt +14 -0
  2. pygpt_net/__init__.py +3 -3
  3. pygpt_net/controller/ctx/ctx.py +4 -1
  4. pygpt_net/controller/painter/common.py +43 -11
  5. pygpt_net/core/filesystem/filesystem.py +70 -0
  6. pygpt_net/core/filesystem/packer.py +161 -1
  7. pygpt_net/core/image/image.py +2 -2
  8. pygpt_net/core/platforms/platforms.py +14 -1
  9. pygpt_net/core/updater/updater.py +24 -12
  10. pygpt_net/core/video/video.py +2 -3
  11. pygpt_net/data/config/config.json +3 -3
  12. pygpt_net/data/config/models.json +3 -3
  13. pygpt_net/data/css/style.dark.css +13 -6
  14. pygpt_net/data/css/style.light.css +13 -5
  15. pygpt_net/data/locale/locale.de.ini +2 -0
  16. pygpt_net/data/locale/locale.en.ini +2 -0
  17. pygpt_net/data/locale/locale.es.ini +2 -0
  18. pygpt_net/data/locale/locale.fr.ini +2 -0
  19. pygpt_net/data/locale/locale.it.ini +2 -0
  20. pygpt_net/data/locale/locale.pl.ini +3 -1
  21. pygpt_net/data/locale/locale.uk.ini +2 -0
  22. pygpt_net/data/locale/locale.zh.ini +2 -0
  23. pygpt_net/provider/core/config/patch.py +16 -0
  24. pygpt_net/ui/dialog/preset.py +1 -0
  25. pygpt_net/ui/layout/toolbox/image.py +2 -1
  26. pygpt_net/ui/layout/toolbox/indexes.py +2 -0
  27. pygpt_net/ui/layout/toolbox/video.py +5 -1
  28. pygpt_net/ui/main.py +1 -0
  29. pygpt_net/ui/widget/dialog/update.py +18 -7
  30. pygpt_net/ui/widget/draw/painter.py +238 -51
  31. pygpt_net/ui/widget/filesystem/explorer.py +82 -0
  32. pygpt_net/ui/widget/option/combo.py +179 -13
  33. {pygpt_net-2.7.0.dist-info → pygpt_net-2.7.2.dist-info}/METADATA +44 -4
  34. {pygpt_net-2.7.0.dist-info → pygpt_net-2.7.2.dist-info}/RECORD +37 -37
  35. {pygpt_net-2.7.0.dist-info → pygpt_net-2.7.2.dist-info}/LICENSE +0 -0
  36. {pygpt_net-2.7.0.dist-info → pygpt_net-2.7.2.dist-info}/WHEEL +0 -0
  37. {pygpt_net-2.7.0.dist-info → pygpt_net-2.7.2.dist-info}/entry_points.txt +0 -0
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.7.0",
4
- "app.version": "2.7.0",
5
- "updated_at": "2025-12-28T00:00:00"
3
+ "version": "2.7.2",
4
+ "app.version": "2.7.2",
5
+ "updated_at": "2025-12-29T00:00:00"
6
6
  },
7
7
  "items": {
8
8
  "SpeakLeash/bielik-11b-v2.3-instruct:Q4_K_M": {
@@ -179,16 +179,15 @@ NodeEditor {{
179
179
  /* ComboBox */
180
180
  QComboBox QAbstractItemView {{
181
181
  border: 1px solid rgba(0,0,0,0.18);
182
- border-radius: 0;
183
- outline: 0;
184
182
  }}
185
183
 
186
184
  QListView#ComboPopupList {{
187
- border-radius: 0;
188
- outline: 0;
185
+ border-radius: 10px;
186
+ background: #1f2123;
187
+ border: 2px solid #4f5b62;
189
188
  }}
190
189
 
191
- QComboBox QAbstractItemView::item,
190
+ QComboBox[name="SearchableCombo"] QAbstractItemView::item,
192
191
  QListView#ComboPopupList::item {{
193
192
  min-height: 20px;
194
193
  padding: 8px 33px;
@@ -212,4 +211,12 @@ QListView#ComboPopupList::item:disabled {{
212
211
 
213
212
  QComboBox QAbstractItemView::item:hover,
214
213
  QListView#ComboPopupList::item:hover {{ }}
215
- QListView#ComboPopupList > QWidget#ComboPopupViewport {{ }}
214
+
215
+ QWidget#ComboPopupWindow {{
216
+ background: transparent;
217
+ border: 0;
218
+ }}
219
+ QListView#ComboPopupList > QWidget#ComboPopupViewport {{
220
+ background: transparent;
221
+ border-radius: 0px;
222
+ }}
@@ -294,17 +294,18 @@ NodeEditor {{
294
294
 
295
295
  /* ComboBox */
296
296
  QComboBox QAbstractItemView {{
297
- border: 1px solid rgba(0,0,0,0.18);
298
- border-radius: 0;
297
+ border: 0px;
298
+ border-radius: 10px;
299
299
  outline: 0;
300
300
  }}
301
301
 
302
302
  QListView#ComboPopupList {{
303
- border-radius: 0;
303
+ border-radius: 10px;
304
304
  outline: 0;
305
+ border: 0px solid #d6d6d6;
305
306
  }}
306
307
 
307
- QComboBox QAbstractItemView::item,
308
+ QComboBox[name="SearchableCombo"] QAbstractItemView::item,
308
309
  QListView#ComboPopupList::item {{
309
310
  min-height: 20px;
310
311
  padding: 8px 32px;
@@ -328,4 +329,11 @@ QListView#ComboPopupList::item:disabled {{
328
329
 
329
330
  QComboBox QAbstractItemView::item:hover,
330
331
  QListView#ComboPopupList::item:hover {{ }}
331
- QListView#ComboPopupList > QWidget#ComboPopupViewport {{ }}
332
+ QWidget#ComboPopupWindow {{
333
+ background: red;
334
+ border: 0;
335
+ }}
336
+ QListView#ComboPopupList > QWidget#ComboPopupViewport {{
337
+ background: red;
338
+ border-radius: 10px;
339
+ }}
@@ -38,6 +38,7 @@ action.open_dir_src = Quellverzeichnis öffnen
38
38
  action.open_dir_storage = Speicherverzeichnis öffnen
39
39
  action.open_new_tab = In neuem Tab öffnen
40
40
  action.open_new_window = Öffnen (neues Fenster)
41
+ action.pack = Einpacken
41
42
  action.paste = Einfügen
42
43
  action.pin = Oben anheften
43
44
  action.preview = Vorschau
@@ -66,6 +67,7 @@ action.tab.move.right = In die rechte Spalte verschieben
66
67
  action.touch = Datei erstellen...
67
68
  action.truncate = Alles löschen
68
69
  action.undo = Rückgängig
70
+ action.unpack = Auspacken
69
71
  action.unpin = Loslösen
70
72
  action.upload = Dateien hier hochladen...
71
73
  action.use = Verwenden
@@ -38,6 +38,7 @@ action.open_dir_src = Open Source Directory
38
38
  action.open_dir_storage = Open Storage directory
39
39
  action.open_new_tab = Open in a new tab
40
40
  action.open_new_window = Open (new window)
41
+ action.pack = Pack
41
42
  action.paste = Paste
42
43
  action.pin = Pin on top
43
44
  action.preview = Preview
@@ -66,6 +67,7 @@ action.tab.move.right = Move to right column
66
67
  action.touch = Create file...
67
68
  action.truncate = Truncate
68
69
  action.undo = Undo
70
+ action.unpack = Unpack
69
71
  action.unpin = Unpin
70
72
  action.upload = Upload files here...
71
73
  action.use = Use
@@ -38,6 +38,7 @@ action.open_dir_src = Abrir directorio fuente
38
38
  action.open_dir_storage = Abrir directorio de almacenamiento
39
39
  action.open_new_tab = Abrir en una nueva pestaña
40
40
  action.open_new_window = Abrir (nueva ventana)
41
+ action.pack = Empaquetar
41
42
  action.paste = Pegar
42
43
  action.pin = Fijar en la parte superior
43
44
  action.preview = Vista previa
@@ -66,6 +67,7 @@ action.tab.move.right = Mover a la columna derecha
66
67
  action.touch = Crear archivo...
67
68
  action.truncate = Borrar todo
68
69
  action.undo = Deshacer
70
+ action.unpack = Desempaquetar
69
71
  action.unpin = Desanclar
70
72
  action.upload = Sube archivos aquí...
71
73
  action.use = Usar
@@ -38,6 +38,7 @@ action.open_dir_src = Ouvrir le répertoire source
38
38
  action.open_dir_storage = Ouvrir le répertoire de stockage
39
39
  action.open_new_tab = Ouvrir dans un nouvel onglet
40
40
  action.open_new_window = Ouvrir (nouvelle fenêtre)
41
+ action.pack = Emballer
41
42
  action.paste = Coller
42
43
  action.pin = Épingler en haut
43
44
  action.preview = Aperçu
@@ -66,6 +67,7 @@ action.tab.move.right = Déplacer vers la colonne de droite
66
67
  action.touch = Créer un fichier...
67
68
  action.truncate = Tout effacer
68
69
  action.undo = Annuler
70
+ action.unpack = Déballer
69
71
  action.unpin = Détacher
70
72
  action.upload = Téléchargez des fichiers ici...
71
73
  action.use = Utiliser
@@ -38,6 +38,7 @@ action.open_dir_src = Apri la cartella sorgente
38
38
  action.open_dir_storage = Apri la cartella di archiviazione
39
39
  action.open_new_tab = Apri in una nuova scheda
40
40
  action.open_new_window = Apri (nuova finestra)
41
+ action.pack = Imballare
41
42
  action.paste = Incolla
42
43
  action.pin = Fissa in alto
43
44
  action.preview = Anteprima
@@ -66,6 +67,7 @@ action.tab.move.right = Sposta nella colonna di destra
66
67
  action.touch = Crea file...
67
68
  action.truncate = Cancellare tutto
68
69
  action.undo = Annulla
70
+ action.unpack = Scartare
69
71
  action.unpin = Sgancia
70
72
  action.upload = Carica file qui...
71
73
  action.use = Usa
@@ -27,7 +27,7 @@ action.group.new = Nowa grupa
27
27
  action.group.remove = Usuń z grupy
28
28
  action.idx = Indeksuj w LlamaIndex...
29
29
  action.idx.remove = Usuń z
30
- action.import = Importuj
30
+ action.import = Importuj
31
31
  action.mkdir = Utwórz katalog...
32
32
  action.move_to = Przenieś do
33
33
  action.new = Nowy...
@@ -38,6 +38,7 @@ action.open_dir_src = Otwórz katalog źródłowy
38
38
  action.open_dir_storage = Otwórz katalog magazynowy
39
39
  action.open_new_tab = Otwórz w nowej karcie
40
40
  action.open_new_window = Otwórz (w nowym oknie)
41
+ action.pack = Spakuj
41
42
  action.paste = Wklej
42
43
  action.pin = Przypnij na górze
43
44
  action.preview = Podgląd
@@ -66,6 +67,7 @@ action.tab.move.right = Przenieś do prawej kolumny
66
67
  action.touch = Utwórz plik...
67
68
  action.truncate = Wyczyść wszystko
68
69
  action.undo = Cofnij
70
+ action.unpack = Rozpakuj
69
71
  action.unpin = Odepnij
70
72
  action.upload = Prześlij tutaj pliki...
71
73
  action.use = Użyj
@@ -38,6 +38,7 @@ action.open_dir_src = Відкрити вихідний каталог
38
38
  action.open_dir_storage = Відкрити каталог зберігання
39
39
  action.open_new_tab = Відкрити у новій вкладці
40
40
  action.open_new_window = Відкрити (нове вікно)
41
+ action.pack = Запакувати
41
42
  action.paste = Вставити
42
43
  action.pin = Прикріпити зверху
43
44
  action.preview = Попередній перегляд
@@ -66,6 +67,7 @@ action.tab.move.right = Перемістити в праву колонку
66
67
  action.touch = Створити файл...
67
68
  action.truncate = Очистити все
68
69
  action.undo = Скасувати
70
+ action.unpack = Розпакувати
69
71
  action.unpin = Відкріпити
70
72
  action.upload = Завантажте файли тут...
71
73
  action.use = Використовуйте
@@ -38,6 +38,7 @@ action.open_dir_src = 打开源目录
38
38
  action.open_dir_storage = 打开存储目录
39
39
  action.open_new_tab = 在新标签页中打开
40
40
  action.open_new_window = 打开(新窗口)
41
+ action.pack = 打包
41
42
  action.paste = 粘贴
42
43
  action.pin = 置頂
43
44
  action.preview = 预览
@@ -66,6 +67,7 @@ action.tab.move.right = 移到右列
66
67
  action.touch = 創建文件...
67
68
  action.truncate = 截斷
68
69
  action.undo = 撤銷
70
+ action.unpack = 解压
69
71
  action.unpin = 取消置頂
70
72
  action.upload = 在這裡上傳文件...
71
73
  action.use = 使用
@@ -191,6 +191,22 @@ class Patch:
191
191
  patch_css('style.dark.css', True)
192
192
  updated = True
193
193
 
194
+ # < 2.7.1
195
+ if old < parse_version("2.7.1"):
196
+ print("Migrating config from < 2.7.1...")
197
+ # update: combo boxes css
198
+ patch_css('style.light.css', True)
199
+ patch_css('style.dark.css', True)
200
+ updated = True
201
+
202
+ # < 2.7.2
203
+ if old < parse_version("2.7.2"):
204
+ print("Migrating config from < 2.7.2...")
205
+ # fix: combo boxes css width
206
+ patch_css('style.light.css', True)
207
+ patch_css('style.dark.css', True)
208
+ updated = True
209
+
194
210
  # update file
195
211
  migrated = False
196
212
  if updated:
@@ -258,6 +258,7 @@ class Preset(BaseConfigDialog):
258
258
  personalize_rows.addWidget(self.window.ui.nodes['preset.editor.avatar'])
259
259
  personalize_rows.addStretch(1)
260
260
  personalize_rows.addWidget(warn_label)
261
+ personalize_rows.setContentsMargins(10, 30, 10, 0)
261
262
 
262
263
  rows.setContentsMargins(0, 0, 0, 0)
263
264
  rows.addStretch(1)
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.09.01 23:00:00 #
9
+ # Updated Date: 2025.12.28 18:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from PySide6.QtWidgets import QVBoxLayout, QWidget
@@ -52,6 +52,7 @@ class Image:
52
52
 
53
53
  option_resolutions = self.window.core.image.get_resolution_option()
54
54
  conf_global['img_resolution'] = OptionCombo(self.window, 'global', 'img_resolution', option_resolutions)
55
+ conf_global['img_resolution'].setMinimumWidth(160)
55
56
 
56
57
  rows = QVBoxLayout()
57
58
  rows.addWidget(conf_global['img_variants'])
@@ -91,6 +91,7 @@ class Indexes:
91
91
  option = {
92
92
  "name": "current_index",
93
93
  "label": "toolbox.llama_index.current_index",
94
+ "search": False,
94
95
  "keys": [],
95
96
  "value": None,
96
97
  }
@@ -105,6 +106,7 @@ class Indexes:
105
106
  option = {
106
107
  "name": "llama.idx.mode",
107
108
  "label": "toolbox.llama_index.mode",
109
+ "search": False,
108
110
  "keys": self.window.controller.idx.get_modes_keys(),
109
111
  "value": "chat",
110
112
  }
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.12.26 12:00:00 #
9
+ # Updated Date: 2025.12.28 18:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from PySide6.QtWidgets import QWidget, QHBoxLayout
@@ -45,6 +45,10 @@ class Video:
45
45
  conf_global['video.resolution'] = OptionCombo(self.window, 'global', 'video.resolution', option_resolution)
46
46
  conf_global['video.duration'] = OptionInput(self.window, 'global', 'video.duration', option_duration)
47
47
 
48
+ conf_global['video.aspect_ratio'].setMinimumWidth(120)
49
+ conf_global['video.resolution'].setMinimumWidth(120)
50
+ conf_global['video.duration'].setMinimumWidth(50)
51
+
48
52
  rows = QHBoxLayout()
49
53
  rows.addWidget(conf_global['video.resolution'], 2)
50
54
  rows.addWidget(conf_global['video.aspect_ratio'], 2)
pygpt_net/ui/main.py CHANGED
@@ -46,6 +46,7 @@ class MainWindow(QMainWindow, QtStyleTools):
46
46
  :param args: launcher arguments
47
47
  """
48
48
  super().__init__()
49
+ self.setWindowFlags(self.windowFlags() | Qt.WindowMinMaxButtonsHint | Qt.WindowMaximizeButtonHint)
49
50
  self.app = app
50
51
  self.args = args
51
52
  self.timer = None
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.08.03 14:00:00 #
9
+ # Updated Date: 2025.12.29 21:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
@@ -32,8 +32,11 @@ class UpdateDialog(BaseDialog):
32
32
  self.window = window
33
33
  self.setParent(window)
34
34
  self.setWindowTitle(trans('update.title'))
35
+
36
+ version = self.window.meta['version']
35
37
  self.cmd_pip = "pip install --upgrade pygpt-net"
36
38
  self.cmd_snap = "sudo snap refresh pygpt"
39
+ self.cmd_appimage = f"appimageupdatetool ./PyGPT-{version}-x86_64.AppImage"
37
40
 
38
41
  # www
39
42
  self.www = QPushButton(trans('update.download'))
@@ -133,8 +136,9 @@ class UpdateDialog(BaseDialog):
133
136
  version: str,
134
137
  build: str,
135
138
  changelog: str,
136
- download_windows: str,
137
- download_linux: str
139
+ download_windows: str = "",
140
+ download_linux: str = "",
141
+ download_appimage: str = ""
138
142
  ):
139
143
  """
140
144
  Set update data
@@ -145,6 +149,7 @@ class UpdateDialog(BaseDialog):
145
149
  :param changelog: changelog
146
150
  :param download_windows: download link for windows
147
151
  :param download_linux: download link for linux
152
+ :param download_appimage: download link for appimage
148
153
  """
149
154
  # prepare data
150
155
  info = trans("update.info")
@@ -179,8 +184,8 @@ class UpdateDialog(BaseDialog):
179
184
  if self.window.core.platforms.is_snap(): # snap
180
185
  self.cmd.setText(self.cmd_snap)
181
186
  self.cmd.setVisible(True)
182
- elif self.window.core.config.is_compiled(): # compiled
183
- if self.window.core.platforms.is_windows():
187
+ elif self.window.core.config.is_compiled(): # compiled versions
188
+ if self.window.core.platforms.is_windows(): # Windows
184
189
  self.download_link = download_windows
185
190
  self.download_file.setText("{} .msi ({})".format(trans("action.download"), version))
186
191
  if is_store:
@@ -191,11 +196,17 @@ class UpdateDialog(BaseDialog):
191
196
  self.download_file.setVisible(True)
192
197
  self.info_upgrade.setVisible(True)
193
198
  self.www.setVisible(False)
194
- elif self.window.core.platforms.is_linux():
199
+ elif self.window.core.platforms.is_linux(): # Linux
195
200
  self.download_link = download_linux
196
201
  self.download_file.setText("{} .tar.gz ({})".format(trans("action.download"), version))
197
202
  self.download_file.setVisible(True)
198
- else: # pip
203
+ elif self.window.core.platforms.is_appimage(): # AppImage
204
+ self.cmd.setText(self.cmd_appimage)
205
+ self.cmd.setVisible(True)
206
+ self.download_link = download_appimage
207
+ self.download_file.setText("{} .AppImage ({})".format(trans("action.download"), version))
208
+ self.download_file.setVisible(True)
209
+ else: # PyPi package
199
210
  self.cmd.setText(self.cmd_pip)
200
211
  self.cmd.setVisible(True)
201
212