pygpt-net 2.4.41__py3-none-any.whl → 2.4.44__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.
Files changed (183) hide show
  1. CHANGELOG.md +19 -0
  2. README.md +151 -71
  3. pygpt_net/CHANGELOG.txt +19 -0
  4. pygpt_net/__init__.py +3 -3
  5. pygpt_net/app.py +3 -1
  6. pygpt_net/controller/attachment.py +31 -3
  7. pygpt_net/controller/audio/__init__.py +2 -2
  8. pygpt_net/controller/camera.py +1 -10
  9. pygpt_net/controller/chat/attachment.py +37 -36
  10. pygpt_net/controller/chat/audio.py +2 -2
  11. pygpt_net/controller/config/placeholder.py +20 -4
  12. pygpt_net/controller/idx/common.py +7 -3
  13. pygpt_net/controller/ui/mode.py +16 -21
  14. pygpt_net/core/attachments/__init__.py +7 -2
  15. pygpt_net/core/attachments/context.py +52 -34
  16. pygpt_net/core/audio/__init__.py +4 -1
  17. pygpt_net/core/audio/whisper.py +37 -0
  18. pygpt_net/core/bridge/worker.py +2 -2
  19. pygpt_net/core/db/__init__.py +2 -1
  20. pygpt_net/core/debug/attachments.py +1 -0
  21. pygpt_net/core/debug/events.py +22 -10
  22. pygpt_net/core/debug/tabs.py +6 -3
  23. pygpt_net/core/history.py +3 -2
  24. pygpt_net/core/idx/__init__.py +23 -6
  25. pygpt_net/core/idx/chat.py +15 -5
  26. pygpt_net/core/idx/indexing.py +47 -14
  27. pygpt_net/core/idx/ui/__init__.py +22 -0
  28. pygpt_net/core/idx/ui/loaders.py +217 -0
  29. pygpt_net/core/installer.py +2 -4
  30. pygpt_net/core/models.py +62 -17
  31. pygpt_net/core/modes.py +11 -13
  32. pygpt_net/core/notepad.py +4 -4
  33. pygpt_net/core/plugins.py +27 -16
  34. pygpt_net/core/presets.py +20 -9
  35. pygpt_net/core/profile.py +11 -3
  36. pygpt_net/core/render/web/parser.py +3 -1
  37. pygpt_net/core/settings.py +5 -5
  38. pygpt_net/core/tabs/tab.py +10 -2
  39. pygpt_net/core/tokens.py +8 -6
  40. pygpt_net/core/web/__init__.py +105 -0
  41. pygpt_net/core/{web.py → web/helpers.py} +93 -67
  42. pygpt_net/data/config/config.json +4 -4
  43. pygpt_net/data/config/models.json +3 -3
  44. pygpt_net/data/config/modes.json +3 -3
  45. pygpt_net/data/config/settings.json +5 -5
  46. pygpt_net/data/locale/locale.de.ini +3 -3
  47. pygpt_net/data/locale/locale.en.ini +12 -9
  48. pygpt_net/data/locale/locale.es.ini +3 -3
  49. pygpt_net/data/locale/locale.fr.ini +3 -3
  50. pygpt_net/data/locale/locale.it.ini +3 -3
  51. pygpt_net/data/locale/locale.pl.ini +3 -3
  52. pygpt_net/data/locale/locale.uk.ini +3 -3
  53. pygpt_net/data/locale/locale.zh.ini +3 -3
  54. pygpt_net/data/locale/plugin.cmd_web.en.ini +2 -0
  55. pygpt_net/data/locale/plugin.mailer.en.ini +21 -0
  56. pygpt_net/item/attachment.py +5 -1
  57. pygpt_net/item/ctx.py +111 -3
  58. pygpt_net/migrations/Version20241215110000.py +25 -0
  59. pygpt_net/migrations/__init__.py +3 -1
  60. pygpt_net/plugin/agent/__init__.py +7 -2
  61. pygpt_net/plugin/audio_output/__init__.py +6 -1
  62. pygpt_net/plugin/base/plugin.py +58 -26
  63. pygpt_net/plugin/base/worker.py +20 -17
  64. pygpt_net/plugin/cmd_files/__init__.py +3 -2
  65. pygpt_net/plugin/cmd_history/config.py +2 -2
  66. pygpt_net/plugin/cmd_web/__init__.py +3 -4
  67. pygpt_net/plugin/cmd_web/config.py +71 -3
  68. pygpt_net/plugin/cmd_web/websearch.py +20 -12
  69. pygpt_net/plugin/cmd_web/worker.py +67 -4
  70. pygpt_net/plugin/idx_llama_index/config.py +3 -3
  71. pygpt_net/plugin/mailer/__init__.py +123 -0
  72. pygpt_net/plugin/mailer/config.py +149 -0
  73. pygpt_net/plugin/mailer/runner.py +285 -0
  74. pygpt_net/plugin/mailer/worker.py +123 -0
  75. pygpt_net/provider/agents/base.py +5 -2
  76. pygpt_net/provider/agents/openai.py +4 -2
  77. pygpt_net/provider/agents/openai_assistant.py +4 -2
  78. pygpt_net/provider/agents/planner.py +4 -2
  79. pygpt_net/provider/agents/react.py +4 -2
  80. pygpt_net/provider/audio_output/openai_tts.py +5 -11
  81. pygpt_net/provider/core/assistant/base.py +5 -3
  82. pygpt_net/provider/core/assistant/json_file.py +8 -5
  83. pygpt_net/provider/core/assistant_file/base.py +4 -3
  84. pygpt_net/provider/core/assistant_file/db_sqlite/__init__.py +4 -3
  85. pygpt_net/provider/core/assistant_file/db_sqlite/storage.py +3 -2
  86. pygpt_net/provider/core/assistant_store/base.py +6 -4
  87. pygpt_net/provider/core/assistant_store/db_sqlite/__init__.py +5 -4
  88. pygpt_net/provider/core/assistant_store/db_sqlite/storage.py +5 -3
  89. pygpt_net/provider/core/attachment/base.py +5 -3
  90. pygpt_net/provider/core/attachment/json_file.py +7 -3
  91. pygpt_net/provider/core/calendar/base.py +5 -3
  92. pygpt_net/provider/core/calendar/db_sqlite/__init__.py +6 -5
  93. pygpt_net/provider/core/calendar/db_sqlite/storage.py +5 -4
  94. pygpt_net/provider/core/config/base.py +8 -6
  95. pygpt_net/provider/core/config/json_file.py +9 -7
  96. pygpt_net/provider/core/config/patch.py +6 -0
  97. pygpt_net/provider/core/ctx/base.py +27 -25
  98. pygpt_net/provider/core/ctx/db_sqlite/__init__.py +51 -35
  99. pygpt_net/provider/core/ctx/db_sqlite/storage.py +92 -38
  100. pygpt_net/provider/core/ctx/db_sqlite/utils.py +37 -11
  101. pygpt_net/provider/core/index/base.py +129 -23
  102. pygpt_net/provider/core/index/db_sqlite/__init__.py +130 -23
  103. pygpt_net/provider/core/index/db_sqlite/storage.py +130 -23
  104. pygpt_net/provider/core/index/db_sqlite/utils.py +4 -2
  105. pygpt_net/provider/core/mode/base.py +5 -3
  106. pygpt_net/provider/core/mode/json_file.py +7 -6
  107. pygpt_net/provider/core/model/base.py +6 -4
  108. pygpt_net/provider/core/model/json_file.py +9 -7
  109. pygpt_net/provider/core/notepad/base.py +5 -3
  110. pygpt_net/provider/core/notepad/db_sqlite/__init__.py +5 -4
  111. pygpt_net/provider/core/notepad/db_sqlite/storage.py +4 -3
  112. pygpt_net/provider/core/plugin_preset/base.py +4 -2
  113. pygpt_net/provider/core/plugin_preset/json_file.py +5 -3
  114. pygpt_net/provider/core/preset/base.py +6 -4
  115. pygpt_net/provider/core/preset/json_file.py +9 -9
  116. pygpt_net/provider/core/prompt/base.py +6 -3
  117. pygpt_net/provider/core/prompt/json_file.py +11 -6
  118. pygpt_net/provider/gpt/assistants.py +15 -6
  119. pygpt_net/provider/gpt/audio.py +5 -5
  120. pygpt_net/provider/gpt/chat.py +7 -5
  121. pygpt_net/provider/gpt/completion.py +8 -4
  122. pygpt_net/provider/gpt/image.py +3 -3
  123. pygpt_net/provider/gpt/store.py +46 -12
  124. pygpt_net/provider/gpt/vision.py +16 -11
  125. pygpt_net/provider/llms/anthropic.py +7 -2
  126. pygpt_net/provider/llms/azure_openai.py +26 -5
  127. pygpt_net/provider/llms/base.py +47 -9
  128. pygpt_net/provider/llms/google.py +7 -2
  129. pygpt_net/provider/llms/hugging_face.py +13 -3
  130. pygpt_net/provider/llms/hugging_face_api.py +18 -4
  131. pygpt_net/provider/llms/local.py +7 -2
  132. pygpt_net/provider/llms/ollama.py +30 -6
  133. pygpt_net/provider/llms/openai.py +32 -6
  134. pygpt_net/provider/loaders/base.py +14 -0
  135. pygpt_net/provider/loaders/hub/yt/base.py +5 -0
  136. pygpt_net/provider/loaders/web_database.py +13 -5
  137. pygpt_net/provider/loaders/web_github_issues.py +5 -1
  138. pygpt_net/provider/loaders/web_google_calendar.py +9 -1
  139. pygpt_net/provider/loaders/web_google_docs.py +6 -1
  140. pygpt_net/provider/loaders/web_google_drive.py +10 -1
  141. pygpt_net/provider/loaders/web_google_gmail.py +2 -1
  142. pygpt_net/provider/loaders/web_google_keep.py +5 -1
  143. pygpt_net/provider/loaders/web_google_sheets.py +5 -1
  144. pygpt_net/provider/loaders/web_microsoft_onedrive.py +15 -1
  145. pygpt_net/provider/loaders/web_page.py +4 -2
  146. pygpt_net/provider/loaders/web_rss.py +2 -1
  147. pygpt_net/provider/loaders/web_sitemap.py +2 -1
  148. pygpt_net/provider/loaders/web_twitter.py +4 -2
  149. pygpt_net/provider/loaders/web_yt.py +17 -2
  150. pygpt_net/provider/vector_stores/__init__.py +45 -14
  151. pygpt_net/provider/vector_stores/base.py +35 -8
  152. pygpt_net/provider/vector_stores/chroma.py +13 -3
  153. pygpt_net/provider/vector_stores/ctx_attachment.py +32 -13
  154. pygpt_net/provider/vector_stores/elasticsearch.py +12 -3
  155. pygpt_net/provider/vector_stores/pinecode.py +12 -3
  156. pygpt_net/provider/vector_stores/redis.py +12 -3
  157. pygpt_net/provider/vector_stores/simple.py +12 -3
  158. pygpt_net/provider/vector_stores/temp.py +16 -4
  159. pygpt_net/provider/web/base.py +10 -3
  160. pygpt_net/provider/web/google_custom_search.py +9 -3
  161. pygpt_net/provider/web/microsoft_bing.py +9 -3
  162. pygpt_net/tools/__init__.py +13 -5
  163. pygpt_net/tools/audio_transcriber/__init__.py +4 -3
  164. pygpt_net/tools/base.py +15 -8
  165. pygpt_net/tools/code_interpreter/__init__.py +4 -3
  166. pygpt_net/tools/html_canvas/__init__.py +4 -3
  167. pygpt_net/tools/image_viewer/__init__.py +10 -4
  168. pygpt_net/tools/indexer/__init__.py +15 -46
  169. pygpt_net/tools/indexer/ui/web.py +20 -78
  170. pygpt_net/tools/media_player/__init__.py +4 -3
  171. pygpt_net/tools/text_editor/__init__.py +36 -10
  172. pygpt_net/ui/layout/chat/output.py +2 -2
  173. pygpt_net/ui/layout/ctx/ctx_list.py +86 -18
  174. pygpt_net/ui/menu/audio.py +12 -1
  175. pygpt_net/ui/widget/dialog/url.py +151 -14
  176. pygpt_net/ui/widget/element/group.py +15 -2
  177. pygpt_net/ui/widget/lists/context.py +23 -9
  178. pygpt_net/utils.py +1 -1
  179. {pygpt_net-2.4.41.dist-info → pygpt_net-2.4.44.dist-info}/METADATA +152 -72
  180. {pygpt_net-2.4.41.dist-info → pygpt_net-2.4.44.dist-info}/RECORD +183 -173
  181. {pygpt_net-2.4.41.dist-info → pygpt_net-2.4.44.dist-info}/LICENSE +0 -0
  182. {pygpt_net-2.4.41.dist-info → pygpt_net-2.4.44.dist-info}/WHEEL +0 -0
  183. {pygpt_net-2.4.41.dist-info → pygpt_net-2.4.44.dist-info}/entry_points.txt +0 -0
