pygpt-net 2.4.37__py3-none-any.whl → 2.4.42__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 +37 -0
- README.md +176 -182
- pygpt_net/CHANGELOG.txt +37 -0
- pygpt_net/__init__.py +3 -3
- pygpt_net/app.py +3 -1
- 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 +26 -5
- pygpt_net/controller/calendar/__init__.py +23 -4
- pygpt_net/controller/calendar/note.py +57 -11
- pygpt_net/controller/camera.py +4 -12
- pygpt_net/controller/chat/__init__.py +5 -3
- pygpt_net/controller/chat/attachment.py +34 -7
- pygpt_net/controller/chat/audio.py +2 -2
- 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 +66 -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/mode.py +16 -21
- 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 +74 -3
- pygpt_net/core/audio/context.py +7 -2
- pygpt_net/core/audio/whisper.py +37 -0
- pygpt_net/core/bridge/__init__.py +22 -6
- pygpt_net/core/bridge/context.py +5 -3
- pygpt_net/core/bridge/worker.py +2 -2
- 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/events.py +22 -10
- pygpt_net/core/debug/tabs.py +9 -3
- 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/history.py +3 -2
- pygpt_net/core/idx/__init__.py +48 -27
- pygpt_net/core/idx/chat.py +51 -17
- pygpt_net/core/idx/context.py +6 -2
- pygpt_net/core/idx/indexing.py +107 -42
- 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/installer.py +2 -4
- pygpt_net/core/llm/__init__.py +13 -3
- pygpt_net/core/locale.py +34 -8
- pygpt_net/core/models.py +63 -17
- pygpt_net/core/modes.py +11 -13
- pygpt_net/core/notepad.py +10 -5
- pygpt_net/core/plugins.py +31 -19
- pygpt_net/core/presets.py +37 -17
- pygpt_net/core/profile.py +21 -7
- 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/parser.py +3 -1
- pygpt_net/core/render/web/renderer.py +313 -63
- pygpt_net/core/settings.py +10 -5
- pygpt_net/core/tabs/__init__.py +290 -103
- pygpt_net/core/tabs/tab.py +26 -5
- pygpt_net/core/tokens.py +47 -12
- pygpt_net/core/updater/__init__.py +20 -7
- pygpt_net/core/vision/analyzer.py +29 -6
- pygpt_net/core/{web.py → web/__init__.py} +29 -7
- pygpt_net/core/web/helpers.py +237 -0
- 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 +18 -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 +22 -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/data/locale/plugin.mailer.en.ini +21 -0
- pygpt_net/icons.qrc +1 -0
- pygpt_net/icons_rc.py +165 -136
- pygpt_net/item/ctx.py +58 -25
- pygpt_net/plugin/agent/__init__.py +7 -2
- pygpt_net/plugin/audio_input/simple.py +21 -5
- pygpt_net/plugin/audio_output/__init__.py +9 -1
- pygpt_net/plugin/base/config.py +4 -2
- pygpt_net/plugin/base/plugin.py +75 -23
- pygpt_net/plugin/base/worker.py +42 -11
- pygpt_net/plugin/cmd_code_interpreter/__init__.py +39 -37
- pygpt_net/plugin/cmd_code_interpreter/runner.py +25 -12
- pygpt_net/plugin/cmd_history/config.py +2 -2
- pygpt_net/plugin/cmd_web/__init__.py +48 -9
- pygpt_net/plugin/cmd_web/config.py +135 -41
- pygpt_net/plugin/cmd_web/websearch.py +74 -33
- pygpt_net/plugin/cmd_web/worker.py +142 -13
- pygpt_net/plugin/idx_llama_index/config.py +3 -3
- pygpt_net/plugin/mailer/__init__.py +123 -0
- pygpt_net/plugin/mailer/config.py +149 -0
- pygpt_net/plugin/mailer/runner.py +285 -0
- pygpt_net/plugin/mailer/worker.py +123 -0
- pygpt_net/provider/agents/base.py +5 -2
- pygpt_net/provider/agents/openai.py +4 -2
- pygpt_net/provider/agents/openai_assistant.py +4 -2
- pygpt_net/provider/agents/planner.py +4 -2
- pygpt_net/provider/agents/react.py +4 -2
- pygpt_net/provider/audio_output/openai_tts.py +5 -11
- pygpt_net/provider/core/assistant/base.py +5 -3
- pygpt_net/provider/core/assistant/json_file.py +8 -5
- pygpt_net/provider/core/assistant_file/base.py +4 -3
- pygpt_net/provider/core/assistant_file/db_sqlite/__init__.py +4 -3
- pygpt_net/provider/core/assistant_file/db_sqlite/storage.py +3 -2
- pygpt_net/provider/core/assistant_store/base.py +6 -4
- pygpt_net/provider/core/assistant_store/db_sqlite/__init__.py +5 -4
- pygpt_net/provider/core/assistant_store/db_sqlite/storage.py +5 -3
- pygpt_net/provider/core/attachment/base.py +5 -3
- pygpt_net/provider/core/attachment/json_file.py +4 -3
- pygpt_net/provider/core/calendar/base.py +5 -3
- pygpt_net/provider/core/calendar/db_sqlite/__init__.py +6 -5
- pygpt_net/provider/core/calendar/db_sqlite/storage.py +5 -4
- pygpt_net/provider/core/config/base.py +8 -6
- pygpt_net/provider/core/config/json_file.py +9 -7
- pygpt_net/provider/core/config/patch.py +43 -1
- pygpt_net/provider/core/ctx/base.py +30 -25
- pygpt_net/provider/core/ctx/db_sqlite/__init__.py +59 -34
- pygpt_net/provider/core/ctx/db_sqlite/storage.py +62 -30
- pygpt_net/provider/core/ctx/db_sqlite/utils.py +11 -9
- pygpt_net/provider/core/index/base.py +129 -23
- pygpt_net/provider/core/index/db_sqlite/__init__.py +130 -23
- pygpt_net/provider/core/index/db_sqlite/storage.py +130 -23
- pygpt_net/provider/core/index/db_sqlite/utils.py +4 -2
- pygpt_net/provider/core/mode/base.py +5 -3
- pygpt_net/provider/core/mode/json_file.py +7 -6
- pygpt_net/provider/core/model/base.py +6 -4
- pygpt_net/provider/core/model/json_file.py +9 -7
- pygpt_net/provider/core/notepad/base.py +5 -3
- pygpt_net/provider/core/notepad/db_sqlite/__init__.py +5 -4
- pygpt_net/provider/core/notepad/db_sqlite/storage.py +4 -3
- pygpt_net/provider/core/plugin_preset/base.py +4 -2
- pygpt_net/provider/core/plugin_preset/json_file.py +5 -3
- pygpt_net/provider/core/preset/base.py +6 -4
- pygpt_net/provider/core/preset/json_file.py +9 -9
- pygpt_net/provider/core/prompt/base.py +6 -3
- pygpt_net/provider/core/prompt/json_file.py +11 -6
- pygpt_net/provider/gpt/assistants.py +21 -11
- pygpt_net/provider/gpt/audio.py +6 -5
- pygpt_net/provider/gpt/chat.py +10 -7
- pygpt_net/provider/gpt/completion.py +11 -5
- pygpt_net/provider/gpt/image.py +9 -2
- pygpt_net/provider/gpt/store.py +53 -18
- pygpt_net/provider/gpt/vision.py +17 -11
- pygpt_net/provider/llms/anthropic.py +7 -2
- pygpt_net/provider/llms/azure_openai.py +26 -5
- pygpt_net/provider/llms/base.py +47 -9
- pygpt_net/provider/llms/google.py +7 -2
- pygpt_net/provider/llms/hugging_face.py +13 -3
- pygpt_net/provider/llms/hugging_face_api.py +18 -4
- pygpt_net/provider/llms/local.py +7 -2
- pygpt_net/provider/llms/ollama.py +30 -6
- pygpt_net/provider/llms/openai.py +32 -6
- pygpt_net/provider/vector_stores/__init__.py +45 -14
- pygpt_net/provider/vector_stores/base.py +35 -8
- pygpt_net/provider/vector_stores/chroma.py +13 -3
- pygpt_net/provider/vector_stores/ctx_attachment.py +31 -12
- pygpt_net/provider/vector_stores/elasticsearch.py +12 -3
- pygpt_net/provider/vector_stores/pinecode.py +12 -3
- pygpt_net/provider/vector_stores/redis.py +12 -3
- pygpt_net/provider/vector_stores/simple.py +12 -3
- pygpt_net/provider/vector_stores/temp.py +16 -4
- pygpt_net/provider/web/base.py +10 -3
- pygpt_net/provider/web/google_custom_search.py +9 -3
- pygpt_net/provider/web/microsoft_bing.py +9 -3
- pygpt_net/tools/__init__.py +20 -4
- pygpt_net/tools/audio_transcriber/__init__.py +4 -3
- pygpt_net/tools/base.py +28 -7
- pygpt_net/tools/code_interpreter/__init__.py +177 -77
- 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 +81 -25
- pygpt_net/tools/html_canvas/ui/dialogs.py +46 -62
- pygpt_net/tools/html_canvas/ui/widgets.py +96 -3
- pygpt_net/tools/image_viewer/__init__.py +10 -4
- pygpt_net/tools/indexer/__init__.py +8 -7
- pygpt_net/tools/media_player/__init__.py +4 -3
- pygpt_net/tools/text_editor/__init__.py +36 -10
- 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 +27 -45
- 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/audio.py +12 -1
- 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.42.dist-info}/METADATA +177 -183
- {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.42.dist-info}/RECORD +340 -325
- /pygpt_net/data/css/{web.dark.css → web-blocks.dark.css} +0 -0
- {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.42.dist-info}/LICENSE +0 -0
- {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.42.dist-info}/WHEEL +0 -0
- {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.42.dist-info}/entry_points.txt +0 -0
@@ -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: 2024.
|
9
|
+
# Updated Date: 2024.12.14 22:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import datetime
|
13
13
|
import os.path
|
14
14
|
import shutil
|
15
|
+
from typing import Dict
|
15
16
|
|
16
17
|
from PySide6.QtGui import QAction, QIcon
|
17
18
|
|
@@ -165,7 +166,7 @@ class MediaPlayer(BaseTool):
|
|
165
166
|
else:
|
166
167
|
self.close()
|
167
168
|
|
168
|
-
def setup_menu(self) ->
|
169
|
+
def setup_menu(self) -> Dict[str, QAction]:
|
169
170
|
"""
|
170
171
|
Setup main menu
|
171
172
|
|
@@ -188,7 +189,7 @@ class MediaPlayer(BaseTool):
|
|
188
189
|
self.dialog = VideoPlayer(self.window)
|
189
190
|
self.dialog.setup()
|
190
191
|
|
191
|
-
def get_lang_mappings(self) ->
|
192
|
+
def get_lang_mappings(self) -> Dict[str, Dict]:
|
192
193
|
"""
|
193
194
|
Get language mappings
|
194
195
|
|
@@ -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 22:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import hashlib
|
13
13
|
import os
|
14
|
+
from typing import Dict, Optional
|
14
15
|
|
15
16
|
from PySide6.QtGui import QAction, QIcon
|
16
17
|
from PySide6.QtWidgets import QFileDialog
|
17
18
|
|
18
19
|
from pygpt_net.tools.base import BaseTool
|
19
20
|
from pygpt_net.tools.text_editor.ui.dialogs import DialogSpawner
|
21
|
+
from pygpt_net.ui.widget.dialog.base import BaseDialog
|
20
22
|
from pygpt_net.utils import trans
|
21
23
|
|
22
24
|
|
@@ -47,7 +49,13 @@ class TextEditor(BaseTool):
|
|
47
49
|
"""
|
48
50
|
return 'file_editor_' + hashlib.md5(file.encode('utf-8')).hexdigest()
|
49
51
|
|
50
|
-
def open_file(
|
52
|
+
def open_file(
|
53
|
+
self,
|
54
|
+
id: str,
|
55
|
+
auto_close: bool = True,
|
56
|
+
force: bool = False,
|
57
|
+
save: bool = False
|
58
|
+
):
|
51
59
|
"""
|
52
60
|
Open text file dialog
|
53
61
|
|
@@ -73,7 +81,12 @@ class TextEditor(BaseTool):
|
|
73
81
|
if path:
|
74
82
|
self.open(path, id, auto_close)
|
75
83
|
|
76
|
-
def clear(
|
84
|
+
def clear(
|
85
|
+
self,
|
86
|
+
id: str = None,
|
87
|
+
force: bool = False,
|
88
|
+
save: bool = False
|
89
|
+
):
|
77
90
|
"""
|
78
91
|
Clear current instance
|
79
92
|
|
@@ -101,8 +114,8 @@ class TextEditor(BaseTool):
|
|
101
114
|
|
102
115
|
def open(
|
103
116
|
self,
|
104
|
-
file: str = None,
|
105
|
-
current_id: str = None,
|
117
|
+
file: Optional[str] = None,
|
118
|
+
current_id: Optional[str] = None,
|
106
119
|
auto_close: bool = True,
|
107
120
|
force: bool = False):
|
108
121
|
"""
|
@@ -153,7 +166,11 @@ class TextEditor(BaseTool):
|
|
153
166
|
else:
|
154
167
|
self.window.core.filesystem.editor.clear(id) # clear editor if no file
|
155
168
|
|
156
|
-
def close(
|
169
|
+
def close(
|
170
|
+
self,
|
171
|
+
id: str,
|
172
|
+
save: bool = False
|
173
|
+
):
|
157
174
|
"""
|
158
175
|
Close file editor
|
159
176
|
|
@@ -180,7 +197,12 @@ class TextEditor(BaseTool):
|
|
180
197
|
id = self.save_as_file(id)
|
181
198
|
return id
|
182
199
|
|
183
|
-
def restore(
|
200
|
+
def restore(
|
201
|
+
self,
|
202
|
+
id: str,
|
203
|
+
force: bool = False,
|
204
|
+
save: bool = False
|
205
|
+
):
|
184
206
|
"""
|
185
207
|
Restore file content
|
186
208
|
|
@@ -225,7 +247,7 @@ class TextEditor(BaseTool):
|
|
225
247
|
self.window.core.filesystem.editor.save(id, path)
|
226
248
|
return id
|
227
249
|
|
228
|
-
def setup_menu(self) ->
|
250
|
+
def setup_menu(self) -> Dict[str, QAction]:
|
229
251
|
"""
|
230
252
|
Setup main menu
|
231
253
|
|
@@ -243,7 +265,11 @@ class TextEditor(BaseTool):
|
|
243
265
|
)
|
244
266
|
return actions
|
245
267
|
|
246
|
-
def get_instance(
|
268
|
+
def get_instance(
|
269
|
+
self,
|
270
|
+
type_id: str,
|
271
|
+
dialog_id: Optional[str] = None
|
272
|
+
) -> Optional[BaseDialog]:
|
247
273
|
"""
|
248
274
|
Spawn and return dialog instance
|
249
275
|
|
@@ -254,7 +280,7 @@ class TextEditor(BaseTool):
|
|
254
280
|
if type_id == "text_editor":
|
255
281
|
return self.spawner.setup(dialog_id)
|
256
282
|
|
257
|
-
def get_lang_mappings(self) ->
|
283
|
+
def get_lang_mappings(self) -> Dict[str, Dict]:
|
258
284
|
"""
|
259
285
|
Get language mappings
|
260
286
|
|
@@ -6,13 +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: 2024.
|
9
|
+
# Updated Date: 2024.12.12 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
from PySide6.QtWidgets import QMenu
|
13
13
|
from PySide6.QtGui import QAction, QIcon
|
14
14
|
|
15
|
-
from pygpt_net.core.tabs import Tab
|
15
|
+
from pygpt_net.core.tabs.tab import Tab
|
16
16
|
from pygpt_net.utils import trans
|
17
17
|
import pygpt_net.icons_rc
|
18
18
|
|
@@ -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.09 03:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
from PySide6.QtCore import Qt
|
@@ -153,14 +153,6 @@ class Input:
|
|
153
153
|
"""
|
154
154
|
# header (input label + input counter)
|
155
155
|
self.window.ui.nodes['input.label'] = HelpLabel(trans("input.label"))
|
156
|
-
self.window.ui.nodes['input.counter'] = QLabel("")
|
157
|
-
self.window.ui.nodes['input.counter'].setToolTip(trans('tip.tokens.input'))
|
158
|
-
|
159
|
-
# inline vision
|
160
|
-
self.window.ui.nodes['inline.vision'] = HelpLabel(trans('inline.vision'))
|
161
|
-
self.window.ui.nodes['inline.vision'].setVisible(False)
|
162
|
-
self.window.ui.nodes['inline.vision'].setContentsMargins(0, 0, 0, 0)
|
163
|
-
self.window.ui.nodes['inline.vision'].setToolTip(trans('vision.checkbox.tooltip'))
|
164
156
|
|
165
157
|
# plugin audio input addon
|
166
158
|
self.window.ui.plugin_addon['audio.input'] = AudioInput(self.window)
|
@@ -168,10 +160,10 @@ class Input:
|
|
168
160
|
|
169
161
|
grid = QGridLayout()
|
170
162
|
|
171
|
-
left_layout = QHBoxLayout()
|
172
|
-
left_layout.addWidget(self.window.ui.nodes['input.label'])
|
173
|
-
left_layout.addWidget(self.window.ui.nodes['inline.vision'])
|
174
|
-
left_layout.addStretch(1)
|
163
|
+
#left_layout = QHBoxLayout()
|
164
|
+
#left_layout.addWidget(self.window.ui.nodes['input.label'])
|
165
|
+
#left_layout.addWidget(self.window.ui.nodes['inline.vision'])
|
166
|
+
#left_layout.addStretch(1)
|
175
167
|
|
176
168
|
center_layout = QHBoxLayout()
|
177
169
|
center_layout.addStretch()
|
@@ -179,13 +171,13 @@ class Input:
|
|
179
171
|
center_layout.addWidget(self.window.ui.plugin_addon['audio.input.btn'])
|
180
172
|
center_layout.addStretch()
|
181
173
|
|
182
|
-
right_layout = QHBoxLayout()
|
183
|
-
right_layout.addStretch(1)
|
184
|
-
right_layout.addWidget(self.window.ui.nodes['input.counter'])
|
174
|
+
#right_layout = QHBoxLayout()
|
175
|
+
#right_layout.addStretch(1)
|
176
|
+
#right_layout.addWidget(self.window.ui.nodes['input.counter'])
|
185
177
|
|
186
|
-
grid.addLayout(left_layout, 0, 0)
|
178
|
+
#grid.addLayout(left_layout, 0, 0)
|
187
179
|
grid.addLayout(center_layout, 0, 1, alignment=Qt.AlignCenter)
|
188
|
-
grid.addLayout(right_layout, 0, 2, alignment=Qt.AlignRight)
|
180
|
+
#grid.addLayout(right_layout, 0, 2, alignment=Qt.AlignRight)
|
189
181
|
|
190
182
|
grid.setContentsMargins(0, 0, 0, 0)
|
191
183
|
return grid
|
@@ -6,18 +6,17 @@
|
|
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 19:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
from PySide6.QtCore import Qt
|
13
|
-
from PySide6.QtGui import QIcon
|
14
13
|
from PySide6.QtWidgets import QVBoxLayout, QLabel, QHBoxLayout, QCheckBox, QWidget, QSizePolicy, QPushButton, \
|
15
|
-
QGridLayout,
|
14
|
+
QGridLayout, QWidgetItem, QLayout
|
16
15
|
|
17
16
|
from pygpt_net.ui.widget.audio.output import AudioOutput
|
18
17
|
from pygpt_net.ui.widget.element.labels import ChatStatusLabel, IconLabel, HelpLabel
|
19
|
-
from pygpt_net.ui.widget.
|
20
|
-
from pygpt_net.ui.widget.
|
18
|
+
from pygpt_net.ui.widget.anims.loader import Loading
|
19
|
+
from pygpt_net.ui.widget.tabs.layout import OutputLayout
|
21
20
|
|
22
21
|
from .explorer import Explorer
|
23
22
|
from .input import Input
|
@@ -28,6 +27,7 @@ from pygpt_net.utils import trans
|
|
28
27
|
import pygpt_net.icons_rc
|
29
28
|
|
30
29
|
|
30
|
+
|
31
31
|
class Output:
|
32
32
|
def __init__(self, window=None):
|
33
33
|
"""
|
@@ -47,46 +47,15 @@ class Output:
|
|
47
47
|
|
48
48
|
:return: QWidget
|
49
49
|
"""
|
50
|
-
#
|
51
|
-
self.window.ui.
|
52
|
-
|
53
|
-
#
|
54
|
-
plus_button = QPushButton(QIcon(":/icons/add.svg"), "")
|
55
|
-
plus_button.setFixedSize(30, 25)
|
56
|
-
plus_button.setFlat(True)
|
57
|
-
plus_button.clicked.connect(self.window.controller.ui.tabs.new_tab)
|
58
|
-
plus_button.setObjectName('tab-add')
|
59
|
-
plus_button.setProperty('tabAdd', True)
|
60
|
-
plus_button.setToolTip(trans('action.tab.add.chat'))
|
61
|
-
|
62
|
-
# Add the button to the top right corner of the tab bar
|
63
|
-
self.window.ui.tabs['output'].setCornerWidget(plus_button, corner=Qt.TopRightCorner)
|
64
|
-
|
65
|
-
# create empty tabs
|
50
|
+
# prepare columns
|
51
|
+
self.window.ui.layout = OutputLayout(self.window)
|
52
|
+
|
53
|
+
# create empty containers for chat output
|
66
54
|
self.window.ui.nodes['output'] = {}
|
67
55
|
self.window.ui.nodes['output_plain'] = {}
|
68
56
|
|
69
|
-
# connect signals
|
70
|
-
self.window.ui.tabs['output'].currentChanged.connect(
|
71
|
-
self.window.controller.ui.tabs.on_tab_changed
|
72
|
-
)
|
73
|
-
self.window.ui.tabs['output'].tabBarClicked.connect(
|
74
|
-
self.window.controller.ui.tabs.on_tab_clicked
|
75
|
-
)
|
76
|
-
self.window.ui.tabs['output'].tabBarDoubleClicked.connect(
|
77
|
-
self.window.controller.ui.tabs.on_tab_dbl_clicked
|
78
|
-
)
|
79
|
-
self.window.ui.tabs['output'].tabCloseRequested.connect(
|
80
|
-
self.window.controller.ui.tabs.on_tab_closed
|
81
|
-
)
|
82
|
-
|
83
|
-
# tab bar signals
|
84
|
-
self.window.ui.tabs['output'].tabBar().tabMoved.connect(
|
85
|
-
self.window.controller.ui.tabs.on_tab_moved
|
86
|
-
)
|
87
|
-
|
88
57
|
layout = QVBoxLayout()
|
89
|
-
layout.addWidget(self.window.ui.
|
58
|
+
layout.addWidget(self.window.ui.layout)
|
90
59
|
layout.addLayout(self.setup_bottom())
|
91
60
|
layout.setContentsMargins(0, 5, 0, 0)
|
92
61
|
|
@@ -177,18 +146,29 @@ class Output:
|
|
177
146
|
self.window.ui.nodes['prompt.context'].setToolTip(trans('tip.tokens.ctx'))
|
178
147
|
self.window.ui.nodes['prompt.context'].setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
179
148
|
|
149
|
+
self.window.ui.nodes['input.counter'] = ChatStatusLabel("")
|
150
|
+
self.window.ui.nodes['input.counter'].setToolTip(trans('tip.tokens.input'))
|
151
|
+
self.window.ui.nodes['input.counter'].setWordWrap(False)
|
152
|
+
|
180
153
|
# plugin audio output addon
|
181
154
|
self.window.ui.plugin_addon['audio.output'] = AudioOutput(self.window)
|
182
155
|
|
183
156
|
# schedule
|
184
157
|
self.window.ui.plugin_addon['schedule'] = ChatStatusLabel("")
|
185
158
|
|
159
|
+
# inline vision
|
160
|
+
self.window.ui.nodes['inline.vision'] = HelpLabel(trans('inline.vision'))
|
161
|
+
self.window.ui.nodes['inline.vision'].setVisible(False)
|
162
|
+
self.window.ui.nodes['inline.vision'].setContentsMargins(0, 0, 0, 0)
|
163
|
+
self.window.ui.nodes['inline.vision'].setToolTip(trans('vision.checkbox.tooltip'))
|
164
|
+
|
186
165
|
opts_layout = QHBoxLayout()
|
187
166
|
# opts_layout.setSpacing(2) #
|
188
167
|
opts_layout.setContentsMargins(0, 0, 0, 0)
|
189
168
|
opts_layout.addWidget(self.window.ui.nodes['output.timestamp'])
|
190
169
|
# opts_layout.addWidget(self.window.ui.nodes['output.edit'])
|
191
170
|
opts_layout.addWidget(self.window.ui.nodes['output.raw'])
|
171
|
+
opts_layout.addWidget(self.window.ui.nodes['inline.vision'])
|
192
172
|
opts_layout.setAlignment(Qt.AlignLeft)
|
193
173
|
|
194
174
|
left_layout = QHBoxLayout()
|
@@ -210,7 +190,9 @@ class Output:
|
|
210
190
|
right_layout.addWidget(self.window.ui.nodes['chat.model'])
|
211
191
|
right_layout.addWidget(QLabel(" "))
|
212
192
|
right_layout.addWidget(self.window.ui.nodes['prompt.context'])
|
213
|
-
right_layout.
|
193
|
+
right_layout.addWidget(QLabel(" "))
|
194
|
+
right_layout.addWidget(self.window.ui.nodes['input.counter'])
|
195
|
+
right_layout.setContentsMargins(0, 8, 20, 0)
|
214
196
|
|
215
197
|
left_widget = QWidget()
|
216
198
|
left_widget.setLayout(left_layout)
|
@@ -224,14 +206,14 @@ class Output:
|
|
224
206
|
|
225
207
|
left_layout = QHBoxLayout()
|
226
208
|
left_layout.addWidget(left_widget)
|
227
|
-
left_layout.addStretch(1)
|
209
|
+
#left_layout.addStretch(1)
|
228
210
|
left_layout.setContentsMargins(0, 0, 0, 0)
|
229
211
|
|
230
212
|
center_layout = QHBoxLayout()
|
231
|
-
center_layout.addStretch()
|
213
|
+
#center_layout.addStretch()
|
232
214
|
center_layout.addWidget(self.window.ui.nodes['anim.loading'])
|
233
215
|
center_layout.addStretch()
|
234
|
-
center_layout.setContentsMargins(
|
216
|
+
center_layout.setContentsMargins(20, 0, 0, 0)
|
235
217
|
|
236
218
|
right_layout = QHBoxLayout()
|
237
219
|
right_layout.addStretch(1)
|
@@ -6,7 +6,7 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.12 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
from PySide6 import QtCore
|
@@ -211,10 +211,19 @@ class CtxList:
|
|
211
211
|
item.dt = dt
|
212
212
|
item.isPinned = data.important
|
213
213
|
item.setData(tooltip_text, QtCore.Qt.ToolTipRole)
|
214
|
+
is_important = False
|
215
|
+
is_attachment = False
|
216
|
+
label = data.label
|
214
217
|
if data.important:
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
+
is_important = True
|
219
|
+
if data.additional_ctx and len(data.additional_ctx) > 0:
|
220
|
+
is_attachment = True
|
221
|
+
custom_data = {
|
222
|
+
"label": label,
|
223
|
+
"is_important": is_important,
|
224
|
+
"is_attachment": is_attachment,
|
225
|
+
}
|
226
|
+
item.setData(custom_data, QtCore.Qt.ItemDataRole.UserRole)
|
218
227
|
item.setData(name)
|
219
228
|
return item
|
220
229
|
|
@@ -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.09 03:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import os
|
13
13
|
|
14
14
|
from PySide6.QtCore import QSize
|
15
15
|
from PySide6.QtGui import QIcon
|
16
|
-
from PySide6.QtWidgets import QVBoxLayout, QLabel, QPushButton, QWidget, QSizePolicy
|
16
|
+
from PySide6.QtWidgets import QVBoxLayout, QLabel, QPushButton, QWidget, QSizePolicy, QHBoxLayout
|
17
17
|
|
18
18
|
from pygpt_net.ui.widget.textarea.name import NameInput
|
19
19
|
from pygpt_net.ui.widget.option.slider import OptionSlider
|
@@ -25,6 +25,7 @@ from .agent_llama import AgentLlama
|
|
25
25
|
from .image import Image
|
26
26
|
from .indexes import Indexes
|
27
27
|
from .vision import Vision
|
28
|
+
from ...widget.option.toggle_label import ToggleLabel
|
28
29
|
|
29
30
|
|
30
31
|
class Footer:
|
@@ -75,6 +76,21 @@ class Footer:
|
|
75
76
|
rows.addWidget(self.window.ui.nodes['voice.control.btn'])
|
76
77
|
rows.setContentsMargins(2, 0, 0, 0)
|
77
78
|
|
79
|
+
self.window.ui.nodes['layout.split'] = ToggleLabel(trans('layout.split'), label_position="left",
|
80
|
+
icon=":/icons/split_screen.svg")
|
81
|
+
self.window.ui.nodes['layout.split'].box.stateChanged.connect(
|
82
|
+
lambda: self.window.controller.ui.tabs.toggle_split_screen(self.window.ui.nodes['layout.split'].box.isChecked())
|
83
|
+
)
|
84
|
+
split_layout = QHBoxLayout()
|
85
|
+
|
86
|
+
split_layout.addWidget(QLabel(""))
|
87
|
+
split_layout.addStretch(1)
|
88
|
+
split_layout.addWidget(self.window.ui.nodes['layout.split'])
|
89
|
+
split_layout.setContentsMargins(5, 0, 15, 0)
|
90
|
+
split_widget = QWidget()
|
91
|
+
split_widget.setLayout(split_layout)
|
92
|
+
rows.addWidget(split_widget)
|
93
|
+
|
78
94
|
# logo
|
79
95
|
logo_button = self.setup_logo()
|
80
96
|
|
pygpt_net/ui/main.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.09 23:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import os
|
@@ -192,8 +192,8 @@ class MainWindow(QMainWindow, QtStyleTools):
|
|
192
192
|
|
193
193
|
def setup(self):
|
194
194
|
"""Setup app"""
|
195
|
-
self.controller.setup()
|
196
195
|
self.tools.setup()
|
196
|
+
self.controller.setup()
|
197
197
|
self.controller.plugins.setup()
|
198
198
|
self.controller.post_setup()
|
199
199
|
|
pygpt_net/ui/menu/audio.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 18:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
from PySide6.QtGui import QAction, QIcon
|
@@ -52,6 +52,13 @@ class Audio:
|
|
52
52
|
checkable=False,
|
53
53
|
)
|
54
54
|
|
55
|
+
self.window.ui.menu['audio.stop'] = QAction(
|
56
|
+
QIcon(":/icons/mute.svg"),
|
57
|
+
trans("menu.audio.stop"),
|
58
|
+
self.window,
|
59
|
+
checkable=False,
|
60
|
+
)
|
61
|
+
|
55
62
|
self.window.ui.menu['audio.output'].triggered.connect(
|
56
63
|
lambda: self.window.controller.plugins.toggle('audio_output')
|
57
64
|
)
|
@@ -67,6 +74,9 @@ class Audio:
|
|
67
74
|
self.window.ui.menu['audio.cache.clear'].triggered.connect(
|
68
75
|
lambda: self.window.controller.audio.clear_cache()
|
69
76
|
)
|
77
|
+
self.window.ui.menu['audio.stop'].triggered.connect(
|
78
|
+
lambda: self.window.controller.audio.stop_audio()
|
79
|
+
)
|
70
80
|
|
71
81
|
self.window.ui.menu['menu.audio'] = self.window.menuBar().addMenu(trans("menu.audio"))
|
72
82
|
self.window.ui.menu['menu.audio'].addAction(self.window.ui.menu['audio.input'])
|
@@ -76,3 +86,4 @@ class Audio:
|
|
76
86
|
self.window.ui.menu['menu.audio'].addAction(self.window.ui.menu['audio.control.global'])
|
77
87
|
self.window.ui.menu['menu.audio'].addSeparator()
|
78
88
|
self.window.ui.menu['menu.audio'].addAction(self.window.ui.menu['audio.cache.clear'])
|
89
|
+
self.window.ui.menu['menu.audio'].addAction(self.window.ui.menu['audio.stop'])
|
pygpt_net/ui/menu/config.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.07 21:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
|
+
import os
|
13
|
+
|
12
14
|
from PySide6.QtGui import QAction, QIcon
|
13
15
|
from PySide6.QtWidgets import QMenu
|
14
16
|
|
@@ -42,16 +44,10 @@ class Config:
|
|
42
44
|
self.window.ui.menu['config.access'] = QAction(QIcon(":/icons/accessibility.svg"),
|
43
45
|
trans("menu.config.access"), self.window)
|
44
46
|
|
45
|
-
|
46
|
-
css_files.
|
47
|
-
css_files.
|
48
|
-
css_files
|
49
|
-
css_files.append("markdown.css")
|
50
|
-
css_files.append("markdown.dark.css")
|
51
|
-
css_files.append("markdown.light.css")
|
52
|
-
css_files.append("web.css")
|
53
|
-
css_files.append("web.dark.css")
|
54
|
-
css_files.append("web.light.css")
|
47
|
+
css_dir = os.path.join(self.window.core.config.path, 'css')
|
48
|
+
css_files = os.listdir(css_dir)
|
49
|
+
css_files = [f for f in css_files if not f.endswith('.backup')] # remove .backup files
|
50
|
+
css_files = sorted(css_files) # sort by name
|
55
51
|
|
56
52
|
json_files = []
|
57
53
|
json_files.append("attachments.json")
|
pygpt_net/ui/menu/debug.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.13 19:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
from PySide6.QtGui import QAction
|
@@ -41,6 +41,7 @@ class Debug:
|
|
41
41
|
self.window.ui.menu['debug.logger'] = QAction(trans("menu.debug.logger"), self.window, checkable=True)
|
42
42
|
self.window.ui.menu['debug.app.log'] = QAction(trans("menu.debug.app.log"), self.window, checkable=True)
|
43
43
|
self.window.ui.menu['debug.kernel'] = QAction(trans("menu.debug.kernel"), self.window, checkable=True)
|
44
|
+
self.window.ui.menu['debug.render'] = QAction(trans("menu.debug.render"), self.window, checkable=True)
|
44
45
|
|
45
46
|
self.window.ui.menu['debug.config'].triggered.connect(
|
46
47
|
lambda: self.window.controller.debug.toggle('config'))
|
@@ -74,9 +75,12 @@ class Debug:
|
|
74
75
|
lambda: self.window.controller.debug.toggle('db'))
|
75
76
|
self.window.ui.menu['debug.kernel'].triggered.connect(
|
76
77
|
lambda: self.window.controller.debug.toggle('kernel'))
|
78
|
+
self.window.ui.menu['debug.render'].triggered.connect(
|
79
|
+
lambda: self.window.controller.debug.toggle_render())
|
77
80
|
|
78
81
|
self.window.ui.menu['menu.debug'] = self.window.menuBar().addMenu(trans("menu.debug"))
|
79
82
|
self.window.ui.menu['menu.debug'].addAction(self.window.ui.menu['debug.logger'])
|
83
|
+
self.window.ui.menu['menu.debug'].addAction(self.window.ui.menu['debug.render'])
|
80
84
|
self.window.ui.menu['menu.debug'].addAction(self.window.ui.menu['debug.db'])
|
81
85
|
self.window.ui.menu['menu.debug'].addAction(self.window.ui.menu['debug.app.log'])
|
82
86
|
self.window.ui.menu['menu.debug'].addSeparator()
|
@@ -94,4 +98,10 @@ class Debug:
|
|
94
98
|
self.window.ui.menu['menu.debug'].addAction(self.window.ui.menu['debug.tabs'])
|
95
99
|
self.window.ui.menu['menu.debug'].addAction(self.window.ui.menu['debug.ui'])
|
96
100
|
|
101
|
+
# restore state
|
102
|
+
if self.window.core.config.get('debug.render'):
|
103
|
+
self.window.ui.menu['debug.render'].setChecked(True)
|
104
|
+
else:
|
105
|
+
self.window.ui.menu['debug.render'].setChecked(False)
|
106
|
+
|
97
107
|
|
pygpt_net/ui/menu/theme.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.07 21:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
from PySide6.QtGui import QAction, QIcon
|
@@ -28,10 +28,14 @@ class Theme:
|
|
28
28
|
def setup(self):
|
29
29
|
"""Setup theme menu"""
|
30
30
|
self.window.ui.menu['theme'] = {}
|
31
|
+
self.window.ui.menu['theme_style'] = {}
|
31
32
|
self.window.ui.menu['theme_syntax'] = {}
|
32
33
|
self.window.ui.menu['theme.layout.density'] = {}
|
33
34
|
self.window.ui.menu['menu.theme'] = QMenu(trans("menu.theme"), self.window)
|
34
35
|
|
36
|
+
# styles
|
37
|
+
self.window.ui.menu['theme.style'] = QMenu(trans("menu.theme.style"), self.window)
|
38
|
+
|
35
39
|
# color themes
|
36
40
|
self.window.ui.menu['theme.dark'] = QMenu(trans("menu.theme.dark"), self.window)
|
37
41
|
self.window.ui.menu['theme.light'] = QMenu(trans("menu.theme.light"), self.window)
|
@@ -40,12 +44,14 @@ class Theme:
|
|
40
44
|
# layout density
|
41
45
|
self.window.ui.menu['theme.density'] = QMenu(trans("menu.theme.density"), self.window)
|
42
46
|
|
47
|
+
"""
|
43
48
|
# blocks
|
44
49
|
self.window.ui.menu['theme.blocks'] = QAction(trans("menu.theme.blocks"), self.window, checkable=True)
|
45
50
|
self.window.ui.menu['theme.blocks'].triggered.connect(
|
46
51
|
lambda: self.window.controller.theme.toggle_option('render.blocks'))
|
47
52
|
self.window.ui.menu['theme.blocks'].setCheckable(True)
|
48
53
|
self.window.ui.menu['theme.blocks'].setChecked(self.window.core.config.get('render.blocks'))
|
54
|
+
"""
|
49
55
|
|
50
56
|
# tooltips
|
51
57
|
self.window.ui.menu['theme.tooltips'] = QAction(trans("menu.theme.tooltips"), self.window, checkable=True)
|
@@ -62,10 +68,11 @@ class Theme:
|
|
62
68
|
self.window.ui.menu['theme.settings'].triggered.connect(
|
63
69
|
lambda: self.window.controller.settings.open_section('layout'))
|
64
70
|
|
71
|
+
self.window.ui.menu['menu.theme'].addMenu(self.window.ui.menu['theme.style'])
|
65
72
|
self.window.ui.menu['menu.theme'].addMenu(self.window.ui.menu['theme.dark'])
|
66
73
|
self.window.ui.menu['menu.theme'].addMenu(self.window.ui.menu['theme.light'])
|
67
74
|
self.window.ui.menu['menu.theme'].addMenu(self.window.ui.menu['theme.syntax'])
|
68
75
|
self.window.ui.menu['menu.theme'].addMenu(self.window.ui.menu['theme.density'])
|
69
|
-
self.window.ui.menu['menu.theme'].addAction(self.window.ui.menu['theme.blocks'])
|
76
|
+
# self.window.ui.menu['menu.theme'].addAction(self.window.ui.menu['theme.blocks'])
|
70
77
|
self.window.ui.menu['menu.theme'].addAction(self.window.ui.menu['theme.tooltips'])
|
71
78
|
self.window.ui.menu['menu.theme'].addAction(self.window.ui.menu['theme.settings'])
|
@@ -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 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import datetime
|
@@ -17,7 +17,7 @@ from PySide6.QtGui import QAction, QIcon, QCursor, QResizeEvent
|
|
17
17
|
from PySide6.QtWidgets import QTreeView, QMenu, QWidget, QVBoxLayout, QFileSystemModel, QLabel, QHBoxLayout, \
|
18
18
|
QPushButton, QSizePolicy
|
19
19
|
|
20
|
-
from pygpt_net.core.tabs import Tab
|
20
|
+
from pygpt_net.core.tabs.tab import Tab
|
21
21
|
from pygpt_net.ui.widget.element.button import ContextMenuButton
|
22
22
|
from pygpt_net.ui.widget.element.labels import HelpLabel
|
23
23
|
from pygpt_net.utils import trans
|