pygpt-net 2.4.37__py3-none-any.whl → 2.4.41__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.
- CHANGELOG.md +29 -0
- README.md +44 -115
- pygpt_net/CHANGELOG.txt +29 -0
- pygpt_net/__init__.py +3 -3
- pygpt_net/controller/__init__.py +7 -3
- pygpt_net/controller/access/control.py +1 -1
- pygpt_net/controller/access/voice.py +11 -5
- pygpt_net/controller/agent/experts.py +11 -6
- pygpt_net/controller/agent/legacy.py +8 -6
- pygpt_net/controller/agent/llama.py +4 -2
- pygpt_net/controller/assistant/__init__.py +9 -4
- pygpt_net/controller/assistant/batch.py +38 -21
- pygpt_net/controller/assistant/editor.py +7 -6
- pygpt_net/controller/assistant/files.py +23 -7
- pygpt_net/controller/assistant/store.py +20 -7
- pygpt_net/controller/assistant/threads.py +34 -8
- pygpt_net/controller/attachment.py +29 -10
- pygpt_net/controller/audio/__init__.py +25 -4
- pygpt_net/controller/calendar/__init__.py +23 -4
- pygpt_net/controller/calendar/note.py +57 -11
- pygpt_net/controller/camera.py +3 -2
- pygpt_net/controller/chat/__init__.py +5 -3
- pygpt_net/controller/chat/attachment.py +34 -7
- pygpt_net/controller/chat/command.py +4 -2
- pygpt_net/controller/chat/common.py +11 -4
- pygpt_net/controller/chat/files.py +10 -3
- pygpt_net/controller/chat/image.py +17 -5
- pygpt_net/controller/chat/input.py +10 -7
- pygpt_net/controller/chat/output.py +21 -6
- pygpt_net/controller/chat/render.py +100 -21
- pygpt_net/controller/chat/response.py +34 -7
- pygpt_net/controller/chat/stream.py +4 -2
- pygpt_net/controller/chat/text.py +6 -4
- pygpt_net/controller/command.py +11 -3
- pygpt_net/controller/config/__init__.py +34 -6
- pygpt_net/controller/config/field/checkbox.py +7 -4
- pygpt_net/controller/config/field/cmd.py +7 -5
- pygpt_net/controller/config/field/combo.py +14 -6
- pygpt_net/controller/config/field/dictionary.py +14 -11
- pygpt_net/controller/config/field/input.py +9 -6
- pygpt_net/controller/config/field/slider.py +11 -8
- pygpt_net/controller/config/field/textarea.py +8 -5
- pygpt_net/controller/config/placeholder.py +52 -21
- pygpt_net/controller/ctx/__init__.py +138 -49
- pygpt_net/controller/ctx/common.py +15 -4
- pygpt_net/controller/ctx/extra.py +11 -3
- pygpt_net/controller/ctx/summarizer.py +24 -5
- pygpt_net/controller/debug/__init__.py +27 -6
- pygpt_net/controller/dialogs/confirm.py +34 -7
- pygpt_net/controller/dialogs/debug.py +4 -2
- pygpt_net/controller/dialogs/info.py +7 -2
- pygpt_net/controller/files.py +48 -10
- pygpt_net/controller/finder.py +11 -5
- pygpt_net/controller/idx/__init__.py +10 -3
- pygpt_net/controller/idx/common.py +4 -2
- pygpt_net/controller/idx/indexer.py +25 -17
- pygpt_net/controller/idx/settings.py +9 -3
- pygpt_net/controller/kernel/__init__.py +34 -8
- pygpt_net/controller/kernel/reply.py +12 -3
- pygpt_net/controller/kernel/stack.py +5 -3
- pygpt_net/controller/lang/custom.py +2 -7
- pygpt_net/controller/lang/mapping.py +5 -3
- pygpt_net/controller/layout.py +2 -2
- pygpt_net/controller/mode.py +16 -4
- pygpt_net/controller/model/__init__.py +14 -3
- pygpt_net/controller/model/editor.py +8 -3
- pygpt_net/controller/notepad.py +26 -12
- pygpt_net/controller/painter/capture.py +23 -4
- pygpt_net/controller/painter/common.py +9 -7
- pygpt_net/controller/plugins/__init__.py +19 -5
- pygpt_net/controller/plugins/presets.py +15 -6
- pygpt_net/controller/plugins/settings.py +9 -3
- pygpt_net/controller/presets/__init__.py +55 -16
- pygpt_net/controller/presets/editor.py +26 -10
- pygpt_net/controller/settings/__init__.py +3 -2
- pygpt_net/controller/settings/editor.py +29 -7
- pygpt_net/controller/settings/profile.py +22 -5
- pygpt_net/controller/theme/__init__.py +54 -12
- pygpt_net/controller/theme/common.py +24 -2
- pygpt_net/controller/theme/markdown.py +32 -16
- pygpt_net/controller/theme/menu.py +26 -5
- pygpt_net/controller/theme/nodes.py +2 -5
- pygpt_net/controller/tools/__init__.py +40 -2
- pygpt_net/controller/ui/__init__.py +4 -6
- pygpt_net/controller/ui/tabs.py +363 -65
- pygpt_net/core/access/actions.py +6 -4
- pygpt_net/core/access/shortcuts.py +4 -3
- pygpt_net/core/access/voice.py +6 -5
- pygpt_net/core/agents/legacy.py +4 -2
- pygpt_net/core/agents/memory.py +7 -2
- pygpt_net/core/agents/observer/evaluation.py +15 -7
- pygpt_net/core/agents/provider.py +9 -4
- pygpt_net/core/agents/runner.py +61 -15
- pygpt_net/core/agents/tools.py +23 -5
- pygpt_net/core/assistants/__init__.py +6 -4
- pygpt_net/core/assistants/files.py +35 -12
- pygpt_net/core/assistants/store.py +20 -10
- pygpt_net/core/attachments/__init__.py +54 -15
- pygpt_net/core/attachments/context.py +92 -29
- pygpt_net/core/audio/__init__.py +71 -3
- pygpt_net/core/audio/context.py +7 -2
- pygpt_net/core/bridge/__init__.py +22 -6
- pygpt_net/core/bridge/context.py +5 -3
- pygpt_net/core/calendar/__init__.py +57 -11
- pygpt_net/core/chain/__init__.py +8 -2
- pygpt_net/core/chain/chat.py +10 -8
- pygpt_net/core/chain/completion.py +10 -7
- pygpt_net/core/command.py +62 -17
- pygpt_net/core/ctx/__init__.py +260 -58
- pygpt_net/core/ctx/bag.py +25 -4
- pygpt_net/core/ctx/container.py +28 -17
- pygpt_net/core/ctx/idx.py +45 -8
- pygpt_net/core/ctx/output.py +95 -74
- pygpt_net/core/ctx/reply.py +5 -2
- pygpt_net/core/db/__init__.py +8 -7
- pygpt_net/core/db/viewer.py +17 -11
- pygpt_net/core/debug/__init__.py +10 -9
- pygpt_net/core/debug/tabs.py +5 -2
- pygpt_net/core/docker/__init__.py +11 -5
- pygpt_net/core/docker/builder.py +11 -3
- pygpt_net/core/events/app.py +5 -3
- pygpt_net/core/events/base.py +11 -5
- pygpt_net/core/events/control.py +5 -3
- pygpt_net/core/events/event.py +17 -7
- pygpt_net/core/events/kernel.py +5 -3
- pygpt_net/core/events/render.py +5 -3
- pygpt_net/core/experts/__init__.py +5 -4
- pygpt_net/core/filesystem/__init__.py +52 -34
- pygpt_net/core/filesystem/actions.py +8 -5
- pygpt_net/core/filesystem/editor.py +13 -3
- pygpt_net/core/filesystem/types.py +12 -7
- pygpt_net/core/filesystem/url.py +7 -3
- pygpt_net/core/idx/__init__.py +34 -25
- pygpt_net/core/idx/chat.py +40 -16
- pygpt_net/core/idx/context.py +6 -2
- pygpt_net/core/idx/indexing.py +84 -35
- pygpt_net/core/idx/llm.py +11 -3
- pygpt_net/core/idx/metadata.py +13 -3
- pygpt_net/core/idx/types/ctx.py +32 -6
- pygpt_net/core/idx/types/external.py +41 -7
- pygpt_net/core/idx/types/files.py +31 -6
- pygpt_net/core/image.py +15 -4
- pygpt_net/core/llm/__init__.py +13 -3
- pygpt_net/core/locale.py +34 -8
- pygpt_net/core/models.py +4 -3
- pygpt_net/core/notepad.py +9 -4
- pygpt_net/core/plugins.py +7 -6
- pygpt_net/core/presets.py +19 -10
- pygpt_net/core/profile.py +12 -6
- pygpt_net/core/prompt/__init__.py +10 -3
- pygpt_net/core/prompt/custom.py +7 -6
- pygpt_net/core/prompt/template.py +9 -3
- pygpt_net/core/render/base.py +117 -22
- pygpt_net/core/render/markdown/body.py +27 -7
- pygpt_net/core/render/markdown/renderer.py +119 -22
- pygpt_net/core/render/plain/body.py +22 -5
- pygpt_net/core/render/plain/renderer.py +97 -21
- pygpt_net/core/render/web/body.py +75 -25
- pygpt_net/core/render/web/renderer.py +313 -63
- pygpt_net/core/settings.py +9 -4
- pygpt_net/core/tabs/__init__.py +290 -103
- pygpt_net/core/tabs/tab.py +17 -4
- pygpt_net/core/tokens.py +44 -11
- pygpt_net/core/updater/__init__.py +20 -7
- pygpt_net/core/vision/analyzer.py +29 -6
- pygpt_net/core/web.py +130 -2
- pygpt_net/data/config/config.json +15 -4
- pygpt_net/data/config/models.json +3 -3
- pygpt_net/data/config/modes.json +3 -3
- pygpt_net/data/config/settings.json +55 -10
- pygpt_net/data/config/settings_section.json +3 -0
- pygpt_net/data/css/style.light.css +1 -0
- pygpt_net/data/css/{web.css → web-blocks.css} +162 -133
- pygpt_net/data/css/{web.light.css → web-blocks.light.css} +7 -0
- pygpt_net/data/css/web-chatgpt.css +350 -0
- pygpt_net/data/css/web-chatgpt.dark.css +64 -0
- pygpt_net/data/css/web-chatgpt.light.css +75 -0
- pygpt_net/data/css/web-chatgpt_wide.css +350 -0
- pygpt_net/data/css/web-chatgpt_wide.dark.css +64 -0
- pygpt_net/data/css/web-chatgpt_wide.light.css +75 -0
- pygpt_net/data/icons/split_screen.svg +1 -0
- pygpt_net/data/locale/locale.de.ini +12 -0
- pygpt_net/data/locale/locale.en.ini +17 -2
- pygpt_net/data/locale/locale.es.ini +12 -0
- pygpt_net/data/locale/locale.fr.ini +12 -0
- pygpt_net/data/locale/locale.it.ini +12 -0
- pygpt_net/data/locale/locale.pl.ini +12 -0
- pygpt_net/data/locale/locale.uk.ini +12 -0
- pygpt_net/data/locale/locale.zh.ini +12 -0
- pygpt_net/data/locale/plugin.cmd_web.de.ini +2 -0
- pygpt_net/data/locale/plugin.cmd_web.en.ini +20 -10
- pygpt_net/data/locale/plugin.cmd_web.es.ini +2 -0
- pygpt_net/data/locale/plugin.cmd_web.fr.ini +2 -0
- pygpt_net/data/locale/plugin.cmd_web.it.ini +2 -0
- pygpt_net/data/locale/plugin.cmd_web.pl.ini +2 -0
- pygpt_net/data/locale/plugin.cmd_web.uk.ini +2 -0
- pygpt_net/data/locale/plugin.cmd_web.zh.ini +2 -0
- pygpt_net/icons.qrc +1 -0
- pygpt_net/icons_rc.py +165 -136
- pygpt_net/item/ctx.py +46 -24
- pygpt_net/plugin/audio_input/simple.py +21 -5
- pygpt_net/plugin/audio_output/__init__.py +4 -1
- pygpt_net/plugin/base/config.py +4 -2
- pygpt_net/plugin/base/plugin.py +26 -6
- pygpt_net/plugin/base/worker.py +37 -9
- pygpt_net/plugin/cmd_code_interpreter/__init__.py +39 -37
- pygpt_net/plugin/cmd_code_interpreter/runner.py +25 -12
- pygpt_net/plugin/cmd_web/__init__.py +46 -6
- pygpt_net/plugin/cmd_web/config.py +74 -48
- pygpt_net/plugin/cmd_web/websearch.py +61 -28
- pygpt_net/plugin/cmd_web/worker.py +79 -13
- pygpt_net/provider/core/config/patch.py +43 -1
- pygpt_net/provider/core/ctx/base.py +4 -1
- pygpt_net/provider/core/ctx/db_sqlite/__init__.py +10 -1
- pygpt_net/provider/core/ctx/db_sqlite/storage.py +22 -1
- pygpt_net/provider/gpt/assistants.py +10 -9
- pygpt_net/provider/gpt/audio.py +3 -2
- pygpt_net/provider/gpt/chat.py +8 -7
- pygpt_net/provider/gpt/completion.py +6 -4
- pygpt_net/provider/gpt/image.py +9 -2
- pygpt_net/provider/gpt/store.py +14 -13
- pygpt_net/provider/gpt/vision.py +6 -5
- pygpt_net/tools/__init__.py +9 -1
- pygpt_net/tools/base.py +15 -1
- pygpt_net/tools/code_interpreter/__init__.py +174 -75
- pygpt_net/tools/code_interpreter/ui/dialogs.py +21 -103
- pygpt_net/tools/code_interpreter/ui/widgets.py +284 -9
- pygpt_net/tools/html_canvas/__init__.py +78 -23
- pygpt_net/tools/html_canvas/ui/dialogs.py +46 -62
- pygpt_net/tools/html_canvas/ui/widgets.py +96 -3
- pygpt_net/ui/base/context_menu.py +2 -2
- pygpt_net/ui/layout/chat/input.py +10 -18
- pygpt_net/ui/layout/chat/output.py +26 -44
- pygpt_net/ui/layout/ctx/ctx_list.py +13 -4
- pygpt_net/ui/layout/toolbox/footer.py +18 -2
- pygpt_net/ui/main.py +2 -2
- pygpt_net/ui/menu/config.py +7 -11
- pygpt_net/ui/menu/debug.py +11 -1
- pygpt_net/ui/menu/theme.py +9 -2
- pygpt_net/ui/widget/filesystem/explorer.py +2 -2
- pygpt_net/ui/widget/lists/context.py +27 -5
- pygpt_net/ui/widget/tabs/Input.py +2 -2
- pygpt_net/ui/widget/tabs/body.py +2 -1
- pygpt_net/ui/widget/tabs/layout.py +195 -0
- pygpt_net/ui/widget/tabs/output.py +218 -55
- pygpt_net/ui/widget/textarea/html.py +11 -1
- pygpt_net/ui/widget/textarea/output.py +10 -1
- pygpt_net/ui/widget/textarea/search_input.py +4 -1
- pygpt_net/ui/widget/textarea/web.py +49 -9
- {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/METADATA +45 -116
- {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/RECORD +255 -247
- /pygpt_net/data/css/{web.dark.css → web-blocks.dark.css} +0 -0
- {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/LICENSE +0 -0
- {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/WHEEL +0 -0
- {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/entry_points.txt +0 -0
pygpt_net/core/debug/__init__.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: 2024.
|
9
|
+
# Updated Date: 2024.12.14 00:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import os
|
@@ -16,6 +16,7 @@ import traceback
|
|
16
16
|
import logging
|
17
17
|
|
18
18
|
from pathlib import Path
|
19
|
+
from typing import Any, Tuple
|
19
20
|
|
20
21
|
from pygpt_net.config import Config
|
21
22
|
|
@@ -125,7 +126,7 @@ class Debug:
|
|
125
126
|
else:
|
126
127
|
return "unknown"
|
127
128
|
|
128
|
-
def info(self, message:
|
129
|
+
def info(self, message: Any = None, console: bool = True):
|
129
130
|
"""
|
130
131
|
Handle info message
|
131
132
|
|
@@ -139,7 +140,7 @@ class Debug:
|
|
139
140
|
console=console,
|
140
141
|
)
|
141
142
|
|
142
|
-
def debug(self, message:
|
143
|
+
def debug(self, message: Any = None, console: bool = True):
|
143
144
|
"""
|
144
145
|
Handle debug message
|
145
146
|
|
@@ -152,7 +153,7 @@ class Debug:
|
|
152
153
|
console=console,
|
153
154
|
)
|
154
155
|
|
155
|
-
def warning(self, message:
|
156
|
+
def warning(self, message: Any = None, console: bool = True):
|
156
157
|
"""
|
157
158
|
Handle warning message
|
158
159
|
|
@@ -165,7 +166,7 @@ class Debug:
|
|
165
166
|
console=console,
|
166
167
|
)
|
167
168
|
|
168
|
-
def error(self, message:
|
169
|
+
def error(self, message: Any = None, console: bool = True):
|
169
170
|
"""
|
170
171
|
Handle error message
|
171
172
|
|
@@ -178,7 +179,7 @@ class Debug:
|
|
178
179
|
console=console,
|
179
180
|
)
|
180
181
|
|
181
|
-
def log(self, message:
|
182
|
+
def log(self, message: Any = None, level: int = logging.ERROR, console: bool = True):
|
182
183
|
"""
|
183
184
|
Handle logger message (by level), default level is ERROR
|
184
185
|
|
@@ -227,7 +228,7 @@ class Debug:
|
|
227
228
|
except Exception as e:
|
228
229
|
pass
|
229
230
|
|
230
|
-
def parse_exception(self, e = None, limit: int = 4) ->
|
231
|
+
def parse_exception(self, e: Any = None, limit: int = 4) -> Tuple[bool, str]:
|
231
232
|
"""
|
232
233
|
Parse exception traceback
|
233
234
|
|
@@ -268,7 +269,7 @@ class Debug:
|
|
268
269
|
|
269
270
|
return is_sys, data
|
270
271
|
|
271
|
-
def parse_alert(self, msg:
|
272
|
+
def parse_alert(self, msg: Any) -> str:
|
272
273
|
"""
|
273
274
|
Parse alert message
|
274
275
|
|
@@ -317,7 +318,7 @@ class Debug:
|
|
317
318
|
"""
|
318
319
|
self.window.controller.dialogs.debug.end(id)
|
319
320
|
|
320
|
-
def add(self, id: str, k: str, v:
|
321
|
+
def add(self, id: str, k: str, v: Any):
|
321
322
|
"""
|
322
323
|
Append debug entry (debug window)
|
323
324
|
|
pygpt_net/core/debug/tabs.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: 2024.
|
9
|
+
# Updated Date: 2024.12.12 01:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
class TabsDebug:
|
@@ -25,7 +25,10 @@ class TabsDebug:
|
|
25
25
|
self.window.core.debug.add(self.id, 'current PID', str(self.window.controller.ui.tabs.get_current_pid()))
|
26
26
|
self.window.core.debug.add(self.id, 'current IDX', str(self.window.controller.ui.tabs.get_current_idx()))
|
27
27
|
self.window.core.debug.add(self.id, 'current Type', str(self.window.controller.ui.tabs.get_current_type()))
|
28
|
+
self.window.core.debug.add(self.id, 'current Column', str(self.window.controller.ui.tabs.get_current_column_idx()))
|
28
29
|
self.window.core.debug.add(self.id, 'last_pid', str(self.window.core.tabs.last_pid))
|
30
|
+
self.window.core.debug.add(self.id, 'locked', str(self.window.controller.ui.tabs.locked))
|
31
|
+
self.window.core.debug.add(self.id, 'col', str(self.window.controller.ui.tabs.col))
|
29
32
|
self.window.core.debug.add(self.id, 'count(pids)', str(len(self.window.core.tabs.pids)))
|
30
33
|
self.window.core.debug.add(self.id, 'count(ctx bags)', str(len(self.window.core.ctx.container.bags)))
|
31
34
|
self.window.core.debug.add(self.id, '----', '')
|
@@ -38,6 +41,6 @@ class TabsDebug:
|
|
38
41
|
|
39
42
|
# mapping PID => meta.id
|
40
43
|
self.window.core.debug.add(self.id, 'PID => meta.id', str(self.window.core.ctx.output.mapping))
|
41
|
-
self.window.core.debug.add(self.id, '(last)
|
44
|
+
self.window.core.debug.add(self.id, '(last) meta.id => PID', str(self.window.core.ctx.output.last_pids))
|
42
45
|
self.window.core.debug.add(self.id, '(last) PID', str(self.window.core.ctx.output.last_pid))
|
43
46
|
self.window.core.debug.end(self.id)
|
@@ -6,10 +6,12 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.14 00:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import os
|
13
|
+
from typing import Optional, Any
|
14
|
+
|
13
15
|
import docker
|
14
16
|
import io
|
15
17
|
import tarfile
|
@@ -65,8 +67,12 @@ class Docker:
|
|
65
67
|
tar_stream.seek(0)
|
66
68
|
return tar_stream
|
67
69
|
|
68
|
-
def is_image(self):
|
69
|
-
"""
|
70
|
+
def is_image(self) -> bool:
|
71
|
+
"""
|
72
|
+
Check if the Docker image exists.
|
73
|
+
|
74
|
+
:return: True if the image exists.
|
75
|
+
"""
|
70
76
|
client = self.get_docker_client()
|
71
77
|
try:
|
72
78
|
client.images.get(self.get_image_name())
|
@@ -334,7 +340,7 @@ class Docker:
|
|
334
340
|
"""
|
335
341
|
return self.plugin.get_option_value('docker_entrypoint')
|
336
342
|
|
337
|
-
def execute(self, cmd: str) -> bytes
|
343
|
+
def execute(self, cmd: str) -> Optional[bytes]:
|
338
344
|
"""
|
339
345
|
Execute command in Docker container.
|
340
346
|
|
@@ -394,7 +400,7 @@ class Docker:
|
|
394
400
|
"""
|
395
401
|
self.signals = signals
|
396
402
|
|
397
|
-
def log(self, msg):
|
403
|
+
def log(self, msg: Any):
|
398
404
|
"""
|
399
405
|
Log the message.
|
400
406
|
|
pygpt_net/core/docker/builder.py
CHANGED
@@ -6,9 +6,11 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.14 00:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
|
+
from typing import Any
|
13
|
+
|
12
14
|
from PySide6.QtCore import Signal, Slot, QObject
|
13
15
|
|
14
16
|
from pygpt_net.core.events import RenderEvent
|
@@ -48,13 +50,19 @@ class Builder(QObject):
|
|
48
50
|
|
49
51
|
|
50
52
|
@Slot(object)
|
51
|
-
def handle_build_failed(self, error):
|
52
|
-
"""
|
53
|
+
def handle_build_failed(self, error: Any):
|
54
|
+
"""
|
55
|
+
Handle build failed
|
56
|
+
|
57
|
+
:param error: error
|
58
|
+
"""
|
53
59
|
self.plugin.window.ui.dialogs.alert(str(error))
|
54
60
|
self.plugin.window.update_status(str(error))
|
55
61
|
self.plugin.window.controller.kernel.stop()
|
56
62
|
event = RenderEvent(RenderEvent.END)
|
57
63
|
self.plugin.window.dispatch(event)
|
64
|
+
|
65
|
+
|
58
66
|
class WorkerSignals(BaseSignals):
|
59
67
|
build_finished = Signal()
|
60
68
|
|
pygpt_net/core/events/app.py
CHANGED
@@ -6,9 +6,11 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.14 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
|
+
from typing import Optional
|
13
|
+
|
12
14
|
from .base import BaseEvent
|
13
15
|
|
14
16
|
class AppEvent(BaseEvent):
|
@@ -39,8 +41,8 @@ class AppEvent(BaseEvent):
|
|
39
41
|
|
40
42
|
def __init__(
|
41
43
|
self,
|
42
|
-
name: str = None,
|
43
|
-
data: dict = None,
|
44
|
+
name: Optional[str] = None,
|
45
|
+
data: Optional[dict] = None,
|
44
46
|
):
|
45
47
|
"""
|
46
48
|
Event object class
|
pygpt_net/core/events/base.py
CHANGED
@@ -6,17 +6,19 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.14 08:00:00 #
|
10
10
|
# ================================================== #
|
11
|
+
|
11
12
|
import json
|
13
|
+
from typing import Optional, Dict, Any
|
12
14
|
|
13
15
|
from pygpt_net.item.ctx import CtxItem
|
14
16
|
|
15
17
|
class BaseEvent:
|
16
18
|
def __init__(
|
17
19
|
self,
|
18
|
-
name: str = None,
|
19
|
-
data: dict = None,
|
20
|
+
name: Optional[str] = None,
|
21
|
+
data: Optional[dict] = None,
|
20
22
|
ctx: CtxItem = None
|
21
23
|
):
|
22
24
|
"""
|
@@ -39,10 +41,14 @@ class BaseEvent:
|
|
39
41
|
|
40
42
|
@property
|
41
43
|
def full_name(self) -> str:
|
42
|
-
"""
|
44
|
+
"""
|
45
|
+
Get full event name
|
46
|
+
|
47
|
+
:return: Full event name
|
48
|
+
"""
|
43
49
|
return self.id + ": " + self.name
|
44
50
|
|
45
|
-
def to_dict(self) ->
|
51
|
+
def to_dict(self) -> Dict[str, Any]:
|
46
52
|
"""Dump event to dict"""
|
47
53
|
return {
|
48
54
|
'name': self.name,
|
pygpt_net/core/events/control.py
CHANGED
@@ -6,9 +6,11 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.14 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
|
+
from typing import Optional
|
13
|
+
|
12
14
|
from .base import BaseEvent
|
13
15
|
|
14
16
|
|
@@ -73,8 +75,8 @@ class ControlEvent(BaseEvent):
|
|
73
75
|
|
74
76
|
def __init__(
|
75
77
|
self,
|
76
|
-
name: str = None,
|
77
|
-
data: dict = None,
|
78
|
+
name: Optional[str] = None,
|
79
|
+
data: Optional[dict] = None,
|
78
80
|
):
|
79
81
|
"""
|
80
82
|
Event object class
|
pygpt_net/core/events/event.py
CHANGED
@@ -6,10 +6,11 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.14 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import json
|
13
|
+
from typing import Optional, Dict, Any
|
13
14
|
|
14
15
|
from pygpt_net.item.ctx import CtxItem
|
15
16
|
from .base import BaseEvent
|
@@ -61,9 +62,9 @@ class Event(BaseEvent):
|
|
61
62
|
|
62
63
|
def __init__(
|
63
64
|
self,
|
64
|
-
name: str = None,
|
65
|
-
data: dict = None,
|
66
|
-
ctx: CtxItem = None
|
65
|
+
name: Optional[str] = None,
|
66
|
+
data: Optional[dict] = None,
|
67
|
+
ctx: Optional[CtxItem] = None
|
67
68
|
):
|
68
69
|
"""
|
69
70
|
Event object class
|
@@ -84,8 +85,12 @@ class Event(BaseEvent):
|
|
84
85
|
# internal event, not called from user
|
85
86
|
# internal event is handled synchronously, ctx item has internal flag
|
86
87
|
|
87
|
-
def to_dict(self) ->
|
88
|
-
"""
|
88
|
+
def to_dict(self) -> Dict[str, Any]:
|
89
|
+
"""
|
90
|
+
Dump event to dict
|
91
|
+
|
92
|
+
:return: Event dict
|
93
|
+
"""
|
89
94
|
return {
|
90
95
|
'name': self.name,
|
91
96
|
'data': self.data,
|
@@ -106,5 +111,10 @@ class Event(BaseEvent):
|
|
106
111
|
pass
|
107
112
|
return ""
|
108
113
|
|
109
|
-
def __str__(self):
|
114
|
+
def __str__(self) -> str:
|
115
|
+
"""
|
116
|
+
String representation of event
|
117
|
+
|
118
|
+
:return: Event string
|
119
|
+
"""
|
110
120
|
return self.dump()
|
pygpt_net/core/events/kernel.py
CHANGED
@@ -6,9 +6,11 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.14 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
|
+
from typing import Optional
|
13
|
+
|
12
14
|
from .base import BaseEvent
|
13
15
|
|
14
16
|
|
@@ -52,8 +54,8 @@ class KernelEvent(BaseEvent):
|
|
52
54
|
|
53
55
|
def __init__(
|
54
56
|
self,
|
55
|
-
name: str = None,
|
56
|
-
data: dict = None,
|
57
|
+
name: Optional[str] = None,
|
58
|
+
data: Optional[dict] = None,
|
57
59
|
):
|
58
60
|
"""
|
59
61
|
Event object class
|
pygpt_net/core/events/render.py
CHANGED
@@ -6,9 +6,11 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.14 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
|
+
from typing import Optional
|
13
|
+
|
12
14
|
from .base import BaseEvent
|
13
15
|
|
14
16
|
|
@@ -56,8 +58,8 @@ class RenderEvent(BaseEvent):
|
|
56
58
|
|
57
59
|
def __init__(
|
58
60
|
self,
|
59
|
-
name: str = None,
|
60
|
-
data: dict = None,
|
61
|
+
name: Optional[str] = None,
|
62
|
+
data: Optional[dict] = None,
|
61
63
|
):
|
62
64
|
"""
|
63
65
|
Event object class
|
@@ -6,9 +6,10 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.14 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
|
+
from typing import Dict, List
|
12
13
|
|
13
14
|
from pygpt_net.core.types import (
|
14
15
|
MODE_AGENT,
|
@@ -90,7 +91,7 @@ class Experts:
|
|
90
91
|
"""
|
91
92
|
return self.window.core.presets.get_by_id(MODE_EXPERT, id)
|
92
93
|
|
93
|
-
def get_experts(self) ->
|
94
|
+
def get_experts(self) -> Dict[str, str]:
|
94
95
|
"""
|
95
96
|
Get experts names with keys
|
96
97
|
|
@@ -191,7 +192,7 @@ class Experts:
|
|
191
192
|
prompt = prompt.replace("{presets}", "\n".join(experts_list))
|
192
193
|
return prompt
|
193
194
|
|
194
|
-
def extract_calls(self, ctx: CtxItem) ->
|
195
|
+
def extract_calls(self, ctx: CtxItem) -> Dict[str, str]:
|
195
196
|
"""
|
196
197
|
Extract expert calls from context output
|
197
198
|
|
@@ -456,7 +457,7 @@ class Experts:
|
|
456
457
|
})
|
457
458
|
self.window.dispatch(event)
|
458
459
|
|
459
|
-
def get_functions(self) ->
|
460
|
+
def get_functions(self) -> List[Dict[str, str]]:
|
460
461
|
"""
|
461
462
|
Append call the expert commands
|
462
463
|
|
@@ -6,14 +6,14 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.14 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import os
|
13
13
|
import shutil
|
14
14
|
|
15
|
-
from datetime import datetime
|
16
15
|
from pathlib import PurePath
|
16
|
+
from typing import Tuple, Any, Union, List
|
17
17
|
from uuid import uuid4
|
18
18
|
|
19
19
|
from PySide6.QtCore import QUrl
|
@@ -38,18 +38,6 @@ class Filesystem:
|
|
38
38
|
self.types = Types(window)
|
39
39
|
self.url = Url(window)
|
40
40
|
self.workdir_placeholder = "%workdir%"
|
41
|
-
self.styles = [
|
42
|
-
"style.css",
|
43
|
-
"style.dark.css",
|
44
|
-
"style.light.css",
|
45
|
-
"markdown.css",
|
46
|
-
"markdown.dark.css",
|
47
|
-
"markdown.light.css",
|
48
|
-
"web.css",
|
49
|
-
"web.dark.css",
|
50
|
-
"web.light.css",
|
51
|
-
"fix_windows.css",
|
52
|
-
]
|
53
41
|
|
54
42
|
def install(self):
|
55
43
|
"""Install provider data"""
|
@@ -77,9 +65,9 @@ class Filesystem:
|
|
77
65
|
|
78
66
|
src_dir = os.path.join(self.window.core.config.get_app_path(), 'data', 'css')
|
79
67
|
dst_dir = os.path.join(self.window.core.config.path, 'css')
|
80
|
-
|
68
|
+
app_styles = os.listdir(src_dir)
|
81
69
|
try:
|
82
|
-
for style in
|
70
|
+
for style in app_styles:
|
83
71
|
src = os.path.join(src_dir, style)
|
84
72
|
dst = os.path.join(dst_dir, style)
|
85
73
|
if (not os.path.exists(dst) or force) and os.path.exists(src):
|
@@ -91,7 +79,8 @@ class Filesystem:
|
|
91
79
|
"""Backup user custom css styles"""
|
92
80
|
css_dir = os.path.join(self.window.core.config.path, 'css')
|
93
81
|
backup_file_extension = '.backup'
|
94
|
-
|
82
|
+
user_styles = os.listdir(css_dir)
|
83
|
+
for style in user_styles:
|
95
84
|
src = os.path.join(css_dir, style)
|
96
85
|
dst = os.path.join(css_dir, style + backup_file_extension)
|
97
86
|
if os.path.exists(src):
|
@@ -118,7 +107,7 @@ class Filesystem:
|
|
118
107
|
"""
|
119
108
|
return [self.make_local(path) for path in paths]
|
120
109
|
|
121
|
-
def make_local_list_img(self, paths:
|
110
|
+
def make_local_list_img(self, paths: List[str]) -> List[str]:
|
122
111
|
"""
|
123
112
|
Make local placeholder paths for images
|
124
113
|
|
@@ -132,7 +121,7 @@ class Filesystem:
|
|
132
121
|
result.append(self.make_local(path))
|
133
122
|
return result
|
134
123
|
|
135
|
-
def get_url(self, url) -> QUrl:
|
124
|
+
def get_url(self, url: str) -> QUrl:
|
136
125
|
"""
|
137
126
|
Make current OS-specific URL to open file or directory
|
138
127
|
|
@@ -146,7 +135,7 @@ class Filesystem:
|
|
146
135
|
else:
|
147
136
|
return QUrl.fromLocalFile(url)
|
148
137
|
|
149
|
-
def get_path(self, path) -> str:
|
138
|
+
def get_path(self, path: str) -> str:
|
150
139
|
"""
|
151
140
|
Prepare current OS-specific path from given path
|
152
141
|
|
@@ -155,10 +144,10 @@ class Filesystem:
|
|
155
144
|
"""
|
156
145
|
parts = PurePath(path).parts
|
157
146
|
if len(parts) > 1:
|
158
|
-
return os.path.join(*parts) # rebuild OS directory separators
|
147
|
+
return str(os.path.join(*parts)) # rebuild OS directory separators
|
159
148
|
return path
|
160
149
|
|
161
|
-
def to_workdir(self, path) -> str:
|
150
|
+
def to_workdir(self, path: str) -> str:
|
162
151
|
"""
|
163
152
|
Replace user path with current workdir
|
164
153
|
|
@@ -189,7 +178,7 @@ class Filesystem:
|
|
189
178
|
parts = path[dir_index:]
|
190
179
|
return os.path.join(work_dir, parts)
|
191
180
|
|
192
|
-
def extract_local_url(self, path) ->
|
181
|
+
def extract_local_url(self, path: str) -> Tuple[str, str]:
|
193
182
|
"""
|
194
183
|
Extract local url and path from url
|
195
184
|
|
@@ -250,7 +239,7 @@ class Filesystem:
|
|
250
239
|
shutil.copyfile(path, upload_path)
|
251
240
|
return upload_path
|
252
241
|
|
253
|
-
def remove_upload(self, path: str)
|
242
|
+
def remove_upload(self, path: str):
|
254
243
|
"""
|
255
244
|
Delete uploaded file
|
256
245
|
|
@@ -270,7 +259,7 @@ class Filesystem:
|
|
270
259
|
"""
|
271
260
|
return path.startswith('file://') or path.startswith('http://') or path.startswith('https://')
|
272
261
|
|
273
|
-
def sizeof_fmt(self, num, suffix='B'):
|
262
|
+
def sizeof_fmt(self, num: Any, suffix: str = 'B'):
|
274
263
|
"""
|
275
264
|
Convert numbers to human-readable unit formats.
|
276
265
|
|
@@ -286,7 +275,11 @@ class Filesystem:
|
|
286
275
|
num /= 1024.0
|
287
276
|
return "{:.1f} {}{}".format(num, 'Yi', suffix).replace('.', ',')
|
288
277
|
|
289
|
-
def get_directory_size(
|
278
|
+
def get_directory_size(
|
279
|
+
self,
|
280
|
+
directory: str,
|
281
|
+
human_readable: bool = True
|
282
|
+
) -> Union[str, int]:
|
290
283
|
"""
|
291
284
|
Calculate the total size of the given directory
|
292
285
|
|
@@ -308,7 +301,11 @@ class Filesystem:
|
|
308
301
|
return self.sizeof_fmt(total_size)
|
309
302
|
return total_size
|
310
303
|
|
311
|
-
def get_datadir_size(
|
304
|
+
def get_datadir_size(
|
305
|
+
self,
|
306
|
+
path: str,
|
307
|
+
human_readable: bool = True
|
308
|
+
) -> Union[str, int]:
|
312
309
|
"""
|
313
310
|
Calculate the total size of the given data directory
|
314
311
|
|
@@ -319,7 +316,11 @@ class Filesystem:
|
|
319
316
|
data_dir = os.path.join(path, 'data')
|
320
317
|
return self.get_directory_size(data_dir, human_readable)
|
321
318
|
|
322
|
-
def get_db_size(
|
319
|
+
def get_db_size(
|
320
|
+
self,
|
321
|
+
path: str,
|
322
|
+
human_readable: bool = True
|
323
|
+
) -> Union[str, int]:
|
323
324
|
"""
|
324
325
|
Calculate the total size of the given database
|
325
326
|
|
@@ -337,7 +338,11 @@ class Filesystem:
|
|
337
338
|
return self.sizeof_fmt(total_size)
|
338
339
|
return total_size
|
339
340
|
|
340
|
-
def get_free_disk_space(
|
341
|
+
def get_free_disk_space(
|
342
|
+
self,
|
343
|
+
directory: str,
|
344
|
+
human_readable: bool = True
|
345
|
+
) -> Union[str, int]:
|
341
346
|
"""
|
342
347
|
Check free disk space in the given directory
|
343
348
|
|
@@ -350,7 +355,13 @@ class Filesystem:
|
|
350
355
|
return self.sizeof_fmt(free)
|
351
356
|
return free
|
352
357
|
|
353
|
-
def copy_workdir(
|
358
|
+
def copy_workdir(
|
359
|
+
self,
|
360
|
+
path: str,
|
361
|
+
new_path: str,
|
362
|
+
copy_db: bool = True,
|
363
|
+
copy_datadir: bool = True
|
364
|
+
) -> bool:
|
354
365
|
"""
|
355
366
|
Copy working directory
|
356
367
|
|
@@ -389,7 +400,12 @@ class Filesystem:
|
|
389
400
|
os.remove(profile_file)
|
390
401
|
return True
|
391
402
|
|
392
|
-
def clear_workdir(
|
403
|
+
def clear_workdir(
|
404
|
+
self,
|
405
|
+
path: str,
|
406
|
+
remove_db: bool = True,
|
407
|
+
remove_datadir: bool = True
|
408
|
+
) -> bool:
|
393
409
|
"""
|
394
410
|
Clear working directory
|
395
411
|
|
@@ -437,7 +453,11 @@ class Filesystem:
|
|
437
453
|
"""
|
438
454
|
return len(os.listdir(path)) == 0
|
439
455
|
|
440
|
-
def get_files_from_dir(
|
456
|
+
def get_files_from_dir(
|
457
|
+
self,
|
458
|
+
path: str,
|
459
|
+
recursive: bool = True
|
460
|
+
) -> list:
|
441
461
|
"""
|
442
462
|
Get files from directory
|
443
463
|
|
@@ -457,5 +477,3 @@ class Filesystem:
|
|
457
477
|
else:
|
458
478
|
files = [os.path.join(path, f) for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]
|
459
479
|
return files
|
460
|
-
|
461
|
-
|