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
@@ -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 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import os
|
@@ -23,6 +23,7 @@ class Markdown:
|
|
23
23
|
"""
|
24
24
|
self.window = window
|
25
25
|
self.css = {} # external styles
|
26
|
+
self.web_style = ""
|
26
27
|
|
27
28
|
def update(self, force: bool = False):
|
28
29
|
"""
|
@@ -60,7 +61,8 @@ class Markdown:
|
|
60
61
|
|
61
62
|
:return: stylesheet
|
62
63
|
"""
|
63
|
-
|
64
|
+
web_style = self.window.core.config.get("theme.style", "blocks")
|
65
|
+
if "web" not in self.css or self.web_style != web_style:
|
64
66
|
self.load()
|
65
67
|
if "web" in self.css:
|
66
68
|
return self.css["web"]
|
@@ -73,31 +75,41 @@ class Markdown:
|
|
73
75
|
self.window.dispatch(event) # per current engine
|
74
76
|
self.window.controller.ctx.refresh()
|
75
77
|
self.window.controller.ctx.refresh_output()
|
76
|
-
|
78
|
+
event = RenderEvent(RenderEvent.END, {
|
77
79
|
"meta": meta,
|
78
|
-
}
|
79
|
-
event = RenderEvent(RenderEvent.END, data)
|
80
|
+
})
|
80
81
|
self.window.dispatch(event)
|
81
82
|
|
82
83
|
def load(self):
|
83
84
|
"""Load markdown styles"""
|
84
|
-
parents = [
|
85
|
+
parents = [
|
86
|
+
"markdown",
|
87
|
+
"web",
|
88
|
+
]
|
89
|
+
web_style = self.window.core.config.get("theme.style", "blocks")
|
85
90
|
for base_name in parents:
|
91
|
+
suffix = ""
|
92
|
+
if base_name == 'web':
|
93
|
+
suffix = "-" + web_style
|
94
|
+
self.web_style = web_style
|
86
95
|
theme = self.window.core.config.get('theme')
|
87
96
|
name = str(base_name)
|
88
|
-
color_name = str(base_name)
|
89
97
|
if theme.startswith('light'):
|
90
|
-
|
98
|
+
color = '.light'
|
91
99
|
else:
|
92
|
-
|
100
|
+
color = '.dark'
|
101
|
+
|
102
|
+
# load CSS, app + user
|
103
|
+
file_base = name + suffix + '.css'
|
104
|
+
file_color = name + suffix + color + '.css'
|
93
105
|
paths = []
|
94
|
-
paths.append(os.path.join(self.window.core.config.get_app_path(), 'data', 'css',
|
95
|
-
paths.append(os.path.join(self.window.core.config.get_app_path(), 'data', 'css',
|
96
|
-
paths.append(os.path.join(self.window.core.config.get_user_path(), 'css',
|
97
|
-
paths.append(os.path.join(self.window.core.config.get_user_path(), 'css',
|
106
|
+
paths.append(os.path.join(self.window.core.config.get_app_path(), 'data', 'css', file_base))
|
107
|
+
paths.append(os.path.join(self.window.core.config.get_app_path(), 'data', 'css', file_color))
|
108
|
+
paths.append(os.path.join(self.window.core.config.get_user_path(), 'css', file_base))
|
109
|
+
paths.append(os.path.join(self.window.core.config.get_user_path(), 'css', file_color))
|
98
110
|
content = ''
|
99
111
|
for path in paths:
|
100
|
-
if os.path.exists(path):
|
112
|
+
if os.path.exists(path) and os.path.isfile(path):
|
101
113
|
with open(path, 'r') as file:
|
102
114
|
content += file.read()
|
103
115
|
|
@@ -107,8 +119,12 @@ class Markdown:
|
|
107
119
|
except KeyError as e: # ignore missing env vars
|
108
120
|
pass
|
109
121
|
|
110
|
-
def get_default(self):
|
111
|
-
"""
|
122
|
+
def get_default(self) -> str:
|
123
|
+
"""
|
124
|
+
Set default markdown CSS
|
125
|
+
|
126
|
+
:return: default CSS
|
127
|
+
"""
|
112
128
|
colors = {
|
113
129
|
"dark": {
|
114
130
|
"a": "#fff",
|
@@ -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
|
@@ -30,6 +30,18 @@ class Menu:
|
|
30
30
|
# setup themes list menu
|
31
31
|
if self.loaded:
|
32
32
|
return
|
33
|
+
|
34
|
+
# styles
|
35
|
+
styles = self.window.controller.theme.common.get_styles_list()
|
36
|
+
for style in styles:
|
37
|
+
style_id = style.lower()
|
38
|
+
title = style.replace('_', ' ').title()
|
39
|
+
self.window.ui.menu['theme_style'][style_id] = QAction(title, self.window, checkable=True)
|
40
|
+
self.window.ui.menu['theme_style'][style_id].triggered.connect(
|
41
|
+
lambda checked=None, style=style_id: self.window.controller.theme.toggle_style(style))
|
42
|
+
self.window.ui.menu['theme.style'].addAction(self.window.ui.menu['theme_style'][style_id])
|
43
|
+
|
44
|
+
# color themes
|
33
45
|
themes = self.window.controller.theme.common.get_themes_list()
|
34
46
|
for theme in themes:
|
35
47
|
name = self.window.controller.theme.common.translate(theme)
|
@@ -42,6 +54,7 @@ class Menu:
|
|
42
54
|
self.window.ui.menu['theme.dark'].addAction(self.window.ui.menu['theme'][theme])
|
43
55
|
elif theme.startswith('light'):
|
44
56
|
self.window.ui.menu['theme.light'].addAction(self.window.ui.menu['theme'][theme])
|
57
|
+
|
45
58
|
self.loaded = True
|
46
59
|
|
47
60
|
def setup_syntax(self):
|
@@ -86,14 +99,22 @@ class Menu:
|
|
86
99
|
|
87
100
|
def update_list(self):
|
88
101
|
"""Update theme list menu"""
|
89
|
-
|
102
|
+
# styles
|
103
|
+
current_style = self.window.core.config.get('theme.style')
|
104
|
+
for style in self.window.ui.menu['theme_style']:
|
105
|
+
self.window.ui.menu['theme_style'][style].setChecked(False)
|
106
|
+
if current_style in self.window.ui.menu['theme_style']:
|
107
|
+
self.window.ui.menu['theme_style'][current_style].setChecked(True)
|
108
|
+
|
109
|
+
# color themes
|
110
|
+
current_theme = self.window.core.config.get('theme')
|
90
111
|
for theme in self.window.ui.menu['theme']:
|
91
112
|
self.window.ui.menu['theme'][theme].setChecked(False)
|
92
|
-
if
|
93
|
-
self.window.ui.menu['theme'][
|
113
|
+
if current_theme in self.window.ui.menu['theme']:
|
114
|
+
self.window.ui.menu['theme'][current_theme].setChecked(True)
|
94
115
|
|
95
116
|
def update_syntax(self):
|
96
|
-
"""Update syntax menu"""
|
117
|
+
"""Update code syntax highlight menu"""
|
97
118
|
current = self.window.core.config.get('render.code_syntax')
|
98
119
|
for style in self.window.ui.menu['theme_syntax']:
|
99
120
|
self.window.ui.menu['theme_syntax'][style].setChecked(False)
|
@@ -6,9 +6,9 @@
|
|
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
|
from pygpt_net.core.events import RenderEvent
|
13
13
|
|
14
14
|
|
@@ -93,9 +93,6 @@ class Nodes:
|
|
93
93
|
continue
|
94
94
|
self.apply(key, type)
|
95
95
|
|
96
|
-
# self.window.interpreter.update_stylesheet(self.window.controller.theme.style('font.chat.output'))
|
97
|
-
# self.window.ui.nodes['interpreter.input'].update_stylesheet(self.window.controller.theme.style('font.chat.input'))
|
98
|
-
|
99
96
|
# apply to notepads
|
100
97
|
num_notepads = self.window.controller.notepad.get_num_notepads()
|
101
98
|
if num_notepads > 0:
|
@@ -6,10 +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 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
|
+
from typing import Dict, List
|
13
|
+
|
14
|
+
from PySide6.QtGui import QAction, QIcon
|
15
|
+
from PySide6.QtWidgets import QTabWidget, QMenu
|
16
|
+
|
12
17
|
from pygpt_net.core.tabs.tab import Tab
|
18
|
+
from pygpt_net.utils import trans
|
19
|
+
|
13
20
|
|
14
21
|
class Tools:
|
15
22
|
def __init__(self, window=None):
|
@@ -44,7 +51,38 @@ class Tools:
|
|
44
51
|
if idx is not None:
|
45
52
|
self.window.controller.ui.tabs.switch_tab_by_idx(idx)
|
46
53
|
|
47
|
-
def
|
54
|
+
def append_tab_menu(
|
55
|
+
self,
|
56
|
+
parent: QTabWidget,
|
57
|
+
menu: QMenu,
|
58
|
+
idx: int,
|
59
|
+
column_idx: int
|
60
|
+
) -> QMenu:
|
61
|
+
"""
|
62
|
+
Append tab menu
|
63
|
+
|
64
|
+
:param parent: parent widget
|
65
|
+
:param menu: menu
|
66
|
+
:param idx: tab index
|
67
|
+
:param column_idx: column index
|
68
|
+
:return: tab add submenu
|
69
|
+
"""
|
70
|
+
submenu = menu.addMenu(QIcon(":/icons/add.svg"), trans("action.tab.add.tool"))
|
71
|
+
tools = self.window.tools.get_all()
|
72
|
+
for id in tools:
|
73
|
+
tool = tools[id]
|
74
|
+
if not tool.has_tab:
|
75
|
+
continue
|
76
|
+
icon = tool.tab_icon
|
77
|
+
title = trans(tool.tab_title)
|
78
|
+
action = QAction(QIcon(icon), title, parent)
|
79
|
+
action.triggered.connect(
|
80
|
+
lambda idx=idx, column_idx=column_idx, id=id: parent.add_tab(idx, column_idx, Tab.TAB_TOOL, id)
|
81
|
+
)
|
82
|
+
submenu.addAction(action)
|
83
|
+
return submenu
|
84
|
+
|
85
|
+
def get_tab_tools(self) -> Dict[str, List[str]]:
|
48
86
|
"""
|
49
87
|
Get tab tools
|
50
88
|
|
@@ -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 Optional
|
13
|
+
|
12
14
|
from PySide6.QtGui import QColor
|
13
15
|
|
14
16
|
from pygpt_net.utils import trans
|
@@ -47,10 +49,6 @@ class UI:
|
|
47
49
|
self.update()
|
48
50
|
self.init_toolbox()
|
49
51
|
|
50
|
-
def pre_setup(self):
|
51
|
-
"""Post setup UI"""
|
52
|
-
self.tabs.setup()
|
53
|
-
|
54
52
|
def update(self):
|
55
53
|
"""Update all elements"""
|
56
54
|
|
@@ -149,7 +147,7 @@ class UI:
|
|
149
147
|
model_str = str(model)
|
150
148
|
self.window.ui.nodes['chat.model'].setText(model_str)
|
151
149
|
|
152
|
-
def update_ctx_label(self, label: str = None):
|
150
|
+
def update_ctx_label(self, label: Optional[str] = None):
|
153
151
|
"""
|
154
152
|
Update ctx label
|
155
153
|
|