pygpt-net 2.6.66__py3-none-any.whl → 2.6.67__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/controller/config/field/textarea.py +2 -2
- pygpt_net/controller/dialogs/info.py +2 -2
- pygpt_net/controller/media/media.py +29 -1
- pygpt_net/controller/model/editor.py +74 -9
- pygpt_net/controller/settings/editor.py +25 -1
- pygpt_net/core/types/image.py +10 -1
- pygpt_net/core/video/video.py +43 -3
- pygpt_net/data/config/config.json +3 -3
- pygpt_net/data/config/models.json +25 -14
- pygpt_net/data/locale/locale.de.ini +1 -0
- pygpt_net/data/locale/locale.en.ini +1 -0
- pygpt_net/data/locale/locale.es.ini +1 -0
- pygpt_net/data/locale/locale.fr.ini +1 -0
- pygpt_net/data/locale/locale.it.ini +1 -0
- pygpt_net/data/locale/locale.pl.ini +2 -1
- pygpt_net/data/locale/locale.uk.ini +1 -0
- pygpt_net/data/locale/locale.zh.ini +1 -0
- pygpt_net/item/model.py +1 -1
- pygpt_net/provider/api/openai/video.py +2 -2
- pygpt_net/provider/core/model/patch.py +26 -1
- pygpt_net/ui/dialog/models.py +10 -1
- pygpt_net/ui/layout/toolbox/video.py +14 -6
- pygpt_net/ui/widget/option/input.py +3 -1
- {pygpt_net-2.6.66.dist-info → pygpt_net-2.6.67.dist-info}/METADATA +8 -2
- {pygpt_net-2.6.66.dist-info → pygpt_net-2.6.67.dist-info}/RECORD +30 -30
- {pygpt_net-2.6.66.dist-info → pygpt_net-2.6.67.dist-info}/LICENSE +0 -0
- {pygpt_net-2.6.66.dist-info → pygpt_net-2.6.67.dist-info}/WHEEL +0 -0
- {pygpt_net-2.6.66.dist-info → pygpt_net-2.6.67.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.26 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.6.
|
|
17
|
-
__build__ = "2025-12-
|
|
16
|
+
__version__ = "2.6.67"
|
|
17
|
+
__build__ = "2025-12-26"
|
|
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.26 13:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
from typing import Any, Dict
|
|
@@ -38,7 +38,7 @@ class Textarea:
|
|
|
38
38
|
field = parent.get(key)
|
|
39
39
|
if field is None:
|
|
40
40
|
return
|
|
41
|
-
new_text = str(option["value"])
|
|
41
|
+
new_text = str(option["value"]) if "value" in option else ""
|
|
42
42
|
if hasattr(field, "toPlainText"):
|
|
43
43
|
current = field.toPlainText()
|
|
44
44
|
elif hasattr(field, "text"):
|
|
@@ -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.26 12:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
from PySide6.QtCore import QUrl
|
|
@@ -101,7 +101,7 @@ class Info:
|
|
|
101
101
|
|
|
102
102
|
def goto_update(self):
|
|
103
103
|
"""Open update URL"""
|
|
104
|
-
self.open_url(self.window.meta['
|
|
104
|
+
self.open_url(self.window.meta['website'])
|
|
105
105
|
|
|
106
106
|
def goto_donate(self):
|
|
107
107
|
"""Open donate page"""
|
|
@@ -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.
|
|
9
|
+
# Updated Date: 2025.12.26 12:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
from typing import Any
|
|
@@ -57,11 +57,31 @@ class Media:
|
|
|
57
57
|
value=aspect_ratio,
|
|
58
58
|
)
|
|
59
59
|
|
|
60
|
+
# video: resolution
|
|
61
|
+
resolution = self.window.core.config.get('video.resolution', '720p')
|
|
62
|
+
self.window.controller.config.apply_value(
|
|
63
|
+
parent_id="global",
|
|
64
|
+
key="video.resolution",
|
|
65
|
+
option=self.window.core.video.get_resolution_option(),
|
|
66
|
+
value=resolution,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
# video: duration
|
|
70
|
+
duration = self.window.core.config.get('video.duration', 8)
|
|
71
|
+
self.window.controller.config.apply_value(
|
|
72
|
+
parent_id="global",
|
|
73
|
+
key="video.duration",
|
|
74
|
+
option=self.window.core.video.get_duration_option(),
|
|
75
|
+
value=duration,
|
|
76
|
+
)
|
|
77
|
+
|
|
60
78
|
# -- add hooks --
|
|
61
79
|
if not self.initialized:
|
|
62
80
|
self.window.ui.add_hook("update.global.img_resolution", self.hook_update)
|
|
63
81
|
self.window.ui.add_hook("update.global.img_mode", self.hook_update)
|
|
64
82
|
self.window.ui.add_hook("update.global.video.aspect_ratio", self.hook_update)
|
|
83
|
+
self.window.ui.add_hook("update.global.video.resolution", self.hook_update)
|
|
84
|
+
self.window.ui.add_hook("update.global.video.duration", self.hook_update)
|
|
65
85
|
|
|
66
86
|
def reload(self):
|
|
67
87
|
"""Reload UI"""
|
|
@@ -88,6 +108,14 @@ class Media:
|
|
|
88
108
|
if not value:
|
|
89
109
|
return
|
|
90
110
|
self.window.core.config.set('video.aspect_ratio', value)
|
|
111
|
+
elif key == "video.resolution":
|
|
112
|
+
if not value:
|
|
113
|
+
return
|
|
114
|
+
self.window.core.config.set('video.resolution', value)
|
|
115
|
+
elif key == "video.duration":
|
|
116
|
+
if not value:
|
|
117
|
+
return
|
|
118
|
+
self.window.core.config.set('video.duration', value)
|
|
91
119
|
|
|
92
120
|
def enable_raw(self):
|
|
93
121
|
"""Enable prompt enhancement for images"""
|
|
@@ -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.26 13:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import copy
|
|
@@ -33,6 +33,7 @@ class Editor:
|
|
|
33
33
|
self.height = 500
|
|
34
34
|
self.selected = []
|
|
35
35
|
self.locked = False
|
|
36
|
+
self.provider = "-" # all providers by default
|
|
36
37
|
self.options = {
|
|
37
38
|
"id": {
|
|
38
39
|
"type": "text",
|
|
@@ -137,12 +138,40 @@ class Editor:
|
|
|
137
138
|
if key in self.options:
|
|
138
139
|
return self.options[key]
|
|
139
140
|
|
|
141
|
+
def get_provider_option(self) -> dict:
|
|
142
|
+
"""
|
|
143
|
+
Get provider option
|
|
144
|
+
|
|
145
|
+
:return: provider option
|
|
146
|
+
"""
|
|
147
|
+
return {
|
|
148
|
+
"type": "combo",
|
|
149
|
+
"use": "llm_providers",
|
|
150
|
+
"label": "model.provider",
|
|
151
|
+
"description": "model.provider.desc",
|
|
152
|
+
}
|
|
153
|
+
|
|
140
154
|
def setup(self):
|
|
141
155
|
"""Set up editor"""
|
|
142
156
|
idx = None
|
|
143
157
|
self.window.model_settings.setup(idx) # widget dialog setup
|
|
144
158
|
self.window.ui.add_hook("update.model.name", self.hook_update)
|
|
145
159
|
self.window.ui.add_hook("update.model.mode", self.hook_update)
|
|
160
|
+
self.update_provider(self.provider)
|
|
161
|
+
self.window.ui.add_hook("update.model.provider_global", self.hook_update)
|
|
162
|
+
|
|
163
|
+
def update_provider(self, provider: str):
|
|
164
|
+
"""
|
|
165
|
+
Set provider
|
|
166
|
+
|
|
167
|
+
:param provider: provider name
|
|
168
|
+
"""
|
|
169
|
+
self.window.controller.config.apply_value(
|
|
170
|
+
parent_id="model",
|
|
171
|
+
key="provider_global",
|
|
172
|
+
option=self.get_provider_option(),
|
|
173
|
+
value=provider,
|
|
174
|
+
)
|
|
146
175
|
|
|
147
176
|
def hook_update(
|
|
148
177
|
self,
|
|
@@ -163,6 +192,21 @@ class Editor:
|
|
|
163
192
|
"""
|
|
164
193
|
if self.window.controller.reloading or self.locked:
|
|
165
194
|
return # ignore hooks during reloading process
|
|
195
|
+
|
|
196
|
+
if key == "provider_global":
|
|
197
|
+
# update provider option dynamically
|
|
198
|
+
if self.provider == value:
|
|
199
|
+
return
|
|
200
|
+
self.save(persist=False)
|
|
201
|
+
self.locked = True
|
|
202
|
+
self.current = None
|
|
203
|
+
self.provider = value
|
|
204
|
+
self.reload_items()
|
|
205
|
+
if self.current is None:
|
|
206
|
+
self.init()
|
|
207
|
+
self.locked = False
|
|
208
|
+
return
|
|
209
|
+
|
|
166
210
|
if key in ["id", "name", "mode"]:
|
|
167
211
|
self.save(persist=False)
|
|
168
212
|
self.reload_items()
|
|
@@ -184,6 +228,7 @@ class Editor:
|
|
|
184
228
|
|
|
185
229
|
:param force: force open dialog
|
|
186
230
|
"""
|
|
231
|
+
self.locked = True
|
|
187
232
|
if not self.config_initialized:
|
|
188
233
|
self.setup()
|
|
189
234
|
self.config_initialized = True
|
|
@@ -197,6 +242,8 @@ class Editor:
|
|
|
197
242
|
height=self.height,
|
|
198
243
|
)
|
|
199
244
|
self.dialog = True
|
|
245
|
+
self.window.ui.nodes['models.editor.search'].setFocus() # focus on search
|
|
246
|
+
self.locked = False
|
|
200
247
|
|
|
201
248
|
def undo(self):
|
|
202
249
|
"""Undo last changes in models editor"""
|
|
@@ -219,15 +266,16 @@ class Editor:
|
|
|
219
266
|
self.window.core.models.sort_items()
|
|
220
267
|
self.reload_items()
|
|
221
268
|
|
|
222
|
-
# select the first
|
|
269
|
+
# select the first model on list if no model selected yet
|
|
270
|
+
items = self.prepare_items()
|
|
223
271
|
if self.current is None:
|
|
224
|
-
if len(
|
|
225
|
-
self.current = list(
|
|
272
|
+
if len(items) > 0:
|
|
273
|
+
self.current = list(items.keys())[0]
|
|
226
274
|
|
|
227
275
|
# assign model options to config dialog fields
|
|
228
276
|
options = copy.deepcopy(self.get_options()) # copy options
|
|
229
|
-
if self.current in
|
|
230
|
-
model =
|
|
277
|
+
if self.current in items:
|
|
278
|
+
model = items[self.current]
|
|
231
279
|
data_dict = model.to_dict()
|
|
232
280
|
for key in options:
|
|
233
281
|
if key in data_dict:
|
|
@@ -237,7 +285,7 @@ class Editor:
|
|
|
237
285
|
# custom fields
|
|
238
286
|
options["extra_json"]["value"] = json.dumps(model.extra, indent=4) if model.extra else ""
|
|
239
287
|
|
|
240
|
-
if self.current is not None and self.current in
|
|
288
|
+
if self.current is not None and self.current in items:
|
|
241
289
|
self.set_tab_by_id(self.current)
|
|
242
290
|
|
|
243
291
|
# load and apply options to config dialog
|
|
@@ -313,10 +361,26 @@ class Editor:
|
|
|
313
361
|
event = Event(Event.MODELS_CHANGED)
|
|
314
362
|
self.window.dispatch(event, all=True)
|
|
315
363
|
|
|
364
|
+
def prepare_items(self) -> dict:
|
|
365
|
+
"""
|
|
366
|
+
Prepare items by provider
|
|
367
|
+
|
|
368
|
+
:return: items by provider
|
|
369
|
+
"""
|
|
370
|
+
items = self.window.core.models.items
|
|
371
|
+
if self.provider == "-":
|
|
372
|
+
return items # all providers
|
|
373
|
+
items_by_provider = {}
|
|
374
|
+
for model_id, model in items.items():
|
|
375
|
+
provider = model.provider
|
|
376
|
+
if provider != self.provider:
|
|
377
|
+
continue
|
|
378
|
+
items_by_provider[model_id] = model
|
|
379
|
+
return items_by_provider
|
|
380
|
+
|
|
316
381
|
def reload_items(self):
|
|
317
382
|
"""Reload items"""
|
|
318
|
-
|
|
319
|
-
self.window.model_settings.update_list("models.list", items)
|
|
383
|
+
self.window.model_settings.update_list("models.list", self.prepare_items())
|
|
320
384
|
|
|
321
385
|
def select(self, idx: int):
|
|
322
386
|
"""Select model"""
|
|
@@ -331,6 +395,7 @@ class Editor:
|
|
|
331
395
|
self.locked = True
|
|
332
396
|
self.save(persist=False)
|
|
333
397
|
model = self.window.core.models.create_empty()
|
|
398
|
+
model.provider = self.provider
|
|
334
399
|
self.window.core.models.sort_items()
|
|
335
400
|
self.window.core.models.save()
|
|
336
401
|
self.reload_items()
|
|
@@ -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.26 12:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import copy
|
|
@@ -206,6 +206,30 @@ class Editor:
|
|
|
206
206
|
if self.config_changed('access.shortcuts'):
|
|
207
207
|
self.window.setup_global_shortcuts()
|
|
208
208
|
|
|
209
|
+
# video: resolution
|
|
210
|
+
if self.config_changed('video.resolution'):
|
|
211
|
+
value = self.window.core.config.get('video.resolution')
|
|
212
|
+
self.window.core.config.set('video.resolution', value)
|
|
213
|
+
option = self.window.core.video.get_resolution_option()
|
|
214
|
+
self.window.controller.config.apply_value(
|
|
215
|
+
parent_id='global',
|
|
216
|
+
key='video.resolution',
|
|
217
|
+
option=option,
|
|
218
|
+
value=str(value),
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
# video: duration
|
|
222
|
+
if self.config_changed('video.duration'):
|
|
223
|
+
value = self.window.core.config.get('video.duration')
|
|
224
|
+
self.window.core.config.set('video.duration', value)
|
|
225
|
+
option = self.window.core.video.get_duration_option()
|
|
226
|
+
self.window.controller.config.apply_value(
|
|
227
|
+
parent_id='global',
|
|
228
|
+
key='video.duration',
|
|
229
|
+
option=option,
|
|
230
|
+
value=int(value) or 8,
|
|
231
|
+
)
|
|
232
|
+
|
|
209
233
|
# update ENV
|
|
210
234
|
self.window.core.config.setup_env()
|
|
211
235
|
|
pygpt_net/core/types/image.py
CHANGED
|
@@ -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.
|
|
9
|
+
# Updated Date: 2025.12.26 12:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
VIDEO_AVAILABLE_ASPECT_RATIOS = {
|
|
@@ -22,6 +22,15 @@ VIDEO_AVAILABLE_ASPECT_RATIOS = {
|
|
|
22
22
|
"21:9": "21:9",
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
VIDEO_AVAILABLE_RESOLUTIONS = {
|
|
26
|
+
"480p": "480p",
|
|
27
|
+
"720p": "720p",
|
|
28
|
+
"1080p": "1080p",
|
|
29
|
+
"1440p": "1440p",
|
|
30
|
+
"4K": "4K",
|
|
31
|
+
"8K": "8K",
|
|
32
|
+
}
|
|
33
|
+
|
|
25
34
|
|
|
26
35
|
IMAGE_AVAILABLE_RESOLUTIONS = {
|
|
27
36
|
"gpt-image": {
|
pygpt_net/core/video/video.py
CHANGED
|
@@ -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.26 12:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import uuid
|
|
@@ -18,7 +18,10 @@ from time import strftime
|
|
|
18
18
|
|
|
19
19
|
from PySide6.QtCore import Slot, QObject
|
|
20
20
|
|
|
21
|
-
from pygpt_net.core.types import
|
|
21
|
+
from pygpt_net.core.types import (
|
|
22
|
+
VIDEO_AVAILABLE_ASPECT_RATIOS,
|
|
23
|
+
VIDEO_AVAILABLE_RESOLUTIONS,
|
|
24
|
+
)
|
|
22
25
|
from pygpt_net.item.ctx import CtxItem
|
|
23
26
|
from pygpt_net.utils import trans
|
|
24
27
|
|
|
@@ -267,7 +270,7 @@ class Video(QObject):
|
|
|
267
270
|
|
|
268
271
|
def get_aspect_ratio_option(self) -> dict:
|
|
269
272
|
"""
|
|
270
|
-
Get
|
|
273
|
+
Get video aspect ratio option for UI
|
|
271
274
|
|
|
272
275
|
:return: dict
|
|
273
276
|
"""
|
|
@@ -279,6 +282,34 @@ class Video(QObject):
|
|
|
279
282
|
"keys": self.get_available_aspect_ratio(),
|
|
280
283
|
}
|
|
281
284
|
|
|
285
|
+
def get_resolution_option(self) -> dict:
|
|
286
|
+
"""
|
|
287
|
+
Get video resolution option for UI
|
|
288
|
+
|
|
289
|
+
:return: dict
|
|
290
|
+
"""
|
|
291
|
+
return {
|
|
292
|
+
"type": "combo",
|
|
293
|
+
"slider": True,
|
|
294
|
+
"label": "video.resolution",
|
|
295
|
+
"value": "720p",
|
|
296
|
+
"keys": self.get_available_resolutions(),
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
def get_duration_option(self) -> dict:
|
|
300
|
+
"""
|
|
301
|
+
Get video duration option for UI
|
|
302
|
+
|
|
303
|
+
:return: dict
|
|
304
|
+
"""
|
|
305
|
+
return {
|
|
306
|
+
"type": "int",
|
|
307
|
+
"slider": False,
|
|
308
|
+
"label": "video.duration",
|
|
309
|
+
"value": 8,
|
|
310
|
+
"placeholder": "s",
|
|
311
|
+
}
|
|
312
|
+
|
|
282
313
|
def get_available_aspect_ratio(self, model: str = None) -> Dict[str, str]:
|
|
283
314
|
"""
|
|
284
315
|
Get available image resolutions
|
|
@@ -288,3 +319,12 @@ class Video(QObject):
|
|
|
288
319
|
"""
|
|
289
320
|
return VIDEO_AVAILABLE_ASPECT_RATIOS
|
|
290
321
|
|
|
322
|
+
def get_available_resolutions(self, model: str = None) -> Dict[str, str]:
|
|
323
|
+
"""
|
|
324
|
+
Get available image resolutions
|
|
325
|
+
|
|
326
|
+
:param model: model name
|
|
327
|
+
:return: dict of available resolutions
|
|
328
|
+
"""
|
|
329
|
+
return VIDEO_AVAILABLE_RESOLUTIONS
|
|
330
|
+
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"__meta__": {
|
|
3
|
-
"version": "2.6.
|
|
4
|
-
"app.version": "2.6.
|
|
5
|
-
"updated_at": "2025-12-
|
|
3
|
+
"version": "2.6.67",
|
|
4
|
+
"app.version": "2.6.67",
|
|
5
|
+
"updated_at": "2025-12-26T00:00:00"
|
|
6
6
|
},
|
|
7
7
|
"access.audio.event.speech": false,
|
|
8
8
|
"access.audio.event.speech.disabled": [],
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"__meta__": {
|
|
3
|
-
"version": "2.6.
|
|
4
|
-
"app.version": "2.6.
|
|
5
|
-
"updated_at": "2025-12-
|
|
3
|
+
"version": "2.6.67",
|
|
4
|
+
"app.version": "2.6.67",
|
|
5
|
+
"updated_at": "2025-12-26T00:00:00"
|
|
6
6
|
},
|
|
7
7
|
"items": {
|
|
8
8
|
"SpeakLeash/bielik-11b-v2.3-instruct:Q4_K_M": {
|
|
@@ -293,7 +293,8 @@
|
|
|
293
293
|
"tokens": 64000,
|
|
294
294
|
"default": false,
|
|
295
295
|
"input": [
|
|
296
|
-
"text"
|
|
296
|
+
"text",
|
|
297
|
+
"image"
|
|
297
298
|
],
|
|
298
299
|
"output": [
|
|
299
300
|
"text"
|
|
@@ -379,7 +380,8 @@
|
|
|
379
380
|
"text"
|
|
380
381
|
],
|
|
381
382
|
"output": [
|
|
382
|
-
"text"
|
|
383
|
+
"text",
|
|
384
|
+
"image"
|
|
383
385
|
],
|
|
384
386
|
"extra": {},
|
|
385
387
|
"imported": false,
|
|
@@ -1066,7 +1068,8 @@
|
|
|
1066
1068
|
"tokens": 0,
|
|
1067
1069
|
"default": false,
|
|
1068
1070
|
"input": [
|
|
1069
|
-
"text"
|
|
1071
|
+
"text",
|
|
1072
|
+
"image"
|
|
1070
1073
|
],
|
|
1071
1074
|
"output": [
|
|
1072
1075
|
"text"
|
|
@@ -1144,7 +1147,8 @@
|
|
|
1144
1147
|
"tokens": 0,
|
|
1145
1148
|
"default": false,
|
|
1146
1149
|
"input": [
|
|
1147
|
-
"text"
|
|
1150
|
+
"text",
|
|
1151
|
+
"image"
|
|
1148
1152
|
],
|
|
1149
1153
|
"output": [
|
|
1150
1154
|
"text"
|
|
@@ -2399,7 +2403,8 @@
|
|
|
2399
2403
|
"tokens": 128000,
|
|
2400
2404
|
"default": false,
|
|
2401
2405
|
"input": [
|
|
2402
|
-
"text"
|
|
2406
|
+
"text",
|
|
2407
|
+
"image"
|
|
2403
2408
|
],
|
|
2404
2409
|
"output": [
|
|
2405
2410
|
"text"
|
|
@@ -2457,7 +2462,8 @@
|
|
|
2457
2462
|
"tokens": 128000,
|
|
2458
2463
|
"default": false,
|
|
2459
2464
|
"input": [
|
|
2460
|
-
"text"
|
|
2465
|
+
"text",
|
|
2466
|
+
"image"
|
|
2461
2467
|
],
|
|
2462
2468
|
"output": [
|
|
2463
2469
|
"text"
|
|
@@ -2516,7 +2522,8 @@
|
|
|
2516
2522
|
"tokens": 128000,
|
|
2517
2523
|
"default": false,
|
|
2518
2524
|
"input": [
|
|
2519
|
-
"text"
|
|
2525
|
+
"text",
|
|
2526
|
+
"image"
|
|
2520
2527
|
],
|
|
2521
2528
|
"output": [
|
|
2522
2529
|
"text"
|
|
@@ -3468,7 +3475,8 @@
|
|
|
3468
3475
|
"tokens": 0,
|
|
3469
3476
|
"default": false,
|
|
3470
3477
|
"input": [
|
|
3471
|
-
"text"
|
|
3478
|
+
"text",
|
|
3479
|
+
"image"
|
|
3472
3480
|
],
|
|
3473
3481
|
"output": [
|
|
3474
3482
|
"image"
|
|
@@ -4564,7 +4572,8 @@
|
|
|
4564
4572
|
"tokens": 0,
|
|
4565
4573
|
"default": false,
|
|
4566
4574
|
"input": [
|
|
4567
|
-
"text"
|
|
4575
|
+
"text",
|
|
4576
|
+
"image"
|
|
4568
4577
|
],
|
|
4569
4578
|
"output": [
|
|
4570
4579
|
"video"
|
|
@@ -4672,7 +4681,8 @@
|
|
|
4672
4681
|
"tokens": 0,
|
|
4673
4682
|
"default": false,
|
|
4674
4683
|
"input": [
|
|
4675
|
-
"text"
|
|
4684
|
+
"text",
|
|
4685
|
+
"image"
|
|
4676
4686
|
],
|
|
4677
4687
|
"output": [
|
|
4678
4688
|
"video"
|
|
@@ -4708,7 +4718,8 @@
|
|
|
4708
4718
|
"tokens": 0,
|
|
4709
4719
|
"default": false,
|
|
4710
4720
|
"input": [
|
|
4711
|
-
"text"
|
|
4721
|
+
"text",
|
|
4722
|
+
"image"
|
|
4712
4723
|
],
|
|
4713
4724
|
"output": [
|
|
4714
4725
|
"video"
|
|
@@ -789,6 +789,7 @@ ipython.docker.install = Für die Ausführung von IPython muss Docker installier
|
|
|
789
789
|
ipython.docker.install.snap = \n\nSNAP VERSION: \nSie sind nicht mit dem eingebauten Docker-Daemon verbunden. Bitte verbinden Sie die Slots mit:\n\nsudo snap connect pygpt:docker-executables docker:docker-executables\n\nsudo snap connect pygpt:docker docker:docker-daemon\n\n...und starten Sie die Anwendung neu.
|
|
790
790
|
ipython.image.build = Das Docker-Image für IPython wurde noch nicht erstellt. Dies wird jetzt geschehen und es kann eine Weile dauern (aber es ist ein einmaliger Vorgang). Die Ausführung des Befehls wurde pausiert. Sobald das Image erstellt ist, führen Sie den Befehl bitte erneut aus.
|
|
791
791
|
layout.split = Bildschirm teilen
|
|
792
|
+
list.all = --- ALLE ---
|
|
792
793
|
menu.audio = Audio / Stimme
|
|
793
794
|
menu.audio.cache.clear = Audio-Cache löschen...
|
|
794
795
|
menu.audio.control.global = Sprachsteuerung (global)
|
|
@@ -803,6 +803,7 @@ ipython.docker.install = Running IPython requires Docker to be installed. Docker
|
|
|
803
803
|
ipython.docker.install.snap = \n\nSNAP VERSION: \nYou are not connected to built-in Docker daemon. Please connect the slots with:\n\nsudo snap connect pygpt:docker-executables docker:docker-executables\n\nsudo snap connect pygpt:docker docker:docker-daemon\n\n...and restart the application.
|
|
804
804
|
ipython.image.build = The Docker image for IPython has not been built yet. This will happen now, and it may take a while (but it's a one-time procedure). The execution of the command has been paused. Once the image is built, please execute the command again.
|
|
805
805
|
layout.split = Split screen
|
|
806
|
+
list.all = --- ALL ---
|
|
806
807
|
menu.audio = Audio / Voice
|
|
807
808
|
menu.audio.cache.clear = Clear audio cache...
|
|
808
809
|
menu.audio.control.global = Voice control (global)
|
|
@@ -790,6 +790,7 @@ ipython.docker.install = Ejecutar IPython requiere que Docker esté instalado. D
|
|
|
790
790
|
ipython.docker.install.snap = \n\nVERSIÓN SNAP: \nNo está conectado al demonio Docker incorporado. Por favor conecte los espacios con:\n\nsudo snap connect pygpt:docker-executables docker:docker-executables\n\nsudo snap connect pygpt:docker docker:docker-daemon\n\n...y reinicie la aplicación.
|
|
791
791
|
ipython.image.build = La imagen de Docker para IPython aún no ha sido construida. Esto sucederá ahora, y puede tardar un tiempo (pero es un procedimiento único). La ejecución del comando ha sido pausada. Una vez que la imagen esté construida, por favor ejecute el comando nuevamente.
|
|
792
792
|
layout.split = Pantalla dividida
|
|
793
|
+
list.all = --- TODOS ---
|
|
793
794
|
menu.audio = Audio / Voz
|
|
794
795
|
menu.audio.cache.clear = Limpiar caché de audio...
|
|
795
796
|
menu.audio.control.global = Control de voz (global)
|
|
@@ -789,6 +789,7 @@ ipython.docker.install = L'exécution d'IPython nécessite l'installation de Doc
|
|
|
789
789
|
ipython.docker.install.snap = \n\nVERSION SNAP : \nVous n'êtes pas connecté au démon Docker intégré. Veuillez connecter les slots avec :\n\nsudo snap connect pygpt:docker-executables docker:docker-executables\n\nsudo snap connect pygpt:docker docker:docker-daemon\n\n...et redémarrez l'application.
|
|
790
790
|
ipython.image.build = L'image Docker pour IPython n'a pas encore été construite. Cela va se produire maintenant, et cela peut prendre un certain temps (mais c'est une procédure unique). L'exécution de la commande a été mise en pause. Une fois l'image construite, veuillez exécuter à nouveau la commande.
|
|
791
791
|
layout.split = Écran scindé
|
|
792
|
+
list.all = --- TOUS ---
|
|
792
793
|
menu.audio = Audio / Voix
|
|
793
794
|
menu.audio.cache.clear = Effacer le cache audio...
|
|
794
795
|
menu.audio.control.global = Contrôle vocal (global)
|
|
@@ -789,6 +789,7 @@ ipython.docker.install = L'esecuzione di IPython richiede l'installazione di Doc
|
|
|
789
789
|
ipython.docker.install.snap = \n\nVERSIONE SNAP: \nNon sei connesso al demone Docker integrato. Connetti gli slot con:\n\nsudo snap connect pygpt:docker-executables docker:docker-executables\n\nsudo snap connect pygpt:docker docker:docker-daemon\n\n...e riavvia l'applicazione.
|
|
790
790
|
ipython.image.build = L'immagine Docker per IPython non è stata ancora costruita. Questo avverrà ora e potrebbe richiedere del tempo (ma è una procedura una tantum). L'esecuzione del comando è stata messa in pausa. Una volta costruita l'immagine, esegui nuovamente il comando.
|
|
791
791
|
layout.split = Schermo diviso
|
|
792
|
+
list.all = --- TUTTI ---
|
|
792
793
|
menu.audio = Audio / Voce
|
|
793
794
|
menu.audio.cache.clear = Cancella cache audio...
|
|
794
795
|
menu.audio.control.global = Controllo vocale (globale)
|
|
@@ -51,7 +51,7 @@ action.save = Zapisz
|
|
|
51
51
|
action.save_as = Zapisz jako...
|
|
52
52
|
action.save_selection_as = Zapisz zaznaczenie jako...
|
|
53
53
|
action.select_all = Wybierz wszystko
|
|
54
|
-
action.select_unselect_all = Zaznacz/Odznacz wszystko
|
|
54
|
+
action.select_unselect_all = Zaznacz/Odznacz wszystko
|
|
55
55
|
action.tab.add.chat: Dodaj nowy czat
|
|
56
56
|
action.tab.add.chat.tooltip: Dodaj nowy czat (PPM dla więcej opcji...)
|
|
57
57
|
action.tab.add.notepad = Dodaj nowy notatnik
|
|
@@ -790,6 +790,7 @@ ipython.docker.install = Uruchomienie IPython wymaga zainstalowania Dockera. Doc
|
|
|
790
790
|
ipython.docker.install.snap = \n\nWERSJA SNAP: \nNie jesteś połączony z wbudowanym daemonem Docker. Połącz sloty za pomocą:\n\nsudo snap connect pygpt:docker-executables docker:docker-executables\n\nsudo snap connect pygpt:docker docker:docker-daemon\n\n...i uruchom ponownie aplikację.
|
|
791
791
|
ipython.image.build = Obraz Dockera dla IPython nie został jeszcze zbudowany. Nastąpi to teraz i może to potrwać chwilę (ale to jednorazowa procedura). Wykonywanie polecenia zostało wstrzymane. Po zbudowaniu obrazu możesz ponownie poprosić o wykonanie polecenia.
|
|
792
792
|
layout.split = Podziel ekran
|
|
793
|
+
list.all = --- WSZYSTKIE ---
|
|
793
794
|
menu.audio = Audio / Mowa
|
|
794
795
|
menu.audio.cache.clear = Wyczyść pamięć podręczną audio...
|
|
795
796
|
menu.audio.control.global = Kontrola głosowa (globalna)
|
|
@@ -789,6 +789,7 @@ ipython.docker.install = Для запуску IPython необхідно вст
|
|
|
789
789
|
ipython.docker.install.snap = \n\nVERSIÓN SNAP: \nВи не підключені до вбудованого демона Docker. Будь ласка, підключіть слоти з:\n\nsudo snap connect pygpt:docker-executables docker:docker-executables\n\nsudo snap connect pygpt:docker docker:docker-daemon\n\n...та перезапустіть програму.
|
|
790
790
|
ipython.image.build = Docker-образ для IPython ще не був створений. Це відбудеться зараз, і це може зайняти деякий час (але це одноразова процедура). Виконання команди було призупинено. Після створення образу, будь ласка, виконайте команду знову.
|
|
791
791
|
layout.split = Розділити екран
|
|
792
|
+
list.all = --- ВСІ ---
|
|
792
793
|
menu.audio = Аудіо / Голос
|
|
793
794
|
menu.audio.cache.clear = Очистити кеш аудіо...
|
|
794
795
|
menu.audio.control.global = Контроль голосу (глобальний)
|
|
@@ -789,6 +789,7 @@ ipython.docker.install = 运行 IPython 需要安装 Docker。系统上未检测
|
|
|
789
789
|
ipython.docker.install.snap = \n\nSNAP 版本:\n您未连接到内置的 Docker 守护进程。请连接插槽:\n\nsudo snap connect pygpt:docker-executables docker:docker-executables\n\nsudo snap connect pygpt:docker docker:docker-daemon\n\n...并重启应用程序。
|
|
790
790
|
ipython.image.build = IPython 的 Docker 镜像尚未构建。这将立即发生,可能需要一段时间(但这是一次性过程)。命令的执行已暂停。镜像构建完成后,请再次执行命令。
|
|
791
791
|
layout.split = 分屏
|
|
792
|
+
list.all = --- 所有 ---
|
|
792
793
|
menu.audio = 音頻/語音
|
|
793
794
|
menu.audio.cache.clear = 清除音频缓存...
|
|
794
795
|
menu.audio.control.global = 语音控制(全局)
|
pygpt_net/item/model.py
CHANGED
|
@@ -282,7 +282,7 @@ class ModelItem:
|
|
|
282
282
|
|
|
283
283
|
:return: True if supports image output
|
|
284
284
|
"""
|
|
285
|
-
return
|
|
285
|
+
return MULTIMODAL_IMAGE in self.output or MODE_VISION in self.mode
|
|
286
286
|
|
|
287
287
|
def is_audio_input(self) -> bool:
|
|
288
288
|
"""
|
|
@@ -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.
|
|
9
|
+
# Updated Date: 2025.12.26 12:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import datetime
|
|
@@ -328,7 +328,7 @@ class VideoWorker(QRunnable):
|
|
|
328
328
|
portrait = ar in ("9:16", "9x16", "portrait")
|
|
329
329
|
|
|
330
330
|
if "sora-2-pro" in model:
|
|
331
|
-
if "1024" in res or "1792" in res or "hd" in res:
|
|
331
|
+
if "1024" in res or "1080" in res or "1792" in res or "hd" in res:
|
|
332
332
|
return "1024x1792" if portrait else "1792x1024"
|
|
333
333
|
|
|
334
334
|
return "720x1280" if portrait else "1280x720"
|
|
@@ -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.
|
|
9
|
+
# Updated Date: 2025.12.26 11:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
from packaging.version import parse as parse_version, Version
|
|
@@ -77,6 +77,31 @@ class Patch:
|
|
|
77
77
|
data[model] = base_model
|
|
78
78
|
updated = True
|
|
79
79
|
|
|
80
|
+
# < 2.6.67 <--- add missing image input
|
|
81
|
+
if old < parse_version("2.6.67"):
|
|
82
|
+
print("Migrating models from < 2.6.67...")
|
|
83
|
+
models_to_update = [
|
|
84
|
+
"claude-opus-4-5",
|
|
85
|
+
"claude-sonnet-4-5",
|
|
86
|
+
"gemini-3-flash-preview",
|
|
87
|
+
"gemini-3-pro-image-preview",
|
|
88
|
+
"gemini-3-pro-preview",
|
|
89
|
+
"gpt-5.2-low",
|
|
90
|
+
"gpt-5.2-medium",
|
|
91
|
+
"gpt-5.2-high",
|
|
92
|
+
"gpt-image-1.5",
|
|
93
|
+
"nano-banana-pro-preview",
|
|
94
|
+
"sora-2",
|
|
95
|
+
"veo-3.1-fast-generate-preview",
|
|
96
|
+
"veo-3.1-generate-preview"
|
|
97
|
+
]
|
|
98
|
+
for model in models_to_update:
|
|
99
|
+
if model in data:
|
|
100
|
+
m = data[model]
|
|
101
|
+
if not m.is_image_input():
|
|
102
|
+
m.input.append("image")
|
|
103
|
+
updated = True
|
|
104
|
+
|
|
80
105
|
# update file
|
|
81
106
|
if updated:
|
|
82
107
|
# fix empty/broken data
|
pygpt_net/ui/dialog/models.py
CHANGED
|
@@ -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.26 13:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import copy
|
|
@@ -166,11 +166,20 @@ class Models:
|
|
|
166
166
|
self.window.ui.nodes['models.editor.search'].on_search = self._on_search_models
|
|
167
167
|
self.window.ui.nodes['models.editor.search'].on_clear = self._on_clear_models # clear via "X" button
|
|
168
168
|
|
|
169
|
+
# provider select
|
|
170
|
+
option_provider = self.window.controller.model.editor.get_provider_option()
|
|
171
|
+
self.window.ui.config[parent_id]['provider_global'] = OptionCombo(self.window, parent_id, 'provider_global',
|
|
172
|
+
option_provider)
|
|
173
|
+
provider_keys = self.window.controller.config.placeholder.apply_by_id('llm_providers')
|
|
174
|
+
provider_keys.insert(0, {"-": trans("list.all")}) # add "All" option
|
|
175
|
+
self.window.ui.config[parent_id]['provider_global'].set_keys(provider_keys)
|
|
176
|
+
|
|
169
177
|
# container for search + list (left panel)
|
|
170
178
|
left_layout = QVBoxLayout()
|
|
171
179
|
left_layout.setContentsMargins(0, 0, 0, 0)
|
|
172
180
|
left_layout.setSpacing(6)
|
|
173
181
|
left_layout.addWidget(self.window.ui.nodes['models.editor.search'])
|
|
182
|
+
left_layout.addWidget(self.window.ui.config[parent_id]['provider_global'])
|
|
174
183
|
left_layout.addWidget(self.window.ui.nodes[id])
|
|
175
184
|
left_widget = QWidget()
|
|
176
185
|
left_widget.setLayout(left_layout)
|
|
@@ -6,12 +6,13 @@
|
|
|
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.26 12:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
|
-
from PySide6.QtWidgets import
|
|
12
|
+
from PySide6.QtWidgets import QWidget, QHBoxLayout
|
|
13
13
|
|
|
14
14
|
from pygpt_net.ui.widget.option.combo import OptionCombo
|
|
15
|
+
from pygpt_net.ui.widget.option.input import OptionInput
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
class Video:
|
|
@@ -36,11 +37,18 @@ class Video:
|
|
|
36
37
|
container = QWidget()
|
|
37
38
|
ui.nodes['video.options'] = container
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
option_ratio = self.window.core.video.get_aspect_ratio_option()
|
|
41
|
+
option_resolution = self.window.core.video.get_resolution_option()
|
|
42
|
+
option_duration = self.window.core.video.get_duration_option()
|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
conf_global['video.aspect_ratio'] = OptionCombo(self.window, 'global', 'video.aspect_ratio', option_ratio)
|
|
45
|
+
conf_global['video.resolution'] = OptionCombo(self.window, 'global', 'video.resolution', option_resolution)
|
|
46
|
+
conf_global['video.duration'] = OptionInput(self.window, 'global', 'video.duration', option_duration)
|
|
47
|
+
|
|
48
|
+
rows = QHBoxLayout()
|
|
49
|
+
rows.addWidget(conf_global['video.resolution'], 2)
|
|
50
|
+
rows.addWidget(conf_global['video.aspect_ratio'], 2)
|
|
51
|
+
rows.addWidget(conf_global['video.duration'], 1)
|
|
44
52
|
rows.setContentsMargins(2, 5, 5, 5)
|
|
45
53
|
|
|
46
54
|
container.setLayout(rows)
|
|
@@ -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.26 12:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
from PySide6.QtGui import QAction, QIcon
|
|
@@ -104,6 +104,8 @@ class OptionInput(QLineEdit):
|
|
|
104
104
|
self.real_time = self.option["real_time"]
|
|
105
105
|
if "read_only" in self.option and self.option["read_only"]:
|
|
106
106
|
self.setReadOnly(True)
|
|
107
|
+
if "placeholder" in self.option and self.option["placeholder"]:
|
|
108
|
+
self.setPlaceholderText(self.option["placeholder"])
|
|
107
109
|
|
|
108
110
|
# on update hook
|
|
109
111
|
self.textChanged.connect(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pygpt-net
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.67
|
|
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.6.
|
|
122
|
+
Release: **2.6.67** | build: **2025-12-26** | Python: **>=3.10, <3.14**
|
|
123
123
|
|
|
124
124
|
> Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
|
|
125
125
|
>
|
|
@@ -3753,6 +3753,12 @@ may consume additional tokens that are not displayed in the main window.
|
|
|
3753
3753
|
|
|
3754
3754
|
## Recent changes:
|
|
3755
3755
|
|
|
3756
|
+
**2.6.67 (2025-12-26)**
|
|
3757
|
+
|
|
3758
|
+
- Added a provider filter to the models editor.
|
|
3759
|
+
- Added video options (resolution, duration) to the toolbox.
|
|
3760
|
+
- Updated the models configuration.
|
|
3761
|
+
|
|
3756
3762
|
**2.6.66 (2025-12-25)**
|
|
3757
3763
|
|
|
3758
3764
|
- Added Sora 2 support - #155.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
pygpt_net/CHANGELOG.txt,sha256=
|
|
1
|
+
pygpt_net/CHANGELOG.txt,sha256=316VpcbRPH7Etyv-EU7Wfn5iIggPPEBR1iNn2Y2aku0,110403
|
|
2
2
|
pygpt_net/LICENSE,sha256=dz9sfFgYahvu2NZbx4C1xCsVn9GVer2wXcMkFRBvqzY,1146
|
|
3
|
-
pygpt_net/__init__.py,sha256=
|
|
3
|
+
pygpt_net/__init__.py,sha256=Ws-mA8PtU-zHDNjJ4ig8GouxfG5E_RmEf-BF1IrDzCo,1373
|
|
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
|
|
@@ -69,7 +69,7 @@ pygpt_net/controller/config/field/combo.py,sha256=DCW8medesKAbXx48dOoMI-33C_cifI
|
|
|
69
69
|
pygpt_net/controller/config/field/dictionary.py,sha256=m3nSL8xAp0NRnr_rVmTZA5uTQF1lTh_07wknxdgtn6o,6443
|
|
70
70
|
pygpt_net/controller/config/field/input.py,sha256=Dx04ivrwM1KqA41uHYNGzwq1c7O-zPnU_NI-3I45hPY,3992
|
|
71
71
|
pygpt_net/controller/config/field/slider.py,sha256=dYbICd3ID-aLlc2a-bvFgWS4jceVz2UliTQKYy7Pl1Q,4560
|
|
72
|
-
pygpt_net/controller/config/field/textarea.py,sha256=
|
|
72
|
+
pygpt_net/controller/config/field/textarea.py,sha256=yhP0edUXlnmCEAkqevoeFqrBdtZQHSjUKodd5VFbZ3o,2825
|
|
73
73
|
pygpt_net/controller/config/placeholder.py,sha256=-PWPNILPVkxMsY64aYnKTWvgUIvx7KA2Nwfd2LW_K30,16711
|
|
74
74
|
pygpt_net/controller/ctx/__init__.py,sha256=0wH7ziC75WscBW8cxpeGBwEz5tolo_kCxGPoz2udI_E,507
|
|
75
75
|
pygpt_net/controller/ctx/common.py,sha256=1oR7cUgVzO_asqiRln4L4vZaxXsssAPtGyAp-B0FUE4,6409
|
|
@@ -83,7 +83,7 @@ pygpt_net/controller/dialogs/__init__.py,sha256=jI2WisG3lzbeyf__1Y7g7wWrxlr1QnYB
|
|
|
83
83
|
pygpt_net/controller/dialogs/confirm.py,sha256=ILMj4DtlI-dA_fZmugande6XnTW892WoAM0ni_oIFkE,17429
|
|
84
84
|
pygpt_net/controller/dialogs/debug.py,sha256=TZN5dvw21dtpgE0uCQ0-djRYsrL9eEFGlZQGuSCV3G4,6166
|
|
85
85
|
pygpt_net/controller/dialogs/dialogs.py,sha256=sJHyZxkAn9QKTegUqx_xETesN2ecMBkrtf-VsCubr2w,1008
|
|
86
|
-
pygpt_net/controller/dialogs/info.py,sha256=
|
|
86
|
+
pygpt_net/controller/dialogs/info.py,sha256=qfG1T2_K11-h_97gBUwV2vHAdICQzSUoQOFBmibIapM,3993
|
|
87
87
|
pygpt_net/controller/files/__init__.py,sha256=4dJY1HOUTQ6GPAvvUQmTNwTRJKoShyCP8Lo8j2dD0ec,509
|
|
88
88
|
pygpt_net/controller/files/files.py,sha256=GxU5nStgwZqnO85ZxZPgQ11l2QoljFh2sbh6_3s9tTs,18123
|
|
89
89
|
pygpt_net/controller/finder/__init__.py,sha256=EUogcwzk4T0zyms2PJXduL3o1PzWwu0Q0qSo8Eu_8bw,510
|
|
@@ -108,11 +108,11 @@ pygpt_net/controller/launcher/launcher.py,sha256=lFPfzWF-z88FhDZ92XrEwAG_W8rVomv
|
|
|
108
108
|
pygpt_net/controller/layout/__init__.py,sha256=0pxxzjAUa1hS27d80Q0SgDV1Uzs7A9mZrUxb1cs-oHs,510
|
|
109
109
|
pygpt_net/controller/layout/layout.py,sha256=HlbfGK-_HXQrifSh5tWpPtu5JzWN2fktVmh8ofBDMfQ,13058
|
|
110
110
|
pygpt_net/controller/media/__init__.py,sha256=N1UnDuteomgsBxRmVUd1Hm6UeGbHESYY9SowOhJj-YI,513
|
|
111
|
-
pygpt_net/controller/media/media.py,sha256=
|
|
111
|
+
pygpt_net/controller/media/media.py,sha256=m-eFE-Rf3wt2Zpme4964ShDrIuSjny1oLmuWj7EKhFw,5954
|
|
112
112
|
pygpt_net/controller/mode/__init__.py,sha256=1Kcz0xHc2IW_if9S9eQozBUvIu69eLAe7T-Re2lJxhk,508
|
|
113
113
|
pygpt_net/controller/mode/mode.py,sha256=H5hNiL6U4ZBxA5yhYWVmywINrvpNMZbI1XslLd12mdA,7979
|
|
114
114
|
pygpt_net/controller/model/__init__.py,sha256=mQXq9u269D8TD3u_44J6DFFyHKkaZplk-tRFCssBGbE,509
|
|
115
|
-
pygpt_net/controller/model/editor.py,sha256=
|
|
115
|
+
pygpt_net/controller/model/editor.py,sha256=kvwTBLkoEQCS7IqHT0KiUcZBKEf0uH6KFFNT2lAeDGY,17946
|
|
116
116
|
pygpt_net/controller/model/importer.py,sha256=9O35I0DjFOudWS41n5WPsKYFQm_K0XHOUKXvJt7l5kI,23837
|
|
117
117
|
pygpt_net/controller/model/model.py,sha256=E0VfgIwNn75pjnB_v3RnqHr6jV1Eeua8VgpreQlA8vI,9132
|
|
118
118
|
pygpt_net/controller/notepad/__init__.py,sha256=ZbMh4D6nsGuI4AwYMdegfij5ubmUznEE_UcqSSDjSPk,511
|
|
@@ -133,7 +133,7 @@ pygpt_net/controller/realtime/__init__.py,sha256=MhvJb5wBqcpX6uylof01qEDRdU3SepT
|
|
|
133
133
|
pygpt_net/controller/realtime/manager.py,sha256=qtifO3sAtT1ROtRs9N_8t6A8_wgxOxxGl-PfLHzhdxY,1762
|
|
134
134
|
pygpt_net/controller/realtime/realtime.py,sha256=Rw3sLhAaafcam5rNMZVRgds-BO40niSAyU2FbfHj4F0,10912
|
|
135
135
|
pygpt_net/controller/settings/__init__.py,sha256=hn5n_Hti6byJQdQCs4Ld2EbPoZF7dHVMwqaBPscePQ8,512
|
|
136
|
-
pygpt_net/controller/settings/editor.py,sha256=
|
|
136
|
+
pygpt_net/controller/settings/editor.py,sha256=GuhfCrHtBWV-1JVtR9witSFRU7pvTkmKG1TVYlEATcI,19258
|
|
137
137
|
pygpt_net/controller/settings/profile.py,sha256=aMz6jBiuqlrDc0KXUZnuMCf0EFTaY76P5p-TTW1-2B8,18993
|
|
138
138
|
pygpt_net/controller/settings/settings.py,sha256=cFA4ZKjcsu8uoapWMTllUUB9DvJXVBzbxLT6InRS4zU,7768
|
|
139
139
|
pygpt_net/controller/settings/workdir.py,sha256=l3dXKVMDhegcunOeZPfuMsloyjQznhWw6CxVrNVZ_k8,23262
|
|
@@ -397,7 +397,7 @@ pygpt_net/core/types/__init__.py,sha256=GHk9e0IaR7mNqD5qMNQnJxFpaXvPURy-IIkCzS7P
|
|
|
397
397
|
pygpt_net/core/types/agent.py,sha256=74GRk_T1hSt7P2CSYjn0oTeYH3j3-ZLKsG_62Abu674,872
|
|
398
398
|
pygpt_net/core/types/base.py,sha256=ZLJkuQwaeSmIkTBQMwHtW8rsTKJD9wFpaEjwMOSzNfI,638
|
|
399
399
|
pygpt_net/core/types/console.py,sha256=vzYZ4fYkwK71ECJB7Qop0qcVIC6USLxxKuFN-ZweuB0,713
|
|
400
|
-
pygpt_net/core/types/image.py,sha256=
|
|
400
|
+
pygpt_net/core/types/image.py,sha256=J_zLX9RdMz0WjDJsGpQ1g2ZBnYzS9J39HqYucPTOplU,3295
|
|
401
401
|
pygpt_net/core/types/mode.py,sha256=yY_6B2n8xEszbqph7mWTbgECHmJjAgal8CFNcUgyG7M,904
|
|
402
402
|
pygpt_net/core/types/model.py,sha256=V8O9yipzqyTmVjzeESQ1xvZpSdRU6UYmvWJ1M2Kxs5A,549
|
|
403
403
|
pygpt_net/core/types/multimodal.py,sha256=yeKLZ5MrCHU5LhWwFE-yGApt-FB59kTmElo3G7td9uw,594
|
|
@@ -406,7 +406,7 @@ pygpt_net/core/types/tools.py,sha256=BdonNwytk5SxYtYdlDkMg5lMvFoXz3CQJHZ__oVlm_8
|
|
|
406
406
|
pygpt_net/core/updater/__init__.py,sha256=fC4g0Xn9S8lLxGbop1q2o2qi9IZegoVayNVWemgBwds,511
|
|
407
407
|
pygpt_net/core/updater/updater.py,sha256=RArlEaYWNw5PIKcG2hMWqZI3DLbi8vq7Ip_rc8TBBNI,17045
|
|
408
408
|
pygpt_net/core/video/__init__.py,sha256=PBAsunvkPSJJvcx2XivIul96XsbcW8mPAda_CX3dK1U,513
|
|
409
|
-
pygpt_net/core/video/video.py,sha256=
|
|
409
|
+
pygpt_net/core/video/video.py,sha256=P3bx0KzPosGNF9jnARMgP13gdY2FX9Hm6JHuxc5XGdo,10103
|
|
410
410
|
pygpt_net/core/vision/__init__.py,sha256=dFEilXM2Z128SmgBlLn1DvyLCksdcyqFI7rln_VPsf8,510
|
|
411
411
|
pygpt_net/core/vision/analyzer.py,sha256=kzIBRhYrsPz3GD7ekN6GmQoF_f2e1w3WyVDnhse2s0g,4626
|
|
412
412
|
pygpt_net/core/vision/vision.py,sha256=JX_tazW31Xesd6nPY1I1UcGmPd_V0hCG3JfMYW06oHo,728
|
|
@@ -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=jFuZFxfxwjakyVHxQ2u9LsZpxlYV0gjb55ROqmg01Yc,30937
|
|
424
|
+
pygpt_net/data/config/models.json,sha256=dVjpaDSkgWkteQejwdn6oSZ4xrrha5j9u6w3ueN97Bo,135707
|
|
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
|
|
@@ -1730,14 +1730,14 @@ pygpt_net/data/js/katex/katex.min.js,sha256=KLASOtKS2x8pUxWVzCDmlWJ4jhuLb0vtrgak
|
|
|
1730
1730
|
pygpt_net/data/js/markdown-it/markdown-it-katex.min.js,sha256=-wMst2a9i8Borapa9_hxPvpQysfFE-yph8GrBmDoA68,1670
|
|
1731
1731
|
pygpt_net/data/js/markdown-it/markdown-it.min.js,sha256=OMcKHnypGrQOLZ5uYBKYUacX7Rx9Ssu91Bv5UDeRz2g,123618
|
|
1732
1732
|
pygpt_net/data/languages.csv,sha256=fvtER6vnTXFHQslCh-e0xCfZDQ-ijgW4GYpOJG4U7LY,8289
|
|
1733
|
-
pygpt_net/data/locale/locale.de.ini,sha256=
|
|
1734
|
-
pygpt_net/data/locale/locale.en.ini,sha256=
|
|
1735
|
-
pygpt_net/data/locale/locale.es.ini,sha256=
|
|
1736
|
-
pygpt_net/data/locale/locale.fr.ini,sha256=
|
|
1737
|
-
pygpt_net/data/locale/locale.it.ini,sha256=
|
|
1738
|
-
pygpt_net/data/locale/locale.pl.ini,sha256=
|
|
1739
|
-
pygpt_net/data/locale/locale.uk.ini,sha256=
|
|
1740
|
-
pygpt_net/data/locale/locale.zh.ini,sha256=
|
|
1733
|
+
pygpt_net/data/locale/locale.de.ini,sha256=l0eA3RMz6g3Q425lTBr1Q6zabprAxPpBJ00puzmK9Fw,112512
|
|
1734
|
+
pygpt_net/data/locale/locale.en.ini,sha256=27zD937x8HYylAnXqG3Ns20SCtKNPlp3wKFhCOP-XVs,106635
|
|
1735
|
+
pygpt_net/data/locale/locale.es.ini,sha256=gPfFGZR-ryiQvAJl94oZHxP_AjkL3DxwRXp4Ckj4CoY,113066
|
|
1736
|
+
pygpt_net/data/locale/locale.fr.ini,sha256=9KOWqm8VanLD7li43W2g4HxHstj48rROI3g-8-mj6aQ,115934
|
|
1737
|
+
pygpt_net/data/locale/locale.it.ini,sha256=VMt9gMUwr4BLB8KYMcmXM3TpwK7CWxgZoFOAj8NVay0,110762
|
|
1738
|
+
pygpt_net/data/locale/locale.pl.ini,sha256=Dse8qBcdK6-mSIPQDtTFir6XmEBkSE1WAwaeVOAxiQE,110430
|
|
1739
|
+
pygpt_net/data/locale/locale.uk.ini,sha256=oRn979oDpZbn0-YTiQsnjStjlZmdRSbJDfpD05ajWAI,153881
|
|
1740
|
+
pygpt_net/data/locale/locale.zh.ini,sha256=PVOe00VqBT-VBAh6v7MlBvybYaO_9k33LYi-wzyC5D4,98809
|
|
1741
1741
|
pygpt_net/data/locale/plugin.agent.de.ini,sha256=BY28KpfFvgfVYJzcw2o5ScWnR4uuErIYGyc3NVHlmTw,1714
|
|
1742
1742
|
pygpt_net/data/locale/plugin.agent.en.ini,sha256=HwOWCI7e8uzlIgyRWRVyr1x6Xzs8Xjv5pfEc7jfLOo4,1728
|
|
1743
1743
|
pygpt_net/data/locale/plugin.agent.es.ini,sha256=bqaJQne8HPKFVtZ8Ukzo1TSqVW41yhYbGUqW3j2x1p8,1680
|
|
@@ -1935,7 +1935,7 @@ pygpt_net/item/calendar_note.py,sha256=ab2cegCxr-p9WU_r3FkCNg0TwLHhfV4--O4Gei-Ls
|
|
|
1935
1935
|
pygpt_net/item/ctx.py,sha256=kHxnujf7vzVP3CYjSe6PFV1Bf7DE2fozlGveA7GX7jY,25783
|
|
1936
1936
|
pygpt_net/item/index.py,sha256=NTDBgNjiyaixTFJu_1oBqoVajf92c2U1Oa3BKQ11poU,1920
|
|
1937
1937
|
pygpt_net/item/mode.py,sha256=0uPU7ciqVLaEcijUA-D73ABMoLUFtgPytdXUuwqtews,688
|
|
1938
|
-
pygpt_net/item/model.py,sha256=
|
|
1938
|
+
pygpt_net/item/model.py,sha256=Gt20je8pTQ_cAQwbw6tQqHF3eEmXWoNCTakFLNJRk7k,10113
|
|
1939
1939
|
pygpt_net/item/notepad.py,sha256=7v3A3HJjew0IoFM65Li0xfoSEdJzfEUZM1IH1ND0Bxw,1805
|
|
1940
1940
|
pygpt_net/item/preset.py,sha256=nkLoyfHoZnjoqKKynDo0alJDb_o8BFxTZRYk7_2uQss,8991
|
|
1941
1941
|
pygpt_net/item/prompt.py,sha256=xequZDTEv4eKjmC5OLqZnNrbyy0YA4LHe0k2RpPiBw0,1745
|
|
@@ -2189,7 +2189,7 @@ pygpt_net/provider/api/openai/store.py,sha256=8H2SQH9wU9Yoeai6gqajbJ1N33CSv26IA5
|
|
|
2189
2189
|
pygpt_net/provider/api/openai/summarizer.py,sha256=vuJz6mj9F9Psiat0d-fn1zNGgXc-WkXJyi0jrvijO6E,2978
|
|
2190
2190
|
pygpt_net/provider/api/openai/tools.py,sha256=Oh9mnGIXfnwoRTx6f-9ZItD-v3loyr4OtcvhmgroyrY,3146
|
|
2191
2191
|
pygpt_net/provider/api/openai/utils.py,sha256=O0H0EPb4lXUMfE1bFdWB56yuWLv7M5owVIGWRyDDv-E,855
|
|
2192
|
-
pygpt_net/provider/api/openai/video.py,sha256
|
|
2192
|
+
pygpt_net/provider/api/openai/video.py,sha256=XZeSipNuqrxTU6Kb7dmzDTxtLzRZAgJNh-AI0fzVLKg,22504
|
|
2193
2193
|
pygpt_net/provider/api/openai/vision.py,sha256=dsG-pAr1MP-A1aQLc3Yn2QzPNwMlPGQEi4LM1ry3YY4,12883
|
|
2194
2194
|
pygpt_net/provider/api/openai/worker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2195
2195
|
pygpt_net/provider/api/openai/worker/assistants.py,sha256=z1fZzl59FYMVXxv48r9JVIzSCFgLzYOeKXhreZcIzO8,21538
|
|
@@ -2281,7 +2281,7 @@ pygpt_net/provider/core/mode/patch.py,sha256=VS2KCYW05jxLd-lcStNY1k4fHKUUrVVLTdR
|
|
|
2281
2281
|
pygpt_net/provider/core/model/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
|
|
2282
2282
|
pygpt_net/provider/core/model/base.py,sha256=L1x2rHha8a8hnCUYxZr88utay1EWEx5qBXW_2acpAN0,1319
|
|
2283
2283
|
pygpt_net/provider/core/model/json_file.py,sha256=l74l_n5PEHNp-FsoHtO9LHflz3RFKwDwKwOKN0stgZw,8418
|
|
2284
|
-
pygpt_net/provider/core/model/patch.py,sha256=
|
|
2284
|
+
pygpt_net/provider/core/model/patch.py,sha256=eWp7xIz8AWnWnGtFIRFphP-IiZyHQP2ykW_403wuYbI,4371
|
|
2285
2285
|
pygpt_net/provider/core/model/patches/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2286
2286
|
pygpt_net/provider/core/model/patches/patch_before_2_6_42.py,sha256=4z10uc4NnmCCL9AYWrXfzi1Xet5OZFjc7K-Nf0s4T1s,37729
|
|
2287
2287
|
pygpt_net/provider/core/notepad/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
|
|
@@ -2485,7 +2485,7 @@ pygpt_net/ui/dialog/find.py,sha256=8VAcSRFkCLu4Yum6LwHgHg_8Ogn_ytco0ShaJLIJDXk,9
|
|
|
2485
2485
|
pygpt_net/ui/dialog/image.py,sha256=nF7ejD44_UAAppUC3OpqaoSvzA-NM2B5fVOO0L8vFBE,2538
|
|
2486
2486
|
pygpt_net/ui/dialog/license.py,sha256=15Qrk_vnybnI3CAtvOHYJy8cSAkIG7fPG-HYqmSdctQ,2272
|
|
2487
2487
|
pygpt_net/ui/dialog/logger.py,sha256=OGFKlAyeMgNQI4a-VW9bDXSrcsPtEC6rLhtdu11lsJc,2296
|
|
2488
|
-
pygpt_net/ui/dialog/models.py,sha256=
|
|
2488
|
+
pygpt_net/ui/dialog/models.py,sha256=kog8P4O061LetxHTJARwrQxXu3so_xkhMK31iC-Ceog,20376
|
|
2489
2489
|
pygpt_net/ui/dialog/models_importer.py,sha256=14kxf7KkOdTP-tcgTN5OphNZajlivDPTDKBosebuyog,4505
|
|
2490
2490
|
pygpt_net/ui/dialog/plugins.py,sha256=88TsvYWHdmR5hepld6ouSEa4BDhewAQ-JFE7RWGSdy8,20287
|
|
2491
2491
|
pygpt_net/ui/dialog/preset.py,sha256=3Uv29ie0a-mtyDNcF4C1NS75icbW6FNY_iIoJPTOnGA,20533
|
|
@@ -2533,7 +2533,7 @@ pygpt_net/ui/layout/toolbox/prompt.py,sha256=subUUZJgkCmvSRekZcgVYs6wzl-MYPBLXKT
|
|
|
2533
2533
|
pygpt_net/ui/layout/toolbox/raw.py,sha256=Uvkk0QnrOIZ9sHJ3EnDzTRaWDLNC6cdgYyICPI8lJCk,1803
|
|
2534
2534
|
pygpt_net/ui/layout/toolbox/split.py,sha256=Hs9hZPciLXCRV_izoayrBlJSCuTGumdNki6z1giWUUo,1696
|
|
2535
2535
|
pygpt_net/ui/layout/toolbox/toolbox.py,sha256=VHzyzm7LjcAN30h111SEP6fdXwi84DYyf8CE1X3pdt8,2799
|
|
2536
|
-
pygpt_net/ui/layout/toolbox/video.py,sha256=
|
|
2536
|
+
pygpt_net/ui/layout/toolbox/video.py,sha256=MWQiDmO7ajpUDotb5tYaLr15UFS27E9s4LG-ReMenEc,2014
|
|
2537
2537
|
pygpt_net/ui/layout/toolbox/vision.py,sha256=E6-lLfU3vrWdlprayr6gxFs7F7AGkn4OIrFXrQ9p5XA,2035
|
|
2538
2538
|
pygpt_net/ui/main.py,sha256=j7NA1w4KAtjtUeD_XzXcd0IEIUkWiU_5C--6Do-s2XE,14228
|
|
2539
2539
|
pygpt_net/ui/menu/__init__.py,sha256=wAIKG9wLWfYv6tpXCTXptWb_XKoCc-4lYWLDvV1bVYk,508
|
|
@@ -2640,7 +2640,7 @@ pygpt_net/ui/widget/option/checkbox_list.py,sha256=SgnkLTlVZCcU3ehqAfi_w28x693w_
|
|
|
2640
2640
|
pygpt_net/ui/widget/option/cmd.py,sha256=Ii_i9hR4oRmG4-TPZ-FHuTv3I1vL96YLcDP2QSKmAbI,5800
|
|
2641
2641
|
pygpt_net/ui/widget/option/combo.py,sha256=UZH-SKfnRHHHoKFpLBgOTykBMOXYQ9gph0e3vrg3WAQ,11452
|
|
2642
2642
|
pygpt_net/ui/widget/option/dictionary.py,sha256=67F-BGOMuH-MCEvdvE-cVqkyE8xR8euHH5zSkhRqUco,13517
|
|
2643
|
-
pygpt_net/ui/widget/option/input.py,sha256
|
|
2643
|
+
pygpt_net/ui/widget/option/input.py,sha256=-pLXzkOO2OvOoUKTuocbOt8JcPWQO3W3cmrSh0WhJcc,9718
|
|
2644
2644
|
pygpt_net/ui/widget/option/prompt.py,sha256=SgRd0acp13_c19tWjYYChcGgAwik9tsZKKsX1Ciqgp4,2818
|
|
2645
2645
|
pygpt_net/ui/widget/option/slider.py,sha256=nEGocCAHZ-HuyE0D0QZxs30QiUXs8B2EQRQXSsGIGIE,3569
|
|
2646
2646
|
pygpt_net/ui/widget/option/textarea.py,sha256=-ymu6_xLMjJ1gATzkYwOoArAD01g83r9gHlUXFHK9Uc,2929
|
|
@@ -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.6.
|
|
2673
|
-
pygpt_net-2.6.
|
|
2674
|
-
pygpt_net-2.6.
|
|
2675
|
-
pygpt_net-2.6.
|
|
2676
|
-
pygpt_net-2.6.
|
|
2672
|
+
pygpt_net-2.6.67.dist-info/LICENSE,sha256=rbPqNB_xxANH8hKayJyIcTwD4bj4Y2G-Mcm85r1OImM,1126
|
|
2673
|
+
pygpt_net-2.6.67.dist-info/METADATA,sha256=h46iQNvJx-BpwYX2y7k3Aikceb7RHBZso1baiDZlbGw,170915
|
|
2674
|
+
pygpt_net-2.6.67.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
2675
|
+
pygpt_net-2.6.67.dist-info/entry_points.txt,sha256=qvpII6UHIt8XfokmQWnCYQrTgty8FeJ9hJvOuUFCN-8,43
|
|
2676
|
+
pygpt_net-2.6.67.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|