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,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.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import time
13
13
  from datetime import datetime, timedelta
14
+ from typing import Optional, Dict, Any
14
15
 
15
16
  from pygpt_net.core.types import (
16
17
  MODE_AGENT,
@@ -36,10 +37,17 @@ class Bridge:
36
37
  self.last_call = None # last API call time, for throttling
37
38
  self.last_context = None # last context
38
39
  self.last_context_quick = None # last context for quick call
39
- self.sync_modes = [MODE_ASSISTANT, MODE_EXPERT]
40
+ self.sync_modes = [
41
+ MODE_ASSISTANT,
42
+ MODE_EXPERT,
43
+ ]
40
44
  self.worker = None
41
45
 
42
- def request(self, context: BridgeContext, extra: dict = None) -> bool:
46
+ def request(
47
+ self,
48
+ context: BridgeContext,
49
+ extra: Optional[Dict[str, Any]] = None
50
+ ) -> bool:
43
51
  """
44
52
  Make request to provider
45
53
 
@@ -135,7 +143,11 @@ class Bridge:
135
143
  self.window.threadpool.start(self.worker)
136
144
  return True
137
145
 
138
- def request_next(self, context: BridgeContext, extra: dict = None) -> bool:
146
+ def request_next(
147
+ self,
148
+ context: BridgeContext,
149
+ extra: Optional[Dict[str, Any]] = None
150
+ ) -> bool:
139
151
  """
140
152
  Make next call to provider (loop next step)
141
153
 
@@ -158,7 +170,11 @@ class Bridge:
158
170
  self.window.threadpool.start(self.worker)
159
171
  return True
160
172
 
161
- def call(self, context: BridgeContext, extra: dict = None) -> str:
173
+ def call(
174
+ self,
175
+ context: BridgeContext,
176
+ extra: Optional[Dict[str, Any]] = None
177
+ ) -> str:
162
178
  """
163
179
  Make quick call to provider and get response content
164
180
 
@@ -221,7 +237,7 @@ class Bridge:
221
237
  extra=extra,
222
238
  )
223
239
 
224
- def get_worker(self):
240
+ def get_worker(self) -> BridgeWorker:
225
241
  """
226
242
  Prepare async worker
227
243
 
@@ -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 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Dict, Any
13
+
12
14
  from pygpt_net.item.ctx import CtxItem
13
15
  from pygpt_net.item.model import ModelItem
14
16
 
@@ -47,7 +49,7 @@ class BridgeContext:
47
49
  if self.model is not None and not isinstance(self.model, ModelItem):
48
50
  raise ValueError("Invalid model instance")
49
51
 
50
- def to_dict(self) -> dict:
52
+ def to_dict(self) -> Dict[str, Any]:
51
53
  """
52
54
  Return as dictionary
53
55
 
@@ -95,7 +97,7 @@ class MultimodalContext:
95
97
  self.audio_data = kwargs.get("audio_data", None)
96
98
  self.audio_format = kwargs.get("audio_format", "wav")
97
99
 
98
- def to_dict(self) -> dict:
100
+ def to_dict(self) -> Dict[str, Any]:
99
101
  """
100
102
  Return as dictionary
101
103
 
@@ -60,14 +60,14 @@ class BridgeWorker(QObject, QRunnable):
60
60
  extra=self.extra,
61
61
  )
62
62
 
63
- # Llama-index: chat with files
63
+ # LlamaIndex: chat with files
64
64
  elif self.mode == MODE_LLAMA_INDEX:
65
65
  result = self.window.core.idx.chat.call(
66
66
  context=self.context,
67
67
  extra=self.extra,
68
68
  )
69
69
 
70
- # Llama-index: agents
70
+ # LlamaIndex: agents
71
71
  elif self.mode == MODE_AGENT_LLAMA:
72
72
  result = self.window.core.agents.runner.call(
73
73
  context=self.context,
@@ -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.12 06:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import datetime
13
+ from typing import Optional, Dict
13
14
 
14
15
  from packaging.version import Version
15
16
 
@@ -33,10 +34,19 @@ class Calendar:
33
34
  self.provider.install()
34
35
 
35
36
  def patch(self, app_version: Version):
36
- """Patch provider data"""
37
+ """
38
+ Patch provider data
39
+
40
+ :param app_version: app version
41
+ """
37
42
  self.provider.patch(app_version)
38
43
 
39
- def get_by_date(self, year: int, month: int, day: int) -> CalendarNoteItem or None:
44
+ def get_by_date(
45
+ self,
46
+ year: int,
47
+ month: int,
48
+ day: int
49
+ ) -> Optional[CalendarNoteItem]:
40
50
  """
41
51
  Get note by date
42
52
 
@@ -51,7 +61,7 @@ class Calendar:
51
61
  return self.items[dt_key]
52
62
  return None
53
63
 
54
- def get_all(self) -> dict:
64
+ def get_all(self) -> Dict[str, CalendarNoteItem]:
55
65
  """
56
66
  Get all notes
57
67
 
@@ -97,7 +107,12 @@ class Calendar:
97
107
  self.save(note.year, note.month, note.day)
98
108
  return True
99
109
 
100
- def load(self, year: int, month: int, day: int):
110
+ def load(
111
+ self,
112
+ year: int,
113
+ month: int,
114
+ day: int
115
+ ):
101
116
  """
102
117
  Load note by idx
103
118
 
@@ -109,7 +124,12 @@ class Calendar:
109
124
  dt_key = datetime.datetime(year, month, day).strftime("%Y-%m-%d")
110
125
  self.items[dt_key] = self.provider.load(year, month, day)
111
126
 
112
- def load_note(self, year: int, month: int, day: int) -> str:
127
+ def load_note(
128
+ self,
129
+ year: int,
130
+ month: int,
131
+ day: int
132
+ ) -> str:
113
133
  """
114
134
  Load note by idx
115
135
 
@@ -123,7 +143,13 @@ class Calendar:
123
143
  return str(note.content)
124
144
  return ""
125
145
 
126
- def append_to_note(self, year: int, month: int, day: int, text: str) -> bool:
146
+ def append_to_note(
147
+ self,
148
+ year: int,
149
+ month: int,
150
+ day: int,
151
+ text: str
152
+ ) -> bool:
127
153
  """
128
154
  Append to note
129
155
 
@@ -148,7 +174,13 @@ class Calendar:
148
174
  self.load(year, month, day)
149
175
  return True
150
176
 
151
- def update_note(self, year: int, month: int, day: int, text: str) -> bool:
177
+ def update_note(
178
+ self,
179
+ year: int,
180
+ month: int,
181
+ day: int,
182
+ text: str
183
+ ) -> bool:
152
184
  """
153
185
  Append to note
154
186
 
@@ -169,7 +201,12 @@ class Calendar:
169
201
  self.load(year, month, day)
170
202
  return True
171
203
 
172
- def remove_note(self, year: int, month: int, day: int) -> bool:
204
+ def remove_note(
205
+ self,
206
+ year: int,
207
+ month: int,
208
+ day: int
209
+ ) -> bool:
173
210
  """
174
211
  Remove note by date
175
212
 
@@ -198,7 +235,11 @@ class Calendar:
198
235
  """
199
236
  self.items = self.provider.load_by_month(year, month)
200
237
 
201
- def get_notes_existence_by_day(self, year, month) -> dict:
238
+ def get_notes_existence_by_day(
239
+ self,
240
+ year: int,
241
+ month: int
242
+ ) -> Dict[str, Dict[int, int]]:
202
243
  """
203
244
  Get notes existence by day
204
245
 
@@ -208,7 +249,12 @@ class Calendar:
208
249
  """
209
250
  return self.provider.get_notes_existence_by_day(year, month)
210
251
 
211
- def save(self, year: int, month: int, day: int) -> bool:
252
+ def save(
253
+ self,
254
+ year: int,
255
+ month: int,
256
+ day: int
257
+ ) -> bool:
212
258
  """
213
259
  Save note by date
214
260
 
@@ -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.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Optional, Dict, Any
13
+
12
14
  from pygpt_net.core.types import (
13
15
  MODE_CHAT,
14
16
  MODE_COMPLETION,
@@ -32,7 +34,11 @@ class Chain:
32
34
  self.chat = Chat(window)
33
35
  self.completion = Completion(window)
34
36
 
35
- def call(self, context: BridgeContext, extra: dict = None) -> bool:
37
+ def call(
38
+ self,
39
+ context: BridgeContext,
40
+ extra: Optional[Dict[str, Any]] = None
41
+ ) -> bool:
36
42
  """
37
43
  Call LLM using Langchain
38
44
 
@@ -6,15 +6,17 @@
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 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
- from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
12
+ from typing import Optional, List
13
13
 
14
+ from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
14
15
 
15
16
  from pygpt_net.core.types import (
16
17
  MODE_CHAT,
17
18
  )
19
+ from pygpt_net.item.ctx import CtxItem
18
20
  from pygpt_net.item.model import ModelItem
19
21
 
20
22
 
@@ -33,10 +35,10 @@ class Chat:
33
35
  prompt: str,
34
36
  system_prompt: str,
35
37
  model: ModelItem,
36
- history: list = None,
38
+ history: Optional[List[CtxItem]] = None,
37
39
  stream: bool = False,
38
- ai_name: str = None,
39
- user_name: str = None
40
+ ai_name: Optional[str] = None,
41
+ user_name: Optional[str] = None
40
42
  ):
41
43
  """
42
44
  Chat with LLM
@@ -93,9 +95,9 @@ class Chat:
93
95
  prompt: str,
94
96
  system_prompt: str,
95
97
  model: ModelItem,
96
- history: list = None,
97
- ai_name: str = None,
98
- user_name: str = None
98
+ history: Optional[List[CtxItem]] = None,
99
+ ai_name: Optional[str] = None,
100
+ user_name: Optional[str] = None
99
101
  ) -> list:
100
102
  """
101
103
  Build chat messages list
@@ -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: 2024.11.23 00:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Optional, List
13
+
12
14
  from pygpt_net.core.types import (
13
15
  MODE_COMPLETION,
14
16
  )
17
+ from pygpt_net.item.ctx import CtxItem
15
18
  from pygpt_net.item.model import ModelItem
16
19
 
17
20
 
@@ -30,10 +33,10 @@ class Completion:
30
33
  prompt: str,
31
34
  system_prompt: str,
32
35
  model: ModelItem,
33
- history: list = None,
36
+ history: Optional[List[CtxItem]] = None,
34
37
  stream: bool = False,
35
- ai_name: str = None,
36
- user_name: str = None
38
+ ai_name: Optional[str] = None,
39
+ user_name: Optional[str] = None
37
40
  ):
38
41
  """
39
42
  Chat with LLM
@@ -88,9 +91,9 @@ class Completion:
88
91
  prompt: str,
89
92
  system_prompt: str,
90
93
  model: ModelItem,
91
- history: list = None,
92
- ai_name: str = None,
93
- user_name: str = None
94
+ history: Optional[List[CtxItem]] = None,
95
+ ai_name: Optional[str] = None,
96
+ user_name: Optional[str] = None
94
97
  ) -> str:
95
98
  """
96
99
  Build completion string
pygpt_net/core/command.py CHANGED
@@ -6,18 +6,20 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import copy
13
13
  import json
14
14
  import re
15
+ from typing import Optional, Dict, Any, List
15
16
 
16
17
  from pygpt_net.core.types import (
17
18
  MODE_ASSISTANT,
18
19
  MODE_COMPLETION,
19
20
  MODE_LANGCHAIN,
20
21
  MODE_LLAMA_INDEX,
22
+ MODE_AUDIO,
21
23
  )
22
24
  from pygpt_net.core.events import Event
23
25
  from pygpt_net.item.ctx import CtxItem
@@ -34,7 +36,10 @@ class Command:
34
36
  """
35
37
  self.window = window
36
38
 
37
- def append_syntax(self, data: dict) -> str:
39
+ def append_syntax(
40
+ self,
41
+ data: Dict[str, Any]
42
+ ) -> str:
38
43
  """
39
44
  Append command syntax to the system prompt
40
45
 
@@ -55,7 +60,10 @@ class Command:
55
60
  prompt += cmd_prompt.strip().replace("{extra}", extra).replace("{schema}", schema)
56
61
  return prompt
57
62
 
58
- def extract_syntax(self, cmds: list) -> str:
63
+ def extract_syntax(
64
+ self,
65
+ cmds: List[Dict[str, Any]]
66
+ ) -> str:
59
67
  """
60
68
  Extract syntax from commands
61
69
 
@@ -117,7 +125,7 @@ class Command:
117
125
  regex_cmd = r'~###~\s*{.*}\s*~###~'
118
126
  return bool(re.search(regex_cmd, text))
119
127
 
120
- def extract_cmds(self, text: str) -> list:
128
+ def extract_cmds(self, text: str) -> List[Dict[str, Any]]:
121
129
  """
122
130
  Extract commands from text
123
131
 
@@ -136,7 +144,7 @@ class Command:
136
144
  pass
137
145
  return cmds
138
146
 
139
- def extract_cmd(self, chunk: str) -> dict or None:
147
+ def extract_cmd(self, chunk: str) -> Optional[Dict[str, Any]]:
140
148
  """
141
149
  Extract command from text chunk (JSON string)
142
150
 
@@ -170,7 +178,10 @@ class Command:
170
178
  pass
171
179
  return cmd
172
180
 
173
- def from_commands(self, cmds: list) -> list:
181
+ def from_commands(
182
+ self,
183
+ cmds: List[Dict[str, Any]]
184
+ ) -> List[Dict[str, Any]]:
174
185
  """
175
186
  Unpack commands to execution list
176
187
 
@@ -183,7 +194,10 @@ class Command:
183
194
  commands.append(cmd)
184
195
  return commands
185
196
 
186
- def unpack_tool_calls(self, tool_calls: list) -> list:
197
+ def unpack_tool_calls(
198
+ self,
199
+ tool_calls: List
200
+ ) -> List[Dict[str, Any]]:
187
201
  """
188
202
  Unpack tool calls from OpenAI response
189
203
 
@@ -208,7 +222,11 @@ class Command:
208
222
  print("Error parsing tool call: " + str(e))
209
223
  return parsed
210
224
 
211
- def unpack_tool_calls_chunks(self, ctx: CtxItem, tool_calls: list):
225
+ def unpack_tool_calls_chunks(
226
+ self,
227
+ ctx: CtxItem,
228
+ tool_calls: List[Dict[str, Any]]
229
+ ):
212
230
  """
213
231
  Handle / unpack tool calls
214
232
 
@@ -231,7 +249,10 @@ class Command:
231
249
  print("Error parsing tool call JSON arguments: ", tool_call["function"]["arguments"])
232
250
  ctx.tool_calls = tmp_calls
233
251
 
234
- def unpack_tool_calls_from_llama(self, tool_calls: list) -> list:
252
+ def unpack_tool_calls_from_llama(
253
+ self,
254
+ tool_calls: List
255
+ ) -> List[Dict[str, Any]]:
235
256
  """
236
257
  Unpack tool calls from Llama-index response
237
258
 
@@ -256,7 +277,10 @@ class Command:
256
277
  print("Error parsing tool call: " + str(e))
257
278
  return parsed
258
279
 
259
- def tool_call_to_cmd(self, tool_call: dict) -> dict:
280
+ def tool_call_to_cmd(
281
+ self,
282
+ tool_call: Dict[str, Any]
283
+ ) -> Dict[str, Any]:
260
284
  """
