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
pygpt_net/core/render/base.py
CHANGED
@@ -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 Optional, List
|
13
|
+
|
14
|
+
from pygpt_net.core.tabs.tab import Tab
|
12
15
|
from pygpt_net.item.ctx import CtxItem, CtxMeta
|
13
16
|
|
14
17
|
|
@@ -20,6 +23,15 @@ class BaseRenderer:
|
|
20
23
|
:param window: Window instance
|
21
24
|
"""
|
22
25
|
self.window = window
|
26
|
+
self.tab = None
|
27
|
+
|
28
|
+
def set_tab(self, tab: Tab):
|
29
|
+
"""
|
30
|
+
Append tab
|
31
|
+
|
32
|
+
:param tab: Tab
|
33
|
+
"""
|
34
|
+
self.tab = tab
|
23
35
|
|
24
36
|
def prepare(self):
|
25
37
|
"""
|
@@ -43,7 +55,12 @@ class BaseRenderer:
|
|
43
55
|
"""
|
44
56
|
return self.window.core.config.get("stream")
|
45
57
|
|
46
|
-
def begin(
|
58
|
+
def begin(
|
59
|
+
self,
|
60
|
+
meta: CtxMeta,
|
61
|
+
ctx: CtxItem,
|
62
|
+
stream: bool = False
|
63
|
+
):
|
47
64
|
"""
|
48
65
|
Render begin
|
49
66
|
|
@@ -53,7 +70,12 @@ class BaseRenderer:
|
|
53
70
|
"""
|
54
71
|
pass
|
55
72
|
|
56
|
-
def end(
|
73
|
+
def end(
|
74
|
+
self,
|
75
|
+
meta: CtxMeta,
|
76
|
+
ctx: CtxItem,
|
77
|
+
stream: bool = False
|
78
|
+
):
|
57
79
|
"""
|
58
80
|
Render end
|
59
81
|
|
@@ -63,7 +85,12 @@ class BaseRenderer:
|
|
63
85
|
"""
|
64
86
|
pass
|
65
87
|
|
66
|
-
def end_extra(
|
88
|
+
def end_extra(
|
89
|
+
self,
|
90
|
+
meta: CtxMeta,
|
91
|
+
ctx: CtxItem,
|
92
|
+
stream: bool = False
|
93
|
+
):
|
67
94
|
"""
|
68
95
|
Render end extra
|
69
96
|
|
@@ -73,7 +100,11 @@ class BaseRenderer:
|
|
73
100
|
"""
|
74
101
|
pass
|
75
102
|
|
76
|
-
def stream_begin(
|
103
|
+
def stream_begin(
|
104
|
+
self,
|
105
|
+
meta: CtxMeta,
|
106
|
+
ctx: CtxItem
|
107
|
+
):
|
77
108
|
"""
|
78
109
|
Render stream begin
|
79
110
|
|
@@ -82,7 +113,11 @@ class BaseRenderer:
|
|
82
113
|
"""
|
83
114
|
pass # do nothing
|
84
115
|
|
85
|
-
def stream_end(
|
116
|
+
def stream_end(
|
117
|
+
self,
|
118
|
+
meta: CtxMeta,
|
119
|
+
ctx: CtxItem
|
120
|
+
):
|
86
121
|
"""
|
87
122
|
Render stream end
|
88
123
|
|
@@ -91,7 +126,10 @@ class BaseRenderer:
|
|
91
126
|
"""
|
92
127
|
pass # do nothing
|
93
128
|
|
94
|
-
def clear_output(
|
129
|
+
def clear_output(
|
130
|
+
self,
|
131
|
+
meta: Optional[CtxMeta] = None
|
132
|
+
):
|
95
133
|
"""
|
96
134
|
Clear output
|
97
135
|
|
@@ -115,7 +153,12 @@ class BaseRenderer:
|
|
115
153
|
"""Reload all outputs, called externally only on theme change to redraw content"""
|
116
154
|
pass
|
117
155
|
|
118
|
-
def append_context(
|
156
|
+
def append_context(
|
157
|
+
self,
|
158
|
+
meta: CtxMeta,
|
159
|
+
items: List[CtxItem],
|
160
|
+
clear: bool = True
|
161
|
+
):
|
119
162
|
"""
|
120
163
|
Append all context to output
|
121
164
|
|
@@ -125,7 +168,13 @@ class BaseRenderer:
|
|
125
168
|
"""
|
126
169
|
pass
|
127
170
|
|
128
|
-
def append_input(
|
171
|
+
def append_input(
|
172
|
+
self,
|
173
|
+
meta: CtxMeta,
|
174
|
+
ctx: CtxItem,
|
175
|
+
flush: bool = True,
|
176
|
+
append: bool = False
|
177
|
+
):
|
129
178
|
"""
|
130
179
|
Append text input to output
|
131
180
|
|
@@ -136,7 +185,11 @@ class BaseRenderer:
|
|
136
185
|
"""
|
137
186
|
pass
|
138
187
|
|
139
|
-
def append_output(
|
188
|
+
def append_output(
|
189
|
+
self,
|
190
|
+
meta: CtxMeta,
|
191
|
+
ctx: CtxItem
|
192
|
+
):
|
140
193
|
"""
|
141
194
|
Append text output to output
|
142
195
|
|
@@ -145,7 +198,12 @@ class BaseRenderer:
|
|
145
198
|
"""
|
146
199
|
pass
|
147
200
|
|
148
|
-
def append_extra(
|
201
|
+
def append_extra(
|
202
|
+
self,
|
203
|
+
meta: CtxMeta,
|
204
|
+
ctx: CtxItem,
|
205
|
+
footer: bool = False
|
206
|
+
):
|
149
207
|
"""
|
150
208
|
Append extra data (images, files, etc.) to output
|
151
209
|
|
@@ -155,7 +213,13 @@ class BaseRenderer:
|
|
155
213
|
"""
|
156
214
|
pass
|
157
215
|
|
158
|
-
def append_chunk(
|
216
|
+
def append_chunk(
|
217
|
+
self,
|
218
|
+
meta: CtxMeta,
|
219
|
+
ctx: CtxItem,
|
220
|
+
text_chunk: str,
|
221
|
+
begin: bool = False
|
222
|
+
):
|
159
223
|
"""
|
160
224
|
Append output chunk to output
|
161
225
|
|
@@ -218,15 +282,22 @@ class BaseRenderer:
|
|
218
282
|
"""
|
219
283
|
pass
|
220
284
|
|
221
|
-
def on_page_loaded(
|
285
|
+
def on_page_loaded(
|
286
|
+
self,
|
287
|
+
meta: Optional[CtxMeta] = None,
|
288
|
+
tab: Optional[Tab] = None):
|
222
289
|
"""
|
223
290
|
On page loaded callback
|
224
291
|
|
225
292
|
:param meta: context meta
|
293
|
+
:param tab: Tab
|
226
294
|
"""
|
227
|
-
|
295
|
+
self.tab = tab
|
228
296
|
|
229
|
-
def on_enable_edit(
|
297
|
+
def on_enable_edit(
|
298
|
+
self,
|
299
|
+
live: bool = True
|
300
|
+
):
|
230
301
|
"""
|
231
302
|
On enable edit icons
|
232
303
|
|
@@ -235,7 +306,10 @@ class BaseRenderer:
|
|
235
306
|
if live: # default behavior
|
236
307
|
self.window.controller.ctx.refresh()
|
237
308
|
|
238
|
-
def on_disable_edit(
|
309
|
+
def on_disable_edit(
|
310
|
+
self,
|
311
|
+
live: bool = True
|
312
|
+
):
|
239
313
|
"""
|
240
314
|
On disable edit icons
|
241
315
|
|
@@ -244,7 +318,10 @@ class BaseRenderer:
|
|
244
318
|
if live: # default behavior
|
245
319
|
self.window.controller.ctx.refresh()
|
246
320
|
|
247
|
-
def on_enable_timestamp(
|
321
|
+
def on_enable_timestamp(
|
322
|
+
self,
|
323
|
+
live: bool = True
|
324
|
+
):
|
248
325
|
"""
|
249
326
|
On enable timestamp
|
250
327
|
|
@@ -253,7 +330,10 @@ class BaseRenderer:
|
|
253
330
|
if live: # default behavior
|
254
331
|
self.window.controller.ctx.refresh()
|
255
332
|
|
256
|
-
def on_disable_timestamp(
|
333
|
+
def on_disable_timestamp(
|
334
|
+
self,
|
335
|
+
live: bool = True
|
336
|
+
):
|
257
337
|
"""
|
258
338
|
On disable timestamp
|
259
339
|
|
@@ -282,7 +362,12 @@ class BaseRenderer:
|
|
282
362
|
"""
|
283
363
|
pass
|
284
364
|
|
285
|
-
def tool_output_append(
|
365
|
+
def tool_output_append(
|
366
|
+
self,
|
367
|
+
meta:
|
368
|
+
CtxMeta,
|
369
|
+
content: str
|
370
|
+
):
|
286
371
|
"""
|
287
372
|
Add tool output (append)
|
288
373
|
|
@@ -291,7 +376,11 @@ class BaseRenderer:
|
|
291
376
|
"""
|
292
377
|
pass
|
293
378
|
|
294
|
-
def tool_output_update(
|
379
|
+
def tool_output_update(
|
380
|
+
self,
|
381
|
+
meta: CtxMeta,
|
382
|
+
content: str
|
383
|
+
):
|
295
384
|
"""
|
296
385
|
Replace tool output
|
297
386
|
|
@@ -300,7 +389,10 @@ class BaseRenderer:
|
|
300
389
|
"""
|
301
390
|
pass
|
302
391
|
|
303
|
-
def tool_output_clear(
|
392
|
+
def tool_output_clear(
|
393
|
+
self,
|
394
|
+
meta: CtxMeta
|
395
|
+
):
|
304
396
|
"""
|
305
397
|
Clear tool output
|
306
398
|
|
@@ -308,7 +400,10 @@ class BaseRenderer:
|
|
308
400
|
"""
|
309
401
|
pass
|
310
402
|
|
311
|
-
def tool_output_begin(
|
403
|
+
def tool_output_begin(
|
404
|
+
self,
|
405
|
+
meta: CtxMeta
|
406
|
+
):
|
312
407
|
"""
|
313
408
|
Begin tool output
|
314
409
|
|
@@ -6,10 +6,11 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.14 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import os
|
13
|
+
from typing import Optional, List, Dict
|
13
14
|
|
14
15
|
from pygpt_net.item.ctx import CtxItem
|
15
16
|
from pygpt_net.utils import trans
|
@@ -26,7 +27,12 @@ class Body:
|
|
26
27
|
self.window = window
|
27
28
|
self.img_width = 400
|
28
29
|
|
29
|
-
def get_image_html(
|
30
|
+
def get_image_html(
|
31
|
+
self,
|
32
|
+
url: str,
|
33
|
+
num: Optional[int] = None,
|
34
|
+
num_all: Optional[int] = None
|
35
|
+
) -> str:
|
30
36
|
"""
|
31
37
|
Get image HTML
|
32
38
|
|
@@ -47,7 +53,12 @@ class Body:
|
|
47
53
|
img_width=self.img_width,
|
48
54
|
num=num_str)
|
49
55
|
|
50
|
-
def get_url_html(
|
56
|
+
def get_url_html(
|
57
|
+
self,
|
58
|
+
url: str,
|
59
|
+
num: Optional[int] = None,
|
60
|
+
num_all: Optional[int] = None
|
61
|
+
) -> str:
|
51
62
|
"""
|
52
63
|
Get URL HTML
|
53
64
|
|
@@ -64,7 +75,7 @@ class Body:
|
|
64
75
|
url=url,
|
65
76
|
num=num_str)
|
66
77
|
|
67
|
-
def get_docs_html(self, docs:
|
78
|
+
def get_docs_html(self, docs: List[Dict]) -> str:
|
68
79
|
"""
|
69
80
|
Get Llama-index doc metadata HTML
|
70
81
|
|
@@ -100,7 +111,12 @@ class Body:
|
|
100
111
|
html += "</div> "
|
101
112
|
return html
|
102
113
|
|
103
|
-
def get_file_html(
|
114
|
+
def get_file_html(
|
115
|
+
self,
|
116
|
+
url: str,
|
117
|
+
num: Optional[int] = None,
|
118
|
+
num_all: Optional[int] = None
|
119
|
+
) -> str:
|
104
120
|
"""
|
105
121
|
Get file HTML
|
106
122
|
|
@@ -119,7 +135,11 @@ class Body:
|
|
119
135
|
path=path,
|
120
136
|
num=num_str)
|
121
137
|
|
122
|
-
def get_action_icons(
|
138
|
+
def get_action_icons(
|
139
|
+
self,
|
140
|
+
ctx: CtxItem,
|
141
|
+
all: bool = False
|
142
|
+
) -> list:
|
123
143
|
"""
|
124
144
|
Get action icons for context item
|
125
145
|
|
@@ -177,7 +197,7 @@ class Body:
|
|
177
197
|
)
|
178
198
|
return icons
|
179
199
|
|
180
|
-
def get_icon(self, icon: str, title: str = None) -> str:
|
200
|
+
def get_icon(self, icon: str, title: Optional[str] = None) -> str:
|
181
201
|
"""
|
182
202
|
Get icon
|
183
203
|
|
@@ -6,11 +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 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import re
|
13
13
|
from datetime import datetime
|
14
|
+
from typing import Optional, List
|
15
|
+
|
14
16
|
from PySide6.QtGui import QTextCursor, QTextBlockFormat, QTextCharFormat
|
15
17
|
|
16
18
|
from pygpt_net.core.render.base import BaseRenderer
|
@@ -50,6 +52,8 @@ class Renderer(BaseRenderer):
|
|
50
52
|
|
51
53
|
:param meta: context PID
|
52
54
|
"""
|
55
|
+
if self.tab is not None:
|
56
|
+
return self.tab.pid # get PID from tab if exists
|
53
57
|
return self.window.core.ctx.output.get_pid(meta)
|
54
58
|
|
55
59
|
def get_or_create_pid(self, meta: CtxMeta):
|
@@ -74,7 +78,12 @@ class Renderer(BaseRenderer):
|
|
74
78
|
if pid is not None:
|
75
79
|
self.pids[pid] = PidData(pid, meta)
|
76
80
|
|
77
|
-
def begin(
|
81
|
+
def begin(
|
82
|
+
self,
|
83
|
+
meta: CtxMeta,
|
84
|
+
ctx: CtxItem,
|
85
|
+
stream: bool = False
|
86
|
+
):
|
78
87
|
"""
|
79
88
|
Render begin
|
80
89
|
|
@@ -84,7 +93,12 @@ class Renderer(BaseRenderer):
|
|
84
93
|
"""
|
85
94
|
self.parser.reset()
|
86
95
|
|
87
|
-
def end(
|
96
|
+
def end(
|
97
|
+
self,
|
98
|
+
meta: CtxMeta,
|
99
|
+
ctx: CtxItem,
|
100
|
+
stream: bool = False
|
101
|
+
):
|
88
102
|
"""
|
89
103
|
Render end
|
90
104
|
|
@@ -95,7 +109,12 @@ class Renderer(BaseRenderer):
|
|
95
109
|
if stream:
|
96
110
|
self.reload() # reload ctx items only if stream
|
97
111
|
|
98
|
-
def end_extra(
|
112
|
+
def end_extra(
|
113
|
+
self,
|
114
|
+
meta: CtxMeta,
|
115
|
+
ctx: CtxItem,
|
116
|
+
stream: bool = False
|
117
|
+
):
|
99
118
|
"""
|
100
119
|
Render end extra
|
101
120
|
|
@@ -105,7 +124,11 @@ class Renderer(BaseRenderer):
|
|
105
124
|
"""
|
106
125
|
self.to_end(meta)
|
107
126
|
|
108
|
-
def stream_begin(
|
127
|
+
def stream_begin(
|
128
|
+
self,
|
129
|
+
meta: CtxMeta,
|
130
|
+
ctx: CtxItem
|
131
|
+
):
|
109
132
|
"""
|
110
133
|
Render stream begin
|
111
134
|
|
@@ -114,7 +137,11 @@ class Renderer(BaseRenderer):
|
|
114
137
|
"""
|
115
138
|
pass # do nothing
|
116
139
|
|
117
|
-
def stream_end(
|
140
|
+
def stream_end(
|
141
|
+
self,
|
142
|
+
meta: CtxMeta,
|
143
|
+
ctx: CtxItem
|
144
|
+
):
|
118
145
|
"""
|
119
146
|
Render stream end
|
120
147
|
|
@@ -123,7 +150,12 @@ class Renderer(BaseRenderer):
|
|
123
150
|
"""
|
124
151
|
pass # do nothing
|
125
152
|
|
126
|
-
def append_context(
|
153
|
+
def append_context(
|
154
|
+
self,
|
155
|
+
meta: CtxMeta,
|
156
|
+
items: List[CtxItem],
|
157
|
+
clear: bool = True
|
158
|
+
):
|
127
159
|
"""
|
128
160
|
Append all context to output
|
129
161
|
|
@@ -142,7 +174,13 @@ class Renderer(BaseRenderer):
|
|
142
174
|
self.append_context_item(meta, ctx)
|
143
175
|
i += 1
|
144
176
|
|
145
|
-
def append_input(
|
177
|
+
def append_input(
|
178
|
+
self,
|
179
|
+
meta: CtxMeta,
|
180
|
+
ctx: CtxItem,
|
181
|
+
flush: bool = True,
|
182
|
+
append: bool = False
|
183
|
+
):
|
146
184
|
"""
|
147
185
|
Append text input to output
|
148
186
|
|
@@ -184,7 +222,11 @@ class Renderer(BaseRenderer):
|
|
184
222
|
|
185
223
|
self.append_raw(meta, ctx, text.strip(), "msg-user")
|
186
224
|
|
187
|
-
def append_output(
|
225
|
+
def append_output(
|
226
|
+
self,
|
227
|
+
meta: CtxMeta,
|
228
|
+
ctx: CtxItem
|
229
|
+
):
|
188
230
|
"""
|
189
231
|
Append text output to output
|
190
232
|
|
@@ -205,7 +247,12 @@ class Renderer(BaseRenderer):
|
|
205
247
|
text = "{}".format(ctx.output)
|
206
248
|
self.append_raw(meta, ctx, text.strip(), "msg-bot")
|
207
249
|
|
208
|
-
def append_extra(
|
250
|
+
def append_extra(
|
251
|
+
self,
|
252
|
+
meta: CtxMeta,
|
253
|
+
ctx: CtxItem,
|
254
|
+
footer: bool = False
|
255
|
+
):
|
209
256
|
"""
|
210
257
|
Append extra data (images, files, etc.) to output
|
211
258
|
|
@@ -292,7 +339,13 @@ class Renderer(BaseRenderer):
|
|
292
339
|
if len(appended) > 0:
|
293
340
|
self.to_end(meta)
|
294
341
|
|
295
|
-
def append_chunk(
|
342
|
+
def append_chunk(
|
343
|
+
self,
|
344
|
+
meta: CtxMeta,
|
345
|
+
ctx: CtxItem,
|
346
|
+
text_chunk: str,
|
347
|
+
begin: bool = False
|
348
|
+
):
|
296
349
|
"""
|
297
350
|
Append output chunk to output
|
298
351
|
|
@@ -351,7 +404,12 @@ class Renderer(BaseRenderer):
|
|
351
404
|
cursor.insertBlock(block_format)
|
352
405
|
node.setTextCursor(cursor)
|
353
406
|
|
354
|
-
def append_html_chunk(
|
407
|
+
def append_html_chunk(
|
408
|
+
self,
|
409
|
+
meta: CtxMeta,
|
410
|
+
ctx: CtxItem,
|
411
|
+
html: str
|
412
|
+
):
|
355
413
|
"""
|
356
414
|
Append HTML chunk to output
|
357
415
|
|
@@ -375,7 +433,13 @@ class Renderer(BaseRenderer):
|
|
375
433
|
node.setTextCursor(cursor)
|
376
434
|
node.append(html.replace("\n", "<br>"))
|
377
435
|
|
378
|
-
def append_raw(
|
436
|
+
def append_raw(
|
437
|
+
self,
|
438
|
+
meta: CtxMeta,
|
439
|
+
ctx: CtxItem,
|
440
|
+
text: str,
|
441
|
+
type: str = "msg-bot"
|
442
|
+
):
|
379
443
|
"""
|
380
444
|
Append and format raw text to output
|
381
445
|
|
@@ -400,7 +464,11 @@ class Renderer(BaseRenderer):
|
|
400
464
|
self.get_output_node(meta).append(text)
|
401
465
|
self.to_end(meta)
|
402
466
|
|
403
|
-
def append_chunk_start(
|
467
|
+
def append_chunk_start(
|
468
|
+
self,
|
469
|
+
meta: CtxMeta,
|
470
|
+
ctx: CtxItem
|
471
|
+
):
|
404
472
|
"""
|
405
473
|
Append start of chunk to output
|
406
474
|
|
@@ -412,7 +480,11 @@ class Renderer(BaseRenderer):
|
|
412
480
|
cursor.movePosition(QTextCursor.End)
|
413
481
|
node.setTextCursor(cursor)
|
414
482
|
|
415
|
-
def append_context_item(
|
483
|
+
def append_context_item(
|
484
|
+
self,
|
485
|
+
meta: CtxMeta,
|
486
|
+
ctx: CtxItem
|
487
|
+
):
|
416
488
|
"""
|
417
489
|
Append context item to output
|
418
490
|
|
@@ -423,7 +495,13 @@ class Renderer(BaseRenderer):
|
|
423
495
|
self.append_output(meta, ctx)
|
424
496
|
self.append_extra(meta, ctx, footer=True)
|
425
497
|
|
426
|
-
def append(
|
498
|
+
def append(
|
499
|
+
self,
|
500
|
+
meta: CtxMeta,
|
501
|
+
ctx: CtxItem,
|
502
|
+
text: str,
|
503
|
+
end: str = "\n"
|
504
|
+
):
|
427
505
|
"""
|
428
506
|
Append text to output
|
429
507
|
|
@@ -443,7 +521,12 @@ class Renderer(BaseRenderer):
|
|
443
521
|
cur.insertHtml("<br>")
|
444
522
|
node.setTextCursor(cur) # Update visible cursor
|
445
523
|
|
446
|
-
def append_timestamp(
|
524
|
+
def append_timestamp(
|
525
|
+
self,
|
526
|
+
ctx: CtxItem,
|
527
|
+
text: str,
|
528
|
+
type: Optional[str] = None
|
529
|
+
) -> str:
|
447
530
|
"""
|
448
531
|
Append timestamp to text
|
449
532
|
|
@@ -465,8 +548,15 @@ class Renderer(BaseRenderer):
|
|
465
548
|
text = '<span class="ts">{}:</span> {}'.format(hour, text)
|
466
549
|
return text
|
467
550
|
|
468
|
-
def reset(
|
469
|
-
|
551
|
+
def reset(
|
552
|
+
self,
|
553
|
+
meta: Optional[CtxMeta] = None
|
554
|
+
):
|
555
|
+
"""
|
556
|
+
Reset
|
557
|
+
|
558
|
+
:param meta: context meta
|
559
|
+
"""
|
470
560
|
pid = self.get_or_create_pid(meta)
|
471
561
|
if pid is not None:
|
472
562
|
self.pids[pid].images_appended = []
|
@@ -478,8 +568,15 @@ class Renderer(BaseRenderer):
|
|
478
568
|
"""
|
479
569
|
self.window.controller.ctx.refresh_output() # if clear all and appends all items again
|
480
570
|
|
481
|
-
def clear_output(
|
482
|
-
|
571
|
+
def clear_output(
|
572
|
+
self,
|
573
|
+
meta: Optional[CtxMeta] = None
|
574
|
+
):
|
575
|
+
"""
|
576
|
+
Clear output
|
577
|
+
|
578
|
+
:param meta: context meta
|
579
|
+
"""
|
483
580
|
self.reset(meta)
|
484
581
|
self.get_output_node(meta).clear()
|
485
582
|
|
@@ -510,7 +607,7 @@ class Renderer(BaseRenderer):
|
|
510
607
|
"""
|
511
608
|
Get output node
|
512
609
|
|
513
|
-
|
610
|
+
:param meta: context meta
|
514
611
|
:return: output node
|
515
612
|
"""
|
516
613
|
return self.window.core.ctx.output.get_current(meta)
|
@@ -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, Dict
|
13
|
+
|
12
14
|
from pygpt_net.utils import trans
|
13
15
|
|
14
16
|
|
@@ -22,7 +24,12 @@ class Body:
|
|
22
24
|
"""
|
23
25
|
self.window = window
|
24
26
|
|
25
|
-
def get_image_html(
|
27
|
+
def get_image_html(
|
28
|
+
self,
|
29
|
+
url: str,
|
30
|
+
num: Optional[int] = None,
|
31
|
+
num_all: Optional[int] = None
|
32
|
+
) -> str:
|
26
33
|
"""
|
27
34
|
Get image HTML
|
28
35
|
|
@@ -40,7 +47,12 @@ class Body:
|
|
40
47
|
path=path,
|
41
48
|
num=num_str)
|
42
49
|
|
43
|
-
def get_url_html(
|
50
|
+
def get_url_html(
|
51
|
+
self,
|
52
|
+
url: str,
|
53
|
+
num: Optional[int] = None,
|
54
|
+
num_all: Optional[int] = None
|
55
|
+
) -> str:
|
44
56
|
"""
|
45
57
|
Get URL HTML
|
46
58
|
|
@@ -57,7 +69,7 @@ class Body:
|
|
57
69
|
url=url,
|
58
70
|
num=num_str)
|
59
71
|
|
60
|
-
def get_docs_html(self, docs:
|
72
|
+
def get_docs_html(self, docs: List[Dict]) -> str:
|
61
73
|
"""
|
62
74
|
Get Llama-index doc metadata HTML
|
63
75
|
|
@@ -94,7 +106,12 @@ class Body:
|
|
94
106
|
html += html_sources
|
95
107
|
return html
|
96
108
|
|
97
|
-
def get_file_html(
|
109
|
+
def get_file_html(
|
110
|
+
self,
|
111
|
+
url: str,
|
112
|
+
num: Optional[int] = None,
|
113
|
+
num_all: Optional[int] = None
|
114
|
+
) -> str:
|
98
115
|
"""
|
99
116
|
Get file HTML
|
100
117
|
|