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,10 +6,11 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.04.29 16:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import uuid
13
+ from typing import Dict
13
14
 
14
15
  from packaging.version import Version
15
16
 
@@ -67,7 +68,7 @@ class DbSqliteProvider(BaseProvider):
67
68
  file.record_id = self.storage.insert(file)
68
69
  return file.record_id
69
70
 
70
- def load_all(self) -> dict:
71
+ def load_all(self) -> Dict[str, AssistantFileItem]:
71
72
  """
72
73
  Load files from DB
73
74
 
@@ -96,7 +97,7 @@ class DbSqliteProvider(BaseProvider):
96
97
  self.window.core.debug.log(e)
97
98
  print("Error while saving filed: {}".format(str(e)))
98
99
 
99
- def save_all(self, items: dict):
100
+ def save_all(self, items: Dict[str, AssistantFileItem]):
100
101
  """
101
102
  Save all files to DB
102
103
 
@@ -6,10 +6,11 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.04.29 16:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import time
13
+ from typing import Dict
13
14
 
14
15
  from sqlalchemy import text
15
16
 
@@ -34,7 +35,7 @@ class Storage:
34
35
  """
35
36
  self.window = window
36
37
 
37
- def get_all(self) -> dict:
38
+ def get_all(self) -> Dict[str, AssistantFileItem]:
38
39
  """
39
40
  Return dict with AssistantFileItem objects, indexed by ID
40
41
 
@@ -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.26 23:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Dict
13
+
12
14
  from packaging.version import Version
13
15
 
14
16
  from pygpt_net.item.assistant import AssistantStoreItem
@@ -32,16 +34,16 @@ class BaseProvider:
32
34
  def create(self, store: AssistantStoreItem) -> str:
33
35
  pass
34
36
 
35
- def load(self, id) -> dict:
37
+ def load(self, id) -> AssistantStoreItem:
36
38
  pass
37
39
 
38
- def load_all(self) -> dict:
40
+ def load_all(self) -> Dict[str, AssistantStoreItem]:
39
41
  pass
40
42
 
41
43
  def save(self, file: AssistantStoreItem):
42
44
  pass
43
45
 
44
- def save_all(self, items: dict):
46
+ def save_all(self, items: Dict[str, AssistantStoreItem]):
45
47
  pass
46
48
 
47
49
  def remove(self, id: str):
@@ -1,15 +1,16 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  # ================================================== #
4
- # This store is a part of PYGPT package #
4
+ # This store is a part of PYGPT package #
5
5
  # Website: https://pygpt.net #
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.26 23:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import uuid
13
+ from typing import Dict
13
14
 
14
15
  from packaging.version import Version
15
16
 
@@ -62,7 +63,7 @@ class DbSqliteProvider(BaseProvider):
62
63
  store.record_id = self.storage.insert(store)
63
64
  return store.record_id
64
65
 
65
- def load_all(self) -> dict:
66
+ def load_all(self) -> Dict[str, AssistantStoreItem]:
66
67
  """
67
68
  Load stores from DB
68
69
 
@@ -91,7 +92,7 @@ class DbSqliteProvider(BaseProvider):
91
92
  self.window.core.debug.log(e)
92
93
  print("Error while saving stored: {}".format(str(e)))
93
94
 
94
- def save_all(self, items: dict):
95
+ def save_all(self, items: Dict[str, AssistantStoreItem]):
95
96
  """
96
97
  Save all stores to DB
97
98
 
@@ -1,19 +1,21 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  # ================================================== #
4
- # This store is a part of PYGPT package #
4
+ # This store is a part of PYGPT package #
5
5
  # Website: https://pygpt.net #
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.26 23:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import time
13
+ from typing import Dict
13
14
 
14
15
  from sqlalchemy import text
15
16
 
16
17
  from pygpt_net.item.assistant import AssistantStoreItem
18
+
17
19
  from .utils import pack_item_value, unpack_store
18
20
 
19
21
  class Storage:
