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,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.02.01 00:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Optional, Dict
13
+
12
14
  from packaging.version import Version
13
15
 
14
16
  from pygpt_net.item.preset import PresetItem
@@ -32,16 +34,16 @@ class BaseProvider:
32
34
  def create(self, item: PresetItem):
33
35
  pass
34
36
 
35
- def load(self) -> dict:
37
+ def load(self) -> Optional[Dict[str, PresetItem]]:
36
38
  pass
37
39
 
38
- def load_base(self) -> dict:
40
+ def load_base(self) -> Optional[Dict[str, PresetItem]]:
39
41
  pass
40
42
 
41
43
  def save(self, id: str, item: PresetItem):
42
44
  pass
43
45
 
44
- def save_all(self, items: dict):
46
+ def save_all(self, items: Dict[str, PresetItem]):
45
47
  pass
46
48
 
47
49
  def remove(self, id: 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.11.26 19: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 Dict, Optional, Any
16
+
15
17
  from packaging.version import Version
16
18
 
17
19
  from pygpt_net.core.types import (
@@ -42,9 +44,7 @@ class JsonFileProvider(BaseProvider):
42
44
  self.type = "preset"
43
45
 
44
46
  def install(self):
45
- """
46
- Install provider data
47
- """
47
+ """Install provider data"""
48
48
  # install presets
49
49
  presets_dir = self.window.core.config.get_user_dir('presets')
50
50
  src = os.path.join(self.window.core.config.get_app_path(), 'data', 'config', 'presets')
@@ -58,7 +58,7 @@ class JsonFileProvider(BaseProvider):
58
58
  if not os.path.exists(dst_file):
59
59
  shutil.copyfile(src_file, dst_file)
60
60
 
61
- def load(self) -> dict | None:
61
+ def load(self) -> Optional[Dict[str, PresetItem]]:
62
62
  """
63
63
  Load presets from JSON files
64
64
 
@@ -82,7 +82,7 @@ class JsonFileProvider(BaseProvider):
82
82
 
83
83
  return items
84
84
 
85
- def load_base(self) -> dict | None:
85
+ def load_base(self) -> Optional[Dict[str, PresetItem]]:
86
86
  """
87
87
  Load base presets from JSON files
88
88
 
@@ -126,7 +126,7 @@ class JsonFileProvider(BaseProvider):
126
126
  except Exception as e:
127
127
  self.window.core.debug.log(e)
128
128
 
129
- def save_all(self, items: dict):
129
+ def save_all(self, items: Dict[str, PresetItem]):
130
130
  """
131
131
  Save all presets to JSON files
132
132
 
@@ -171,7 +171,7 @@ class JsonFileProvider(BaseProvider):
171
171
  return self.patcher.execute(version)
172
172
 
173
173
  @staticmethod
174
- def serialize(item: PresetItem) -> dict:
174
+ def serialize(item: PresetItem) -> Dict[str, Any]:
175
175
  """
176
176
  Serialize item to dict
177
177
 
@@ -207,7 +207,7 @@ class JsonFileProvider(BaseProvider):
207
207
  }
208
208
 
209
209
  @staticmethod
210
- def deserialize(data: dict, item: PresetItem):
210
+ def deserialize(data: Dict[str, Any], item: PresetItem):
211
211
  """
212
212
  Deserialize item from dict
213
213
 
@@ -6,12 +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: 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
17
+ from pygpt_net.item.prompt import PromptItem
15
18
 
16
19
 
17
20
  class BaseProvider:
@@ -32,10 +35,10 @@ class BaseProvider:
32
35
  def create(self, attachment: AttachmentItem) -> str:
33
36
  pass
34
37
 
35
- def load(self) -> dict:
38
+ def load(self) -> Dict[str, PromptItem]:
36
39
  pass
37
40
 
38
- def save(self, items: dict):
41
+ def save(self, items: Dict[str, PromptItem]):
39
42
  pass
40
43
 
41
44
  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.08.29 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 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
  prompt.id = self.create_id()
47
48
  return prompt.id
48
49
 
49
- def load(self) -> dict:
50
+ def load(self) -> Dict[str, PromptItem]:
50
51
  """
51
52
  Load prompts from file
52
53
 
@@ -73,7 +74,7 @@ class JsonFileProvider(BaseProvider):
73
74
 
74
75
  return items
75
76
 
76
- def save(self, items: dict):
77
+ def save(self, items: Dict[str, PromptItem]):
77
78
  """
78
79
  Save prompts to file
79
80
  """
@@ -108,7 +109,11 @@ class JsonFileProvider(BaseProvider):
108
109
  pass
109
110
 
110
111
  def truncate(self, mode: str):
111
- """Delete all"""
112
+ """
113
+ Delete all
114
+
115
+ :param mode: mode
116
+ """
112
117
  path = os.path.join(self.window.core.config.path, self.config_file)
113
118
  data = {'__meta__': self.window.core.config.append_meta(), 'items': {}}
114
119
  try:
@@ -128,7 +133,7 @@ class JsonFileProvider(BaseProvider):
128
133
  return False
129
134
 
130
135
  @staticmethod
131
- def serialize(prompt: PromptItem) -> dict:
136
+ def serialize(prompt: PromptItem) -> Dict[str, str]:
132
137
  """
133
138
  Serialize item to dict
134
139
 
@@ -141,7 +146,7 @@ class JsonFileProvider(BaseProvider):
141
146
  }
142
147
 
143
148
  @staticmethod
144
- def deserialize(data: dict, prompt: PromptItem):
149
+ def deserialize(data: Dict[str, str], prompt: PromptItem):
145
150
  """
146
151
  Deserialize item from dict
147
152
 
@@ -6,10 +6,11 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.04.30 16:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
13
+ from typing import Optional, List, Dict
13
14
 
14
15
  from pygpt_net.item.assistant import AssistantItem
15
16
  from pygpt_net.item.ctx import CtxItem
@@ -37,7 +38,11 @@ class Assistants:
37
38
  """
38
39
  return self.window.core.gpt.get_client()
39
40
 
40
- def log(self, msg: str, callback: callable = None):
41
+ def log(
42
+ self,
43
+ msg: str,
44
+ callback: Optional[callable] = None
45
+ ):
41
46
  """
42
47
  Log message
43
48
 
@@ -140,7 +145,12 @@ class Assistants:
140
145
  thread_messages = client.beta.threads.messages.list(thread_id)
141
146
  return thread_messages.data
142
147
 
143
- def msg_send(self, id: str, text: str, file_ids: list = None):
148
+ def msg_send(
149
+ self,
150
+ id: str,
151
+ text: str,
152
+ file_ids: Optional[list] = None
153
+ ):
144
154
  """
145
155
  Send message to thread
146
156
 
@@ -175,7 +185,7 @@ class Assistants:
175
185
  if message is not None:
176
186
  return message
177
187
 
178
- def get_tools(self, assistant: AssistantItem) -> list:
188
+ def get_tools(self, assistant: AssistantItem) -> List[dict]:
179
189
  """
180
190
  Get assistant tools
181
191
 
@@ -207,7 +217,7 @@ class Assistants:
207
217
  )
208
218
  return tools
209
219
 
210
- def get_tool_resources(self, assistant: AssistantItem) -> dict:
220
+ def get_tool_resources(self, assistant: AssistantItem) -> Dict[str, dict]:
211
221
  """
212
222
  Get assistant tool resources
213
223
 
@@ -226,8 +236,8 @@ class Assistants:
226
236
  self,
227
237
  thread_id: str,
228
238
  assistant_id: str,
229
- model: str = None,
230
- instructions: str = None
239
+ model: Optional[str] = None,
240
+ instructions: Optional[str] = None
231
241
  ):
232
242
  """
233
243
  Create assistant run
@@ -259,8 +269,8 @@ class Assistants:
259
269
  ctx: CtxItem,
260
270
  thread_id: str,
261
271
  assistant_id: str,
262
- model: str = None,
263
- instructions: str = None
272
+ model: Optional[str] = None,
273
+ instructions: Optional[str] = None
264
274
  ):
265
275
  """
266
276
  Create assistant run (stream)
@@ -377,8 +387,8 @@ class Assistants:
377
387
  items: dict,
378
388
  order: str = "asc",
379
389
  limit: int = 100,
380
- after: str = None,
381
- callback: callable = None
390
+ after: Optional[str] = None,
391
+ callback: Optional[callable] = None
382
392
  ) -> dict:
383
393
  """
384
394
  Import assistants from API (all, paginated)
@@ -6,10 +6,11 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.26 19:00:00 #
9
+ # Updated Date: 2024.12.14 18:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import base64
13
+ from typing import Optional, Union, List, Dict, Any
13
14
 
14
15
  from pygpt_net.core.bridge.context import MultimodalContext
15
16
 
@@ -25,11 +26,11 @@ class Audio:
25
26
 
