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
pygpt_net/core/modes.py CHANGED
@@ -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.26 19:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Dict, List
13
+
12
14
  from pygpt_net.provider.core.mode.json_file import JsonFileProvider
13
15
  from pygpt_net.core.types import (
14
16
  MODE_AGENT,
@@ -51,7 +53,7 @@ class Modes:
51
53
  ]
52
54
  self.items = {}
53
55
 
54
- def get_by_idx(self, idx):
56
+ def get_by_idx(self, idx) -> str:
55
57
  """
56
58
  Return mode by index
57
59
 
@@ -61,7 +63,7 @@ class Modes:
61
63
  modes = self.get_all()
62
64
  return list(modes.keys())[idx]
63
65
 
64
- def get_idx_by_name(self, name):
66
+ def get_idx_by_name(self, name) -> int:
65
67
  """
66
68
  Return mode index by name
67
69
 
@@ -71,7 +73,7 @@ class Modes:
71
73
  modes = self.get_all()
72
74
  return list(modes.keys()).index(name)
73
75
 
74
- def get_all(self):
76
+ def get_all(self) -> Dict[str, List[str]]:
75
77
  """
76
78
  Return modes
77
79
 
@@ -79,7 +81,7 @@ class Modes:
79
81
  """
80
82
  return self.items
81
83
 
82
- def get_default(self):
84
+ def get_default(self) -> str:
83
85
  """
84
86
  Return default mode name
85
87
 
@@ -89,7 +91,7 @@ class Modes:
89
91
  if self.items[id].default:
90
92
  return id
91
93
 
92
- def get_next(self, mode: str):
94
+ def get_next(self, mode: str) -> str:
93
95
  """
94
96
  Return next mode
95
97
 
@@ -103,7 +105,7 @@ class Modes:
103
105
  return keys[idx + 1]
104
106
  return keys[0]
105
107
 
106
- def get_prev(self, mode: str):
108
+ def get_prev(self, mode: str) -> str:
107
109
  """
108
110
  Return previous mode
109
111
 
@@ -118,13 +120,9 @@ class Modes:
118
120
  return keys[-1]
119
121
 
120
122
  def load(self):
121
- """
122
- Load modes
123
- """
123
+ """Load modes"""
124
124
  self.items = self.provider.load()
125
125
 
126
126
  def save(self):
127
- """
128
- Save modes
129
- """
127
+ """Save modes"""
130
128
  self.provider.save(self.items)
pygpt_net/core/notepad.py CHANGED
@@ -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.04.09 23:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import datetime
13
13
  import uuid
14
+ from typing import Optional, Dict
14
15
 
15
16
  from packaging.version import Version
16
17
 
@@ -49,7 +50,7 @@ class Notepad:
49
50
  """Reset provider data"""
50
51
  self.items = {}
51
52
 
52
- def get_by_id(self, idx: int) -> NotepadItem or None:
53
+ def get_by_id(self, idx: int) -> Optional[NotepadItem]:
53
54
  """
54
55
  Get notepad by idx
55
56
 
@@ -60,7 +61,7 @@ class Notepad:
60
61
  return self.items[idx]
61
62
  return None
62
63
 
63
- def get_all(self) -> dict:
64
+ def get_all(self) -> Dict[int, NotepadItem]:
64
65
  """
65
66
  Get all notepads
66
67
 
@@ -136,8 +137,12 @@ class Notepad:
136
137
  """Save all notepads"""
137
138
  self.provider.save_all(self.items)
138
139
 
139
- def import_from_db(self) -> dict or None:
140
- """Import notepad tabs from database"""
140
+ def import_from_db(self) -> Optional[Dict[int, dict]]:
141
+ """
142
+ Import notepad tabs from database
143
+
144
+ :return: dict with tabs
145
+ """
141
146
  self.load_all()
142
147
  items = self.get_all()
143
148
  if len(items) == 0:
pygpt_net/core/plugins.py CHANGED
@@ -6,13 +6,14 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.18 21:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import copy
13
13
  import configparser
14
14
  import io
15
15
  import os
16
+ from typing import Optional, Dict, List, Any
16
17
 
17
18
  from pygpt_net.provider.core.plugin_preset.json_file import JsonFileProvider
18
19
  from pygpt_net.plugin.base.plugin import BasePlugin
@@ -48,7 +49,7 @@ class Plugins:
48
49
  """
49
50
  return id in self.plugins
50
51
 
51
- def all(self) -> dict:
52
+ def all(self) -> Dict[str, BasePlugin]:
52
53
  """
53
54
  Get all plugins
54
55
 
@@ -56,7 +57,7 @@ class Plugins:
56
57
  """
57
58
  return self.plugins
58
59
 
59
- def get_ids(self) -> list:
60
+ def get_ids(self) -> List[str]:
60
61
  """
61
62
  Get all plugins ids
62
63
 
@@ -64,7 +65,7 @@ class Plugins:
64
65
  """
65
66
  return list(self.plugins.keys())
66
67
 
67
- def get(self, id: str) -> BasePlugin or None:
68
+ def get(self, id: str) -> Optional[BasePlugin]:
68
69
  """
69
70
  Get plugin by id
70
71
 
@@ -75,7 +76,7 @@ class Plugins:
75
76
  return self.plugins[id]
76
77
  return None
77
78
 
78
- def get_option(self, id: str, key: str) -> any:
79
+ def get_option(self, id: str, key: str) -> Any:
79
80
  """
80
81
  Get plugin option
81
82
 
@@ -142,7 +143,7 @@ class Plugins:
142
143
  if removed:
143
144
  self.window.core.config.save()
144
145
 
145
- def register_options(self, id: str, options: dict):
146
+ def register_options(self, id: str, options: Dict[str, dict]):
146
147
  """
147
148
  Register plugin options
148
149
 
@@ -171,7 +172,7 @@ class Plugins:
171
172
 
172
173
  def enable(self, id: str):
173
174
  """
174
- Enable plugin
175
+ Enable plugin by ID
175
176
 
176
177
  :param id: plugin id
177
178
  """
@@ -182,7 +183,7 @@ class Plugins:
182
183
 
183
184
  def disable(self, id: str):
184
185
  """
185
- Disable plugin
186
+ Disable plugin by ID
186
187
 
187
188
  :param id: plugin id
188
189
  """
@@ -276,7 +277,7 @@ class Plugins:
276
277
  tooltip = trans('plugin.description', domain=domain)
277
278
  return tooltip
278
279
 
279
- def dump_locale(self, plugin, path: str):
280
+ def dump_locale(self, plugin: BasePlugin, path: str):
280
281
  """
281
282
  Dump locale
282
283
 
@@ -317,7 +318,7 @@ class Plugins:
317
318
  """
318
319
  return id in self.presets
319
320
 
320
- def get_preset(self, id: str) -> dict:
321
+ def get_preset(self, id: str) -> Dict[str, Any]:
321
322
  """
322
323
  Get preset by id
323
324
 
@@ -327,7 +328,7 @@ class Plugins:
327
328
  if self.has_preset(id):
328
329
  return self.presets[id]
329
330
 
330
- def set_preset(self, id: str, preset: dict):
331
+ def set_preset(self, id: str, preset: Dict[str, Any]):
331
332
  """
332
333
  Set config value
333
334
 
@@ -336,7 +337,7 @@ class Plugins:
336
337
  """
337
338
  self.presets[id] = preset
338
339
 
339
- def replace_presets(self, presets: dict):
340
+ def replace_presets(self, presets: Dict[str, Any]):
340
341
  """
341
342
  Replace presets
342
343
 
@@ -348,7 +349,7 @@ class Plugins:
348
349
  """Load presets"""
349
350
  self.presets = self.provider.load()
350
351
 
351
- def get_presets(self) -> dict:
352
+ def get_presets(self) -> Dict[str, Any]:
352
353
  """
353
354
  Return all presets
354
355
 
@@ -356,7 +357,11 @@ class Plugins:
356
357
  """
357
358
  return self.presets
358
359
 
359
- def reset_options(self, plugin_id: str, keys: list):
360
+ def reset_options(
361
+ self,
362
+ plugin_id: str,
363
+ keys: List[str]
364
+ ):
360
365
  """
361
366
  Reset plugin options
362
367
 
@@ -407,7 +412,11 @@ class Plugins:
407
412
  self.save_presets()
408
413
  print("[FIX] Removed invalid keys from plugin presets.")
409
414
 
410
- def remove_preset_values(self, plugin_id:str, key: str):
415
+ def remove_preset_values(
416
+ self,
417
+ plugin_id: str,
418
+ key: str
419
+ ):
411
420
  """
412
421
  Update preset value
413
422
 
@@ -430,7 +439,12 @@ class Plugins:
430
439
  if updated:
431
440
  self.save_presets()
432
441
 
433
- def update_preset_values(self, plugin_id:str, key: str, value: any):
442
+ def update_preset_values(
443
+ self,
444
+ plugin_id: str,
445
+ key: str,
446
+ value: Any
447
+ ):
434
448
  """
435
449
  Update preset value
436
450
 
@@ -470,9 +484,7 @@ class Plugins:
470
484
  self.dump_locale(self.plugins[id], path)
471
485
 
472
486
  def dump_locales(self):
473
- """
474
- Dump all locales
475
- """
487
+ """Dump all locales"""
476
488
  langs = ['en', 'pl']
477
489
  for id in self.plugins:
478
490
  domain = 'plugin.' + id
pygpt_net/core/presets.py CHANGED
@@ -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 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import copy
13
13
  import uuid
14
+ from typing import Optional, Tuple, Dict
14
15
 
15
16
  from packaging.version import Version
16
17
  from pygpt_net.core.types import (
@@ -47,7 +48,11 @@ class Presets:
47
48
  self.provider.install()
48
49
 
49
50
  def patch(self, app_version: Version):
50
- """Patch provider data"""
51
+ """
52
+ Patch provider data
53
+
54
+ :param app_version: app version
55
+ """
51
56
  self.provider.patch(app_version)
52
57
 
53
58
  def build(self) -> PresetItem:
@@ -188,6 +193,7 @@ class Presets:
188
193
  """
189
194
  if id in self.items:
190
195
  self.items[id].enabled = True
196
+
191
197
  def disable(self, id: str):
192
198
  """
193
199
  Disable preset
@@ -197,7 +203,7 @@ class Presets:
197
203
  if id in self.items:
198
204
  self.items[id].enabled = False
199
205
 
200
- def get_first_mode(self, id: str) -> str or None:
206
+ def get_first_mode(self, id: str) -> Optional[str]:
201
207
  """
202
208
  Return first mode for preset
203
209
 
@@ -253,7 +259,7 @@ class Presets:
253
259
  presets = self.get_by_mode(mode)
254
260
  return list(presets.keys())[idx]
255
261
 
256
- def get_by_id(self, mode: str, id: str) -> PresetItem or None:
262
+ def get_by_id(self, mode: str, id: str) -> Optional[PresetItem]:
257
263
  """
258
264
  Return preset by id
259
265
 
@@ -266,7 +272,7 @@ class Presets:
266
272
  return presets[id]
267
273
  return None
268
274
 
269
- def get_by_uuid(self, uuid: str) -> PresetItem or None:
275
+ def get_by_uuid(self, uuid: str) -> Optional[PresetItem]:
270
276
  """
271
277
  Return preset by UUID
272
278
 
@@ -278,7 +284,7 @@ class Presets:
278
284
  return self.items[id]
279
285
  return None
280
286
 
281
- def get_by_mode(self, mode: str) -> dict:
287
+ def get_by_mode(self, mode: str) -> Dict[str, PresetItem]:
282
288
  """
283
289
  Return presets for mode
284
290
 
@@ -317,7 +323,7 @@ class Presets:
317
323
  i += 1
318
324
  return 0
319
325
 
320
- def get_default(self, mode: str) -> str or None:
326
+ def get_default(self, mode: str) -> Optional[str]:
321
327
  """
322
328
  Return default preset for mode
323
329
 
@@ -329,7 +335,7 @@ class Presets:
329
335
  return None
330
336
  return list(presets.keys())[0]
331
337
 
332
- def get_duplicate_name(self, id: str) -> (str, str):
338
+ def get_duplicate_name(self, id: str) -> Tuple[str, str]:
333
339
  """
334
340
  Prepare name for duplicated preset
335
341
 
@@ -361,7 +367,11 @@ class Presets:
361
367
  self.sort_by_name()
362
368
  return id
363
369
 
364
- def remove(self, id: str, remove_file: bool = True):
370
+ def remove(
371
+ self,
372
+ id: str,
373
+ remove_file: bool = True
374
+ ):
365
375
  """
366
376
  Delete preset
367
377
 
@@ -376,9 +386,7 @@ class Presets:
376
386
  # self.load_presets()
377
387
 
378
388
  def sort_by_name(self):
379
- """
380
- Sort presets by name
381
- """
389
+ """Sort presets by name"""
382
390
  self.items = dict(
383
391
  sorted(
384
392
  self.items.items(),
@@ -403,7 +411,7 @@ class Presets:
403
411
  self.items[preset.filename] = preset
404
412
  self.save(preset.filename)
405
413
 
406
- def get_all(self) -> dict:
414
+ def get_all(self) -> Dict[str, PresetItem]:
407
415
  """
408
416
  Return all presets
409
417
 
@@ -423,8 +431,12 @@ class Presets:
423
431
  self.items[id] = base[id]
424
432
  self.save(id)
425
433
 
426
- def load_base(self):
427
- """Load base presets"""
434
+ def load_base(self) -> Dict[str, PresetItem]:
435
+ """
436
+ Load base presets
437
+
438
+ :return: base presets
439
+ """
428
440
  return self.provider.load_base()
429
441
 
430
442
  def load(self):
@@ -451,7 +463,11 @@ class Presets:
451
463
  """Save all presets"""
452
464
  self.provider.save_all(self.items)
453
465
 
454
- def add_expert(self, agent_uuid: str, expert_uuid: str):
466
+ def add_expert(
467
+ self,
468
+ agent_uuid: str,
469
+ expert_uuid: str
470
+ ):
455
471
  """
456
472
  Add expert to agent
457
473
 
@@ -465,7 +481,11 @@ class Presets:
465
481
  agent.experts.append(expert_uuid)
466
482
  self.save(agent.filename)
467
483
 
468
- def remove_expert(self, agent_uuid: str, expert_uuid: str):
484
+ def remove_expert(
485
+ self,
486
+ agent_uuid: str,
487
+ expert_uuid: str
488
+ ):
469
489
  """
470
490
  Remove expert from agent
471
491
  :param agent_uuid: agent uuid
pygpt_net/core/profile.py CHANGED
@@ -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.09 23:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
13
13
  import os
14
14
  from pathlib import Path
15
+ from typing import Optional, Dict
15
16
  from uuid import uuid4
16
17
 
17
18
 
@@ -44,7 +45,7 @@ class Profile:
44
45
  self.load()
45
46
  self.update_path()
46
47
 
47
- def set_base_workdir(self, workdir):
48
+ def set_base_workdir(self, workdir: str):
48
49
  """
49
50
  Set base workdir
50
51
 
@@ -119,7 +120,11 @@ class Profile:
119
120
  with open(f, 'w', encoding='utf-8') as f:
120
121
  f.write(json_data)
121
122
 
122
- def add(self, name: str, workdir: str) -> str:
123
+ def add(
124
+ self,
125
+ name: str,
126
+ workdir: str
127
+ ) -> str:
123
128
  """
124
129
  Add new profile
125
130
 
@@ -162,7 +167,12 @@ class Profile:
162
167
  return True
163
168
  return False
164
169
 
165
- def update_profile(self, uuid: str, name: str, workdir: str) -> bool:
170
+ def update_profile(
171
+ self,
172
+ uuid: str,
173
+ name: str,
174
+ workdir: str
175
+ ) -> bool:
166
176
  """
167
177
  Update profile
168
178
 
@@ -188,7 +198,7 @@ class Profile:
188
198
  """
189
199
  return self.current
190
200
 
191
- def get(self, uuid: str) -> dict or None:
201
+ def get(self, uuid: str) -> Optional[dict]:
192
202
  """
193
203
  Get profile by uuid
194
204
 
@@ -199,7 +209,7 @@ class Profile:
199
209
  return self.profiles[uuid]
200
210
  return None
201
211
 
202
- def get_all(self) -> dict:
212
+ def get_all(self) -> Dict[str, Dict]:
203
213
  """
204
214
  Get all profiles
205
215
 
@@ -222,7 +232,11 @@ class Profile:
222
232
  return tmp_dir
223
233
  return self.base_workdir
224
234
 
225
- def append(self, uuid: str, profile: dict):
235
+ def append(
236
+ self,
237
+ uuid: str,
238
+ profile: Dict
239
+ ):
226
240
  """
227
241
  Append profile
228
242
 
@@ -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 pygpt_net.core.events import Event
@@ -41,6 +41,12 @@ class Prompt:
41
41
  return ""
42
42
 
43
43
  def build_final_system_prompt(self, prompt: str) -> str:
44
+ """
45
+ Build final system prompt
46
+
47
+ :param prompt: prompt
48
+ :return: final system prompt
49
+ """
44
50
  # tmp dispatch event: system prompt
45
51
  event = Event(Event.SYSTEM_PROMPT, {
46
52
  'mode': self.window.core.config.get('mode'),
@@ -50,7 +56,8 @@ class Prompt:
50
56
  self.window.dispatch(event)
51
57
  prompt = event.data['value']
52
58
 
53
- if self.window.core.config.get('cmd') or self.window.controller.plugins.is_type_enabled("cmd.inline"):
59
+ if (self.window.core.config.get('cmd')
60
+ or self.window.controller.plugins.is_type_enabled("cmd.inline")):
54
61
 
55
62
  # abort if native func call enabled
56
63
  if self.window.core.command.is_native_enabled():
@@ -88,7 +95,7 @@ class Prompt:
88
95
  internal: bool,
89
96
  is_expert: bool = False,
90
97
  disable_native_tool_calls: bool = False,
91
- ):
98
+ ) -> str:
92
99
  """
93
100
  Prepare system prompt
94
101
 
@@ -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.08.29 05:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import copy
13
+ from typing import Optional
13
14
 
14
15
  from PySide6.QtGui import QAction, QIcon
15
16
  from packaging.version import Version
@@ -70,7 +71,7 @@ class Custom:
70
71
  """
71
72
  return list(self.items.keys())
72
73
 
73
- def get_id_by_idx(self, idx: int) -> str or None:
74
+ def get_id_by_idx(self, idx: int) -> Optional[str]:
74
75
  """
75
76
  Get ID by index
76
77
 
@@ -83,7 +84,7 @@ class Custom:
83
84
  return id
84
85
  i += 1
85
86
 
86
- def get_by_id(self, id: str) -> PromptItem or None:
87
+ def get_by_id(self, id: str) -> Optional[PromptItem]:
87
88
  """
88
89
  Return prompt by ID
89
90
 
@@ -93,7 +94,7 @@ class Custom:
93
94
  if id in self.items:
94
95
  return self.items[id]
95
96
 
96
- def get_by_idx(self, idx: int) -> PromptItem or None:
97
+ def get_by_idx(self, idx: int) -> Optional[PromptItem]:
97
98
  """
98
99
  Return item by index
99
100
 
@@ -114,8 +115,8 @@ class Custom:
114
115
 
115
116
  def new(
116
117
  self,
117
- name: str = None,
118
- content: str = None,
118
+ name: Optional[str] = None,
119
+ content: Optional[str] = None,
119
120
  auto_save: bool = True
120
121
  ) -> PromptItem:
121
122
  """
@@ -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.08.25 04:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
13
13
  import csv
14
+ from typing import Optional
14
15
 
15
16
  from PySide6.QtGui import QAction
16
17
  from pygpt_net.utils import trans
@@ -62,7 +63,12 @@ class Template:
62
63
  self.prompts = dict(sorted(self.prompts.items(), key=lambda item: item[1]['name']))
63
64
 
64
65
  def to_menu_options(self, menu, parent: str = "global"):
65
- """Convert prompts to menu options"""
66
+ """
67
+ Convert prompts to menu options
68
+
69
+ :param menu: Menu
70
+ :param parent: Parent menu
71
+ """
66
72
  self.init()
67
73
  menu.addSeparator()
68
74
  submenu = menu.addMenu(trans("preset.prompt.paste_template"))
@@ -82,7 +88,7 @@ class Template:
82
88
  action.setToolTip(value['prompt'])
83
89
  letter_submenus[letter].addAction(action)
84
90
 
85
- def get_by_id(self, id: int) -> dict or None:
91
+ def get_by_id(self, id: int) -> Optional[dict]:
86
92
  """
87
93
  Get prompt by id
88
94