pygpt-net 2.7.1__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.
- pygpt_net/CHANGELOG.txt +6 -0
- pygpt_net/__init__.py +3 -3
- pygpt_net/core/platforms/platforms.py +14 -1
- pygpt_net/core/updater/updater.py +24 -12
- pygpt_net/data/config/config.json +3 -3
- pygpt_net/data/config/models.json +3 -3
- pygpt_net/data/css/style.dark.css +1 -1
- pygpt_net/data/css/style.light.css +1 -1
- pygpt_net/provider/core/config/patch.py +8 -0
- pygpt_net/ui/main.py +1 -0
- pygpt_net/ui/widget/dialog/update.py +18 -7
- pygpt_net/ui/widget/option/combo.py +2 -0
- {pygpt_net-2.7.1.dist-info → pygpt_net-2.7.2.dist-info}/METADATA +36 -4
- {pygpt_net-2.7.1.dist-info → pygpt_net-2.7.2.dist-info}/RECORD +17 -17
- {pygpt_net-2.7.1.dist-info → pygpt_net-2.7.2.dist-info}/LICENSE +0 -0
- {pygpt_net-2.7.1.dist-info → pygpt_net-2.7.2.dist-info}/WHEEL +0 -0
- {pygpt_net-2.7.1.dist-info → pygpt_net-2.7.2.dist-info}/entry_points.txt +0 -0
pygpt_net/CHANGELOG.txt
CHANGED
pygpt_net/__init__.py
CHANGED
|
@@ -6,15 +6,15 @@
|
|
|
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.
|
|
9
|
+
# Updated Date: 2025.12.29 00:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
__author__ = "Marcin Szczygliński"
|
|
13
13
|
__copyright__ = "Copyright 2025, Marcin Szczygliński"
|
|
14
14
|
__credits__ = ["Marcin Szczygliński"]
|
|
15
15
|
__license__ = "MIT"
|
|
16
|
-
__version__ = "2.7.
|
|
17
|
-
__build__ = "2025-12-
|
|
16
|
+
__version__ = "2.7.2"
|
|
17
|
+
__build__ = "2025-12-29"
|
|
18
18
|
__maintainer__ = "Marcin Szczygliński"
|
|
19
19
|
__github__ = "https://github.com/szczyglis-dev/py-gpt"
|
|
20
20
|
__report__ = "https://github.com/szczyglis-dev/py-gpt/issues"
|
|
@@ -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.
|
|
9
|
+
# Updated Date: 2025.12.29 21:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import platform
|
|
@@ -127,6 +127,17 @@ class Platforms:
|
|
|
127
127
|
return True
|
|
128
128
|
return False
|
|
129
129
|
|
|
130
|
+
def is_appimage(self) -> bool:
|
|
131
|
+
"""
|
|
132
|
+
Return True if app is running as AppImage
|
|
133
|
+
|
|
134
|
+
:return: True if app is running as AppImage
|
|
135
|
+
"""
|
|
136
|
+
path = os.path.join(self.window.core.config.get_app_path(), 'data', 'appimage.conf')
|
|
137
|
+
if os.path.exists(path):
|
|
138
|
+
return True
|
|
139
|
+
return False
|
|
140
|
+
|
|
130
141
|
def get_as_string(self, env_suffix: bool = True) -> str:
|
|
131
142
|
"""
|
|
132
143
|
Return platform as string
|
|
@@ -147,6 +158,8 @@ class Platforms:
|
|
|
147
158
|
suffix = ''
|
|
148
159
|
if self.is_snap():
|
|
149
160
|
suffix = ' (snap)'
|
|
161
|
+
elif self.is_appimage():
|
|
162
|
+
suffix = ' (AppImage)'
|
|
150
163
|
elif self.window.core.config.is_compiled():
|
|
151
164
|
suffix = ' (standalone)'
|
|
152
165
|
if self.is_windows():
|
|
@@ -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.
|
|
9
|
+
# Updated Date: 2025.12.29 21:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import copy
|
|
@@ -26,13 +26,14 @@ from packaging.version import parse as parse_version, Version
|
|
|
26
26
|
from pygpt_net.utils import trans
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
class Updater:
|
|
29
|
+
class Updater(QObject):
|
|
30
30
|
def __init__(self, window=None):
|
|
31
31
|
"""
|
|
32
32
|
Updater core (config data patcher)
|
|
33
33
|
|
|
34
34
|
:param window: Window instance
|
|
35
35
|
"""
|
|
36
|
+
super(Updater, self).__init__()
|
|
36
37
|
self.window = window
|
|
37
38
|
self.thanks = None # cache
|
|
38
39
|
|
|
@@ -261,11 +262,11 @@ class Updater:
|
|
|
261
262
|
return self.get_thanks()
|
|
262
263
|
return self.thanks
|
|
263
264
|
|
|
264
|
-
def check_silent(self) -> Tuple[bool, str, str, str, str, str]:
|
|
265
|
+
def check_silent(self) -> Tuple[bool, str, str, str, str, str, str]:
|
|
265
266
|
"""
|
|
266
267
|
Check version in background
|
|
267
268
|
|
|
268
|
-
:return: (is_new, newest_version, newest_build, changelog, download_windows, download_linux)
|
|
269
|
+
:return: (is_new, newest_version, newest_build, changelog, download_windows, download_linux, download_appimage)
|
|
269
270
|
"""
|
|
270
271
|
url = self.get_updater_url()
|
|
271
272
|
is_new = False
|
|
@@ -274,6 +275,7 @@ class Updater:
|
|
|
274
275
|
changelog = ""
|
|
275
276
|
download_windows = ""
|
|
276
277
|
download_linux = ""
|
|
278
|
+
download_appimage = ""
|
|
277
279
|
|
|
278
280
|
try:
|
|
279
281
|
ctx = ssl.create_default_context()
|
|
@@ -315,6 +317,8 @@ class Updater:
|
|
|
315
317
|
download_windows = data_json["download_windows"]
|
|
316
318
|
if "download_linux" in data_json:
|
|
317
319
|
download_linux = data_json["download_linux"]
|
|
320
|
+
if "download_appimage" in data_json:
|
|
321
|
+
download_appimage = data_json["download_appimage"]
|
|
318
322
|
if "thanks" in data_json:
|
|
319
323
|
self.thanks = self.parse_thanks(data_json["thanks"])
|
|
320
324
|
|
|
@@ -331,7 +335,7 @@ class Updater:
|
|
|
331
335
|
self.window.core.debug.log(e)
|
|
332
336
|
print("Failed to check for updates")
|
|
333
337
|
|
|
334
|
-
return is_new, newest_version, newest_build, changelog, download_windows, download_linux
|
|
338
|
+
return is_new, newest_version, newest_build, changelog, download_windows, download_linux, download_appimage
|
|
335
339
|
|
|
336
340
|
def parse_thanks(self, people: str) -> str:
|
|
337
341
|
"""
|
|
@@ -352,7 +356,7 @@ class Updater:
|
|
|
352
356
|
:return: True if force show version dialog
|
|
353
357
|
"""
|
|
354
358
|
print("Checking for updates...")
|
|
355
|
-
is_new, version, build, changelog, download_windows, download_linux = self.check_silent()
|
|
359
|
+
is_new, version, build, changelog, download_windows, download_linux, download_appimage = self.check_silent()
|
|
356
360
|
if is_new or force:
|
|
357
361
|
self.show_version_dialog(
|
|
358
362
|
version,
|
|
@@ -360,6 +364,7 @@ class Updater:
|
|
|
360
364
|
changelog,
|
|
361
365
|
download_windows,
|
|
362
366
|
download_linux,
|
|
367
|
+
download_appimage,
|
|
363
368
|
is_new
|
|
364
369
|
)
|
|
365
370
|
return True
|
|
@@ -373,6 +378,7 @@ class Updater:
|
|
|
373
378
|
changelog: str,
|
|
374
379
|
download_windows: str,
|
|
375
380
|
download_linux: str,
|
|
381
|
+
download_appimage: str = "",
|
|
376
382
|
is_new: bool = False
|
|
377
383
|
):
|
|
378
384
|
"""
|
|
@@ -383,6 +389,7 @@ class Updater:
|
|
|
383
389
|
:param changelog: changelog
|
|
384
390
|
:param download_windows: windows download link
|
|
385
391
|
:param download_linux: linux download link
|
|
392
|
+
:param download_appimage: appimage download link
|
|
386
393
|
:param is_new: True if is new version available
|
|
387
394
|
"""
|
|
388
395
|
self.window.ui.dialog['update'].set_data(
|
|
@@ -391,7 +398,8 @@ class Updater:
|
|
|
391
398
|
build,
|
|
392
399
|
changelog,
|
|
393
400
|
download_windows,
|
|
394
|
-
download_linux
|
|
401
|
+
download_linux,
|
|
402
|
+
download_appimage
|
|
395
403
|
)
|
|
396
404
|
self.window.ui.dialogs.open('update', height=600)
|
|
397
405
|
|
|
@@ -419,14 +427,15 @@ class Updater:
|
|
|
419
427
|
|
|
420
428
|
return updated
|
|
421
429
|
|
|
422
|
-
@Slot(str, str, str, str, str)
|
|
430
|
+
@Slot(str, str, str, str, str, str)
|
|
423
431
|
def handle_new_version(
|
|
424
432
|
self,
|
|
425
433
|
version: str,
|
|
426
434
|
build: str,
|
|
427
435
|
changelog: str,
|
|
428
|
-
download_windows: str
|
|
429
|
-
download_linux: str
|
|
436
|
+
download_windows: str,
|
|
437
|
+
download_linux: str,
|
|
438
|
+
download_appimage: str
|
|
430
439
|
):
|
|
431
440
|
"""
|
|
432
441
|
Handle new version signal
|
|
@@ -436,6 +445,7 @@ class Updater:
|
|
|
436
445
|
:param changelog: changelog
|
|
437
446
|
:param download_windows: download link for windows
|
|
438
447
|
:param download_linux: download link for linux
|
|
448
|
+
:param download_appimage: download link for appimage
|
|
439
449
|
"""
|
|
440
450
|
if self.window.ui.tray.is_tray:
|
|
441
451
|
self.window.ui.tray.show_msg(
|
|
@@ -450,6 +460,7 @@ class Updater:
|
|
|
450
460
|
changelog,
|
|
451
461
|
download_windows,
|
|
452
462
|
download_linux,
|
|
463
|
+
download_appimage,
|
|
453
464
|
True
|
|
454
465
|
)
|
|
455
466
|
|
|
@@ -468,7 +479,7 @@ class Updater:
|
|
|
468
479
|
|
|
469
480
|
|
|
470
481
|
class UpdaterSignals(QObject):
|
|
471
|
-
version_changed = Signal(str, str, str, str, str)
|
|
482
|
+
version_changed = Signal(str, str, str, str, str, str)
|
|
472
483
|
|
|
473
484
|
|
|
474
485
|
class UpdaterWorker(QRunnable):
|
|
@@ -498,7 +509,7 @@ class UpdaterWorker(QRunnable):
|
|
|
498
509
|
if self.force:
|
|
499
510
|
print("Checking for updates...")
|
|
500
511
|
|
|
501
|
-
is_new, version, build, changelog, download_windows, download_linux = self.checker()
|
|
512
|
+
is_new, version, build, changelog, download_windows, download_linux, download_appimage = self.checker()
|
|
502
513
|
if is_new:
|
|
503
514
|
if self.force or (parsed_prev_checked is None or parsed_prev_checked < parse_version(version)):
|
|
504
515
|
self.signals.version_changed.emit(
|
|
@@ -507,6 +518,7 @@ class UpdaterWorker(QRunnable):
|
|
|
507
518
|
changelog,
|
|
508
519
|
download_windows,
|
|
509
520
|
download_linux,
|
|
521
|
+
download_appimage
|
|
510
522
|
)
|
|
511
523
|
return
|
|
512
524
|
if self.force:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"__meta__": {
|
|
3
|
-
"version": "2.7.
|
|
4
|
-
"app.version": "2.7.
|
|
5
|
-
"updated_at": "2025-12-
|
|
3
|
+
"version": "2.7.2",
|
|
4
|
+
"app.version": "2.7.2",
|
|
5
|
+
"updated_at": "2025-12-29T00:00:00"
|
|
6
6
|
},
|
|
7
7
|
"access.audio.event.speech": false,
|
|
8
8
|
"access.audio.event.speech.disabled": [],
|
|
@@ -187,7 +187,7 @@ QListView#ComboPopupList {{
|
|
|
187
187
|
border: 2px solid #4f5b62;
|
|
188
188
|
}}
|
|
189
189
|
|
|
190
|
-
QComboBox QAbstractItemView::item,
|
|
190
|
+
QComboBox[name="SearchableCombo"] QAbstractItemView::item,
|
|
191
191
|
QListView#ComboPopupList::item {{
|
|
192
192
|
min-height: 20px;
|
|
193
193
|
padding: 8px 33px;
|
|
@@ -305,7 +305,7 @@ QListView#ComboPopupList {{
|
|
|
305
305
|
border: 0px solid #d6d6d6;
|
|
306
306
|
}}
|
|
307
307
|
|
|
308
|
-
QComboBox QAbstractItemView::item,
|
|
308
|
+
QComboBox[name="SearchableCombo"] QAbstractItemView::item,
|
|
309
309
|
QListView#ComboPopupList::item {{
|
|
310
310
|
min-height: 20px;
|
|
311
311
|
padding: 8px 32px;
|
|
@@ -199,6 +199,14 @@ class Patch:
|
|
|
199
199
|
patch_css('style.dark.css', True)
|
|
200
200
|
updated = True
|
|
201
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
|
+
|
|
202
210
|
# update file
|
|
203
211
|
migrated = False
|
|
204
212
|
if updated:
|
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.
|
|
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
|
-
|
|
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
|
|
|
@@ -379,7 +379,9 @@ class SearchableCombo(SeparatorComboBox):
|
|
|
379
379
|
"""
|
|
380
380
|
def __init__(self, parent=None):
|
|
381
381
|
super().__init__(parent)
|
|
382
|
+
self.setObjectName("SearchableCombo")
|
|
382
383
|
self.search: bool = True
|
|
384
|
+
|
|
383
385
|
self._popup_open: bool = False
|
|
384
386
|
self._search_line: QLineEdit | None = None
|
|
385
387
|
self._search_action = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pygpt-net
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.2
|
|
4
4
|
Summary: Desktop AI Assistant powered by: OpenAI GPT-5, GPT-4, o1, o3, Gemini, Claude, Grok, DeepSeek, and other models supported by Llama Index, and Ollama. Chatbot, agents, completion, image generation, vision analysis, speech-to-text, plugins, MCP, internet access, file handling, command execution and more.
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: ai,api,api key,app,assistant,bielik,chat,chatbot,chatgpt,claude,dall-e,deepseek,desktop,gemini,gpt,gpt-3.5,gpt-4,gpt-4-vision,gpt-4o,gpt-5,gpt-oss,gpt3.5,gpt4,grok,langchain,llama-index,llama3,mistral,o1,o3,ollama,openai,presets,py-gpt,py_gpt,pygpt,pyside,qt,text completion,tts,ui,vision,whisper
|
|
@@ -119,7 +119,7 @@ Description-Content-Type: text/markdown
|
|
|
119
119
|
|
|
120
120
|
[](https://snapcraft.io/pygpt)
|
|
121
121
|
|
|
122
|
-
Release: **2.7.
|
|
122
|
+
Release: **2.7.2** | build: **2025-12-29** | Python: **>=3.10, <3.14**
|
|
123
123
|
|
|
124
124
|
> Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
|
|
125
125
|
>
|
|
@@ -216,7 +216,33 @@ You can download compiled binary versions for `Linux` and `Windows` (10/11).
|
|
|
216
216
|
|
|
217
217
|
Linux version requires `GLIBC` >= `2.35`.
|
|
218
218
|
|
|
219
|
-
##
|
|
219
|
+
## Microsoft Store (Windows)
|
|
220
|
+
|
|
221
|
+
For Windows 10/11, you can install **PyGPT** directly from Microsoft Store:
|
|
222
|
+
|
|
223
|
+
[](https://apps.microsoft.com/detail/XP99R4MX3X65VQ)
|
|
224
|
+
|
|
225
|
+
Link to MS Store: https://apps.microsoft.com/detail/XP99R4MX3X65VQ
|
|
226
|
+
|
|
227
|
+
## AppImage (Linux)
|
|
228
|
+
|
|
229
|
+
You can download the latest **PyGPT** `AppImage` for Linux from the release page:
|
|
230
|
+
|
|
231
|
+
**Releases:** https://github.com/szczyglis-dev/py-gpt/releases
|
|
232
|
+
|
|
233
|
+
**Tip:** Remember to give execution permissions to the downloaded file:
|
|
234
|
+
|
|
235
|
+
```chmod +x ./PyGPT-X.X.X-x86_64.AppImage```
|
|
236
|
+
|
|
237
|
+
To manage future updates you can use `AppImageUpdate` tool:
|
|
238
|
+
|
|
239
|
+
You can download it from: https://github.com/AppImage/AppImageUpdate/releases
|
|
240
|
+
|
|
241
|
+
After downloading, run the following command in terminal:
|
|
242
|
+
|
|
243
|
+
```appimageupdatetool ./PyGPT-X.X.X-x86_64.AppImage```
|
|
244
|
+
|
|
245
|
+
## Snap Store (Linux)
|
|
220
246
|
|
|
221
247
|
You can install **PyGPT** directly from Snap Store:
|
|
222
248
|
|
|
@@ -224,7 +250,7 @@ You can install **PyGPT** directly from Snap Store:
|
|
|
224
250
|
sudo snap install pygpt
|
|
225
251
|
```
|
|
226
252
|
|
|
227
|
-
To manage future updates
|
|
253
|
+
To manage future updates use:
|
|
228
254
|
|
|
229
255
|
```commandline
|
|
230
256
|
sudo snap refresh pygpt
|
|
@@ -3753,6 +3779,12 @@ may consume additional tokens that are not displayed in the main window.
|
|
|
3753
3779
|
|
|
3754
3780
|
## Recent changes:
|
|
3755
3781
|
|
|
3782
|
+
**2.7.2 (2025-12-29)**
|
|
3783
|
+
|
|
3784
|
+
- Fixed: non-searchable combobox width.
|
|
3785
|
+
- Improved updater.
|
|
3786
|
+
- Added .AppImage build.
|
|
3787
|
+
|
|
3756
3788
|
**2.7.1 (2025-12-28)**
|
|
3757
3789
|
|
|
3758
3790
|
- Improved UI elements.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
pygpt_net/CHANGELOG.txt,sha256=
|
|
1
|
+
pygpt_net/CHANGELOG.txt,sha256=opyjVHDzLy4dzClQfz3U3t3g6x65e4mTbazHXboFqpY,111372
|
|
2
2
|
pygpt_net/LICENSE,sha256=dz9sfFgYahvu2NZbx4C1xCsVn9GVer2wXcMkFRBvqzY,1146
|
|
3
|
-
pygpt_net/__init__.py,sha256=
|
|
3
|
+
pygpt_net/__init__.py,sha256=oZLbWKFXTi7d4UvffTI_nfQT_-Mg7ske84JqOw2G0A0,1372
|
|
4
4
|
pygpt_net/app.py,sha256=W-2rCYLndMgVV7cZZqeloqzifCggjISrFdMhHg0dMvM,23419
|
|
5
5
|
pygpt_net/app_core.py,sha256=PwBOV9wZLtr-O6SxBiazABhYXMHH8kZ6OgbvSv2OiZA,3827
|
|
6
6
|
pygpt_net/config.py,sha256=3CA7xXPKQsdRie1CY8_b5-Kk1taWMciUP9CesXRQNNY,18302
|
|
@@ -336,7 +336,7 @@ pygpt_net/core/node_editor/utils.py,sha256=FLnHXHQ6W2ZPYz39e5WqVY7SkBLoqVtPFGVNb
|
|
|
336
336
|
pygpt_net/core/notepad/__init__.py,sha256=Uro9_4CfihHzn92I2Ar0q0t-MAGkikUMrY5kGAuLlSw,511
|
|
337
337
|
pygpt_net/core/notepad/notepad.py,sha256=zYE7BRERDOxROMMfjTwS6M5Vk08DXxXqHdKi1aX33i0,4243
|
|
338
338
|
pygpt_net/core/platforms/__init__.py,sha256=NRmTzf4xFxcYseYs1mgCPZA0YUH2v0Aufq4CG1_mKDE,513
|
|
339
|
-
pygpt_net/core/platforms/platforms.py,sha256=
|
|
339
|
+
pygpt_net/core/platforms/platforms.py,sha256=1cxu8blqHz3f1dYggxKifh5AOjBMJ21afieUkukqwdw,5605
|
|
340
340
|
pygpt_net/core/plugins/__init__.py,sha256=NOKL-CNsF4rrKTBpsN-ue92H4pTUGKlgDCwr1iA0geY,511
|
|
341
341
|
pygpt_net/core/plugins/plugins.py,sha256=BGGo-q6VLdk-fcsb4vQjORuh9LHGjHVPMO9-roTNZ5A,17131
|
|
342
342
|
pygpt_net/core/presets/__init__.py,sha256=NZjBxjGv4fgEX6Hp8FznsWK5QqD1Tl7zyp2Ir3ufXv4,511
|
|
@@ -404,7 +404,7 @@ pygpt_net/core/types/multimodal.py,sha256=yeKLZ5MrCHU5LhWwFE-yGApt-FB59kTmElo3G7
|
|
|
404
404
|
pygpt_net/core/types/openai.py,sha256=LQyJ506IbG2EJxLVHgKBDAjMLi_qbIC7ow_kM2zHwkw,1516
|
|
405
405
|
pygpt_net/core/types/tools.py,sha256=BdonNwytk5SxYtYdlDkMg5lMvFoXz3CQJHZ__oVlm_8,1223
|
|
406
406
|
pygpt_net/core/updater/__init__.py,sha256=fC4g0Xn9S8lLxGbop1q2o2qi9IZegoVayNVWemgBwds,511
|
|
407
|
-
pygpt_net/core/updater/updater.py,sha256=
|
|
407
|
+
pygpt_net/core/updater/updater.py,sha256=YHv8zbndCe5RapaunirTAIZq-eRjpdceX-Fi2cZcxUw,17656
|
|
408
408
|
pygpt_net/core/video/__init__.py,sha256=PBAsunvkPSJJvcx2XivIul96XsbcW8mPAda_CX3dK1U,513
|
|
409
409
|
pygpt_net/core/video/video.py,sha256=-EUt5halPea0I77oktZqoVCw0mmpDMbUX20gUb7FYfI,10078
|
|
410
410
|
pygpt_net/core/vision/__init__.py,sha256=dFEilXM2Z128SmgBlLn1DvyLCksdcyqFI7rln_VPsf8,510
|
|
@@ -420,8 +420,8 @@ pygpt_net/css_rc.py,sha256=PX6g9z5BsD-DXISuR2oq3jHcjiKfcJ4HsgcHez6wGMc,27762
|
|
|
420
420
|
pygpt_net/data/audio/click_off.mp3,sha256=aNiRDP1pt-Jy7ija4YKCNFBwvGWbzU460F4pZWZDS90,65201
|
|
421
421
|
pygpt_net/data/audio/click_on.mp3,sha256=qfdsSnthAEHVXzeyN4LlC0OvXuyW8p7stb7VXtlvZ1k,65201
|
|
422
422
|
pygpt_net/data/audio/ok.mp3,sha256=LTiV32pEBkpUGBkKkcOdOFB7Eyt_QoP2Nv6c5AaXftk,32256
|
|
423
|
-
pygpt_net/data/config/config.json,sha256=
|
|
424
|
-
pygpt_net/data/config/models.json,sha256=
|
|
423
|
+
pygpt_net/data/config/config.json,sha256=cE-1UMv5Lq8fibZ9_mifDCNZCMyX26hmp6wfm4b4Sjw,30935
|
|
424
|
+
pygpt_net/data/config/models.json,sha256=xWo4_f1kP6ZLIvXasdmuc0u7qZtKT5PZ4orYCoK3Xg8,135705
|
|
425
425
|
pygpt_net/data/config/modes.json,sha256=IpjLOm428_vs6Ma9U-YQTNKJNtZw-qyM1lwhh73xl1w,2111
|
|
426
426
|
pygpt_net/data/config/presets/agent_code_act.json,sha256=GYHqhxtKFLUCvRI3IJAJ7Qe1k8yD9wGGNwManldWzlI,754
|
|
427
427
|
pygpt_net/data/config/presets/agent_openai.json,sha256=bpDJgLRey_effQkzFRoOEGd4aHUrmzeODSDdNzrf62I,730
|
|
@@ -465,8 +465,8 @@ pygpt_net/data/css/markdown.css,sha256=yaoJPogZZ_ghbqP8vTXTycwVyD61Ik5_033NpzuUz
|
|
|
465
465
|
pygpt_net/data/css/markdown.dark.css,sha256=ixAwuT69QLesZttKhO4RAy-QukplZwwfXCZsWLN9TP4,730
|
|
466
466
|
pygpt_net/data/css/markdown.light.css,sha256=UZdv0jtuFgJ_4bYWsDaDQ4X4AP9tVNLUHBAckC_oD8k,833
|
|
467
467
|
pygpt_net/data/css/style.css,sha256=dgVlVqEL38zF-4Ok-y1rwfALC8zETJAIuIbkwat_hTk,337
|
|
468
|
-
pygpt_net/data/css/style.dark.css,sha256=
|
|
469
|
-
pygpt_net/data/css/style.light.css,sha256=
|
|
468
|
+
pygpt_net/data/css/style.dark.css,sha256=CJGXyfC3EgCb32me8baFCvi2fTg3pklVj7dZ2oBkY1k,4156
|
|
469
|
+
pygpt_net/data/css/style.light.css,sha256=qsooKdqMSJzV1QYWeyzQnZmn839fpmkPf88O7KK8xxA,6494
|
|
470
470
|
pygpt_net/data/css/web-blocks.css,sha256=i8BwIwauKvKiWq3bte45R6_bI6bjFyjKyshkTb2JWgs,7598
|
|
471
471
|
pygpt_net/data/css/web-blocks.dark.css,sha256=mck2u9KiO-pvnms0N0XJkoM_RBuf8QdC_3iSWAg8r40,1855
|
|
472
472
|
pygpt_net/data/css/web-blocks.darkest.css,sha256=p3929omAaS1yxNtcOk9yR6cdVGkTVLCIyVsmltxLVf4,1807
|
|
@@ -2250,7 +2250,7 @@ pygpt_net/provider/core/calendar/db_sqlite/storage.py,sha256=QDclQCQdr4QyRIqjgGX
|
|
|
2250
2250
|
pygpt_net/provider/core/config/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
|
|
2251
2251
|
pygpt_net/provider/core/config/base.py,sha256=cbvzbMNqL2XgC-36gGubnU37t94AX7LEw0lecb2Nm80,1365
|
|
2252
2252
|
pygpt_net/provider/core/config/json_file.py,sha256=GCcpCRQnBiSLWwlGbG9T3ZgiHkTfp5Jsg2KYkZcakBw,6789
|
|
2253
|
-
pygpt_net/provider/core/config/patch.py,sha256=
|
|
2253
|
+
pygpt_net/provider/core/config/patch.py,sha256=XD39PBWrJUoShasOtJq8Q_-22boHZsW4-tBpK2XvdFg,8838
|
|
2254
2254
|
pygpt_net/provider/core/config/patches/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2255
2255
|
pygpt_net/provider/core/config/patches/patch_before_2_6_42.py,sha256=_IcpB3DdiD01P2_jpt2ZvUs8WJRIeO6t5oQeNxY6_eE,126808
|
|
2256
2256
|
pygpt_net/provider/core/ctx/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
|
|
@@ -2535,7 +2535,7 @@ pygpt_net/ui/layout/toolbox/split.py,sha256=Hs9hZPciLXCRV_izoayrBlJSCuTGumdNki6z
|
|
|
2535
2535
|
pygpt_net/ui/layout/toolbox/toolbox.py,sha256=VHzyzm7LjcAN30h111SEP6fdXwi84DYyf8CE1X3pdt8,2799
|
|
2536
2536
|
pygpt_net/ui/layout/toolbox/video.py,sha256=2XmLlFns53H65xd_9RaIkCrOdh-ZKQ96MssHgvVaaM0,2197
|
|
2537
2537
|
pygpt_net/ui/layout/toolbox/vision.py,sha256=E6-lLfU3vrWdlprayr6gxFs7F7AGkn4OIrFXrQ9p5XA,2035
|
|
2538
|
-
pygpt_net/ui/main.py,sha256=
|
|
2538
|
+
pygpt_net/ui/main.py,sha256=IIxb9UmVBl-hI64rjTTRhnxycQGfHjVzkx9WY5A4Ynk,14418
|
|
2539
2539
|
pygpt_net/ui/menu/__init__.py,sha256=wAIKG9wLWfYv6tpXCTXptWb_XKoCc-4lYWLDvV1bVYk,508
|
|
2540
2540
|
pygpt_net/ui/menu/about.py,sha256=BtelbYhpXJGgsoEwsPuw61wVuGkzogpY3FVvWtd09HE,4619
|
|
2541
2541
|
pygpt_net/ui/menu/audio.py,sha256=3vQhMq8vk_h7yb_Gk2dZMRviFR2PExgR_ynpgOkyl-g,4226
|
|
@@ -2584,7 +2584,7 @@ pygpt_net/ui/widget/dialog/rename.py,sha256=HcImKH_gUHcyB1k5llwStmrlXvcSpxgR2V6I
|
|
|
2584
2584
|
pygpt_net/ui/widget/dialog/settings.py,sha256=fKzbme2tdxzTSiQMNnCEgyD3lwCzFjLi85ikWulisGw,1614
|
|
2585
2585
|
pygpt_net/ui/widget/dialog/settings_plugin.py,sha256=Kf1ZK_RY9CAnfeuzPoQ4wgsFb2yQl7X-VKzsYETA55o,1696
|
|
2586
2586
|
pygpt_net/ui/widget/dialog/snap.py,sha256=4JojKDrDECFbNBnsE0505z336xLVskFz9TK3XF02Mtk,4074
|
|
2587
|
-
pygpt_net/ui/widget/dialog/update.py,sha256=
|
|
2587
|
+
pygpt_net/ui/widget/dialog/update.py,sha256=eaZc160dk_fb7cq5k-dIL635IfoirLptA4XXVdz-ywk,8110
|
|
2588
2588
|
pygpt_net/ui/widget/dialog/url.py,sha256=7I17Pp9P2c3G1pODEY5dum_AF0nFnu2BMfbWTgEES-M,8765
|
|
2589
2589
|
pygpt_net/ui/widget/dialog/workdir.py,sha256=D-C3YIt-wCoI-Eh7z--Z4R6P1UvtpkxeiaVcI-ycFck,1523
|
|
2590
2590
|
pygpt_net/ui/widget/draw/__init__.py,sha256=oSYKtNEGNL0vDjn3wCgdnBAbxUqNGIEIf-75I2DIn7Q,488
|
|
@@ -2638,7 +2638,7 @@ pygpt_net/ui/widget/option/__init__.py,sha256=8HT4tQFqQogEEpGYTv2RplKBthlsFKcl5e
|
|
|
2638
2638
|
pygpt_net/ui/widget/option/checkbox.py,sha256=duzgGPOVbHFnWILVEu5gDUa6sHeDOvQaaj9IsY-HbU8,3954
|
|
2639
2639
|
pygpt_net/ui/widget/option/checkbox_list.py,sha256=SgnkLTlVZCcU3ehqAfi_w28x693w_AeNsK-_0k-uOwA,6198
|
|
2640
2640
|
pygpt_net/ui/widget/option/cmd.py,sha256=Ii_i9hR4oRmG4-TPZ-FHuTv3I1vL96YLcDP2QSKmAbI,5800
|
|
2641
|
-
pygpt_net/ui/widget/option/combo.py,sha256=
|
|
2641
|
+
pygpt_net/ui/widget/option/combo.py,sha256=d1NIki7rH_Q4BnQ9iBY3lYRKhJYdOIGcuedz_646bxM,53899
|
|
2642
2642
|
pygpt_net/ui/widget/option/dictionary.py,sha256=ZeaBk-wEZ0SBU_iBBL6eHUEIGOrahh-z2xTa7LBvsdM,14736
|
|
2643
2643
|
pygpt_net/ui/widget/option/input.py,sha256=-pLXzkOO2OvOoUKTuocbOt8JcPWQO3W3cmrSh0WhJcc,9718
|
|
2644
2644
|
pygpt_net/ui/widget/option/prompt.py,sha256=SgRd0acp13_c19tWjYYChcGgAwik9tsZKKsX1Ciqgp4,2818
|
|
@@ -2669,8 +2669,8 @@ pygpt_net/ui/widget/textarea/web.py,sha256=sVRSmudPwPfjK2h7q-e6Ae4b-677BHLe20t-x
|
|
|
2669
2669
|
pygpt_net/ui/widget/vision/__init__.py,sha256=8HT4tQFqQogEEpGYTv2RplKBthlsFKcl5egnv4lzzEw,488
|
|
2670
2670
|
pygpt_net/ui/widget/vision/camera.py,sha256=DCx7h1nHruuUkU0Tw8Ay4OUVoNJhkuLsW4hIvGF5Skw,6985
|
|
2671
2671
|
pygpt_net/utils.py,sha256=r-Dum4brfBaZaHJr-ux86FfdMuMHFwyuUL2bEFirdhc,14649
|
|
2672
|
-
pygpt_net-2.7.
|
|
2673
|
-
pygpt_net-2.7.
|
|
2674
|
-
pygpt_net-2.7.
|
|
2675
|
-
pygpt_net-2.7.
|
|
2676
|
-
pygpt_net-2.7.
|
|
2672
|
+
pygpt_net-2.7.2.dist-info/LICENSE,sha256=rbPqNB_xxANH8hKayJyIcTwD4bj4Y2G-Mcm85r1OImM,1126
|
|
2673
|
+
pygpt_net-2.7.2.dist-info/METADATA,sha256=f5cbwnrsihuXuJ9Mz5x8caC-PO8u7Zljx4-YpjmvkYc,170907
|
|
2674
|
+
pygpt_net-2.7.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
2675
|
+
pygpt_net-2.7.2.dist-info/entry_points.txt,sha256=qvpII6UHIt8XfokmQWnCYQrTgty8FeJ9hJvOuUFCN-8,43
|
|
2676
|
+
pygpt_net-2.7.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|