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.
Files changed (255) hide show
  1. CHANGELOG.md +29 -0
  2. README.md +44 -115
  3. pygpt_net/CHANGELOG.txt +29 -0
  4. pygpt_net/__init__.py +3 -3
  5. pygpt_net/controller/__init__.py +7 -3
  6. pygpt_net/controller/access/control.py +1 -1
  7. pygpt_net/controller/access/voice.py +11 -5
  8. pygpt_net/controller/agent/experts.py +11 -6
  9. pygpt_net/controller/agent/legacy.py +8 -6
  10. pygpt_net/controller/agent/llama.py +4 -2
  11. pygpt_net/controller/assistant/__init__.py +9 -4
  12. pygpt_net/controller/assistant/batch.py +38 -21
  13. pygpt_net/controller/assistant/editor.py +7 -6
  14. pygpt_net/controller/assistant/files.py +23 -7
  15. pygpt_net/controller/assistant/store.py +20 -7
  16. pygpt_net/controller/assistant/threads.py +34 -8
  17. pygpt_net/controller/attachment.py +29 -10
  18. pygpt_net/controller/audio/__init__.py +25 -4
  19. pygpt_net/controller/calendar/__init__.py +23 -4
  20. pygpt_net/controller/calendar/note.py +57 -11
  21. pygpt_net/controller/camera.py +3 -2
  22. pygpt_net/controller/chat/__init__.py +5 -3
  23. pygpt_net/controller/chat/attachment.py +34 -7
  24. pygpt_net/controller/chat/command.py +4 -2
  25. pygpt_net/controller/chat/common.py +11 -4
  26. pygpt_net/controller/chat/files.py +10 -3
  27. pygpt_net/controller/chat/image.py +17 -5
  28. pygpt_net/controller/chat/input.py +10 -7
  29. pygpt_net/controller/chat/output.py +21 -6
  30. pygpt_net/controller/chat/render.py +100 -21
  31. pygpt_net/controller/chat/response.py +34 -7
  32. pygpt_net/controller/chat/stream.py +4 -2
  33. pygpt_net/controller/chat/text.py +6 -4
  34. pygpt_net/controller/command.py +11 -3
  35. pygpt_net/controller/config/__init__.py +34 -6
  36. pygpt_net/controller/config/field/checkbox.py +7 -4
  37. pygpt_net/controller/config/field/cmd.py +7 -5
  38. pygpt_net/controller/config/field/combo.py +14 -6
  39. pygpt_net/controller/config/field/dictionary.py +14 -11
  40. pygpt_net/controller/config/field/input.py +9 -6
  41. pygpt_net/controller/config/field/slider.py +11 -8
  42. pygpt_net/controller/config/field/textarea.py +8 -5
  43. pygpt_net/controller/config/placeholder.py +52 -21
  44. pygpt_net/controller/ctx/__init__.py +138 -49
  45. pygpt_net/controller/ctx/common.py +15 -4
  46. pygpt_net/controller/ctx/extra.py +11 -3
  47. pygpt_net/controller/ctx/summarizer.py +24 -5
  48. pygpt_net/controller/debug/__init__.py +27 -6
  49. pygpt_net/controller/dialogs/confirm.py +34 -7
  50. pygpt_net/controller/dialogs/debug.py +4 -2
  51. pygpt_net/controller/dialogs/info.py +7 -2
  52. pygpt_net/controller/files.py +48 -10
  53. pygpt_net/controller/finder.py +11 -5
  54. pygpt_net/controller/idx/__init__.py +10 -3
  55. pygpt_net/controller/idx/common.py +4 -2
  56. pygpt_net/controller/idx/indexer.py +25 -17
  57. pygpt_net/controller/idx/settings.py +9 -3
  58. pygpt_net/controller/kernel/__init__.py +34 -8
  59. pygpt_net/controller/kernel/reply.py +12 -3
  60. pygpt_net/controller/kernel/stack.py +5 -3
  61. pygpt_net/controller/lang/custom.py +2 -7
  62. pygpt_net/controller/lang/mapping.py +5 -3
  63. pygpt_net/controller/layout.py +2 -2
  64. pygpt_net/controller/mode.py +16 -4
  65. pygpt_net/controller/model/__init__.py +14 -3
  66. pygpt_net/controller/model/editor.py +8 -3
  67. pygpt_net/controller/notepad.py +26 -12
  68. pygpt_net/controller/painter/capture.py +23 -4
  69. pygpt_net/controller/painter/common.py +9 -7
  70. pygpt_net/controller/plugins/__init__.py +19 -5
  71. pygpt_net/controller/plugins/presets.py +15 -6
  72. pygpt_net/controller/plugins/settings.py +9 -3
  73. pygpt_net/controller/presets/__init__.py +55 -16
  74. pygpt_net/controller/presets/editor.py +26 -10
  75. pygpt_net/controller/settings/__init__.py +3 -2
  76. pygpt_net/controller/settings/editor.py +29 -7
  77. pygpt_net/controller/settings/profile.py +22 -5
  78. pygpt_net/controller/theme/__init__.py +54 -12
  79. pygpt_net/controller/theme/common.py +24 -2
  80. pygpt_net/controller/theme/markdown.py +32 -16
  81. pygpt_net/controller/theme/menu.py +26 -5
  82. pygpt_net/controller/theme/nodes.py +2 -5
  83. pygpt_net/controller/tools/__init__.py +40 -2
  84. pygpt_net/controller/ui/__init__.py +4 -6
  85. pygpt_net/controller/ui/tabs.py +363 -65
  86. pygpt_net/core/access/actions.py +6 -4
  87. pygpt_net/core/access/shortcuts.py +4 -3
  88. pygpt_net/core/access/voice.py +6 -5
  89. pygpt_net/core/agents/legacy.py +4 -2
  90. pygpt_net/core/agents/memory.py +7 -2
  91. pygpt_net/core/agents/observer/evaluation.py +15 -7
  92. pygpt_net/core/agents/provider.py +9 -4
  93. pygpt_net/core/agents/runner.py +61 -15
  94. pygpt_net/core/agents/tools.py +23 -5
  95. pygpt_net/core/assistants/__init__.py +6 -4
  96. pygpt_net/core/assistants/files.py +35 -12
  97. pygpt_net/core/assistants/store.py +20 -10
  98. pygpt_net/core/attachments/__init__.py +54 -15
  99. pygpt_net/core/attachments/context.py +92 -29
  100. pygpt_net/core/audio/__init__.py +71 -3
  101. pygpt_net/core/audio/context.py +7 -2
  102. pygpt_net/core/bridge/__init__.py +22 -6
  103. pygpt_net/core/bridge/context.py +5 -3
  104. pygpt_net/core/calendar/__init__.py +57 -11
  105. pygpt_net/core/chain/__init__.py +8 -2
  106. pygpt_net/core/chain/chat.py +10 -8
  107. pygpt_net/core/chain/completion.py +10 -7
  108. pygpt_net/core/command.py +62 -17
  109. pygpt_net/core/ctx/__init__.py +260 -58
  110. pygpt_net/core/ctx/bag.py +25 -4
  111. pygpt_net/core/ctx/container.py +28 -17
  112. pygpt_net/core/ctx/idx.py +45 -8
  113. pygpt_net/core/ctx/output.py +95 -74
  114. pygpt_net/core/ctx/reply.py +5 -2
  115. pygpt_net/core/db/__init__.py +8 -7
  116. pygpt_net/core/db/viewer.py +17 -11
  117. pygpt_net/core/debug/__init__.py +10 -9
  118. pygpt_net/core/debug/tabs.py +5 -2
  119. pygpt_net/core/docker/__init__.py +11 -5
  120. pygpt_net/core/docker/builder.py +11 -3
  121. pygpt_net/core/events/app.py +5 -3
  122. pygpt_net/core/events/base.py +11 -5
  123. pygpt_net/core/events/control.py +5 -3
  124. pygpt_net/core/events/event.py +17 -7
  125. pygpt_net/core/events/kernel.py +5 -3
  126. pygpt_net/core/events/render.py +5 -3
  127. pygpt_net/core/experts/__init__.py +5 -4
  128. pygpt_net/core/filesystem/__init__.py +52 -34
  129. pygpt_net/core/filesystem/actions.py +8 -5
  130. pygpt_net/core/filesystem/editor.py +13 -3
  131. pygpt_net/core/filesystem/types.py +12 -7
  132. pygpt_net/core/filesystem/url.py +7 -3
  133. pygpt_net/core/idx/__init__.py +34 -25
  134. pygpt_net/core/idx/chat.py +40 -16
  135. pygpt_net/core/idx/context.py +6 -2
  136. pygpt_net/core/idx/indexing.py +84 -35
  137. pygpt_net/core/idx/llm.py +11 -3
  138. pygpt_net/core/idx/metadata.py +13 -3
  139. pygpt_net/core/idx/types/ctx.py +32 -6
  140. pygpt_net/core/idx/types/external.py +41 -7
  141. pygpt_net/core/idx/types/files.py +31 -6
  142. pygpt_net/core/image.py +15 -4
  143. pygpt_net/core/llm/__init__.py +13 -3
  144. pygpt_net/core/locale.py +34 -8
  145. pygpt_net/core/models.py +4 -3
  146. pygpt_net/core/notepad.py +9 -4
  147. pygpt_net/core/plugins.py +7 -6
  148. pygpt_net/core/presets.py +19 -10
  149. pygpt_net/core/profile.py +12 -6
  150. pygpt_net/core/prompt/__init__.py +10 -3
  151. pygpt_net/core/prompt/custom.py +7 -6
  152. pygpt_net/core/prompt/template.py +9 -3
  153. pygpt_net/core/render/base.py +117 -22
  154. pygpt_net/core/render/markdown/body.py +27 -7
  155. pygpt_net/core/render/markdown/renderer.py +119 -22
  156. pygpt_net/core/render/plain/body.py +22 -5
  157. pygpt_net/core/render/plain/renderer.py +97 -21
  158. pygpt_net/core/render/web/body.py +75 -25
  159. pygpt_net/core/render/web/renderer.py +313 -63
  160. pygpt_net/core/settings.py +9 -4
  161. pygpt_net/core/tabs/__init__.py +290 -103
  162. pygpt_net/core/tabs/tab.py +17 -4
  163. pygpt_net/core/tokens.py +44 -11
  164. pygpt_net/core/updater/__init__.py +20 -7
  165. pygpt_net/core/vision/analyzer.py +29 -6
  166. pygpt_net/core/web.py +130 -2
  167. pygpt_net/data/config/config.json +15 -4
  168. pygpt_net/data/config/models.json +3 -3
  169. pygpt_net/data/config/modes.json +3 -3
  170. pygpt_net/data/config/settings.json +55 -10
  171. pygpt_net/data/config/settings_section.json +3 -0
  172. pygpt_net/data/css/style.light.css +1 -0
  173. pygpt_net/data/css/{web.css → web-blocks.css} +162 -133
  174. pygpt_net/data/css/{web.light.css → web-blocks.light.css} +7 -0
  175. pygpt_net/data/css/web-chatgpt.css +350 -0
  176. pygpt_net/data/css/web-chatgpt.dark.css +64 -0
  177. pygpt_net/data/css/web-chatgpt.light.css +75 -0
  178. pygpt_net/data/css/web-chatgpt_wide.css +350 -0
  179. pygpt_net/data/css/web-chatgpt_wide.dark.css +64 -0
  180. pygpt_net/data/css/web-chatgpt_wide.light.css +75 -0
  181. pygpt_net/data/icons/split_screen.svg +1 -0
  182. pygpt_net/data/locale/locale.de.ini +12 -0
  183. pygpt_net/data/locale/locale.en.ini +17 -2
  184. pygpt_net/data/locale/locale.es.ini +12 -0
  185. pygpt_net/data/locale/locale.fr.ini +12 -0
  186. pygpt_net/data/locale/locale.it.ini +12 -0
  187. pygpt_net/data/locale/locale.pl.ini +12 -0
  188. pygpt_net/data/locale/locale.uk.ini +12 -0
  189. pygpt_net/data/locale/locale.zh.ini +12 -0
  190. pygpt_net/data/locale/plugin.cmd_web.de.ini +2 -0
  191. pygpt_net/data/locale/plugin.cmd_web.en.ini +20 -10
  192. pygpt_net/data/locale/plugin.cmd_web.es.ini +2 -0
  193. pygpt_net/data/locale/plugin.cmd_web.fr.ini +2 -0
  194. pygpt_net/data/locale/plugin.cmd_web.it.ini +2 -0
  195. pygpt_net/data/locale/plugin.cmd_web.pl.ini +2 -0
  196. pygpt_net/data/locale/plugin.cmd_web.uk.ini +2 -0
  197. pygpt_net/data/locale/plugin.cmd_web.zh.ini +2 -0
  198. pygpt_net/icons.qrc +1 -0
  199. pygpt_net/icons_rc.py +165 -136
  200. pygpt_net/item/ctx.py +46 -24
  201. pygpt_net/plugin/audio_input/simple.py +21 -5
  202. pygpt_net/plugin/audio_output/__init__.py +4 -1
  203. pygpt_net/plugin/base/config.py +4 -2
  204. pygpt_net/plugin/base/plugin.py +26 -6
  205. pygpt_net/plugin/base/worker.py +37 -9
  206. pygpt_net/plugin/cmd_code_interpreter/__init__.py +39 -37
  207. pygpt_net/plugin/cmd_code_interpreter/runner.py +25 -12
  208. pygpt_net/plugin/cmd_web/__init__.py +46 -6
  209. pygpt_net/plugin/cmd_web/config.py +74 -48
  210. pygpt_net/plugin/cmd_web/websearch.py +61 -28
  211. pygpt_net/plugin/cmd_web/worker.py +79 -13
  212. pygpt_net/provider/core/config/patch.py +43 -1
  213. pygpt_net/provider/core/ctx/base.py +4 -1
  214. pygpt_net/provider/core/ctx/db_sqlite/__init__.py +10 -1
  215. pygpt_net/provider/core/ctx/db_sqlite/storage.py +22 -1
  216. pygpt_net/provider/gpt/assistants.py +10 -9
  217. pygpt_net/provider/gpt/audio.py +3 -2
  218. pygpt_net/provider/gpt/chat.py +8 -7
  219. pygpt_net/provider/gpt/completion.py +6 -4
  220. pygpt_net/provider/gpt/image.py +9 -2
  221. pygpt_net/provider/gpt/store.py +14 -13
  222. pygpt_net/provider/gpt/vision.py +6 -5
  223. pygpt_net/tools/__init__.py +9 -1
  224. pygpt_net/tools/base.py +15 -1
  225. pygpt_net/tools/code_interpreter/__init__.py +174 -75
  226. pygpt_net/tools/code_interpreter/ui/dialogs.py +21 -103
  227. pygpt_net/tools/code_interpreter/ui/widgets.py +284 -9
  228. pygpt_net/tools/html_canvas/__init__.py +78 -23
  229. pygpt_net/tools/html_canvas/ui/dialogs.py +46 -62
  230. pygpt_net/tools/html_canvas/ui/widgets.py +96 -3
  231. pygpt_net/ui/base/context_menu.py +2 -2
  232. pygpt_net/ui/layout/chat/input.py +10 -18
  233. pygpt_net/ui/layout/chat/output.py +26 -44
  234. pygpt_net/ui/layout/ctx/ctx_list.py +13 -4
  235. pygpt_net/ui/layout/toolbox/footer.py +18 -2
  236. pygpt_net/ui/main.py +2 -2
  237. pygpt_net/ui/menu/config.py +7 -11
  238. pygpt_net/ui/menu/debug.py +11 -1
  239. pygpt_net/ui/menu/theme.py +9 -2
  240. pygpt_net/ui/widget/filesystem/explorer.py +2 -2
  241. pygpt_net/ui/widget/lists/context.py +27 -5
  242. pygpt_net/ui/widget/tabs/Input.py +2 -2
  243. pygpt_net/ui/widget/tabs/body.py +2 -1
  244. pygpt_net/ui/widget/tabs/layout.py +195 -0
  245. pygpt_net/ui/widget/tabs/output.py +218 -55
  246. pygpt_net/ui/widget/textarea/html.py +11 -1
  247. pygpt_net/ui/widget/textarea/output.py +10 -1
  248. pygpt_net/ui/widget/textarea/search_input.py +4 -1
  249. pygpt_net/ui/widget/textarea/web.py +49 -9
  250. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/METADATA +45 -116
  251. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/RECORD +255 -247
  252. /pygpt_net/data/css/{web.dark.css → web-blocks.dark.css} +0 -0
  253. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/LICENSE +0 -0
  254. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/WHEEL +0 -0
  255. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/entry_points.txt +0 -0
