pygpt-net 2.4.36.post1__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 +38 -1
- README.md +71 -114
- pygpt_net/CHANGELOG.txt +38 -1
- 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 +39 -44
- 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 +217 -64
- 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/bridge/worker.py +16 -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/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 +18 -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 +60 -38
- 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 +19 -6
- pygpt_net/data/config/models.json +3 -3
- pygpt_net/data/config/modes.json +3 -3
- pygpt_net/data/config/settings.json +81 -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 +19 -3
- pygpt_net/data/locale/locale.en.ini +30 -11
- pygpt_net/data/locale/locale.es.ini +19 -3
- pygpt_net/data/locale/locale.fr.ini +19 -3
- pygpt_net/data/locale/locale.it.ini +19 -3
- pygpt_net/data/locale/locale.pl.ini +20 -4
- pygpt_net/data/locale/locale.uk.ini +19 -3
- pygpt_net/data/locale/locale.zh.ini +20 -4
- 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/plugin/idx_llama_index/__init__.py +2 -2
- pygpt_net/plugin/real_time/__init__.py +2 -2
- pygpt_net/provider/core/config/patch.py +54 -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.36.post1.dist-info → pygpt_net-2.4.41.dist-info}/METADATA +72 -115
- {pygpt_net-2.4.36.post1.dist-info → pygpt_net-2.4.41.dist-info}/RECORD +258 -250
- /pygpt_net/data/css/{web.dark.css → web-blocks.dark.css} +0 -0
- {pygpt_net-2.4.36.post1.dist-info → pygpt_net-2.4.41.dist-info}/LICENSE +0 -0
- {pygpt_net-2.4.36.post1.dist-info → pygpt_net-2.4.41.dist-info}/WHEEL +0 -0
- {pygpt_net-2.4.36.post1.dist-info → pygpt_net-2.4.41.dist-info}/entry_points.txt +0 -0
@@ -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
|
13
14
|
|
14
15
|
from pygpt_net.core.events import Event, BaseEvent
|
15
16
|
from pygpt_net.item.ctx import CtxItem
|
@@ -29,7 +30,11 @@ class Audio:
|
|
29
30
|
"""Setup controller"""
|
30
31
|
self.update()
|
31
32
|
|
32
|
-
def toggle_input(
|
33
|
+
def toggle_input(
|
34
|
+
self,
|
35
|
+
state: bool,
|
36
|
+
btn: bool = True
|
37
|
+
):
|
33
38
|
"""
|
34
39
|
Toggle audio input
|
35
40
|
|
@@ -155,7 +160,11 @@ class Audio:
|
|
155
160
|
else:
|
156
161
|
self.window.ui.menu['audio.control.global'].setChecked(False)
|
157
162
|
|
158
|
-
def read_text(
|
163
|
+
def read_text(
|
164
|
+
self,
|
165
|
+
text: str,
|
166
|
+
cache_file: Optional[str] = None
|
167
|
+
):
|
159
168
|
"""
|
160
169
|
Read text using audio output plugins
|
161
170
|
|
@@ -200,6 +209,14 @@ class Audio:
|
|
200
209
|
}
|
201
210
|
self.window.dispatch(event, all=True)
|
202
211
|
|
212
|
+
def stop_audio(self):
|
213
|
+
"""Stop audio playback"""
|
214
|
+
ctx = CtxItem()
|
215
|
+
event = Event(Event.AUDIO_OUTPUT_STOP)
|
216
|
+
event.ctx = ctx
|
217
|
+
event.data = {}
|
218
|
+
self.window.dispatch(event, all=True)
|
219
|
+
|
203
220
|
def play_sound(self, filename: str):
|
204
221
|
"""
|
205
222
|
Play sound
|
@@ -210,7 +227,11 @@ class Audio:
|
|
210
227
|
if path:
|
211
228
|
self.play_audio(path)
|
212
229
|
|
213
|
-
def play_event(
|
230
|
+
def play_event(
|
231
|
+
self,
|
232
|
+
text: str,
|
233
|
+
event: Optional[BaseEvent] = None
|
234
|
+
):
|
214
235
|
"""
|
215
236
|
Play event (read text or play cached audio file)
|
216
237
|
|
@@ -6,9 +6,11 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.14 08:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
|
+
from typing import Optional
|
13
|
+
|
12
14
|
from pygpt_net.core.tabs.tab import Tab
|
13
15
|
|
14
16
|
from .note import Note
|
@@ -48,6 +50,8 @@ class Calendar:
|
|
48
50
|
|
49
51
|
:param all: reload all notes
|
50
52
|
"""
|
53
|
+
if not self.is_loaded():
|
54
|
+
return
|
51
55
|
year = self.window.ui.calendar['select'].currentYear
|
52
56
|
month = self.window.ui.calendar['select'].currentMonth
|
53
57
|
self.on_page_changed(year, month, all=all) # load notes for current month
|
@@ -77,7 +81,12 @@ class Calendar:
|
|
77
81
|
month = self.window.ui.calendar['select'].currentMonth
|
78
82
|
self.window.core.calendar.load_by_month(year, month)
|
79
83
|
|
80
|
-
def on_page_changed(
|
84
|
+
def on_page_changed(
|
85
|
+
self,
|
86
|
+
year: int,
|
87
|
+
month: int,
|
88
|
+
all: bool = True
|
89
|
+
):
|
81
90
|
"""
|
82
91
|
On calendar page changed
|
83
92
|
|
@@ -90,7 +99,12 @@ class Calendar:
|
|
90
99
|
self.note.refresh_ctx(year, month)
|
91
100
|
self.note.refresh_num(year, month)
|
92
101
|
|
93
|
-
def on_day_select(
|
102
|
+
def on_day_select(
|
103
|
+
self,
|
104
|
+
year: int,
|
105
|
+
month: int,
|
106
|
+
day: int
|
107
|
+
):
|
94
108
|
"""
|
95
109
|
On day select
|
96
110
|
|
@@ -104,7 +118,12 @@ class Calendar:
|
|
104
118
|
self.note.update_content(year, month, day)
|
105
119
|
self.note.update_label(year, month, day)
|
106
120
|
|
107
|
-
def on_ctx_select(
|
121
|
+
def on_ctx_select(
|
122
|
+
self,
|
123
|
+
year: int,
|
124
|
+
month: int,
|
125
|
+
day: int
|
126
|
+
):
|
108
127
|
"""
|
109
128
|
On ctx select
|
110
129
|
|
@@ -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 datetime
|
13
|
+
from typing import Dict
|
13
14
|
|
14
15
|
from PySide6.QtGui import QTextCursor
|
15
16
|
|
@@ -55,7 +56,12 @@ class Note:
|
|
55
56
|
|
56
57
|
self.refresh_num(year, month) # update note cells when note is changed
|
57
58
|
|
58
|
-
def update_content(
|
59
|
+
def update_content(
|
60
|
+
self,
|
61
|
+
year: int,
|
62
|
+
month: int,
|
63
|
+
day: int
|
64
|
+
):
|
59
65
|
"""
|
60
66
|
Update content
|
61
67
|
|
@@ -71,7 +77,12 @@ class Note:
|
|
71
77
|
self.window.ui.calendar['note'].setPlainText(note.content)
|
72
78
|
self.window.ui.calendar['note'].on_update()
|
73
79
|
|
74
|
-
def update_label(
|
80
|
+
def update_label(
|
81
|
+
self,
|
82
|
+
year: int,
|
83
|
+
month: int,
|
84
|
+
day: int
|
85
|
+
):
|
75
86
|
"""
|
76
87
|
Update label
|
77
88
|
|
@@ -89,7 +100,13 @@ class Note:
|
|
89
100
|
day = self.window.ui.calendar['select'].currentDay
|
90
101
|
self.update_label(year, month, day)
|
91
102
|
|
92
|
-
def update_status(
|
103
|
+
def update_status(
|
104
|
+
self,
|
105
|
+
status: str,
|
106
|
+
year: int,
|
107
|
+
month: int,
|
108
|
+
day: int
|
109
|
+
):
|
93
110
|
"""
|
94
111
|
Update status label
|
95
112
|
|
@@ -109,7 +126,11 @@ class Note:
|
|
109
126
|
|
110
127
|
self.refresh_num(year, month) # update note cells when note is changed
|
111
128
|
|
112
|
-
def get_counts_around_month(
|
129
|
+
def get_counts_around_month(
|
130
|
+
self,
|
131
|
+
year: int,
|
132
|
+
month: int
|
133
|
+
) -> Dict[str, int]:
|
113
134
|
"""
|
114
135
|
Get counts around month
|
115
136
|
|
@@ -139,7 +160,11 @@ class Note:
|
|
139
160
|
)
|
140
161
|
return {**last, **current, **next} # combine counters
|
141
162
|
|
142
|
-
def get_labels_counts_around_month(
|
163
|
+
def get_labels_counts_around_month(
|
164
|
+
self,
|
165
|
+
year: int,
|
166
|
+
month: int
|
167
|
+
) -> Dict[str, Dict[int, int]]:
|
143
168
|
"""
|
144
169
|
Get counts around month
|
145
170
|
|
@@ -169,7 +194,11 @@ class Note:
|
|
169
194
|
)
|
170
195
|
return {**last, **current, **next} # combine counters
|
171
196
|
|
172
|
-
def get_ctx_counters(
|
197
|
+
def get_ctx_counters(
|
198
|
+
self,
|
199
|
+
year: int,
|
200
|
+
month: int
|
201
|
+
) -> Dict[str, int]:
|
173
202
|
"""
|
174
203
|
Get ctx counters
|
175
204
|
|
@@ -197,7 +226,11 @@ class Note:
|
|
197
226
|
search_content=search_content,
|
198
227
|
)
|
199
228
|
|
200
|
-
def get_ctx_labels_counters(
|
229
|
+
def get_ctx_labels_counters(
|
230
|
+
self,
|
231
|
+
year: int,
|
232
|
+
month: int
|
233
|
+
) -> Dict[str, Dict[int, int]]:
|
201
234
|
"""
|
202
235
|
Get ctx labels counters
|
203
236
|
|
@@ -225,7 +258,11 @@ class Note:
|
|
225
258
|
search_content=search_content,
|
226
259
|
)
|
227
260
|
|
228
|
-
def refresh_ctx(
|
261
|
+
def refresh_ctx(
|
262
|
+
self,
|
263
|
+
year: int,
|
264
|
+
month: int
|
265
|
+
):
|
229
266
|
"""
|
230
267
|
Update calendar ctx cells
|
231
268
|
|
@@ -236,7 +273,12 @@ class Note:
|
|
236
273
|
labels = self.get_labels_counts_around_month(year, month)
|
237
274
|
self.window.ui.calendar['select'].update_ctx(count, labels)
|
238
275
|
|
239
|
-
def create(
|
276
|
+
def create(
|
277
|
+
self,
|
278
|
+
year: int,
|
279
|
+
month: int,
|
280
|
+
day: int
|
281
|
+
) -> CalendarNoteItem:
|
240
282
|
"""
|
241
283
|
Create empty note
|
242
284
|
|
@@ -251,7 +293,11 @@ class Note:
|
|
251
293
|
note.day = day
|
252
294
|
return note
|
253
295
|
|
254
|
-
def get_notes_existence_around_month(
|
296
|
+
def get_notes_existence_around_month(
|
297
|
+
self,
|
298
|
+
year: int,
|
299
|
+
month: int
|
300
|
+
) -> Dict[str, Dict[int, int]]:
|
255
301
|
"""
|
256
302
|
Get notes existence around month
|
257
303
|
|
pygpt_net/controller/camera.py
CHANGED
@@ -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 00:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import datetime
|
13
13
|
import os
|
14
14
|
import time
|
15
|
+
from typing import Any
|
15
16
|
|
16
17
|
import cv2
|
17
18
|
|
@@ -464,7 +465,7 @@ class Camera(QObject):
|
|
464
465
|
self.window.dispatch(AppEvent(AppEvent.CAMERA_DISABLED)) # app event
|
465
466
|
|
466
467
|
@Slot(object)
|
467
|
-
def handle_error(self, err):
|
468
|
+
def handle_error(self, err: Any):
|
468
469
|
"""
|
469
470
|
Handle thread error signal
|
470
471
|
|
@@ -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 pygpt_net.core.events import AppEvent
|
13
15
|
from pygpt_net.item.ctx import CtxItem
|
14
16
|
|
@@ -64,7 +66,7 @@ class Chat:
|
|
64
66
|
self.render.reload()
|
65
67
|
self.attachment.reload()
|
66
68
|
|
67
|
-
def handle_error(self, err:
|
69
|
+
def handle_error(self, err: Any):
|
68
70
|
"""
|
69
71
|
Handle error
|
70
72
|
|
@@ -93,7 +95,7 @@ class Chat:
|
|
93
95
|
else:
|
94
96
|
self.log("[ctx] {}.".format(mode.upper()))
|
95
97
|
|
96
|
-
def log(self, data:
|
98
|
+
def log(self, data: Any):
|
97
99
|
"""
|
98
100
|
Log data to debug
|
99
101
|
|
@@ -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 List, Dict, Any
|
13
14
|
|
14
15
|
from PySide6.QtCore import Slot, QObject
|
15
16
|
|
@@ -74,7 +75,11 @@ class Attachment(QObject):
|
|
74
75
|
"""Reload attachments"""
|
75
76
|
self.setup()
|
76
77
|
|
77
|
-
def handle(
|
78
|
+
def handle(
|
79
|
+
self,
|
80
|
+
mode: str,
|
81
|
+
text: str
|
82
|
+
):
|
78
83
|
"""
|
79
84
|
Handle attachment upload
|
80
85
|
|
@@ -104,7 +109,12 @@ class Attachment(QObject):
|
|
104
109
|
return True
|
105
110
|
return False
|
106
111
|
|
107
|
-
def upload(
|
112
|
+
def upload(
|
113
|
+
self,
|
114
|
+
meta: CtxMeta,
|
115
|
+
mode: str,
|
116
|
+
prompt: str
|
117
|
+
) -> bool:
|
108
118
|
"""
|
109
119
|
Upload attachments for meta
|
110
120
|
|
@@ -261,26 +271,26 @@ class Attachment(QObject):
|
|
261
271
|
"""
|
262
272
|
return self.mode
|
263
273
|
|
264
|
-
def get_context(
|
274
|
+
def get_context(
|
275
|
+
self,
|
276
|
+
ctx: CtxItem,
|
277
|
+
history: List[CtxItem]
|
278
|
+
) -> str:
|
265
279
|
"""
|
266
280
|
Get additional context for attachment
|
267
281
|
|
268
282
|
:param ctx: CtxItem instance
|
283
|
+
:param history Context items (history)
|
269
284
|
:return: Additional context
|
270
285
|
"""
|
271
|
-
content = ""
|
272
|
-
meta = ctx.meta
|
273
286
|
if self.mode != self.MODE_DISABLED:
|
274
287
|
if self.is_verbose():
|
275
288
|
print("\nPreparing additional context...\nContext Mode: {}".format(self.mode))
|
276
289
|
|
277
|
-
self.window.core.attachments.context.reset()
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
content = self.get_query_context(meta, str(ctx.input))
|
282
|
-
elif self.mode == self.MODE_QUERY_CONTEXT_SUMMARY:
|
283
|
-
content = self.get_context_summary(ctx)
|
290
|
+
self.window.core.attachments.context.reset() # reset used files and urls
|
291
|
+
|
292
|
+
# get additional context from attachments
|
293
|
+
content = self.window.core.attachments.context.get_context(self.mode, ctx, history)
|
284
294
|
|
285
295
|
# append used files and urls to context
|
286
296
|
files = self.window.core.attachments.context.get_used_files()
|
@@ -296,35 +306,10 @@ class Attachment(QObject):
|
|
296
306
|
return "====================================\nADDITIONAL CONTEXT FROM ATTACHMENT(s): {}".format(content)
|
297
307
|
return ""
|
298
308
|
|
299
|
-
def
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
:param ctx: CtxItem instance
|
304
|
-
:return: Full context
|
305
|
-
"""
|
306
|
-
return self.window.core.attachments.context.get_context_text(ctx, filename=True)
|
307
|
-
|
308
|
-
def get_query_context(self, meta: CtxMeta, query: str) -> str:
|
309
|
-
"""
|
310
|
-
Get query context for attachment
|
311
|
-
|
312
|
-
:param meta: CtxMeta instance
|
313
|
-
:param query: Query string
|
314
|
-
:return: Query context
|
315
|
-
"""
|
316
|
-
return self.window.core.attachments.context.query_context(meta, query)
|
317
|
-
|
318
|
-
def get_context_summary(self, ctx: CtxItem) -> str:
|
319
|
-
"""
|
320
|
-
Get context summary
|
321
|
-
|
322
|
-
:param ctx: CtxItem instance
|
323
|
-
:return: Context summary
|
324
|
-
"""
|
325
|
-
return self.window.core.attachments.context.summary_context(ctx, ctx.input)
|
326
|
-
|
327
|
-
def get_uploaded_attachments(self, meta: CtxMeta) -> list:
|
309
|
+
def get_uploaded_attachments(
|
310
|
+
self,
|
311
|
+
meta: CtxMeta
|
312
|
+
) -> List[Dict[str, Any]]:
|
328
313
|
"""
|
329
314
|
Get uploaded attachments for meta
|
330
315
|
|
@@ -396,7 +381,12 @@ class Attachment(QObject):
|
|
396
381
|
"""Hide uploaded attachments"""
|
397
382
|
self.window.ui.tabs['input'].setTabVisible(self.uploaded_tab_idx, False)
|
398
383
|
|
399
|
-
def delete_by_idx(
|
384
|
+
def delete_by_idx(
|
385
|
+
self,
|
386
|
+
idx: int,
|
387
|
+
force: bool = False,
|
388
|
+
remove_local: bool = True
|
389
|
+
):
|
400
390
|
"""
|
401
391
|
Delete attachment by index
|
402
392
|
|
@@ -420,7 +410,12 @@ class Attachment(QObject):
|
|
420
410
|
self.window.core.attachments.context.delete(meta, item, delete_files=remove_local)
|
421
411
|
self.update_list(meta)
|
422
412
|
|
423
|
-
def clear(
|
413
|
+
def clear(
|
414
|
+
self,
|
415
|
+
force: bool = False,
|
416
|
+
remove_local: bool = False,
|
417
|
+
auto: bool = False
|
418
|
+
):
|
424
419
|
"""
|
425
420
|
Clear attachments list
|
426
421
|
|
@@ -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 pygpt_net.core.types import (
|
13
15
|
MODE_AGENT,
|
14
16
|
)
|
@@ -79,7 +81,7 @@ class Command:
|
|
79
81
|
})
|
80
82
|
self.window.dispatch(event)
|
81
83
|
|
82
|
-
def log(self, data:
|
84
|
+
def log(self, data: Any):
|
83
85
|
"""
|
84
86
|
Log data to debug
|
85
87
|
|
@@ -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
|
@@ -113,7 +113,11 @@ class Common:
|
|
113
113
|
self.window.ui.nodes['input'].setFocus()
|
114
114
|
self.initialized = True
|
115
115
|
|
116
|
-
def append_to_input(
|
116
|
+
def append_to_input(
|
117
|
+
self,
|
118
|
+
text: str,
|
119
|
+
separator: str = "\n"
|
120
|
+
):
|
117
121
|
"""
|
118
122
|
Append text to input
|
119
123
|
|
@@ -223,7 +227,6 @@ class Common:
|
|
223
227
|
unlock = False
|
224
228
|
return unlock
|
225
229
|
|
226
|
-
|
227
230
|
def stop(self, exit: bool = False):
|
228
231
|
"""
|
229
232
|
Stop all
|
@@ -358,7 +361,11 @@ class Common:
|
|
358
361
|
else:
|
359
362
|
self.img_enable_raw()
|
360
363
|
|
361
|
-
def save_text(
|
364
|
+
def save_text(
|
365
|
+
self,
|
366
|
+
text: str,
|
367
|
+
type: str = "txt"
|
368
|
+
):
|
362
369
|
"""
|
363
370
|
Save text to file
|
364
371
|
|
@@ -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 Dict
|
13
|
+
|
14
|
+
from pygpt_net.item.attachment import AttachmentItem
|
12
15
|
from pygpt_net.item.ctx import CtxItem
|
13
16
|
from pygpt_net.utils import trans
|
14
17
|
|
@@ -22,7 +25,11 @@ class Files:
|
|
22
25
|
"""
|
23
26
|
self.window = window
|
24
27
|
|
25
|
-
def send(
|
28
|
+
def send(
|
29
|
+
self,
|
30
|
+
mode: str,
|
31
|
+
ctx: CtxItem
|
32
|
+
):
|
26
33
|
"""
|
27
34
|
Send attachments
|
28
35
|
|
@@ -37,7 +44,7 @@ class Files:
|
|
37
44
|
self.window.controller.chat.log("Uploaded attachments (Assistant): {}".format(len(attachments)))
|
38
45
|
return attachments
|
39
46
|
|
40
|
-
def upload(self, mode: str) ->
|
47
|
+
def upload(self, mode: str) -> Dict[str, AttachmentItem]:
|
41
48
|
"""
|
42
49
|
Upload attachments
|
43
50
|
|
@@ -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
|
13
15
|
|
14
16
|
from pygpt_net.core.bridge.context import BridgeContext
|
@@ -30,8 +32,8 @@ class Image:
|
|
30
32
|
def send(
|
31
33
|
self,
|
32
34
|
text: str,
|
33
|
-
prev_ctx: CtxItem = None,
|
34
|
-
parent_id: int = None,
|
35
|
+
prev_ctx: Optional[CtxItem] = None,
|
36
|
+
parent_id: Optional[int] = None,
|
35
37
|
) -> CtxItem:
|
36
38
|
"""
|
37
39
|
Send prompt for image generate
|
@@ -116,7 +118,12 @@ class Image:
|
|
116
118
|
return ctx
|
117
119
|
|
118
120
|
@Slot(object, list, str)
|
119
|
-
def handle_response(
|
121
|
+
def handle_response(
|
122
|
+
self,
|
123
|
+
ctx: CtxItem,
|
124
|
+
paths: List[str],
|
125
|
+
prompt: str
|
126
|
+
):
|
120
127
|
"""
|
121
128
|
Handle response
|
122
129
|
|
@@ -161,7 +168,12 @@ class Image:
|
|
161
168
|
self.window.controller.chat.common.unlock_input() # unlock input
|
162
169
|
|
163
170
|
@Slot(object, list, str)
|
164
|
-
def handle_response_inline(
|
171
|
+
def handle_response_inline(
|
172
|
+
self,
|
173
|
+
ctx: CtxItem,
|
174
|
+
paths: List[str],
|
175
|
+
prompt: str
|
176
|
+
):
|
165
177
|
"""
|
166
178
|
Handle inline response
|
167
179
|
|
@@ -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, Any, Dict
|
13
|
+
|
12
14
|
from pygpt_net.core.bridge import BridgeContext
|
13
15
|
from pygpt_net.core.bridge.context import MultimodalContext
|
14
16
|
from pygpt_net.core.events import Event, AppEvent, KernelEvent, RenderEvent
|
@@ -52,6 +54,7 @@ class Input:
|
|
52
54
|
"""
|
53
55
|
self.window.controller.agent.experts.unlock() # unlock experts
|
54
56
|
self.window.controller.agent.llama.reset_eval_step() # reset evaluation steps
|
57
|
+
self.window.controller.ui.tabs.switch_to_first_chat() # switch to first active chat tab
|
55
58
|
|
56
59
|
# get text from input
|
57
60
|
text = self.window.ui.nodes['input'].toPlainText().strip()
|
@@ -121,7 +124,7 @@ class Input:
|
|
121
124
|
def send(
|
122
125
|
self,
|
123
126
|
context: BridgeContext,
|
124
|
-
extra:
|
127
|
+
extra: Dict[str, Any],
|
125
128
|
):
|
126
129
|
"""
|
127
130
|
Send input wrapper
|
@@ -148,13 +151,13 @@ class Input:
|
|
148
151
|
|
149
152
|
def execute(
|
150
153
|
self,
|
151
|
-
text: str
|
154
|
+
text: str,
|
152
155
|
force: bool = False,
|
153
156
|
reply: bool = False,
|
154
157
|
internal: bool = False,
|
155
|
-
prev_ctx: CtxItem = None,
|
156
|
-
parent_id: int = None,
|
157
|
-
multimodal_ctx: MultimodalContext = None,
|
158
|
+
prev_ctx: Optional[CtxItem] = None,
|
159
|
+
parent_id: Optional[int] = None,
|
160
|
+
multimodal_ctx: Optional[MultimodalContext] = None,
|
158
161
|
):
|
159
162
|
"""
|
160
163
|
Execute send input text to API
|
@@ -265,7 +268,7 @@ class Input:
|
|
265
268
|
multimodal_ctx=multimodal_ctx,
|
266
269
|
) # text mode: OpenAI, Langchain, Llama, etc.
|
267
270
|
|
268
|
-
def log(self, data:
|
271
|
+
def log(self, data: Any):
|
269
272
|
"""
|
270
273
|
Log data to debug
|
271
274
|
|