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,9 +6,12 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.26 02:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Any, Optional
13
+
14
+
12
15
  class Confirm:
13
16
  def __init__(self, window=None):
14
17
  """
@@ -18,7 +21,12 @@ class Confirm:
18
21
  """
19
22
  self.window = window
20
23
 
21
- def accept(self, type: str, id: any = None, parent_object=None):
24
+ def accept(
25
+ self,
26
+ type: str,
27
+ id: Optional[str] = None,
28
+ parent_object: Any = None
29
+ ):
22
30
  """
23
31
  Confirm dialog accept
24
32
 
@@ -154,7 +162,7 @@ class Confirm:
154
162
 
155
163
  # tab close all
156
164
  elif type == 'tab.close_all':
157
- self.window.controller.ui.tabs.close_all(id, True) # by type
165
+ self.window.controller.ui.tabs.close_all(id, 0, True) # by type
158
166
 
159
167
  # editor
160
168
  elif type == 'editor.changed.clear':
@@ -264,7 +272,11 @@ class Confirm:
264
272
  elif type == 'prompt.custom.delete':
265
273
  self.window.controller.presets.delete_prompt(id, True)
266
274
 
267
- def dismiss(self, type: str, id: any):
275
+ def dismiss(
276
+ self,
277
+ type: str,
278
+ id: Any
279
+ ):
268
280
  """
269
281
  Confirm dialog dismiss
270
282
 
@@ -283,7 +295,12 @@ class Confirm:
283
295
 
284
296
  self.window.ui.dialog['confirm'].close()
285
297
 
286
- def accept_rename(self, type: str, id: any, name: str):
298
+ def accept_rename(
299
+ self,
300
+ type: str,
301
+ id: Any,
302
+ name: str
303
+ ):
287
304
  """
288
305
  Update name of object
289
306
 
@@ -325,7 +342,12 @@ class Confirm:
325
342
  elif type == 'prompt.custom.new':
326
343
  self.window.controller.presets.save_prompt(name, True)
327
344
 
328
- def accept_create(self, type: str, id: any, name: str):
345
+ def accept_create(
346
+ self,
347
+ type: str,
348
+ id: any,
349
+ name: str
350
+ ):
329
351
  """
330
352
  Create new object
331
353
 
@@ -349,7 +371,12 @@ class Confirm:
349
371
  elif type == 'ctx.group':
350
372
  self.window.controller.ctx.create_group(name, id)
351
373
 
352
- def accept_url(self, type: str, id: any, url: str):
374
+ def accept_url(
375
+ self,
376
+ type: str,
377
+ id: any,
378
+ url: str
379
+ ):
353
380
  """
354
381
  Update URL provided
355
382
 
@@ -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.05 23:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Any
13
+
12
14
  from PySide6.QtCore import Qt
13
15
  from PySide6.QtGui import QStandardItemModel
14
16
 
@@ -95,7 +97,7 @@ class Debug:
95
97
  self.initialized[id] = True
96
98
  self.window.ui.debug[id].on_data_end()
97
99
 
98
- def add(self, id: str, k: str, v: any):
100
+ def add(self, id: str, k: str, v: Any):
99
101
  """
100
102
  Append debug entry
101
103
 
@@ -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.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import webbrowser
@@ -32,7 +32,12 @@ class Info:
32
32
  def setup(self):
33
33
  pass
34
34
 
35
- def toggle(self, id: str, width: int = 400, height: int = 400):
35
+ def toggle(
36
+ self,
37
+ id: str,
38
+ width: int = 400,
39
+ height: int = 400
40
+ ):
36
41
  """
37
42
  Toggle info dialog
38
43
 
@@ -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.04.30 04:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import datetime
13
13
  import os
14
14
  import shutil
15
+ from typing import Optional
15
16
 
16
17
  from PySide6.QtCore import QUrl
17
18
  from PySide6.QtGui import QDesktopServices
@@ -38,7 +39,11 @@ class Files:
38
39
  # TODO: implement this
39
40
  pass
40
41
 
41
- def delete_recursive(self, path: str, force: bool = False):
42
+ def delete_recursive(
43
+ self,
44
+ path: str,
45
+ force: bool = False
46
+ ):
42
47
  """
43
48
  Delete directory with all files
44
49
 
@@ -62,7 +67,12 @@ class Files:
62
67
  self.window.core.debug.log(e)
63
68
  print("Error deleting directory: {} - {}".format(path, e))
64
69
 
65
- def touch_file(self, path: str, name: str = None, force: bool = False):
70
+ def touch_file(
71
+ self,
72
+ path: str,
73
+ name: Optional[str] = None,
74
+ force: bool = False
75
+ ):
66
76
  """
67
77
  Touch empty file
68
78
 
@@ -90,7 +100,11 @@ class Files:
90
100
  self.window.core.debug.log(e)
91
101
  print("Error creating file: {} - {}".format(path, e))
92
102
 
93
- def delete(self, path: str, force: bool = False):
103
+ def delete(
104
+ self,
105
+ path: str,
106
+ force: bool = False
107
+ ):
94
108
  """
95
109
  Delete file or directory
96
110
 
@@ -123,7 +137,12 @@ class Files:
123
137
  self.window.core.debug.log(e)
124
138
  print("Error deleting file: {} - {}".format(path, e))
125
139
 
126
- def duplicate_local(self, path: str, name: str, force: bool = False):
140
+ def duplicate_local(
141
+ self,
142
+ path: str,
143
+ name: str,
144
+ force: bool = False
145
+ ):
127
146
  """
128
147
  Duplicate file or directory
129
148
 
@@ -198,7 +217,10 @@ class Files:
198
217
  self.window.core.debug.log(e)
199
218
  print("Error downloading file: {} - {}".format(path, e))
200
219
 
201
- def upload_local(self, parent_path: str = None):
220
+ def upload_local(
221
+ self,
222
+ parent_path: Optional[str] = None
223
+ ):
202
224
  """
203
225
  Upload local file(s) to directory
204
226
 
@@ -263,7 +285,11 @@ class Files:
263
285
  self.window.ui.dialog['rename'].show()
264
286
  self.window.ui.dialog['rename'].input.setFocus()
265
287
 
266
- def update_name(self, path: str, name: str):
288
+ def update_name(
289
+ self,
290
+ path: str,
291
+ name: str
292
+ ):
267
293
  """
268
294
  Update name of file or directory
269
295
 
@@ -283,7 +309,11 @@ class Files:
283
309
  self.window.ui.dialog['rename'].close()
284
310
  self.update_explorer()
285
311
 
286
- def open_dir(self, path: str, select: bool = False):
312
+ def open_dir(
313
+ self,
314
+ path: str,
315
+ select: bool = False
316
+ ):
287
317
  """
288
318
  Open file or directory in file manager
289
319
 
@@ -308,7 +338,11 @@ class Files:
308
338
  else:
309
339
  subprocess.run(['xdg-open', path])
310
340
 
311
- def open_in_file_manager(self, path: str, select: bool = False):
341
+ def open_in_file_manager(
342
+ self,
343
+ path: str,
344
+ select: bool = False
345
+ ):
312
346
  """
313
347
  Open in file manager
314
348
 
@@ -341,7 +375,11 @@ class Files:
341
375
  self.window.ui.dialog['create'].show()
342
376
  self.window.ui.dialog['create'].input.setFocus()
343
377
 
344
- def make_dir(self, path: str, name: str = None):
378
+ def make_dir(
379
+ self,
380
+ path: str,
381
+ name: Optional[str] = None
382
+ ):
345
383
  """
346
384
  Make directory
347
385
 
@@ -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.04.20 06:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Any
13
+
12
14
 
13
15
  class Finder:
14
16
  def __init__(self, window=None):
@@ -86,7 +88,7 @@ class Finder:
86
88
  """
87
89
  return self.window.ui.nodes['dialog.find.input'].text()
88
90
 
89
- def set(self, parent):
91
+ def set(self, parent: Any):
90
92
  """
91
93
  Set current parent for the finder
92
94
 
@@ -94,7 +96,7 @@ class Finder:
94
96
  """
95
97
  self.parent = parent
96
98
 
97
- def unset(self, parent):
99
+ def unset(self, parent: Any):
98
100
  """
99
101
  Unset parent from the finder
100
102
 
@@ -103,7 +105,7 @@ class Finder:
103
105
  if self.parent == parent:
104
106
  self.parent = None
105
107
 
106
- def open(self, parent):
108
+ def open(self, parent: Any):
107
109
  """
108
110
  Open finder dialog
109
111
 
@@ -134,7 +136,11 @@ class Finder:
134
136
  self.window.ui.dialog['find'].hide()
135
137
  self.opened = False
136
138
 
137
- def clear(self, restore: bool = False, to_end: bool = True):
139
+ def clear(
140
+ self,
141
+ restore: bool = False,
142
+ to_end: bool = True
143
+ ):
138
144
  """
139
145
  Clear current parent highlights
140
146
 
@@ -6,13 +6,15 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.20 03:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import datetime
13
+ from typing import Optional
13
14
 
14
15
  from pygpt_net.item.ctx import CtxItem
15
16
  from pygpt_net.utils import trans
17
+
16
18
  from .common import Common
17
19
  from .indexer import Indexer
18
20
  from .settings import Settings
@@ -227,7 +229,12 @@ class Idx:
227
229
  return True
228
230
  return False
229
231
 
230
- def on_ctx_end(self, ctx: CtxItem = None, mode: str = None, sync: bool = False):
232
+ def on_ctx_end(
233
+ self,
234
+ ctx: Optional[CtxItem] = None,
235
+ mode: Optional[str] = None,
236
+ sync: bool = False
237
+ ):
231
238
  """
232
239
  After context item updated (request + response received)
233
240
 
@@ -255,7 +262,7 @@ class Idx:
255
262
  if meta is not None:
256
263
  self.indexer.index_ctx_realtime(meta, idx, sync=sync)
257
264
 
258
- def after_index(self, idx: str = None):
265
+ def after_index(self, idx: Optional[str] = None):
259
266
  """
260
267
  Called after index (update things, etc...)
261
268
 
@@ -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.08.25 04:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import List, Dict
13
+
12
14
 
13
15
  class Common:
14
16
  def __init__(self, window=None):
@@ -23,7 +25,7 @@ class Common:
23
25
  """Set up UI"""
24
26
  pass
25
27
 
26
- def get_loaders_choices(self) -> list:
28
+ def get_loaders_choices(self) -> List[Dict[str, str]]:
27
29
  """
28
30
  Get available loaders choices
29
31
 
@@ -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.14 01:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import datetime
13
13
  import os
14
+ from typing import Any, List, Dict
14
15
 
15
16
  from PySide6.QtCore import Slot, QObject
16
17
  from PySide6.QtWidgets import QApplication
@@ -218,8 +219,8 @@ class Indexer(QObject):
218
219
  self,
219
220
  path: str,
220
221
  idx: str = "base",
221
- replace: bool = None,
222
- recursive: bool = None
222
+ replace: bool = False,
223
+ recursive: bool = False
223
224
  ):
224
225
  """
225
226
  Index all files in path (threaded)
@@ -228,7 +229,6 @@ class Indexer(QObject):
228
229
  :param idx: index name
229
230
  :param replace: replace index
230
231
  :param recursive: recursive indexing
231
- :param silent: silent mode
232
232
  """
233
233
  self.window.update_status(trans('idx.status.indexing'))
234
234
  self.worker = IndexWorker()
@@ -245,10 +245,10 @@ class Indexer(QObject):
245
245
 
246
246
  def index_paths(
247
247
  self,
248
- paths: list,
248
+ paths: List[str],
249
249
  idx: str = "base",
250
- replace: bool = None,
251
- recursive: bool = None
250
+ replace: bool = False,
251
+ recursive: bool = False
252
252
  ):
253
253
  """
254
254
  Index all files in path (threaded)
@@ -380,8 +380,8 @@ class Indexer(QObject):
380
380
  self,
381
381
  idx: str,
382
382
  loader: str,
383
- params: dict,
384
- config: dict,
383
+ params: Dict[str, Any],
384
+ config: Dict[str, Any],
385
385
  replace: bool = True,
386
386
  ):
387
387
  """
@@ -456,7 +456,11 @@ class Indexer(QObject):
456
456
  idx_name = self.window.core.idx.get_by_idx(idx)
457
457
  self.clear(idx_name)
458
458
 
459
- def clear(self, idx: str, force: bool = False):
459
+ def clear(
460
+ self,
461
+ idx: str,
462
+ force: bool = False
463
+ ):
460
464
  """
461
465
  Clear index data
462
466
 
@@ -497,7 +501,11 @@ class Indexer(QObject):
497
501
 
498
502
  self.window.tools.get("indexer").refresh()
499
503
 
500
- def truncate(self, idx: str, force: bool = False):
504
+ def truncate(
505
+ self,
506
+ idx: str,
507
+ force: bool = False
508
+ ):
501
509
  """
502
510
  Truncate index data
503
511
 
@@ -542,7 +550,7 @@ class Indexer(QObject):
542
550
  self.window.tools.get("indexer").refresh()
543
551
 
544
552
  @Slot(object)
545
- def handle_error(self, err: any):
553
+ def handle_error(self, err: Any):
546
554
  """
547
555
  Handle thread error signal
548
556
 
@@ -560,7 +568,7 @@ class Indexer(QObject):
560
568
  self,
561
569
  idx: str,
562
570
  num: int,
563
- errors: list,
571
+ errors: List[str],
564
572
  silent: bool = False
565
573
  ):
566
574
  """
@@ -600,7 +608,7 @@ class Indexer(QObject):
600
608
  self,
601
609
  idx: str,
602
610
  num: int,
603
- errors: list,
611
+ errors: List[str],
604
612
  silent: bool = False
605
613
  ):
606
614
  """
@@ -631,8 +639,8 @@ class Indexer(QObject):
631
639
  def handle_finished_file(
632
640
  self,
633
641
  idx: str,
634
- files: dict,
635
- errors: list,
642
+ files: Dict[str, str],
643
+ errors: List[str],
636
644
  silent: bool = False
637
645
  ):
638
646
  """
@@ -667,7 +675,7 @@ class Indexer(QObject):
667
675
  self,
668
676
  idx: str,
669
677
  num: int,
670
- errors: list,
678
+ errors: List[str],
671
679
  silent: bool = False
672
680
  ):
673
681
  """
@@ -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.02.28 22:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import datetime
13
+ from typing import Dict, Any
13
14
 
14
- from PySide6.QtWidgets import QHBoxLayout, QLabel, QMenu
15
+ from PySide6.QtWidgets import QHBoxLayout, QLabel, QMenu, QLayout
15
16
 
16
17
  from pygpt_net.ui.widget.element.button import ContextMenuButton
17
18
  from pygpt_net.ui.widget.element.labels import HelpLabel, TitleLabel
@@ -35,7 +36,12 @@ class Settings:
35
36
  """
36
37
  return ["update"]
37
38
 
38
- def append(self, content: dict, widgets: dict, options: dict):
39
+ def append(
40
+ self,
41
+ content: Dict[str, QLayout],
42
+ widgets: Dict[str, Any],
43
+ options: Dict[str, Any],
44
+ ):
39
45
  """
40
46
  Append extra settings to settings dialog (section: llama-index)
41
47
 
@@ -6,10 +6,12 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import time
13
+ from typing import Any, Dict, Optional, Union, List
14
+
13
15
  from PySide6.QtCore import QObject, Slot
14
16
 
15
17
  from pygpt_net.core.types import (
@@ -117,14 +119,18 @@ class Kernel(QObject):
117
119
 
118
120
  event.data["response"] = response # update response
119
121
 
120
- def input(self, context: BridgeContext, extra: dict, event: KernelEvent) -> any:
122
+ def input(
123
+ self,
124
+ context: BridgeContext,
125
+ extra: Dict[str, Any],
126
+ event: KernelEvent
127
+ ):
121
128
  """
122
129
  Input message to kernel
123
130
 
124
131
  :param context: bridge context
125
132
  :param extra: extra data
126
133
  :param event: kernel event
127
- :return: response
128
134
  """
129
135
  if self.stopped() and event.name != KernelEvent.INPUT_USER:
130
136
  return
@@ -135,7 +141,12 @@ class Kernel(QObject):
135
141
  ]:
136
142
  return self.window.controller.chat.input.send(context, extra)
137
143
 
138
- def queue(self, context: BridgeContext, extra: dict, event: KernelEvent) -> any:
144
+ def queue(
145
+ self,
146
+ context: BridgeContext,
147
+ extra: Dict[str, Any],
148
+ event: KernelEvent
149
+ ) -> Optional[Union[bool, str, List[Dict]]]:
139
150
  """
140
151
  Queue messages to kernel
141
152
 
@@ -170,7 +181,12 @@ class Kernel(QObject):
170
181
  elif event.name == KernelEvent.CALL:
171
182
  return self.call(context, extra, event)
172
183
 
173
- def call(self, context: BridgeContext, extra: dict, event: KernelEvent) -> any:
184
+ def call(
185
+ self,
186
+ context: BridgeContext,
187
+ extra: Dict[str, Any],
188
+ event: KernelEvent
189
+ ) -> Optional[Union[bool, str]]:
174
190
  """
175
191
  Execute message
176
192
 
@@ -189,7 +205,12 @@ class Kernel(QObject):
189
205
  elif event.name == KernelEvent.CALL:
190
206
  return self.window.core.bridge.call(context, extra)
191
207
 
192
- def reply(self, context: BridgeContext, extra: dict, event: KernelEvent) -> any:
208
+ def reply(
209
+ self,
210
+ context: BridgeContext,
211
+ extra: Dict[str, Any],
212
+ event: KernelEvent
213
+ ) -> Optional[List[Dict]]:
193
214
  """
194
215
  Queue reply message
195
216
 
@@ -206,14 +227,18 @@ class Kernel(QObject):
206
227
  elif event.name == KernelEvent.REPLY_RETURN:
207
228
  return self.input(context, extra, KernelEvent(KernelEvent.INPUT_SYSTEM))
208
229
 
209
- def output(self, context: BridgeContext, extra: dict, event: KernelEvent) -> any:
230
+ def output(
231
+ self,
232
+ context: BridgeContext,
233
+ extra: Dict[str, Any],
234
+ event: KernelEvent
235
+ ):
210
236
  """
211
237
  Handle output from kernel
212
238
 
213
239
  :param context: bridge context
214
240
  :param extra: extra data
215
241
  :param event: kernel event
216
- :return: response
217
242
  """
218
243
  if self.stopped():
219
244
  return
@@ -251,6 +276,7 @@ class Kernel(QObject):
251
276
  """
252
277
  self.halt = True
253
278
  self.window.controller.chat.common.stop(exit=exit) # it stops legacy agent also
279
+ self.window.controller.audio.stop_audio()
254
280
  if not exit:
255
281
  self.window.dispatch(KernelEvent(KernelEvent.STOP))
256
282
  self.set_state(KernelEvent(KernelEvent.STATE_IDLE, {"msg": trans("status.stopped")}))
@@ -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.25 01:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
13
+ from typing import Optional, Dict, Any, List
13
14
 
14
15
  from pygpt_net.core.events import KernelEvent, RenderEvent
15
16
  from pygpt_net.core.bridge import BridgeContext
@@ -28,7 +29,11 @@ class Reply:
28
29
  self.last_result = None
29
30
  self.reply_idx = -1
30
31
 
31
- def add(self, context, extra) -> list:
32
+ def add(
33
+ self,
34
+ context: BridgeContext,
35
+ extra: Dict[str, Any] = None
36
+ ) -> List[Dict]:
32
37
  """
33
38
  Send reply from plugins to model
34
39
 
@@ -129,7 +134,11 @@ class Reply:
129
134
  })
130
135
  self.window.dispatch(event)
131
136
 
132
- def run_post_response(self, ctx: CtxItem, extra_data: dict = None):
137
+ def run_post_response(
138
+ self,
139
+ ctx: CtxItem,
140
+ extra_data: Optional[Dict[str, Any]] = None
141
+ ):
133
142
  """
134
143
  Run post-response operations
135
144