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,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.07 23:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Optional, List
13
+
14
+ from pygpt_net.core.tabs.tab import Tab
12
15
  from pygpt_net.item.ctx import CtxItem, CtxMeta
13
16
 
14
17
 
@@ -20,6 +23,15 @@ class BaseRenderer:
20
23
  :param window: Window instance
21
24
  """
22
25
  self.window = window
26
+ self.tab = None
27
+
28
+ def set_tab(self, tab: Tab):
29
+ """
30
+ Append tab
31
+
32
+ :param tab: Tab
33
+ """
34
+ self.tab = tab
23
35
 
24
36
  def prepare(self):
25
37
  """
@@ -43,7 +55,12 @@ class BaseRenderer:
43
55
  """
44
56
  return self.window.core.config.get("stream")
45
57
 
46
- def begin(self, meta: CtxMeta, ctx: CtxItem, stream: bool = False):
58
+ def begin(
59
+ self,
60
+ meta: CtxMeta,
61
+ ctx: CtxItem,
62
+ stream: bool = False
63
+ ):
47
64
  """
48
65
  Render begin
49
66
 
@@ -53,7 +70,12 @@ class BaseRenderer:
53
70
  """
54
71
  pass
55
72
 
56
- def end(self, meta: CtxMeta, ctx: CtxItem, stream: bool = False):
73
+ def end(
74
+ self,
75
+ meta: CtxMeta,
76
+ ctx: CtxItem,
77
+ stream: bool = False
78
+ ):
57
79
  """
58
80
  Render end
59
81
 
@@ -63,7 +85,12 @@ class BaseRenderer:
63
85
  """
64
86
  pass
65
87
 
66
- def end_extra(self, meta: CtxMeta, ctx: CtxItem, stream: bool = False):
88
+ def end_extra(
89
+ self,
90
+ meta: CtxMeta,
91
+ ctx: CtxItem,
92
+ stream: bool = False
93
+ ):
67
94
  """
68
95
  Render end extra
69
96
 
@@ -73,7 +100,11 @@ class BaseRenderer:
73
100
  """
74
101
  pass
75
102
 
76
- def stream_begin(self, meta: CtxMeta, ctx: CtxItem):
103
+ def stream_begin(
104
+ self,
105
+ meta: CtxMeta,
106
+ ctx: CtxItem
107
+ ):
77
108
  """
78
109
  Render stream begin
79
110
 
@@ -82,7 +113,11 @@ class BaseRenderer:
82
113
  """
83
114
  pass # do nothing
84
115
 
85
- def stream_end(self, meta: CtxMeta, ctx: CtxItem):
116
+ def stream_end(
117
+ self,
118
+ meta: CtxMeta,
119
+ ctx: CtxItem
120
+ ):
86
121
  """
87
122
  Render stream end
88
123
 
@@ -91,7 +126,10 @@ class BaseRenderer:
91
126
  """
92
127
  pass # do nothing
93
128
 
94
- def clear_output(self, meta: CtxMeta = None):
129
+ def clear_output(
130
+ self,
131
+ meta: Optional[CtxMeta] = None
132
+ ):
95
133
  """
96
134
  Clear output
97
135
 
@@ -115,7 +153,12 @@ class BaseRenderer:
115
153
  """Reload all outputs, called externally only on theme change to redraw content"""
116
154
  pass
117
155
 
118
- def append_context(self, meta: CtxMeta, items: list, clear: bool = True):
156
+ def append_context(
157
+ self,
158
+ meta: CtxMeta,
159
+ items: List[CtxItem],
160
+ clear: bool = True
161
+ ):
119
162
  """
120
163
  Append all context to output
121
164
 
@@ -125,7 +168,13 @@ class BaseRenderer:
125
168
  """
126
169
  pass
127
170
 
128
- def append_input(self, meta: CtxMeta, ctx: CtxItem, flush: bool = True, append: bool = False):
171
+ def append_input(
172
+ self,
173
+ meta: CtxMeta,
174
+ ctx: CtxItem,
175
+ flush: bool = True,
176
+ append: bool = False
177
+ ):
129
178
  """
130
179
  Append text input to output
131
180
 
@@ -136,7 +185,11 @@ class BaseRenderer:
136
185
  """
137
186
  pass
138
187
 
139
- def append_output(self, meta: CtxMeta, ctx: CtxItem):
188
+ def append_output(
189
+ self,
190
+ meta: CtxMeta,
191
+ ctx: CtxItem
192
+ ):
140
193
  """
141
194
  Append text output to output
142
195
 
@@ -145,7 +198,12 @@ class BaseRenderer:
145
198
  """
146
199
  pass
147
200
 
148
- def append_extra(self, meta: CtxMeta, ctx: CtxItem, footer: bool = False):
201
+ def append_extra(
202
+ self,
203
+ meta: CtxMeta,
204
+ ctx: CtxItem,
205
+ footer: bool = False
206
+ ):
149
207
  """
150
208
  Append extra data (images, files, etc.) to output
151
209
 
@@ -155,7 +213,13 @@ class BaseRenderer:
155
213
  """
156
214
  pass
157
215
 
158
- def append_chunk(self, meta: CtxMeta, ctx: CtxItem, text_chunk: str, begin: bool = False):
216
+ def append_chunk(
217
+ self,
218
+ meta: CtxMeta,
219
+ ctx: CtxItem,
220
+ text_chunk: str,
221
+ begin: bool = False
222
+ ):
159
223
  """
160
224
  Append output chunk to output
161
225
 
@@ -218,15 +282,22 @@ class BaseRenderer:
218
282
  """
219
283
  pass
220
284
 
221
- def on_page_loaded(self, meta: CtxMeta = None):
285
+ def on_page_loaded(
286
+ self,
287
+ meta: Optional[CtxMeta] = None,
288
+ tab: Optional[Tab] = None):
222
289
  """
223
290
  On page loaded callback
224
291
 
225
292
  :param meta: context meta
293
+ :param tab: Tab
226
294
  """
227
- pass
295
+ self.tab = tab
228
296
 
229
- def on_enable_edit(self, live: bool = True):
297
+ def on_enable_edit(
298
+ self,
299
+ live: bool = True
300
+ ):
230
301
  """
231
302
  On enable edit icons
232
303
 
@@ -235,7 +306,10 @@ class BaseRenderer:
235
306
  if live: # default behavior
236
307
  self.window.controller.ctx.refresh()
237
308
 
238
- def on_disable_edit(self, live: bool = True):
309
+ def on_disable_edit(
310
+ self,
311
+ live: bool = True
312
+ ):
239
313
  """
240
314
  On disable edit icons
241
315
 
@@ -244,7 +318,10 @@ class BaseRenderer:
244
318
  if live: # default behavior
245
319
  self.window.controller.ctx.refresh()
246
320
 
247
- def on_enable_timestamp(self, live: bool = True):
321
+ def on_enable_timestamp(
322
+ self,
323
+ live: bool = True
324
+ ):
248
325
  """
249
326
  On enable timestamp
250
327
 
@@ -253,7 +330,10 @@ class BaseRenderer:
253
330
  if live: # default behavior
254
331
  self.window.controller.ctx.refresh()
255
332
 
256
- def on_disable_timestamp(self, live: bool = True):
333
+ def on_disable_timestamp(
334
+ self,
335
+ live: bool = True
336
+ ):
257
337
  """
258
338
  On disable timestamp
259
339
 
@@ -282,7 +362,12 @@ class BaseRenderer:
282
362
  """
283
363
  pass
284
364
 
285
- def tool_output_append(self, meta: CtxMeta, content: str):
365
+ def tool_output_append(
366
+ self,
367
+ meta:
368
+ CtxMeta,
369
+ content: str
370
+ ):
286
371
  """
287
372
  Add tool output (append)
288
373
 
@@ -291,7 +376,11 @@ class BaseRenderer:
291
376
  """
292
377
  pass
293
378
 
294
- def tool_output_update(self, meta: CtxMeta, content: str):
379
+ def tool_output_update(
380
+ self,
381
+ meta: CtxMeta,
382
+ content: str
383
+ ):
295
384
  """
296
385
  Replace tool output
297
386
 
@@ -300,7 +389,10 @@ class BaseRenderer:
300
389
  """
301
390
  pass
302
391
 
303
- def tool_output_clear(self, meta: CtxMeta):
392
+ def tool_output_clear(
393
+ self,
394
+ meta: CtxMeta
395
+ ):
304
396
  """
305
397
  Clear tool output
306
398
 
@@ -308,7 +400,10 @@ class BaseRenderer:
308
400
  """
309
401
  pass
310
402
 
311
- def tool_output_begin(self, meta: CtxMeta):
403
+ def tool_output_begin(
404
+ self,
405
+ meta: CtxMeta
406
+ ):
312
407
  """
313
408
  Begin tool output
314
409
 
@@ -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.05 23:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
13
+ from typing import Optional, List, Dict
13
14
 
14
15
  from pygpt_net.item.ctx import CtxItem
15
16
  from pygpt_net.utils import trans
@@ -26,7 +27,12 @@ class Body:
26
27
  self.window = window
27
28
  self.img_width = 400
28
29
 
29
- def get_image_html(self, url: str, num: int = None, num_all: int = None) -> str:
30
+ def get_image_html(
31
+ self,
32
+ url: str,
33
+ num: Optional[int] = None,
34
+ num_all: Optional[int] = None
35
+ ) -> str:
30
36
  """
31
37
  Get image HTML
32
38
 
@@ -47,7 +53,12 @@ class Body:
47
53
  img_width=self.img_width,
48
54
  num=num_str)
49
55
 
50
- def get_url_html(self, url: str, num: int = None, num_all: int = None) -> str:
56
+ def get_url_html(
57
+ self,
58
+ url: str,
59
+ num: Optional[int] = None,
60
+ num_all: Optional[int] = None
61
+ ) -> str:
51
62
  """
52
63
  Get URL HTML
53
64
 
@@ -64,7 +75,7 @@ class Body:
64
75
  url=url,
65
76
  num=num_str)
66
77
 
67
- def get_docs_html(self, docs: list) -> str:
78
+ def get_docs_html(self, docs: List[Dict]) -> str:
68
79
  """
69
80
  Get Llama-index doc metadata HTML
70
81
 
@@ -100,7 +111,12 @@ class Body:
100
111
  html += "</div> "
101
112
  return html
102
113
 
103
- def get_file_html(self, url: str, num: int = None, num_all: int = None) -> str:
114
+ def get_file_html(
115
+ self,
116
+ url: str,
117
+ num: Optional[int] = None,
118
+ num_all: Optional[int] = None
119
+ ) -> str:
104
120
  """
105
121
  Get file HTML
106
122
 
@@ -119,7 +135,11 @@ class Body:
119
135
  path=path,
120
136
  num=num_str)
121
137
 
122
- def get_action_icons(self, ctx: CtxItem, all: bool = False) -> list:
138
+ def get_action_icons(
139
+ self,
140
+ ctx: CtxItem,
141
+ all: bool = False
142
+ ) -> list:
123
143
  """
124
144
  Get action icons for context item
125
145
 
@@ -177,7 +197,7 @@ class Body:
177
197
  )
178
198
  return icons
179
199
 
180
- def get_icon(self, icon: str, title: str = None) -> str:
200
+ def get_icon(self, icon: str, title: Optional[str] = None) -> str:
181
201
  """
182
202
  Get icon
183
203
 
@@ -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.05 23:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import re
13
13
  from datetime import datetime
14
+ from typing import Optional, List
15
+
14
16
  from PySide6.QtGui import QTextCursor, QTextBlockFormat, QTextCharFormat
15
17
 
16
18
  from pygpt_net.core.render.base import BaseRenderer
@@ -50,6 +52,8 @@ class Renderer(BaseRenderer):
50
52
 
51
53
  :param meta: context PID
52
54
  """
55
+ if self.tab is not None:
56
+ return self.tab.pid # get PID from tab if exists
53
57
  return self.window.core.ctx.output.get_pid(meta)
54
58
 
55
59
  def get_or_create_pid(self, meta: CtxMeta):
@@ -74,7 +78,12 @@ class Renderer(BaseRenderer):
74
78
  if pid is not None:
75
79
  self.pids[pid] = PidData(pid, meta)
76
80
 
77
- def begin(self, meta: CtxMeta, ctx: CtxItem, stream: bool = False):
81
+ def begin(
82
+ self,
83
+ meta: CtxMeta,
84
+ ctx: CtxItem,
85
+ stream: bool = False
86
+ ):
78
87
  """
79
88
  Render begin
80
89
 
@@ -84,7 +93,12 @@ class Renderer(BaseRenderer):
84
93
  """
85
94
  self.parser.reset()
86
95
 
87
- def end(self, meta: CtxMeta, ctx: CtxItem, stream: bool = False):
96
+ def end(
97
+ self,
98
+ meta: CtxMeta,
99
+ ctx: CtxItem,
100
+ stream: bool = False
101
+ ):
88
102
  """
89
103
  Render end
90
104
 
@@ -95,7 +109,12 @@ class Renderer(BaseRenderer):
95
109
  if stream:
96
110
  self.reload() # reload ctx items only if stream
97
111
 
98
- def end_extra(self, meta: CtxMeta, ctx: CtxItem, stream: bool = False):
112
+ def end_extra(
113
+ self,
114
+ meta: CtxMeta,
115
+ ctx: CtxItem,
116
+ stream: bool = False
117
+ ):
99
118
  """
100
119
  Render end extra
101
120
 
@@ -105,7 +124,11 @@ class Renderer(BaseRenderer):
105
124
  """
106
125
  self.to_end(meta)
107
126
 
108
- def stream_begin(self, meta: CtxMeta, ctx: CtxItem):
127
+ def stream_begin(
128
+ self,
129
+ meta: CtxMeta,
130
+ ctx: CtxItem
131
+ ):
109
132
  """
110
133
  Render stream begin
111
134
 
@@ -114,7 +137,11 @@ class Renderer(BaseRenderer):
114
137
  """
115
138
  pass # do nothing
116
139
 
117
- def stream_end(self, meta: CtxMeta, ctx: CtxItem):
140
+ def stream_end(
141
+ self,
142
+ meta: CtxMeta,
143
+ ctx: CtxItem
144
+ ):
118
145
  """
119
146
  Render stream end
120
147
 
@@ -123,7 +150,12 @@ class Renderer(BaseRenderer):
123
150
  """
124
151
  pass # do nothing
125
152
 
126
- def append_context(self, meta: CtxMeta, items: list, clear: bool = True):
153
+ def append_context(
154
+ self,
155
+ meta: CtxMeta,
156
+ items: List[CtxItem],
157
+ clear: bool = True
158
+ ):
127
159
  """
128
160
  Append all context to output
129
161
 
@@ -142,7 +174,13 @@ class Renderer(BaseRenderer):
142
174
  self.append_context_item(meta, ctx)
143
175
  i += 1
144
176
 
145
- def append_input(self, meta: CtxMeta, ctx: CtxItem, flush: bool = True, append: bool = False):
177
+ def append_input(
178
+ self,
179
+ meta: CtxMeta,
180
+ ctx: CtxItem,
181
+ flush: bool = True,
182
+ append: bool = False
183
+ ):
146
184
  """
147
185
  Append text input to output
148
186
 
@@ -184,7 +222,11 @@ class Renderer(BaseRenderer):
184
222
 
185
223
  self.append_raw(meta, ctx, text.strip(), "msg-user")
186
224
 
