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,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, List
|
13
|
+
|
12
14
|
from PySide6.QtCore import Slot, QTimer
|
13
15
|
|
14
16
|
from pygpt_net.core.events import RenderEvent
|
@@ -16,6 +18,7 @@ from pygpt_net.core.render.base import BaseRenderer
|
|
16
18
|
from pygpt_net.core.render.markdown.renderer import Renderer as MarkdownRenderer
|
17
19
|
from pygpt_net.core.render.plain.renderer import Renderer as PlainTextRenderer
|
18
20
|
from pygpt_net.core.render.web.renderer import Renderer as WebRenderer
|
21
|
+
from pygpt_net.core.tabs.tab import Tab
|
19
22
|
from pygpt_net.core.text.utils import output_html2text, output_clean_html
|
20
23
|
from pygpt_net.item.ctx import CtxItem, CtxMeta
|
21
24
|
|
@@ -67,6 +70,7 @@ class Render:
|
|
67
70
|
append = data.get("append", False)
|
68
71
|
footer = data.get("footer", False)
|
69
72
|
initialized = data.get("initialized", False)
|
73
|
+
tab = data.get("tab")
|
70
74
|
|
71
75
|
if name == RenderEvent.BEGIN:
|
72
76
|
self.begin(meta, ctx, stream)
|
@@ -87,7 +91,7 @@ class Render:
|
|
87
91
|
self.stream_end(meta, ctx)
|
88
92
|
|
89
93
|
elif name == RenderEvent.ON_PAGE_LOAD:
|
90
|
-
self.on_page_loaded(meta)
|
94
|
+
self.on_page_loaded(meta, tab)
|
91
95
|
elif name ==RenderEvent.ON_THEME_CHANGE:
|
92
96
|
self.on_theme_change()
|
93
97
|
elif name == RenderEvent.ON_LOAD:
|
@@ -148,7 +152,12 @@ class Render:
|
|
148
152
|
"""
|
149
153
|
return self.instance().get_pid(meta)
|
150
154
|
|
151
|
-
def begin(
|
155
|
+
def begin(
|
156
|
+
self,
|
157
|
+
meta: CtxMeta,
|
158
|
+
ctx: CtxItem,
|
159
|
+
stream: bool = False
|
160
|
+
):
|
152
161
|
"""
|
153
162
|
Render begin
|
154
163
|
|
@@ -159,7 +168,12 @@ class Render:
|
|
159
168
|
self.instance().begin(meta, ctx, stream)
|
160
169
|
self.update()
|
161
170
|
|
162
|
-
def end(
|
171
|
+
def end(
|
172
|
+
self,
|
173
|
+
meta: CtxMeta,
|
174
|
+
ctx: CtxItem,
|
175
|
+
stream: bool = False
|
176
|
+
):
|
163
177
|
"""
|
164
178
|
Render end
|
165
179
|
|
@@ -170,7 +184,12 @@ class Render:
|
|
170
184
|
self.instance().end(meta, ctx, stream)
|
171
185
|
self.update()
|
172
186
|
|
173
|
-
def end_extra(
|
187
|
+
def end_extra(
|
188
|
+
self,
|
189
|
+
meta: CtxMeta,
|
190
|
+
ctx: CtxItem,
|
191
|
+
stream: bool = False
|
192
|
+
):
|
174
193
|
"""
|
175
194
|
Render end extra
|
176
195
|
|
@@ -181,7 +200,11 @@ class Render:
|
|
181
200
|
self.instance().end_extra(meta, ctx, stream)
|
182
201
|
self.update()
|
183
202
|
|
184
|
-
def stream_begin(
|
203
|
+
def stream_begin(
|
204
|
+
self,
|
205
|
+
meta: CtxMeta,
|
206
|
+
ctx: CtxItem
|
207
|
+
):
|
185
208
|
"""
|
186
209
|
Render stream begin
|
187
210
|
|
@@ -191,7 +214,11 @@ class Render:
|
|
191
214
|
self.instance().stream_begin(meta, ctx)
|
192
215
|
self.update()
|
193
216
|
|
194
|
-
def stream_end(
|
217
|
+
def stream_end(
|
218
|
+
self,
|
219
|
+
meta: CtxMeta,
|
220
|
+
ctx: CtxItem
|
221
|
+
):
|
195
222
|
"""
|
196
223
|
Render stream end
|
197
224
|
|
@@ -201,7 +228,10 @@ class Render:
|
|
201
228
|
self.instance().stream_end(meta, ctx)
|
202
229
|
self.update()
|
203
230
|
|
204
|
-
def clear_output(
|
231
|
+
def clear_output(
|
232
|
+
self,
|
233
|
+
meta: Optional[CtxMeta] = None
|
234
|
+
):
|
205
235
|
"""
|
206
236
|
Clear current active output
|
207
237
|
|
@@ -214,7 +244,10 @@ class Render:
|
|
214
244
|
"""Clear input"""
|
215
245
|
self.instance().clear_input()
|
216
246
|
|
217
|
-
def on_load(
|
247
|
+
def on_load(
|
248
|
+
self,
|
249
|
+
meta: Optional[CtxMeta] = None
|
250
|
+
):
|
218
251
|
"""
|
219
252
|
On load (meta)
|
220
253
|
|
@@ -224,7 +257,10 @@ class Render:
|
|
224
257
|
self.update()
|
225
258
|
self.window.controller.ui.tabs.update_tooltip(meta.name) # update tab tooltip
|
226
259
|
|
227
|
-
def reset(
|
260
|
+
def reset(
|
261
|
+
self,
|
262
|
+
meta: Optional[CtxMeta] = None
|
263
|
+
):
|
228
264
|
"""
|
229
265
|
Reset current meta
|
230
266
|
|
@@ -238,7 +274,12 @@ class Render:
|
|
238
274
|
self.instance().reload() # TODO: or all outputs?
|
239
275
|
self.update()
|
240
276
|
|
241
|
-
def append_context(
|
277
|
+
def append_context(
|
278
|
+
self,
|
279
|
+
meta: CtxMeta,
|
280
|
+
items: List[CtxItem],
|
281
|
+
clear: bool = True
|
282
|
+
):
|
242
283
|
"""
|
243
284
|
Append all context to output
|
244
285
|
|
@@ -249,7 +290,13 @@ class Render:
|
|
249
290
|
self.instance().append_context(meta, items, clear)
|
250
291
|
self.update()
|
251
292
|
|
252
|
-
def append_input(
|
293
|
+
def append_input(
|
294
|
+
self,
|
295
|
+
meta: CtxMeta,
|
296
|
+
ctx: CtxItem,
|
297
|
+
flush: bool = True,
|
298
|
+
append: bool = False
|
299
|
+
):
|
253
300
|
"""
|
254
301
|
Append text input to output
|
255
302
|
|
@@ -261,7 +308,11 @@ class Render:
|
|
261
308
|
self.instance().append_input(meta, ctx, flush=flush, append=append)
|
262
309
|
self.update()
|
263
310
|
|
264
|
-
def append_output(
|
311
|
+
def append_output(
|
312
|
+
self,
|
313
|
+
meta: CtxMeta,
|
314
|
+
ctx: CtxItem
|
315
|
+
):
|
265
316
|
"""
|
266
317
|
Append text output to output
|
267
318
|
|
@@ -271,7 +322,12 @@ class Render:
|
|
271
322
|
self.instance().append_output(meta, ctx)
|
272
323
|
self.update()
|
273
324
|
|
274
|
-
def append_extra(
|
325
|
+
def append_extra(
|
326
|
+
self,
|
327
|
+
meta: CtxMeta,
|
328
|
+
ctx: CtxItem,
|
329
|
+
footer: bool = False
|
330
|
+
):
|
275
331
|
"""
|
276
332
|
Append extra data (images, files, etc.) to output
|
277
333
|
|
@@ -282,7 +338,13 @@ class Render:
|
|
282
338
|
self.instance().append_extra(meta, ctx, footer)
|
283
339
|
self.update()
|
284
340
|
|
285
|
-
def append_chunk(
|
341
|
+
def append_chunk(
|
342
|
+
self,
|
343
|
+
meta: CtxMeta,
|
344
|
+
ctx: CtxItem,
|
345
|
+
text_chunk: str,
|
346
|
+
begin: bool = False
|
347
|
+
):
|
286
348
|
"""
|
287
349
|
Append output stream chunk to output
|
288
350
|
|
@@ -375,13 +437,18 @@ class Render:
|
|
375
437
|
self.instance().on_reply_submit(ctx)
|
376
438
|
self.update()
|
377
439
|
|
378
|
-
def on_page_loaded(
|
440
|
+
def on_page_loaded(
|
441
|
+
self,
|
442
|
+
meta: CtxMeta,
|
443
|
+
tab: Optional[Tab] = None
|
444
|
+
):
|
379
445
|
"""
|
380
446
|
On page loaded callback
|
381
447
|
|
382
448
|
:param meta: context meta
|
449
|
+
:param tab: Tab
|
383
450
|
"""
|
384
|
-
self.instance().on_page_loaded(meta)
|
451
|
+
self.instance().on_page_loaded(meta, tab)
|
385
452
|
self.update()
|
386
453
|
|
387
454
|
def on_theme_change(self):
|
@@ -428,7 +495,11 @@ class Render:
|
|
428
495
|
self.instance().clear_all()
|
429
496
|
self.update()
|
430
497
|
|
431
|
-
def tool_output_append(
|
498
|
+
def tool_output_append(
|
499
|
+
self,
|
500
|
+
meta: CtxMeta,
|
501
|
+
content: str
|
502
|
+
):
|
432
503
|
"""
|
433
504
|
Add tool output (append)
|
434
505
|
|
@@ -438,7 +509,11 @@ class Render:
|
|
438
509
|
self.instance().tool_output_append(meta, content)
|
439
510
|
self.update()
|
440
511
|
|
441
|
-
def tool_output_update(
|
512
|
+
def tool_output_update(
|
513
|
+
self,
|
514
|
+
meta: CtxMeta,
|
515
|
+
content: str
|
516
|
+
):
|
442
517
|
"""
|
443
518
|
Replace tool output
|
444
519
|
|
@@ -491,7 +566,7 @@ class Render:
|
|
491
566
|
if plain:
|
492
567
|
self.window.controller.theme.markdown.clear()
|
493
568
|
for pid in self.window.ui.nodes['output_plain']:
|
494
|
-
if self.window.ui.nodes['
|
569
|
+
if self.window.ui.nodes['output_plain'][pid] is not None:
|
495
570
|
self.window.ui.nodes['output'][pid].setVisible(False)
|
496
571
|
self.window.ui.nodes['output_plain'][pid].setVisible(True)
|
497
572
|
else:
|
@@ -518,7 +593,11 @@ class Render:
|
|
518
593
|
return self.markdown_renderer
|
519
594
|
|
520
595
|
@Slot(str, str)
|
521
|
-
def handle_save_as(
|
596
|
+
def handle_save_as(
|
597
|
+
self,
|
598
|
+
text: str,
|
599
|
+
type: str = 'txt'
|
600
|
+
):
|
522
601
|
"""
|
523
602
|
Handle save as signal # TODO: move to another class
|
524
603
|
|
@@ -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 Dict, Any
|
13
|
+
|
12
14
|
from pygpt_net.core.types import (
|
13
15
|
MODE_AGENT_LLAMA,
|
14
16
|
MODE_ASSISTANT,
|
@@ -29,7 +31,12 @@ class Response:
|
|
29
31
|
super(Response, self).__init__()
|
30
32
|
self.window = window
|
31
33
|
|
32
|
-
def handle(
|
34
|
+
def handle(
|
35
|
+
self,
|
36
|
+
context: BridgeContext,
|
37
|
+
extra: Dict[str, Any],
|
38
|
+
status: bool
|
39
|
+
):
|
33
40
|
"""
|
34
41
|
Handle Bridge success
|
35
42
|
|
@@ -92,7 +99,11 @@ class Response:
|
|
92
99
|
self.window.controller.chat.output.post_handle(ctx, mode, stream, reply, internal)
|
93
100
|
self.window.controller.chat.output.handle_end(ctx, mode) # handle end.
|
94
101
|
|
95
|
-
def begin(
|
102
|
+
def begin(
|
103
|
+
self,
|
104
|
+
context: BridgeContext,
|
105
|
+
extra: Dict[str, Any]
|
106
|
+
):
|
96
107
|
"""
|
97
108
|
Handle Bridge begin
|
98
109
|
|
@@ -104,7 +115,11 @@ class Response:
|
|
104
115
|
if msg:
|
105
116
|
self.window.update_status(msg)
|
106
117
|
|
107
|
-
def append(
|
118
|
+
def append(
|
119
|
+
self,
|
120
|
+
context: BridgeContext,
|
121
|
+
extra: Dict[str, Any]
|
122
|
+
):
|
108
123
|
"""
|
109
124
|
Handle Bridge append (agent mode)
|
110
125
|
|
@@ -204,7 +219,11 @@ class Response:
|
|
204
219
|
if ctx.extra is not None and (type(ctx.extra) == dict and "agent_finish" in ctx.extra):
|
205
220
|
self.window.controller.agent.llama.on_finish(ctx) # evaluate response and continue if needed
|
206
221
|
|
207
|
-
def end(
|
222
|
+
def end(
|
223
|
+
self,
|
224
|
+
context: BridgeContext,
|
225
|
+
extra: Dict[str, Any]
|
226
|
+
):
|
208
227
|
"""
|
209
228
|
Handle Bridge end
|
210
229
|
|
@@ -223,7 +242,11 @@ class Response:
|
|
223
242
|
"id": "chat",
|
224
243
|
}))
|
225
244
|
|
226
|
-
def failed(
|
245
|
+
def failed(
|
246
|
+
self,
|
247
|
+
context: BridgeContext,
|
248
|
+
extra: Dict[str, Any]
|
249
|
+
):
|
227
250
|
"""
|
228
251
|
Handle Bridge failed
|
229
252
|
|
@@ -240,7 +263,11 @@ class Response:
|
|
240
263
|
"id": "chat",
|
241
264
|
}))
|
242
265
|
|
243
|
-
def update_status(
|
266
|
+
def update_status(
|
267
|
+
self,
|
268
|
+
context: BridgeContext,
|
269
|
+
extra: Dict[str, Any]
|
270
|
+
):
|
244
271
|
"""
|
245
272
|
Handle Bridge evaluate
|
246
273
|
|
@@ -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.QtWidgets import QApplication
|
13
15
|
|
14
16
|
from pygpt_net.core.events import RenderEvent
|
@@ -175,7 +177,7 @@ class Stream:
|
|
175
177
|
# log
|
176
178
|
self.log("[chat] Stream end.")
|
177
179
|
|
178
|
-
def log(self, data:
|
180
|
+
def log(self, data: Any):
|
179
181
|
"""
|
180
182
|
Log data to debug
|
181
183
|
|
@@ -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 pygpt_net.core.types import (
|
13
15
|
MODE_AGENT,
|
14
16
|
MODE_AGENT_LLAMA,
|
@@ -37,9 +39,9 @@ class Text:
|
|
37
39
|
text: str,
|
38
40
|
reply: bool = False,
|
39
41
|
internal: bool = False,
|
40
|
-
prev_ctx: CtxItem = None,
|
41
|
-
parent_id: str = None,
|
42
|
-
multimodal_ctx: MultimodalContext = None,
|
42
|
+
prev_ctx: Optional[CtxItem] = None,
|
43
|
+
parent_id: Optional[str] = None,
|
44
|
+
multimodal_ctx: Optional[MultimodalContext] = None,
|
43
45
|
) -> CtxItem:
|
44
46
|
"""
|
45
47
|
Send text message
|
pygpt_net/controller/command.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 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import json
|
@@ -27,7 +27,10 @@ class Command:
|
|
27
27
|
"""
|
28
28
|
self.window = window
|
29
29
|
self.stop = False
|
30
|
-
self.flush_events = [
|
30
|
+
self.flush_events = [
|
31
|
+
Event.CMD_EXECUTE,
|
32
|
+
Event.CMD_INLINE,
|
33
|
+
]
|
31
34
|
|
32
35
|
def dispatch(self, event: Event, all: bool = False):
|
33
36
|
"""
|
@@ -88,7 +91,12 @@ class Command:
|
|
88
91
|
worker.kwargs['finished_signal'] = worker.signals.finished
|
89
92
|
self.window.threadpool.start(worker)
|
90
93
|
|
91
|
-
def worker(
|
94
|
+
def worker(
|
95
|
+
self,
|
96
|
+
event: Event,
|
97
|
+
window,
|
98
|
+
finished_signal: Signal
|
99
|
+
):
|
92
100
|
"""
|
93
101
|
Command worker callback
|
94
102
|
|
@@ -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 Any, Dict
|
13
|
+
|
12
14
|
from .field.checkbox import Checkbox
|
13
15
|
from .field.combo import Combo
|
14
16
|
from .field.cmd import Cmd
|
@@ -36,7 +38,11 @@ class Config:
|
|
36
38
|
self.slider = Slider(window)
|
37
39
|
self.textarea = Textarea(window)
|
38
40
|
|
39
|
-
def load_options(
|
41
|
+
def load_options(
|
42
|
+
self,
|
43
|
+
parent_id: str,
|
44
|
+
options: Dict[str, Dict[str, Any]]
|
45
|
+
):
|
40
46
|
"""
|
41
47
|
Load options
|
42
48
|
|
@@ -47,7 +53,12 @@ class Config:
|
|
47
53
|
option = options[key]
|
48
54
|
self.apply(parent_id, key, option)
|
49
55
|
|
50
|
-
def apply(
|
56
|
+
def apply(
|
57
|
+
self,
|
58
|
+
parent_id: str,
|
59
|
+
key: str,
|
60
|
+
option: Dict[str, Any]
|
61
|
+
):
|
51
62
|
"""
|
52
63
|
Apply option to field handler based on type
|
53
64
|
|
@@ -73,7 +84,13 @@ class Config:
|
|
73
84
|
elif option['type'] == 'cmd':
|
74
85
|
self.cmd.apply(parent_id, key, option)
|
75
86
|
|
76
|
-
def apply_value(
|
87
|
+
def apply_value(
|
88
|
+
self,
|
89
|
+
parent_id: str,
|
90
|
+
key: str,
|
91
|
+
option: Dict[str, Any],
|
92
|
+
value: Any
|
93
|
+
):
|
77
94
|
"""
|
78
95
|
Apply value to option
|
79
96
|
|
@@ -85,7 +102,13 @@ class Config:
|
|
85
102
|
option['value'] = value
|
86
103
|
self.apply(parent_id, key, option)
|
87
104
|
|
88
|
-
def get_value(
|
105
|
+
def get_value(
|
106
|
+
self,
|
107
|
+
parent_id: str,
|
108
|
+
key: str,
|
109
|
+
option: Dict[str, Any],
|
110
|
+
idx: bool = False
|
111
|
+
) -> Any:
|
89
112
|
"""
|
90
113
|
Get value from field handler based on type
|
91
114
|
|
@@ -113,7 +136,12 @@ class Config:
|
|
113
136
|
elif option['type'] == 'cmd':
|
114
137
|
return self.cmd.get_value(parent_id, key, option)
|
115
138
|
|
116
|
-
def update_combo(
|
139
|
+
def update_combo(
|
140
|
+
self,
|
141
|
+
parent_id: str,
|
142
|
+
key: str,
|
143
|
+
items: Dict[str, str]
|
144
|
+
):
|
117
145
|
"""
|
118
146
|
Update combo items
|
119
147
|
|
@@ -6,9 +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 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
|
+
from typing import Any, Dict
|
13
|
+
|
14
|
+
|
12
15
|
class Checkbox:
|
13
16
|
def __init__(self, window=None):
|
14
17
|
"""
|
@@ -22,7 +25,7 @@ class Checkbox:
|
|
22
25
|
self,
|
23
26
|
parent_id: str,
|
24
27
|
key: str,
|
25
|
-
option:
|
28
|
+
option: Dict[str, Any]
|
26
29
|
):
|
27
30
|
"""
|
28
31
|
Apply value to checkbox
|
@@ -42,7 +45,7 @@ class Checkbox:
|
|
42
45
|
parent_id: str,
|
43
46
|
key: str,
|
44
47
|
option: dict,
|
45
|
-
value:
|
48
|
+
value: Any,
|
46
49
|
hooks: bool = True
|
47
50
|
):
|
48
51
|
"""
|
@@ -68,7 +71,7 @@ class Checkbox:
|
|
68
71
|
self,
|
69
72
|
parent_id: str,
|
70
73
|
key: str,
|
71
|
-
option:
|
74
|
+
option: Dict[str, Any]
|
72
75
|
) -> bool:
|
73
76
|
"""
|
74
77
|
Get checkbox value
|
@@ -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 Dict, Any
|
13
|
+
|
12
14
|
from pygpt_net.utils import trans
|
13
15
|
|
14
16
|
|
@@ -25,7 +27,7 @@ class Cmd:
|
|
25
27
|
self,
|
26
28
|
parent_id: str,
|
27
29
|
key: str,
|
28
|
-
option:
|
30
|
+
option: Dict[str, Any]
|
29
31
|
):
|
30
32
|
"""
|
31
33
|
Apply values to command fields
|
@@ -57,7 +59,7 @@ class Cmd:
|
|
57
59
|
self,
|
58
60
|
parent_id: str,
|
59
61
|
key: str,
|
60
|
-
values:
|
62
|
+
values: Dict[str, Any],
|
61
63
|
idx: int
|
62
64
|
):
|
63
65
|
"""
|
@@ -77,7 +79,7 @@ class Cmd:
|
|
77
79
|
self,
|
78
80
|
parent_id: str,
|
79
81
|
key: str,
|
80
|
-
option:
|
82
|
+
option: Dict[str, Any]
|
81
83
|
) -> dict:
|
82
84
|
"""
|
83
85
|
Get command values
|
@@ -97,7 +99,7 @@ class Cmd:
|
|
97
99
|
def to_options(
|
98
100
|
self,
|
99
101
|
parent_id: str,
|
100
|
-
option:
|
102
|
+
option: Dict[str, Any]
|
101
103
|
) -> dict:
|
102
104
|
"""
|
103
105
|
Convert dictionary items option to options
|
@@ -6,9 +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 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
|
+
from typing import Any, Dict
|
13
|
+
|
14
|
+
|
12
15
|
class Combo:
|
13
16
|
def __init__(self, window=None):
|
14
17
|
"""
|
@@ -22,7 +25,7 @@ class Combo:
|
|
22
25
|
self,
|
23
26
|
parent_id: str,
|
24
27
|
key: str,
|
25
|
-
option:
|
28
|
+
option: Dict[str, Any]
|
26
29
|
):
|
27
30
|
"""
|
28
31
|
Apply value to combobox
|
@@ -44,8 +47,8 @@ class Combo:
|
|
44
47
|
self,
|
45
48
|
parent_id: str,
|
46
49
|
key: str,
|
47
|
-
option:
|
48
|
-
value:
|
50
|
+
option: Dict[str, Any],
|
51
|
+
value: Any,
|
49
52
|
hooks: bool = True
|
50
53
|
):
|
51
54
|
"""
|
@@ -71,7 +74,7 @@ class Combo:
|
|
71
74
|
self,
|
72
75
|
parent_id: str,
|
73
76
|
key: str,
|
74
|
-
option:
|
77
|
+
option: Dict[str, Any],
|
75
78
|
idx: bool = False
|
76
79
|
) -> str or int:
|
77
80
|
"""
|
@@ -88,7 +91,12 @@ class Combo:
|
|
88
91
|
else:
|
89
92
|
return self.window.ui.config[parent_id][key].combo.currentData()
|
90
93
|
|
91
|
-
def update_list(
|
94
|
+
def update_list(
|
95
|
+
self,
|
96
|
+
parent_id: str,
|
97
|
+
key: str,
|
98
|
+
items: Dict[str, str]
|
99
|
+
):
|
92
100
|
"""
|
93
101
|
Update combobox items
|
94
102
|
|