@@ -6,90 +6,116 @@
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.12.14 08:00:00 #
9
+ # Updated Date: 2024.12.15 01:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
13
13
  import uuid
14
- from typing import Optional, List, Dict
14
+ from typing import Optional, List, Dict, Tuple, Union
15
15
 
16
16
  import requests
17
17
 
18
18
  from bs4 import BeautifulSoup
19
19
  from urllib.parse import urljoin
20
20
 
21
- from pygpt_net.provider.web.base import BaseProvider
22
21
 
23
-
24
- class Web:
22
+ class Helpers:
25
23
  def __init__(self, window=None):
26
24
  """
27
- Web access core
25
+ Web helpers core
28
26
 
29
27
  :param window: Window instance
30
28
  """
31
29
  self.window = window
32
- self.providers = {
33
- "search_engine": {},
34
- }
35
-
36
- def is_registered(self, id: str, type: str = "search_engine") -> bool:
37
- """
38
- Check if provider is registered
39
-
40
- :param id: provider id
41
- :param type: provider type
42
- :return: True if registered
43
- """
44
- if type in self.providers:
45
- return id in self.providers[type]
46
- return False
47
-
48
- def get_providers(self, type: str = "search_engine") -> dict:
49
- """
50
- Get all providers
51
-
52
- :param type: provider type
53
- :return: providers dict
54
- """
55
- if type in self.providers:
56
- return self.providers[type]
57
- return {}
58
-
59
- def get_ids(self, type: str = "search_engine") -> list:
60
- """
61
- Get all providers ids
62
30
 
63
- :param type: provider type
64
- :return: providers ids list
65
- """
66
- if type in self.providers:
67
- return list(self.providers[type].keys())
68
- return []
69
-
70
- def get(self, id: str, type: str = "search_engine") -> Optional[BaseProvider]:
71
- """
72
- Get provider instance
73
-
74
- :param id: provider id
75
- :param type: provider type
76
- :return: provider instance
77
- """
78
- if self.is_registered(id, type):
79
- return self.providers[type][id]
80
- return None
81
-
82
- def register(self, provider: BaseProvider):
83
- """
84
- Register provider
85
-
86
- :param provider: provider instance
87
- """
88
- id = provider.id
89
- type = provider.type
90
- for t in type:
91
- if t in self.providers:
92
- self.providers[t][id] = provider
31
+ def request(
32
+ self,
33
+ url: str = "",
34
+ method: str = "GET",
35
+ headers: Optional[dict] = None,
36
+ params: Optional[dict] = None,
37
+ data: Optional[Union[str, dict]] = None,
38
+ json: Optional[dict] = None,
39
+ files: Optional[dict] = None,
40
+ cookies: Optional[dict] = None,
41
+ timeout: int = 10,
42
+ disable_ssl_verify: bool = False,
43
+ allow_redirects: bool = True,
44
+ stream: bool = False,
45
+ user_agent: Optional[str] = None,
46
+ ) -> Tuple[Optional[int], Optional[str]]:
47
+ """
48
+ Make HTTP request
49
+
50
+ :param url: URL
51
+ :param method: HTTP method
52
+ :param headers: Headers
53
+ :param params: GET parameters
54
+ :param data: POST data
55
+ :param json: JSON data
56
+ :param files: Files
57
+ :param cookies: Cookies
58
+ :param timeout: Timeout
59
+ :param disable_ssl_verify: Disable SSL verification
60
+ :param allow_redirects: Allow redirects
61
+ :param stream: Stream
62
+ :param user_agent: User agent
63
+ :return: status code, response text
64
+ """
65
+ upload = {}
66
+ try:
67
+ method = method.upper()
68
+ session = requests.Session()
69
+ args = {}
70
+
71
+ if data:
72
+ args['data'] = data
73
+ if json:
74
+ args['json'] = json
75
+ if cookies:
76
+ args['cookies'] = cookies
77
+ if params:
78
+ args['params'] = params
79
+ if headers:
80
+ args['headers'] = headers
81
+
82
+ args['timeout'] = timeout
83
+ if disable_ssl_verify:
84
+ args['verify'] = False
85
+ if not allow_redirects:
86
+ args['allow_redirects'] = False
87
+ if stream:
88
+ args['stream'] = True
89
+ if user_agent:
90
+ if 'headers' not in args:
91
+ args['headers'] = {}
92
+ args['headers']['User-Agent'] = user_agent
93
+
94
+ if files:
95
+ for key, value in files.items():
96
+ if os.path.exists(value) and os.path.isfile(value):
97
+ upload[key] = open(value, 'rb')
98
+ args['files'] = upload
99
+
100
+ if method == 'GET':
101
+ response = session.get(url, **args)
102
+ elif method == 'POST':
103
+ response = session.post(url, **args)
104
+ elif method == 'PUT':
105
+ response = session.put(url, **args)
106
+ elif method == 'DELETE':
107
+ response = session.delete(url, **args)
108
+ elif method == 'PATCH':
109
+ response = session.patch(url, **args)
110
+ else:
111
+ return None, f'Invalid HTTP method: {method}'
112
+ for k in upload:
113
+ upload[k].close() # close files if opened
114
+ return response.status_code, response.text
115
+ except Exception as e:
116
+ for k in upload:
117
+ upload[k].close() # close files if opened
118
+ return None, f'Error: {e}'
93
119
 