@@ -33,7 +35,7 @@ class Storage:
33
35
  """
34
36
  self.window = window
35
37
 
36
- def get_all(self) -> dict:
38
+ def get_all(self) -> Dict[str, AssistantStoreItem]:
37
39
  """
38
40
  Return dict with AssistantStoreItem objects, indexed by ID
39
41
 
@@ -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: 2023.12.31 04:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Dict
13
+
12
14
  from packaging.version import Version
13
15
 
14
16
  from pygpt_net.item.attachment import AttachmentItem
@@ -32,10 +34,10 @@ class BaseProvider:
32
34
  def create(self, attachment: AttachmentItem) -> str:
33
35
  pass
34
36
 
35
- def load(self) -> dict:
37
+ def load(self) -> Dict[str, Dict[str, AttachmentItem]]:
36
38
  pass
37
39
 
38
- def save(self, items: dict):
40
+ def save(self, items: Dict[str, Dict[str, AttachmentItem]]):
39
41
  pass
40
42
 
41
43
  def remove(self, id: str):
@@ -6,12 +6,13 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.26 02: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
  import uuid
15
+ from typing import Dict
15
16
 
16
17
  from packaging.version import Version
17
18
 
@@ -46,7 +47,7 @@ class JsonFileProvider(BaseProvider):
46
47
  attachment.id = self.create_id()
47
48
  return attachment.id
48
49
 
49
- def load(self) -> dict:
50
+ def load(self) -> Dict[str, Dict[str, AttachmentItem]]:
50
51
  """
51
52
  Load attachments from file
52
53
 
@@ -74,7 +75,7 @@ class JsonFileProvider(BaseProvider):
74
75
 
75
76
  return items
76
77
 
77
- def save(self, items: dict):
78
+ def save(self, items: Dict[str, Dict[str, AttachmentItem]]):
78
79
  """
79
80
  Save attachments to file
80
81
  """
@@ -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.01.06 04:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Dict
13
+
12
14
  from packaging.version import Version
13
15
 
14
16
  from pygpt_net.item.calendar_note import CalendarNoteItem
@@ -35,13 +37,13 @@ class BaseProvider:
35
37
  def load(self, year, month, day) -> CalendarNoteItem:
36
38
  pass
37
39
 
38
- def load_all(self) -> dict:
40
+ def load_all(self) -> Dict[str, CalendarNoteItem]:
39
41
  pass
40
42
 
41
43
  def save(self, notepad: CalendarNoteItem):
42
44
  pass
43
45
 
44
- def save_all(self, items: dict):
46
+ def save_all(self, items: Dict[str, CalendarNoteItem]):
45
47
  pass
46
48
 
47
49
  def remove(self, year, month, day):
@@ -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.03.07 23:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import uuid
13
+ from typing import Dict
13
14
 
14
15
  from packaging.version import Version
15
16
 
@@ -65,7 +66,7 @@ class DbSqliteProvider(BaseProvider):
65
66
  note.id = self.storage.insert(note)
66
67
  return note.id
67
68
 
68
- def load_all(self) -> dict:
69
+ def load_all(self) -> Dict[str, CalendarNoteItem]:
69
70
  """
70
71
  Load notes from DB
71
72
 
@@ -73,7 +74,7 @@ class DbSqliteProvider(BaseProvider):
73
74
  """
74
75
  return self.storage.get_all()
75
76
 
76
- def load_by_month(self, year: int, month: int) -> dict:
77
+ def load_by_month(self, year: int, month: int) -> Dict[str, CalendarNoteItem]:
77
78
  """
78
79
  Load notes from DB
79
80
 
@@ -92,7 +93,7 @@ class DbSqliteProvider(BaseProvider):
92
93
  """
93
94
  return self.storage.get_by_date(year, month, day)
94
95
 
95
- def get_notes_existence_by_day(self, year, month) -> dict:
96
+ def get_notes_existence_by_day(self, year, month) -> Dict[str, Dict[int, int]]:
96
97
  """
97
98
  Get notes existence by day
98
99
 
@@ -114,7 +115,7 @@ class DbSqliteProvider(BaseProvider):
114
115
  self.window.core.debug.log(e)
