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,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
|
13
14
|
|
14
15
|
from PySide6.QtGui import QAction, QIcon
|
15
16
|
from PySide6.QtWidgets import QWidget
|
@@ -45,9 +46,10 @@ class Actions:
|
|
45
46
|
:param path: path to file
|
46
47
|
:return: True if file has preview
|
47
48
|
"""
|
48
|
-
return self.window.core.filesystem.types.is_image(path)
|
49
|
+
return (self.window.core.filesystem.types.is_image(path)
|
50
|
+
or self.window.core.filesystem.types.is_video(path))
|
49
51
|
|
50
|
-
def get_preview(self, parent: QWidget, path: str) ->
|
52
|
+
def get_preview(self, parent: QWidget, path: str) -> List[QAction]:
|
51
53
|
"""
|
52
54
|
Get preview actions for context menu
|
53
55
|
|
@@ -56,7 +58,8 @@ class Actions:
|
|
56
58
|
:return: list of context menu actions
|
57
59
|
"""
|
58
60
|
actions = []
|
59
|
-
if self.window.core.filesystem.types.is_video(path)
|
61
|
+
if (self.window.core.filesystem.types.is_video(path)
|
62
|
+
or self.window.core.filesystem.types.is_audio(path)):
|
60
63
|
action = QAction(
|
61
64
|
QIcon(":/icons/video.svg"),
|
62
65
|
trans('action.video.play'),
|
@@ -100,7 +103,7 @@ class Actions:
|
|
100
103
|
actions.append(action)
|
101
104
|
return actions
|
102
105
|
|
103
|
-
def get_use(self, parent: QWidget, path: str) ->
|
106
|
+
def get_use(self, parent: QWidget, path: str) -> List[QAction]:
|
104
107
|
"""
|
105
108
|
Get use actions for context menu
|
106
109
|
|
@@ -6,13 +6,15 @@
|
|
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 copy
|
13
13
|
import json
|
14
14
|
import os
|
15
15
|
|
16
|
+
from typing import Optional
|
17
|
+
|
16
18
|
|
17
19
|
class Editor:
|
18
20
|
def __init__(self, window=None):
|
@@ -63,7 +65,11 @@ class Editor:
|
|
63
65
|
"""
|
64
66
|
return self.window.ui.dialog[dialog_id].is_changed()
|
65
67
|
|
66
|
-
def load(
|
68
|
+
def load(
|
69
|
+
self,
|
70
|
+
dialog_id: str,
|
71
|
+
file: Optional[str] = None
|
72
|
+
):
|
67
73
|
"""
|
68
74
|
Load file to editor
|
69
75
|
|
@@ -87,7 +93,11 @@ class Editor:
|
|
87
93
|
self.window.core.debug.log(e)
|
88
94
|
self.window.update_status("Error loading file: {}".format(e))
|
89
95
|
|
90
|
-
def save(
|
96
|
+
def save(
|
97
|
+
self,
|
98
|
+
dialog_id: str,
|
99
|
+
path: Optional[str] = None
|
100
|
+
):
|
91
101
|
"""
|
92
102
|
Save file to disk
|
93
103
|
|
@@ -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 List
|
13
|
+
|
14
|
+
|
12
15
|
class Types:
|
13
16
|
def __init__(self, window=None):
|
14
17
|
"""
|
@@ -45,7 +48,7 @@ class Types:
|
|
45
48
|
"""
|
46
49
|
return str(path).lower().endswith(tuple(self.get_audio_ext()))
|
47
50
|
|
48
|
-
def get_img_ext(self) ->
|
51
|
+
def get_img_ext(self) -> List[str]:
|
49
52
|
"""
|
50
53
|
Get image extensions
|
51
54
|
|
@@ -53,23 +56,25 @@ class Types:
|
|
53
56
|
"""
|
54
57
|
return ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tiff', '.webp']
|
55
58
|
|
56
|
-
def get_video_ext(self) ->
|
59
|
+
def get_video_ext(self) -> List[str]:
|
57
60
|
"""
|
58
61
|
Get video extensions
|
59
62
|
|
60
63
|
:return: list with video extensions
|
61
64
|
"""
|
62
|
-
return ['.mp4', '.avi', '.mkv', '.webm', '.mov', '.flv', '.wmv',
|
65
|
+
return ['.mp4', '.avi', '.mkv', '.webm', '.mov', '.flv', '.wmv',
|
66
|
+
'.3gp', '.ogg', '.ogv', '.mpg', '.mpeg', '.m4v']
|
63
67
|
|
64
|
-
def get_audio_ext(self) ->
|
68
|
+
def get_audio_ext(self) -> List[str]:
|
65
69
|
"""
|
66
70
|
Get audio extensions
|
67
71
|
|
68
72
|
:return: list with audio extensions
|
69
73
|
"""
|
70
|
-
return ['.mp3', '.wav', '.flac', '.ogg', '.m4a', '.wma', '.aac',
|
74
|
+
return ['.mp3', '.wav', '.flac', '.ogg', '.m4a', '.wma', '.aac',
|
75
|
+
'.aiff', '.alac', '.dsd', '.pcm', '.mpc']
|
71
76
|
|
72
|
-
def get_excluded_extensions(self) ->
|
77
|
+
def get_excluded_extensions(self) -> List[str]:
|
73
78
|
"""
|
74
79
|
Get excluded extensions if no loader is available
|
75
80
|
|
pygpt_net/core/filesystem/url.py
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
7
|
# MIT License #
|
8
8
|
# Created By : Marcin Szczygliński #
|
9
|
-
# Updated Date: 2024.
|
9
|
+
# Updated Date: 2024.12.09 03:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
from PySide6.QtCore import QUrl
|
@@ -38,14 +38,18 @@ class Url:
|
|
38
38
|
]
|
39
39
|
|
40
40
|
# JS bridge
|
41
|
-
if url.toString()
|
42
|
-
pid =
|
41
|
+
if url.toString().startswith('bridge://open_find'):
|
42
|
+
pid = int(url.toString().split(':')[2])
|
43
43
|
if pid in self.window.ui.nodes['output']:
|
44
44
|
self.window.ui.nodes['output'][pid].find_open()
|
45
45
|
return
|
46
46
|
elif url.toString() == 'bridge://escape':
|
47
47
|
self.window.controller.access.on_escape()
|
48
48
|
return
|
49
|
+
elif url.toString() == 'bridge://focus':
|
50
|
+
pid = self.window.controller.ui.tabs.get_current_pid()
|
51
|
+
if pid in self.window.ui.nodes['output']:
|
52
|
+
self.window.ui.nodes['output'][pid].on_focus_js()
|
49
53
|
|
50
54
|
# -------------
|
51
55
|
|
pygpt_net/core/idx/__init__.py
CHANGED
@@ -6,10 +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
12
|
import datetime
|
13
|
+
from typing import Optional, Tuple, List, Dict, Any
|
14
|
+
|
13
15
|
from packaging.version import Version
|
14
16
|
|
15
17
|
from pygpt_net.item.index import IndexItem
|
@@ -98,7 +100,11 @@ class Idx:
|
|
98
100
|
"""
|
99
101
|
self.storage.store(idx)
|
100
102
|
|
101
|
-
def remove_index(
|
103
|
+
def remove_index(
|
104
|
+
self,
|
105
|
+
idx: str = "base",
|
106
|
+
truncate: bool = False
|
107
|
+
) -> bool:
|
102
108
|
"""
|
103
109
|
Truncate index
|
104
110
|
|
@@ -125,10 +131,10 @@ class Idx:
|
|
125
131
|
def index_files(
|
126
132
|
self,
|
127
133
|
idx: str = "base",
|
128
|
-
path: str = None,
|
129
|
-
replace: bool = None,
|
130
|
-
recursive: bool = None,
|
131
|
-
) ->
|
134
|
+
path: Optional[str] = None,
|
135
|
+
replace: Optional[bool] = None,
|
136
|
+
recursive: Optional[bool] = None,
|
137
|
+
) -> Tuple[Dict, List[str]]:
|
132
138
|
"""
|
133
139
|
Index file or directory of files
|
134
140
|
|
@@ -165,7 +171,7 @@ class Idx:
|
|
165
171
|
idx: str = "base",
|
166
172
|
id: int = 0,
|
167
173
|
from_ts: int = 0
|
168
|
-
) ->
|
174
|
+
) -> Tuple[int, List[str]]:
|
169
175
|
"""
|
170
176
|
Index records from db by meta id
|
171
177
|
|
@@ -199,7 +205,7 @@ class Idx:
|
|
199
205
|
self,
|
200
206
|
idx: str = "base",
|
201
207
|
from_ts: int = 0
|
202
|
-
) ->
|
208
|
+
) -> Tuple[int, List[str]]:
|
203
209
|
"""
|
204
210
|
Index records from db by meta id
|
205
211
|
|
@@ -230,10 +236,10 @@ class Idx:
|
|
230
236
|
def index_urls(
|
231
237
|
self,
|
232
238
|
idx: str = "base",
|
233
|
-
urls:
|
239
|
+
urls: Optional[List[str]] = None,
|
234
240
|
type: str = "webpage",
|
235
|
-
extra_args:
|
236
|
-
) ->
|
241
|
+
extra_args: Optional[Dict[str, Any]] = None
|
242
|
+
) -> Tuple[int, List[str]]:
|
237
243
|
"""
|
238
244
|
Index URLs
|
239
245
|
|
@@ -269,10 +275,10 @@ class Idx:
|
|
269
275
|
self,
|
270
276
|
idx: str = "base",
|
271
277
|
type: str = "webpage",
|
272
|
-
params:
|
273
|
-
config:
|
274
|
-
replace: bool = None,
|
275
|
-
) ->
|
278
|
+
params: Optional[Dict[str, Any]] = None,
|
279
|
+
config: Optional[Dict[str, Any]] = None,
|
280
|
+
replace: Optional[bool] = None,
|
281
|
+
) -> Tuple[int, list]:
|
276
282
|
"""
|
277
283
|
Index URLs
|
278
284
|
|
@@ -310,7 +316,10 @@ class Idx:
|
|
310
316
|
self.log("Error: " + str(errors))
|
311
317
|
return n, errors
|
312
318
|
|
313
|
-
def get_idx_data(
|
319
|
+
def get_idx_data(
|
320
|
+
self,
|
321
|
+
idx: Optional[str] = None
|
322
|
+
) -> Dict[str, Dict]:
|
314
323
|
"""
|
315
324
|
Get indexed files data
|
316
325
|
|
@@ -329,7 +338,7 @@ class Idx:
|
|
329
338
|
indexes[idx] = self.items[store_id][idx].items
|
330
339
|
return indexes
|
331
340
|
|
332
|
-
def get_by_idx(self, idx: int) -> str:
|
341
|
+
def get_by_idx(self, idx: int) -> Optional[str]:
|
333
342
|
"""
|
334
343
|
Return idx by list index
|
335
344
|
|
@@ -341,7 +350,7 @@ class Idx:
|
|
341
350
|
if idx < len(items):
|
342
351
|
return items[idx]['id']
|
343
352
|
|
344
|
-
def get_idx_by_name(self, name: str) -> int:
|
353
|
+
def get_idx_by_name(self, name: str) -> Optional[int]:
|
345
354
|
"""
|
346
355
|
Return idx on list by name
|
347
356
|
|
@@ -354,7 +363,7 @@ class Idx:
|
|
354
363
|
if item['id'] == name:
|
355
364
|
return idx
|
356
365
|
|
357
|
-
def get_default_idx(self) -> str:
|
366
|
+
def get_default_idx(self) -> Optional[str]:
|
358
367
|
"""
|
359
368
|
Return default idx
|
360
369
|
|
@@ -375,7 +384,7 @@ class Idx:
|
|
375
384
|
return idx in self.items[store_id]
|
376
385
|
return False
|
377
386
|
|
378
|
-
def get(self, idx: str) -> IndexItem:
|
387
|
+
def get(self, idx: str) -> Optional[IndexItem]:
|
379
388
|
"""
|
380
389
|
Return index data from current storage
|
381
390
|
|
@@ -386,7 +395,7 @@ class Idx:
|
|
386
395
|
if store_id in self.items and idx in self.items[store_id]:
|
387
396
|
return self.items[store_id][idx]
|
388
397
|
|
389
|
-
def get_all(self) ->
|
398
|
+
def get_all(self) -> Dict[str, IndexItem]:
|
390
399
|
"""
|
391
400
|
Return all indexes in current store
|
392
401
|
|
@@ -397,12 +406,12 @@ class Idx:
|
|
397
406
|
return self.items[store_id]
|
398
407
|
return {}
|
399
408
|
|
400
|
-
def append(self, idx: str, files:
|
409
|
+
def append(self, idx: str, files: Dict[str, str]):
|
401
410
|
"""
|
402
411
|
Append indexed files to index
|
403
412
|
|
404
413
|
:param idx: index name
|
405
|
-
:param files: dict of indexed files
|
414
|
+
:param files: dict of indexed files (path -> doc_id)
|
406
415
|
"""
|
407
416
|
# create store if not exists
|
408
417
|
store_id = self.get_current_store()
|
@@ -508,7 +517,7 @@ class Idx:
|
|
508
517
|
self.items[store_id][idx].id = idx
|
509
518
|
self.items[store_id][idx].name = idx
|
510
519
|
|
511
|
-
def get_idx_ids(self) ->
|
520
|
+
def get_idx_ids(self) -> List[str]:
|
512
521
|
"""
|
513
522
|
Get list of indexes
|
514
523
|
|
@@ -532,7 +541,7 @@ class Idx:
|
|
532
541
|
self.items[store_id][idx].items = {}
|
533
542
|
self.get_provider().truncate(store_id, idx)
|
534
543
|
|
535
|
-
def get_counters(self, type: str) ->
|
544
|
+
def get_counters(self, type: str) -> Dict[str, Dict[str, int]]:
|
536
545
|
"""
|
537
546
|
Get counters (stats, count items by type [file, ctx, external])
|
538
547
|
|
pygpt_net/core/idx/chat.py
CHANGED
@@ -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 json
|
13
|
+
from typing import Optional, Dict, Any, List
|
13
14
|
|
14
15
|
from llama_index.core.llms import ChatMessage, MessageRole
|
15
16
|
from llama_index.core.prompts import ChatPromptTemplate
|
@@ -37,7 +38,11 @@ class Chat:
|
|
37
38
|
self.storage = storage
|
38
39
|
self.context = Context(window)
|
39
40
|
|
40
|
-
def call(
|
41
|
+
def call(
|
42
|
+
self,
|
43
|
+
context: BridgeContext,
|
44
|
+
extra: Optional[Dict[str, Any]] = None
|
45
|
+
) -> bool:
|
41
46
|
"""
|
42
47
|
Call chat, complete or query mode
|
43
48
|
|
@@ -69,7 +74,11 @@ class Chat:
|
|
69
74
|
extra=extra,
|
70
75
|
) # if not, use query mode
|
71
76
|
|
72
|
-
def raw_query(
|
77
|
+
def raw_query(
|
78
|
+
self,
|
79
|
+
context: BridgeContext,
|
80
|
+
extra: Optional[Dict[str, Any]] = None
|
81
|
+
) -> bool:
|
73
82
|
"""
|
74
83
|
Raw query mode
|
75
84
|
|
@@ -82,7 +91,11 @@ class Chat:
|
|
82
91
|
extra=extra,
|
83
92
|
)
|
84
93
|
|
85
|
-
def query(
|
94
|
+
def query(
|
95
|
+
self,
|
96
|
+
context: BridgeContext,
|
97
|
+
extra: Optional[Dict[str, Any]] = None
|
98
|
+
) -> bool:
|
86
99
|
"""
|
87
100
|
Query index mode (no chat, only single query) and append results to context
|
88
101
|
|
@@ -150,7 +163,11 @@ class Chat:
|
|
150
163
|
return True
|
151
164
|
return False
|
152
165
|
|
153
|
-
def chat(
|
166
|
+
def chat(
|
167
|
+
self,
|
168
|
+
context: BridgeContext,
|
169
|
+
extra: Optional[Dict[str, Any]] = None
|
170
|
+
) -> bool:
|
154
171
|
"""
|
155
172
|
Chat mode (conversation, using context from index) and append result to the context
|
156
173
|
|
@@ -291,7 +308,7 @@ class Chat:
|
|
291
308
|
ctx: CtxItem,
|
292
309
|
path: str,
|
293
310
|
query: str,
|
294
|
-
model: ModelItem = None
|
311
|
+
model: Optional[ModelItem] = None
|
295
312
|
) -> str:
|
296
313
|
"""
|
297
314
|
Query file using temp index (created on the fly)
|
@@ -345,7 +362,7 @@ class Chat:
|
|
345
362
|
url: str,
|
346
363
|
args: dict,
|
347
364
|
query: str,
|
348
|
-
model: ModelItem = None
|
365
|
+
model: Optional[ModelItem] = None
|
349
366
|
) -> str:
|
350
367
|
"""
|
351
368
|
Query web using temp index (created on the fly)
|
@@ -405,8 +422,8 @@ class Chat:
|
|
405
422
|
self,
|
406
423
|
query: str,
|
407
424
|
path: str,
|
408
|
-
model: ModelItem = None,
|
409
|
-
history:
|
425
|
+
model: Optional[ModelItem] = None,
|
426
|
+
history: Optional[List[CtxItem]] = None,
|
410
427
|
verbose: bool = False,
|
411
428
|
) -> str:
|
412
429
|
"""
|
@@ -461,7 +478,7 @@ class Chat:
|
|
461
478
|
self,
|
462
479
|
query: str,
|
463
480
|
idx: str,
|
464
|
-
model: ModelItem = None
|
481
|
+
model: Optional[ModelItem] = None
|
465
482
|
) -> str:
|
466
483
|
"""
|
467
484
|
Query attachment
|
@@ -486,7 +503,11 @@ class Chat:
|
|
486
503
|
output = str(response)
|
487
504
|
return output
|
488
505
|
|
489
|
-
def get_memory_buffer(
|
506
|
+
def get_memory_buffer(
|
507
|
+
self,
|
508
|
+
history: List[ChatMessage],
|
509
|
+
llm = None
|
510
|
+
) -> ChatMemoryBuffer:
|
490
511
|
"""
|
491
512
|
Get memory buffer
|
492
513
|
|
@@ -499,7 +520,10 @@ class Chat:
|
|
499
520
|
llm=llm,
|
500
521
|
)
|
501
522
|
|
502
|
-
def get_custom_prompt(
|
523
|
+
def get_custom_prompt(
|
524
|
+
self,
|
525
|
+
prompt: Optional[str] = None
|
526
|
+
) -> Optional[ChatPromptTemplate]:
|
503
527
|
"""
|
504
528
|
Get custom prompt template if sys prompt is not empty
|
505
529
|
|
@@ -528,12 +552,12 @@ class Chat:
|
|
528
552
|
]
|
529
553
|
return ChatPromptTemplate(qa_msgs)
|
530
554
|
|
531
|
-
def get_index(self, idx, model):
|
555
|
+
def get_index(self, idx: str, model: ModelItem):
|
532
556
|
"""
|
533
557
|
Get index instance
|
534
558
|
|
535
559
|
:param idx: idx name (id)
|
536
|
-
:param model: model
|
560
|
+
:param model: model instance
|
537
561
|
:return:
|
538
562
|
"""
|
539
563
|
# check if index exists
|
@@ -549,7 +573,7 @@ class Chat:
|
|
549
573
|
index = self.storage.get(idx, service_context=service_context) # get index
|
550
574
|
return index, service_context
|
551
575
|
|
552
|
-
def get_metadata(self, source_nodes: list):
|
576
|
+
def get_metadata(self, source_nodes: Optional[list]) -> Dict[str, Any]:
|
553
577
|
"""
|
554
578
|
Get metadata from source nodes
|
555
579
|
|
@@ -577,7 +601,7 @@ class Chat:
|
|
577
601
|
break
|
578
602
|
return metadata
|
579
603
|
|
580
|
-
def parse_metadata(self, metadata:
|
604
|
+
def parse_metadata(self, metadata: Optional[Dict]) -> Dict[str, Any]:
|
581
605
|
"""
|
582
606
|
Parse metadata
|
583
607
|
|
pygpt_net/core/idx/context.py
CHANGED
@@ -6,11 +6,15 @@
|
|
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 llama_index.core.llms import ChatMessage, MessageRole
|
13
15
|
|
16
|
+
from pygpt_net.item.ctx import CtxItem
|
17
|
+
|
14
18
|
|
15
19
|
class Context:
|
16
20
|
def __init__(self, window=None):
|
@@ -25,7 +29,7 @@ class Context:
|
|
25
29
|
self,
|
26
30
|
input_prompt: str,
|
27
31
|
system_prompt: str,
|
28
|
-
history:
|
32
|
+
history: Optional[List[CtxItem]] = None,
|
29
33
|
multimodal: bool = False
|
30
34
|
):
|
31
35
|
"""
|