@@ -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.08.29 04:00:00 #
9
+ # Updated Date: 2024.12.09 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import time
@@ -118,6 +118,15 @@ class DbSqliteProvider(BaseProvider):
118
118
  """
119
119
  return self.storage.get_last_meta_id()
120
120
 
121
+ def get_item_by_id(self, id: int) -> CtxItem:
122
+ """
123
+ Get ctx item by ID
124
+
125
+ :param id: ctx item ID
126
+ :return: ctx item
127
+ """
128
+ return self.storage.get_item_by_id(id)
129
+
121
130
  def load(self, id: int) -> list:
122
131
  """
123
132
  Load items for ctx ID
@@ -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 19:00:00 #
9
+ # Updated Date: 2024.12.09 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from datetime import datetime
@@ -189,6 +189,27 @@ class Storage:
189
189
  items[meta.id] = meta
190
190
  return items
191
191
 
192
+ def get_item_by_id(self, id: int) -> CtxItem:
193
+ """
194
+ Return ctx item by ID
195
+
196
+ :return: CtxItem
197
+ """
198
+ stmt = text("""
199
+ SELECT * FROM ctx_item WHERE id = :id
200
+ """).bindparams(id=id)
201
+ db = self.window.core.db.get_db()
202
+ with db.connect() as conn:
203
+ result = conn.execute(stmt)
204
+ row = result.fetchone()
205
+ if row:
206
+ item = CtxItem()
207
+ unpack_item(item, row._asdict())
208
+ meta = self.get_meta_by_id(item.meta_id) # append meta
209
+ item.meta = meta
210
+ return item
211
+ return None
212
+
192
213
  def get_meta_by_root_id_and_preset_id(self, root_id: int, preset_id: str) -> dict:
193
214
  """
194
215
  Return dict with indexed CtxMeta objects, indexed by ID
@@ -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.04.30 16:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
13
+ from typing import Optional
13
14
 
14
15
  from pygpt_net.item.assistant import AssistantItem
15
16
  from pygpt_net.item.ctx import CtxItem
@@ -37,7 +38,7 @@ class Assistants:
37
38
  """
38
39
  return self.window.core.gpt.get_client()
39
40
 
40
- def log(self, msg: str, callback: callable = None):
41
+ def log(self, msg: str, callback: Optional[callable] = None):
41
42
  """
42
43
  Log message
43
44
 
@@ -140,7 +141,7 @@ class Assistants:
140
141
  thread_messages = client.beta.threads.messages.list(thread_id)
141
142
  return thread_messages.data
142
143
 
143
- def msg_send(self, id: str, text: str, file_ids: list = None):
144
+ def msg_send(self, id: str, text: str, file_ids: Optional[list] = None):
144
145
  """
145
146
  Send message to thread
146
147
 
@@ -226,8 +227,8 @@ class Assistants:
226
227
  self,
227
228
  thread_id: str,
228
229
  assistant_id: str,
229
- model: str = None,
230
- instructions: str = None
230
+ model: Optional[str] = None,
231
+ instructions: Optional[str] = None
231
232
  ):
232
233
  """
233
234
  Create assistant run
@@ -259,8 +260,8 @@ class Assistants:
259
260
  ctx: CtxItem,
260
261
  thread_id: str,
261
262
  assistant_id: str,
262
- model: str = None,
263
- instructions: str = None
263
+ model: Optional[str] = None,
264
+ instructions: Optional[str] = None
264
265
  ):
265
266
  """
266
267
  Create assistant run (stream)
@@ -377,8 +378,8 @@ class Assistants:
377
378
  items: dict,
378
379
  order: str = "asc",
379
380
  limit: int = 100,
380
- after: str = None,
381
- callback: callable = None
381
+ after: Optional[str] = None,
382
+ callback: Optional[callable] = None
382
383
  ) -> dict:
383
384
  """
384
385
  Import assistants from API (all, paginated)
@@ -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.11.26 19:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import base64
13
+ from typing import Optional
13
14
 
14
15
  from pygpt_net.core.bridge.context import MultimodalContext
15
16
 
@@ -26,7 +27,7 @@ class Audio:
26
27
  def build_content(
27
28
  self,
28
29
  content,
29
- multimodal_ctx: MultimodalContext = None,
30
+ multimodal_ctx: Optional[MultimodalContext] = None,
30
31
  ) -> list:
31
32
  """
32
33
  Build audio content
@@ -6,11 +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.11.26 19:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
13
13
  import time
14
+ from typing import Optional
14
15
 
15
16
  from pygpt_net.core.types import (
16
17
  MODE_CHAT,
@@ -36,7 +37,7 @@ class Chat:
36
37
  def send(
37
38
  self,
38
39
  context: BridgeContext,
39
- extra: dict = None
40
+ extra: Optional[dict] = None
40
41
  ):
41
42
  """
42
43
  Call OpenAI API for chat
@@ -151,11 +152,11 @@ class Chat:
151
152
  prompt: str,
152
153
  system_prompt: str,
153
154
  model: ModelItem,
154
- history: list = None,
155
- attachments: dict = None,
156
- ai_name: str = None,
157
- user_name: str = None,
158
- multimodal_ctx: MultimodalContext = None,
155
+ history: Optional[list] = None,
156
+ attachments: Optional[dict] = None,
157
+ ai_name: Optional[str] = None,
158
+ user_name: Optional[str] = None,
159
+ multimodal_ctx: Optional[MultimodalContext] = None,
159
160
  ) -> list:
160
161
  """
161
162
  Build list of chat messages
@@ -6,9 +6,11 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.23 00:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Optional
13
+
12
14
  from pygpt_net.core.types import (
13
15
  MODE_COMPLETION,
14
16
  )
@@ -98,9 +100,9 @@ class Completion:
98
100
  prompt: str,
99
101
  system_prompt: str,
100
102
  model: ModelItem,
101
- history: list = None,
102
- ai_name: str = None,
103
- user_name: str = None,
103
+ history: Optional[list] = None,
104
+ ai_name: Optional[str] = None,
105
+ user_name: Optional[str] = None,
104
106
  ) -> str:
105
107
  """
106
108
  Build completion string
@@ -6,11 +6,13 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.20 21:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import datetime
13
13
  import os
14
+ from typing import Optional
15
+
14
16
  import requests
15
17
 
16
18
  from PySide6.QtCore import QObject, Signal, QRunnable, Slot
@@ -31,7 +33,12 @@ class Image:
31
33
  self.window = window
32
34
  self.worker = None
33
35
 
34
- def generate(self, context: BridgeContext, extra: dict = None, sync: bool = True):
36
+ def generate(
37
+ self,
38
+ context: BridgeContext,
39
+ extra: Optional[dict] = None,
40
+ sync: bool = True
41
+ ):
35
42
  """
36
43
  Call images API
37
44
 
@@ -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.04.30 16:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
13
+ from typing import Optional
13
14
 
14
15
  from pygpt_net.item.assistant import AssistantStoreItem
15
16
 
@@ -31,7 +32,7 @@ class Store:
31
32
  """
32
33
  return self.window.core.gpt.get_client()
33
34
 
34
- def log(self, msg: str, callback: callable = None):
35
+ def log(self, msg: str, callback: Optional[callable] = None):
35
36
  """
36
37
  Log message
37
38
 
@@ -57,7 +58,7 @@ class Store:
57
58
  self,
58
59
  path: str,
59
60
  purpose: str = "assistants"
60
- ) -> str or None:
61
+ ) -> Optional[str]:
61
62
  """
62
63
  Upload file to assistant
63
64
 
@@ -98,7 +99,7 @@ class Store:
98
99
  items: list,
99
100
  order: str = "asc",
100
101
  limit: int = 100,
101
- after: str = None,
102
+ after: Optional[str] = None,
102
103
  ) -> list:
103
104
  """
104
105
  Get all vector store IDs
@@ -148,7 +149,7 @@ class Store:
148
149
  items.append(id)
149
150
  return items
150
151
 
151
- def remove_files(self, callback: callable = None) -> int:
152
+ def remove_files(self, callback: Optional[callable] = None) -> int:
152
153
  """
153
154
  Remove all files
154
155
 
@@ -167,7 +168,7 @@ class Store:
167
168
  self.log(msg, callback)
168
169
  return num
169
170
 
170
- def remove_store_files(self, store_id: str, callback: callable = None) -> int:
171
+ def remove_store_files(self, store_id: str, callback: Optional[callable] = None) -> int:
171
172
  """
172
173
  Remove all files from store
173
174
 
@@ -192,8 +193,8 @@ class Store:
192
193
  items: dict,
193
194
  order: str = "asc",
194
195
  limit: int = 100,
195
- after: str = None,
196
- callback: callable = None
196
+ after: Optional[str] = None,
197
+ callback: Optional[callable] = None
197
198
  ) -> dict:
198
199
  """
199
200
  Import vector stores from API
@@ -318,7 +319,7 @@ class Store:
318
319
  items: list,
319
320
  order: str = "asc",
320
321
  limit: int = 100,
321
- after: str = None,
322
+ after: Optional[str] = None,
322
323
  ) -> list:
323
324
  """
324
325
  Get all vector stores IDs
@@ -358,7 +359,7 @@ class Store:
358
359
  items: list,
359
360
  order: str = "asc",
360
361
  limit: int = 100,
361
- after: str = None,
362
+ after: Optional[str] = None,
362
363
  ) -> list:
363
364
  """
364
365
  Get all vector store files IDs
@@ -426,7 +427,7 @@ class Store:
426
427
  num += 1
427
428
  return num
428
429
 
429
- def remove_all(self, callback: callable = None) -> int:
430
+ def remove_all(self, callback: Optional[callable] = None) -> int:
430
431
  """
431
432
  Remove all vector stores
432
433
 
@@ -495,7 +496,7 @@ class Store:
495
496
  if vector_store_file is not None:
496
497
  return vector_store_file
497
498
 
498
- def import_stores_files(self, callback: callable = None) -> int:
499
+ def import_stores_files(self, callback: Optional[callable] = None) -> int:
499
500
  """
500
501
  Import all vector stores files
501
502
 
@@ -525,7 +526,7 @@ class Store:
525
526
  order: str = "asc",
526
527
  limit: int = 100,
527
528
  after: str = None,
528
- callback: callable = None
529
+ callback: Optional[callable] = None
529
530
  ) -> list:
530
531
  """
531
532
  Import and get all vector store files IDs
@@ -6,12 +6,13 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.26 19:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import base64
13
13
  import os
14
14
  import re
15
+ from typing import Optional, Union
15
16
 
16
17
  from pygpt_net.core.types import (
17
18
  MODE_VISION,
@@ -77,8 +78,8 @@ class Vision:
77
78
  prompt: str,
78
79
  system_prompt: str,
79
80
  model: ModelItem,
80
- history: list = None,
81
- attachments: dict = None,
81
+ history: Optional[list] = None,
82
+ attachments: Optional[dict] = None,
82
83
  ) -> list:
83
84
  """
84
85
  Build chat messages list
@@ -160,8 +161,8 @@ class Vision:
160
161
 
161
162
  def build_content(
162
163
  self,
163
- content: str or list,
164
- attachments: dict = None,
164
+ content: Union[str, list],
165
+ attachments: Optional[dict] = None,
165
166
  ) -> list:
166
167
  """
167
168
  Build vision 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.04.19 01:00:00 #
9
+ # Updated Date: 2024.12.09 23:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from pygpt_net.ui.widget.dialog.base import BaseDialog
@@ -42,6 +42,14 @@ class Tools:
42
42
  if id in self.tools:
43
43
  return self.tools[id]
44
44
 
45
+ def get_all(self) -> dict:
46
+ """
47
+ Get all tools
48
+
49
+ :return: dict with tools
50
+ """
51
+ return self.tools
52
+
45
53
  def setup(self):
46
54
  """Setup tools"""
47
55
  self.setup_dialogs()
pygpt_net/tools/base.py CHANGED
@@ -6,11 +6,13 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.14 01:00:00 #
9
+ # Updated Date: 2024.12.12 04:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from PySide6.QtCore import QObject
13
+ from PySide6.QtWidgets import QWidget
13
14
 
15
+ from pygpt_net.core.tabs.tab import Tab
14
16
  from pygpt_net.ui.widget.dialog.base import BaseDialog
15
17
 
16
18
  class BaseTool(QObject):
@@ -25,6 +27,9 @@ class BaseTool(QObject):
25
27
  super(BaseTool, self).__init__()
26
28
  self.window = None
27
29
  self.id = ""
30
+ self.has_tab = False
31
+ self.tab_title = ""
32
+ self.tab_icon = ":/icons/build.svg"
28
33
 
29
34
  def setup(self):
30
35
  """Setup tool"""
@@ -83,6 +88,15 @@ class BaseTool(QObject):
83
88
  """
84
89
  return None
85
90
 
91
+ def as_tab(self, tab: Tab) -> QWidget or None:
92
+ """
93
+ Spawn and return tab instance
94
+
95
+ :param tab: Parent tab instance
96
+ :return: Tab widget instance
97
+ """
98
+ return None
99
+
86
100
  def get_lang_mappings(self) -> dict:
87
101
  """
88
102
  Get language mappings