115
116
  print("Error while saving note: {}".format(str(e)))
116
117
 
117
- def save_all(self, items: dict):
118
+ def save_all(self, items: Dict[str, CalendarNoteItem]):
118
119
  """
119
120
  Save all notes to DB
120
121
 
@@ -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.03.06 04:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import time
13
+ from typing import Dict
13
14
 
14
15
  from sqlalchemy import text
15
16
 
@@ -34,7 +35,7 @@ class Storage:
34
35
  """
35
36
  self.window = window
36
37
 
37
- def get_all(self) -> dict:
38
+ def get_all(self) -> Dict[str, CalendarNoteItem]:
38
39
  """
39
40
  Return dict with CalendarNoteItem objects, indexed by YYYY-MM-DD
40
41
 
@@ -54,7 +55,7 @@ class Storage:
54
55
  items[dt] = note
55
56
  return items
56
57
 
57
- def get_by_month(self, year: int, month: int) -> dict:
58
+ def get_by_month(self, year: int, month: int) -> Dict[str, CalendarNoteItem]:
58
59
  """
59
60
  Return dict with CalendarNoteItem objects, indexed by YYYY-MM-DD
60
61
 
@@ -96,7 +97,7 @@ class Storage:
96
97
  self.unpack(notepad, row._asdict())
97
98
  return notepad
98
99
 
99
- def get_notes_existence_by_day(self, year: int, month: int) -> dict:
100
+ def get_notes_existence_by_day(self, year: int, month: int) -> Dict[str, Dict[int, int]]:
100
101
  """
101
102
  Return a dict of days with the count of notes for the given year and month.
102
103
 
@@ -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: 2023.12.31 04:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Dict, Any, Optional
13
+
12
14
  from packaging.version import Version
13
15
 
14
16
 
@@ -30,19 +32,19 @@ class BaseProvider:
30
32
  def patch(self, version: Version) -> bool:
31
33
  pass
32
34
 
33
- def load(self, all: bool = False) -> dict:
35
+ def load(self, all: bool = False) -> Optional[Dict[str, Any]]:
34
36
  pass
35
37
 
36
- def load_base(self) -> dict:
38
+ def load_base(self) -> Optional[Dict[str, Any]]:
37
39
  pass
38
40
 
39
- def save(self, items: dict, filename: str = 'config.json'):
41
+ def save(self, items: Dict[str, Any], filename: str = 'config.json'):
40
42
  pass
41
43
 
42
- def get_options(self) -> dict:
44
+ def get_options(self) -> Optional[Dict[str, Any]]:
43
45
  pass
44
46
 
45
- def get_sections(self) -> dict:
47
+ def get_sections(self) -> Optional[Dict[str, Any]]:
46
48
  pass
47
49
 
48
50
  def get_version(self) -> str:
@@ -6,12 +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.01.12 04: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
  import shutil
15
+ from typing import Optional, Dict, Any
16
+
15
17
  from packaging.version import Version
16
18
 
17
19
  from pygpt_net.provider.core.config.base import BaseProvider
@@ -38,7 +40,7 @@ class JsonFileProvider(BaseProvider):
38
40
  src = os.path.join(self.path_app, 'data', 'config', self.config_file)
39
41
  shutil.copyfile(src, dst)
40
42
 
41
- def get_version(self) -> str | None:
43
+ def get_version(self) -> Optional[str]:
42
44
  """
43
45
  Get config file version
44
46
 
@@ -52,7 +54,7 @@ class JsonFileProvider(BaseProvider):
52
54
  if '__meta__' in data and 'version' in data['__meta__']:
53
55
  return data['__meta__']['version']
54
56
 
55
- def load(self, all: bool = False) -> dict | None:
57
+ def load(self, all: bool = False) -> Optional[Dict[str, Any]]:
56
58
  """
57
59
  Load config from JSON file
58
60
 
@@ -72,7 +74,7 @@ class JsonFileProvider(BaseProvider):
72
74
  print("FATAL ERROR: {}".format(e))
73
75
  return data
74
76
 
75
- def load_base(self) -> dict | None:
77
+ def load_base(self) -> Optional[Dict[str, Any]]:
76
78
  """
