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.05 23:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Optional
13
+
12
14
  from pygpt_net.core.tabs.tab import Tab
13
15
 
14
16
  from .note import Note
@@ -48,6 +50,8 @@ class Calendar:
48
50
 
49
51
  :param all: reload all notes
50
52
  """
53
+ if not self.is_loaded():
54
+ return
51
55
  year = self.window.ui.calendar['select'].currentYear
52
56
  month = self.window.ui.calendar['select'].currentMonth
53
57
  self.on_page_changed(year, month, all=all) # load notes for current month
@@ -77,7 +81,12 @@ class Calendar:
77
81
  month = self.window.ui.calendar['select'].currentMonth
78
82
  self.window.core.calendar.load_by_month(year, month)
79
83
 
80
- def on_page_changed(self, year: int, month: int, all: bool = True):
84
+ def on_page_changed(
85
+ self,
86
+ year: int,
87
+ month: int,
88
+ all: bool = True
89
+ ):
81
90
  """
82
91
  On calendar page changed
83
92
 
@@ -90,7 +99,12 @@ class Calendar:
90
99
  self.note.refresh_ctx(year, month)
91
100
  self.note.refresh_num(year, month)
92
101
 
93
- def on_day_select(self, year: int, month: int, day: int):
102
+ def on_day_select(
103
+ self,
104
+ year: int,
105
+ month: int,
106
+ day: int
107
+ ):
94
108
  """
95
109
  On day select
96
110
 
@@ -104,7 +118,12 @@ class Calendar:
104
118
  self.note.update_content(year, month, day)
105
119
  self.note.update_label(year, month, day)
106
120
 
107
- def on_ctx_select(self, year: int, month: int, day: int):
121
+ def on_ctx_select(
122
+ self,
123
+ year: int,
124
+ month: int,
125
+ day: int
126
+ ):
108
127
  """
109
128
  On ctx select
110
129
 
@@ -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 datetime
13
+ from typing import Dict
13
14
 
14
15
  from PySide6.QtGui import QTextCursor
15
16
 
@@ -55,7 +56,12 @@ class Note:
55
56
 
56
57
  self.refresh_num(year, month) # update note cells when note is changed
57
58
 
58
- def update_content(self, year: int, month: int, day: int):
59
+ def update_content(
60
+ self,
61
+ year: int,
62
+ month: int,
63
+ day: int
64
+ ):
59
65
  """
60
66
  Update content
61
67
 
@@ -71,7 +77,12 @@ class Note:
71
77
  self.window.ui.calendar['note'].setPlainText(note.content)
72
78
  self.window.ui.calendar['note'].on_update()
73
79
 
74
- def update_label(self, year: int, month: int, day: int):
80
+ def update_label(
81
+ self,
82
+ year: int,
83
+ month: int,
84
+ day: int
85
+ ):
75
86
  """
76
87
  Update label
77
88
 
@@ -89,7 +100,13 @@ class Note:
89
100
  day = self.window.ui.calendar['select'].currentDay
90
101
  self.update_label(year, month, day)
91
102
 
92
- def update_status(self, status: str, year: int, month: int, day: int):
103
+ def update_status(
104
+ self,
105
+ status: str,
106
+ year: int,
107
+ month: int,
108
+ day: int
109
+ ):
93
110
  """
94
111
  Update status label
95
112
 
@@ -109,7 +126,11 @@ class Note:
109
126
 
110
127
  self.refresh_num(year, month) # update note cells when note is changed
111
128
 
112
- def get_counts_around_month(self, year: int, month: int) -> dict:
129
+ def get_counts_around_month(
130
+ self,
131
+ year: int,
132
+ month: int
133
+ ) -> Dict[str, int]:
113
134
  """
114
135
  Get counts around month
115
136
 
@@ -139,7 +160,11 @@ class Note:
139
160
  )
140
161
  return {**last, **current, **next} # combine counters
141
162
 
142
- def get_labels_counts_around_month(self, year: int, month: int) -> dict:
163
+ def get_labels_counts_around_month(
164
+ self,
165
+ year: int,
166
+ month: int
167
+ ) -> Dict[str, Dict[int, int]]:
143
168
  """
144
169
  Get counts around month
145
170
 
@@ -169,7 +194,11 @@ class Note:
169
194
  )
170
195
  return {**last, **current, **next} # combine counters
171
196
 
172
- def get_ctx_counters(self, year: int, month: int) -> dict:
197
+ def get_ctx_counters(
198
+ self,
199
+ year: int,
200
+ month: int
201
+ ) -> Dict[str, int]:
173
202
  """
174
203
  Get ctx counters
175
204
 
@@ -197,7 +226,11 @@ class Note:
197
226
  search_content=search_content,
198
227
  )
199
228
 
200
- def get_ctx_labels_counters(self, year: int, month: int) -> dict:
229
+ def get_ctx_labels_counters(
230
+ self,
231
+ year: int,
232
+ month: int
233
+ ) -> Dict[str, Dict[int, int]]:
201
234
  """
202
235
  Get ctx labels counters
203
236
 
@@ -225,7 +258,11 @@ class Note:
225
258
  search_content=search_content,
226
259
  )
227
260
 
228
- def refresh_ctx(self, year: int, month: int):
261
+ def refresh_ctx(
262
+ self,
263
+ year: int,
264
+ month: int
265
+ ):
229
266
  """
230
267
  Update calendar ctx cells
231
268
 
@@ -236,7 +273,12 @@ class Note:
236
273
  labels = self.get_labels_counts_around_month(year, month)
237
274
  self.window.ui.calendar['select'].update_ctx(count, labels)
238
275
 
239
- def create(self, year: int, month: int, day: int) -> CalendarNoteItem:
276
+ def create(
277
+ self,
278
+ year: int,
279
+ month: int,
280
+ day: int
281
+ ) -> CalendarNoteItem:
240
282
  """
241
283
  Create empty note
242
284
 
@@ -251,7 +293,11 @@ class Note:
251
293
  note.day = day
252
294
  return note
253
295
 
254
- def get_notes_existence_around_month(self, year: int, month: int) -> dict:
296
+ def get_notes_existence_around_month(
297
+ self,
298
+ year: int,
299
+ month: int
300
+ ) -> Dict[str, Dict[int, int]]:
255
301
  """
256
302
  Get notes existence around month
257
303
 
@@ -6,12 +6,13 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.23 00:00:00 #
9
+ # Updated Date: 2024.12.14 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import datetime
13
13
  import os
14
14
  import time
15
+ from typing import Any
15
16
 
16
17
  import cv2
17
18
 
@@ -464,7 +465,7 @@ class Camera(QObject):
464
465
  self.window.dispatch(AppEvent(AppEvent.CAMERA_DISABLED)) # app event
465
466
 
466
467
  @Slot(object)
467
- def handle_error(self, err):
468
+ def handle_error(self, err: Any):
468
469
  """
469
470
  Handle thread error signal
470
471
 
@@ -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 Any
13
+
12
14
  from pygpt_net.core.events import AppEvent
13
15
  from pygpt_net.item.ctx import CtxItem
14
16
 
@@ -64,7 +66,7 @@ class Chat:
64
66
  self.render.reload()
65
67
  self.attachment.reload()
66
68
 
67
- def handle_error(self, err: any):
69
+ def handle_error(self, err: Any):
68
70
  """
69
71
  Handle error
70
72
 
@@ -93,7 +95,7 @@ class Chat:
93
95
  else:
94
96
  self.log("[ctx] {}.".format(mode.upper()))
95
97
 
96
- def log(self, data: any):
98
+ def log(self, data: Any):
97
99
  """
98
100
  Log data to debug
99
101
 
@@ -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.29 23:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
13
+ from typing import List, Dict, Any
13
14
 
14
15
  from PySide6.QtCore import Slot, QObject
15
16
 
@@ -74,7 +75,11 @@ class Attachment(QObject):
74
75
  """Reload attachments"""
75
76
  self.setup()
76
77
 
77
- def handle(self, mode: str, text: str):
78
+ def handle(
79
+ self,
80
+ mode: str,
81
+ text: str
82
+ ):
78
83
  """
79
84
  Handle attachment upload
80
85
 
@@ -104,7 +109,12 @@ class Attachment(QObject):
104
109
  return True
105
110
  return False
106
111
 
107
- def upload(self, meta: CtxMeta, mode: str, prompt: str) -> bool:
112
+ def upload(
113
+ self,
114
+ meta: CtxMeta,
115
+ mode: str,
116
+ prompt: str
117
+ ) -> bool:
108
118
  """
109
119
  Upload attachments for meta
110
120
 
@@ -261,7 +271,11 @@ class Attachment(QObject):
261
271
  """
262
272
  return self.mode
263
273
 
264
- def get_context(self, ctx: CtxItem, history: list) -> str:
274
+ def get_context(
275
+ self,
276
+ ctx: CtxItem,
277
+ history: List[CtxItem]
278
+ ) -> str:
265
279
  """
266
280
  Get additional context for attachment
267
281
 
@@ -292,7 +306,10 @@ class Attachment(QObject):
292
306
  return "====================================\nADDITIONAL CONTEXT FROM ATTACHMENT(s): {}".format(content)
293
307
  return ""
294
308
 
295
- def get_uploaded_attachments(self, meta: CtxMeta) -> list:
309
+ def get_uploaded_attachments(
310
+ self,
311
+ meta: CtxMeta
312
+ ) -> List[Dict[str, Any]]:
296
313
  """
297
314
  Get uploaded attachments for meta
298
315
 
@@ -364,7 +381,12 @@ class Attachment(QObject):
364
381
  """Hide uploaded attachments"""
365
382
  self.window.ui.tabs['input'].setTabVisible(self.uploaded_tab_idx, False)
366
383
 
367
- def delete_by_idx(self, idx: int, force: bool = False, remove_local=True):
384
+ def delete_by_idx(
385
+ self,
386
+ idx: int,
387
+ force: bool = False,
388
+ remove_local: bool = True
389
+ ):
368
390
  """
369
391
  Delete attachment by index
370
392
 
@@ -388,7 +410,12 @@ class Attachment(QObject):
388
410
  self.window.core.attachments.context.delete(meta, item, delete_files=remove_local)
389
411
  self.update_list(meta)
390
412
 
391
- def clear(self, force: bool = False, remove_local=False, auto: bool = False):
413
+ def clear(
414
+ self,
415
+ force: bool = False,
416
+ remove_local: bool = False,
417
+ auto: bool = False
418
+ ):
392
419
  """
393
420
  Clear attachments list
394
421
 
@@ -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 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Any
13
+
12
14
  from pygpt_net.core.types import (
13
15
  MODE_AGENT,
14
16
  )
@@ -79,7 +81,7 @@ class Command:
79
81
  })
80
82
  self.window.dispatch(event)
81
83
 
82
- def log(self, data: any):
84
+ def log(self, data: Any):
83
85
  """
84
86
  Log data to debug
85
87
 
@@ -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.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
@@ -113,7 +113,11 @@ class Common:
113
113
  self.window.ui.nodes['input'].setFocus()
114
114
  self.initialized = True
115
115
 
116
- def append_to_input(self, text: str, separator: str = "\n"):
116
+ def append_to_input(
117
+ self,
118
+ text: str,
119
+ separator: str = "\n"
120
+ ):
117
121
  """
118
122
  Append text to input
119
123
 
@@ -223,7 +227,6 @@ class Common:
223
227
  unlock = False
224
228
  return unlock
225
229
 
226
-
227
230
  def stop(self, exit: bool = False):
228
231
  """
229
232
  Stop all
@@ -358,7 +361,11 @@ class Common:
358
361
  else:
359
362
  self.img_enable_raw()
360
363
 
361
- def save_text(self, text: str, type: str = "txt"):
364
+ def save_text(
365
+ self,
366
+ text: str,
367
+ type: str = "txt"
368
+ ):
362
369
  """
363
370
  Save text to file
364
371
 
@@ -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.23 00:00:00 #
9
+ # Updated Date: 2024.12.14 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Dict
13
+
14
+ from pygpt_net.item.attachment import AttachmentItem
12
15
  from pygpt_net.item.ctx import CtxItem
13
16
  from pygpt_net.utils import trans
14
17
 
@@ -22,7 +25,11 @@ class Files:
22
25
  """
23
26
  self.window = window
24
27
 
25
- def send(self, mode: str, ctx: CtxItem):
28
+ def send(
29
+ self,
30
+ mode: str,
31
+ ctx: CtxItem
32
+ ):
26
33
  """
27
34
  Send attachments
28
35
 
@@ -37,7 +44,7 @@ class Files:
37
44
  self.window.controller.chat.log("Uploaded attachments (Assistant): {}".format(len(attachments)))
38
45
  return attachments
39
46
 
40
- def upload(self, mode: str) -> dict:
47
+ def upload(self, mode: str) -> Dict[str, AttachmentItem]:
41
48
  """
42
49
  Upload attachments
43
50
 
@@ -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 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Optional, List
13
+
12
14
  from PySide6.QtCore import Slot
13
15
 
14
16
  from pygpt_net.core.bridge.context import BridgeContext
@@ -30,8 +32,8 @@ class Image:
30
32
  def send(
31
33
  self,
32
34
  text: str,
33
- prev_ctx: CtxItem = None,
34
- parent_id: int = None,
35
+ prev_ctx: Optional[CtxItem] = None,
36
+ parent_id: Optional[int] = None,
35
37
  ) -> CtxItem:
36
38
  """
37
39
  Send prompt for image generate
@@ -116,7 +118,12 @@ class Image:
116
118
  return ctx
117
119
 
118
120
  @Slot(object, list, str)
119
- def handle_response(self, ctx: CtxItem, paths: list, prompt: str):
121
+ def handle_response(
122
+ self,
123
+ ctx: CtxItem,
124
+ paths: List[str],
125
+ prompt: str
126
+ ):
120
127
  """
121
128
  Handle response
122
129
 
@@ -161,7 +168,12 @@ class Image:
161
168
  self.window.controller.chat.common.unlock_input() # unlock input
162
169
 
163
170
  @Slot(object, list, str)
164
- def handle_response_inline(self, ctx: CtxItem, paths: list, prompt: str):
171
+ def handle_response_inline(
172
+ self,
173
+ ctx: CtxItem,
174
+ paths: List[str],
175
+ prompt: str
176
+ ):
165
177
  """
166
178
  Handle inline response
167
179
 
@@ -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 Optional, Any, Dict
13
+
12
14
  from pygpt_net.core.bridge import BridgeContext
13
15
  from pygpt_net.core.bridge.context import MultimodalContext
14
16
  from pygpt_net.core.events import Event, AppEvent, KernelEvent, RenderEvent
@@ -52,6 +54,7 @@ class Input:
52
54
  """
53
55
  self.window.controller.agent.experts.unlock() # unlock experts
54
56
  self.window.controller.agent.llama.reset_eval_step() # reset evaluation steps
57
+ self.window.controller.ui.tabs.switch_to_first_chat() # switch to first active chat tab
55
58
 
56
59
  # get text from input
57
60
  text = self.window.ui.nodes['input'].toPlainText().strip()
@@ -121,7 +124,7 @@ class Input:
121
124
  def send(
122
125
  self,
123
126
  context: BridgeContext,
124
- extra: dict,
127
+ extra: Dict[str, Any],
125
128
  ):
126
129
  """
127
130
  Send input wrapper
@@ -148,13 +151,13 @@ class Input:
148
151
 
149
152
  def execute(
150
153
  self,
151
- text: str = None,
154
+ text: str,
152
155
  force: bool = False,
153
156
  reply: bool = False,
154
157
  internal: bool = False,
155
- prev_ctx: CtxItem = None,
156
- parent_id: int = None,
157
- multimodal_ctx: MultimodalContext = None,
158
+ prev_ctx: Optional[CtxItem] = None,
159
+ parent_id: Optional[int] = None,
160
+ multimodal_ctx: Optional[MultimodalContext] = None,
158
161
  ):
159
162
  """
160
163
  Execute send input text to API
@@ -265,7 +268,7 @@ class Input:
265
268
  multimodal_ctx=multimodal_ctx,
266
269
  ) # text mode: OpenAI, Langchain, Llama, etc.
267
270
 
268
- def log(self, data: any):
271
+ def log(self, data: Any):
269
272
  """
270
273
  Log data to debug
271
274
 
@@ -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 Any
13
+
12
14
  from pygpt_net.core.types import (
13
15
  MODE_AGENT,
14
16
  MODE_ASSISTANT,
@@ -26,9 +28,17 @@ class Output:
26
28
  :param window: Window instance
27
29
  """
28
30
  self.window = window
29
- self.not_stream_modes = [MODE_ASSISTANT, MODE_IMAGE]
31
+ self.not_stream_modes = [
32
+ MODE_ASSISTANT,
33
+ MODE_IMAGE,
34
+ ]
30
35
 
31
- def handle(self, ctx: CtxItem, mode: str, stream_mode: bool = False):
36
+ def handle(
37
+ self,
38
+ ctx: CtxItem,
39
+ mode: str,
40
+ stream_mode: bool = False
41
+ ):
32
42
  """
33
43
  Handle response from LLM
34
44
 
@@ -133,7 +143,8 @@ class Output:
133
143
  mode: str,
134
144
  stream: bool = False,
135
145
  reply: bool = False,
136
- internal: bool = False):
146
+ internal: bool = False
147
+ ):
137
148
  """
138
149
  Post handle results
139
150
 
@@ -178,7 +189,11 @@ class Output:
178
189
  self.log("Calling for prepare context name...")
179
190
  self.window.controller.ctx.prepare_name(ctx) # async
180
191
 
181
- def handle_end(self, ctx: CtxItem, mode: str):
192
+ def handle_end(
193
+ self,
194
+ ctx: CtxItem,
195
+ mode: str
196
+ ):
182
197
  """
183
198
  Handle context end (finish output)
184
199
 
@@ -231,7 +246,7 @@ class Output:
231
246
  event = RenderEvent(RenderEvent.RELOAD)
232
247
  self.window.dispatch(event) # reload chat window
233
248
 
234
- def log(self, data: any):
249
+ def log(self, data: Any):
235
250
  """
236
251
  Log data to debug
237
252