26
27
  def build_content(
27
28
  self,
28
- content,
29
- multimodal_ctx: MultimodalContext = None,
30
- ) -> list:
29
+ content: Optional[Union[str, list]] = None,
30
+ multimodal_ctx: Optional[MultimodalContext] = None,
31
+ ) -> List[Dict[str, Any]]:
31
32
  """
32
- Build audio content
33
+ Build audio content from multimodal context
33
34
 
34
35
  :param content: previous content or input prompt
35
36
  :param multimodal_ctx: multimodal context
@@ -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 json
13
13
  import time
14
+ from typing import Optional, Dict, Any, List
14
15
 
15
16
  from pygpt_net.core.types import (
16
17
  MODE_CHAT,
@@ -22,6 +23,8 @@ from pygpt_net.item.ctx import CtxItem
22
23
  from pygpt_net.item.model import ModelItem
23
24
 
24
25
  from .utils import sanitize_name
26
+ from ...item.attachment import AttachmentItem
27
+
25
28
 
26
29
  class Chat:
27
30
  def __init__(self, window=None):
@@ -36,7 +39,7 @@ class Chat:
36
39
  def send(
37
40
  self,
38
41
  context: BridgeContext,
39
- extra: dict = None
42
+ extra: Optional[Dict[str, Any]] = None
40
43
  ):
41
44
  """
42
45
  Call OpenAI API for chat
@@ -151,11 +154,11 @@ class Chat:
151
154
  prompt: str,
152
155
  system_prompt: str,
153
156
  model: ModelItem,
154
- history: list = None,
155
- attachments: dict = None,
156
- ai_name: str = None,
157
- user_name: str = None,
158
- multimodal_ctx: MultimodalContext = None,
157
+ history: Optional[List[CtxItem]] = None,
158
+ attachments: Optional[Dict[str, AttachmentItem]] = None,
159
+ ai_name: Optional[str] = None,
160
+ user_name: Optional[str] = None,
161
+ multimodal_ctx: Optional[MultimodalContext] = None,
159
162
  ) -> list:
160
163
  """
161
164
  Build list of chat messages
@@ -6,9 +6,11 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.23 00:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Optional, Dict, Any, List
13
+
12
14
  from pygpt_net.core.types import (
13
15
  MODE_COMPLETION,
14
16
  )
@@ -27,7 +29,11 @@ class Completion:
27
29
  self.window = window
28
30
  self.input_tokens = 0
29
31
 
30
- def send(self, context: BridgeContext, extra: dict = None):
32
+ def send(
33
+ self,
34
+ context: BridgeContext,
35
+ extra: Optional[Dict[str, Any]] = None
36
+ ):
31
37
  """
32
38
  Call OpenAI API for completion
33
39
 
@@ -98,9 +104,9 @@ class Completion:
98
104
  prompt: str,
99
105
  system_prompt: str,
100
106
  model: ModelItem,
101
- history: list = None,
102
- ai_name: str = None,
103
- user_name: str = None,
107
+ history: Optional[List[CtxItem]] = None,
108
+ ai_name: Optional[str] = None,
109
+ user_name: Optional[str] = None,
104
110
  ) -> str:
105
111
  """
106
112
  Build completion string
@@ -6,11 +6,13 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.20 21:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import datetime
13
13
  import os
14
+ from typing import Optional, Dict, Any
15
+
14
16
  import requests
15
17
 
16
18
  from PySide6.QtCore import QObject, Signal, QRunnable, Slot
@@ -31,7 +33,12 @@ class Image:
31
33
  self.window = window
32
34
  self.worker = None
33
35
 
34
- def generate(self, context: BridgeContext, extra: dict = None, sync: bool = True):
36
+ def generate(
37
+ self,
38
+ context: BridgeContext,
39
+ extra: Optional[Dict[str, Any]] = None,
40
+ sync: bool = True
41
+ ):
35
42
  """
36
43
  Call images API
37
44
 
@@ -6,10 +6,11 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.04.30 16:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
13
+ from typing import Optional, List
13
14
 
14
15
  from pygpt_net.item.assistant import AssistantStoreItem
15
16
 
@@ -31,7 +32,11 @@ class Store:
31
32
  """
32
33
  return self.window.core.gpt.get_client()
33
34
 
34
- def log(self, msg: str, callback: callable = None):
35
+ def log(
36
+ self,
37
+ msg: str,
38
+ callback: Optional[callable] = None
39
+ ):
35
40
  """
36
41
  Log message
37
42
 
@@ -57,7 +62,7 @@ class Store:
57
62
  self,
58
63
  path: str,
59
64
  purpose: str = "assistants"
60
- ) -> str or None:
65
+ ) -> Optional[str]:
61
66
  """
62
67
  Upload file to assistant
63
68
 
@@ -98,7 +103,7 @@ class Store:
98
103
  items: list,
99
104
  order: str = "asc",
100
105
  limit: int = 100,
101
- after: str = None,
106
+ after: Optional[str] = None,
102
107
  ) -> list:
103
108
  """
104
109
  Get all vector store IDs
@@ -132,7 +137,7 @@ class Store:
132
137
  )
133
138
  return items
134
139
 
135
- def get_files_ids(self) -> list:
140
+ def get_files_ids(self) -> List[str]:
136
141
  """
137
142
  Get all files IDs
138
143
 
@@ -148,7 +153,10 @@ class Store:
148
153
  items.append(id)
149
154
  return items
150
155
 
151
- def remove_files(self, callback: callable = None) -> int:
156
+ def remove_files(
157
+ self,
158
+ callback: Optional[callable] = None
159
+ ) -> int:
152
160
  """
153
161
  Remove all files
154
162
 
@@ -167,7 +175,11 @@ class Store:
167
175
  self.log(msg, callback)
168
176
  return num
169
177
 
170
- def remove_store_files(self, store_id: str, callback: callable = None) -> int:
178
+ def remove_store_files(
179
+ self,
180
+ store_id: str,
181
+ callback: Optional[callable] = None
182
+ ) -> int:
171
183
  """
172
184
  Remove all files from store
173
185
 
@@ -192,8 +204,8 @@ class Store:
192
204
  items: dict,
193
205
  order: str = "asc",
194
206
  limit: int = 100,
195
- after: str = None,
196
- callback: callable = None
207
+ after: Optional[str] = None,
208
+ callback: Optional[callable] = None
197
209
  ) -> dict:
198
210
  """
199
211
  Import vector stores from API
@@ -239,7 +251,11 @@ class Store:
239
251
  )
240
252
  return items
241
253
 
242
- def create_store(self, name: str, expire_days: int = 0):
254
+ def create_store(
255
+ self,
256
+ name: str,
257
+ expire_days: int = 0
258
+ ):
243
259
  """
244
260
  Create vector store
245
261
 
@@ -261,7 +277,12 @@ class Store:
261
277
  if vector_store is not None:
262
278
  return vector_store
263
279
 
264
- def update_store(self, id: str, name: str, expire_days: int = 0):
280
+ def update_store(
281
+ self,
282
+ id: str,
283
+ name: str,
284
+ expire_days: int = 0
285
+ ):
265
286
  """
266
287
  Update vector store
267
288
 
@@ -318,7 +339,7 @@ class Store:
318
339
  items: list,
319
340
  order: str = "asc",
320
341
  limit: int = 100,
321
- after: str = None,
342
+ after: Optional[str] = None,
322
343
  ) -> list:
323
344
  """
324
345
  Get all vector stores IDs
@@ -358,7 +379,7 @@ class Store:
358
379
  items: list,
359
380
  order: str = "asc",
360
381
  limit: int = 100,
361
- after: str = None,
382
+ after: Optional[str] = None,
362
383
  ) -> list:
363
384
  """
364
385
  Get all vector store files IDs
@@ -426,7 +447,10 @@ class Store:
426
447
  num += 1
427
448
  return num
428
449
 
429
- def remove_all(self, callback: callable = None) -> int:
450
+ def remove_all(
451
+ self,
452
+ callback: Optional[callable] = None
453
+ ) -> int:
430
454
  """
431
455
  Remove all vector stores
432
456
 
@@ -445,7 +469,11 @@ class Store:
445
469
  self.log(msg, callback)
446
470
  return num
447
471
 
448
- def add_file(self, store_id: str, file_id: str):
472
+ def add_file(
473
+ self,
474
+ store_id: str,
475
+ file_id: str
476
+ ):
449
477
  """
450
478
  Add file to vector store
451
479
 
@@ -479,7 +507,11 @@ class Store:
479
507
  if deleted_file is not None:
480
508
  return deleted_file.id
481
509
 
482
- def delete_store_file(self, store_id: str, file_id: str):
510
+ def delete_store_file(
511
+ self,
512
+ store_id: str,
513
+ file_id: str
514
+ ):
483
515
  """
484
516
  Delete file from vector store
485
517
 
@@ -495,7 +527,10 @@ class Store:
495
527
  if vector_store_file is not None:
496
528
  return vector_store_file
497
529
 
498
- def import_stores_files(self, callback: callable = None) -> int:
530
+ def import_stores_files(
531
+ self,
532
+ callback: Optional[callable] = None
533
+ ) -> int:
499
534
  """
500
535
  Import all vector stores files
501
536
 
@@ -525,7 +560,7 @@ class Store:
525
560
  order: str = "asc",
526
561
  limit: int = 100,
527
562
  after: str = None,
528
- callback: callable = None
563
+ callback: Optional[callable] = None
529
564
  ) -> list:
530
565
  """
531
566
  Import and get all vector store files IDs