77
79
  Load config from JSON file
78
80
 
@@ -90,7 +92,7 @@ class JsonFileProvider(BaseProvider):
90
92
  print("FATAL ERROR: {}".format(e))
91
93
  return data
92
94
 
93
- def save(self, data: dict, filename: str = 'config.json'):
95
+ def save(self, data: Dict[str, Any], filename: str = 'config.json'):
94
96
  """
95
97
  Save config to JSON file
96
98
 
@@ -106,7 +108,7 @@ class JsonFileProvider(BaseProvider):
106
108
  except Exception as e:
107
109
  print("FATAL ERROR: {}".format(e))
108
110
 
109
- def get_options(self) -> dict | None:
111
+ def get_options(self) -> Optional[Dict[str, Any]]:
110
112
  """
111
113
  Load config settings options from JSON file
112
114
 
@@ -124,7 +126,7 @@ class JsonFileProvider(BaseProvider):
124
126
  print("FATAL ERROR: {}".format(e))
125
127
  return data
126
128
 
127
- def get_sections(self) -> dict | None:
129
+ def get_sections(self) -> Optional[Dict[str, Any]]:
128
130
  """
129
131
  Load config sections from JSON file
130
132
 
@@ -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.29 23:00:00 #
9
+ # Updated Date: 2024.12.13 19:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import copy
@@ -1734,6 +1734,48 @@ class Patch:
1734
1734
  'ctx.attachment.rag.history.max_items')
1735
1735
  updated = True
1736
1736
 
1737
+ # < 2.4.38
1738
+ if old < parse_version("2.4.38"):
1739
+ print("Migrating config from < 2.4.38...")
1740
+ if 'theme.style' not in data:
1741
+ data["theme.style"] = "blocks"
1742
+ if 'audio.input.device' not in data:
1743
+ data["audio.input.device"] = "0"
1744
+ if 'audio.input.channels' not in data:
1745
+ data["audio.input.channels"] = 1
1746
+ if 'audio.input.rate' not in data:
1747
+ data["audio.input.rate"] = 44100
1748
+ self.window.core.updater.patch_css('style.light.css', True) # force update
1749
+ updated = True
1750
+
1751
+ # < 2.4.39
1752
+ if old < parse_version("2.4.39"):
1753
+ print("Migrating config from < 2.4.39...")
1754
+ if 'layout.split' not in data:
1755
+ data["layout.split"] = False
1756
+ updated = True
1757
+
1758
+ # < 2.4.40
1759
+ if old < parse_version("2.4.40"):
1760
+ print("Migrating config from < 2.4.40...")
1761
+ if 'cmd_web' in data['plugins'] \
1762
+ and 'max_result_length' in data['plugins']['cmd_web']:
1763
+ del data['plugins']['cmd_web']['max_result_length']
1764
+ if 'cmd_web' in data['plugins'] \
1765
+ and 'cmd.web_search' in data['plugins']['cmd_web']:
1766
+ del data['plugins']['cmd_web']['cmd.web_search']
1767
+ if 'cmd_web' in data['plugins'] \
1768
+ and 'cmd.web_url_open' in data['plugins']['cmd_web']:
1769
+ del data['plugins']['cmd_web']['cmd.web_url_open']
1770
+ if 'cmd_web' in data['plugins'] \
1771
+ and 'cmd.web_url_raw' in data['plugins']['cmd_web']:
1772
+ del data['plugins']['cmd_web']['cmd.web_url_raw']
1773
+ self.window.core.updater.patch_css('web-blocks.css', True) # force update
1774
+ self.window.core.updater.patch_css('web-blocks.light.css', True) # force update
1775
+ self.window.core.updater.patch_css('web-chatgpt.css', True) # force update
1776
+ self.window.core.updater.patch_css('web-chatgpt_wide.css', True) # force update
1777
+ updated = True
1778
+
1737
1779
  # update file
1738
1780
  migrated = False
1739
1781
  if updated:
@@ -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.08 21:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import List, Dict, Optional
13
+
12
14
  from packaging.version import Version
13
15
 
14
16
  from pygpt_net.item.ctx import CtxMeta, CtxItem, CtxGroup
@@ -29,46 +31,49 @@ class BaseProvider:
29
31
  def patch(self, version: Version) -> bool:
30
32
  pass
31
33
 
32
- def append_item(self, meta: CtxMeta, item: CtxItem):
34
+ def append_item(self, meta: CtxMeta, item: CtxItem) -> bool:
33
35
  pass
34
36
 
35
- def update_item(self, item: CtxItem):
37
+ def update_item(self, item: CtxItem) -> bool:
36
38
  pass
37
39
 
38
- def create(self, meta: CtxMeta):
40
+ def create(self, meta: CtxMeta) -> int:
39
41
  pass
40
42
 
41
- def load(self, id) -> list:
43
+ def load(self, id: int) -> List[CtxItem]:
42
44
  return []
43
45
 
44
- def save(self, id, meta: CtxMeta, items: list):
46
+ def save(self, id: int, meta: CtxMeta, items: List[CtxItem]) -> bool:
45
47
  pass
46
48
 
47
- def remove(self, id):
49
+ def remove(self, id: int) -> bool:
48
50
  pass
49
51
 
50
- def remove_item(self, id):
52
+ def remove_item(self, id: int) -> bool:
51
53
  pass
52
54
 
53
- def remove_items_from(self, meta_id: int, item_id: int):
55
+ def remove_items_from(self, meta_id: int, item_id: int) -> bool:
54
56
  pass
55
57
 
56
- def truncate(self):
58
+ def truncate(self) -> bool:
57
59
  pass
58
60
 
59
61
  def get_meta(
60
62
  self,
61
- search_string: str = None,
62
- order_by: str = None,
63
- order_direction: str = None,
64
- limit: int = None,
65
- offset: int = None,
66
- filters: dict = None,
63
+ search_string: Optional[str] = None,
64
+ order_by: Optional[str] = None,
65
+ order_direction: Optional[str] = None,
66
+ limit: Optional[int] = None,
67
+ offset: Optional[int] = None,
68
+ filters: Optional[dict] = None,
67
69
  search_content: bool = False
68
- ):
70
+ ) -> Dict[int, CtxMeta]:
71
+ pass
72
+
73
+ def get_meta_indexed(self) -> Dict[int, CtxMeta]:
69
74
  pass
70
75
 
71
- def get_meta_indexed(self):
76
+ def get_item_by_id(self, id: int) -> CtxItem:
72
77
  pass
73
78
 
74
79
  def dump(self, ctx: CtxItem):
@@ -92,25 +97,25 @@ class BaseProvider:
92
97
  def clear_meta_indexed_all(self) -> bool:
93
98
  pass
94
99
 
95
- def get_groups(self) -> dict:
100
+ def get_groups(self) -> Dict[int, CtxGroup]:
96
101
  pass
97
102
 
98
- def insert_group(self, group: CtxGroup):
103
+ def insert_group(self, group: CtxGroup) -> int:
99
104
  pass
100
105
 
101
- def update_group(self, group: CtxGroup):
106
+ def update_group(self, group: CtxGroup) -> bool:
102
107
  pass
103
108
 
104
- def remove_group(self, id: int, all: bool = False):
109
+ def remove_group(self, id: int, all: bool = False) -> bool:
105
110
  pass
106
111
 
107
- def truncate_groups(self):
112
+ def truncate_groups(self) -> bool:
108
113
  pass
109
114
 
110
- def update_meta_group_id(self, meta_id: int, group_id: int):
115
+ def update_meta_group_id(self, meta_id: int, group_id: int) -> bool:
111
116
  pass
112
117
 
113
- def clear_meta(self, meta_id: int):
118
+ def clear_meta(self, meta_id: int) -> bool:
114
119
  pass
115
120
 
116
121