pygpt-net 2.4.37__py3-none-any.whl → 2.4.41__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 (255) hide show
  1. CHANGELOG.md +29 -0
  2. README.md +44 -115
  3. pygpt_net/CHANGELOG.txt +29 -0
  4. pygpt_net/__init__.py +3 -3
  5. pygpt_net/controller/__init__.py +7 -3
  6. pygpt_net/controller/access/control.py +1 -1
  7. pygpt_net/controller/access/voice.py +11 -5
  8. pygpt_net/controller/agent/experts.py +11 -6
  9. pygpt_net/controller/agent/legacy.py +8 -6
  10. pygpt_net/controller/agent/llama.py +4 -2
  11. pygpt_net/controller/assistant/__init__.py +9 -4
  12. pygpt_net/controller/assistant/batch.py +38 -21
  13. pygpt_net/controller/assistant/editor.py +7 -6
  14. pygpt_net/controller/assistant/files.py +23 -7
  15. pygpt_net/controller/assistant/store.py +20 -7
  16. pygpt_net/controller/assistant/threads.py +34 -8
  17. pygpt_net/controller/attachment.py +29 -10
  18. pygpt_net/controller/audio/__init__.py +25 -4
  19. pygpt_net/controller/calendar/__init__.py +23 -4
  20. pygpt_net/controller/calendar/note.py +57 -11
  21. pygpt_net/controller/camera.py +3 -2
  22. pygpt_net/controller/chat/__init__.py +5 -3
  23. pygpt_net/controller/chat/attachment.py +34 -7
  24. pygpt_net/controller/chat/command.py +4 -2
  25. pygpt_net/controller/chat/common.py +11 -4
  26. pygpt_net/controller/chat/files.py +10 -3
  27. pygpt_net/controller/chat/image.py +17 -5
  28. pygpt_net/controller/chat/input.py +10 -7
  29. pygpt_net/controller/chat/output.py +21 -6
  30. pygpt_net/controller/chat/render.py +100 -21
  31. pygpt_net/controller/chat/response.py +34 -7
  32. pygpt_net/controller/chat/stream.py +4 -2
  33. pygpt_net/controller/chat/text.py +6 -4
  34. pygpt_net/controller/command.py +11 -3
  35. pygpt_net/controller/config/__init__.py +34 -6
  36. pygpt_net/controller/config/field/checkbox.py +7 -4
  37. pygpt_net/controller/config/field/cmd.py +7 -5
  38. pygpt_net/controller/config/field/combo.py +14 -6
  39. pygpt_net/controller/config/field/dictionary.py +14 -11
  40. pygpt_net/controller/config/field/input.py +9 -6
  41. pygpt_net/controller/config/field/slider.py +11 -8
  42. pygpt_net/controller/config/field/textarea.py +8 -5
  43. pygpt_net/controller/config/placeholder.py +52 -21
  44. pygpt_net/controller/ctx/__init__.py +138 -49
  45. pygpt_net/controller/ctx/common.py +15 -4
  46. pygpt_net/controller/ctx/extra.py +11 -3
  47. pygpt_net/controller/ctx/summarizer.py +24 -5
  48. pygpt_net/controller/debug/__init__.py +27 -6
  49. pygpt_net/controller/dialogs/confirm.py +34 -7
  50. pygpt_net/controller/dialogs/debug.py +4 -2
  51. pygpt_net/controller/dialogs/info.py +7 -2
  52. pygpt_net/controller/files.py +48 -10
  53. pygpt_net/controller/finder.py +11 -5
  54. pygpt_net/controller/idx/__init__.py +10 -3
  55. pygpt_net/controller/idx/common.py +4 -2
  56. pygpt_net/controller/idx/indexer.py +25 -17
  57. pygpt_net/controller/idx/settings.py +9 -3
  58. pygpt_net/controller/kernel/__init__.py +34 -8
  59. pygpt_net/controller/kernel/reply.py +12 -3
  60. pygpt_net/controller/kernel/stack.py +5 -3
  61. pygpt_net/controller/lang/custom.py +2 -7
  62. pygpt_net/controller/lang/mapping.py +5 -3
  63. pygpt_net/controller/layout.py +2 -2
  64. pygpt_net/controller/mode.py +16 -4
  65. pygpt_net/controller/model/__init__.py +14 -3
  66. pygpt_net/controller/model/editor.py +8 -3
  67. pygpt_net/controller/notepad.py +26 -12
  68. pygpt_net/controller/painter/capture.py +23 -4
  69. pygpt_net/controller/painter/common.py +9 -7
  70. pygpt_net/controller/plugins/__init__.py +19 -5
  71. pygpt_net/controller/plugins/presets.py +15 -6
  72. pygpt_net/controller/plugins/settings.py +9 -3
  73. pygpt_net/controller/presets/__init__.py +55 -16
  74. pygpt_net/controller/presets/editor.py +26 -10
  75. pygpt_net/controller/settings/__init__.py +3 -2
  76. pygpt_net/controller/settings/editor.py +29 -7
  77. pygpt_net/controller/settings/profile.py +22 -5
  78. pygpt_net/controller/theme/__init__.py +54 -12
  79. pygpt_net/controller/theme/common.py +24 -2
  80. pygpt_net/controller/theme/markdown.py +32 -16
  81. pygpt_net/controller/theme/menu.py +26 -5
  82. pygpt_net/controller/theme/nodes.py +2 -5
  83. pygpt_net/controller/tools/__init__.py +40 -2
  84. pygpt_net/controller/ui/__init__.py +4 -6
  85. pygpt_net/controller/ui/tabs.py +363 -65
  86. pygpt_net/core/access/actions.py +6 -4
  87. pygpt_net/core/access/shortcuts.py +4 -3
  88. pygpt_net/core/access/voice.py +6 -5
  89. pygpt_net/core/agents/legacy.py +4 -2
  90. pygpt_net/core/agents/memory.py +7 -2
  91. pygpt_net/core/agents/observer/evaluation.py +15 -7
  92. pygpt_net/core/agents/provider.py +9 -4
  93. pygpt_net/core/agents/runner.py +61 -15
  94. pygpt_net/core/agents/tools.py +23 -5
  95. pygpt_net/core/assistants/__init__.py +6 -4
  96. pygpt_net/core/assistants/files.py +35 -12
  97. pygpt_net/core/assistants/store.py +20 -10
  98. pygpt_net/core/attachments/__init__.py +54 -15
  99. pygpt_net/core/attachments/context.py +92 -29
  100. pygpt_net/core/audio/__init__.py +71 -3
  101. pygpt_net/core/audio/context.py +7 -2
  102. pygpt_net/core/bridge/__init__.py +22 -6
  103. pygpt_net/core/bridge/context.py +5 -3
  104. pygpt_net/core/calendar/__init__.py +57 -11
  105. pygpt_net/core/chain/__init__.py +8 -2
  106. pygpt_net/core/chain/chat.py +10 -8
  107. pygpt_net/core/chain/completion.py +10 -7
  108. pygpt_net/core/command.py +62 -17
  109. pygpt_net/core/ctx/__init__.py +260 -58
  110. pygpt_net/core/ctx/bag.py +25 -4
  111. pygpt_net/core/ctx/container.py +28 -17
  112. pygpt_net/core/ctx/idx.py +45 -8
  113. pygpt_net/core/ctx/output.py +95 -74
  114. pygpt_net/core/ctx/reply.py +5 -2
  115. pygpt_net/core/db/__init__.py +8 -7
  116. pygpt_net/core/db/viewer.py +17 -11
  117. pygpt_net/core/debug/__init__.py +10 -9
  118. pygpt_net/core/debug/tabs.py +5 -2
  119. pygpt_net/core/docker/__init__.py +11 -5
  120. pygpt_net/core/docker/builder.py +11 -3
  121. pygpt_net/core/events/app.py +5 -3
  122. pygpt_net/core/events/base.py +11 -5
  123. pygpt_net/core/events/control.py +5 -3
  124. pygpt_net/core/events/event.py +17 -7
  125. pygpt_net/core/events/kernel.py +5 -3
  126. pygpt_net/core/events/render.py +5 -3
  127. pygpt_net/core/experts/__init__.py +5 -4
  128. pygpt_net/core/filesystem/__init__.py +52 -34
  129. pygpt_net/core/filesystem/actions.py +8 -5
  130. pygpt_net/core/filesystem/editor.py +13 -3
  131. pygpt_net/core/filesystem/types.py +12 -7
  132. pygpt_net/core/filesystem/url.py +7 -3
  133. pygpt_net/core/idx/__init__.py +34 -25
  134. pygpt_net/core/idx/chat.py +40 -16
  135. pygpt_net/core/idx/context.py +6 -2
  136. pygpt_net/core/idx/indexing.py +84 -35
  137. pygpt_net/core/idx/llm.py +11 -3
  138. pygpt_net/core/idx/metadata.py +13 -3
  139. pygpt_net/core/idx/types/ctx.py +32 -6
  140. pygpt_net/core/idx/types/external.py +41 -7
  141. pygpt_net/core/idx/types/files.py +31 -6
  142. pygpt_net/core/image.py +15 -4
  143. pygpt_net/core/llm/__init__.py +13 -3
  144. pygpt_net/core/locale.py +34 -8
  145. pygpt_net/core/models.py +4 -3
  146. pygpt_net/core/notepad.py +9 -4
  147. pygpt_net/core/plugins.py +7 -6
  148. pygpt_net/core/presets.py +19 -10
  149. pygpt_net/core/profile.py +12 -6
  150. pygpt_net/core/prompt/__init__.py +10 -3
  151. pygpt_net/core/prompt/custom.py +7 -6
  152. pygpt_net/core/prompt/template.py +9 -3
  153. pygpt_net/core/render/base.py +117 -22
  154. pygpt_net/core/render/markdown/body.py +27 -7
  155. pygpt_net/core/render/markdown/renderer.py +119 -22
  156. pygpt_net/core/render/plain/body.py +22 -5
  157. pygpt_net/core/render/plain/renderer.py +97 -21
  158. pygpt_net/core/render/web/body.py +75 -25
  159. pygpt_net/core/render/web/renderer.py +313 -63
  160. pygpt_net/core/settings.py +9 -4
  161. pygpt_net/core/tabs/__init__.py +290 -103
  162. pygpt_net/core/tabs/tab.py +17 -4
  163. pygpt_net/core/tokens.py +44 -11
  164. pygpt_net/core/updater/__init__.py +20 -7
  165. pygpt_net/core/vision/analyzer.py +29 -6
  166. pygpt_net/core/web.py +130 -2
  167. pygpt_net/data/config/config.json +15 -4
  168. pygpt_net/data/config/models.json +3 -3
  169. pygpt_net/data/config/modes.json +3 -3
  170. pygpt_net/data/config/settings.json +55 -10
  171. pygpt_net/data/config/settings_section.json +3 -0
  172. pygpt_net/data/css/style.light.css +1 -0
  173. pygpt_net/data/css/{web.css → web-blocks.css} +162 -133
  174. pygpt_net/data/css/{web.light.css → web-blocks.light.css} +7 -0
  175. pygpt_net/data/css/web-chatgpt.css +350 -0
  176. pygpt_net/data/css/web-chatgpt.dark.css +64 -0
  177. pygpt_net/data/css/web-chatgpt.light.css +75 -0
  178. pygpt_net/data/css/web-chatgpt_wide.css +350 -0
  179. pygpt_net/data/css/web-chatgpt_wide.dark.css +64 -0
  180. pygpt_net/data/css/web-chatgpt_wide.light.css +75 -0
  181. pygpt_net/data/icons/split_screen.svg +1 -0
  182. pygpt_net/data/locale/locale.de.ini +12 -0
  183. pygpt_net/data/locale/locale.en.ini +17 -2
  184. pygpt_net/data/locale/locale.es.ini +12 -0
  185. pygpt_net/data/locale/locale.fr.ini +12 -0
  186. pygpt_net/data/locale/locale.it.ini +12 -0
  187. pygpt_net/data/locale/locale.pl.ini +12 -0
  188. pygpt_net/data/locale/locale.uk.ini +12 -0
  189. pygpt_net/data/locale/locale.zh.ini +12 -0
  190. pygpt_net/data/locale/plugin.cmd_web.de.ini +2 -0
  191. pygpt_net/data/locale/plugin.cmd_web.en.ini +20 -10
  192. pygpt_net/data/locale/plugin.cmd_web.es.ini +2 -0
  193. pygpt_net/data/locale/plugin.cmd_web.fr.ini +2 -0
  194. pygpt_net/data/locale/plugin.cmd_web.it.ini +2 -0
  195. pygpt_net/data/locale/plugin.cmd_web.pl.ini +2 -0
  196. pygpt_net/data/locale/plugin.cmd_web.uk.ini +2 -0
  197. pygpt_net/data/locale/plugin.cmd_web.zh.ini +2 -0
  198. pygpt_net/icons.qrc +1 -0
  199. pygpt_net/icons_rc.py +165 -136
  200. pygpt_net/item/ctx.py +46 -24
  201. pygpt_net/plugin/audio_input/simple.py +21 -5
  202. pygpt_net/plugin/audio_output/__init__.py +4 -1
  203. pygpt_net/plugin/base/config.py +4 -2
  204. pygpt_net/plugin/base/plugin.py +26 -6
  205. pygpt_net/plugin/base/worker.py +37 -9
  206. pygpt_net/plugin/cmd_code_interpreter/__init__.py +39 -37
  207. pygpt_net/plugin/cmd_code_interpreter/runner.py +25 -12
  208. pygpt_net/plugin/cmd_web/__init__.py +46 -6
  209. pygpt_net/plugin/cmd_web/config.py +74 -48
  210. pygpt_net/plugin/cmd_web/websearch.py +61 -28
  211. pygpt_net/plugin/cmd_web/worker.py +79 -13
  212. pygpt_net/provider/core/config/patch.py +43 -1
  213. pygpt_net/provider/core/ctx/base.py +4 -1
  214. pygpt_net/provider/core/ctx/db_sqlite/__init__.py +10 -1
  215. pygpt_net/provider/core/ctx/db_sqlite/storage.py +22 -1
  216. pygpt_net/provider/gpt/assistants.py +10 -9
  217. pygpt_net/provider/gpt/audio.py +3 -2
  218. pygpt_net/provider/gpt/chat.py +8 -7
  219. pygpt_net/provider/gpt/completion.py +6 -4
  220. pygpt_net/provider/gpt/image.py +9 -2
  221. pygpt_net/provider/gpt/store.py +14 -13
  222. pygpt_net/provider/gpt/vision.py +6 -5
  223. pygpt_net/tools/__init__.py +9 -1
  224. pygpt_net/tools/base.py +15 -1
  225. pygpt_net/tools/code_interpreter/__init__.py +174 -75
  226. pygpt_net/tools/code_interpreter/ui/dialogs.py +21 -103
  227. pygpt_net/tools/code_interpreter/ui/widgets.py +284 -9
  228. pygpt_net/tools/html_canvas/__init__.py +78 -23
  229. pygpt_net/tools/html_canvas/ui/dialogs.py +46 -62
  230. pygpt_net/tools/html_canvas/ui/widgets.py +96 -3
  231. pygpt_net/ui/base/context_menu.py +2 -2
  232. pygpt_net/ui/layout/chat/input.py +10 -18
  233. pygpt_net/ui/layout/chat/output.py +26 -44
  234. pygpt_net/ui/layout/ctx/ctx_list.py +13 -4
  235. pygpt_net/ui/layout/toolbox/footer.py +18 -2
  236. pygpt_net/ui/main.py +2 -2
  237. pygpt_net/ui/menu/config.py +7 -11
  238. pygpt_net/ui/menu/debug.py +11 -1
  239. pygpt_net/ui/menu/theme.py +9 -2
  240. pygpt_net/ui/widget/filesystem/explorer.py +2 -2
  241. pygpt_net/ui/widget/lists/context.py +27 -5
  242. pygpt_net/ui/widget/tabs/Input.py +2 -2
  243. pygpt_net/ui/widget/tabs/body.py +2 -1
  244. pygpt_net/ui/widget/tabs/layout.py +195 -0
  245. pygpt_net/ui/widget/tabs/output.py +218 -55
  246. pygpt_net/ui/widget/textarea/html.py +11 -1
  247. pygpt_net/ui/widget/textarea/output.py +10 -1
  248. pygpt_net/ui/widget/textarea/search_input.py +4 -1
  249. pygpt_net/ui/widget/textarea/web.py +49 -9
  250. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/METADATA +45 -116
  251. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/RECORD +255 -247
  252. /pygpt_net/data/css/{web.dark.css → web-blocks.dark.css} +0 -0
  253. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/LICENSE +0 -0
  254. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.dist-info}/WHEEL +0 -0
  255. {pygpt_net-2.4.37.dist-info → pygpt_net-2.4.41.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.11.20 03: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 PySide6.QtCore import Slot, QTimer
13
15
 
14
16
  from pygpt_net.core.events import RenderEvent
@@ -16,6 +18,7 @@ from pygpt_net.core.render.base import BaseRenderer
16
18
  from pygpt_net.core.render.markdown.renderer import Renderer as MarkdownRenderer
17
19
  from pygpt_net.core.render.plain.renderer import Renderer as PlainTextRenderer
18
20
  from pygpt_net.core.render.web.renderer import Renderer as WebRenderer
21
+ from pygpt_net.core.tabs.tab import Tab
19
22
  from pygpt_net.core.text.utils import output_html2text, output_clean_html
20
23
  from pygpt_net.item.ctx import CtxItem, CtxMeta
21
24
 
@@ -67,6 +70,7 @@ class Render:
67
70
  append = data.get("append", False)
68
71
  footer = data.get("footer", False)
69
72
  initialized = data.get("initialized", False)
73
+ tab = data.get("tab")
70
74
 
71
75
  if name == RenderEvent.BEGIN:
72
76
  self.begin(meta, ctx, stream)
@@ -87,7 +91,7 @@ class Render:
87
91
  self.stream_end(meta, ctx)
88
92
 
89
93
  elif name == RenderEvent.ON_PAGE_LOAD:
90
- self.on_page_loaded(meta)
94
+ self.on_page_loaded(meta, tab)
91
95
  elif name ==RenderEvent.ON_THEME_CHANGE:
92
96
  self.on_theme_change()
93
97
  elif name == RenderEvent.ON_LOAD:
@@ -148,7 +152,12 @@ class Render:
148
152
  """
149
153
  return self.instance().get_pid(meta)
150
154
 
151
- def begin(self, meta: CtxMeta, ctx: CtxItem, stream: bool = False):
155
+ def begin(
156
+ self,
157
+ meta: CtxMeta,
158
+ ctx: CtxItem,
159
+ stream: bool = False
160
+ ):
152
161
  """
153
162
  Render begin
154
163
 
@@ -159,7 +168,12 @@ class Render:
159
168
  self.instance().begin(meta, ctx, stream)
160
169
  self.update()
161
170
 
162
- def end(self, meta: CtxMeta, ctx: CtxItem, stream: bool = False):
171
+ def end(
172
+ self,
173
+ meta: CtxMeta,
174
+ ctx: CtxItem,
175
+ stream: bool = False
176
+ ):
163
177
  """
164
178
  Render end
165
179
 
@@ -170,7 +184,12 @@ class Render:
170
184
  self.instance().end(meta, ctx, stream)
171
185
  self.update()
172
186
 
173
- def end_extra(self, meta: CtxMeta, ctx: CtxItem, stream: bool = False):
187
+ def end_extra(
188
+ self,
189
+ meta: CtxMeta,
190
+ ctx: CtxItem,
191
+ stream: bool = False
192
+ ):
174
193
  """
175
194
  Render end extra
176
195
 
@@ -181,7 +200,11 @@ class Render:
181
200
  self.instance().end_extra(meta, ctx, stream)
182
201
  self.update()
183
202
 
184
- def stream_begin(self, meta: CtxMeta, ctx: CtxItem):
203
+ def stream_begin(
204
+ self,
205
+ meta: CtxMeta,
206
+ ctx: CtxItem
207
+ ):
185
208
  """
186
209
  Render stream begin
187
210
 
@@ -191,7 +214,11 @@ class Render:
191
214
  self.instance().stream_begin(meta, ctx)
192
215
  self.update()
193
216
 
194
- def stream_end(self, meta: CtxMeta, ctx: CtxItem):
217
+ def stream_end(
218
+ self,
219
+ meta: CtxMeta,
220
+ ctx: CtxItem
221
+ ):
195
222
  """
196
223
  Render stream end
197
224
 
@@ -201,7 +228,10 @@ class Render:
201
228
  self.instance().stream_end(meta, ctx)
202
229
  self.update()
203
230
 
204
- def clear_output(self, meta: CtxMeta = None):
231
+ def clear_output(
232
+ self,
233
+ meta: Optional[CtxMeta] = None
234
+ ):
205
235
  """
206
236
  Clear current active output
207
237
 
@@ -214,7 +244,10 @@ class Render:
214
244
  """Clear input"""
215
245
  self.instance().clear_input()
216
246
 
217
- def on_load(self, meta: CtxMeta = None):
247
+ def on_load(
248
+ self,
249
+ meta: Optional[CtxMeta] = None
250
+ ):
218
251
  """
219
252
  On load (meta)
220
253
 
@@ -224,7 +257,10 @@ class Render:
224
257
  self.update()
225
258
  self.window.controller.ui.tabs.update_tooltip(meta.name) # update tab tooltip
226
259
 
227
- def reset(self, meta: CtxMeta = None):
260
+ def reset(
261
+ self,
262
+ meta: Optional[CtxMeta] = None
263
+ ):
228
264
  """
229
265
  Reset current meta
230
266
 
@@ -238,7 +274,12 @@ class Render:
238
274
  self.instance().reload() # TODO: or all outputs?
239
275
  self.update()
240
276
 
241
- def append_context(self, meta: CtxMeta, items: list, clear: bool = True):
277
+ def append_context(
278
+ self,
279
+ meta: CtxMeta,
280
+ items: List[CtxItem],
281
+ clear: bool = True
282
+ ):
242
283
  """
243
284
  Append all context to output
244
285
 
@@ -249,7 +290,13 @@ class Render:
249
290
  self.instance().append_context(meta, items, clear)
250
291
  self.update()
251
292
 
252
- def append_input(self, meta: CtxMeta, ctx: CtxItem, flush: bool = True, append: bool = False):
293
+ def append_input(
294
+ self,
295
+ meta: CtxMeta,
296
+ ctx: CtxItem,
297
+ flush: bool = True,
298
+ append: bool = False
299
+ ):
253
300
  """
254
301
  Append text input to output
255
302
 
@@ -261,7 +308,11 @@ class Render:
261
308
  self.instance().append_input(meta, ctx, flush=flush, append=append)
262
309
  self.update()
263
310
 
264
- def append_output(self, meta: CtxMeta, ctx: CtxItem):
311
+ def append_output(
312
+ self,
313
+ meta: CtxMeta,
314
+ ctx: CtxItem
315
+ ):
265
316
  """
266
317
  Append text output to output
267
318
 
@@ -271,7 +322,12 @@ class Render:
271
322
  self.instance().append_output(meta, ctx)
272
323
  self.update()
273
324
 
274
- def append_extra(self, meta: CtxMeta, ctx: CtxItem, footer: bool = False):
325
+ def append_extra(
326
+ self,
327
+ meta: CtxMeta,
328
+ ctx: CtxItem,
329
+ footer: bool = False
330
+ ):
275
331
  """
276
332
  Append extra data (images, files, etc.) to output
277
333
 
@@ -282,7 +338,13 @@ class Render:
282
338
  self.instance().append_extra(meta, ctx, footer)
283
339
  self.update()
284
340
 
285
- def append_chunk(self, meta: CtxMeta, ctx: CtxItem, text_chunk: str, begin: bool = False):
341
+ def append_chunk(
342
+ self,
343
+ meta: CtxMeta,
344
+ ctx: CtxItem,
345
+ text_chunk: str,
346
+ begin: bool = False
347
+ ):
286
348
  """
287
349
  Append output stream chunk to output
288
350
 
@@ -375,13 +437,18 @@ class Render:
375
437
  self.instance().on_reply_submit(ctx)
376
438
  self.update()
377
439
 
378
- def on_page_loaded(self, meta: CtxMeta):
440
+ def on_page_loaded(
441
+ self,
442
+ meta: CtxMeta,
443
+ tab: Optional[Tab] = None
444
+ ):
379
445
  """
380
446
  On page loaded callback
381
447
 
382
448
  :param meta: context meta
449
+ :param tab: Tab
383
450
  """
384
- self.instance().on_page_loaded(meta) # TODO: send ID with callback
451
+ self.instance().on_page_loaded(meta, tab)
385
452
  self.update()
386
453
 
387
454
  def on_theme_change(self):
@@ -428,7 +495,11 @@ class Render:
428
495
  self.instance().clear_all()
429
496
  self.update()
430
497
 
431
- def tool_output_append(self, meta: CtxMeta, content: str):
498
+ def tool_output_append(
499
+ self,
500
+ meta: CtxMeta,
501
+ content: str
502
+ ):
432
503
  """
433
504
  Add tool output (append)
434
505
 
@@ -438,7 +509,11 @@ class Render:
438
509
  self.instance().tool_output_append(meta, content)
439
510
  self.update()
440
511
 
441
- def tool_output_update(self, meta: CtxMeta, content: str):
512
+ def tool_output_update(
513
+ self,
514
+ meta: CtxMeta,
515
+ content: str
516
+ ):
442
517
  """
443
518
  Replace tool output
444
519
 
@@ -491,7 +566,7 @@ class Render:
491
566
  if plain:
492
567
  self.window.controller.theme.markdown.clear()
493
568
  for pid in self.window.ui.nodes['output_plain']:
494
- if self.window.ui.nodes['output'][pid] is not None:
569
+ if self.window.ui.nodes['output_plain'][pid] is not None:
495
570
  self.window.ui.nodes['output'][pid].setVisible(False)
496
571
  self.window.ui.nodes['output_plain'][pid].setVisible(True)
497
572
  else:
@@ -518,7 +593,11 @@ class Render:
518
593
  return self.markdown_renderer
519
594
 
520
595
  @Slot(str, str)
521
- def handle_save_as(self, text: str, type: str = 'txt'):
596
+ def handle_save_as(
597
+ self,
598
+ text: str,
599
+ type: str = 'txt'
600
+ ):
522
601
  """
523
602
  Handle save as signal # TODO: move to another class
524
603
 
@@ -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 Dict, Any
13
+
12
14
  from pygpt_net.core.types import (
13
15
  MODE_AGENT_LLAMA,
14
16
  MODE_ASSISTANT,
@@ -29,7 +31,12 @@ class Response:
29
31
  super(Response, self).__init__()
30
32
  self.window = window
31
33
 
32
- def handle(self, context: BridgeContext, extra: dict, status: bool):
34
+ def handle(
35
+ self,
36
+ context: BridgeContext,
37
+ extra: Dict[str, Any],
38
+ status: bool
39
+ ):
33
40
  """
34
41
  Handle Bridge success
35
42
 
@@ -92,7 +99,11 @@ class Response:
92
99
  self.window.controller.chat.output.post_handle(ctx, mode, stream, reply, internal)
93
100
  self.window.controller.chat.output.handle_end(ctx, mode) # handle end.
94
101
 
95
- def begin(self, context: BridgeContext, extra: dict):
102
+ def begin(
103
+ self,
104
+ context: BridgeContext,
105
+ extra: Dict[str, Any]
106
+ ):
96
107
  """
97
108
  Handle Bridge begin
98
109
 
@@ -104,7 +115,11 @@ class Response:
104
115
  if msg:
105
116
  self.window.update_status(msg)
106
117
 
107
- def append(self, context: BridgeContext, extra: dict):
118
+ def append(
119
+ self,
120
+ context: BridgeContext,
121
+ extra: Dict[str, Any]
122
+ ):
108
123
  """
109
124
  Handle Bridge append (agent mode)
110
125
 
@@ -204,7 +219,11 @@ class Response:
204
219
  if ctx.extra is not None and (type(ctx.extra) == dict and "agent_finish" in ctx.extra):
205
220
  self.window.controller.agent.llama.on_finish(ctx) # evaluate response and continue if needed
206
221
 
207
- def end(self, context: BridgeContext, extra: dict):
222
+ def end(
223
+ self,
224
+ context: BridgeContext,
225
+ extra: Dict[str, Any]
226
+ ):
208
227
  """
209
228
  Handle Bridge end
210
229
 
@@ -223,7 +242,11 @@ class Response:
223
242
  "id": "chat",
224
243
  }))
225
244
 
226
- def failed(self, context: BridgeContext, extra: dict):
245
+ def failed(
246
+ self,
247
+ context: BridgeContext,
248
+ extra: Dict[str, Any]
249
+ ):
227
250
  """
228
251
  Handle Bridge failed
229
252
 
@@ -240,7 +263,11 @@ class Response:
240
263
  "id": "chat",
241
264
  }))
242
265
 
243
- def update_status(self, context: BridgeContext, extra: dict):
266
+ def update_status(
267
+ self,
268
+ context: BridgeContext,
269
+ extra: Dict[str, Any]
270
+ ):
244
271
  """
245
272
  Handle Bridge evaluate
246
273
 
@@ -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.20 21:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Any
13
+
12
14
  from PySide6.QtWidgets import QApplication
13
15
 
14
16
  from pygpt_net.core.events import RenderEvent
@@ -175,7 +177,7 @@ class Stream:
175
177
  # log
176
178
  self.log("[chat] Stream end.")
177
179
 
178
- def log(self, data: any):
180
+ def log(self, data: Any):
179
181
  """
180
182
  Log data to debug
181
183
 
@@ -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 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Optional
13
+
12
14
  from pygpt_net.core.types import (
13
15
  MODE_AGENT,
14
16
  MODE_AGENT_LLAMA,
@@ -37,9 +39,9 @@ class Text:
37
39
  text: str,
38
40
  reply: bool = False,
39
41
  internal: bool = False,
40
- prev_ctx: CtxItem = None,
41
- parent_id: str = None,
42
- multimodal_ctx: MultimodalContext = None,
42
+ prev_ctx: Optional[CtxItem] = None,
43
+ parent_id: Optional[str] = None,
44
+ multimodal_ctx: Optional[MultimodalContext] = None,
43
45
  ) -> CtxItem:
44
46
  """
45
47
  Send text message
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.20 21:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -27,7 +27,10 @@ class Command:
27
27
  """
28
28
  self.window = window
29
29
  self.stop = False
30
- self.flush_events = [Event.CMD_EXECUTE, Event.CMD_INLINE]
30
+ self.flush_events = [
31
+ Event.CMD_EXECUTE,
32
+ Event.CMD_INLINE,
33
+ ]
31
34
 
32
35
  def dispatch(self, event: Event, all: bool = False):
33
36
  """
@@ -88,7 +91,12 @@ class Command:
88
91
  worker.kwargs['finished_signal'] = worker.signals.finished
89
92
  self.window.threadpool.start(worker)
90
93
 
91
- def worker(self, event: Event, window, finished_signal: Signal):
94
+ def worker(
95
+ self,
96
+ event: Event,
97
+ window,
98
+ finished_signal: Signal
99
+ ):
92
100
  """
93
101
  Command worker callback
94
102
 
@@ -6,9 +6,11 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.04.26 23:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Any, Dict
13
+
12
14
  from .field.checkbox import Checkbox
13
15
  from .field.combo import Combo
14
16
  from .field.cmd import Cmd
@@ -36,7 +38,11 @@ class Config:
36
38
  self.slider = Slider(window)
37
39
  self.textarea = Textarea(window)
38
40
 
39
- def load_options(self, parent_id: str, options: dict):
41
+ def load_options(
42
+ self,
43
+ parent_id: str,
44
+ options: Dict[str, Dict[str, Any]]
45
+ ):
40
46
  """
41
47
  Load options
42
48
 
@@ -47,7 +53,12 @@ class Config:
47
53
  option = options[key]
48
54
  self.apply(parent_id, key, option)
49
55
 
50
- def apply(self, parent_id: str, key: str, option: dict):
56
+ def apply(
57
+ self,
58
+ parent_id: str,
59
+ key: str,
60
+ option: Dict[str, Any]
61
+ ):
51
62
  """
52
63
  Apply option to field handler based on type
53
64
 
@@ -73,7 +84,13 @@ class Config:
73
84
  elif option['type'] == 'cmd':
74
85
  self.cmd.apply(parent_id, key, option)
75
86
 
76
- def apply_value(self, parent_id: str, key: str, option: dict, value):
87
+ def apply_value(
88
+ self,
89
+ parent_id: str,
90
+ key: str,
91
+ option: Dict[str, Any],
92
+ value: Any
93
+ ):
77
94
  """
78
95
  Apply value to option
79
96
 
@@ -85,7 +102,13 @@ class Config:
85
102
  option['value'] = value
86
103
  self.apply(parent_id, key, option)
87
104
 
88
- def get_value(self, parent_id: str, key: str, option: dict, idx: bool = False) -> any:
105
+ def get_value(
106
+ self,
107
+ parent_id: str,
108
+ key: str,
109
+ option: Dict[str, Any],
110
+ idx: bool = False
111
+ ) -> Any:
89
112
  """
90
113
  Get value from field handler based on type
91
114
 
@@ -113,7 +136,12 @@ class Config:
113
136
  elif option['type'] == 'cmd':
114
137
  return self.cmd.get_value(parent_id, key, option)
115
138
 
116
- def update_combo(self, parent_id: str, key: str, items: dict):
139
+ def update_combo(
140
+ self,
141
+ parent_id: str,
142
+ key: str,
143
+ items: Dict[str, str]
144
+ ):
117
145
  """
118
146
  Update combo items
119
147
 
@@ -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.01.30 20:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Any, Dict
13
+
14
+
12
15
  class Checkbox:
13
16
  def __init__(self, window=None):
14
17
  """
@@ -22,7 +25,7 @@ class Checkbox:
22
25
  self,
23
26
  parent_id: str,
24
27
  key: str,
25
- option: dict
28
+ option: Dict[str, Any]
26
29
  ):
27
30
  """
28
31
  Apply value to checkbox
@@ -42,7 +45,7 @@ class Checkbox:
42
45
  parent_id: str,
43
46
  key: str,
44
47
  option: dict,
45
- value: any,
48
+ value: Any,
46
49
  hooks: bool = True
47
50
  ):
48
51
  """
@@ -68,7 +71,7 @@ class Checkbox:
68
71
  self,
69
72
  parent_id: str,
70
73
  key: str,
71
- option: dict
74
+ option: Dict[str, Any]
72
75
  ) -> bool:
73
76
  """
74
77
  Get checkbox value
@@ -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.03.12 06: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.utils import trans
13
15
 
14
16
 
@@ -25,7 +27,7 @@ class Cmd:
25
27
  self,
26
28
  parent_id: str,
27
29
  key: str,
28
- option: dict
30
+ option: Dict[str, Any]
29
31
  ):
30
32
  """
31
33
  Apply values to command fields
@@ -57,7 +59,7 @@ class Cmd:
57
59
  self,
58
60
  parent_id: str,
59
61
  key: str,
60
- values: dict,
62
+ values: Dict[str, Any],
61
63
  idx: int
62
64
  ):
63
65
  """
@@ -77,7 +79,7 @@ class Cmd:
77
79
  self,
78
80
  parent_id: str,
79
81
  key: str,
80
- option: dict
82
+ option: Dict[str, Any]
81
83
  ) -> dict:
82
84
  """
83
85
  Get command values
@@ -97,7 +99,7 @@ class Cmd:
97
99
  def to_options(
98
100
  self,
99
101
  parent_id: str,
100
- option: dict
102
+ option: Dict[str, Any]
101
103
  ) -> dict:
102
104
  """
103
105
  Convert dictionary items option to options
@@ -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.04.26 23:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Any, Dict
13
+
14
+
12
15
  class Combo:
13
16
  def __init__(self, window=None):
14
17
  """
@@ -22,7 +25,7 @@ class Combo:
22
25
  self,
23
26
  parent_id: str,
24
27
  key: str,
25
- option: dict
28
+ option: Dict[str, Any]
26
29
  ):
27
30
  """
28
31
  Apply value to combobox
@@ -44,8 +47,8 @@ class Combo:
44
47
  self,
45
48
  parent_id: str,
46
49
  key: str,
47
- option: dict,
48
- value: any,
50
+ option: Dict[str, Any],
51
+ value: Any,
49
52
  hooks: bool = True
50
53
  ):
51
54
  """
@@ -71,7 +74,7 @@ class Combo:
71
74
  self,
72
75
  parent_id: str,
73
76
  key: str,
74
- option: dict,
77
+ option: Dict[str, Any],
75
78
  idx: bool = False
76
79
  ) -> str or int:
77
80
  """
@@ -88,7 +91,12 @@ class Combo:
88
91
  else:
89
92
  return self.window.ui.config[parent_id][key].combo.currentData()
90
93
 
91
- def update_list(self, parent_id: str, key: str, items: dict):
94
+ def update_list(
95
+ self,
96
+ parent_id: str,
97
+ key: str,
98
+ items: Dict[str, str]
99
+ ):
92
100
  """
93
101
  Update combobox items
94
102