187
- def append_output(self, meta: CtxMeta, ctx: CtxItem):
225
+ def append_output(
226
+ self,
227
+ meta: CtxMeta,
228
+ ctx: CtxItem
229
+ ):
188
230
  """
189
231
  Append text output to output
190
232
 
@@ -205,7 +247,12 @@ class Renderer(BaseRenderer):
205
247
  text = "{}".format(ctx.output)
206
248
  self.append_raw(meta, ctx, text.strip(), "msg-bot")
207
249
 
208
- def append_extra(self, meta: CtxMeta, ctx: CtxItem, footer: bool = False):
250
+ def append_extra(
251
+ self,
252
+ meta: CtxMeta,
253
+ ctx: CtxItem,
254
+ footer: bool = False
255
+ ):
209
256
  """
210
257
  Append extra data (images, files, etc.) to output
211
258
 
@@ -292,7 +339,13 @@ class Renderer(BaseRenderer):
292
339
  if len(appended) > 0:
293
340
  self.to_end(meta)
294
341
 
295
- def append_chunk(self, meta: CtxMeta, ctx: CtxItem, text_chunk: str, begin: bool = False):
342
+ def append_chunk(
343
+ self,
344
+ meta: CtxMeta,
345
+ ctx: CtxItem,
346
+ text_chunk: str,
347
+ begin: bool = False
348
+ ):
296
349
  """
297
350
  Append output chunk to output
298
351
 
@@ -351,7 +404,12 @@ class Renderer(BaseRenderer):
351
404
  cursor.insertBlock(block_format)
352
405
  node.setTextCursor(cursor)
353
406
 
354
- def append_html_chunk(self, meta: CtxMeta, ctx: CtxItem, html: str):
407
+ def append_html_chunk(
408
+ self,
409
+ meta: CtxMeta,
410
+ ctx: CtxItem,
411
+ html: str
412
+ ):
355
413
  """
356
414
  Append HTML chunk to output
357
415
 
@@ -375,7 +433,13 @@ class Renderer(BaseRenderer):
375
433
  node.setTextCursor(cursor)
376
434
  node.append(html.replace("\n", "<br>"))
377
435
 
378
- def append_raw(self, meta: CtxMeta, ctx: CtxItem, text: str, type: str = "msg-bot"):
436
+ def append_raw(
437
+ self,
438
+ meta: CtxMeta,
439
+ ctx: CtxItem,
440
+ text: str,
441
+ type: str = "msg-bot"
442
+ ):
379
443
  """
380
444
  Append and format raw text to output
381
445
 
@@ -400,7 +464,11 @@ class Renderer(BaseRenderer):
400
464
  self.get_output_node(meta).append(text)
401
465
  self.to_end(meta)
402
466
 
403
- def append_chunk_start(self, meta: CtxMeta, ctx: CtxItem):
467
+ def append_chunk_start(
468
+ self,
469
+ meta: CtxMeta,
470
+ ctx: CtxItem
471
+ ):
404
472
  """
405
473
  Append start of chunk to output
406
474
 
@@ -412,7 +480,11 @@ class Renderer(BaseRenderer):
412
480
  cursor.movePosition(QTextCursor.End)
413
481
  node.setTextCursor(cursor)
414
482
 
415
- def append_context_item(self, meta: CtxMeta, ctx: CtxItem):
483
+ def append_context_item(
484
+ self,
485
+ meta: CtxMeta,
486
+ ctx: CtxItem
487
+ ):
416
488
  """
417
489
  Append context item to output
418
490
 
@@ -423,7 +495,13 @@ class Renderer(BaseRenderer):
423
495
  self.append_output(meta, ctx)
424
496
  self.append_extra(meta, ctx, footer=True)
425
497
 
426
- def append(self, meta: CtxMeta, ctx: CtxItem, text: str, end: str = "\n"):
498
+ def append(
499
+ self,
500
+ meta: CtxMeta,
501
+ ctx: CtxItem,
502
+ text: str,
503
+ end: str = "\n"
504
+ ):
427
505
  """
428
506
  Append text to output
429
507
 
@@ -443,7 +521,12 @@ class Renderer(BaseRenderer):
443
521
  cur.insertHtml("<br>")
444
522
  node.setTextCursor(cur) # Update visible cursor
445
523
 
446
- def append_timestamp(self, ctx: CtxItem, text: str, type: str = None) -> str:
524
+ def append_timestamp(
525
+ self,
526
+ ctx: CtxItem,
527
+ text: str,
528
+ type: Optional[str] = None
529
+ ) -> str:
447
530
  """
448
531
  Append timestamp to text
449
532
 
@@ -465,8 +548,15 @@ class Renderer(BaseRenderer):
465
548
  text = '<span class="ts">{}:</span> {}'.format(hour, text)
466
549
  return text
467
550
 
468
- def reset(self, meta: CtxMeta = None):
469
- """Reset"""
551
+ def reset(
552
+ self,
553
+ meta: Optional[CtxMeta] = None
554
+ ):
555
+ """
556
+ Reset
557
+
558
+ :param meta: context meta
559
+ """
470
560
  pid = self.get_or_create_pid(meta)
471
561
  if pid is not None:
472
562
  self.pids[pid].images_appended = []
@@ -478,8 +568,15 @@ class Renderer(BaseRenderer):
478
568
  """
479
569
  self.window.controller.ctx.refresh_output() # if clear all and appends all items again
480
570
 
481
- def clear_output(self, meta: CtxMeta = None):
482
- """Clear output"""
571
+ def clear_output(
572
+ self,
573
+ meta: Optional[CtxMeta] = None
574
+ ):
575
+ """
576
+ Clear output
577
+
578
+ :param meta: context meta
579
+ """
483
580
  self.reset(meta)
484
581
  self.get_output_node(meta).clear()
485
582
 
@@ -510,7 +607,7 @@ class Renderer(BaseRenderer):
510
607
  """
511
608
  Get output node
512
609
 
513
- :param meta: context meta
610
+ :param meta: context meta
514
611
  :return: output node
515
612
  """
516
613
  return self.window.core.ctx.output.get_current(meta)
@@ -6,9 +6,11 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.05 23:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Optional, List, Dict
13
+
12
14
  from pygpt_net.utils import trans
13
15
 
14
16
 
@@ -22,7 +24,12 @@ class Body:
22
24
  """
23
25
  self.window = window
24
26
 
25
- def get_image_html(self, url: str, num: int = None, num_all: int = None) -> str:
27
+ def get_image_html(
28
+ self,
29
+ url: str,
30
+ num: Optional[int] = None,
31
+ num_all: Optional[int] = None
32
+ ) -> str:
26
33
  """
27
34
  Get image HTML
28
35
 
@@ -40,7 +47,12 @@ class Body:
40
47
  path=path,
41
48
  num=num_str)
42
49
 
43
- def get_url_html(self, url: str, num: int = None, num_all: int = None) -> str:
50
+ def get_url_html(
51
+ self,
52
+ url: str,
53
+ num: Optional[int] = None,
54
+ num_all: Optional[int] = None
55
+ ) -> str:
44
56
  """
45
57
  Get URL HTML
46
58
 
@@ -57,7 +69,7 @@ class Body:
57
69
  url=url,
58
70
  num=num_str)
59
71
 
60
- def get_docs_html(self, docs: list) -> str:
72
+ def get_docs_html(self, docs: List[Dict]) -> str:
61
73
  """
62
74
  Get Llama-index doc metadata HTML
63
75
 
@@ -94,7 +106,12 @@ class Body:
94
106
  html += html_sources
95
107
  return html
96
108
 
97
- def get_file_html(self, url: str, num: int = None, num_all: int = None) -> str:
109
+ def get_file_html(
110
+ self,
111
+ url: str,
112
+ num: Optional[int] = None,
113
+ num_all: Optional[int] = None
114
+ ) -> str:
98
115
  """
99
116
  Get file HTML
100
117