94
120
  def get_main_image(self, url: str) -> Optional[str]:
95
121
  """
@@ -208,4 +234,4 @@ class Web:
208
234
  download_path = os.path.join(dir, name)
209
235
  with open(download_path, 'wb', ) as f:
210
236
  f.write(response.content)
211
- return self.window.core.filesystem.make_local(download_path)
237
+ return self.window.core.filesystem.make_local(download_path)
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.4.41",
4
- "app.version": "2.4.41",
5
- "updated_at": "2024-12-14T00:00:00"
3
+ "version": "2.4.44",
4
+ "app.version": "2.4.44",
5
+ "updated_at": "2024-12-16T00:00:00"
6
6
  },
7
7
  "access.audio.event.speech": false,
8
8
  "access.audio.event.speech.disabled": [],
@@ -100,7 +100,7 @@
100
100
  6,
101
101
  7
102
102
  ],
103
- "ctx.records.folders.top": false,
103
+ "ctx.records.folders.top": true,
104
104
  "ctx.records.limit": 0,
105
105
  "ctx.records.separators": true,
106
106
  "ctx.records.groups.separators": true,
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.4.41",
4
- "app.version": "2.4.41",
5
- "updated_at": "2024-12-14T00:00:00"
3
+ "version": "2.4.44",
4
+ "app.version": "2.4.44",
5
+ "updated_at": "2024-12-16T00:00:00"
6
6
  },
7
7
  "items": {
8
8
  "claude-3-5-sonnet-20240620": {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.4.41",
4
- "app.version": "2.4.41",
5
- "updated_at": "2024-12-13T00:00:00"
3
+ "version": "2.4.44",
4
+ "app.version": "2.4.44",
5
+ "updated_at": "2024-12-16T00:00:00"
6
6
  },
7
7
  "items": {
8
8
  "chat": {
@@ -1078,7 +1078,7 @@
1078
1078
  },
1079
1079
  "label": "settings.llama.idx.storage.args",
1080
1080
  "description": "settings.llama.idx.storage.args.desc",
1081
- "urls": "https://pygpt.readthedocs.io/en/latest/modes.html#chat-with-files-llama-index",
1081
+ "urls": "https://pygpt.readthedocs.io/en/latest/configuration.html#vector-stores",
1082
1082
  "value": [],
1083
1083
  "advanced": false,
1084
1084
  "tab": "store"
@@ -1261,7 +1261,7 @@
1261
1261
  "use": "var_types"
1262
1262
  }
1263
1263
  },
1264
- "urls": "https://pygpt.readthedocs.io/en/latest/modes.html#chat-with-files-llama-index",
1264
+ "urls": "https://pygpt.readthedocs.io/en/latest/configuration.html#data-loaders",
1265
1265
  "slider": false,
1266
1266
  "label": "settings.llama.hub.loaders.args",
1267
1267
  "description": "settings.llama.hub.loaders.args.desc",
@@ -1395,7 +1395,7 @@
1395
1395
  "multiplier": null,
1396
1396
  "step": null,
1397
1397
  "advanced": false,
1398
- "tab": "legacy"
1398
+ "tab": "autonomous"
1399
1399
  },
1400
1400
  "experts.mode": {
1401
1401
  "section": "agent",
@@ -1410,7 +1410,7 @@
1410
1410
  "multiplier": null,
1411
1411
  "step": null,
1412
1412
  "advanced": false,
1413
- "tab": "legacy"
1413
+ "tab": "experts"
1414
1414
  },
1415
1415
  "agent.idx": {
1416
1416
  "section": "agent",
@@ -1425,7 +1425,7 @@
1425
1425
  "multiplier": null,
1426
1426
  "step": null,
1427
1427
  "advanced": false,
1428
- "tab": "legacy"
1428
+ "tab": "autonomous"
1429
1429
  },
1430
1430
  "llama.idx.chat.mode": {
1431
1431
  "section": "llama-index",
@@ -346,7 +346,7 @@ dialog.start.title = API-KEY ist noch nicht konfiguriert
346
346
  dialog.start.title.text = Ihr API-Schlüssel ist noch nicht konfiguriert...\nSie erhalten einen API-Schlüssel, indem Sie ein Konto auf der OpenAI-Website registrieren:
347
347
  dialog.url.dismiss = Abbrechen
348
348
  dialog.url.tip = Geben Sie die URL der Webseite an, die Sie als zusätzlichen Kontext anfügen möchten, z.B. https://de.wikipedia.org/wiki/Elon_Musk, oder ein YouTube-Video zur Transkription, z.B. https://www.youtube.com/watch?v=CRRlbK5w8AE.
349
- dialog.url.title = URL
349
+ dialog.url.title = Web
350
350
  dialog.url.update = Hinzufügen
351
351
  dialog.workdir.change.confirm = Sind Sie sicher, dass Sie das Arbeitsverzeichnis zu folgendem ändern/verschieben möchten:\n{path}?
352
352
  dialog.workdir.change.empty.alert = Verzeichnis ist nicht leer! Vorgang wird abgebrochen.
@@ -750,7 +750,7 @@ settings.agent.llama.steps = Maximale Schritte (pro Iteration)
750
750
  settings.agent.llama.steps.desc = Maximale Schritte in einer Iteration, bevor das Ziel erreicht wird
751
751
  settings.agent.llama.verbose = Ausführlich (Protokollausgabe in die Konsole)
752
752
  settings.agent.mode = Interner Modus für Agenten
753
- settings.agent.mode.desc = Interner Modus für die Verwendung im Agentenmodus (Chat, Vervollständigung, Langchain, Llama_Index usw.)
753
+ settings.agent.mode.desc = Interner Modus für die Verwendung im Agentenmodus
754
754
  settings.api_endpoint = API-Endpunkt
755
755
  settings.api_endpoint.desc = OpenAI API-Endpunkt-URL (oder kompatibel), standardmäßig: https://api.openai.com/v1
756
756
  settings.api_key = OpenAI API-KEY
@@ -793,7 +793,7 @@ settings.dict.delete.confirm = Eintrag aus der Liste entfernen?
793
793
  settings.download.dir = Verzeichnis für Dateidownloads
794
794
  settings.download.dir.desc = Unterordner für heruntergeladene Dateien, z.B. im Assistentenmodus, innerhalb von "data"
795
795
  settings.experts.mode = Untermodus für Experten
796
- settings.experts.mode.desc = Untermodus, der für Experten verwendet wird (Chat, Vervollständigung, Langkette, Llama_Index, usw.)
796
+ settings.experts.mode.desc = Untermodus, der für Experten verwendet wird
797
797
  settings.font_size = Schriftgröße (Chat-Text, Notizblöcke)
798
798
  settings.font_size.ctx = Schriftgröße (Kontextliste)
799
799
  settings.font_size.input = Schriftgröße (Eingabe)
@@ -110,7 +110,7 @@ assistant.tool.retrieval = Retrieval
110
110
  assistant.vector_store = Vector Store
111
111
  attachments.auto_index = Auto-index on upload
112
112
  attachments.btn.add = Add file
113
- attachments.btn.add_url = URL
113
+ attachments.btn.add_url = Web
114
114
  attachments.btn.clear = Clear
115
115
  attachments.capture_clear = Clear on capture
116
116
  attachments.clear.confirm = Clear list?
@@ -120,6 +120,7 @@ attachments.ctx.mode.full = Full context
120
120
  attachments.ctx.mode.off = Off (disable)
121
121
  attachments.ctx.mode.query = RAG
122
122
  attachments.ctx.mode.summary = Summary
123
+ attachments.ctx.tooltip.list = {num} attachments
123
124
  attachments.delete.confirm = Remove file from list?
124
125
  attachments.header.ctx = Ctx
125
126
  attachments.header.idx = Idx
@@ -377,7 +378,7 @@ dialog.start.title = Api Key is not configured yet
377
378
  dialog.start.title.text = Your API key is not configured yet...\nYou will obtain an API key by registering an account on the OpenAI website:
378
379
  dialog.url.dismiss = Cancel
379
380
  dialog.url.tip = Provide the URL of the web page you want to attach as additional context, e.g., https://pl.wikipedia.org/wiki/Elon_Musk, or a YouTube video to transcribe, e.g., https://www.youtube.com/watch?v=CRRlbK5w8AE.
380
- dialog.url.title = URL
381
+ dialog.url.title = Web
381
382
  dialog.url.update = Add
382
383
  dialog.workdir.change.confirm = Are you sure you want to change/move workdir to:\n{path}?
383
384
  dialog.workdir.change.empty.alert = Directory is not empty! Aborting.
@@ -683,6 +684,7 @@ menu.audio.control.global = Voice control (global)
683
684
  menu.audio.control.plugin = Voice control (inline)
684
685
  menu.audio.input = Input: Speech recognition
685
686
  menu.audio.output = Output: Speech synthesis
687
+ menu.audio.stop = Stop audio playback
686
688
  menu.config = Config
687
689
  menu.config.access = Accessibility
688
690
  menu.config.change_dir = Change working directory...
@@ -767,7 +769,7 @@ mode.agent = Agent (Autonomous)
767
769
  mode.agent_llama = Agent (LlamaIndex)
768
770
  mode.agent_llama.tooltip = Advanced agents (LlamaIndex)
769
771
  mode.agent.tooltip = Simple agents (legacy)
770
- mode.assistant = Assistant
772
+ mode.assistant = Assistants
771
773
  mode.assistant.tooltip = Chat using Assistants API
772
774
  mode.audio = Chat with Audio
773
775
  mode.chat = Chat
@@ -906,7 +908,7 @@ settings.access.voice_control.model.desc = Model to use for command recognition
906
908
  settings.advanced.collapse = Show/hide advanced options
907
909
  settings.agent.goal.notify = Display a tray notification when the goal is achieved.
908
910
  settings.agent.idx = Index to use
909
- settings.agent.idx.desc = Only if sub-mode is llama_index (Chat with Files), choose the index to use in Agent and Expert modes
911
+ settings.agent.idx.desc = Only if sub-mode is Chat with Files, choose the index to use in Autonomous and Experts modes
910
912
  settings.agent.llama.append_eval = Append and compare previous evaluation prompt in next evaluation
911
913
  settings.agent.llama.append_eval.desc = If enabled, previous improvement prompt will be checked in next eval in loop
912
914
  settings.agent.llama.iterations = Max run iterations
@@ -917,7 +919,7 @@ settings.agent.llama.steps = Max steps (per iteration)
917
919
  settings.agent.llama.steps.desc = Max steps in one iteration before goal achieved
918
920
  settings.agent.llama.verbose = Verbose (log output to console)
919
921
  settings.agent.mode = Sub-mode for agents
920
- settings.agent.mode.desc = Sub-mode to use in Agent mode (chat, completion, langchain, llama_index, etc.)
922
+ settings.agent.mode.desc = Sub-mode to use in Agent (Autonomous) mode
921
923
  settings.api_endpoint = API Endpoint
922
924
  settings.api_endpoint.desc = OpenAI API (or compatible) endpoint URL, default: https://api.openai.com/v1
923
925
  settings.api_key = OpenAI API KEY
@@ -982,7 +984,7 @@ settings.dict.delete.confirm = Remove item from list?
982
984
  settings.download.dir = Directory for file downloads
983
985
  settings.download.dir.desc = Subdirectory for downloaded files, e.g. in Assistants mode, inside "data"
984
986
  settings.experts.mode = Sub-mode for experts
985
- settings.experts.mode.desc = Sub-mode to use for Experts (chat, completion, langchain, llama_index, etc.)
987
+ settings.experts.mode.desc = Sub-mode to use for Experts
986
988
  settings.font_size = Font size (chat plain-text, notepads)
987
989
  settings.font_size.ctx = Font size (ctx list)
988
990
  settings.font_size.input = Font size (input)
@@ -1089,8 +1091,9 @@ settings.render.web.only.desc = WebEngine / Chromium rendering engine only
1089
1091
  settings.restart.required = Restart of the application is required for this option to take effect.
1090
1092
  settings.section.access = Accessibility
1091
1093
  settings.section.agent = Agents and experts
1092
- settings.section.agent.legacy = Legacy
1093
- settings.section.agent.llama = LlamaIndex Agents
1094
+ settings.section.agent.autonomous = Autonomous
1095
+ settings.section.agent.experts = Experts
1096
+ settings.section.agent.llama = Agents
1094
1097
  settings.section.audio = Audio
1095
1098
  settings.section.ctx = Context
1096
1099
  settings.section.developer = Developer
@@ -1245,7 +1248,7 @@ tool.indexer.tab.files.tip = Select file(s) or directory to embed files into the
1245
1248
  tool.indexer.tab.web = Web
1246
1249
  tool.indexer.tab.web.cfg = Configuration (global settings) - Settings -> LlamaIndex -> Data loaders
1247
1250
  tool.indexer.tab.web.help = Help
1248
- tool.indexer.tab.web.loader = Loader
1251
+ tool.indexer.tab.web.loader = Data type
1249
1252
  tool.indexer.tab.web.source = Data source
1250
1253
  tool.indexer.tab.web.tip = Select a data loader and define the loader parameters to embed external data from the web.
1251
1254
  tool.indexer.title = Indexer
@@ -346,7 +346,7 @@ dialog.start.title = La API KEY aún no está configurada
346
346
  dialog.start.title.text = Su clave de API aún no está configurada...\nObtendrá una clave de API registrando una cuenta en el sitio web de OpenAI:
347
347
  dialog.url.dismiss = Cancelar
348
348
  dialog.url.tip = Proporcione la URL de la página web que desea adjuntar como contexto adicional, por ejemplo, https://es.wikipedia.org/wiki/Elon_Musk, o un video de YouTube para transcribir, por ejemplo, https://www.youtube.com/watch?v=CRRlbK5w8AE.
349
- dialog.url.title = URL
349
+ dialog.url.title = Web
350
350
  dialog.url.update = Agregar
351
351
  dialog.workdir.change.confirm = ¿Está seguro de querer cambiar/mover el directorio de trabajo a:\n{path}?
352
352
  dialog.workdir.change.empty.alert = ¡El directorio no está vacío! Cancelando la operación.
@@ -749,7 +749,7 @@ settings.agent.llama.steps = Pasos máximos (por iteración)
749
749
  settings.agent.llama.steps.desc = Pasos máximos en una iteración antes de que se logre el objetivo
750
750
  settings.agent.llama.verbose = Verboso (salida de registro a la consola)
751
751
  settings.agent.mode = Modo interno para agentes
752
- settings.agent.mode.desc = Modo interno para usar en modo Agente (chat, completado, langchain, llama_index, etc.)
752
+ settings.agent.mode.desc = Modo interno para usar en modo Agente
753
753
  settings.api_endpoint = Punto final de la API
754
754
  settings.api_endpoint.desc = URL del punto final de la API de OpenAI (o compatible), por defecto: https://api.openai.com/v1
755
755
  settings.api_key = Clave API de OpenAI
@@ -792,7 +792,7 @@ settings.dict.delete.confirm = ¿Eliminar elemento de la lista?
792
792
  settings.download.dir = Directorio para descargas de archivos
793
793
  settings.download.dir.desc = Subdirectorio para archivos descargados, por ejemplo, en modo Asistentes, dentro de "data"
794
794
  settings.experts.mode = Submodo para expertos
795
- settings.experts.mode.desc = Submodo a utilizar para Expertos (chat, completado, langchain, índice de llama, etc.)
795
+ settings.experts.mode.desc = Submodo a utilizar para Expertos
796
796
  settings.font_size = Tamaño de fuente (texto plano de chat, bloc de notas)
797
797
  settings.font_size.ctx = Tamaño de fuente (lista ctx)
798
798
  settings.font_size.input = Tamaño de fuente (entrada)
@@ -346,7 +346,7 @@ dialog.start.title = La CLÉ API n’est pas encore configurée
346
346
  dialog.start.title.text = Votre clé API n'est pas encore configurée...\nVous obtiendrez une clé API en vous inscrivant sur le site web d'OpenAI :
347
347
  dialog.url.dismiss = Annuler
348
348
  dialog.url.tip = Fournissez l'URL de la page Web que vous souhaitez joindre comme contexte supplémentaire, par exemple, https://fr.wikipedia.org/wiki/Elon_Musk, ou une vidéo YouTube à transcrire, par exemple, https://www.youtube.com/watch?v=CRRlbK5w8AE.
349
- dialog.url.title = URL
349
+ dialog.url.title = Web
350
350
  dialog.url.update = Ajouter
351
351
  dialog.workdir.change.confirm = Êtes-vous sûr de vouloir changer/déplacer le répertoire de travail vers :\n{path}?
352
352
  dialog.workdir.change.empty.alert = Le répertoire n'est pas vide ! Opération annulée.
@@ -749,7 +749,7 @@ settings.agent.llama.steps = Étapes maximales (par itération)
749
749
  settings.agent.llama.steps.desc = Étapes maximales dans une itération avant que l'objectif ne soit atteint
750
750
  settings.agent.llama.verbose = Verbeux (sortie du journal vers la console)
751
751
  settings.agent.mode = Mode interne pour les agents
752
- settings.agent.mode.desc = Mode interne à utiliser en mode Agent (chat, complétion, langchain, llama_index, etc.)
752
+ settings.agent.mode.desc = Mode interne à utiliser en mode Agent
753
753
  settings.api_endpoint = Point de terminaison API
754
754
  settings.api_endpoint.desc = URL du point de terminaison de l'API OpenAI (ou compatible), par défaut : https://api.openai.com/v1
755
755
  settings.api_key = Clé API OpenAI
@@ -792,7 +792,7 @@ settings.dict.delete.confirm = Supprimer l'élément de la liste ?
792
792
  settings.download.dir = Répertoire pour les téléchargements de fichiers
793
793
  settings.download.dir.desc = Sous-répertoire pour les fichiers téléchargés, par exemple en mode Assistants, à l'intérieur de "data"
794
794
  settings.experts.mode = Sous-mode pour les experts
795
- settings.experts.mode.desc = Sous-mode utilisé pour les Experts (chat, complétion, langchain, llama_index, etc.)
795
+ settings.experts.mode.desc = Sous-mode utilisé pour les Experts
796
796
  settings.font_size = Taille de police (texte brut de chat, blocs-notes)
797
797
  settings.font_size.ctx = Taille de police (liste ctx)
798
798
  settings.font_size.input = Taille de police (entrée)
@@ -346,7 +346,7 @@ dialog.start.title = API KEY non ancora configurata
346
346
  dialog.start.title.text = La tua API key non è ancora configurata...\nOtterrai una API key registrando un account sul sito web di OpenAI:
347
347
  dialog.url.dismiss = Annulla
348
348
  dialog.url.tip = Fornisci l'URL della pagina web che desideri allegare come contesto aggiuntivo, ad esempio, https://it.wikipedia.org/wiki/Elon_Musk, o un video YouTube da trascrivere, ad esempio, https://www.youtube.com/watch?v=CRRlbK5w8AE.
349
- dialog.url.title = URL
349
+ dialog.url.title = Web
350
350
  dialog.url.update = Aggiungi
351
351
  dialog.workdir.change.confirm = Sei sicuro di voler cambiare/spostare la workdir a:\n{path}?
352
352
  dialog.workdir.change.empty.alert = La cartella non è vuota! Annullamento dell'operazione.
@@ -750,7 +750,7 @@ settings.agent.llama.steps = Passi massimi (per iterazione)
750
750
  settings.agent.llama.steps.desc = Passi massimi in un'iterazione prima che l'obiettivo sia raggiunto
751
751
  settings.agent.llama.verbose = Verboso (output del log sulla console)
752
752
  settings.agent.mode = Modalità interna per agenti
753
- settings.agent.mode.desc = Modalità interna da utilizzare in modalità Agente (chat, completamento, langchain, llama_index, ecc.)
753
+ settings.agent.mode.desc = Modalità interna da utilizzare in modalità Agente
754
754
  settings.api_endpoint = Endpoint API
755
755
  settings.api_endpoint.desc = URL del punto di terminazione API OpenAI (o compatibile), di default: https://api.openai.com/v1
756
756
  settings.api_key = OpenAI API KEY
@@ -793,7 +793,7 @@ settings.dict.delete.confirm = Rimuovere l'elemento dall'elenco?
793
793
  settings.download.dir = Directory per il download dei file
794
794
  settings.download.dir.desc = Sottodirectory per i file scaricati, ad esempio in modalità Assistenti, all'interno di "data"
795
795
  settings.experts.mode = Sottomodalità per esperti
796
- settings.experts.mode.desc = Sottomodalità da utilizzare per gli Esperti (chat, completamento, langchain, indice di llama, ecc.)
796
+ settings.experts.mode.desc = Sottomodalità da utilizzare per gli Esperti
797
797
  settings.font_size = Dimensione del carattere (testo semplice della chat, blocchi appunti)
798
798
  settings.font_size.ctx = Dimensione del carattere (lista dei contesti)
799
799
  settings.font_size.input = Dimensione del carattere (input)
@@ -346,7 +346,7 @@ dialog.start.title = Klucz API nie jest zdefiniowany
346
346
  dialog.start.title.text = Nie skonfigurowałeś jeszcze klucza API...\nKlucz API uzyskasz rejestrując konto na stronie internetowej OpenAI:
347
347
  dialog.url.dismiss = Anuluj
348
348
  dialog.url.tip = Podaj URL strony internetowej, którą chcesz dołączyć jako dodatkowy kontekst, np. https://pl.wikipedia.org/wiki/Elon_Musk, lub film na YouTube do transkrypcji, np. https://www.youtube.com/watch?v=CRRlbK5w8AE.
349
- dialog.url.title = URL
349
+ dialog.url.title = Web
350
350
  dialog.url.update = Dodaj
351
351
  dialog.workdir.change.confirm = Czy jesteś pewny, że chcesz zmienić/przenieść katalog roboczy do:\n{path}?
352
352
  dialog.workdir.change.empty.alert = Katalog nie jest pusty! Anulowanie.
@@ -750,7 +750,7 @@ settings.agent.llama.steps = Maksymalna liczba kroków (na iterację)
750
750
  settings.agent.llama.steps.desc = Maksymalna liczba kroków w jednej iteracji przed osiągnięciem celu
751
751
  settings.agent.llama.verbose = Szczegółowy (logowanie do konsoli)
752
752
  settings.agent.mode = Tryb wewnętrzny dla agentów
753
- settings.agent.mode.desc = Tryb wewnętrzny do użycia w trybie Agenta (chat, completion, langchain, llama_index itp.)
753
+ settings.agent.mode.desc = Tryb wewnętrzny do użycia w trybie Agenta
754
754
  settings.api_endpoint = Punkt końcowy API
755
755
  settings.api_endpoint.desc = Adres URL punktu końcowego API OpenAI (lub kompatybilnego), domyślnie: https://api.openai.com/v1
756
756
  settings.api_key = Klucz API OpenAI
@@ -793,7 +793,7 @@ settings.dict.delete.confirm = Usunąć pozycję z listy?
793
793
  settings.download.dir = Katalog na pliki do pobrania
794
794
  settings.download.dir.desc = Podkatalog na pobrane pliki, np. w trybie Asystentów, wewnątrz "data"
795
795
  settings.experts.mode = Podtryb dla ekspertów
796
- settings.experts.mode.desc = Podtryb używany dla Ekspertów (czat, uzupełnianie, langchain, llama_index, itp.)
796
+ settings.experts.mode.desc = Podtryb używany dla Ekspertów
797
797
  settings.font_size = Rozmiar czcionki (czat plain-text, notatniki)
798
798
  settings.font_size.ctx = Rozmiar czcionki (lista rozmów)
799
799
  settings.font_size.input = Rozmiar czcionki (wejście)
@@ -346,7 +346,7 @@ dialog.start.title = API КЛЮЧ ще не налаштований
346
346
  dialog.start.title.text = Ваш API ключ ще не налаштований...\nВи отримаєте API ключ, зареєструвавшись на сайті OpenAI:
347
347
  dialog.url.dismiss = Скасувати
348
348
  dialog.url.tip = Вкажіть URL веб-сторінки, яку ви хочете прикріпити як додатковий контекст, наприклад, https://uk.wikipedia.org/wiki/Ілон_Маск, або відео на YouTube для транскрипції, наприклад, https://www.youtube.com/watch?v=CRRlbK5w8AE.
349
- dialog.url.title = URL
349
+ dialog.url.title = Web
350
350
  dialog.url.update = Додати
351
351
  dialog.workdir.change.confirm = Ви впевнені, що хочете змінити/перемістити робочий каталог до:\n{path}?
352
352
  dialog.workdir.change.empty.alert = Каталог не порожній! Операцію скасовано.
@@ -749,7 +749,7 @@ settings.agent.llama.steps = Максимальна кількість крок
749
749
  settings.agent.llama.steps.desc = Максимальна кількість кроків в одній ітерації перед досягненням мети
750
750
  settings.agent.llama.verbose = Докладно (вивід журналу в консоль)
751
751
  settings.agent.mode = Внутрішній режим для агентів
752
- settings.agent.mode.desc = Внутрішній режим для використання в режимі Агента (чат, завершення, langchain, llama_index тощо)
752
+ settings.agent.mode.desc = Внутрішній режим для використання в режимі Агента
753
753
  settings.api_endpoint = Кінцева точка API
754
754
  settings.api_endpoint.desc = URL кінцевої точки API OpenAI (або сумісного), за замовчуванням: https://api.openai.com/v1
755
755
  settings.api_key = OpenAI API КЛЮЧ
@@ -792,7 +792,7 @@ settings.dict.delete.confirm = Видалити елемент зі списку
792
792
  settings.download.dir = Директорія для завантаження файлів
793
793
  settings.download.dir.desc = Піддиректорія для завантажених файлів, наприклад, у режимі помічників, всередині "data"
794
794
  settings.experts.mode = Підпрограма для експертів
795
- settings.experts.mode.desc = Підпрограма для використання експертами (чат, завершення, langchain, llama_index тощо)
795
+ settings.experts.mode.desc = Підпрограма для використання експертами
796
796
  settings.font_size = Розмір шрифту (звичайний текст чату, блокноти)
797
797
  settings.font_size.ctx = Розмір шрифту (список ctx)
798
798
  settings.font_size.input = Розмір шрифту (введення)
@@ -356,7 +356,7 @@ dialog.start.title = API KEY尚未配置
356
356
  dialog.start.title.text = 您的API密鑰尚未配置...\n您將通過在OpenAI網站上註冊賬戶獲得API密鑰:
357
357
  dialog.url.dismiss = 取消
358
358
  dialog.url.tip = 提供您要附加为附加上下文的网页 URL,例如,https://zh.wikipedia.org/wiki/Elon_Musk,或一个要转录的 YouTube 视频,例如,https://www.youtube.com/watch?v=CRRlbK5w8AE。
359
- dialog.url.title = URL
359
+ dialog.url.title = Web
360
360
  dialog.url.update = 添加
361
361
  dialog.workdir.change.confirm = 您确定要更改/移动工作目录到:\n{path}吗?
362
362
  dialog.workdir.change.empty.alert = 目录不为空!操作取消。
@@ -851,7 +851,7 @@ settings.agent.llama.steps = 最大步骤数(每次迭代)
851
851
  settings.agent.llama.steps.desc = 在达到目标前每次迭代的最大步骤数
852
852
  settings.agent.llama.verbose = 详细(日志输出到控制台)
853
853
  settings.agent.mode = 代理的内部模式
854
- settings.agent.mode.desc = 在代理模式下使用的子模式(聊天、完成、langchain、llama_index等)
854
+ settings.agent.mode.desc = 在代理模式下使用的子模式
855
855
  settings.api_endpoint = API端点
856
856
  settings.api_endpoint.desc = OpenAI API(或兼容)终端URL,默认为:https://api.openai.com/v1
857
857
  settings.api_key = OpenAI API KEY
@@ -895,7 +895,7 @@ settings.dict.delete.confirm= 從列表中移除項目?
895
895
  settings.download.dir= 文件下載目錄
896
896
  settings.download.dir.desc= 下載文件的子目錄,例如在助手模式下,在"data"內部
897
897
  settings.experts.mode = 专家子模式
898
- settings.experts.mode.desc = 用于专家的子模式(聊天、完成、语言链、llama_index等)
898
+ settings.experts.mode.desc = 用于专家的子模式
899
899
  settings.font_size = 字号(聊天纯文本,记事本)
900
900
  settings.font_size.ctx= 上下文列表字體大小
901
901
  settings.font_size.input= 輸入字體大小
@@ -17,6 +17,8 @@ cmd.web_index_query.description = Enable `web_index_query` command execution.\nI
17
17
  cmd.web_index_query.label = Enable: quick query the Web and external content
18
18
  cmd.web_index_query.tooltip = Example prompt: Query the Website http://example.com about (question).
19
19
  cmd.web_index.tooltip = Example prompt: Index the Website http://example.com.
20
+ cmd.web_request.description = Enable `web_request` command execution.\nIf enabled, model will be able to send any HTTP request to specified URL or API endpoint.
21
+ cmd.web_request.label = Enable: sending any HTTP requests
20
22
  cmd.web_search.description = Enable `web_search` command execution.\nIf enabled, the model will be able to search the Web.
21
23
  cmd.web_search.label = Enable: search the Web
22
24
  cmd.web_search.tooltip = Example prompt: Search the Web for (question).
@@ -0,0 +1,21 @@
1
+ [LOCALE]
2
+ cmd.send_email.label = Enable: send email
3
+ cmd.send_email.description = Allows for sending emails.
4
+ cmd.get_emails.label = Enable: receive emails
5
+ cmd.get_emails.description = Allows for receiving emails.
6
+ cmd.get_email_body.label = Enable: get email body
7
+ cmd.get_email_body.description = Allows for receive email body.
8
+ plugin.description = Provides the ability to send, receive and read emails from SMTP server.
9
+ plugin.name = Mailer
10
+ smtp_host.description = SMTP Host, e.g. smtp.domain.com
11
+ smtp_host.label = Host
12
+ smtp_port_inbox.description = SMTP Port (Inbox), default: 995
13
+ smtp_port_inbox.label = Port (Inbox)
14
+ smtp_port_outbox.description = SMTP Port (Outbox), default: 465
15
+ smtp_port_outbox.label = Port (Outbox)
16
+ smtp_user.description = SMTP User, e.g. user@domain.com
17
+ smtp_user.label = User
18
+ smtp_password.description = SMTP Password
19
+ smtp_password.label = Password
20
+ from_email.description = From (email), e.g. me@domain.com
21
+ from_email.label = From (email)
@@ -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 02:00:00 #
9
+ # Updated Date: 2024.12.16 01:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -33,6 +33,7 @@ class AttachmentItem:
33
33
  self.size = 0
34
34
  self.send = False
35
35
  self.type = self.TYPE_FILE
36
+ self.extra = {}
36
37
 
37
38
  def serialize(self) -> dict:
38
39
  """
@@ -50,6 +51,7 @@ class AttachmentItem:
50
51
  'ctx': self.ctx,
51
52
  'vector_store_ids': self.vector_store_ids,
52
53
  'type': self.type,
54
+ 'extra': self.extra,
53
55
  'meta_id': self.meta_id,
54
56
  'send': self.send
55
57
  }
@@ -78,6 +80,8 @@ class AttachmentItem:
78
80
  self.vector_store_ids = data['vector_store_ids']
79
81
  if 'type' in data:
80
82
  self.type = data['type']
83
+ if 'extra' in data:
84
+ self.extra = data['extra']
81
85
  if 'meta_id' in data:
82
86
  self.meta_id = data['meta_id']
83
87
  if 'send' in data: