pygpt-net 2.4.37__py3-none-any.whl → 2.4.42__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 (340) hide show
  1. CHANGELOG.md +37 -0
  2. README.md +176 -182
  3. pygpt_net/CHANGELOG.txt +37 -0
  4. pygpt_net/__init__.py +3 -3
  5. pygpt_net/app.py +3 -1
  6. pygpt_net/controller/__init__.py +7 -3
  7. pygpt_net/controller/access/control.py +1 -1
  8. pygpt_net/controller/access/voice.py +11 -5
  9. pygpt_net/controller/agent/experts.py +11 -6
  10. pygpt_net/controller/agent/legacy.py +8 -6
  11. pygpt_net/controller/agent/llama.py +4 -2
  12. pygpt_net/controller/assistant/__init__.py +9 -4
  13. pygpt_net/controller/assistant/batch.py +38 -21
  14. pygpt_net/controller/assistant/editor.py +7 -6
  15. pygpt_net/controller/assistant/files.py +23 -7
  16. pygpt_net/controller/assistant/store.py +20 -7
  17. pygpt_net/controller/assistant/threads.py +34 -8
  18. pygpt_net/controller/attachment.py +29 -10
  19. pygpt_net/controller/audio/__init__.py +26 -5
  20. pygpt_net/controller/calendar/__init__.py +23 -4
  21. pygpt_net/controller/calendar/note.py +57 -11
  22. pygpt_net/controller/camera.py +4 -12
  23. pygpt_net/controller/chat/__init__.py +5 -3
  24. pygpt_net/controller/chat/attachment.py +34 -7
  25. pygpt_net/controller/chat/audio.py +2 -2
  26. pygpt_net/controller/chat/command.py +4 -2
  27. pygpt_net/controller/chat/common.py +11 -4
  28. pygpt_net/controller/chat/files.py +10 -3
  29. pygpt_net/controller/chat/image.py +17 -5
  30. pygpt_net/controller/chat/input.py +10 -7
  31. pygpt_net/controller/chat/output.py +21 -6
  32. pygpt_net/controller/chat/render.py +100 -21
  33. pygpt_net/controller/chat/response.py +34 -7
  34. pygpt_net/controller/chat/stream.py +4 -2
  35. pygpt_net/controller/chat/text.py +6 -4
  36. pygpt_net/controller/command.py +11 -3
  37. pygpt_net/controller/config/__init__.py +34 -6
  38. pygpt_net/controller/config/field/checkbox.py +7 -4
  39. pygpt_net/controller/config/field/cmd.py +7 -5
  40. pygpt_net/controller/config/field/combo.py +14 -6
  41. pygpt_net/controller/config/field/dictionary.py +14 -11
  42. pygpt_net/controller/config/field/input.py +9 -6
  43. pygpt_net/controller/config/field/slider.py +11 -8
  44. pygpt_net/controller/config/field/textarea.py +8 -5
  45. pygpt_net/controller/config/placeholder.py +66 -21
  46. pygpt_net/controller/ctx/__init__.py +138 -49
  47. pygpt_net/controller/ctx/common.py +15 -4
  48. pygpt_net/controller/ctx/extra.py +11 -3
  49. pygpt_net/controller/ctx/summarizer.py +24 -5
  50. pygpt_net/controller/debug/__init__.py +27 -6
  51. pygpt_net/controller/dialogs/confirm.py +34 -7
  52. pygpt_net/controller/dialogs/debug.py +4 -2
  53. pygpt_net/controller/dialogs/info.py +7 -2
  54. pygpt_net/controller/files.py +48 -10
  55. pygpt_net/controller/finder.py +11 -5
  56. pygpt_net/controller/idx/__init__.py +10 -3
  57. pygpt_net/controller/idx/common.py +4 -2
  58. pygpt_net/controller/idx/indexer.py +25 -17
  59. pygpt_net/controller/idx/settings.py +9 -3
  60. pygpt_net/controller/kernel/__init__.py +34 -8
  61. pygpt_net/controller/kernel/reply.py +12 -3
  62. pygpt_net/controller/kernel/stack.py +5 -3
  63. pygpt_net/controller/lang/custom.py +2 -7
  64. pygpt_net/controller/lang/mapping.py +5 -3
  65. pygpt_net/controller/layout.py +2 -2
  66. pygpt_net/controller/mode.py +16 -4
  67. pygpt_net/controller/model/__init__.py +14 -3
  68. pygpt_net/controller/model/editor.py +8 -3
  69. pygpt_net/controller/notepad.py +26 -12
  70. pygpt_net/controller/painter/capture.py +23 -4
  71. pygpt_net/controller/painter/common.py +9 -7
  72. pygpt_net/controller/plugins/__init__.py +19 -5
  73. pygpt_net/controller/plugins/presets.py +15 -6
  74. pygpt_net/controller/plugins/settings.py +9 -3
  75. pygpt_net/controller/presets/__init__.py +55 -16
  76. pygpt_net/controller/presets/editor.py +26 -10
  77. pygpt_net/controller/settings/__init__.py +3 -2
  78. pygpt_net/controller/settings/editor.py +29 -7
  79. pygpt_net/controller/settings/profile.py +22 -5
  80. pygpt_net/controller/theme/__init__.py +54 -12
  81. pygpt_net/controller/theme/common.py +24 -2
  82. pygpt_net/controller/theme/markdown.py +32 -16
  83. pygpt_net/controller/theme/menu.py +26 -5
  84. pygpt_net/controller/theme/nodes.py +2 -5
  85. pygpt_net/controller/tools/__init__.py +40 -2
  86. pygpt_net/controller/ui/__init__.py +4 -6
  87. pygpt_net/controller/ui/mode.py +16 -21
  88. pygpt_net/controller/ui/tabs.py +363 -65
  89. pygpt_net/core/access/actions.py +6 -4
  90. pygpt_net/core/access/shortcuts.py +4 -3
  91. pygpt_net/core/access/voice.py +6 -5
  92. pygpt_net/core/agents/legacy.py +4 -2
  93. pygpt_net/core/agents/memory.py +7 -2
  94. pygpt_net/core/agents/observer/evaluation.py +15 -7
  95. pygpt_net/core/agents/provider.py +9 -4
  96. pygpt_net/core/agents/runner.py +61 -15
  97. pygpt_net/core/agents/tools.py +23 -5
  98. pygpt_net/core/assistants/__init__.py +6 -4
  99. pygpt_net/core/assistants/files.py +35 -12
  100. pygpt_net/core/assistants/store.py +20 -10
  101. pygpt_net/core/attachments/__init__.py +54 -15
  102. pygpt_net/core/attachments/context.py +92 -29
  103. pygpt_net/core/audio/__init__.py +74 -3
  104. pygpt_net/core/audio/context.py +7 -2
  105. pygpt_net/core/audio/whisper.py +37 -0
  106. pygpt_net/core/bridge/__init__.py +22 -6
  107. pygpt_net/core/bridge/context.py +5 -3
  108. pygpt_net/core/bridge/worker.py +2 -2
  109. pygpt_net/core/calendar/__init__.py +57 -11
  110. pygpt_net/core/chain/__init__.py +8 -2
  111. pygpt_net/core/chain/chat.py +10 -8
  112. pygpt_net/core/chain/completion.py +10 -7
  113. pygpt_net/core/command.py +62 -17
  114. pygpt_net/core/ctx/__init__.py +260 -58
  115. pygpt_net/core/ctx/bag.py +25 -4
  116. pygpt_net/core/ctx/container.py +28 -17
  117. pygpt_net/core/ctx/idx.py +45 -8
  118. pygpt_net/core/ctx/output.py +95 -74
  119. pygpt_net/core/ctx/reply.py +5 -2
  120. pygpt_net/core/db/__init__.py +8 -7
  121. pygpt_net/core/db/viewer.py +17 -11
  122. pygpt_net/core/debug/__init__.py +10 -9
  123. pygpt_net/core/debug/events.py +22 -10
  124. pygpt_net/core/debug/tabs.py +9 -3
  125. pygpt_net/core/docker/__init__.py +11 -5
  126. pygpt_net/core/docker/builder.py +11 -3
  127. pygpt_net/core/events/app.py +5 -3
  128. pygpt_net/core/events/base.py +11 -5
  129. pygpt_net/core/events/control.py +5 -3
  130. pygpt_net/core/events/event.py +17 -7
  131. pygpt_net/core/events/kernel.py +5 -3
  132. pygpt_net/core/events/render.py +5 -3
  133. pygpt_net/core/experts/__init__.py +5 -4
  134. pygpt_net/core/filesystem/__init__.py +52 -34
  135. pygpt_net/core/filesystem/actions.py +8 -5
  136. pygpt_net/core/filesystem/editor.py +13 -3
  137. pygpt_net/core/filesystem/types.py +12 -7
  138. pygpt_net/core/filesystem/url.py +7 -3
  139. pygpt_net/core/history.py +3 -2
  140. pygpt_net/core/idx/__init__.py +48 -27
  141. pygpt_net/core/idx/chat.py +51 -17
  142. pygpt_net/core/idx/context.py +6 -2
  143. pygpt_net/core/idx/indexing.py +107 -42
  144. pygpt_net/core/idx/llm.py +11 -3
  145. pygpt_net/core/idx/metadata.py +13 -3
  146. pygpt_net/core/idx/types/ctx.py +32 -6
  147. pygpt_net/core/idx/types/external.py +41 -7
  148. pygpt_net/core/idx/types/files.py +31 -6
  149. pygpt_net/core/image.py +15 -4
  150. pygpt_net/core/installer.py +2 -4
  151. pygpt_net/core/llm/__init__.py +13 -3
  152. pygpt_net/core/locale.py +34 -8
  153. pygpt_net/core/models.py +63 -17
  154. pygpt_net/core/modes.py +11 -13
  155. pygpt_net/core/notepad.py +10 -5
  156. pygpt_net/core/plugins.py +31 -19
  157. pygpt_net/core/presets.py +37 -17
  158. pygpt_net/core/profile.py +21 -7
  159. pygpt_net/core/prompt/__init__.py +10 -3
  160. pygpt_net/core/prompt/custom.py +7 -6
  161. pygpt_net/core/prompt/template.py +9 -3
  162. pygpt_net/core/render/base.py +117 -22
  163. pygpt_net/core/render/markdown/body.py +27 -7
  164. pygpt_net/core/render/markdown/renderer.py +119 -22
  165. pygpt_net/core/render/plain/body.py +22 -5
  166. pygpt_net/core/render/plain/renderer.py +97 -21
  167. pygpt_net/core/render/web/body.py +75 -25
  168. pygpt_net/core/render/web/parser.py +3 -1
  169. pygpt_net/core/render/web/renderer.py +313 -63
  170. pygpt_net/core/settings.py +10 -5
  171. pygpt_net/core/tabs/__init__.py +290 -103
  172. pygpt_net/core/tabs/tab.py +26 -5
  173. pygpt_net/core/tokens.py +47 -12
  174. pygpt_net/core/updater/__init__.py +20 -7
  175. pygpt_net/core/vision/analyzer.py +29 -6
  176. pygpt_net/core/{web.py → web/__init__.py} +29 -7
  177. pygpt_net/core/web/helpers.py +237 -0
  178. pygpt_net/data/config/config.json +15 -4
  179. pygpt_net/data/config/models.json +3 -3
  180. pygpt_net/data/config/modes.json +3 -3
  181. pygpt_net/data/config/settings.json +55 -10
  182. pygpt_net/data/config/settings_section.json +3 -0
  183. pygpt_net/data/css/style.light.css +1 -0
  184. pygpt_net/data/css/{web.css → web-blocks.css} +162 -133
  185. pygpt_net/data/css/{web.light.css → web-blocks.light.css} +7 -0
  186. pygpt_net/data/css/web-chatgpt.css +350 -0
  187. pygpt_net/data/css/web-chatgpt.dark.css +64 -0
  188. pygpt_net/data/css/web-chatgpt.light.css +75 -0
  189. pygpt_net/data/css/web-chatgpt_wide.css +350 -0
  190. pygpt_net/data/css/web-chatgpt_wide.dark.css +64 -0
  191. pygpt_net/data/css/web-chatgpt_wide.light.css +75 -0
  192. pygpt_net/data/icons/split_screen.svg +1 -0
  193. pygpt_net/data/locale/locale.de.ini +12 -0
  194. pygpt_net/data/locale/locale.en.ini +18 -2
  195. pygpt_net/data/locale/locale.es.ini +12 -0
  196. pygpt_net/data/locale/locale.fr.ini +12 -0
  197. pygpt_net/data/locale/locale.it.ini +12 -0
  198. pygpt_net/data/locale/locale.pl.ini +12 -0
  199. pygpt_net/data/locale/locale.uk.ini +12 -0
  200. pygpt_net/data/locale/locale.zh.ini +12 -0
  201. pygpt_net/data/locale/plugin.cmd_web.de.ini +2 -0
  202. pygpt_net/data/locale/plugin.cmd_web.en.ini +22 -10
  203. pygpt_net/data/locale/plugin.cmd_web.es.ini +2 -0
  204. pygpt_net/data/locale/plugin.cmd_web.fr.ini +2 -0
  205. pygpt_net/data/locale/plugin.cmd_web.it.ini +2 -0
  206. pygpt_net/data/locale/plugin.cmd_web.pl.ini +2 -0
  207. pygpt_net/data/locale/plugin.cmd_web.uk.ini +2 -0
  208. pygpt_net/data/locale/plugin.cmd_web.zh.ini +2 -0
  209. pygpt_net/data/locale/plugin.mailer.en.ini +21 -0
  210. pygpt_net/icons.qrc +1 -0
  211. pygpt_net/icons_rc.py +165 -136
  212. pygpt_net/item/ctx.py +58 -25
  213. pygpt_net/plugin/agent/__init__.py +7 -2
  214. pygpt_net/plugin/audio_input/simple.py +21 -5
  215. pygpt_net/plugin/audio_output/__init__.py +9 -1
  216. pygpt_net/plugin/base/config.py +4 -2
  217. pygpt_net/plugin/base/plugin.py +75 -23
  218. pygpt_net/plugin/base/worker.py +42 -11
  219. pygpt_net/plugin/cmd_code_interpreter/__init__.py +39 -37
  220. pygpt_net/plugin/cmd_code_interpreter/runner.py +25 -12
  221. pygpt_net/plugin/cmd_history/config.py +2 -2
  222. pygpt_net/plugin/cmd_web/__init__.py +48 -9
  223. pygpt_net/plugin/cmd_web/config.py +135 -41
  224. pygpt_net/plugin/cmd_web/websearch.py +74 -33
  225. pygpt_net/plugin/cmd_web/worker.py +142 -13
  226. pygpt_net/plugin/idx_llama_index/config.py +3 -3
  227. pygpt_net/plugin/mailer/__init__.py +123 -0
  228. pygpt_net/plugin/mailer/config.py +149 -0
  229. pygpt_net/plugin/mailer/runner.py +285 -0
  230. pygpt_net/plugin/mailer/worker.py +123 -0
  231. pygpt_net/provider/agents/base.py +5 -2
  232. pygpt_net/provider/agents/openai.py +4 -2
  233. pygpt_net/provider/agents/openai_assistant.py +4 -2
  234. pygpt_net/provider/agents/planner.py +4 -2
  235. pygpt_net/provider/agents/react.py +4 -2
  236. pygpt_net/provider/audio_output/openai_tts.py +5 -11
  237. pygpt_net/provider/core/assistant/base.py +5 -3
  238. pygpt_net/provider/core/assistant/json_file.py +8 -5
  239. pygpt_net/provider/core/assistant_file/base.py +4 -3
  240. pygpt_net/provider/core/assistant_file/db_sqlite/__init__.py +4 -3
  241. pygpt_net/provider/core/assistant_file/db_sqlite/storage.py +3 -2
  242. pygpt_net/provider/core/assistant_store/base.py +6 -4
  243. pygpt_net/provider/core/assistant_store/db_sqlite/__init__.py +5 -4
  244. pygpt_net/provider/core/assistant_store/db_sqlite/storage.py +5 -3
  245. pygpt_net/provider/core/attachment/base.py +5 -3
  246. pygpt_net/provider/core/attachment/json_file.py +4 -3
  247. pygpt_net/provider/core/calendar/base.py +5 -3
  248. pygpt_net/provider/core/calendar/db_sqlite/__init__.py +6 -5
  249. pygpt_net/provider/core/calendar/db_sqlite/storage.py +5 -4
  250. pygpt_net/provider/core/config/base.py +8 -6
  251. pygpt_net/provider/core/config/json_file.py +9 -7
  252. pygpt_net/provider/core/config/patch.py +43 -1
  253. pygpt_net/provider/core/ctx/base.py +30 -25
  254. pygpt_net/provider/core/ctx/db_sqlite/__init__.py +59 -34
  255. pygpt_net/provider/core/ctx/db_sqlite/storage.py +62 -30
  256. pygpt_net/provider/core/ctx/db_sqlite/utils.py +11 -9
  257. pygpt_net/provider/core/index/base.py +129 -23
  258. pygpt_net/provider/core/index/db_sqlite/__init__.py +130 -23
  259. pygpt_net/provider/core/index/db_sqlite/storage.py +130 -23
  260. pygpt_net/provider/core/index/db_sqlite/utils.py +4 -2
  261. pygpt_net/provider/core/mode/base.py +5 -3
  262. pygpt_net/provider/core/mode/json_file.py +7 -6
  263. pygpt_net/provider/core/model/base.py +6 -4
  264. pygpt_net/provider/core/model/json_file.py +9 -7
  265. pygpt_net/provider/core/notepad/base.py +5 -3
  266. pygpt_net/provider/core/notepad/db_sqlite/__init__.py +5 -4
  267. pygpt_net/provider/core/notepad/db_sqlite/storage.py +4 -3
  268. pygpt_net/provider/core/plugin_preset/base.py +4 -2
  269. pygpt_net/provider/core/plugin_preset/json_file.py +5 -3
  270. pygpt_net/provider/core/preset/base.py +6 -4
  271. pygpt_net/provider/core/preset/json_file.py +9 -9
  272. pygpt_net/provider/core/prompt/base.py +6 -3
  273. pygpt_net/provider/core/prompt/json_file.py +11 -6
  274. pygpt_net/provider/gpt/assistants.py +21 -11
  275. pygpt_net/provider/gpt/audio.py +6 -5
  276. pygpt_net/provider/gpt/chat.py +10 -7
  277. pygpt_net/provider/gpt/completion.py +11 -5
  278. pygpt_net/provider/gpt/image.py +9 -2
  279. pygpt_net/provider/gpt/store.py +53 -18
  280. pygpt_net/provider/gpt/vision.py +17 -11
  281. pygpt_net/provider/llms/anthropic.py +7 -2
  282. pygpt_net/provider/llms/azure_openai.py +26 -5
  283. pygpt_net/provider/llms/base.py +47 -9
  284. pygpt_net/provider/llms/google.py +7 -2
  285. pygpt_net/provider/llms/hugging_face.py +13 -3
  286. pygpt_net/provider/llms/hugging_face_api.py +18 -4
  287. pygpt_net/provider/llms/local.py +7 -2
  288. pygpt_net/provider/llms/ollama.py +30 -6
  289. pygpt_net/provider/llms/openai.py +32 -6
  290. pygpt_net/provider/vector_stores/__init__.py +45 -14
  291. pygpt_net/provider/vector_stores/base.py +35 -8
  292. pygpt_net/provider/vector_stores/chroma.py +13 -3
  293. pygpt_net/provider/vector_stores/ctx_attachment.py +31 -12
  294. pygpt_net/provider/vector_stores/elasticsearch.py +12 -3
  295. pygpt_net/provider/vector_stores/pinecode.py +12 -3
  296. pygpt_net/provider/vector_stores/redis.py +12 -3
  297. pygpt_net/provider/vector_stores/simple.py +12 -3
  298. pygpt_net/provider/vector_stores/temp.py +16 -4
  299. pygpt_net/provider/web/base.py +10 -3
  300. pygpt_net/provider/web/google_custom_search.py +9 -3
  301. pygpt_net/provider/web/microsoft_bing.py +9 -3
  302. pygpt_net/tools/__init__.py +20 -4
  303. pygpt_net/tools/audio_transcriber/__init__.py +4 -3
  304. pygpt_net/tools/base.py +28 -7
  305. pygpt_net/tools/code_interpreter/__init__.py +177 -77
  306. pygpt_net/tools/code_interpreter/ui/dialogs.py +21 -103
  307. pygpt_net/tools/code_interpreter/ui/widgets.py +284 -9
  308. pygpt_net/tools/html_canvas/__init__.py +81 -25
  309. pygpt_net/tools/html_canvas/ui/dialogs.py +46 -62
  310. pygpt_net/tools/html_canvas/ui/widgets.py +96 -3
  311. pygpt_net/tools/image_viewer/__init__.py +10 -4
  312. pygpt_net/tools/indexer/__init__.py +8 -7
  313. pygpt_net/tools/media_player/__init__.py +4 -3
  314. pygpt_net/tools/text_editor/__init__.py +36 -10
  315. pygpt_net/ui/base/context_menu.py +2 -2
  316. pygpt_net/ui/layout/chat/input.py +10 -18
  317. pygpt_net/ui/layout/chat/output.py +27 -45
  318. pygpt_net/ui/layout/ctx/ctx_list.py +13 -4
  319. pygpt_net/ui/layout/toolbox/footer.py +18 -2
  320. pygpt_net/ui/main.py +2 -2
  321. pygpt_net/ui/menu/audio.py +12 -1
  322. pygpt_net/ui/menu/config.py +7 -11
  323. pygpt_net/ui/menu/debug.py +11 -1
  324. pygpt_net/ui/menu/theme.py +9 -2
  325. pygpt_net/ui/widget/filesystem/explorer.py +2 -2
  326. pygpt_net/ui/widget/lists/context.py +27 -5
  327. pygpt_net/ui/widget/tabs/Input.py +2 -2
  328. pygpt_net/ui/widget/tabs/body.py +2 -1
  329. pygpt_net/ui/widget/tabs/layout.py +195 -0
  330. pygpt_net/ui/widget/tabs/output.py +218 -55
  331. pygpt_net/ui/widget/textarea/html.py +11 -1
  332. pygpt_net/ui/widget/textarea/output.py +10 -1
  333. pygpt_net/ui/widget/textarea/search_input.py +4 -1
  334. pygpt_net/ui/widget/textarea/web.py +49 -9
  335. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.42.dist-info}/METADATA +177 -183
  336. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.42.dist-info}/RECORD +340 -325
  337. /pygpt_net/data/css/{web.dark.css → web-blocks.dark.css} +0 -0
  338. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.42.dist-info}/LICENSE +0 -0
  339. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.42.dist-info}/WHEEL +0 -0
  340. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.42.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.11.20 21:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from PySide6.QtWidgets import QApplication
@@ -144,7 +144,11 @@ class Extra:
144
144
  self.window.controller.ctx.edit_meta_id = None
145
145
  self.edit_hide()
146
146
 
147
- def replay_item(self, item_id: int, force: bool = False):
147
+ def replay_item(
148
+ self,
149
+ item_id: int,
150
+ force: bool = False
151
+ ):
148
152
  """
149
153
  Regenerate ctx item
150
154
 
@@ -203,7 +207,11 @@ class Extra:
203
207
  self.window.controller.audio.on_stop()
204
208
  self.audio_play_id = None
205
209
 
206
- def join_item(self, item_id: int, force: bool = False):
210
+ def join_item(
211
+ self,
212
+ item_id: int,
213
+ force: bool = False
214
+ ):
207
215
  """
208
216
  Join ctx items
209
217
 
@@ -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.01.25 19:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from PySide6.QtCore import QObject, Signal, Slot
@@ -27,7 +27,11 @@ class Summarizer:
27
27
  """
28
28
  self.window = window
29
29
 
30
- def summarize(self, id: int, ctx: CtxItem):
30
+ def summarize(
31
+ self,
32
+ id: int,
33
+ ctx: CtxItem
34
+ ):
31
35
  """
32
36
  Summarize context
33
37
 
@@ -39,7 +43,13 @@ class Summarizer:
39
43
  ctx_copy.from_dict(ctx.to_dict())
40
44
  self.start_worker(id, ctx_copy)
41
45
 
42
- def summarizer(self, id: int, ctx: CtxItem, window, updated_signal: Signal):
46
+ def summarizer(
47
+ self,
48
+ id: int,
49
+ ctx: CtxItem,
50
+ window,
51
+ updated_signal: Signal
52
+ ):
43
53
  """
44
54
  Summarize worker callback
45
55
 
@@ -52,7 +62,11 @@ class Summarizer:
52
62
  if title:
53
63
  updated_signal.emit(id, ctx, title)
54
64
 
55
- def start_worker(self, id: int, ctx: CtxItem):
65
+ def start_worker(
66
+ self,
67
+ id: int,
68
+ ctx: CtxItem
69
+ ):
56
70
  """
57
71
  Handle worker thread
58
72
 
@@ -69,7 +83,12 @@ class Summarizer:
69
83
  self.window.threadpool.start(worker)
70
84
 
71
85
  @Slot(int, object, str)
72
- def handle_update(self, id: int, ctx: CtxItem, title: str):
86
+ def handle_update(
87
+ self,
88
+ id: int,
89
+ ctx: CtxItem,
90
+ title: str
91
+ ):
73
92
  """
74
93
  Handle update signal (make update)
75
94
 
@@ -6,15 +6,18 @@
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
  from datetime import datetime
13
13
  from logging import ERROR, WARNING, INFO, DEBUG
14
+ from typing import Any
14
15
 
15
16
  from PySide6.QtCore import Slot, QObject
16
17
  from PySide6.QtGui import QTextCursor
17
18
 
19
+ from pygpt_net.core.events import RenderEvent
20
+
18
21
 
19
22
  class Debug(QObject):
20
23
  def __init__(self, window=None):
@@ -53,8 +56,17 @@ class Debug(QObject):
53
56
 
54
57
  def toggle_menu(self):
55
58
  """Toggle debug menu"""
56
- stage = self.window.core.config.get('debug')
57
- self.window.ui.menu['menu.debug'].menuAction().setVisible(stage)
59
+ state = self.window.core.config.get('debug')
60
+ self.window.ui.menu['menu.debug'].menuAction().setVisible(state)
61
+
62
+ def toggle_render(self):
63
+ """Toggle render debug"""
64
+ value = self.window.ui.menu['debug.render'].isChecked()
65
+ self.window.core.config.set('debug.render', value)
66
+ self.window.core.config.save()
67
+ event = RenderEvent(RenderEvent.ON_THEME_CHANGE)
68
+ self.window.dispatch(event)
69
+ self.window.controller.ctx.refresh()
58
70
 
59
71
  def set_log_level(self, level: str = 'error'):
60
72
  """
@@ -122,7 +134,12 @@ class Debug(QObject):
122
134
  signals.js_message.connect(self.handle_js_message)
123
135
 
124
136
  @Slot(int, str, str)
125
- def handle_js_message(self, line_number: int, message: str, source_id: str):
137
+ def handle_js_message(
138
+ self,
139
+ line_number: int,
140
+ message: str,
141
+ source_id: str
142
+ ):
126
143
  """
127
144
  Handle JS message
128
145
 
@@ -134,7 +151,7 @@ class Debug(QObject):
134
151
  self.log(data, window=True)
135
152
 
136
153
  @Slot(object)
137
- def handle_log(self, data: any):
154
+ def handle_log(self, data: Any):
138
155
  """
139
156
  Handle log message
140
157
 
@@ -142,7 +159,11 @@ class Debug(QObject):
142
159
  """
143
160
  self.log(data)
144
161
 
145
- def log(self, data: any, window: bool = True):
162
+ def log(
163
+ self,
164
+ data: Any,
165
+ window: bool = True
166
+ ):
146
167
  """
147
168
  Log message to console or logger window
148
169
 
@@ -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
  """