261
285
  Convert tool call to command
262
286
 
@@ -268,7 +292,10 @@ class Command:
268
292
  "params": tool_call["function"]["arguments"]
269
293
  }
270
294
 
271
- def tool_calls_to_cmds(self, tool_calls: list) -> list:
295
+ def tool_calls_to_cmds(
296
+ self,
297
+ tool_calls: List[Dict[str, Any]]
298
+ ) -> list:
272
299
  """
273
300
  Convert tool calls to commands
274
301
 
@@ -280,7 +307,10 @@ class Command:
280
307
  cmds.append(self.tool_call_to_cmd(tool_call))
281
308
  return cmds
282
309
 
283
- def pack_cmds(self, cmds: list) -> str:
310
+ def pack_cmds(
311
+ self,
312
+ cmds: List[Dict[str, Any]]
313
+ ) -> str:
284
314
  """
285
315
  Pack commands to string
286
316
 
@@ -342,7 +372,10 @@ class Command:
342
372
  ctx.extra["tool_calls_outputs"] = outputs
343
373
  return outputs
344
374
 
345
- def get_functions(self, parent_id: str = None) -> list:
375
+ def get_functions(
376
+ self,
377
+ parent_id: Optional[str] = None
378
+ ) -> List[Dict[str, Any]]:
346
379
  """
347
380
  Get current functions list
348
381
 
@@ -357,7 +390,11 @@ class Command:
357
390
  func_user = []
358
391
  return func + func_user # merge both
359
392
 
360
- def as_native_functions(self, all: bool = False, parent_id: str = None) -> list:
393
+ def as_native_functions(
394
+ self,
395
+ all: bool = False,
396
+ parent_id: Optional[str] = None
397
+ ) -> List[Dict[str, Any]]:
361
398
  """
362
399
  Convert internal functions to native API format
363
400
 
@@ -373,7 +410,8 @@ class Command:
373
410
  functions = [
374
411
  {
375
412
  "name": "get_delivery_date",
376
- "description": "Get the delivery date for a customer's order. Call this whenever you need to know the delivery date, for example when a customer asks 'Where is my package'",
413
+ "description": "Get the delivery date for a customer's order. Call this whenever you need to know
414
+ the delivery date, for example when a customer asks 'Where is my package'",
377
415
  "params": {
378
416
  "type": "object",
379
417
  "properties": {
@@ -410,7 +448,10 @@ class Command:
410
448
  func_experts = self.cmds_to_functions(self.window.core.experts.get_functions()) # agent functions
411
449
  return func_plugins + func_agent + func_experts
412
450
 
413
- def cmds_to_functions(self, cmds: list) -> list:
451
+ def cmds_to_functions(
452
+ self,
453
+ cmds: List[Dict[str, Any]]
454
+ ) -> List[Dict[str, Any]]:
414
455
  """
415
456
  Convert commands to functions (native API format)
416
457
 
@@ -433,7 +474,10 @@ class Command:
433
474
  )
434
475
  return functions
435
476
 
436
- def extract_params(self, cmd: dict) -> dict:
477
+ def extract_params(
478
+ self,
479
+ cmd: Dict[str, Any]
480
+ ) -> Dict[str, Any]:
437
481
  """
438
482
  Extract parameters from command (to native API JSON schema format)
439
483
 
@@ -537,6 +581,7 @@ class Command:
537
581
  MODE_LLAMA_INDEX,
538
582
  MODE_LANGCHAIN,
539
583
  MODE_COMPLETION,
584
+ MODE_AUDIO,
540
585
  ]
541
586
  mode = self.window.core.config.get('mode')
542
587
  if mode in disabled_modes: