pygpt-net 2.4.32__py3-none-any.whl → 2.4.33__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 +5 -0
- README.md +9 -4
- pygpt_net/CHANGELOG.txt +5 -0
- pygpt_net/__init__.py +2 -2
- pygpt_net/controller/chat/attachment.py +10 -1
- pygpt_net/core/attachments/context.py +47 -2
- pygpt_net/core/debug/context.py +5 -1
- pygpt_net/core/idx/indexing.py +12 -15
- pygpt_net/core/render/markdown/pid.py +2 -1
- pygpt_net/core/render/plain/pid.py +2 -1
- pygpt_net/core/render/web/body.py +34 -12
- pygpt_net/core/render/web/pid.py +2 -1
- pygpt_net/core/render/web/renderer.py +8 -3
- pygpt_net/data/config/config.json +2 -2
- pygpt_net/data/config/models.json +2 -2
- pygpt_net/data/config/modes.json +2 -2
- pygpt_net/data/css/web.css +70 -0
- pygpt_net/data/css/web.dark.css +4 -1
- pygpt_net/data/css/web.light.css +1 -1
- pygpt_net/data/locale/locale.de.ini +1 -1
- pygpt_net/data/locale/locale.en.ini +1 -1
- pygpt_net/data/locale/locale.es.ini +1 -1
- pygpt_net/data/locale/locale.fr.ini +1 -1
- pygpt_net/data/locale/locale.it.ini +1 -1
- pygpt_net/data/locale/locale.pl.ini +1 -1
- pygpt_net/data/locale/locale.uk.ini +1 -1
- pygpt_net/data/locale/locale.zh.ini +1 -1
- pygpt_net/plugin/cmd_code_interpreter/runner.py +2 -2
- pygpt_net/plugin/cmd_mouse_control/__init__.py +4 -2
- pygpt_net/provider/loaders/base.py +10 -1
- pygpt_net/provider/loaders/web_yt.py +19 -1
- {pygpt_net-2.4.32.dist-info → pygpt_net-2.4.33.dist-info}/METADATA +10 -5
- {pygpt_net-2.4.32.dist-info → pygpt_net-2.4.33.dist-info}/RECORD +36 -36
- {pygpt_net-2.4.32.dist-info → pygpt_net-2.4.33.dist-info}/LICENSE +0 -0
- {pygpt_net-2.4.32.dist-info → pygpt_net-2.4.33.dist-info}/WHEEL +0 -0
- {pygpt_net-2.4.32.dist-info → pygpt_net-2.4.33.dist-info}/entry_points.txt +0 -0
CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 2.4.33 (2024-11-26)
|
4
|
+
|
5
|
+
- Improved CSS and rendering of file and image lists.
|
6
|
+
- Added displaying of used attachments in the chat window.
|
7
|
+
|
3
8
|
## 2.4.32 (2024-11-26)
|
4
9
|
|
5
10
|
- The "Add URL" option added to the "Attachments" tab allows users to include content from a given website as additional context. Currently, it only supports standard web pages and video transcription for YouTube links. More "web" options will be added in the future.
|
README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://snapcraft.io/pygpt)
|
4
4
|
|
5
|
-
Release: **2.4.
|
5
|
+
Release: **2.4.33** | build: **2024.11.26** | Python: **>=3.10, <3.12**
|
6
6
|
|
7
7
|
> Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
|
8
8
|
>
|
@@ -155,11 +155,11 @@ pip install pygpt-net
|
|
155
155
|
pygpt
|
156
156
|
```
|
157
157
|
|
158
|
-
##
|
158
|
+
## Running from GitHub source code
|
159
159
|
|
160
160
|
An alternative method is to download the source code from `GitHub` and execute the application using the Python interpreter (>=3.10, <3.12).
|
161
161
|
|
162
|
-
###
|
162
|
+
### Install with pip
|
163
163
|
|
164
164
|
1. Clone git repository or download .zip file:
|
165
165
|
|
@@ -187,7 +187,7 @@ pip install -r requirements.txt
|
|
187
187
|
python3 run.py
|
188
188
|
```
|
189
189
|
|
190
|
-
|
190
|
+
### Install with Poetry
|
191
191
|
|
192
192
|
1. Clone git repository or download .zip file:
|
193
193
|
|
@@ -3656,6 +3656,11 @@ may consume additional tokens that are not displayed in the main window.
|
|
3656
3656
|
|
3657
3657
|
## Recent changes:
|
3658
3658
|
|
3659
|
+
**2.4.33 (2024-11-26)**
|
3660
|
+
|
3661
|
+
- Improved CSS and rendering of file and image lists.
|
3662
|
+
- Added displaying of used attachments in the chat window.
|
3663
|
+
|
3659
3664
|
**2.4.32 (2024-11-26)**
|
3660
3665
|
|
3661
3666
|
- The "Add URL" option added to the "Attachments" tab allows users to include content from a given website as additional context. Currently, it only supports standard web pages and video transcription for YouTube links. More "web" options will be added in the future.
|
pygpt_net/CHANGELOG.txt
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
2.4.33 (2024-11-26)
|
2
|
+
|
3
|
+
- Improved CSS and rendering of file and image lists.
|
4
|
+
- Added displaying of used attachments in the chat window.
|
5
|
+
|
1
6
|
2.4.32 (2024-11-26)
|
2
7
|
|
3
8
|
- The "Add URL" option added to the "Attachments" tab allows users to include content from a given website as additional context. Currently, it only supports standard web pages and video transcription for YouTube links. More "web" options will be added in the future.
|
pygpt_net/__init__.py
CHANGED
@@ -6,14 +6,14 @@
|
|
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.11.26
|
9
|
+
# Updated Date: 2024.11.26 05:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
__author__ = "Marcin Szczygliński"
|
13
13
|
__copyright__ = "Copyright 2024, Marcin Szczygliński"
|
14
14
|
__credits__ = ["Marcin Szczygliński"]
|
15
15
|
__license__ = "MIT"
|
16
|
-
__version__ = "2.4.
|
16
|
+
__version__ = "2.4.33"
|
17
17
|
__build__ = "2024.11.26"
|
18
18
|
__maintainer__ = "Marcin Szczygliński"
|
19
19
|
__github__ = "https://github.com/szczyglis-dev/py-gpt"
|
@@ -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.11.26
|
9
|
+
# Updated Date: 2024.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import os
|
@@ -274,6 +274,7 @@ class Attachment(QObject):
|
|
274
274
|
if self.is_verbose():
|
275
275
|
print("\nPreparing additional context...\nContext Mode: {}".format(self.mode))
|
276
276
|
|
277
|
+
self.window.core.attachments.context.reset()
|
277
278
|
if self.mode == self.MODE_FULL_CONTEXT:
|
278
279
|
content = self.get_full_context(ctx)
|
279
280
|
elif self.mode == self.MODE_QUERY_CONTEXT:
|
@@ -281,6 +282,14 @@ class Attachment(QObject):
|
|
281
282
|
elif self.mode == self.MODE_QUERY_CONTEXT_SUMMARY:
|
282
283
|
content = self.get_context_summary(ctx)
|
283
284
|
|
285
|
+
# append used files and urls to context
|
286
|
+
files = self.window.core.attachments.context.get_used_files()
|
287
|
+
urls = self.window.core.attachments.context.get_used_urls()
|
288
|
+
if files:
|
289
|
+
ctx.files = files
|
290
|
+
if urls:
|
291
|
+
ctx.urls = urls
|
292
|
+
|
284
293
|
if content:
|
285
294
|
if self.is_verbose():
|
286
295
|
print("\n--- Using additional context ---\n\n{}".format(content))
|
@@ -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.11.26
|
9
|
+
# Updated Date: 2024.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import copy
|
@@ -31,6 +31,11 @@ class Context:
|
|
31
31
|
"""
|
32
32
|
self.window = window
|
33
33
|
self.dir_index = "index"
|
34
|
+
self.last_used_item = None
|
35
|
+
self.last_used_content = None
|
36
|
+
self.last_used_context = None
|
37
|
+
self.last_files = []
|
38
|
+
self.last_urls = []
|
34
39
|
self.summary_prompt = """
|
35
40
|
Summarize the text below by extracting the most important information,
|
36
41
|
especially those that may help answer the question:
|
@@ -93,17 +98,32 @@ class Context:
|
|
93
98
|
file_id = file["uuid"]
|
94
99
|
file_idx_path = os.path.join(meta_path, file_id)
|
95
100
|
text_path = os.path.join(file_idx_path, file_id + ".txt")
|
101
|
+
store_path = file["path"]
|
102
|
+
if "real_path" in file:
|
103
|
+
store_path = file["real_path"]
|
96
104
|
if filename:
|
97
105
|
if file["type"] == "url":
|
98
106
|
context += "URL: {}\n".format(file["path"]) + "\n"
|
99
107
|
else:
|
100
108
|
context += "Filename: {}\n".format(file["name"]) + "\n"
|
109
|
+
|
110
|
+
# store used files and URLs in ctx
|
111
|
+
if file["type"] == "url":
|
112
|
+
if store_path not in self.last_urls:
|
113
|
+
self.last_urls.append(store_path)
|
114
|
+
else:
|
115
|
+
if store_path not in self.last_files:
|
116
|
+
self.last_files.append(store_path)
|
117
|
+
|
101
118
|
if os.path.exists(text_path):
|
102
119
|
try:
|
103
120
|
with open(text_path, "r", encoding="utf-8") as f:
|
104
121
|
context += f.read() + "\n\n"
|
105
122
|
except Exception as e:
|
106
123
|
print("Attachments: read error: {}".format(e))
|
124
|
+
|
125
|
+
self.last_used_content = context
|
126
|
+
self.last_used_context = context
|
107
127
|
return context
|
108
128
|
|
109
129
|
def query_context(self, meta: CtxMeta, query: str) -> str:
|
@@ -126,7 +146,6 @@ class Context:
|
|
126
146
|
file_id = file["uuid"]
|
127
147
|
file_idx_path = os.path.join(meta_path, file_id)
|
128
148
|
file_path = os.path.join(file_idx_path, file["name"])
|
129
|
-
model = None
|
130
149
|
type = AttachmentItem.TYPE_FILE
|
131
150
|
source = file_path
|
132
151
|
if "type" in file:
|
@@ -147,6 +166,7 @@ class Context:
|
|
147
166
|
|
148
167
|
model = None # no model, retrieval is used
|
149
168
|
result = self.window.core.idx.chat.query_attachment(query, idx_path, model)
|
169
|
+
self.last_used_context = result
|
150
170
|
|
151
171
|
if self.is_verbose():
|
152
172
|
print("Attachments: query result: {}".format(result))
|
@@ -193,6 +213,7 @@ class Context:
|
|
193
213
|
})
|
194
214
|
self.window.dispatch(event)
|
195
215
|
response = event.data.get("response")
|
216
|
+
self.last_used_context = response
|
196
217
|
if self.is_verbose():
|
197
218
|
print("Attachments: summary received: {}".format(response))
|
198
219
|
return response
|
@@ -519,6 +540,30 @@ class Context:
|
|
519
540
|
except Exception as e:
|
520
541
|
self.window.core.debug.error("Attachment.truncate", e)
|
521
542
|
|
543
|
+
def reset(self):
|
544
|
+
"""Reset context info"""
|
545
|
+
self.last_used_item = None
|
546
|
+
self.last_used_content = None
|
547
|
+
self.last_used_context = None
|
548
|
+
self.last_files = []
|
549
|
+
self.last_urls = []
|
550
|
+
|
551
|
+
def get_used_files(self) -> list:
|
552
|
+
"""
|
553
|
+
Get last used files
|
554
|
+
|
555
|
+
:return: list of files
|
556
|
+
"""
|
557
|
+
return self.last_files
|
558
|
+
|
559
|
+
def get_used_urls(self) -> list:
|
560
|
+
"""
|
561
|
+
Get last used URLs
|
562
|
+
|
563
|
+
:return: list of URLs
|
564
|
+
"""
|
565
|
+
return self.last_urls
|
566
|
+
|
522
567
|
def is_verbose(self) -> bool:
|
523
568
|
"""
|
524
569
|
Check if verbose mode is enabled
|
pygpt_net/core/debug/context.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.11.
|
9
|
+
# Updated Date: 2024.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
import json
|
12
12
|
|
@@ -45,6 +45,10 @@ class ContextDebug:
|
|
45
45
|
self.window.core.debug.add(self.id, 'CMD (current)', str(self.window.core.ctx.current_cmd))
|
46
46
|
self.window.core.debug.add(self.id, 'CMD schema (current)', str(self.window.core.ctx.current_cmd_schema))
|
47
47
|
self.window.core.debug.add(self.id, 'FUNCTIONS (current)', str(self.get_functions()))
|
48
|
+
self.window.core.debug.add(self.id, 'Attachments: last used content',
|
49
|
+
str(self.window.core.attachments.context.last_used_content))
|
50
|
+
self.window.core.debug.add(self.id, 'Attachments: last used context',
|
51
|
+
str(self.window.core.attachments.context.last_used_context))
|
48
52
|
|
49
53
|
current = None
|
50
54
|
if self.window.core.ctx.get_current() is not None:
|
pygpt_net/core/idx/indexing.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.11.26
|
9
|
+
# Updated Date: 2024.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import datetime
|
@@ -1062,22 +1062,19 @@ class Indexing:
|
|
1062
1062
|
|
1063
1063
|
def get_webtype(self, url: str) -> str:
|
1064
1064
|
"""
|
1065
|
-
Get web type by URL
|
1065
|
+
Get web loader type by URL
|
1066
1066
|
|
1067
1067
|
:param url: URL
|
1068
|
-
:return: web type
|
1069
|
-
"""
|
1070
|
-
type = "webpage"
|
1071
|
-
|
1072
|
-
|
1073
|
-
"
|
1074
|
-
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1078
|
-
if url.startswith(prefix):
|
1079
|
-
type = "youtube"
|
1080
|
-
break
|
1068
|
+
:return: web loader type
|
1069
|
+
"""
|
1070
|
+
type = "webpage" # default
|
1071
|
+
for id in self.data_providers:
|
1072
|
+
loader = self.data_providers[id]
|
1073
|
+
if hasattr(loader, "is_supported_attachment"):
|
1074
|
+
if loader.is_supported_attachment(url):
|
1075
|
+
type = id
|
1076
|
+
break
|
1077
|
+
print("Selected web data loader: {}".format(type))
|
1081
1078
|
return type
|
1082
1079
|
|
1083
1080
|
def remove_attachment(self, index_path: str, doc_id: str) -> bool:
|
@@ -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.11.
|
9
|
+
# Updated Date: 2024.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
class PidData():
|
@@ -17,6 +17,7 @@ class PidData():
|
|
17
17
|
self.meta = meta
|
18
18
|
self.images_appended = []
|
19
19
|
self.urls_appended = []
|
20
|
+
self.files_appended = []
|
20
21
|
self.buffer = ""
|
21
22
|
self.prev_position = None # previous cursor position (for chunk append)
|
22
23
|
self.is_cmd = False
|
@@ -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.11.
|
9
|
+
# Updated Date: 2024.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
class PidData():
|
@@ -17,5 +17,6 @@ class PidData():
|
|
17
17
|
self.meta = meta
|
18
18
|
self.images_appended = []
|
19
19
|
self.urls_appended = []
|
20
|
+
self.files_appended = []
|
20
21
|
self.buffer = ""
|
21
22
|
self.is_cmd = False
|
@@ -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.11.
|
9
|
+
# Updated Date: 2024.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import os
|
@@ -167,10 +167,12 @@ class Body:
|
|
167
167
|
if num is not None and num_all is not None and num_all > 1:
|
168
168
|
num_str = " [{}]".format(num)
|
169
169
|
url, path = self.window.core.filesystem.extract_local_url(url)
|
170
|
-
|
171
|
-
<
|
170
|
+
basename = os.path.basename(path)
|
171
|
+
return """<div class="extra-src-img-box" title="{url}"><div class="img-outer"><div class="img-wrapper"><a href="{url}"><img src="{path}" class="image"></a></div>
|
172
|
+
<a href="{url}" class="title">{title}</a></div></div>""". \
|
172
173
|
format(prefix=trans('chat.prefix.img'),
|
173
174
|
url=url,
|
175
|
+
title=basename,
|
174
176
|
path=path,
|
175
177
|
num=num_str)
|
176
178
|
|
@@ -183,13 +185,19 @@ class Body:
|
|
183
185
|
:param num_all: number of all URLs
|
184
186
|
:return: HTML code
|
185
187
|
"""
|
188
|
+
icon_path = os.path.join(
|
189
|
+
self.window.core.config.get_app_path(),
|
190
|
+
"data", "icons", "public_filled.svg"
|
191
|
+
)
|
192
|
+
icon = '<img src="file://{}" width="25" height="25" valign="middle" class="extra-src-icon">'.format(icon_path)
|
186
193
|
num_str = ""
|
187
194
|
if num is not None and num_all is not None and num_all > 1:
|
188
195
|
num_str = " [{}]".format(num)
|
189
|
-
return """<b>{
|
190
|
-
format(
|
191
|
-
|
192
|
-
|
196
|
+
return """{icon}<b>{num}</b> <a href="{url}" title="{url}">{url}</a>""". \
|
197
|
+
format(url=url,
|
198
|
+
num=num_str,
|
199
|
+
icon=icon,
|
200
|
+
)
|
193
201
|
|
194
202
|
def get_docs_html(self, docs: list) -> str:
|
195
203
|
"""
|
@@ -223,8 +231,16 @@ class Body:
|
|
223
231
|
except Exception as e:
|
224
232
|
pass
|
225
233
|
|
234
|
+
icon_path = os.path.join(
|
235
|
+
self.window.core.config.get_app_path(),
|
236
|
+
"data", "icons", "db.svg"
|
237
|
+
)
|
238
|
+
icon = '<img src="file://{}" width="25" height="25" valign="middle" class="extra-src-icon">'.format(icon_path)
|
226
239
|
if html_sources != "":
|
227
|
-
html += "<p
|
240
|
+
html += "<p>{icon}<small><b>{prefix}:</b></small></p>".format(
|
241
|
+
prefix=trans('chat.prefix.doc'),
|
242
|
+
icon=icon,
|
243
|
+
)
|
228
244
|
html += "<div class=\"cmd\">"
|
229
245
|
html += "<p>" + html_sources + "</p>"
|
230
246
|
html += "</div> "
|
@@ -239,15 +255,21 @@ class Body:
|
|
239
255
|
:param num_all: number of all files
|
240
256
|
:return: HTML code
|
241
257
|
"""
|
258
|
+
icon_path = os.path.join(
|
259
|
+
self.window.core.config.get_app_path(),
|
260
|
+
"data", "icons", "attachments.svg"
|
261
|
+
)
|
262
|
+
icon = '<img src="file://{}" width="25" height="25" valign="middle" class="extra-src-icon">'.format(icon_path)
|
242
263
|
num_str = ""
|
243
264
|
if num is not None and num_all is not None and num_all > 1:
|
244
265
|
num_str = " [{}]".format(num)
|
245
266
|
url, path = self.window.core.filesystem.extract_local_url(url)
|
246
|
-
return """<
|
247
|
-
format(
|
248
|
-
url=url,
|
267
|
+
return """{icon} <b>{num}</b> <a href="{url}">{path}</a>""". \
|
268
|
+
format(url=url,
|
249
269
|
path=path,
|
250
|
-
num=num_str
|
270
|
+
num=num_str,
|
271
|
+
icon=icon,
|
272
|
+
)
|
251
273
|
|
252
274
|
def prepare_tool_extra(self, ctx: CtxItem) -> str:
|
253
275
|
"""
|
pygpt_net/core/render/web/pid.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.11.
|
9
|
+
# Updated Date: 2024.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
from pygpt_net.utils import trans
|
@@ -20,6 +20,7 @@ class PidData():
|
|
20
20
|
self.meta = meta
|
21
21
|
self.images_appended = []
|
22
22
|
self.urls_appended = []
|
23
|
+
self.files_appended = []
|
23
24
|
self.buffer = "" # stream buffer
|
24
25
|
self.is_cmd = False
|
25
26
|
self.html = "" # html buffer
|
@@ -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.11.
|
9
|
+
# Updated Date: 2024.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import json
|
@@ -420,16 +420,20 @@ class Renderer(BaseRenderer):
|
|
420
420
|
# files and attachments, TODO check attachments
|
421
421
|
c = len(ctx.files)
|
422
422
|
if c > 0:
|
423
|
+
files_html = []
|
423
424
|
n = 1
|
424
425
|
for file in ctx.files:
|
425
|
-
if file in appended:
|
426
|
+
if file in appended or file in self.pids[pid].files_appended:
|
426
427
|
continue
|
427
428
|
try:
|
428
429
|
appended.append(file)
|
429
|
-
|
430
|
+
files_html.append(self.body.get_file_html(file, n, c))
|
431
|
+
self.pids[pid].files_appended.append(file)
|
430
432
|
n += 1
|
431
433
|
except Exception as e:
|
432
434
|
pass
|
435
|
+
if files_html:
|
436
|
+
html += "<br/>" + "<br/>".join(files_html)
|
433
437
|
|
434
438
|
# urls
|
435
439
|
c = len(ctx.urls)
|
@@ -519,6 +523,7 @@ class Renderer(BaseRenderer):
|
|
519
523
|
self.clear_chunks(pid)
|
520
524
|
self.pids[pid].images_appended = []
|
521
525
|
self.pids[pid].urls_appended = []
|
526
|
+
self.pids[pid].files_appended = []
|
522
527
|
self.get_output_node_by_pid(pid).reset_current_content()
|
523
528
|
self.reset_names_by_pid(pid)
|
524
529
|
|
pygpt_net/data/config/modes.json
CHANGED
pygpt_net/data/css/web.css
CHANGED
@@ -26,10 +26,76 @@ body {{
|
|
26
26
|
-webkit-border-radius: 1ex;
|
27
27
|
-webkit-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.75);
|
28
28
|
}}
|
29
|
+
a {{
|
30
|
+
text-decoration: none;
|
31
|
+
color: #a1b5c4 !important;
|
32
|
+
}}
|
33
|
+
a:hover {{
|
34
|
+
cursor: pointer !important;
|
35
|
+
text-decoration: underline;
|
36
|
+
}}
|
29
37
|
p {{
|
30
38
|
margin-top: 5px;
|
31
39
|
margin-bottom: 5px;
|
32
40
|
}}
|
41
|
+
.extra-src-icon {{
|
42
|
+
padding-right: 2px;
|
43
|
+
}}
|
44
|
+
.extra-src-img-box {{
|
45
|
+
display: inline-block;
|
46
|
+
text-align: center;
|
47
|
+
padding: 5px;
|
48
|
+
margin: 5px;
|
49
|
+
max-width: 400px;
|
50
|
+
height: auto;
|
51
|
+
white-space: pre-wrap;
|
52
|
+
word-break: break-all !important;
|
53
|
+
}}
|
54
|
+
.extra-src-img-box:hover {{
|
55
|
+
cursor: pointer;
|
56
|
+
}}
|
57
|
+
.extra-src-img-box .title {{
|
58
|
+
width: 400px;
|
59
|
+
overflow: hidden;
|
60
|
+
white-space: nowrap;
|
61
|
+
text-overflow: ellipsis;
|
62
|
+
display: block;
|
63
|
+
text-align: center;
|
64
|
+
padding: 0;
|
65
|
+
margin: 0;
|
66
|
+
padding-top: 10px;
|
67
|
+
display: block;
|
68
|
+
font-size: 0.95rem;
|
69
|
+
}}
|
70
|
+
.extra-src-img-box .img-outer {{
|
71
|
+
display: flex;
|
72
|
+
flex-direction: column;
|
73
|
+
}}
|
74
|
+
.extra-src-img-box .img-wrapper {{
|
75
|
+
position: relative;
|
76
|
+
overflow: hidden;
|
77
|
+
border: 1px solid #000;
|
78
|
+
background: #000;
|
79
|
+
width: 400px;
|
80
|
+
height: 280px;
|
81
|
+
margin: 0;
|
82
|
+
margin-bottom: 0px !important;
|
83
|
+
border-radius: 5px;
|
84
|
+
-webkit-box-shadow: 8px 8px 22px -16px rgba(0, 0, 0, 1);
|
85
|
+
-moz-box-shadow: 8px 8px 22px -16px rgba(0, 0, 0, 1);
|
86
|
+
box-shadow: 8px 8px 22px -16px rgba(0, 0, 0, 1);
|
87
|
+
}}
|
88
|
+
.extra-src-img-box .img-wrapper:hover {{
|
89
|
+
border: 1px solid gray;
|
90
|
+
}}
|
91
|
+
.extra-src-img-box img {{
|
92
|
+
margin-bottom: 2px;
|
93
|
+
padding-bottom: 0px;
|
94
|
+
display: block;
|
95
|
+
width: 100%;
|
96
|
+
height: 100%;
|
97
|
+
object-fit: cover;
|
98
|
+
}}
|
33
99
|
.msg-user {{
|
34
100
|
white-space: pre-wrap;
|
35
101
|
width: auto;
|
@@ -52,6 +118,10 @@ p {{
|
|
52
118
|
.msg-extra {{
|
53
119
|
margin-top: 10px;
|
54
120
|
margin-bottom: 0px;
|
121
|
+
color: gray;
|
122
|
+
}}
|
123
|
+
.msg-extra a {{
|
124
|
+
color: gray;
|
55
125
|
}}
|
56
126
|
.msg-user .msg-extra {{
|
57
127
|
font-weight: bold;
|
pygpt_net/data/css/web.dark.css
CHANGED
pygpt_net/data/css/web.light.css
CHANGED
@@ -8,7 +8,7 @@ about.thanks.sponsors = Sponsoren
|
|
8
8
|
about.thanks.supporters = Unterstützer
|
9
9
|
action.add = Hinzufügen
|
10
10
|
action.clear = Löschen
|
11
|
-
action.cmd.expand =
|
11
|
+
action.cmd.expand = JSON-Ausgabe
|
12
12
|
action.copy = Kopieren
|
13
13
|
action.ctx_copy_id = ID kopieren
|
14
14
|
action.ctx.indexed = Zuletzt indiziert am
|
@@ -9,7 +9,7 @@ about.thanks.supporters = Supporters
|
|
9
9
|
action.add = Add
|
10
10
|
action.clear = Clear
|
11
11
|
action.close = Close
|
12
|
-
action.cmd.expand =
|
12
|
+
action.cmd.expand = JSON output
|
13
13
|
action.copy = Copy
|
14
14
|
action.ctx_copy_id = Copy ID
|
15
15
|
action.ctx.indexed = Last indexed at
|
@@ -8,7 +8,7 @@ about.thanks.sponsors = Patrocinadores
|
|
8
8
|
about.thanks.supporters = Colaboradores
|
9
9
|
action.add = Añadir
|
10
10
|
action.clear = Limpiar
|
11
|
-
action.cmd.expand =
|
11
|
+
action.cmd.expand = salida JSON
|
12
12
|
action.copy = Copiar
|
13
13
|
action.ctx_copy_id = Copiar ID
|
14
14
|
action.ctx.indexed = Última indexación el
|
@@ -8,7 +8,7 @@ about.thanks.sponsors = Sponsors
|
|
8
8
|
about.thanks.supporters = Supporteurs
|
9
9
|
action.add = Ajouter
|
10
10
|
action.clear = Effacer
|
11
|
-
action.cmd.expand =
|
11
|
+
action.cmd.expand = résultat JSON
|
12
12
|
action.copy = Copier
|
13
13
|
action.ctx_copy_id = Copier l'ID
|
14
14
|
action.ctx.indexed = Dernière indexation le
|
@@ -8,7 +8,7 @@ about.thanks.sponsors = Sponsor
|
|
8
8
|
about.thanks.supporters = Sostenitori
|
9
9
|
action.add = Aggiungi
|
10
10
|
action.clear = Cancella
|
11
|
-
action.cmd.expand =
|
11
|
+
action.cmd.expand = output JSON
|
12
12
|
action.copy = Copia
|
13
13
|
action.ctx_copy_id = Copia ID
|
14
14
|
action.ctx.indexed = Ultima indicizzazione il
|
@@ -8,7 +8,7 @@ about.thanks.sponsors = Sponsorzy
|
|
8
8
|
about.thanks.supporters = Wspierający
|
9
9
|
action.add = Dodaj
|
10
10
|
action.clear = Wyczyść
|
11
|
-
action.cmd.expand =
|
11
|
+
action.cmd.expand = wynik JSON
|
12
12
|
action.copy = Kopiuj
|
13
13
|
action.ctx_copy_id = Kopiuj ID
|
14
14
|
action.ctx.indexed = Ostatnio zindeksowane
|
@@ -8,7 +8,7 @@ about.thanks.sponsors = Спонсори
|
|
8
8
|
about.thanks.supporters = Підтримувачі
|
9
9
|
action.add = Додати
|
10
10
|
action.clear = Очистити
|
11
|
-
action.cmd.expand =
|
11
|
+
action.cmd.expand = результат JSON
|
12
12
|
action.copy = Копіювати
|
13
13
|
action.ctx_copy_id = Копіювати ID
|
14
14
|
action.ctx.indexed = Останнє індексування в
|
@@ -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.11.
|
9
|
+
# Updated Date: 2024.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
import os.path
|
@@ -140,7 +140,7 @@ class Runner:
|
|
140
140
|
|
141
141
|
# append to ctx
|
142
142
|
ctx.files = paths
|
143
|
-
ctx.images = images_list
|
143
|
+
ctx.images = self.plugin.window.core.filesystem.make_local_list(list(images_list))
|
144
144
|
return paths
|
145
145
|
|
146
146
|
def handle_result_ipython(self, ctx: CtxItem, response) -> str:
|
@@ -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.11.
|
9
|
+
# Updated Date: 2024.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
from PySide6.QtCore import Slot, QTimer
|
@@ -141,7 +141,9 @@ class Plugin(BasePlugin):
|
|
141
141
|
self.window.controller.attachment.clear_silent()
|
142
142
|
path = self.window.controller.painter.capture.screenshot(attach_cursor=True,
|
143
143
|
silent=True) # attach screenshot
|
144
|
-
|
144
|
+
|
145
|
+
img_path = self.window.core.filesystem.make_local(path)
|
146
|
+
ctx.images.append(img_path)
|
145
147
|
#ctx.images_before.append(path)
|
146
148
|
|
147
149
|
context = BridgeContext()
|
@@ -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.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
from llama_index.core.readers.base import BaseReader
|
@@ -75,6 +75,15 @@ class BaseLoader:
|
|
75
75
|
return args.get("url")
|
76
76
|
return ""
|
77
77
|
|
78
|
+
def is_supported_attachment(self, source: str) -> bool:
|
79
|
+
"""
|
80
|
+
Check if attachment is supported by loader
|
81
|
+
|
82
|
+
:param source: attachment source
|
83
|
+
:return: True if supported
|
84
|
+
"""
|
85
|
+
return False
|
86
|
+
|
78
87
|
def get(self) -> BaseReader:
|
79
88
|
"""
|
80
89
|
Get reader instance
|
@@ -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.11.26 04:00:00 #
|
10
10
|
# ================================================== #
|
11
11
|
|
12
12
|
from llama_index.core.readers.base import BaseReader
|
@@ -52,3 +52,21 @@ class Loader(BaseLoader):
|
|
52
52
|
args = {}
|
53
53
|
args["ytlinks"] = [kwargs.get("url")] # list of links
|
54
54
|
return args
|
55
|
+
|
56
|
+
def is_supported_attachment(self, source: str) -> bool:
|
57
|
+
"""
|
58
|
+
Check if attachment is supported by loader
|
59
|
+
|
60
|
+
:param source: attachment source
|
61
|
+
:return: True if supported
|
62
|
+
"""
|
63
|
+
yt_prefix = [
|
64
|
+
"https://youtube.com",
|
65
|
+
"https://youtu.be",
|
66
|
+
"https://www.youtube.com",
|
67
|
+
"https://m.youtube.com",
|
68
|
+
]
|
69
|
+
for prefix in yt_prefix:
|
70
|
+
if source.startswith(prefix):
|
71
|
+
return True
|
72
|
+
return False
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pygpt-net
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.33
|
4
4
|
Summary: Desktop AI Assistant powered by models: OpenAI o1, GPT-4o, GPT-4, GPT-4 Vision, GPT-3.5, DALL-E 3, Llama 3, Mistral, Gemini, Claude, Bielik, and other models supported by Langchain, Llama Index, and Ollama. Features include chatbot, text completion, image generation, vision analysis, speech-to-text, internet access, file handling, command execution and more.
|
5
5
|
Home-page: https://pygpt.net
|
6
6
|
License: MIT
|
@@ -92,7 +92,7 @@ Description-Content-Type: text/markdown
|
|
92
92
|
|
93
93
|
[](https://snapcraft.io/pygpt)
|
94
94
|
|
95
|
-
Release: **2.4.
|
95
|
+
Release: **2.4.33** | build: **2024.11.26** | Python: **>=3.10, <3.12**
|
96
96
|
|
97
97
|
> Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
|
98
98
|
>
|
@@ -245,11 +245,11 @@ pip install pygpt-net
|
|
245
245
|
pygpt
|
246
246
|
```
|
247
247
|
|
248
|
-
##
|
248
|
+
## Running from GitHub source code
|
249
249
|
|
250
250
|
An alternative method is to download the source code from `GitHub` and execute the application using the Python interpreter (>=3.10, <3.12).
|
251
251
|
|
252
|
-
###
|
252
|
+
### Install with pip
|
253
253
|
|
254
254
|
1. Clone git repository or download .zip file:
|
255
255
|
|
@@ -277,7 +277,7 @@ pip install -r requirements.txt
|
|
277
277
|
python3 run.py
|
278
278
|
```
|
279
279
|
|
280
|
-
|
280
|
+
### Install with Poetry
|
281
281
|
|
282
282
|
1. Clone git repository or download .zip file:
|
283
283
|
|
@@ -3746,6 +3746,11 @@ may consume additional tokens that are not displayed in the main window.
|
|
3746
3746
|
|
3747
3747
|
## Recent changes:
|
3748
3748
|
|
3749
|
+
**2.4.33 (2024-11-26)**
|
3750
|
+
|
3751
|
+
- Improved CSS and rendering of file and image lists.
|
3752
|
+
- Added displaying of used attachments in the chat window.
|
3753
|
+
|
3749
3754
|
**2.4.32 (2024-11-26)**
|
3750
3755
|
|
3751
3756
|
- The "Add URL" option added to the "Attachments" tab allows users to include content from a given website as additional context. Currently, it only supports standard web pages and video transcription for YouTube links. More "web" options will be added in the future.
|
@@ -1,9 +1,9 @@
|
|
1
|
-
CHANGELOG.md,sha256=
|
2
|
-
README.md,sha256=
|
1
|
+
CHANGELOG.md,sha256=XNjJXQqzZoUNJAmAdBzAQ-NDZD90u1rmx1Bkrw_e16c,76208
|
2
|
+
README.md,sha256=kz22pXKZmr6pZRUXBbezs4RcNFq7qKmeSVTm-xumcjI,157106
|
3
3
|
icon.png,sha256=CzcINJaU23a9hNjsDlDNbyuiEvKZ4Wg6DQVYF6SpuRg,13970
|
4
|
-
pygpt_net/CHANGELOG.txt,sha256=
|
4
|
+
pygpt_net/CHANGELOG.txt,sha256=WUVPO45ESjOeB59UlS5k88Eqt3iH4cHbtxmf34zYYbs,74781
|
5
5
|
pygpt_net/LICENSE,sha256=6Ku72-zJ8wO5VIR87UoJ5P_coCVjPghaFL9ZF2jLp7E,1146
|
6
|
-
pygpt_net/__init__.py,sha256=
|
6
|
+
pygpt_net/__init__.py,sha256=Bs977ZbK0kfm1WTigIePMFXwgKNg9IdnYrD0_NPzBjI,1067
|
7
7
|
pygpt_net/app.py,sha256=Q7g-2UlF7FlEOBytbGb_nrjT4zEio2HzfzQd687QuUo,15930
|
8
8
|
pygpt_net/config.py,sha256=hwleTfPpI8SpFwUH5I9VVgCFC-cgeeoHhxlezNdJPBE,15731
|
9
9
|
pygpt_net/container.py,sha256=BemiVZPpPNIzfB-ZvnZeeBPFu-AcX2c30OqYFylEjJc,4023
|
@@ -28,7 +28,7 @@ pygpt_net/controller/calendar/__init__.py,sha256=aAYEAex5UNoB7LHdNSKssls2Rdc877E
|
|
28
28
|
pygpt_net/controller/calendar/note.py,sha256=B19cNKyD9UODZo7LdyST0U3I3519jsqVgWJp5UDTgVU,10841
|
29
29
|
pygpt_net/controller/camera.py,sha256=t_ZgevP3zrsBe_A4Yx_WO4PfMMfYbsezd9NdQzkMpOQ,16522
|
30
30
|
pygpt_net/controller/chat/__init__.py,sha256=IJwIVfwmbc5ItSTvkOb7VVVyelEpPPbB-AbXJzfPywI,3002
|
31
|
-
pygpt_net/controller/chat/attachment.py,sha256=
|
31
|
+
pygpt_net/controller/chat/attachment.py,sha256=00TU_Wy7O_DopPZi5K_1HuJA0RbSIt6jeahlHnhWFNY,20854
|
32
32
|
pygpt_net/controller/chat/command.py,sha256=_lXHki5pbTi8Pvz_BzP3VxGUM_0Ztr1mE5rsatPmSoE,2833
|
33
33
|
pygpt_net/controller/chat/common.py,sha256=uLRRT1ZNGLJiiyJ42lJ7rjDwhqPEfX1RD-EnoFhBmmU,13875
|
34
34
|
pygpt_net/controller/chat/files.py,sha256=Q53Sr7-uJwI_L1FKa1raApFvZ4AI0Eoj766iY9a6Iik,2705
|
@@ -121,7 +121,7 @@ pygpt_net/core/assistants/__init__.py,sha256=nnKKqcP5Xtx9daGUHAX8FT2JwG3r5syc6mS
|
|
121
121
|
pygpt_net/core/assistants/files.py,sha256=cg32PsmdM3rB6eNkKo8CP9aSKNqoml1YKniGl9rXSlM,9796
|
122
122
|
pygpt_net/core/assistants/store.py,sha256=vzMN2dOKIcH7NCGA6UzZkXGal1jAioOzNTpAHzObgOo,7990
|
123
123
|
pygpt_net/core/attachments/__init__.py,sha256=pI3waoQhoSzGCK4brpGvKwve8-dvY26VAXka0NTtkKM,12151
|
124
|
-
pygpt_net/core/attachments/context.py,sha256=
|
124
|
+
pygpt_net/core/attachments/context.py,sha256=zPZZGrlu1Uo3d6BjBlaIjpDSJvGjMM1p9DBFX2UF-54,19609
|
125
125
|
pygpt_net/core/attachments/worker.py,sha256=_aUCyi5-Mbz0IGfgY6QKBZ6MFz8aKRDfKasbBVXg7kU,1341
|
126
126
|
pygpt_net/core/audio.py,sha256=VMsnEN0ZMg5CaRSbWdkkKE51NG19-vIvnBnMX_Y6dvA,2708
|
127
127
|
pygpt_net/core/bridge/__init__.py,sha256=4XRmueSSshAqstjgDp3jFTSCwSTaWlzaU4d-gBK46x8,9292
|
@@ -146,7 +146,7 @@ pygpt_net/core/debug/agent.py,sha256=BylgNCl8n8aV2GCK5cQZVwobm1kjH_ETtgEiObilvgQ
|
|
146
146
|
pygpt_net/core/debug/assistants.py,sha256=fUYVdMsdtfWd3njirvw2lvBv7CgPHdz_9ZSDVr2VsEo,2672
|
147
147
|
pygpt_net/core/debug/attachments.py,sha256=shiRf3AwR4_lAttryNN7akSyu9_0nRuCFxBLLTblDz4,1638
|
148
148
|
pygpt_net/core/debug/config.py,sha256=MSxRLVIWZ0VHrB4p66fyM-nfQLMi2D6enDzJLDQEb40,2305
|
149
|
-
pygpt_net/core/debug/context.py,sha256=
|
149
|
+
pygpt_net/core/debug/context.py,sha256=ePQ1UedYr3K9UIESqXOE2PHkSZ2NCB52aB7xgmzfGCY,5750
|
150
150
|
pygpt_net/core/debug/db.py,sha256=TQtNpCjrcFw943nae3OIyq0af_okjr-aTfFKS_QhQQk,776
|
151
151
|
pygpt_net/core/debug/events.py,sha256=VbyyrzLcC0GhvdB8GyCl7YBzQyTKvRK-UPdpgwyh70c,1992
|
152
152
|
pygpt_net/core/debug/indexes.py,sha256=M8Uf6NT1LswyXOdpZ_QzkBbhvv08U1rhMb6PV7OaNtE,5416
|
@@ -177,7 +177,7 @@ pygpt_net/core/history.py,sha256=LnSyB3nuXZxXeaiNdjg4Q4yWhJM5hA2QN5dy_AY9Pxo,309
|
|
177
177
|
pygpt_net/core/idx/__init__.py,sha256=7LlN_CmhOJVLuZFp-XihNtoQJXFxlA2ygYAcaIAfU8c,17238
|
178
178
|
pygpt_net/core/idx/chat.py,sha256=rqi0eGHSnoVMNhjWabIHOj9nW3l-VZTDp9j-r-Fre_E,19972
|
179
179
|
pygpt_net/core/idx/context.py,sha256=oC9Do2_YdOZ2yJSh8C1_FbxUdkB6bT20JyhjShDJUkk,3049
|
180
|
-
pygpt_net/core/idx/indexing.py,sha256=
|
180
|
+
pygpt_net/core/idx/indexing.py,sha256=korUe-G_cV9Vf2PrMh7LJfHEntHCmcUnw9GQ5TjBhMw,41011
|
181
181
|
pygpt_net/core/idx/llm.py,sha256=gys1i0qRpdbsUfgkTq4bHw0w89Yz2-s5CQueO5vDUCo,5027
|
182
182
|
pygpt_net/core/idx/metadata.py,sha256=tLVbaq6xUPuzqL7CV6OYCQ-_S4uJczMCWzY4iIsD8cI,5304
|
183
183
|
pygpt_net/core/idx/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -206,19 +206,19 @@ pygpt_net/core/render/markdown/__init__.py,sha256=19xPDIYeoDn3Sf1tpcvXtxLaaKkjs0
|
|
206
206
|
pygpt_net/core/render/markdown/body.py,sha256=CUO246hZHkE9_h8ml_oIKtybgyaYYMwI5Z1L01Z-_1c,6918
|
207
207
|
pygpt_net/core/render/markdown/helpers.py,sha256=a7LSL_jKVfxDU5erqU8tc5shfmhE-afIcb_GUH4Io6Y,2683
|
208
208
|
pygpt_net/core/render/markdown/parser.py,sha256=4lCC_pCWmi-SUli4nnDH-FZEbBi0SnVl0FoL0ZBuNHo,5450
|
209
|
-
pygpt_net/core/render/markdown/pid.py,sha256=
|
209
|
+
pygpt_net/core/render/markdown/pid.py,sha256=bRAOdL8bS-LSfOKReWK3nu-BUZ2qfNchrAsrkxRKlHU,851
|
210
210
|
pygpt_net/core/render/markdown/renderer.py,sha256=ybUpnBmEppYHtNw4Qz15gkenKdntVev55NAxEBZ8-j4,18114
|
211
211
|
pygpt_net/core/render/plain/__init__.py,sha256=19xPDIYeoDn3Sf1tpcvXtxLaaKkjs0nDQ7-4GqTfeRk,489
|
212
212
|
pygpt_net/core/render/plain/body.py,sha256=-u0Lo1U2ID6NTFysKe6L8vE7k3jCvIiI78cqSlyPYns,3957
|
213
213
|
pygpt_net/core/render/plain/helpers.py,sha256=qf1w6EXa6cCFcMkipOA8MzxIRFIYNVv3uXZ3MT2XwfI,1628
|
214
|
-
pygpt_net/core/render/plain/pid.py,sha256=
|
214
|
+
pygpt_net/core/render/plain/pid.py,sha256=yngcS0o1lBQ2RlRzWrs5JwqT_ThamvnWftp3cXcyiG8,770
|
215
215
|
pygpt_net/core/render/plain/renderer.py,sha256=W5qZinG-5W_Ady-DNEkYSyTQXXdpfGzvoUYYV-VEM30,14393
|
216
216
|
pygpt_net/core/render/web/__init__.py,sha256=istp5dsn6EkLEP7lOBeDb8RjodUcWZqjcEvTroaTT-w,489
|
217
|
-
pygpt_net/core/render/web/body.py,sha256=
|
217
|
+
pygpt_net/core/render/web/body.py,sha256=sIJe7MPPvmKpQ9vgJno9wBUp_Qj4O2Oz_7PxE9JGUz8,28661
|
218
218
|
pygpt_net/core/render/web/helpers.py,sha256=CcKB710SiKe3xGAB4jq_1XtLxQdD-XiVIlwqiqX7pdc,3062
|
219
219
|
pygpt_net/core/render/web/parser.py,sha256=upaTzDhKyGUVEU91JfeSt-luKfx9sS1uCddi_NjStt0,9998
|
220
|
-
pygpt_net/core/render/web/pid.py,sha256=
|
221
|
-
pygpt_net/core/render/web/renderer.py,sha256=
|
220
|
+
pygpt_net/core/render/web/pid.py,sha256=ZyYmzB01adMqY9-1Zi0QhGgrzyg-E9xC_VxqjNvTHWk,1331
|
221
|
+
pygpt_net/core/render/web/renderer.py,sha256=MJfvCzT1gXn2geaOwH3eLbpQKbywuokatHkiQwHcOpg,34620
|
222
222
|
pygpt_net/core/render/web/syntax_highlight.py,sha256=QSLGF5cJL_Xeqej7_TYwY_5C2w9enXV_cMEuaJ3C43U,2005
|
223
223
|
pygpt_net/core/settings.py,sha256=-dy14W0zUnYikGz-ymJxmzOhtNxkvlyJ7WhOSPdfPdE,7635
|
224
224
|
pygpt_net/core/tabs/__init__.py,sha256=FkAOE28Z4nDi9je5mDu0aMMKJCnnwcJTeEAXe3HhTPg,19298
|
@@ -240,9 +240,9 @@ pygpt_net/css_rc.py,sha256=i13kX7irhbYCWZ5yJbcMmnkFp_UfS4PYnvRFSPF7XXo,11349
|
|
240
240
|
pygpt_net/data/audio/click_off.mp3,sha256=aNiRDP1pt-Jy7ija4YKCNFBwvGWbzU460F4pZWZDS90,65201
|
241
241
|
pygpt_net/data/audio/click_on.mp3,sha256=qfdsSnthAEHVXzeyN4LlC0OvXuyW8p7stb7VXtlvZ1k,65201
|
242
242
|
pygpt_net/data/audio/ok.mp3,sha256=LTiV32pEBkpUGBkKkcOdOFB7Eyt_QoP2Nv6c5AaXftk,32256
|
243
|
-
pygpt_net/data/config/config.json,sha256=
|
244
|
-
pygpt_net/data/config/models.json,sha256=
|
245
|
-
pygpt_net/data/config/modes.json,sha256=
|
243
|
+
pygpt_net/data/config/config.json,sha256=VR0hSB1LqLAxT9_lsSVUdF4r396zg3oL-YGqNEwIqnU,19177
|
244
|
+
pygpt_net/data/config/models.json,sha256=_TumQP0l3v3Z3J_w_eg2IYN8Ohbc9UBa0KO_UD12gh8,43336
|
245
|
+
pygpt_net/data/config/modes.json,sha256=CqdNpGP5TDgFLqmj4usQCoIfECfVYJ-iKRGrlb2Ua14,1775
|
246
246
|
pygpt_net/data/config/presets/agent_openai.json,sha256=vMTR-soRBiEZrpJJHuFLWyx8a3Ez_BqtqjyXgxCAM_Q,733
|
247
247
|
pygpt_net/data/config/presets/agent_openai_assistant.json,sha256=awJw9lNTGpKML6SJUShVn7lv8AXh0oic7wBeyoN7AYs,798
|
248
248
|
pygpt_net/data/config/presets/agent_planner.json,sha256=a6Rv58Bnm2STNWB0Rw_dGhnsz6Lb3J8_GwsUVZaTIXc,742
|
@@ -270,9 +270,9 @@ pygpt_net/data/css/markdown.light.css,sha256=UZdv0jtuFgJ_4bYWsDaDQ4X4AP9tVNLUHBA
|
|
270
270
|
pygpt_net/data/css/style.css,sha256=JgE5Y6ULYtNDVF49jhb_PfGPJVxCFj5DNMiobPopX64,400
|
271
271
|
pygpt_net/data/css/style.dark.css,sha256=5GqBiCiTdofU3AfgbuQEezFPE3iSf_mx3dkU4kAtygQ,729
|
272
272
|
pygpt_net/data/css/style.light.css,sha256=U6sZvBBk4Gdnh9KPiGfQmTGsx_BJlzxpFvQXVXHag_Y,1726
|
273
|
-
pygpt_net/data/css/web.css,sha256=
|
274
|
-
pygpt_net/data/css/web.dark.css,sha256=
|
275
|
-
pygpt_net/data/css/web.light.css,sha256=
|
273
|
+
pygpt_net/data/css/web.css,sha256=vqfmbHGCMetgPbqLsICMgV5lj0f1Sy_qw_IHPXGnsLA,5805
|
274
|
+
pygpt_net/data/css/web.dark.css,sha256=x0b3DYWv0-XeUgCSKajIpkAXAEEg-YR7GIg94pwXO7A,1319
|
275
|
+
pygpt_net/data/css/web.light.css,sha256=9yN6feInDe8X6rWgJfz61mwvbwyJ_u99nUWz0KurWo4,1249
|
276
276
|
pygpt_net/data/fonts/Lato/Lato-Black.ttf,sha256=iUTaWoYezgAYX6Fz6mUyTn1Hl6qGPG-g8D4GaAWXS2w,69484
|
277
277
|
pygpt_net/data/fonts/Lato/Lato-BlackItalic.ttf,sha256=G7asNGubFS-gk9VAMO_NBz4o5R7AB8-3bCAflv103mc,71948
|
278
278
|
pygpt_net/data/fonts/Lato/Lato-Bold.ttf,sha256=e3IFmfiu07rFuVMf7PZ1DI-n5ZO3J3ObwGkvzA9Vtng,73316
|
@@ -1470,14 +1470,14 @@ pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.woff,sha256=4U_tArGrp86fW
|
|
1470
1470
|
pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.woff2,sha256=cdUX1ngneHz6vfGGkUzDNY7aU543kxlB8rL9SiH2jAs,13568
|
1471
1471
|
pygpt_net/data/js/katex/katex.min.css,sha256=lVaKnUaQNG4pI71WHffQZVALLQF4LMZEk4nOia8U9ow,23532
|
1472
1472
|
pygpt_net/data/js/katex/katex.min.js,sha256=KLASOtKS2x8pUxWVzCDmlWJ4jhuLb0vtrgakbD6gDDo,276757
|
1473
|
-
pygpt_net/data/locale/locale.de.ini,sha256=
|
1474
|
-
pygpt_net/data/locale/locale.en.ini,sha256=
|
1475
|
-
pygpt_net/data/locale/locale.es.ini,sha256=
|
1476
|
-
pygpt_net/data/locale/locale.fr.ini,sha256=
|
1477
|
-
pygpt_net/data/locale/locale.it.ini,sha256=
|
1478
|
-
pygpt_net/data/locale/locale.pl.ini,sha256=
|
1479
|
-
pygpt_net/data/locale/locale.uk.ini,sha256=
|
1480
|
-
pygpt_net/data/locale/locale.zh.ini,sha256=
|
1473
|
+
pygpt_net/data/locale/locale.de.ini,sha256=dhzEhTFRhzhWD2r181U5Jac4G9w6ZjxPAe825h6Ore8,61324
|
1474
|
+
pygpt_net/data/locale/locale.en.ini,sha256=y9zakR_3VkbfSTCcShh-8YcV1QI9QJhDyM3CvLrGynE,73418
|
1475
|
+
pygpt_net/data/locale/locale.es.ini,sha256=4r5_Uo9pTSzLwvAAiBxTqpQ-UKSQN390PpieeeUhlpE,61459
|
1476
|
+
pygpt_net/data/locale/locale.fr.ini,sha256=CQJrueNJbIS8YL9wWUVPqTs2ymYvki5CcsPt1QA-t1M,63448
|
1477
|
+
pygpt_net/data/locale/locale.it.ini,sha256=sSjrjuWebc2n9xH0gOSu34kdw4hnSi4owvG6S-mKBd8,60341
|
1478
|
+
pygpt_net/data/locale/locale.pl.ini,sha256=72aY2ets8tZE1z1WiYoc5oOfzMNa2I9LmpJAJZ6rYQ0,60414
|
1479
|
+
pygpt_net/data/locale/locale.uk.ini,sha256=9xvPsvywtqASqIwLQ-RguuHY3NqEMpX--h_n8rLDPic,84288
|
1480
|
+
pygpt_net/data/locale/locale.zh.ini,sha256=IoFcOyr5DKuhd-JIj_IUzx0p5TZ4XeHwYIHdqYE58Xo,62383
|
1481
1481
|
pygpt_net/data/locale/plugin.agent.de.ini,sha256=BY28KpfFvgfVYJzcw2o5ScWnR4uuErIYGyc3NVHlmTw,1714
|
1482
1482
|
pygpt_net/data/locale/plugin.agent.en.ini,sha256=88LkZUpilbV9l4QDbMyIdq_K9sbWt-CQPpavEttPjJU,1489
|
1483
1483
|
pygpt_net/data/locale/plugin.agent.es.ini,sha256=bqaJQne8HPKFVtZ8Ukzo1TSqVW41yhYbGUqW3j2x1p8,1680
|
@@ -1702,7 +1702,7 @@ pygpt_net/plugin/cmd_code_interpreter/ipython/__init__.py,sha256=rPQNs2VsRwqR-_w
|
|
1702
1702
|
pygpt_net/plugin/cmd_code_interpreter/ipython/docker_kernel.py,sha256=HtN4_XiTBi60vy2I9VuFg2-Lxi9bmXmDHRGruOtUJtE,17165
|
1703
1703
|
pygpt_net/plugin/cmd_code_interpreter/ipython/local_kernel.py,sha256=iKDSViKSzEqCQAckQ013nqRgHccNahI6m-dsHp58YW8,6685
|
1704
1704
|
pygpt_net/plugin/cmd_code_interpreter/output.py,sha256=6MEQ_Xkpgn8banI3Pm3vnlMjKeZJmN4btOz_m0U6KOE,1989
|
1705
|
-
pygpt_net/plugin/cmd_code_interpreter/runner.py,sha256=
|
1705
|
+
pygpt_net/plugin/cmd_code_interpreter/runner.py,sha256=COb50Ldo_h5xgzhYAFK_7I30q6-DnFZ2Izhzl4uw8L8,19919
|
1706
1706
|
pygpt_net/plugin/cmd_code_interpreter/worker.py,sha256=U5ahn_LV7xGm_S05AfQlLM_deHEo9smQRzYAjenexvI,11397
|
1707
1707
|
pygpt_net/plugin/cmd_custom/__init__.py,sha256=L8hD1WkbRBdNsbR4iHbgSXHWszF6DxNRbgEIEi2Q_og,3911
|
1708
1708
|
pygpt_net/plugin/cmd_custom/config.py,sha256=PuD18kxtfBr2iag4WYnpqmO29ZMThktVT859KRmBnNA,2026
|
@@ -1714,7 +1714,7 @@ pygpt_net/plugin/cmd_files/worker.py,sha256=kcbt6EaBHDpcnGdbMQQkmySw9DQKnob3KI0a
|
|
1714
1714
|
pygpt_net/plugin/cmd_history/__init__.py,sha256=uR7Wyly2StrLaazvkFSiPYxLb5EN4ua5mBlMhQHY4HM,11023
|
1715
1715
|
pygpt_net/plugin/cmd_history/config.py,sha256=thG8H4K_k-piPm7lomUmga2bJT3W8wpdaR0iYbAoTUo,9661
|
1716
1716
|
pygpt_net/plugin/cmd_history/worker.py,sha256=-jGdiR94QHKOMISWIPtNLmCLFDG5UzibItvkbQx9KZo,6119
|
1717
|
-
pygpt_net/plugin/cmd_mouse_control/__init__.py,sha256=
|
1717
|
+
pygpt_net/plugin/cmd_mouse_control/__init__.py,sha256=cuFduYE50y9MmR5c0T3cMcI5yZsiKoQRDZ3KXSPo3VA,5050
|
1718
1718
|
pygpt_net/plugin/cmd_mouse_control/config.py,sha256=rcxyuOLWsLVBuPUtAT-PxcfcWXh6jitGeTY3z3GLLpU,12051
|
1719
1719
|
pygpt_net/plugin/cmd_mouse_control/worker.py,sha256=zfueHWtfYeiIz8zFfv6dqcehIPqzFaTFoNIcCkUH7y8,10986
|
1720
1720
|
pygpt_net/plugin/cmd_serial/__init__.py,sha256=elm0dnP0h9JYjCdhHbHN9Bj_Zoz3MefSgcicikHHSps,2936
|
@@ -1863,7 +1863,7 @@ pygpt_net/provider/llms/local.py,sha256=72BsTTT-v41s5qnmDKxSPBlgmTbc1MJBu6JGsoFU
|
|
1863
1863
|
pygpt_net/provider/llms/ollama.py,sha256=Y7C7aCmbPLmCWrBoI4jca-GkIY04JWhYQJrn4hojgEg,3374
|
1864
1864
|
pygpt_net/provider/llms/openai.py,sha256=EIH2ko-YEk02E5kuqBjxYskBCjr2O67YWsKyxh3l3Mk,3415
|
1865
1865
|
pygpt_net/provider/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1866
|
-
pygpt_net/provider/loaders/base.py,sha256=
|
1866
|
+
pygpt_net/provider/loaders/base.py,sha256=97qdnZVP6biXEkpzXXOEh67R2RtwkphHQRVMAEafDZs,2749
|
1867
1867
|
pygpt_net/provider/loaders/file_csv.py,sha256=sV2JrQ4EqdWc2-8dMjjBvT8x56ux07eB5jyO61EX3pQ,1258
|
1868
1868
|
pygpt_net/provider/loaders/file_docx.py,sha256=jWdF54bCWjOQgxezLtE2o25LNPIv9OgcnqcLoJDT4RA,1032
|
1869
1869
|
pygpt_net/provider/loaders/file_epub.py,sha256=sIB3ORYNdyFUrQrbiSLKuQ9OE2yuAP0628chvdfK8oA,1022
|
@@ -1923,7 +1923,7 @@ pygpt_net/provider/loaders/web_page.py,sha256=GVgy0QKS-1QZtX_Mg4ds587xNyaAJYoBsO
|
|
1923
1923
|
pygpt_net/provider/loaders/web_rss.py,sha256=q7hltE4VfBdVvEJ1-kSW7gbdROMQ1tOUg7l_H1NVi7o,1584
|
1924
1924
|
pygpt_net/provider/loaders/web_sitemap.py,sha256=Oy4Llw08_ZpBl1d9q-wXcSIXdGKFj4D_-KAk3qxF74Y,1853
|
1925
1925
|
pygpt_net/provider/loaders/web_twitter.py,sha256=HYZdIjtHbfhXNdMXJyzh-3hyFyZ6xya9T4O3ALGWDcE,2831
|
1926
|
-
pygpt_net/provider/loaders/web_yt.py,sha256=
|
1926
|
+
pygpt_net/provider/loaders/web_yt.py,sha256=V1OUjWFDov-ITtcqWiFfKaStTIolgkEvnbAxrx_7WQw,2129
|
1927
1927
|
pygpt_net/provider/vector_stores/__init__.py,sha256=5KTWc6GdGFa24zhOTI1uTK1v3fu19HRQs-vK5vxh4cs,7768
|
1928
1928
|
pygpt_net/provider/vector_stores/base.py,sha256=C-XlPmdt0wyXJIyGx978Y92cwkLFeK0xR_F0_buIkFg,3980
|
1929
1929
|
pygpt_net/provider/vector_stores/chroma.py,sha256=4n6RtGSPt2rs2DX6uCa7lTftS7pA4rxdyr-MUjKSsZ8,3053
|
@@ -2147,8 +2147,8 @@ pygpt_net/ui/widget/textarea/web.py,sha256=KIW8MnwDWjEAMdiLA2v1yZiFbf-PT4KkF55uh
|
|
2147
2147
|
pygpt_net/ui/widget/vision/__init__.py,sha256=8HT4tQFqQogEEpGYTv2RplKBthlsFKcl5egnv4lzzEw,488
|
2148
2148
|
pygpt_net/ui/widget/vision/camera.py,sha256=T8b5cmK6uhf_WSSxzPt_Qod8JgMnst6q8sQqRvgQiSA,2584
|
2149
2149
|
pygpt_net/utils.py,sha256=YhMvgy0wNt3roHIbbAnS-5SXOxOOIIvRRGd6FPTa6d0,6153
|
2150
|
-
pygpt_net-2.4.
|
2151
|
-
pygpt_net-2.4.
|
2152
|
-
pygpt_net-2.4.
|
2153
|
-
pygpt_net-2.4.
|
2154
|
-
pygpt_net-2.4.
|
2150
|
+
pygpt_net-2.4.33.dist-info/LICENSE,sha256=GLKQTnJOPK4dDIWfkAIM4GwOxKJXi5zcMGt7FjLR1xk,1126
|
2151
|
+
pygpt_net-2.4.33.dist-info/METADATA,sha256=rmBEIAZJl1UoRxK-cRONimDXN76RzRoCSniyyF_IQQ8,161908
|
2152
|
+
pygpt_net-2.4.33.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
2153
|
+
pygpt_net-2.4.33.dist-info/entry_points.txt,sha256=qvpII6UHIt8XfokmQWnCYQrTgty8FeJ9hJvOuUFCN-8,43
|
2154
|
+
pygpt_net-2.4.33.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|