pygpt-net 2.6.39__py3-none-any.whl → 2.6.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 (2182) hide show
  1. pygpt_net/CHANGELOG.txt +8 -0
  2. pygpt_net/__init__.py +3 -3
  3. pygpt_net/app.py +6 -1
  4. pygpt_net/controller/access/access.py +0 -0
  5. pygpt_net/controller/agent/__init__.py +0 -0
  6. pygpt_net/controller/agent/agent.py +0 -0
  7. pygpt_net/controller/agent/common.py +0 -0
  8. pygpt_net/controller/agent/experts.py +0 -0
  9. pygpt_net/controller/agent/legacy.py +0 -0
  10. pygpt_net/controller/agent/llama.py +0 -0
  11. pygpt_net/controller/assistant/__init__.py +0 -0
  12. pygpt_net/controller/assistant/assistant.py +0 -0
  13. pygpt_net/controller/assistant/batch.py +0 -0
  14. pygpt_net/controller/assistant/files.py +0 -0
  15. pygpt_net/controller/assistant/threads.py +0 -0
  16. pygpt_net/controller/attachment/__init__.py +0 -0
  17. pygpt_net/controller/attachment/attachment.py +0 -0
  18. pygpt_net/controller/audio/__init__.py +0 -0
  19. pygpt_net/controller/audio/audio.py +0 -0
  20. pygpt_net/controller/audio/ui.py +0 -0
  21. pygpt_net/controller/calendar/__init__.py +0 -0
  22. pygpt_net/controller/calendar/calendar.py +0 -0
  23. pygpt_net/controller/calendar/note.py +0 -0
  24. pygpt_net/controller/camera/__init__.py +0 -0
  25. pygpt_net/controller/camera/camera.py +0 -0
  26. pygpt_net/controller/chat/audio.py +0 -0
  27. pygpt_net/controller/chat/chat.py +0 -0
  28. pygpt_net/controller/chat/command.py +0 -0
  29. pygpt_net/controller/chat/common.py +0 -0
  30. pygpt_net/controller/chat/files.py +0 -0
  31. pygpt_net/controller/chat/handler/__init__.py +0 -0
  32. pygpt_net/controller/chat/handler/anthropic_stream.py +0 -0
  33. pygpt_net/controller/chat/handler/google_stream.py +0 -0
  34. pygpt_net/controller/chat/handler/langchain_stream.py +0 -0
  35. pygpt_net/controller/chat/handler/llamaindex_stream.py +0 -0
  36. pygpt_net/controller/chat/handler/openai_stream.py +0 -0
  37. pygpt_net/controller/chat/handler/utils.py +0 -0
  38. pygpt_net/controller/chat/handler/worker.py +13 -17
  39. pygpt_net/controller/chat/handler/xai_stream.py +0 -0
  40. pygpt_net/controller/chat/image.py +7 -1
  41. pygpt_net/controller/chat/render.py +25 -8
  42. pygpt_net/controller/chat/response.py +3 -4
  43. pygpt_net/controller/chat/stream.py +40 -7
  44. pygpt_net/controller/chat/text.py +0 -0
  45. pygpt_net/controller/chat/vision.py +0 -0
  46. pygpt_net/controller/command/__init__.py +0 -0
  47. pygpt_net/controller/command/command.py +0 -0
  48. pygpt_net/controller/config/__init__.py +0 -0
  49. pygpt_net/controller/config/config.py +0 -0
  50. pygpt_net/controller/config/field/__init__.py +0 -0
  51. pygpt_net/controller/config/field/checkbox_list.py +0 -0
  52. pygpt_net/controller/config/field/cmd.py +0 -0
  53. pygpt_net/controller/config/field/combo.py +0 -0
  54. pygpt_net/controller/config/field/dictionary.py +0 -0
  55. pygpt_net/controller/config/field/input.py +0 -0
  56. pygpt_net/controller/config/field/slider.py +0 -0
  57. pygpt_net/controller/config/field/textarea.py +0 -0
  58. pygpt_net/controller/config/placeholder.py +0 -0
  59. pygpt_net/controller/ctx/common.py +0 -0
  60. pygpt_net/controller/ctx/summarizer.py +0 -0
  61. pygpt_net/controller/debug/__init__.py +0 -0
  62. pygpt_net/controller/debug/debug.py +19 -0
  63. pygpt_net/controller/dialogs/__init__.py +0 -0
  64. pygpt_net/controller/dialogs/debug.py +0 -0
  65. pygpt_net/controller/dialogs/dialogs.py +0 -0
  66. pygpt_net/controller/files/__init__.py +0 -0
  67. pygpt_net/controller/files/files.py +0 -0
  68. pygpt_net/controller/finder/__init__.py +0 -0
  69. pygpt_net/controller/finder/finder.py +0 -0
  70. pygpt_net/controller/idx/common.py +0 -0
  71. pygpt_net/controller/idx/idx.py +0 -0
  72. pygpt_net/controller/idx/settings.py +0 -0
  73. pygpt_net/controller/kernel/kernel.py +0 -0
  74. pygpt_net/controller/kernel/stack.py +0 -0
  75. pygpt_net/controller/lang/__init__.py +0 -0
  76. pygpt_net/controller/lang/custom.py +0 -0
  77. pygpt_net/controller/lang/lang.py +0 -0
  78. pygpt_net/controller/lang/mapping.py +0 -0
  79. pygpt_net/controller/lang/plugins.py +0 -0
  80. pygpt_net/controller/lang/settings.py +0 -0
  81. pygpt_net/controller/launcher/__init__.py +0 -0
  82. pygpt_net/controller/launcher/launcher.py +0 -0
  83. pygpt_net/controller/layout/__init__.py +0 -0
  84. pygpt_net/controller/layout/layout.py +0 -0
  85. pygpt_net/controller/media/__init__.py +0 -0
  86. pygpt_net/controller/media/media.py +0 -0
  87. pygpt_net/controller/mode/__init__.py +0 -0
  88. pygpt_net/controller/mode/mode.py +0 -0
  89. pygpt_net/controller/model/__init__.py +0 -0
  90. pygpt_net/controller/notepad/__init__.py +0 -0
  91. pygpt_net/controller/painter/__init__.py +0 -0
  92. pygpt_net/controller/painter/common.py +0 -0
  93. pygpt_net/controller/painter/painter.py +0 -0
  94. pygpt_net/controller/plugins/presets.py +0 -0
  95. pygpt_net/controller/presets/experts.py +0 -0
  96. pygpt_net/controller/presets/presets.py +0 -0
  97. pygpt_net/controller/realtime/__init__.py +0 -0
  98. pygpt_net/controller/realtime/manager.py +0 -0
  99. pygpt_net/controller/realtime/realtime.py +0 -0
  100. pygpt_net/controller/settings/__init__.py +0 -0
  101. pygpt_net/controller/settings/profile.py +0 -0
  102. pygpt_net/controller/settings/settings.py +0 -0
  103. pygpt_net/controller/theme/menu.py +0 -0
  104. pygpt_net/controller/theme/nodes.py +0 -0
  105. pygpt_net/controller/theme/theme.py +0 -0
  106. pygpt_net/controller/tools/__init__.py +0 -0
  107. pygpt_net/controller/tools/tools.py +0 -0
  108. pygpt_net/controller/ui/__init__.py +0 -0
  109. pygpt_net/controller/ui/mode.py +0 -0
  110. pygpt_net/controller/ui/tabs.py +0 -0
  111. pygpt_net/controller/ui/ui.py +0 -0
  112. pygpt_net/controller/ui/vision.py +0 -0
  113. pygpt_net/core/__init__.py +0 -0
  114. pygpt_net/core/access/access.py +0 -0
  115. pygpt_net/core/access/helpers.py +0 -0
  116. pygpt_net/core/agents/__init__.py +0 -0
  117. pygpt_net/core/agents/agents.py +0 -0
  118. pygpt_net/core/agents/bridge.py +0 -0
  119. pygpt_net/core/agents/legacy.py +0 -0
  120. pygpt_net/core/agents/observer/__init__.py +0 -0
  121. pygpt_net/core/agents/provider.py +0 -0
  122. pygpt_net/core/agents/runners/__init__.py +0 -0
  123. pygpt_net/core/agents/runners/base.py +0 -0
  124. pygpt_net/core/agents/runners/helpers.py +0 -0
  125. pygpt_net/core/agents/runners/llama_assistant.py +0 -0
  126. pygpt_net/core/agents/runners/llama_plan.py +0 -0
  127. pygpt_net/core/agents/runners/llama_steps.py +0 -0
  128. pygpt_net/core/agents/runners/llama_workflow.py +0 -0
  129. pygpt_net/core/agents/runners/loop.py +0 -0
  130. pygpt_net/core/agents/runners/openai_workflow.py +0 -0
  131. pygpt_net/core/agents/tools.py +0 -0
  132. pygpt_net/core/assistants/__init__.py +0 -0
  133. pygpt_net/core/assistants/assistants.py +0 -0
  134. pygpt_net/core/assistants/files.py +0 -0
  135. pygpt_net/core/assistants/store.py +0 -0
  136. pygpt_net/core/attachments/__init__.py +0 -0
  137. pygpt_net/core/attachments/attachments.py +0 -0
  138. pygpt_net/core/attachments/worker.py +0 -0
  139. pygpt_net/core/audio/audio.py +0 -0
  140. pygpt_net/core/audio/backend/__init__.py +0 -0
  141. pygpt_net/core/audio/backend/native/__init__.py +0 -0
  142. pygpt_net/core/audio/backend/native/player.py +0 -0
  143. pygpt_net/core/audio/backend/native/realtime.py +0 -0
  144. pygpt_net/core/audio/backend/pyaudio/__init__.py +0 -0
  145. pygpt_net/core/audio/backend/pyaudio/playback.py +0 -0
  146. pygpt_net/core/audio/backend/pyaudio/pyaudio.py +0 -0
  147. pygpt_net/core/audio/backend/pyaudio/realtime.py +0 -0
  148. pygpt_net/core/audio/backend/pygame/__init__.py +0 -0
  149. pygpt_net/core/audio/backend/pygame/pygame.py +0 -0
  150. pygpt_net/core/audio/backend/shared/__init__.py +0 -0
  151. pygpt_net/core/audio/backend/shared/conversions.py +0 -0
  152. pygpt_net/core/audio/backend/shared/envelope.py +0 -0
  153. pygpt_net/core/audio/backend/shared/player.py +0 -0
  154. pygpt_net/core/audio/backend/shared/rt.py +0 -0
  155. pygpt_net/core/audio/context.py +0 -0
  156. pygpt_net/core/audio/output.py +0 -0
  157. pygpt_net/core/audio/whisper.py +0 -0
  158. pygpt_net/core/bridge/bridge.py +0 -0
  159. pygpt_net/core/bridge/worker.py +0 -0
  160. pygpt_net/core/calendar/__init__.py +0 -0
  161. pygpt_net/core/calendar/calendar.py +0 -0
  162. pygpt_net/core/camera/__init__.py +0 -0
  163. pygpt_net/core/camera/camera.py +0 -0
  164. pygpt_net/core/camera/worker.py +0 -0
  165. pygpt_net/core/chain/__init__.py +0 -0
  166. pygpt_net/core/chain/chain.py +0 -0
  167. pygpt_net/core/chain/chat.py +0 -0
  168. pygpt_net/core/chain/completion.py +0 -0
  169. pygpt_net/core/command/command.py +0 -0
  170. pygpt_net/core/ctx/bag.py +0 -0
  171. pygpt_net/core/ctx/container.py +0 -0
  172. pygpt_net/core/ctx/ctx.py +0 -0
  173. pygpt_net/core/ctx/idx.py +0 -0
  174. pygpt_net/core/ctx/output.py +0 -0
  175. pygpt_net/core/ctx/reply.py +0 -0
  176. pygpt_net/core/db/__init__.py +0 -0
  177. pygpt_net/core/db/database.py +0 -0
  178. pygpt_net/core/db/viewer.py +0 -0
  179. pygpt_net/core/debug/agent.py +0 -0
  180. pygpt_net/core/debug/console/__init__.py +0 -0
  181. pygpt_net/core/debug/console/console.py +8 -0
  182. pygpt_net/core/debug/db.py +0 -0
  183. pygpt_net/core/debug/debug.py +0 -0
  184. pygpt_net/core/debug/events.py +0 -0
  185. pygpt_net/core/debug/indexes.py +0 -0
  186. pygpt_net/core/debug/kernel.py +0 -0
  187. pygpt_net/core/debug/tabs.py +0 -0
  188. pygpt_net/core/dispatcher/__init__.py +0 -0
  189. pygpt_net/core/dispatcher/dispatcher.py +0 -0
  190. pygpt_net/core/docker/__init__.py +0 -0
  191. pygpt_net/core/docker/builder.py +0 -0
  192. pygpt_net/core/docker/docker.py +0 -0
  193. pygpt_net/core/events/__init__.py +0 -0
  194. pygpt_net/core/events/app.py +0 -0
  195. pygpt_net/core/events/base.py +0 -0
  196. pygpt_net/core/events/control.py +0 -0
  197. pygpt_net/core/events/event.py +0 -0
  198. pygpt_net/core/events/kernel.py +0 -0
  199. pygpt_net/core/events/realtime.py +0 -0
  200. pygpt_net/core/experts/__init__.py +0 -0
  201. pygpt_net/core/experts/worker.py +0 -0
  202. pygpt_net/core/filesystem/actions.py +0 -0
  203. pygpt_net/core/filesystem/editor.py +0 -0
  204. pygpt_net/core/filesystem/filesystem.py +2 -2
  205. pygpt_net/core/filesystem/opener.py +0 -0
  206. pygpt_net/core/filesystem/packer.py +0 -0
  207. pygpt_net/core/filesystem/parser.py +0 -0
  208. pygpt_net/core/filesystem/types.py +0 -0
  209. pygpt_net/core/filesystem/url.py +0 -0
  210. pygpt_net/core/history/__init__.py +0 -0
  211. pygpt_net/core/history/history.py +0 -0
  212. pygpt_net/core/idx/context.py +0 -0
  213. pygpt_net/core/idx/idx.py +0 -0
  214. pygpt_net/core/idx/metadata.py +0 -0
  215. pygpt_net/core/idx/response.py +0 -0
  216. pygpt_net/core/idx/types/__init__.py +0 -0
  217. pygpt_net/core/idx/types/ctx.py +0 -0
  218. pygpt_net/core/idx/types/external.py +0 -0
  219. pygpt_net/core/idx/types/files.py +0 -0
  220. pygpt_net/core/idx/ui/__init__.py +0 -0
  221. pygpt_net/core/idx/ui/loaders.py +0 -0
  222. pygpt_net/core/image/__init__.py +0 -0
  223. pygpt_net/core/image/image.py +0 -0
  224. pygpt_net/core/info/__init__.py +0 -0
  225. pygpt_net/core/info/info.py +0 -0
  226. pygpt_net/core/installer/__init__.py +0 -0
  227. pygpt_net/core/installer/installer.py +0 -0
  228. pygpt_net/core/llm/__init__.py +0 -0
  229. pygpt_net/core/llm/llm.py +0 -0
  230. pygpt_net/core/locale/__init__.py +0 -0
  231. pygpt_net/core/locale/locale.py +0 -0
  232. pygpt_net/core/models/__init__.py +0 -0
  233. pygpt_net/core/models/models.py +0 -0
  234. pygpt_net/core/models/ollama.py +0 -0
  235. pygpt_net/core/modes/__init__.py +0 -0
  236. pygpt_net/core/modes/modes.py +0 -0
  237. pygpt_net/core/notepad/__init__.py +0 -0
  238. pygpt_net/core/notepad/notepad.py +0 -0
  239. pygpt_net/core/platforms/__init__.py +0 -0
  240. pygpt_net/core/platforms/platforms.py +0 -0
  241. pygpt_net/core/plugins/__init__.py +0 -0
  242. pygpt_net/core/plugins/plugins.py +0 -0
  243. pygpt_net/core/presets/__init__.py +0 -0
  244. pygpt_net/core/profile/__init__.py +0 -0
  245. pygpt_net/core/profile/profile.py +0 -0
  246. pygpt_net/core/prompt/__init__.py +0 -0
  247. pygpt_net/core/prompt/base/__init__.py +0 -0
  248. pygpt_net/core/prompt/base/gpt.py +0 -0
  249. pygpt_net/core/prompt/custom.py +0 -0
  250. pygpt_net/core/prompt/prompt.py +0 -0
  251. pygpt_net/core/prompt/template.py +0 -0
  252. pygpt_net/core/realtime/__init__.py +0 -0
  253. pygpt_net/core/realtime/options.py +0 -0
  254. pygpt_net/core/realtime/shared/__init__.py +0 -0
  255. pygpt_net/core/realtime/shared/audio.py +0 -0
  256. pygpt_net/core/realtime/shared/loop.py +0 -0
  257. pygpt_net/core/realtime/shared/session.py +0 -0
  258. pygpt_net/core/realtime/shared/text.py +0 -0
  259. pygpt_net/core/realtime/shared/tools.py +0 -0
  260. pygpt_net/core/realtime/shared/turn.py +0 -0
  261. pygpt_net/core/realtime/shared/types.py +0 -0
  262. pygpt_net/core/realtime/worker.py +0 -0
  263. pygpt_net/core/render/__init__.py +0 -0
  264. pygpt_net/core/render/base.py +5 -1
  265. pygpt_net/core/render/markdown/body.py +0 -0
  266. pygpt_net/core/render/markdown/helpers.py +0 -0
  267. pygpt_net/core/render/markdown/pid.py +0 -0
  268. pygpt_net/core/render/plain/__init__.py +0 -0
  269. pygpt_net/core/render/plain/body.py +0 -0
  270. pygpt_net/core/render/plain/helpers.py +0 -0
  271. pygpt_net/core/render/plain/pid.py +0 -0
  272. pygpt_net/core/render/plain/renderer.py +17 -4
  273. pygpt_net/core/render/web/body.py +78 -1161
  274. pygpt_net/core/render/web/debug.py +217 -0
  275. pygpt_net/core/render/web/helpers.py +44 -12
  276. pygpt_net/core/render/web/pid.py +4 -1
  277. pygpt_net/core/render/web/renderer.py +600 -343
  278. pygpt_net/core/render/web/syntax_highlight.py +0 -0
  279. pygpt_net/core/settings/__init__.py +0 -0
  280. pygpt_net/core/settings/settings.py +0 -0
  281. pygpt_net/core/tabs/tab.py +0 -0
  282. pygpt_net/core/tabs/tabs.py +0 -0
  283. pygpt_net/core/text/__init__.py +0 -0
  284. pygpt_net/core/text/text.py +0 -0
  285. pygpt_net/core/text/utils.py +2 -1
  286. pygpt_net/core/text/web_finder.py +0 -0
  287. pygpt_net/core/tokens/__init__.py +0 -0
  288. pygpt_net/core/tokens/tokens.py +0 -0
  289. pygpt_net/core/types/__init__.py +0 -0
  290. pygpt_net/core/types/agent.py +0 -0
  291. pygpt_net/core/types/base.py +0 -0
  292. pygpt_net/core/types/console.py +0 -0
  293. pygpt_net/core/types/image.py +0 -0
  294. pygpt_net/core/types/mode.py +0 -0
  295. pygpt_net/core/types/model.py +0 -0
  296. pygpt_net/core/types/multimodal.py +0 -0
  297. pygpt_net/core/types/tools.py +0 -0
  298. pygpt_net/core/updater/__init__.py +0 -0
  299. pygpt_net/core/video/__init__.py +0 -0
  300. pygpt_net/core/video/video.py +0 -0
  301. pygpt_net/core/vision/__init__.py +0 -0
  302. pygpt_net/core/vision/analyzer.py +0 -0
  303. pygpt_net/core/vision/vision.py +0 -0
  304. pygpt_net/core/web/__init__.py +0 -0
  305. pygpt_net/core/web/helpers.py +0 -0
  306. pygpt_net/core/web/web.py +0 -0
  307. pygpt_net/core/worker/__init__.py +0 -0
  308. pygpt_net/core/worker/worker.py +0 -0
  309. pygpt_net/css.qrc +1 -1
  310. pygpt_net/css_rc.py +0 -0
  311. pygpt_net/data/audio/click_off.mp3 +0 -0
  312. pygpt_net/data/audio/click_on.mp3 +0 -0
  313. pygpt_net/data/audio/ok.mp3 +0 -0
  314. pygpt_net/data/config/config.json +9 -8
  315. pygpt_net/data/config/models.json +3 -3
  316. pygpt_net/data/config/modes.json +0 -0
  317. pygpt_net/data/config/presets/agent_code_act.json +0 -0
  318. pygpt_net/data/config/presets/agent_openai.json +0 -0
  319. pygpt_net/data/config/presets/agent_openai_assistant.json +0 -0
  320. pygpt_net/data/config/presets/agent_openai_b2b.json +0 -0
  321. pygpt_net/data/config/presets/agent_openai_coder.json +0 -0
  322. pygpt_net/data/config/presets/agent_openai_evolve.json +0 -0
  323. pygpt_net/data/config/presets/agent_openai_expert.json +0 -0
  324. pygpt_net/data/config/presets/agent_openai_planner.json +0 -0
  325. pygpt_net/data/config/presets/agent_openai_researcher.json +0 -0
  326. pygpt_net/data/config/presets/agent_openai_simple.json +0 -0
  327. pygpt_net/data/config/presets/agent_openai_supervisor.json +0 -0
  328. pygpt_net/data/config/presets/agent_openai_writer.json +0 -0
  329. pygpt_net/data/config/presets/agent_planner.json +0 -0
  330. pygpt_net/data/config/presets/agent_react.json +0 -0
  331. pygpt_net/data/config/presets/agent_supervisor.json +0 -0
  332. pygpt_net/data/config/presets/current.agent.json +0 -0
  333. pygpt_net/data/config/presets/current.agent_llama.json +0 -0
  334. pygpt_net/data/config/presets/current.agent_openai.json +0 -0
  335. pygpt_net/data/config/presets/current.audio.json +0 -0
  336. pygpt_net/data/config/presets/current.computer.json +0 -0
  337. pygpt_net/data/config/presets/current.expert.json +0 -0
  338. pygpt_net/data/config/presets/current.llama_index.json +0 -0
  339. pygpt_net/data/config/presets/current.research.json +0 -0
  340. pygpt_net/data/config/presets/joke_agent.json +0 -0
  341. pygpt_net/data/config/presets/joke_expert.json +0 -0
  342. pygpt_net/data/config/settings.json +15 -3
  343. pygpt_net/data/config/settings_section.json +0 -0
  344. pygpt_net/data/css/web-blocks.css +35 -5
  345. pygpt_net/data/css/web-blocks.dark.css +3 -0
  346. pygpt_net/data/css/web-blocks.darkest.css +3 -0
  347. pygpt_net/data/css/web-chatgpt.css +35 -5
  348. pygpt_net/data/css/web-chatgpt.dark.css +3 -0
  349. pygpt_net/data/css/web-chatgpt.darkest.css +3 -0
  350. pygpt_net/data/css/web-chatgpt_wide.css +35 -5
  351. pygpt_net/data/css/web-chatgpt_wide.dark.css +3 -0
  352. pygpt_net/data/css/web-chatgpt_wide.darkest.css +3 -0
  353. pygpt_net/data/fonts/MonaspaceArgon/MonaspaceArgon-Bold.otf +0 -0
  354. pygpt_net/data/fonts/MonaspaceArgon/MonaspaceArgon-BoldItalic.otf +0 -0
  355. pygpt_net/data/fonts/MonaspaceArgon/MonaspaceArgon-Italic.otf +0 -0
  356. pygpt_net/data/fonts/MonaspaceArgon/MonaspaceArgon-Regular.otf +0 -0
  357. pygpt_net/data/fonts/MonaspaceKrypton/MonaspaceKrypton-Bold.otf +0 -0
  358. pygpt_net/data/fonts/MonaspaceKrypton/MonaspaceKrypton-BoldItalic.otf +0 -0
  359. pygpt_net/data/fonts/MonaspaceKrypton/MonaspaceKrypton-Italic.otf +0 -0
  360. pygpt_net/data/fonts/MonaspaceKrypton/MonaspaceKrypton-Regular.otf +0 -0
  361. pygpt_net/data/fonts/MonaspaceNeon/MonaspaceNeon-Bold.otf +0 -0
  362. pygpt_net/data/fonts/MonaspaceNeon/MonaspaceNeon-BoldItalic.otf +0 -0
  363. pygpt_net/data/fonts/MonaspaceNeon/MonaspaceNeon-Italic.otf +0 -0
  364. pygpt_net/data/fonts/MonaspaceNeon/MonaspaceNeon-Regular.otf +0 -0
  365. pygpt_net/data/fonts/MonaspaceRadon/MonaspaceRadon-Bold.otf +0 -0
  366. pygpt_net/data/fonts/MonaspaceRadon/MonaspaceRadon-BoldItalic.otf +0 -0
  367. pygpt_net/data/fonts/MonaspaceRadon/MonaspaceRadon-Italic.otf +0 -0
  368. pygpt_net/data/fonts/MonaspaceRadon/MonaspaceRadon-Regular.otf +0 -0
  369. pygpt_net/data/fonts/MonaspaceXenon/MonaspaceXenon-Bold.otf +0 -0
  370. pygpt_net/data/fonts/MonaspaceXenon/MonaspaceXenon-BoldItalic.otf +0 -0
  371. pygpt_net/data/fonts/MonaspaceXenon/MonaspaceXenon-Italic.otf +0 -0
  372. pygpt_net/data/fonts/MonaspaceXenon/MonaspaceXenon-Regular.otf +0 -0
  373. pygpt_net/data/icon_tray_busy.ico +0 -0
  374. pygpt_net/data/icon_tray_error.ico +0 -0
  375. pygpt_net/data/icon_tray_idle.ico +0 -0
  376. pygpt_net/data/icons/abc.svg +0 -0
  377. pygpt_net/data/icons/accessibility.svg +0 -0
  378. pygpt_net/data/icons/add.svg +0 -0
  379. pygpt_net/data/icons/add_circle.svg +0 -0
  380. pygpt_net/data/icons/add_folder.svg +0 -0
  381. pygpt_net/data/icons/add_library.svg +0 -0
  382. pygpt_net/data/icons/alarm.svg +0 -0
  383. pygpt_net/data/icons/apps.svg +0 -0
  384. pygpt_net/data/icons/asterisk.svg +0 -0
  385. pygpt_net/data/icons/attachment.svg +0 -0
  386. pygpt_net/data/icons/attachments.svg +0 -0
  387. pygpt_net/data/icons/back.svg +0 -0
  388. pygpt_net/data/icons/backspace.svg +0 -0
  389. pygpt_net/data/icons/block.svg +0 -0
  390. pygpt_net/data/icons/bookmark.svg +0 -0
  391. pygpt_net/data/icons/brush.svg +0 -0
  392. pygpt_net/data/icons/build.svg +0 -0
  393. pygpt_net/data/icons/calendar.svg +0 -0
  394. pygpt_net/data/icons/camera.svg +0 -0
  395. pygpt_net/data/icons/chat/audio.png +0 -0
  396. pygpt_net/data/icons/chat/collapse.png +0 -0
  397. pygpt_net/data/icons/chat/copy.png +0 -0
  398. pygpt_net/data/icons/chat/delete.png +0 -0
  399. pygpt_net/data/icons/chat/edit.png +0 -0
  400. pygpt_net/data/icons/chat/join.png +0 -0
  401. pygpt_net/data/icons/chat/preview.png +0 -0
  402. pygpt_net/data/icons/chat/reload.png +0 -0
  403. pygpt_net/data/icons/chat/run.png +0 -0
  404. pygpt_net/data/icons/chat.svg +0 -0
  405. pygpt_net/data/icons/check.svg +0 -0
  406. pygpt_net/data/icons/check_circle.svg +0 -0
  407. pygpt_net/data/icons/checklist.svg +0 -0
  408. pygpt_net/data/icons/circle.svg +0 -0
  409. pygpt_net/data/icons/clear.svg +0 -0
  410. pygpt_net/data/icons/clock.svg +0 -0
  411. pygpt_net/data/icons/close.svg +0 -0
  412. pygpt_net/data/icons/close_circle.svg +0 -0
  413. pygpt_net/data/icons/code.svg +0 -0
  414. pygpt_net/data/icons/collapse.svg +0 -0
  415. pygpt_net/data/icons/computer.svg +0 -0
  416. pygpt_net/data/icons/copy.svg +0 -0
  417. pygpt_net/data/icons/crop.svg +0 -0
  418. pygpt_net/data/icons/cut.svg +0 -0
  419. pygpt_net/data/icons/db.svg +0 -0
  420. pygpt_net/data/icons/delete.svg +0 -0
  421. pygpt_net/data/icons/done.svg +0 -0
  422. pygpt_net/data/icons/download.svg +0 -0
  423. pygpt_net/data/icons/draft.svg +0 -0
  424. pygpt_net/data/icons/drag.svg +0 -0
  425. pygpt_net/data/icons/edit.svg +0 -0
  426. pygpt_net/data/icons/emergency.svg +0 -0
  427. pygpt_net/data/icons/equalizer.svg +0 -0
  428. pygpt_net/data/icons/error.svg +0 -0
  429. pygpt_net/data/icons/event_available.svg +0 -0
  430. pygpt_net/data/icons/expand.svg +0 -0
  431. pygpt_net/data/icons/fast_forward.svg +0 -0
  432. pygpt_net/data/icons/fast_rewind.svg +0 -0
  433. pygpt_net/data/icons/favorite.svg +0 -0
  434. pygpt_net/data/icons/folder.svg +0 -0
  435. pygpt_net/data/icons/folder_filled.svg +0 -0
  436. pygpt_net/data/icons/forward.svg +0 -0
  437. pygpt_net/data/icons/full.svg +0 -0
  438. pygpt_net/data/icons/fullscreen.svg +0 -0
  439. pygpt_net/data/icons/grid.svg +0 -0
  440. pygpt_net/data/icons/hearing.svg +0 -0
  441. pygpt_net/data/icons/help.svg +0 -0
  442. pygpt_net/data/icons/history.svg +0 -0
  443. pygpt_net/data/icons/home.svg +0 -0
  444. pygpt_net/data/icons/home_filled.svg +0 -0
  445. pygpt_net/data/icons/image.svg +0 -0
  446. pygpt_net/data/icons/info.svg +0 -0
  447. pygpt_net/data/icons/input.svg +0 -0
  448. pygpt_net/data/icons/key.svg +0 -0
  449. pygpt_net/data/icons/keyboard.svg +0 -0
  450. pygpt_net/data/icons/language.svg +0 -0
  451. pygpt_net/data/icons/list.svg +0 -0
  452. pygpt_net/data/icons/lock.svg +0 -0
  453. pygpt_net/data/icons/logout.svg +0 -0
  454. pygpt_net/data/icons/map.svg +0 -0
  455. pygpt_net/data/icons/memory.svg +0 -0
  456. pygpt_net/data/icons/menu.svg +0 -0
  457. pygpt_net/data/icons/mic.svg +0 -0
  458. pygpt_net/data/icons/mic_off.svg +0 -0
  459. pygpt_net/data/icons/more_horizontal.svg +0 -0
  460. pygpt_net/data/icons/mute.svg +0 -0
  461. pygpt_net/data/icons/open_tab.svg +0 -0
  462. pygpt_net/data/icons/palette.svg +0 -0
  463. pygpt_net/data/icons/paste.svg +0 -0
  464. pygpt_net/data/icons/pause.svg +0 -0
  465. pygpt_net/data/icons/pause_circle.svg +0 -0
  466. pygpt_net/data/icons/photos.svg +0 -0
  467. pygpt_net/data/icons/pin.svg +0 -0
  468. pygpt_net/data/icons/play.svg +0 -0
  469. pygpt_net/data/icons/play_pause.svg +0 -0
  470. pygpt_net/data/icons/playlist_add.svg +0 -0
  471. pygpt_net/data/icons/power.svg +0 -0
  472. pygpt_net/data/icons/print.svg +0 -0
  473. pygpt_net/data/icons/public_filled.svg +0 -0
  474. pygpt_net/data/icons/redo.svg +0 -0
  475. pygpt_net/data/icons/reload.svg +0 -0
  476. pygpt_net/data/icons/repeat.svg +0 -0
  477. pygpt_net/data/icons/replay.svg +0 -0
  478. pygpt_net/data/icons/resize.svg +0 -0
  479. pygpt_net/data/icons/robot.svg +0 -0
  480. pygpt_net/data/icons/router.svg +0 -0
  481. pygpt_net/data/icons/save.svg +0 -0
  482. pygpt_net/data/icons/schedule.svg +0 -0
  483. pygpt_net/data/icons/screenshot.svg +0 -0
  484. pygpt_net/data/icons/search.svg +0 -0
  485. pygpt_net/data/icons/security.svg +0 -0
  486. pygpt_net/data/icons/sensors.svg +0 -0
  487. pygpt_net/data/icons/settings.svg +0 -0
  488. pygpt_net/data/icons/settings_filled.svg +0 -0
  489. pygpt_net/data/icons/share.svg +0 -0
  490. pygpt_net/data/icons/shedule.svg +0 -0
  491. pygpt_net/data/icons/sort.svg +0 -0
  492. pygpt_net/data/icons/split_screen.svg +0 -0
  493. pygpt_net/data/icons/stack.svg +0 -0
  494. pygpt_net/data/icons/stacks.svg +0 -0
  495. pygpt_net/data/icons/star.svg +0 -0
  496. pygpt_net/data/icons/stop.svg +0 -0
  497. pygpt_net/data/icons/stop_circle.svg +0 -0
  498. pygpt_net/data/icons/sync.svg +0 -0
  499. pygpt_net/data/icons/tag.svg +0 -0
  500. pygpt_net/data/icons/task.svg +0 -0
  501. pygpt_net/data/icons/terminal.svg +0 -0
  502. pygpt_net/data/icons/text.svg +0 -0
  503. pygpt_net/data/icons/textfile.svg +0 -0
  504. pygpt_net/data/icons/timer.svg +0 -0
  505. pygpt_net/data/icons/today.svg +0 -0
  506. pygpt_net/data/icons/tune.svg +0 -0
  507. pygpt_net/data/icons/undo.svg +0 -0
  508. pygpt_net/data/icons/update.svg +0 -0
  509. pygpt_net/data/icons/updater.svg +0 -0
  510. pygpt_net/data/icons/upload.svg +0 -0
  511. pygpt_net/data/icons/video.svg +0 -0
  512. pygpt_net/data/icons/view.svg +0 -0
  513. pygpt_net/data/icons/voice.svg +0 -0
  514. pygpt_net/data/icons/volume.svg +0 -0
  515. pygpt_net/data/icons/warning.svg +0 -0
  516. pygpt_net/data/icons/webcam.svg +0 -0
  517. pygpt_net/data/icons/webcam_off.svg +0 -0
  518. pygpt_net/data/icons/width.svg +0 -0
  519. pygpt_net/data/icons/window.svg +0 -0
  520. pygpt_net/data/icons/work.svg +0 -0
  521. pygpt_net/data/icons/zoom_in.svg +0 -0
  522. pygpt_net/data/icons/zoom_out.svg +0 -0
  523. pygpt_net/data/js/app.js +4348 -0
  524. pygpt_net/data/js/highlight/DIGESTS.md +0 -0
  525. pygpt_net/data/js/highlight/LICENSE +0 -0
  526. pygpt_net/data/js/highlight/README.md +0 -0
  527. pygpt_net/data/js/highlight/es/core.js +0 -0
  528. pygpt_net/data/js/highlight/es/core.min.js +0 -0
  529. pygpt_net/data/js/highlight/es/highlight.js +0 -0
  530. pygpt_net/data/js/highlight/es/highlight.min.js +0 -0
  531. pygpt_net/data/js/highlight/es/languages/1c.js +0 -0
  532. pygpt_net/data/js/highlight/es/languages/1c.min.js +0 -0
  533. pygpt_net/data/js/highlight/es/languages/abnf.js +0 -0
  534. pygpt_net/data/js/highlight/es/languages/abnf.min.js +0 -0
  535. pygpt_net/data/js/highlight/es/languages/accesslog.js +0 -0
  536. pygpt_net/data/js/highlight/es/languages/accesslog.min.js +0 -0
  537. pygpt_net/data/js/highlight/es/languages/actionscript.js +0 -0
  538. pygpt_net/data/js/highlight/es/languages/actionscript.min.js +0 -0
  539. pygpt_net/data/js/highlight/es/languages/ada.js +0 -0
  540. pygpt_net/data/js/highlight/es/languages/ada.min.js +0 -0
  541. pygpt_net/data/js/highlight/es/languages/angelscript.js +0 -0
  542. pygpt_net/data/js/highlight/es/languages/angelscript.min.js +0 -0
  543. pygpt_net/data/js/highlight/es/languages/apache.js +0 -0
  544. pygpt_net/data/js/highlight/es/languages/apache.min.js +0 -0
  545. pygpt_net/data/js/highlight/es/languages/applescript.js +0 -0
  546. pygpt_net/data/js/highlight/es/languages/applescript.min.js +0 -0
  547. pygpt_net/data/js/highlight/es/languages/arcade.js +0 -0
  548. pygpt_net/data/js/highlight/es/languages/arcade.min.js +0 -0
  549. pygpt_net/data/js/highlight/es/languages/arduino.js +0 -0
  550. pygpt_net/data/js/highlight/es/languages/arduino.min.js +0 -0
  551. pygpt_net/data/js/highlight/es/languages/armasm.js +0 -0
  552. pygpt_net/data/js/highlight/es/languages/armasm.min.js +0 -0
  553. pygpt_net/data/js/highlight/es/languages/asciidoc.js +0 -0
  554. pygpt_net/data/js/highlight/es/languages/asciidoc.min.js +0 -0
  555. pygpt_net/data/js/highlight/es/languages/aspectj.js +0 -0
  556. pygpt_net/data/js/highlight/es/languages/aspectj.min.js +0 -0
  557. pygpt_net/data/js/highlight/es/languages/autohotkey.js +0 -0
  558. pygpt_net/data/js/highlight/es/languages/autohotkey.min.js +0 -0
  559. pygpt_net/data/js/highlight/es/languages/autoit.js +0 -0
  560. pygpt_net/data/js/highlight/es/languages/autoit.min.js +0 -0
  561. pygpt_net/data/js/highlight/es/languages/avrasm.js +0 -0
  562. pygpt_net/data/js/highlight/es/languages/avrasm.min.js +0 -0
  563. pygpt_net/data/js/highlight/es/languages/awk.js +0 -0
  564. pygpt_net/data/js/highlight/es/languages/awk.min.js +0 -0
  565. pygpt_net/data/js/highlight/es/languages/axapta.js +0 -0
  566. pygpt_net/data/js/highlight/es/languages/axapta.min.js +0 -0
  567. pygpt_net/data/js/highlight/es/languages/bash.js +0 -0
  568. pygpt_net/data/js/highlight/es/languages/bash.min.js +0 -0
  569. pygpt_net/data/js/highlight/es/languages/basic.js +0 -0
  570. pygpt_net/data/js/highlight/es/languages/basic.min.js +0 -0
  571. pygpt_net/data/js/highlight/es/languages/bnf.js +0 -0
  572. pygpt_net/data/js/highlight/es/languages/bnf.min.js +0 -0
  573. pygpt_net/data/js/highlight/es/languages/brainfuck.js +0 -0
  574. pygpt_net/data/js/highlight/es/languages/brainfuck.min.js +0 -0
  575. pygpt_net/data/js/highlight/es/languages/c.js +0 -0
  576. pygpt_net/data/js/highlight/es/languages/c.min.js +0 -0
  577. pygpt_net/data/js/highlight/es/languages/cal.js +0 -0
  578. pygpt_net/data/js/highlight/es/languages/cal.min.js +0 -0
  579. pygpt_net/data/js/highlight/es/languages/capnproto.js +0 -0
  580. pygpt_net/data/js/highlight/es/languages/capnproto.min.js +0 -0
  581. pygpt_net/data/js/highlight/es/languages/ceylon.js +0 -0
  582. pygpt_net/data/js/highlight/es/languages/ceylon.min.js +0 -0
  583. pygpt_net/data/js/highlight/es/languages/clean.js +0 -0
  584. pygpt_net/data/js/highlight/es/languages/clean.min.js +0 -0
  585. pygpt_net/data/js/highlight/es/languages/clojure-repl.js +0 -0
  586. pygpt_net/data/js/highlight/es/languages/clojure-repl.min.js +0 -0
  587. pygpt_net/data/js/highlight/es/languages/clojure.js +0 -0
  588. pygpt_net/data/js/highlight/es/languages/clojure.min.js +0 -0
  589. pygpt_net/data/js/highlight/es/languages/cmake.js +0 -0
  590. pygpt_net/data/js/highlight/es/languages/cmake.min.js +0 -0
  591. pygpt_net/data/js/highlight/es/languages/coffeescript.js +0 -0
  592. pygpt_net/data/js/highlight/es/languages/coffeescript.min.js +0 -0
  593. pygpt_net/data/js/highlight/es/languages/coq.js +0 -0
  594. pygpt_net/data/js/highlight/es/languages/coq.min.js +0 -0
  595. pygpt_net/data/js/highlight/es/languages/cos.js +0 -0
  596. pygpt_net/data/js/highlight/es/languages/cos.min.js +0 -0
  597. pygpt_net/data/js/highlight/es/languages/cpp.js +0 -0
  598. pygpt_net/data/js/highlight/es/languages/cpp.min.js +0 -0
  599. pygpt_net/data/js/highlight/es/languages/crmsh.js +0 -0
  600. pygpt_net/data/js/highlight/es/languages/crmsh.min.js +0 -0
  601. pygpt_net/data/js/highlight/es/languages/crystal.js +0 -0
  602. pygpt_net/data/js/highlight/es/languages/crystal.min.js +0 -0
  603. pygpt_net/data/js/highlight/es/languages/csharp.js +0 -0
  604. pygpt_net/data/js/highlight/es/languages/csharp.min.js +0 -0
  605. pygpt_net/data/js/highlight/es/languages/csp.js +0 -0
  606. pygpt_net/data/js/highlight/es/languages/csp.min.js +0 -0
  607. pygpt_net/data/js/highlight/es/languages/css.js +0 -0
  608. pygpt_net/data/js/highlight/es/languages/css.min.js +0 -0
  609. pygpt_net/data/js/highlight/es/languages/d.js +0 -0
  610. pygpt_net/data/js/highlight/es/languages/d.min.js +0 -0
  611. pygpt_net/data/js/highlight/es/languages/dart.js +0 -0
  612. pygpt_net/data/js/highlight/es/languages/dart.min.js +0 -0
  613. pygpt_net/data/js/highlight/es/languages/delphi.js +0 -0
  614. pygpt_net/data/js/highlight/es/languages/delphi.min.js +0 -0
  615. pygpt_net/data/js/highlight/es/languages/diff.js +0 -0
  616. pygpt_net/data/js/highlight/es/languages/diff.min.js +0 -0
  617. pygpt_net/data/js/highlight/es/languages/django.js +0 -0
  618. pygpt_net/data/js/highlight/es/languages/django.min.js +0 -0
  619. pygpt_net/data/js/highlight/es/languages/dns.js +0 -0
  620. pygpt_net/data/js/highlight/es/languages/dns.min.js +0 -0
  621. pygpt_net/data/js/highlight/es/languages/dockerfile.js +0 -0
  622. pygpt_net/data/js/highlight/es/languages/dockerfile.min.js +0 -0
  623. pygpt_net/data/js/highlight/es/languages/dos.js +0 -0
  624. pygpt_net/data/js/highlight/es/languages/dos.min.js +0 -0
  625. pygpt_net/data/js/highlight/es/languages/dsconfig.js +0 -0
  626. pygpt_net/data/js/highlight/es/languages/dsconfig.min.js +0 -0
  627. pygpt_net/data/js/highlight/es/languages/dts.js +0 -0
  628. pygpt_net/data/js/highlight/es/languages/dts.min.js +0 -0
  629. pygpt_net/data/js/highlight/es/languages/dust.js +0 -0
  630. pygpt_net/data/js/highlight/es/languages/dust.min.js +0 -0
  631. pygpt_net/data/js/highlight/es/languages/ebnf.js +0 -0
  632. pygpt_net/data/js/highlight/es/languages/ebnf.min.js +0 -0
  633. pygpt_net/data/js/highlight/es/languages/elixir.js +0 -0
  634. pygpt_net/data/js/highlight/es/languages/elixir.min.js +0 -0
  635. pygpt_net/data/js/highlight/es/languages/elm.js +0 -0
  636. pygpt_net/data/js/highlight/es/languages/elm.min.js +0 -0
  637. pygpt_net/data/js/highlight/es/languages/erb.js +0 -0
  638. pygpt_net/data/js/highlight/es/languages/erb.min.js +0 -0
  639. pygpt_net/data/js/highlight/es/languages/erlang-repl.js +0 -0
  640. pygpt_net/data/js/highlight/es/languages/erlang-repl.min.js +0 -0
  641. pygpt_net/data/js/highlight/es/languages/erlang.js +0 -0
  642. pygpt_net/data/js/highlight/es/languages/erlang.min.js +0 -0
  643. pygpt_net/data/js/highlight/es/languages/excel.js +0 -0
  644. pygpt_net/data/js/highlight/es/languages/excel.min.js +0 -0
  645. pygpt_net/data/js/highlight/es/languages/fix.js +0 -0
  646. pygpt_net/data/js/highlight/es/languages/fix.min.js +0 -0
  647. pygpt_net/data/js/highlight/es/languages/flix.js +0 -0
  648. pygpt_net/data/js/highlight/es/languages/flix.min.js +0 -0
  649. pygpt_net/data/js/highlight/es/languages/fortran.js +0 -0
  650. pygpt_net/data/js/highlight/es/languages/fortran.min.js +0 -0
  651. pygpt_net/data/js/highlight/es/languages/fsharp.js +0 -0
  652. pygpt_net/data/js/highlight/es/languages/fsharp.min.js +0 -0
  653. pygpt_net/data/js/highlight/es/languages/gams.js +0 -0
  654. pygpt_net/data/js/highlight/es/languages/gams.min.js +0 -0
  655. pygpt_net/data/js/highlight/es/languages/gauss.js +0 -0
  656. pygpt_net/data/js/highlight/es/languages/gauss.min.js +0 -0
  657. pygpt_net/data/js/highlight/es/languages/gcode.js +0 -0
  658. pygpt_net/data/js/highlight/es/languages/gcode.min.js +0 -0
  659. pygpt_net/data/js/highlight/es/languages/gherkin.js +0 -0
  660. pygpt_net/data/js/highlight/es/languages/gherkin.min.js +0 -0
  661. pygpt_net/data/js/highlight/es/languages/glsl.js +0 -0
  662. pygpt_net/data/js/highlight/es/languages/glsl.min.js +0 -0
  663. pygpt_net/data/js/highlight/es/languages/gml.js +0 -0
  664. pygpt_net/data/js/highlight/es/languages/gml.min.js +0 -0
  665. pygpt_net/data/js/highlight/es/languages/go.js +0 -0
  666. pygpt_net/data/js/highlight/es/languages/go.min.js +0 -0
  667. pygpt_net/data/js/highlight/es/languages/golo.js +0 -0
  668. pygpt_net/data/js/highlight/es/languages/golo.min.js +0 -0
  669. pygpt_net/data/js/highlight/es/languages/gradle.js +0 -0
  670. pygpt_net/data/js/highlight/es/languages/gradle.min.js +0 -0
  671. pygpt_net/data/js/highlight/es/languages/graphql.js +0 -0
  672. pygpt_net/data/js/highlight/es/languages/graphql.min.js +0 -0
  673. pygpt_net/data/js/highlight/es/languages/groovy.js +0 -0
  674. pygpt_net/data/js/highlight/es/languages/groovy.min.js +0 -0
  675. pygpt_net/data/js/highlight/es/languages/haml.js +0 -0
  676. pygpt_net/data/js/highlight/es/languages/haml.min.js +0 -0
  677. pygpt_net/data/js/highlight/es/languages/handlebars.js +0 -0
  678. pygpt_net/data/js/highlight/es/languages/handlebars.min.js +0 -0
  679. pygpt_net/data/js/highlight/es/languages/haskell.js +0 -0
  680. pygpt_net/data/js/highlight/es/languages/haskell.min.js +0 -0
  681. pygpt_net/data/js/highlight/es/languages/haxe.js +0 -0
  682. pygpt_net/data/js/highlight/es/languages/haxe.min.js +0 -0
  683. pygpt_net/data/js/highlight/es/languages/hsp.js +0 -0
  684. pygpt_net/data/js/highlight/es/languages/hsp.min.js +0 -0
  685. pygpt_net/data/js/highlight/es/languages/http.js +0 -0
  686. pygpt_net/data/js/highlight/es/languages/http.min.js +0 -0
  687. pygpt_net/data/js/highlight/es/languages/hy.js +0 -0
  688. pygpt_net/data/js/highlight/es/languages/hy.min.js +0 -0
  689. pygpt_net/data/js/highlight/es/languages/inform7.js +0 -0
  690. pygpt_net/data/js/highlight/es/languages/inform7.min.js +0 -0
  691. pygpt_net/data/js/highlight/es/languages/ini.js +0 -0
  692. pygpt_net/data/js/highlight/es/languages/ini.min.js +0 -0
  693. pygpt_net/data/js/highlight/es/languages/irpf90.js +0 -0
  694. pygpt_net/data/js/highlight/es/languages/irpf90.min.js +0 -0
  695. pygpt_net/data/js/highlight/es/languages/isbl.js +0 -0
  696. pygpt_net/data/js/highlight/es/languages/isbl.min.js +0 -0
  697. pygpt_net/data/js/highlight/es/languages/java.js +0 -0
  698. pygpt_net/data/js/highlight/es/languages/java.min.js +0 -0
  699. pygpt_net/data/js/highlight/es/languages/javascript.js +0 -0
  700. pygpt_net/data/js/highlight/es/languages/javascript.min.js +0 -0
  701. pygpt_net/data/js/highlight/es/languages/jboss-cli.js +0 -0
  702. pygpt_net/data/js/highlight/es/languages/jboss-cli.min.js +0 -0
  703. pygpt_net/data/js/highlight/es/languages/json.js +0 -0
  704. pygpt_net/data/js/highlight/es/languages/json.min.js +0 -0
  705. pygpt_net/data/js/highlight/es/languages/julia-repl.js +0 -0
  706. pygpt_net/data/js/highlight/es/languages/julia-repl.min.js +0 -0
  707. pygpt_net/data/js/highlight/es/languages/julia.js +0 -0
  708. pygpt_net/data/js/highlight/es/languages/julia.min.js +0 -0
  709. pygpt_net/data/js/highlight/es/languages/kotlin.js +0 -0
  710. pygpt_net/data/js/highlight/es/languages/kotlin.min.js +0 -0
  711. pygpt_net/data/js/highlight/es/languages/lasso.js +0 -0
  712. pygpt_net/data/js/highlight/es/languages/lasso.min.js +0 -0
  713. pygpt_net/data/js/highlight/es/languages/latex.js +0 -0
  714. pygpt_net/data/js/highlight/es/languages/latex.min.js +0 -0
  715. pygpt_net/data/js/highlight/es/languages/ldif.js +0 -0
  716. pygpt_net/data/js/highlight/es/languages/ldif.min.js +0 -0
  717. pygpt_net/data/js/highlight/es/languages/leaf.js +0 -0
  718. pygpt_net/data/js/highlight/es/languages/leaf.min.js +0 -0
  719. pygpt_net/data/js/highlight/es/languages/less.js +0 -0
  720. pygpt_net/data/js/highlight/es/languages/less.min.js +0 -0
  721. pygpt_net/data/js/highlight/es/languages/lisp.js +0 -0
  722. pygpt_net/data/js/highlight/es/languages/lisp.min.js +0 -0
  723. pygpt_net/data/js/highlight/es/languages/livecodeserver.js +0 -0
  724. pygpt_net/data/js/highlight/es/languages/livecodeserver.min.js +0 -0
  725. pygpt_net/data/js/highlight/es/languages/livescript.js +0 -0
  726. pygpt_net/data/js/highlight/es/languages/livescript.min.js +0 -0
  727. pygpt_net/data/js/highlight/es/languages/llvm.js +0 -0
  728. pygpt_net/data/js/highlight/es/languages/llvm.min.js +0 -0
  729. pygpt_net/data/js/highlight/es/languages/lsl.js +0 -0
  730. pygpt_net/data/js/highlight/es/languages/lsl.min.js +0 -0
  731. pygpt_net/data/js/highlight/es/languages/lua.js +0 -0
  732. pygpt_net/data/js/highlight/es/languages/lua.min.js +0 -0
  733. pygpt_net/data/js/highlight/es/languages/makefile.js +0 -0
  734. pygpt_net/data/js/highlight/es/languages/makefile.min.js +0 -0
  735. pygpt_net/data/js/highlight/es/languages/markdown.js +0 -0
  736. pygpt_net/data/js/highlight/es/languages/markdown.min.js +0 -0
  737. pygpt_net/data/js/highlight/es/languages/mathematica.js +0 -0
  738. pygpt_net/data/js/highlight/es/languages/mathematica.min.js +0 -0
  739. pygpt_net/data/js/highlight/es/languages/matlab.js +0 -0
  740. pygpt_net/data/js/highlight/es/languages/matlab.min.js +0 -0
  741. pygpt_net/data/js/highlight/es/languages/maxima.js +0 -0
  742. pygpt_net/data/js/highlight/es/languages/maxima.min.js +0 -0
  743. pygpt_net/data/js/highlight/es/languages/mel.js +0 -0
  744. pygpt_net/data/js/highlight/es/languages/mel.min.js +0 -0
  745. pygpt_net/data/js/highlight/es/languages/mercury.js +0 -0
  746. pygpt_net/data/js/highlight/es/languages/mercury.min.js +0 -0
  747. pygpt_net/data/js/highlight/es/languages/mipsasm.js +0 -0
  748. pygpt_net/data/js/highlight/es/languages/mipsasm.min.js +0 -0
  749. pygpt_net/data/js/highlight/es/languages/mizar.js +0 -0
  750. pygpt_net/data/js/highlight/es/languages/mizar.min.js +0 -0
  751. pygpt_net/data/js/highlight/es/languages/mojolicious.js +0 -0
  752. pygpt_net/data/js/highlight/es/languages/mojolicious.min.js +0 -0
  753. pygpt_net/data/js/highlight/es/languages/monkey.js +0 -0
  754. pygpt_net/data/js/highlight/es/languages/monkey.min.js +0 -0
  755. pygpt_net/data/js/highlight/es/languages/moonscript.js +0 -0
  756. pygpt_net/data/js/highlight/es/languages/moonscript.min.js +0 -0
  757. pygpt_net/data/js/highlight/es/languages/n1ql.js +0 -0
  758. pygpt_net/data/js/highlight/es/languages/n1ql.min.js +0 -0
  759. pygpt_net/data/js/highlight/es/languages/nestedtext.js +0 -0
  760. pygpt_net/data/js/highlight/es/languages/nestedtext.min.js +0 -0
  761. pygpt_net/data/js/highlight/es/languages/nginx.js +0 -0
  762. pygpt_net/data/js/highlight/es/languages/nginx.min.js +0 -0
  763. pygpt_net/data/js/highlight/es/languages/nim.js +0 -0
  764. pygpt_net/data/js/highlight/es/languages/nim.min.js +0 -0
  765. pygpt_net/data/js/highlight/es/languages/nix.js +0 -0
  766. pygpt_net/data/js/highlight/es/languages/nix.min.js +0 -0
  767. pygpt_net/data/js/highlight/es/languages/node-repl.js +0 -0
  768. pygpt_net/data/js/highlight/es/languages/node-repl.min.js +0 -0
  769. pygpt_net/data/js/highlight/es/languages/nsis.js +0 -0
  770. pygpt_net/data/js/highlight/es/languages/nsis.min.js +0 -0
  771. pygpt_net/data/js/highlight/es/languages/objectivec.js +0 -0
  772. pygpt_net/data/js/highlight/es/languages/objectivec.min.js +0 -0
  773. pygpt_net/data/js/highlight/es/languages/ocaml.js +0 -0
  774. pygpt_net/data/js/highlight/es/languages/ocaml.min.js +0 -0
  775. pygpt_net/data/js/highlight/es/languages/openscad.js +0 -0
  776. pygpt_net/data/js/highlight/es/languages/openscad.min.js +0 -0
  777. pygpt_net/data/js/highlight/es/languages/oxygene.js +0 -0
  778. pygpt_net/data/js/highlight/es/languages/oxygene.min.js +0 -0
  779. pygpt_net/data/js/highlight/es/languages/parser3.js +0 -0
  780. pygpt_net/data/js/highlight/es/languages/parser3.min.js +0 -0
  781. pygpt_net/data/js/highlight/es/languages/perl.js +0 -0
  782. pygpt_net/data/js/highlight/es/languages/perl.min.js +0 -0
  783. pygpt_net/data/js/highlight/es/languages/pf.js +0 -0
  784. pygpt_net/data/js/highlight/es/languages/pf.min.js +0 -0
  785. pygpt_net/data/js/highlight/es/languages/pgsql.js +0 -0
  786. pygpt_net/data/js/highlight/es/languages/pgsql.min.js +0 -0
  787. pygpt_net/data/js/highlight/es/languages/php-template.js +0 -0
  788. pygpt_net/data/js/highlight/es/languages/php-template.min.js +0 -0
  789. pygpt_net/data/js/highlight/es/languages/php.js +0 -0
  790. pygpt_net/data/js/highlight/es/languages/php.min.js +0 -0
  791. pygpt_net/data/js/highlight/es/languages/plaintext.js +0 -0
  792. pygpt_net/data/js/highlight/es/languages/plaintext.min.js +0 -0
  793. pygpt_net/data/js/highlight/es/languages/pony.js +0 -0
  794. pygpt_net/data/js/highlight/es/languages/pony.min.js +0 -0
  795. pygpt_net/data/js/highlight/es/languages/powershell.js +0 -0
  796. pygpt_net/data/js/highlight/es/languages/powershell.min.js +0 -0
  797. pygpt_net/data/js/highlight/es/languages/processing.js +0 -0
  798. pygpt_net/data/js/highlight/es/languages/processing.min.js +0 -0
  799. pygpt_net/data/js/highlight/es/languages/profile.js +0 -0
  800. pygpt_net/data/js/highlight/es/languages/profile.min.js +0 -0
  801. pygpt_net/data/js/highlight/es/languages/prolog.js +0 -0
  802. pygpt_net/data/js/highlight/es/languages/prolog.min.js +0 -0
  803. pygpt_net/data/js/highlight/es/languages/properties.js +0 -0
  804. pygpt_net/data/js/highlight/es/languages/properties.min.js +0 -0
  805. pygpt_net/data/js/highlight/es/languages/protobuf.js +0 -0
  806. pygpt_net/data/js/highlight/es/languages/protobuf.min.js +0 -0
  807. pygpt_net/data/js/highlight/es/languages/puppet.js +0 -0
  808. pygpt_net/data/js/highlight/es/languages/puppet.min.js +0 -0
  809. pygpt_net/data/js/highlight/es/languages/purebasic.js +0 -0
  810. pygpt_net/data/js/highlight/es/languages/purebasic.min.js +0 -0
  811. pygpt_net/data/js/highlight/es/languages/python-repl.js +0 -0
  812. pygpt_net/data/js/highlight/es/languages/python-repl.min.js +0 -0
  813. pygpt_net/data/js/highlight/es/languages/python.js +0 -0
  814. pygpt_net/data/js/highlight/es/languages/python.min.js +0 -0
  815. pygpt_net/data/js/highlight/es/languages/q.js +0 -0
  816. pygpt_net/data/js/highlight/es/languages/q.min.js +0 -0
  817. pygpt_net/data/js/highlight/es/languages/qml.js +0 -0
  818. pygpt_net/data/js/highlight/es/languages/qml.min.js +0 -0
  819. pygpt_net/data/js/highlight/es/languages/r.js +0 -0
  820. pygpt_net/data/js/highlight/es/languages/r.min.js +0 -0
  821. pygpt_net/data/js/highlight/es/languages/reasonml.js +0 -0
  822. pygpt_net/data/js/highlight/es/languages/reasonml.min.js +0 -0
  823. pygpt_net/data/js/highlight/es/languages/rib.js +0 -0
  824. pygpt_net/data/js/highlight/es/languages/rib.min.js +0 -0
  825. pygpt_net/data/js/highlight/es/languages/roboconf.js +0 -0
  826. pygpt_net/data/js/highlight/es/languages/roboconf.min.js +0 -0
  827. pygpt_net/data/js/highlight/es/languages/routeros.js +0 -0
  828. pygpt_net/data/js/highlight/es/languages/routeros.min.js +0 -0
  829. pygpt_net/data/js/highlight/es/languages/rsl.js +0 -0
  830. pygpt_net/data/js/highlight/es/languages/rsl.min.js +0 -0
  831. pygpt_net/data/js/highlight/es/languages/ruby.js +0 -0
  832. pygpt_net/data/js/highlight/es/languages/ruby.min.js +0 -0
  833. pygpt_net/data/js/highlight/es/languages/ruleslanguage.js +0 -0
  834. pygpt_net/data/js/highlight/es/languages/ruleslanguage.min.js +0 -0
  835. pygpt_net/data/js/highlight/es/languages/rust.js +0 -0
  836. pygpt_net/data/js/highlight/es/languages/rust.min.js +0 -0
  837. pygpt_net/data/js/highlight/es/languages/sas.js +0 -0
  838. pygpt_net/data/js/highlight/es/languages/sas.min.js +0 -0
  839. pygpt_net/data/js/highlight/es/languages/scala.js +0 -0
  840. pygpt_net/data/js/highlight/es/languages/scala.min.js +0 -0
  841. pygpt_net/data/js/highlight/es/languages/scheme.js +0 -0
  842. pygpt_net/data/js/highlight/es/languages/scheme.min.js +0 -0
  843. pygpt_net/data/js/highlight/es/languages/scilab.js +0 -0
  844. pygpt_net/data/js/highlight/es/languages/scilab.min.js +0 -0
  845. pygpt_net/data/js/highlight/es/languages/scss.js +0 -0
  846. pygpt_net/data/js/highlight/es/languages/scss.min.js +0 -0
  847. pygpt_net/data/js/highlight/es/languages/shell.js +0 -0
  848. pygpt_net/data/js/highlight/es/languages/shell.min.js +0 -0
  849. pygpt_net/data/js/highlight/es/languages/smali.js +0 -0
  850. pygpt_net/data/js/highlight/es/languages/smali.min.js +0 -0
  851. pygpt_net/data/js/highlight/es/languages/smalltalk.js +0 -0
  852. pygpt_net/data/js/highlight/es/languages/smalltalk.min.js +0 -0
  853. pygpt_net/data/js/highlight/es/languages/sml.js +0 -0
  854. pygpt_net/data/js/highlight/es/languages/sml.min.js +0 -0
  855. pygpt_net/data/js/highlight/es/languages/sqf.js +0 -0
  856. pygpt_net/data/js/highlight/es/languages/sqf.min.js +0 -0
  857. pygpt_net/data/js/highlight/es/languages/sql.js +0 -0
  858. pygpt_net/data/js/highlight/es/languages/sql.min.js +0 -0
  859. pygpt_net/data/js/highlight/es/languages/stan.js +0 -0
  860. pygpt_net/data/js/highlight/es/languages/stan.min.js +0 -0
  861. pygpt_net/data/js/highlight/es/languages/stata.js +0 -0
  862. pygpt_net/data/js/highlight/es/languages/stata.min.js +0 -0
  863. pygpt_net/data/js/highlight/es/languages/step21.js +0 -0
  864. pygpt_net/data/js/highlight/es/languages/step21.min.js +0 -0
  865. pygpt_net/data/js/highlight/es/languages/stylus.js +0 -0
  866. pygpt_net/data/js/highlight/es/languages/stylus.min.js +0 -0
  867. pygpt_net/data/js/highlight/es/languages/subunit.js +0 -0
  868. pygpt_net/data/js/highlight/es/languages/subunit.min.js +0 -0
  869. pygpt_net/data/js/highlight/es/languages/swift.js +0 -0
  870. pygpt_net/data/js/highlight/es/languages/swift.min.js +0 -0
  871. pygpt_net/data/js/highlight/es/languages/taggerscript.js +0 -0
  872. pygpt_net/data/js/highlight/es/languages/taggerscript.min.js +0 -0
  873. pygpt_net/data/js/highlight/es/languages/tap.js +0 -0
  874. pygpt_net/data/js/highlight/es/languages/tap.min.js +0 -0
  875. pygpt_net/data/js/highlight/es/languages/tcl.js +0 -0
  876. pygpt_net/data/js/highlight/es/languages/tcl.min.js +0 -0
  877. pygpt_net/data/js/highlight/es/languages/thrift.js +0 -0
  878. pygpt_net/data/js/highlight/es/languages/thrift.min.js +0 -0
  879. pygpt_net/data/js/highlight/es/languages/tp.js +0 -0
  880. pygpt_net/data/js/highlight/es/languages/tp.min.js +0 -0
  881. pygpt_net/data/js/highlight/es/languages/twig.js +0 -0
  882. pygpt_net/data/js/highlight/es/languages/twig.min.js +0 -0
  883. pygpt_net/data/js/highlight/es/languages/typescript.js +0 -0
  884. pygpt_net/data/js/highlight/es/languages/typescript.min.js +0 -0
  885. pygpt_net/data/js/highlight/es/languages/vala.js +0 -0
  886. pygpt_net/data/js/highlight/es/languages/vala.min.js +0 -0
  887. pygpt_net/data/js/highlight/es/languages/vbnet.js +0 -0
  888. pygpt_net/data/js/highlight/es/languages/vbnet.min.js +0 -0
  889. pygpt_net/data/js/highlight/es/languages/vbscript-html.js +0 -0
  890. pygpt_net/data/js/highlight/es/languages/vbscript-html.min.js +0 -0
  891. pygpt_net/data/js/highlight/es/languages/vbscript.js +0 -0
  892. pygpt_net/data/js/highlight/es/languages/vbscript.min.js +0 -0
  893. pygpt_net/data/js/highlight/es/languages/verilog.js +0 -0
  894. pygpt_net/data/js/highlight/es/languages/verilog.min.js +0 -0
  895. pygpt_net/data/js/highlight/es/languages/vhdl.js +0 -0
  896. pygpt_net/data/js/highlight/es/languages/vhdl.min.js +0 -0
  897. pygpt_net/data/js/highlight/es/languages/vim.js +0 -0
  898. pygpt_net/data/js/highlight/es/languages/vim.min.js +0 -0
  899. pygpt_net/data/js/highlight/es/languages/wasm.js +0 -0
  900. pygpt_net/data/js/highlight/es/languages/wasm.min.js +0 -0
  901. pygpt_net/data/js/highlight/es/languages/wren.js +0 -0
  902. pygpt_net/data/js/highlight/es/languages/wren.min.js +0 -0
  903. pygpt_net/data/js/highlight/es/languages/x86asm.js +0 -0
  904. pygpt_net/data/js/highlight/es/languages/x86asm.min.js +0 -0
  905. pygpt_net/data/js/highlight/es/languages/xl.js +0 -0
  906. pygpt_net/data/js/highlight/es/languages/xl.min.js +0 -0
  907. pygpt_net/data/js/highlight/es/languages/xml.js +0 -0
  908. pygpt_net/data/js/highlight/es/languages/xml.min.js +0 -0
  909. pygpt_net/data/js/highlight/es/languages/xquery.js +0 -0
  910. pygpt_net/data/js/highlight/es/languages/xquery.min.js +0 -0
  911. pygpt_net/data/js/highlight/es/languages/yaml.js +0 -0
  912. pygpt_net/data/js/highlight/es/languages/yaml.min.js +0 -0
  913. pygpt_net/data/js/highlight/es/languages/zephir.js +0 -0
  914. pygpt_net/data/js/highlight/es/languages/zephir.min.js +0 -0
  915. pygpt_net/data/js/highlight/es/package.json +0 -0
  916. pygpt_net/data/js/highlight/highlight.js +0 -0
  917. pygpt_net/data/js/highlight/highlight.min.js +0 -0
  918. pygpt_net/data/js/highlight/languages/1c.js +0 -0
  919. pygpt_net/data/js/highlight/languages/1c.min.js +0 -0
  920. pygpt_net/data/js/highlight/languages/abnf.js +0 -0
  921. pygpt_net/data/js/highlight/languages/abnf.min.js +0 -0
  922. pygpt_net/data/js/highlight/languages/accesslog.js +0 -0
  923. pygpt_net/data/js/highlight/languages/accesslog.min.js +0 -0
  924. pygpt_net/data/js/highlight/languages/actionscript.js +0 -0
  925. pygpt_net/data/js/highlight/languages/actionscript.min.js +0 -0
  926. pygpt_net/data/js/highlight/languages/ada.js +0 -0
  927. pygpt_net/data/js/highlight/languages/ada.min.js +0 -0
  928. pygpt_net/data/js/highlight/languages/angelscript.js +0 -0
  929. pygpt_net/data/js/highlight/languages/angelscript.min.js +0 -0
  930. pygpt_net/data/js/highlight/languages/apache.js +0 -0
  931. pygpt_net/data/js/highlight/languages/apache.min.js +0 -0
  932. pygpt_net/data/js/highlight/languages/applescript.js +0 -0
  933. pygpt_net/data/js/highlight/languages/applescript.min.js +0 -0
  934. pygpt_net/data/js/highlight/languages/arcade.js +0 -0
  935. pygpt_net/data/js/highlight/languages/arcade.min.js +0 -0
  936. pygpt_net/data/js/highlight/languages/arduino.js +0 -0
  937. pygpt_net/data/js/highlight/languages/arduino.min.js +0 -0
  938. pygpt_net/data/js/highlight/languages/armasm.js +0 -0
  939. pygpt_net/data/js/highlight/languages/armasm.min.js +0 -0
  940. pygpt_net/data/js/highlight/languages/asciidoc.js +0 -0
  941. pygpt_net/data/js/highlight/languages/asciidoc.min.js +0 -0
  942. pygpt_net/data/js/highlight/languages/aspectj.js +0 -0
  943. pygpt_net/data/js/highlight/languages/aspectj.min.js +0 -0
  944. pygpt_net/data/js/highlight/languages/autohotkey.js +0 -0
  945. pygpt_net/data/js/highlight/languages/autohotkey.min.js +0 -0
  946. pygpt_net/data/js/highlight/languages/autoit.js +0 -0
  947. pygpt_net/data/js/highlight/languages/autoit.min.js +0 -0
  948. pygpt_net/data/js/highlight/languages/avrasm.js +0 -0
  949. pygpt_net/data/js/highlight/languages/avrasm.min.js +0 -0
  950. pygpt_net/data/js/highlight/languages/awk.js +0 -0
  951. pygpt_net/data/js/highlight/languages/awk.min.js +0 -0
  952. pygpt_net/data/js/highlight/languages/axapta.js +0 -0
  953. pygpt_net/data/js/highlight/languages/axapta.min.js +0 -0
  954. pygpt_net/data/js/highlight/languages/bash.js +0 -0
  955. pygpt_net/data/js/highlight/languages/bash.min.js +0 -0
  956. pygpt_net/data/js/highlight/languages/basic.js +0 -0
  957. pygpt_net/data/js/highlight/languages/basic.min.js +0 -0
  958. pygpt_net/data/js/highlight/languages/bnf.js +0 -0
  959. pygpt_net/data/js/highlight/languages/bnf.min.js +0 -0
  960. pygpt_net/data/js/highlight/languages/brainfuck.js +0 -0
  961. pygpt_net/data/js/highlight/languages/brainfuck.min.js +0 -0
  962. pygpt_net/data/js/highlight/languages/c.js +0 -0
  963. pygpt_net/data/js/highlight/languages/c.min.js +0 -0
  964. pygpt_net/data/js/highlight/languages/cal.js +0 -0
  965. pygpt_net/data/js/highlight/languages/cal.min.js +0 -0
  966. pygpt_net/data/js/highlight/languages/capnproto.js +0 -0
  967. pygpt_net/data/js/highlight/languages/capnproto.min.js +0 -0
  968. pygpt_net/data/js/highlight/languages/ceylon.js +0 -0
  969. pygpt_net/data/js/highlight/languages/ceylon.min.js +0 -0
  970. pygpt_net/data/js/highlight/languages/clean.js +0 -0
  971. pygpt_net/data/js/highlight/languages/clean.min.js +0 -0
  972. pygpt_net/data/js/highlight/languages/clojure-repl.js +0 -0
  973. pygpt_net/data/js/highlight/languages/clojure-repl.min.js +0 -0
  974. pygpt_net/data/js/highlight/languages/clojure.js +0 -0
  975. pygpt_net/data/js/highlight/languages/clojure.min.js +0 -0
  976. pygpt_net/data/js/highlight/languages/cmake.js +0 -0
  977. pygpt_net/data/js/highlight/languages/cmake.min.js +0 -0
  978. pygpt_net/data/js/highlight/languages/coffeescript.js +0 -0
  979. pygpt_net/data/js/highlight/languages/coffeescript.min.js +0 -0
  980. pygpt_net/data/js/highlight/languages/coq.js +0 -0
  981. pygpt_net/data/js/highlight/languages/coq.min.js +0 -0
  982. pygpt_net/data/js/highlight/languages/cos.js +0 -0
  983. pygpt_net/data/js/highlight/languages/cos.min.js +0 -0
  984. pygpt_net/data/js/highlight/languages/cpp.js +0 -0
  985. pygpt_net/data/js/highlight/languages/cpp.min.js +0 -0
  986. pygpt_net/data/js/highlight/languages/crmsh.js +0 -0
  987. pygpt_net/data/js/highlight/languages/crmsh.min.js +0 -0
  988. pygpt_net/data/js/highlight/languages/crystal.js +0 -0
  989. pygpt_net/data/js/highlight/languages/crystal.min.js +0 -0
  990. pygpt_net/data/js/highlight/languages/csharp.js +0 -0
  991. pygpt_net/data/js/highlight/languages/csharp.min.js +0 -0
  992. pygpt_net/data/js/highlight/languages/csp.js +0 -0
  993. pygpt_net/data/js/highlight/languages/csp.min.js +0 -0
  994. pygpt_net/data/js/highlight/languages/css.js +0 -0
  995. pygpt_net/data/js/highlight/languages/css.min.js +0 -0
  996. pygpt_net/data/js/highlight/languages/d.js +0 -0
  997. pygpt_net/data/js/highlight/languages/d.min.js +0 -0
  998. pygpt_net/data/js/highlight/languages/dart.js +0 -0
  999. pygpt_net/data/js/highlight/languages/dart.min.js +0 -0
  1000. pygpt_net/data/js/highlight/languages/delphi.js +0 -0
  1001. pygpt_net/data/js/highlight/languages/delphi.min.js +0 -0
  1002. pygpt_net/data/js/highlight/languages/diff.js +0 -0
  1003. pygpt_net/data/js/highlight/languages/diff.min.js +0 -0
  1004. pygpt_net/data/js/highlight/languages/django.js +0 -0
  1005. pygpt_net/data/js/highlight/languages/django.min.js +0 -0
  1006. pygpt_net/data/js/highlight/languages/dns.js +0 -0
  1007. pygpt_net/data/js/highlight/languages/dns.min.js +0 -0
  1008. pygpt_net/data/js/highlight/languages/dockerfile.js +0 -0
  1009. pygpt_net/data/js/highlight/languages/dockerfile.min.js +0 -0
  1010. pygpt_net/data/js/highlight/languages/dos.js +0 -0
  1011. pygpt_net/data/js/highlight/languages/dos.min.js +0 -0
  1012. pygpt_net/data/js/highlight/languages/dsconfig.js +0 -0
  1013. pygpt_net/data/js/highlight/languages/dsconfig.min.js +0 -0
  1014. pygpt_net/data/js/highlight/languages/dts.js +0 -0
  1015. pygpt_net/data/js/highlight/languages/dts.min.js +0 -0
  1016. pygpt_net/data/js/highlight/languages/dust.js +0 -0
  1017. pygpt_net/data/js/highlight/languages/dust.min.js +0 -0
  1018. pygpt_net/data/js/highlight/languages/ebnf.js +0 -0
  1019. pygpt_net/data/js/highlight/languages/ebnf.min.js +0 -0
  1020. pygpt_net/data/js/highlight/languages/elixir.js +0 -0
  1021. pygpt_net/data/js/highlight/languages/elixir.min.js +0 -0
  1022. pygpt_net/data/js/highlight/languages/elm.js +0 -0
  1023. pygpt_net/data/js/highlight/languages/elm.min.js +0 -0
  1024. pygpt_net/data/js/highlight/languages/erb.js +0 -0
  1025. pygpt_net/data/js/highlight/languages/erb.min.js +0 -0
  1026. pygpt_net/data/js/highlight/languages/erlang-repl.js +0 -0
  1027. pygpt_net/data/js/highlight/languages/erlang-repl.min.js +0 -0
  1028. pygpt_net/data/js/highlight/languages/erlang.js +0 -0
  1029. pygpt_net/data/js/highlight/languages/erlang.min.js +0 -0
  1030. pygpt_net/data/js/highlight/languages/excel.js +0 -0
  1031. pygpt_net/data/js/highlight/languages/excel.min.js +0 -0
  1032. pygpt_net/data/js/highlight/languages/fix.js +0 -0
  1033. pygpt_net/data/js/highlight/languages/fix.min.js +0 -0
  1034. pygpt_net/data/js/highlight/languages/flix.js +0 -0
  1035. pygpt_net/data/js/highlight/languages/flix.min.js +0 -0
  1036. pygpt_net/data/js/highlight/languages/fortran.js +0 -0
  1037. pygpt_net/data/js/highlight/languages/fortran.min.js +0 -0
  1038. pygpt_net/data/js/highlight/languages/fsharp.js +0 -0
  1039. pygpt_net/data/js/highlight/languages/fsharp.min.js +0 -0
  1040. pygpt_net/data/js/highlight/languages/gams.js +0 -0
  1041. pygpt_net/data/js/highlight/languages/gams.min.js +0 -0
  1042. pygpt_net/data/js/highlight/languages/gauss.js +0 -0
  1043. pygpt_net/data/js/highlight/languages/gauss.min.js +0 -0
  1044. pygpt_net/data/js/highlight/languages/gcode.js +0 -0
  1045. pygpt_net/data/js/highlight/languages/gcode.min.js +0 -0
  1046. pygpt_net/data/js/highlight/languages/gherkin.js +0 -0
  1047. pygpt_net/data/js/highlight/languages/gherkin.min.js +0 -0
  1048. pygpt_net/data/js/highlight/languages/glsl.js +0 -0
  1049. pygpt_net/data/js/highlight/languages/glsl.min.js +0 -0
  1050. pygpt_net/data/js/highlight/languages/gml.js +0 -0
  1051. pygpt_net/data/js/highlight/languages/gml.min.js +0 -0
  1052. pygpt_net/data/js/highlight/languages/go.js +0 -0
  1053. pygpt_net/data/js/highlight/languages/go.min.js +0 -0
  1054. pygpt_net/data/js/highlight/languages/golo.js +0 -0
  1055. pygpt_net/data/js/highlight/languages/golo.min.js +0 -0
  1056. pygpt_net/data/js/highlight/languages/gradle.js +0 -0
  1057. pygpt_net/data/js/highlight/languages/gradle.min.js +0 -0
  1058. pygpt_net/data/js/highlight/languages/graphql.js +0 -0
  1059. pygpt_net/data/js/highlight/languages/graphql.min.js +0 -0
  1060. pygpt_net/data/js/highlight/languages/groovy.js +0 -0
  1061. pygpt_net/data/js/highlight/languages/groovy.min.js +0 -0
  1062. pygpt_net/data/js/highlight/languages/haml.js +0 -0
  1063. pygpt_net/data/js/highlight/languages/haml.min.js +0 -0
  1064. pygpt_net/data/js/highlight/languages/handlebars.js +0 -0
  1065. pygpt_net/data/js/highlight/languages/handlebars.min.js +0 -0
  1066. pygpt_net/data/js/highlight/languages/haskell.js +0 -0
  1067. pygpt_net/data/js/highlight/languages/haskell.min.js +0 -0
  1068. pygpt_net/data/js/highlight/languages/haxe.js +0 -0
  1069. pygpt_net/data/js/highlight/languages/haxe.min.js +0 -0
  1070. pygpt_net/data/js/highlight/languages/hsp.js +0 -0
  1071. pygpt_net/data/js/highlight/languages/hsp.min.js +0 -0
  1072. pygpt_net/data/js/highlight/languages/http.js +0 -0
  1073. pygpt_net/data/js/highlight/languages/http.min.js +0 -0
  1074. pygpt_net/data/js/highlight/languages/hy.js +0 -0
  1075. pygpt_net/data/js/highlight/languages/hy.min.js +0 -0
  1076. pygpt_net/data/js/highlight/languages/inform7.js +0 -0
  1077. pygpt_net/data/js/highlight/languages/inform7.min.js +0 -0
  1078. pygpt_net/data/js/highlight/languages/ini.js +0 -0
  1079. pygpt_net/data/js/highlight/languages/ini.min.js +0 -0
  1080. pygpt_net/data/js/highlight/languages/irpf90.js +0 -0
  1081. pygpt_net/data/js/highlight/languages/irpf90.min.js +0 -0
  1082. pygpt_net/data/js/highlight/languages/isbl.js +0 -0
  1083. pygpt_net/data/js/highlight/languages/isbl.min.js +0 -0
  1084. pygpt_net/data/js/highlight/languages/java.js +0 -0
  1085. pygpt_net/data/js/highlight/languages/java.min.js +0 -0
  1086. pygpt_net/data/js/highlight/languages/javascript.js +0 -0
  1087. pygpt_net/data/js/highlight/languages/javascript.min.js +0 -0
  1088. pygpt_net/data/js/highlight/languages/jboss-cli.js +0 -0
  1089. pygpt_net/data/js/highlight/languages/jboss-cli.min.js +0 -0
  1090. pygpt_net/data/js/highlight/languages/json.js +0 -0
  1091. pygpt_net/data/js/highlight/languages/json.min.js +0 -0
  1092. pygpt_net/data/js/highlight/languages/julia-repl.js +0 -0
  1093. pygpt_net/data/js/highlight/languages/julia-repl.min.js +0 -0
  1094. pygpt_net/data/js/highlight/languages/julia.js +0 -0
  1095. pygpt_net/data/js/highlight/languages/julia.min.js +0 -0
  1096. pygpt_net/data/js/highlight/languages/kotlin.js +0 -0
  1097. pygpt_net/data/js/highlight/languages/kotlin.min.js +0 -0
  1098. pygpt_net/data/js/highlight/languages/lasso.js +0 -0
  1099. pygpt_net/data/js/highlight/languages/lasso.min.js +0 -0
  1100. pygpt_net/data/js/highlight/languages/latex.js +0 -0
  1101. pygpt_net/data/js/highlight/languages/latex.min.js +0 -0
  1102. pygpt_net/data/js/highlight/languages/ldif.js +0 -0
  1103. pygpt_net/data/js/highlight/languages/ldif.min.js +0 -0
  1104. pygpt_net/data/js/highlight/languages/leaf.js +0 -0
  1105. pygpt_net/data/js/highlight/languages/leaf.min.js +0 -0
  1106. pygpt_net/data/js/highlight/languages/less.js +0 -0
  1107. pygpt_net/data/js/highlight/languages/less.min.js +0 -0
  1108. pygpt_net/data/js/highlight/languages/lisp.js +0 -0
  1109. pygpt_net/data/js/highlight/languages/lisp.min.js +0 -0
  1110. pygpt_net/data/js/highlight/languages/livecodeserver.js +0 -0
  1111. pygpt_net/data/js/highlight/languages/livecodeserver.min.js +0 -0
  1112. pygpt_net/data/js/highlight/languages/livescript.js +0 -0
  1113. pygpt_net/data/js/highlight/languages/livescript.min.js +0 -0
  1114. pygpt_net/data/js/highlight/languages/llvm.js +0 -0
  1115. pygpt_net/data/js/highlight/languages/llvm.min.js +0 -0
  1116. pygpt_net/data/js/highlight/languages/lsl.js +0 -0
  1117. pygpt_net/data/js/highlight/languages/lsl.min.js +0 -0
  1118. pygpt_net/data/js/highlight/languages/lua.js +0 -0
  1119. pygpt_net/data/js/highlight/languages/lua.min.js +0 -0
  1120. pygpt_net/data/js/highlight/languages/makefile.js +0 -0
  1121. pygpt_net/data/js/highlight/languages/makefile.min.js +0 -0
  1122. pygpt_net/data/js/highlight/languages/markdown.js +0 -0
  1123. pygpt_net/data/js/highlight/languages/markdown.min.js +0 -0
  1124. pygpt_net/data/js/highlight/languages/mathematica.js +0 -0
  1125. pygpt_net/data/js/highlight/languages/mathematica.min.js +0 -0
  1126. pygpt_net/data/js/highlight/languages/matlab.js +0 -0
  1127. pygpt_net/data/js/highlight/languages/matlab.min.js +0 -0
  1128. pygpt_net/data/js/highlight/languages/maxima.js +0 -0
  1129. pygpt_net/data/js/highlight/languages/maxima.min.js +0 -0
  1130. pygpt_net/data/js/highlight/languages/mel.js +0 -0
  1131. pygpt_net/data/js/highlight/languages/mel.min.js +0 -0
  1132. pygpt_net/data/js/highlight/languages/mercury.js +0 -0
  1133. pygpt_net/data/js/highlight/languages/mercury.min.js +0 -0
  1134. pygpt_net/data/js/highlight/languages/mipsasm.js +0 -0
  1135. pygpt_net/data/js/highlight/languages/mipsasm.min.js +0 -0
  1136. pygpt_net/data/js/highlight/languages/mizar.js +0 -0
  1137. pygpt_net/data/js/highlight/languages/mizar.min.js +0 -0
  1138. pygpt_net/data/js/highlight/languages/mojolicious.js +0 -0
  1139. pygpt_net/data/js/highlight/languages/mojolicious.min.js +0 -0
  1140. pygpt_net/data/js/highlight/languages/monkey.js +0 -0
  1141. pygpt_net/data/js/highlight/languages/monkey.min.js +0 -0
  1142. pygpt_net/data/js/highlight/languages/moonscript.js +0 -0
  1143. pygpt_net/data/js/highlight/languages/moonscript.min.js +0 -0
  1144. pygpt_net/data/js/highlight/languages/n1ql.js +0 -0
  1145. pygpt_net/data/js/highlight/languages/n1ql.min.js +0 -0
  1146. pygpt_net/data/js/highlight/languages/nestedtext.js +0 -0
  1147. pygpt_net/data/js/highlight/languages/nestedtext.min.js +0 -0
  1148. pygpt_net/data/js/highlight/languages/nginx.js +0 -0
  1149. pygpt_net/data/js/highlight/languages/nginx.min.js +0 -0
  1150. pygpt_net/data/js/highlight/languages/nim.js +0 -0
  1151. pygpt_net/data/js/highlight/languages/nim.min.js +0 -0
  1152. pygpt_net/data/js/highlight/languages/nix.js +0 -0
  1153. pygpt_net/data/js/highlight/languages/nix.min.js +0 -0
  1154. pygpt_net/data/js/highlight/languages/node-repl.js +0 -0
  1155. pygpt_net/data/js/highlight/languages/node-repl.min.js +0 -0
  1156. pygpt_net/data/js/highlight/languages/nsis.js +0 -0
  1157. pygpt_net/data/js/highlight/languages/nsis.min.js +0 -0
  1158. pygpt_net/data/js/highlight/languages/objectivec.js +0 -0
  1159. pygpt_net/data/js/highlight/languages/objectivec.min.js +0 -0
  1160. pygpt_net/data/js/highlight/languages/ocaml.js +0 -0
  1161. pygpt_net/data/js/highlight/languages/ocaml.min.js +0 -0
  1162. pygpt_net/data/js/highlight/languages/openscad.js +0 -0
  1163. pygpt_net/data/js/highlight/languages/openscad.min.js +0 -0
  1164. pygpt_net/data/js/highlight/languages/oxygene.js +0 -0
  1165. pygpt_net/data/js/highlight/languages/oxygene.min.js +0 -0
  1166. pygpt_net/data/js/highlight/languages/parser3.js +0 -0
  1167. pygpt_net/data/js/highlight/languages/parser3.min.js +0 -0
  1168. pygpt_net/data/js/highlight/languages/perl.js +0 -0
  1169. pygpt_net/data/js/highlight/languages/perl.min.js +0 -0
  1170. pygpt_net/data/js/highlight/languages/pf.js +0 -0
  1171. pygpt_net/data/js/highlight/languages/pf.min.js +0 -0
  1172. pygpt_net/data/js/highlight/languages/pgsql.js +0 -0
  1173. pygpt_net/data/js/highlight/languages/pgsql.min.js +0 -0
  1174. pygpt_net/data/js/highlight/languages/php-template.js +0 -0
  1175. pygpt_net/data/js/highlight/languages/php-template.min.js +0 -0
  1176. pygpt_net/data/js/highlight/languages/php.js +0 -0
  1177. pygpt_net/data/js/highlight/languages/php.min.js +0 -0
  1178. pygpt_net/data/js/highlight/languages/plaintext.js +0 -0
  1179. pygpt_net/data/js/highlight/languages/plaintext.min.js +0 -0
  1180. pygpt_net/data/js/highlight/languages/pony.js +0 -0
  1181. pygpt_net/data/js/highlight/languages/pony.min.js +0 -0
  1182. pygpt_net/data/js/highlight/languages/powershell.js +0 -0
  1183. pygpt_net/data/js/highlight/languages/powershell.min.js +0 -0
  1184. pygpt_net/data/js/highlight/languages/processing.js +0 -0
  1185. pygpt_net/data/js/highlight/languages/processing.min.js +0 -0
  1186. pygpt_net/data/js/highlight/languages/profile.js +0 -0
  1187. pygpt_net/data/js/highlight/languages/profile.min.js +0 -0
  1188. pygpt_net/data/js/highlight/languages/prolog.js +0 -0
  1189. pygpt_net/data/js/highlight/languages/prolog.min.js +0 -0
  1190. pygpt_net/data/js/highlight/languages/properties.js +0 -0
  1191. pygpt_net/data/js/highlight/languages/properties.min.js +0 -0
  1192. pygpt_net/data/js/highlight/languages/protobuf.js +0 -0
  1193. pygpt_net/data/js/highlight/languages/protobuf.min.js +0 -0
  1194. pygpt_net/data/js/highlight/languages/puppet.js +0 -0
  1195. pygpt_net/data/js/highlight/languages/puppet.min.js +0 -0
  1196. pygpt_net/data/js/highlight/languages/purebasic.js +0 -0
  1197. pygpt_net/data/js/highlight/languages/purebasic.min.js +0 -0
  1198. pygpt_net/data/js/highlight/languages/python-repl.js +0 -0
  1199. pygpt_net/data/js/highlight/languages/python-repl.min.js +0 -0
  1200. pygpt_net/data/js/highlight/languages/python.js +0 -0
  1201. pygpt_net/data/js/highlight/languages/python.min.js +0 -0
  1202. pygpt_net/data/js/highlight/languages/q.js +0 -0
  1203. pygpt_net/data/js/highlight/languages/q.min.js +0 -0
  1204. pygpt_net/data/js/highlight/languages/qml.js +0 -0
  1205. pygpt_net/data/js/highlight/languages/qml.min.js +0 -0
  1206. pygpt_net/data/js/highlight/languages/r.js +0 -0
  1207. pygpt_net/data/js/highlight/languages/r.min.js +0 -0
  1208. pygpt_net/data/js/highlight/languages/reasonml.js +0 -0
  1209. pygpt_net/data/js/highlight/languages/reasonml.min.js +0 -0
  1210. pygpt_net/data/js/highlight/languages/rib.js +0 -0
  1211. pygpt_net/data/js/highlight/languages/rib.min.js +0 -0
  1212. pygpt_net/data/js/highlight/languages/roboconf.js +0 -0
  1213. pygpt_net/data/js/highlight/languages/roboconf.min.js +0 -0
  1214. pygpt_net/data/js/highlight/languages/routeros.js +0 -0
  1215. pygpt_net/data/js/highlight/languages/routeros.min.js +0 -0
  1216. pygpt_net/data/js/highlight/languages/rsl.js +0 -0
  1217. pygpt_net/data/js/highlight/languages/rsl.min.js +0 -0
  1218. pygpt_net/data/js/highlight/languages/ruby.js +0 -0
  1219. pygpt_net/data/js/highlight/languages/ruby.min.js +0 -0
  1220. pygpt_net/data/js/highlight/languages/ruleslanguage.js +0 -0
  1221. pygpt_net/data/js/highlight/languages/ruleslanguage.min.js +0 -0
  1222. pygpt_net/data/js/highlight/languages/rust.js +0 -0
  1223. pygpt_net/data/js/highlight/languages/rust.min.js +0 -0
  1224. pygpt_net/data/js/highlight/languages/sas.js +0 -0
  1225. pygpt_net/data/js/highlight/languages/sas.min.js +0 -0
  1226. pygpt_net/data/js/highlight/languages/scala.js +0 -0
  1227. pygpt_net/data/js/highlight/languages/scala.min.js +0 -0
  1228. pygpt_net/data/js/highlight/languages/scheme.js +0 -0
  1229. pygpt_net/data/js/highlight/languages/scheme.min.js +0 -0
  1230. pygpt_net/data/js/highlight/languages/scilab.js +0 -0
  1231. pygpt_net/data/js/highlight/languages/scilab.min.js +0 -0
  1232. pygpt_net/data/js/highlight/languages/scss.js +0 -0
  1233. pygpt_net/data/js/highlight/languages/scss.min.js +0 -0
  1234. pygpt_net/data/js/highlight/languages/shell.js +0 -0
  1235. pygpt_net/data/js/highlight/languages/shell.min.js +0 -0
  1236. pygpt_net/data/js/highlight/languages/smali.js +0 -0
  1237. pygpt_net/data/js/highlight/languages/smali.min.js +0 -0
  1238. pygpt_net/data/js/highlight/languages/smalltalk.js +0 -0
  1239. pygpt_net/data/js/highlight/languages/smalltalk.min.js +0 -0
  1240. pygpt_net/data/js/highlight/languages/sml.js +0 -0
  1241. pygpt_net/data/js/highlight/languages/sml.min.js +0 -0
  1242. pygpt_net/data/js/highlight/languages/sqf.js +0 -0
  1243. pygpt_net/data/js/highlight/languages/sqf.min.js +0 -0
  1244. pygpt_net/data/js/highlight/languages/sql.js +0 -0
  1245. pygpt_net/data/js/highlight/languages/sql.min.js +0 -0
  1246. pygpt_net/data/js/highlight/languages/stan.js +0 -0
  1247. pygpt_net/data/js/highlight/languages/stan.min.js +0 -0
  1248. pygpt_net/data/js/highlight/languages/stata.js +0 -0
  1249. pygpt_net/data/js/highlight/languages/stata.min.js +0 -0
  1250. pygpt_net/data/js/highlight/languages/step21.js +0 -0
  1251. pygpt_net/data/js/highlight/languages/step21.min.js +0 -0
  1252. pygpt_net/data/js/highlight/languages/stylus.js +0 -0
  1253. pygpt_net/data/js/highlight/languages/stylus.min.js +0 -0
  1254. pygpt_net/data/js/highlight/languages/subunit.js +0 -0
  1255. pygpt_net/data/js/highlight/languages/subunit.min.js +0 -0
  1256. pygpt_net/data/js/highlight/languages/swift.js +0 -0
  1257. pygpt_net/data/js/highlight/languages/swift.min.js +0 -0
  1258. pygpt_net/data/js/highlight/languages/taggerscript.js +0 -0
  1259. pygpt_net/data/js/highlight/languages/taggerscript.min.js +0 -0
  1260. pygpt_net/data/js/highlight/languages/tap.js +0 -0
  1261. pygpt_net/data/js/highlight/languages/tap.min.js +0 -0
  1262. pygpt_net/data/js/highlight/languages/tcl.js +0 -0
  1263. pygpt_net/data/js/highlight/languages/tcl.min.js +0 -0
  1264. pygpt_net/data/js/highlight/languages/thrift.js +0 -0
  1265. pygpt_net/data/js/highlight/languages/thrift.min.js +0 -0
  1266. pygpt_net/data/js/highlight/languages/tp.js +0 -0
  1267. pygpt_net/data/js/highlight/languages/tp.min.js +0 -0
  1268. pygpt_net/data/js/highlight/languages/twig.js +0 -0
  1269. pygpt_net/data/js/highlight/languages/twig.min.js +0 -0
  1270. pygpt_net/data/js/highlight/languages/typescript.js +0 -0
  1271. pygpt_net/data/js/highlight/languages/typescript.min.js +0 -0
  1272. pygpt_net/data/js/highlight/languages/vala.js +0 -0
  1273. pygpt_net/data/js/highlight/languages/vala.min.js +0 -0
  1274. pygpt_net/data/js/highlight/languages/vbnet.js +0 -0
  1275. pygpt_net/data/js/highlight/languages/vbnet.min.js +0 -0
  1276. pygpt_net/data/js/highlight/languages/vbscript-html.js +0 -0
  1277. pygpt_net/data/js/highlight/languages/vbscript-html.min.js +0 -0
  1278. pygpt_net/data/js/highlight/languages/vbscript.js +0 -0
  1279. pygpt_net/data/js/highlight/languages/vbscript.min.js +0 -0
  1280. pygpt_net/data/js/highlight/languages/verilog.js +0 -0
  1281. pygpt_net/data/js/highlight/languages/verilog.min.js +0 -0
  1282. pygpt_net/data/js/highlight/languages/vhdl.js +0 -0
  1283. pygpt_net/data/js/highlight/languages/vhdl.min.js +0 -0
  1284. pygpt_net/data/js/highlight/languages/vim.js +0 -0
  1285. pygpt_net/data/js/highlight/languages/vim.min.js +0 -0
  1286. pygpt_net/data/js/highlight/languages/wasm.js +0 -0
  1287. pygpt_net/data/js/highlight/languages/wasm.min.js +0 -0
  1288. pygpt_net/data/js/highlight/languages/wren.js +0 -0
  1289. pygpt_net/data/js/highlight/languages/wren.min.js +0 -0
  1290. pygpt_net/data/js/highlight/languages/x86asm.js +0 -0
  1291. pygpt_net/data/js/highlight/languages/x86asm.min.js +0 -0
  1292. pygpt_net/data/js/highlight/languages/xl.js +0 -0
  1293. pygpt_net/data/js/highlight/languages/xl.min.js +0 -0
  1294. pygpt_net/data/js/highlight/languages/xml.js +0 -0
  1295. pygpt_net/data/js/highlight/languages/xml.min.js +0 -0
  1296. pygpt_net/data/js/highlight/languages/xquery.js +0 -0
  1297. pygpt_net/data/js/highlight/languages/xquery.min.js +0 -0
  1298. pygpt_net/data/js/highlight/languages/yaml.js +0 -0
  1299. pygpt_net/data/js/highlight/languages/yaml.min.js +0 -0
  1300. pygpt_net/data/js/highlight/languages/zephir.js +0 -0
  1301. pygpt_net/data/js/highlight/languages/zephir.min.js +0 -0
  1302. pygpt_net/data/js/highlight/package.json +0 -0
  1303. pygpt_net/data/js/highlight/styles/1c-light.css +0 -0
  1304. pygpt_net/data/js/highlight/styles/1c-light.min.css +0 -0
  1305. pygpt_net/data/js/highlight/styles/a11y-dark.css +0 -0
  1306. pygpt_net/data/js/highlight/styles/a11y-dark.min.css +0 -0
  1307. pygpt_net/data/js/highlight/styles/a11y-light.css +0 -0
  1308. pygpt_net/data/js/highlight/styles/a11y-light.min.css +0 -0
  1309. pygpt_net/data/js/highlight/styles/agate.css +0 -0
  1310. pygpt_net/data/js/highlight/styles/agate.min.css +0 -0
  1311. pygpt_net/data/js/highlight/styles/an-old-hope.css +0 -0
  1312. pygpt_net/data/js/highlight/styles/an-old-hope.min.css +0 -0
  1313. pygpt_net/data/js/highlight/styles/androidstudio.css +0 -0
  1314. pygpt_net/data/js/highlight/styles/androidstudio.min.css +0 -0
  1315. pygpt_net/data/js/highlight/styles/arduino-light.css +0 -0
  1316. pygpt_net/data/js/highlight/styles/arduino-light.min.css +0 -0
  1317. pygpt_net/data/js/highlight/styles/arta.css +0 -0
  1318. pygpt_net/data/js/highlight/styles/arta.min.css +0 -0
  1319. pygpt_net/data/js/highlight/styles/ascetic.css +0 -0
  1320. pygpt_net/data/js/highlight/styles/ascetic.min.css +0 -0
  1321. pygpt_net/data/js/highlight/styles/atom-one-dark-reasonable.css +0 -0
  1322. pygpt_net/data/js/highlight/styles/atom-one-dark-reasonable.min.css +0 -0
  1323. pygpt_net/data/js/highlight/styles/atom-one-dark.css +0 -0
  1324. pygpt_net/data/js/highlight/styles/atom-one-dark.min.css +0 -0
  1325. pygpt_net/data/js/highlight/styles/atom-one-light.css +0 -0
  1326. pygpt_net/data/js/highlight/styles/atom-one-light.min.css +0 -0
  1327. pygpt_net/data/js/highlight/styles/brown-paper.css +0 -0
  1328. pygpt_net/data/js/highlight/styles/brown-paper.min.css +0 -0
  1329. pygpt_net/data/js/highlight/styles/brown-papersq.png +0 -0
  1330. pygpt_net/data/js/highlight/styles/codepen-embed.css +0 -0
  1331. pygpt_net/data/js/highlight/styles/codepen-embed.min.css +0 -0
  1332. pygpt_net/data/js/highlight/styles/codeschool.css +0 -0
  1333. pygpt_net/data/js/highlight/styles/codeschool.min.css +0 -0
  1334. pygpt_net/data/js/highlight/styles/color-brewer.css +0 -0
  1335. pygpt_net/data/js/highlight/styles/color-brewer.min.css +0 -0
  1336. pygpt_net/data/js/highlight/styles/darcula.css +0 -0
  1337. pygpt_net/data/js/highlight/styles/darcula.min.css +0 -0
  1338. pygpt_net/data/js/highlight/styles/dark.css +0 -0
  1339. pygpt_net/data/js/highlight/styles/dark.min.css +0 -0
  1340. pygpt_net/data/js/highlight/styles/default-dark.css +0 -0
  1341. pygpt_net/data/js/highlight/styles/default-dark.min.css +0 -0
  1342. pygpt_net/data/js/highlight/styles/default-light.css +0 -0
  1343. pygpt_net/data/js/highlight/styles/default-light.min.css +0 -0
  1344. pygpt_net/data/js/highlight/styles/default.css +0 -0
  1345. pygpt_net/data/js/highlight/styles/default.min.css +0 -0
  1346. pygpt_net/data/js/highlight/styles/devibeans.css +0 -0
  1347. pygpt_net/data/js/highlight/styles/devibeans.min.css +0 -0
  1348. pygpt_net/data/js/highlight/styles/docco.css +0 -0
  1349. pygpt_net/data/js/highlight/styles/docco.min.css +0 -0
  1350. pygpt_net/data/js/highlight/styles/far.css +0 -0
  1351. pygpt_net/data/js/highlight/styles/far.min.css +0 -0
  1352. pygpt_net/data/js/highlight/styles/felipec.css +0 -0
  1353. pygpt_net/data/js/highlight/styles/felipec.min.css +0 -0
  1354. pygpt_net/data/js/highlight/styles/foundation.css +0 -0
  1355. pygpt_net/data/js/highlight/styles/foundation.min.css +0 -0
  1356. pygpt_net/data/js/highlight/styles/github-dark-dimmed.css +0 -0
  1357. pygpt_net/data/js/highlight/styles/github-dark-dimmed.min.css +0 -0
  1358. pygpt_net/data/js/highlight/styles/github-dark.css +0 -0
  1359. pygpt_net/data/js/highlight/styles/github-dark.min.css +0 -0
  1360. pygpt_net/data/js/highlight/styles/github.css +0 -0
  1361. pygpt_net/data/js/highlight/styles/github.min.css +0 -0
  1362. pygpt_net/data/js/highlight/styles/gml.css +0 -0
  1363. pygpt_net/data/js/highlight/styles/gml.min.css +0 -0
  1364. pygpt_net/data/js/highlight/styles/googlecode.css +0 -0
  1365. pygpt_net/data/js/highlight/styles/googlecode.min.css +0 -0
  1366. pygpt_net/data/js/highlight/styles/gradient-dark.css +0 -0
  1367. pygpt_net/data/js/highlight/styles/gradient-dark.min.css +0 -0
  1368. pygpt_net/data/js/highlight/styles/gradient-light.css +0 -0
  1369. pygpt_net/data/js/highlight/styles/gradient-light.min.css +0 -0
  1370. pygpt_net/data/js/highlight/styles/grayscale.css +0 -0
  1371. pygpt_net/data/js/highlight/styles/grayscale.min.css +0 -0
  1372. pygpt_net/data/js/highlight/styles/hybrid.css +0 -0
  1373. pygpt_net/data/js/highlight/styles/hybrid.min.css +0 -0
  1374. pygpt_net/data/js/highlight/styles/idea.css +0 -0
  1375. pygpt_net/data/js/highlight/styles/idea.min.css +0 -0
  1376. pygpt_net/data/js/highlight/styles/intellij-light.css +0 -0
  1377. pygpt_net/data/js/highlight/styles/intellij-light.min.css +0 -0
  1378. pygpt_net/data/js/highlight/styles/ir-black.css +0 -0
  1379. pygpt_net/data/js/highlight/styles/ir-black.min.css +0 -0
  1380. pygpt_net/data/js/highlight/styles/isbl-editor-dark.css +0 -0
  1381. pygpt_net/data/js/highlight/styles/isbl-editor-dark.min.css +0 -0
  1382. pygpt_net/data/js/highlight/styles/isbl-editor-light.css +0 -0
  1383. pygpt_net/data/js/highlight/styles/isbl-editor-light.min.css +0 -0
  1384. pygpt_net/data/js/highlight/styles/kimbie-dark.css +0 -0
  1385. pygpt_net/data/js/highlight/styles/kimbie-dark.min.css +0 -0
  1386. pygpt_net/data/js/highlight/styles/kimbie-light.css +0 -0
  1387. pygpt_net/data/js/highlight/styles/kimbie-light.min.css +0 -0
  1388. pygpt_net/data/js/highlight/styles/lightfair.css +0 -0
  1389. pygpt_net/data/js/highlight/styles/lightfair.min.css +0 -0
  1390. pygpt_net/data/js/highlight/styles/lioshi.css +0 -0
  1391. pygpt_net/data/js/highlight/styles/lioshi.min.css +0 -0
  1392. pygpt_net/data/js/highlight/styles/magula.css +0 -0
  1393. pygpt_net/data/js/highlight/styles/magula.min.css +0 -0
  1394. pygpt_net/data/js/highlight/styles/material-darker.css +0 -0
  1395. pygpt_net/data/js/highlight/styles/material-darker.min.css +0 -0
  1396. pygpt_net/data/js/highlight/styles/material-lighter.css +0 -0
  1397. pygpt_net/data/js/highlight/styles/material-lighter.min.css +0 -0
  1398. pygpt_net/data/js/highlight/styles/material-palenight.css +0 -0
  1399. pygpt_net/data/js/highlight/styles/material-palenight.min.css +0 -0
  1400. pygpt_net/data/js/highlight/styles/material-vivid.css +0 -0
  1401. pygpt_net/data/js/highlight/styles/material-vivid.min.css +0 -0
  1402. pygpt_net/data/js/highlight/styles/material.css +0 -0
  1403. pygpt_net/data/js/highlight/styles/material.min.css +0 -0
  1404. pygpt_net/data/js/highlight/styles/mono-blue.css +0 -0
  1405. pygpt_net/data/js/highlight/styles/mono-blue.min.css +0 -0
  1406. pygpt_net/data/js/highlight/styles/monokai-sublime.css +0 -0
  1407. pygpt_net/data/js/highlight/styles/monokai-sublime.min.css +0 -0
  1408. pygpt_net/data/js/highlight/styles/monokai.css +0 -0
  1409. pygpt_net/data/js/highlight/styles/monokai.min.css +0 -0
  1410. pygpt_net/data/js/highlight/styles/night-owl.css +0 -0
  1411. pygpt_net/data/js/highlight/styles/night-owl.min.css +0 -0
  1412. pygpt_net/data/js/highlight/styles/nnfx-dark.css +0 -0
  1413. pygpt_net/data/js/highlight/styles/nnfx-dark.min.css +0 -0
  1414. pygpt_net/data/js/highlight/styles/nnfx-light.css +0 -0
  1415. pygpt_net/data/js/highlight/styles/nnfx-light.min.css +0 -0
  1416. pygpt_net/data/js/highlight/styles/nord.css +0 -0
  1417. pygpt_net/data/js/highlight/styles/nord.min.css +0 -0
  1418. pygpt_net/data/js/highlight/styles/obsidian.css +0 -0
  1419. pygpt_net/data/js/highlight/styles/obsidian.min.css +0 -0
  1420. pygpt_net/data/js/highlight/styles/panda-syntax-dark.css +0 -0
  1421. pygpt_net/data/js/highlight/styles/panda-syntax-dark.min.css +0 -0
  1422. pygpt_net/data/js/highlight/styles/panda-syntax-light.css +0 -0
  1423. pygpt_net/data/js/highlight/styles/panda-syntax-light.min.css +0 -0
  1424. pygpt_net/data/js/highlight/styles/paraiso-dark.css +0 -0
  1425. pygpt_net/data/js/highlight/styles/paraiso-dark.min.css +0 -0
  1426. pygpt_net/data/js/highlight/styles/paraiso-light.css +0 -0
  1427. pygpt_net/data/js/highlight/styles/paraiso-light.min.css +0 -0
  1428. pygpt_net/data/js/highlight/styles/pojoaque.css +0 -0
  1429. pygpt_net/data/js/highlight/styles/pojoaque.jpg +0 -0
  1430. pygpt_net/data/js/highlight/styles/pojoaque.min.css +0 -0
  1431. pygpt_net/data/js/highlight/styles/purebasic.css +0 -0
  1432. pygpt_net/data/js/highlight/styles/purebasic.min.css +0 -0
  1433. pygpt_net/data/js/highlight/styles/qtcreator-dark.css +0 -0
  1434. pygpt_net/data/js/highlight/styles/qtcreator-dark.min.css +0 -0
  1435. pygpt_net/data/js/highlight/styles/qtcreator-light.css +0 -0
  1436. pygpt_net/data/js/highlight/styles/qtcreator-light.min.css +0 -0
  1437. pygpt_net/data/js/highlight/styles/rainbow.css +0 -0
  1438. pygpt_net/data/js/highlight/styles/rainbow.min.css +0 -0
  1439. pygpt_net/data/js/highlight/styles/routeros.css +0 -0
  1440. pygpt_net/data/js/highlight/styles/routeros.min.css +0 -0
  1441. pygpt_net/data/js/highlight/styles/school-book.css +0 -0
  1442. pygpt_net/data/js/highlight/styles/school-book.min.css +0 -0
  1443. pygpt_net/data/js/highlight/styles/shades-of-purple.css +0 -0
  1444. pygpt_net/data/js/highlight/styles/shades-of-purple.min.css +0 -0
  1445. pygpt_net/data/js/highlight/styles/srcery.css +0 -0
  1446. pygpt_net/data/js/highlight/styles/srcery.min.css +0 -0
  1447. pygpt_net/data/js/highlight/styles/stackoverflow-dark.css +0 -0
  1448. pygpt_net/data/js/highlight/styles/stackoverflow-dark.min.css +0 -0
  1449. pygpt_net/data/js/highlight/styles/stackoverflow-light.css +0 -0
  1450. pygpt_net/data/js/highlight/styles/stackoverflow-light.min.css +0 -0
  1451. pygpt_net/data/js/highlight/styles/sunburst.css +0 -0
  1452. pygpt_net/data/js/highlight/styles/sunburst.min.css +0 -0
  1453. pygpt_net/data/js/highlight/styles/tokyo-night-dark.css +0 -0
  1454. pygpt_net/data/js/highlight/styles/tokyo-night-dark.min.css +0 -0
  1455. pygpt_net/data/js/highlight/styles/tokyo-night-light.css +0 -0
  1456. pygpt_net/data/js/highlight/styles/tokyo-night-light.min.css +0 -0
  1457. pygpt_net/data/js/highlight/styles/tomorrow-night-blue.css +0 -0
  1458. pygpt_net/data/js/highlight/styles/tomorrow-night-blue.min.css +0 -0
  1459. pygpt_net/data/js/highlight/styles/tomorrow-night-bright.css +0 -0
  1460. pygpt_net/data/js/highlight/styles/tomorrow-night-bright.min.css +0 -0
  1461. pygpt_net/data/js/highlight/styles/vs.css +0 -0
  1462. pygpt_net/data/js/highlight/styles/vs.min.css +0 -0
  1463. pygpt_net/data/js/highlight/styles/vs2015.css +0 -0
  1464. pygpt_net/data/js/highlight/styles/vs2015.min.css +0 -0
  1465. pygpt_net/data/js/highlight/styles/windows-10-light.css +0 -0
  1466. pygpt_net/data/js/highlight/styles/windows-10-light.min.css +0 -0
  1467. pygpt_net/data/js/highlight/styles/windows-10.css +0 -0
  1468. pygpt_net/data/js/highlight/styles/windows-10.min.css +0 -0
  1469. pygpt_net/data/js/highlight/styles/xcode.css +0 -0
  1470. pygpt_net/data/js/highlight/styles/xcode.min.css +0 -0
  1471. pygpt_net/data/js/highlight/styles/xt256.css +0 -0
  1472. pygpt_net/data/js/highlight/styles/xt256.min.css +0 -0
  1473. pygpt_net/data/js/katex/auto-render.min.js +0 -0
  1474. pygpt_net/data/js/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
  1475. pygpt_net/data/js/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
  1476. pygpt_net/data/js/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  1477. pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  1478. pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  1479. pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  1480. pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  1481. pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  1482. pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  1483. pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  1484. pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  1485. pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  1486. pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  1487. pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  1488. pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  1489. pygpt_net/data/js/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
  1490. pygpt_net/data/js/katex/fonts/KaTeX_Main-Bold.woff +0 -0
  1491. pygpt_net/data/js/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  1492. pygpt_net/data/js/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  1493. pygpt_net/data/js/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  1494. pygpt_net/data/js/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  1495. pygpt_net/data/js/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
  1496. pygpt_net/data/js/katex/fonts/KaTeX_Main-Italic.woff +0 -0
  1497. pygpt_net/data/js/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  1498. pygpt_net/data/js/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
  1499. pygpt_net/data/js/katex/fonts/KaTeX_Main-Regular.woff +0 -0
  1500. pygpt_net/data/js/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  1501. pygpt_net/data/js/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  1502. pygpt_net/data/js/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  1503. pygpt_net/data/js/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  1504. pygpt_net/data/js/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
  1505. pygpt_net/data/js/katex/fonts/KaTeX_Math-Italic.woff +0 -0
  1506. pygpt_net/data/js/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  1507. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  1508. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  1509. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  1510. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  1511. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  1512. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  1513. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  1514. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  1515. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  1516. pygpt_net/data/js/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
  1517. pygpt_net/data/js/katex/fonts/KaTeX_Script-Regular.woff +0 -0
  1518. pygpt_net/data/js/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  1519. pygpt_net/data/js/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
  1520. pygpt_net/data/js/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
  1521. pygpt_net/data/js/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  1522. pygpt_net/data/js/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
  1523. pygpt_net/data/js/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
  1524. pygpt_net/data/js/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  1525. pygpt_net/data/js/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
  1526. pygpt_net/data/js/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
  1527. pygpt_net/data/js/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  1528. pygpt_net/data/js/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
  1529. pygpt_net/data/js/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
  1530. pygpt_net/data/js/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  1531. pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  1532. pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  1533. pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  1534. pygpt_net/data/js/katex/katex.min.css +0 -0
  1535. pygpt_net/data/js/katex/katex.min.js +0 -0
  1536. pygpt_net/data/js/markdown-it/markdown-it-katex.min.js +8 -0
  1537. pygpt_net/data/js/markdown-it/markdown-it.min.js +2 -0
  1538. pygpt_net/data/languages.csv +0 -0
  1539. pygpt_net/data/locale/locale.de.ini +0 -0
  1540. pygpt_net/data/locale/locale.en.ini +4 -0
  1541. pygpt_net/data/locale/locale.es.ini +0 -0
  1542. pygpt_net/data/locale/locale.fr.ini +0 -0
  1543. pygpt_net/data/locale/locale.it.ini +0 -0
  1544. pygpt_net/data/locale/locale.pl.ini +0 -0
  1545. pygpt_net/data/locale/locale.uk.ini +0 -0
  1546. pygpt_net/data/locale/locale.zh.ini +0 -0
  1547. pygpt_net/data/locale/plugin.agent.de.ini +0 -0
  1548. pygpt_net/data/locale/plugin.agent.en.ini +0 -0
  1549. pygpt_net/data/locale/plugin.agent.es.ini +0 -0
  1550. pygpt_net/data/locale/plugin.agent.fr.ini +0 -0
  1551. pygpt_net/data/locale/plugin.agent.it.ini +0 -0
  1552. pygpt_net/data/locale/plugin.agent.pl.ini +0 -0
  1553. pygpt_net/data/locale/plugin.agent.uk.ini +0 -0
  1554. pygpt_net/data/locale/plugin.agent.zh.ini +0 -0
  1555. pygpt_net/data/locale/plugin.audio_input.de.ini +0 -0
  1556. pygpt_net/data/locale/plugin.audio_input.en.ini +0 -0
  1557. pygpt_net/data/locale/plugin.audio_input.es.ini +0 -0
  1558. pygpt_net/data/locale/plugin.audio_input.fr.ini +0 -0
  1559. pygpt_net/data/locale/plugin.audio_input.it.ini +0 -0
  1560. pygpt_net/data/locale/plugin.audio_input.pl.ini +0 -0
  1561. pygpt_net/data/locale/plugin.audio_input.uk.ini +0 -0
  1562. pygpt_net/data/locale/plugin.audio_input.zh.ini +0 -0
  1563. pygpt_net/data/locale/plugin.audio_output.de.ini +0 -0
  1564. pygpt_net/data/locale/plugin.audio_output.en.ini +0 -0
  1565. pygpt_net/data/locale/plugin.audio_output.es.ini +0 -0
  1566. pygpt_net/data/locale/plugin.audio_output.fr.ini +0 -0
  1567. pygpt_net/data/locale/plugin.audio_output.it.ini +0 -0
  1568. pygpt_net/data/locale/plugin.audio_output.pl.ini +0 -0
  1569. pygpt_net/data/locale/plugin.audio_output.uk.ini +0 -0
  1570. pygpt_net/data/locale/plugin.audio_output.zh.ini +0 -0
  1571. pygpt_net/data/locale/plugin.cmd_api.de.ini +0 -0
  1572. pygpt_net/data/locale/plugin.cmd_api.en.ini +0 -0
  1573. pygpt_net/data/locale/plugin.cmd_api.es.ini +0 -0
  1574. pygpt_net/data/locale/plugin.cmd_api.fr.ini +0 -0
  1575. pygpt_net/data/locale/plugin.cmd_api.it.ini +0 -0
  1576. pygpt_net/data/locale/plugin.cmd_api.pl.ini +0 -0
  1577. pygpt_net/data/locale/plugin.cmd_api.uk.ini +0 -0
  1578. pygpt_net/data/locale/plugin.cmd_api.zh.ini +0 -0
  1579. pygpt_net/data/locale/plugin.cmd_code_interpreter.de.ini +0 -0
  1580. pygpt_net/data/locale/plugin.cmd_code_interpreter.en.ini +0 -0
  1581. pygpt_net/data/locale/plugin.cmd_code_interpreter.es.ini +0 -0
  1582. pygpt_net/data/locale/plugin.cmd_code_interpreter.fr.ini +0 -0
  1583. pygpt_net/data/locale/plugin.cmd_code_interpreter.it.ini +0 -0
  1584. pygpt_net/data/locale/plugin.cmd_code_interpreter.pl.ini +0 -0
  1585. pygpt_net/data/locale/plugin.cmd_code_interpreter.uk.ini +0 -0
  1586. pygpt_net/data/locale/plugin.cmd_code_interpreter.zh.ini +0 -0
  1587. pygpt_net/data/locale/plugin.cmd_custom.de.ini +0 -0
  1588. pygpt_net/data/locale/plugin.cmd_custom.en.ini +0 -0
  1589. pygpt_net/data/locale/plugin.cmd_custom.es.ini +0 -0
  1590. pygpt_net/data/locale/plugin.cmd_custom.fr.ini +0 -0
  1591. pygpt_net/data/locale/plugin.cmd_custom.it.ini +0 -0
  1592. pygpt_net/data/locale/plugin.cmd_custom.pl.ini +0 -0
  1593. pygpt_net/data/locale/plugin.cmd_custom.uk.ini +0 -0
  1594. pygpt_net/data/locale/plugin.cmd_custom.zh.ini +0 -0
  1595. pygpt_net/data/locale/plugin.cmd_files.de.ini +0 -0
  1596. pygpt_net/data/locale/plugin.cmd_files.en.ini +0 -0
  1597. pygpt_net/data/locale/plugin.cmd_files.es.ini +0 -0
  1598. pygpt_net/data/locale/plugin.cmd_files.fr.ini +0 -0
  1599. pygpt_net/data/locale/plugin.cmd_files.it.ini +0 -0
  1600. pygpt_net/data/locale/plugin.cmd_files.pl.ini +0 -0
  1601. pygpt_net/data/locale/plugin.cmd_files.uk.ini +0 -0
  1602. pygpt_net/data/locale/plugin.cmd_files.zh.ini +0 -0
  1603. pygpt_net/data/locale/plugin.cmd_history.de.ini +0 -0
  1604. pygpt_net/data/locale/plugin.cmd_history.en.ini +0 -0
  1605. pygpt_net/data/locale/plugin.cmd_history.es.ini +0 -0
  1606. pygpt_net/data/locale/plugin.cmd_history.fr.ini +0 -0
  1607. pygpt_net/data/locale/plugin.cmd_history.it.ini +0 -0
  1608. pygpt_net/data/locale/plugin.cmd_history.pl.ini +0 -0
  1609. pygpt_net/data/locale/plugin.cmd_history.uk.ini +0 -0
  1610. pygpt_net/data/locale/plugin.cmd_history.zh.ini +0 -0
  1611. pygpt_net/data/locale/plugin.cmd_mouse_control.de.ini +0 -0
  1612. pygpt_net/data/locale/plugin.cmd_mouse_control.en.ini +0 -0
  1613. pygpt_net/data/locale/plugin.cmd_mouse_control.es.ini +0 -0
  1614. pygpt_net/data/locale/plugin.cmd_mouse_control.fr.ini +0 -0
  1615. pygpt_net/data/locale/plugin.cmd_mouse_control.it.ini +0 -0
  1616. pygpt_net/data/locale/plugin.cmd_mouse_control.pl.ini +0 -0
  1617. pygpt_net/data/locale/plugin.cmd_mouse_control.uk.ini +0 -0
  1618. pygpt_net/data/locale/plugin.cmd_mouse_control.zh.ini +0 -0
  1619. pygpt_net/data/locale/plugin.cmd_serial.de.ini +0 -0
  1620. pygpt_net/data/locale/plugin.cmd_serial.en.ini +0 -0
  1621. pygpt_net/data/locale/plugin.cmd_serial.es.ini +0 -0
  1622. pygpt_net/data/locale/plugin.cmd_serial.fr.ini +0 -0
  1623. pygpt_net/data/locale/plugin.cmd_serial.it.ini +0 -0
  1624. pygpt_net/data/locale/plugin.cmd_serial.pl.ini +0 -0
  1625. pygpt_net/data/locale/plugin.cmd_serial.uk.ini +0 -0
  1626. pygpt_net/data/locale/plugin.cmd_serial.zh.ini +0 -0
  1627. pygpt_net/data/locale/plugin.cmd_system.de.ini +0 -0
  1628. pygpt_net/data/locale/plugin.cmd_system.en.ini +0 -0
  1629. pygpt_net/data/locale/plugin.cmd_system.es.ini +0 -0
  1630. pygpt_net/data/locale/plugin.cmd_system.fr.ini +0 -0
  1631. pygpt_net/data/locale/plugin.cmd_system.it.ini +0 -0
  1632. pygpt_net/data/locale/plugin.cmd_system.pl.ini +0 -0
  1633. pygpt_net/data/locale/plugin.cmd_system.uk.ini +0 -0
  1634. pygpt_net/data/locale/plugin.cmd_system.zh.ini +0 -0
  1635. pygpt_net/data/locale/plugin.cmd_web.de.ini +0 -0
  1636. pygpt_net/data/locale/plugin.cmd_web.en.ini +0 -0
  1637. pygpt_net/data/locale/plugin.cmd_web.es.ini +0 -0
  1638. pygpt_net/data/locale/plugin.cmd_web.fr.ini +0 -0
  1639. pygpt_net/data/locale/plugin.cmd_web.it.ini +0 -0
  1640. pygpt_net/data/locale/plugin.cmd_web.pl.ini +0 -0
  1641. pygpt_net/data/locale/plugin.cmd_web.uk.ini +0 -0
  1642. pygpt_net/data/locale/plugin.cmd_web.zh.ini +0 -0
  1643. pygpt_net/data/locale/plugin.crontab.de.ini +0 -0
  1644. pygpt_net/data/locale/plugin.crontab.en.ini +0 -0
  1645. pygpt_net/data/locale/plugin.crontab.es.ini +0 -0
  1646. pygpt_net/data/locale/plugin.crontab.fr.ini +0 -0
  1647. pygpt_net/data/locale/plugin.crontab.it.ini +0 -0
  1648. pygpt_net/data/locale/plugin.crontab.pl.ini +0 -0
  1649. pygpt_net/data/locale/plugin.crontab.uk.ini +0 -0
  1650. pygpt_net/data/locale/plugin.crontab.zh.ini +0 -0
  1651. pygpt_net/data/locale/plugin.experts.de.ini +0 -0
  1652. pygpt_net/data/locale/plugin.experts.en.ini +0 -0
  1653. pygpt_net/data/locale/plugin.experts.es.ini +0 -0
  1654. pygpt_net/data/locale/plugin.experts.fr.ini +0 -0
  1655. pygpt_net/data/locale/plugin.experts.it.ini +0 -0
  1656. pygpt_net/data/locale/plugin.experts.pl.ini +0 -0
  1657. pygpt_net/data/locale/plugin.experts.uk.ini +0 -0
  1658. pygpt_net/data/locale/plugin.experts.zh.ini +0 -0
  1659. pygpt_net/data/locale/plugin.extra_prompt.de.ini +0 -0
  1660. pygpt_net/data/locale/plugin.extra_prompt.en.ini +0 -0
  1661. pygpt_net/data/locale/plugin.extra_prompt.es.ini +0 -0
  1662. pygpt_net/data/locale/plugin.extra_prompt.fr.ini +0 -0
  1663. pygpt_net/data/locale/plugin.extra_prompt.it.ini +0 -0
  1664. pygpt_net/data/locale/plugin.extra_prompt.pl.ini +0 -0
  1665. pygpt_net/data/locale/plugin.extra_prompt.uk.ini +0 -0
  1666. pygpt_net/data/locale/plugin.extra_prompt.zh.ini +0 -0
  1667. pygpt_net/data/locale/plugin.idx_llama_index.de.ini +0 -0
  1668. pygpt_net/data/locale/plugin.idx_llama_index.en.ini +0 -0
  1669. pygpt_net/data/locale/plugin.idx_llama_index.es.ini +0 -0
  1670. pygpt_net/data/locale/plugin.idx_llama_index.fr.ini +0 -0
  1671. pygpt_net/data/locale/plugin.idx_llama_index.it.ini +0 -0
  1672. pygpt_net/data/locale/plugin.idx_llama_index.pl.ini +0 -0
  1673. pygpt_net/data/locale/plugin.idx_llama_index.uk.ini +0 -0
  1674. pygpt_net/data/locale/plugin.idx_llama_index.zh.ini +0 -0
  1675. pygpt_net/data/locale/plugin.mailer.en.ini +0 -0
  1676. pygpt_net/data/locale/plugin.openai_dalle.de.ini +0 -0
  1677. pygpt_net/data/locale/plugin.openai_dalle.en.ini +0 -0
  1678. pygpt_net/data/locale/plugin.openai_dalle.es.ini +0 -0
  1679. pygpt_net/data/locale/plugin.openai_dalle.fr.ini +0 -0
  1680. pygpt_net/data/locale/plugin.openai_dalle.it.ini +0 -0
  1681. pygpt_net/data/locale/plugin.openai_dalle.pl.ini +0 -0
  1682. pygpt_net/data/locale/plugin.openai_dalle.uk.ini +0 -0
  1683. pygpt_net/data/locale/plugin.openai_dalle.zh.ini +0 -0
  1684. pygpt_net/data/locale/plugin.openai_vision.de.ini +0 -0
  1685. pygpt_net/data/locale/plugin.openai_vision.en.ini +0 -0
  1686. pygpt_net/data/locale/plugin.openai_vision.es.ini +0 -0
  1687. pygpt_net/data/locale/plugin.openai_vision.fr.ini +0 -0
  1688. pygpt_net/data/locale/plugin.openai_vision.it.ini +0 -0
  1689. pygpt_net/data/locale/plugin.openai_vision.pl.ini +0 -0
  1690. pygpt_net/data/locale/plugin.openai_vision.uk.ini +0 -0
  1691. pygpt_net/data/locale/plugin.openai_vision.zh.ini +0 -0
  1692. pygpt_net/data/locale/plugin.real_time.de.ini +0 -0
  1693. pygpt_net/data/locale/plugin.real_time.en.ini +0 -0
  1694. pygpt_net/data/locale/plugin.real_time.es.ini +0 -0
  1695. pygpt_net/data/locale/plugin.real_time.fr.ini +0 -0
  1696. pygpt_net/data/locale/plugin.real_time.it.ini +0 -0
  1697. pygpt_net/data/locale/plugin.real_time.pl.ini +0 -0
  1698. pygpt_net/data/locale/plugin.real_time.uk.ini +0 -0
  1699. pygpt_net/data/locale/plugin.real_time.zh.ini +0 -0
  1700. pygpt_net/data/locale/plugin.voice_control.de.ini +0 -0
  1701. pygpt_net/data/locale/plugin.voice_control.en.ini +0 -0
  1702. pygpt_net/data/locale/plugin.voice_control.es.ini +0 -0
  1703. pygpt_net/data/locale/plugin.voice_control.fr.ini +0 -0
  1704. pygpt_net/data/locale/plugin.voice_control.it.ini +0 -0
  1705. pygpt_net/data/locale/plugin.voice_control.pl.ini +0 -0
  1706. pygpt_net/data/locale/plugin.voice_control.uk.ini +0 -0
  1707. pygpt_net/data/locale/plugin.voice_control.zh.ini +0 -0
  1708. pygpt_net/data/prompts.csv +0 -0
  1709. pygpt_net/fonts.qrc +60 -60
  1710. pygpt_net/fonts_rc.py +0 -0
  1711. pygpt_net/icons.qrc +138 -138
  1712. pygpt_net/icons_rc.py +0 -0
  1713. pygpt_net/js.qrc +6 -4
  1714. pygpt_net/js_rc.py +10890 -26621
  1715. pygpt_net/migrations/Version20231227152900.py +0 -0
  1716. pygpt_net/migrations/Version20231230095000.py +0 -0
  1717. pygpt_net/migrations/Version20231231230000.py +0 -0
  1718. pygpt_net/migrations/Version20240106060000.py +0 -0
  1719. pygpt_net/migrations/Version20240107060000.py +0 -0
  1720. pygpt_net/migrations/Version20240222160000.py +0 -0
  1721. pygpt_net/migrations/Version20240223050000.py +0 -0
  1722. pygpt_net/migrations/Version20240303190000.py +0 -0
  1723. pygpt_net/migrations/Version20240408180000.py +0 -0
  1724. pygpt_net/migrations/Version20240426050000.py +0 -0
  1725. pygpt_net/migrations/Version20240501030000.py +0 -0
  1726. pygpt_net/migrations/Version20241122130000.py +0 -0
  1727. pygpt_net/migrations/Version20241126170000.py +0 -0
  1728. pygpt_net/migrations/Version20241215110000.py +0 -0
  1729. pygpt_net/migrations/__init__.py +0 -0
  1730. pygpt_net/migrations/base.py +0 -0
  1731. pygpt_net/plugin/agent/config.py +0 -0
  1732. pygpt_net/plugin/agent/plugin.py +0 -0
  1733. pygpt_net/plugin/audio_input/config.py +0 -0
  1734. pygpt_net/plugin/audio_input/plugin.py +0 -0
  1735. pygpt_net/plugin/audio_output/config.py +0 -0
  1736. pygpt_net/plugin/audio_output/plugin.py +0 -0
  1737. pygpt_net/plugin/audio_output/worker.py +0 -0
  1738. pygpt_net/plugin/base/__init__.py +0 -0
  1739. pygpt_net/plugin/base/config.py +0 -0
  1740. pygpt_net/plugin/base/signals.py +0 -0
  1741. pygpt_net/plugin/base/worker.py +0 -0
  1742. pygpt_net/plugin/bitbucket/config.py +0 -0
  1743. pygpt_net/plugin/bitbucket/plugin.py +0 -0
  1744. pygpt_net/plugin/cmd_api/config.py +0 -0
  1745. pygpt_net/plugin/cmd_api/plugin.py +0 -0
  1746. pygpt_net/plugin/cmd_api/worker.py +0 -0
  1747. pygpt_net/plugin/cmd_custom/config.py +0 -0
  1748. pygpt_net/plugin/cmd_custom/plugin.py +0 -0
  1749. pygpt_net/plugin/cmd_custom/worker.py +0 -0
  1750. pygpt_net/plugin/cmd_files/config.py +0 -0
  1751. pygpt_net/plugin/cmd_files/output.py +0 -0
  1752. pygpt_net/plugin/cmd_files/plugin.py +0 -0
  1753. pygpt_net/plugin/cmd_history/config.py +0 -0
  1754. pygpt_net/plugin/cmd_history/plugin.py +0 -0
  1755. pygpt_net/plugin/cmd_history/worker.py +0 -0
  1756. pygpt_net/plugin/cmd_mouse_control/plugin.py +0 -0
  1757. pygpt_net/plugin/cmd_mouse_control/worker.py +0 -0
  1758. pygpt_net/plugin/cmd_serial/config.py +0 -0
  1759. pygpt_net/plugin/cmd_serial/plugin.py +0 -0
  1760. pygpt_net/plugin/cmd_serial/worker.py +0 -0
  1761. pygpt_net/plugin/cmd_system/config.py +0 -0
  1762. pygpt_net/plugin/cmd_system/docker.py +0 -0
  1763. pygpt_net/plugin/cmd_system/output.py +0 -0
  1764. pygpt_net/plugin/cmd_system/plugin.py +0 -0
  1765. pygpt_net/plugin/cmd_web/config.py +0 -0
  1766. pygpt_net/plugin/cmd_web/plugin.py +0 -0
  1767. pygpt_net/plugin/cmd_web/worker.py +0 -0
  1768. pygpt_net/plugin/crontab/config.py +0 -0
  1769. pygpt_net/plugin/crontab/plugin.py +0 -0
  1770. pygpt_net/plugin/experts/config.py +0 -0
  1771. pygpt_net/plugin/experts/plugin.py +0 -0
  1772. pygpt_net/plugin/extra_prompt/config.py +0 -0
  1773. pygpt_net/plugin/extra_prompt/plugin.py +0 -0
  1774. pygpt_net/plugin/facebook/config.py +0 -0
  1775. pygpt_net/plugin/facebook/plugin.py +0 -0
  1776. pygpt_net/plugin/github/config.py +0 -0
  1777. pygpt_net/plugin/github/plugin.py +0 -0
  1778. pygpt_net/plugin/google/plugin.py +0 -0
  1779. pygpt_net/plugin/idx_llama_index/config.py +0 -0
  1780. pygpt_net/plugin/idx_llama_index/plugin.py +0 -0
  1781. pygpt_net/plugin/idx_llama_index/worker.py +0 -0
  1782. pygpt_net/plugin/mailer/plugin.py +0 -0
  1783. pygpt_net/plugin/openai_dalle/config.py +0 -0
  1784. pygpt_net/plugin/openai_dalle/plugin.py +0 -0
  1785. pygpt_net/plugin/openai_vision/config.py +0 -0
  1786. pygpt_net/plugin/openai_vision/plugin.py +0 -0
  1787. pygpt_net/plugin/real_time/config.py +0 -0
  1788. pygpt_net/plugin/real_time/plugin.py +0 -0
  1789. pygpt_net/plugin/server/config.py +0 -0
  1790. pygpt_net/plugin/server/plugin.py +0 -0
  1791. pygpt_net/plugin/slack/config.py +0 -0
  1792. pygpt_net/plugin/slack/plugin.py +0 -0
  1793. pygpt_net/plugin/telegram/config.py +0 -0
  1794. pygpt_net/plugin/telegram/plugin.py +0 -0
  1795. pygpt_net/plugin/tuya/config.py +0 -0
  1796. pygpt_net/plugin/tuya/plugin.py +0 -0
  1797. pygpt_net/plugin/twitter/config.py +0 -0
  1798. pygpt_net/plugin/twitter/plugin.py +0 -0
  1799. pygpt_net/plugin/voice_control/config.py +0 -0
  1800. pygpt_net/plugin/voice_control/plugin.py +0 -0
  1801. pygpt_net/plugin/wikipedia/config.py +0 -0
  1802. pygpt_net/plugin/wikipedia/plugin.py +0 -0
  1803. pygpt_net/provider/__init__.py +0 -0
  1804. pygpt_net/provider/agents/__init__.py +0 -0
  1805. pygpt_net/provider/agents/base.py +0 -0
  1806. pygpt_net/provider/agents/llama_index/__init__.py +0 -0
  1807. pygpt_net/provider/agents/llama_index/codeact_workflow.py +0 -0
  1808. pygpt_net/provider/agents/llama_index/legacy/__init__.py +0 -0
  1809. pygpt_net/provider/agents/llama_index/legacy/openai.py +0 -0
  1810. pygpt_net/provider/agents/llama_index/legacy/openai_assistant.py +0 -0
  1811. pygpt_net/provider/agents/llama_index/legacy/planner.py +0 -0
  1812. pygpt_net/provider/agents/llama_index/legacy/react.py +0 -0
  1813. pygpt_net/provider/agents/llama_index/openai_workflow.py +0 -0
  1814. pygpt_net/provider/agents/llama_index/react_workflow.py +0 -0
  1815. pygpt_net/provider/agents/llama_index/supervisor_workflow.py +0 -0
  1816. pygpt_net/provider/agents/llama_index/workflow/__init__.py +0 -0
  1817. pygpt_net/provider/agents/llama_index/workflow/codeact.py +0 -0
  1818. pygpt_net/provider/agents/llama_index/workflow/events.py +0 -0
  1819. pygpt_net/provider/agents/llama_index/workflow/planner.py +0 -0
  1820. pygpt_net/provider/agents/llama_index/workflow/supervisor.py +0 -0
  1821. pygpt_net/provider/agents/openai/__init__.py +0 -0
  1822. pygpt_net/provider/agents/openai/agent.py +0 -0
  1823. pygpt_net/provider/agents/openai/agent_planner.py +0 -0
  1824. pygpt_net/provider/agents/openai/agent_with_experts.py +0 -0
  1825. pygpt_net/provider/agents/openai/agent_with_experts_feedback.py +0 -0
  1826. pygpt_net/provider/agents/openai/agent_with_feedback.py +0 -0
  1827. pygpt_net/provider/agents/openai/supervisor.py +0 -0
  1828. pygpt_net/provider/api/__init__.py +0 -0
  1829. pygpt_net/provider/api/anthropic/audio.py +0 -0
  1830. pygpt_net/provider/api/anthropic/chat.py +0 -0
  1831. pygpt_net/provider/api/anthropic/image.py +0 -0
  1832. pygpt_net/provider/api/anthropic/tools.py +0 -0
  1833. pygpt_net/provider/api/anthropic/vision.py +0 -0
  1834. pygpt_net/provider/api/fake/__init__.py +0 -0
  1835. pygpt_net/provider/api/fake/generator.py +244 -0
  1836. pygpt_net/provider/api/google/__init__.py +0 -0
  1837. pygpt_net/provider/api/google/audio.py +0 -0
  1838. pygpt_net/provider/api/google/chat.py +0 -0
  1839. pygpt_net/provider/api/google/image.py +0 -0
  1840. pygpt_net/provider/api/google/realtime/__init__.py +0 -0
  1841. pygpt_net/provider/api/google/tools.py +0 -0
  1842. pygpt_net/provider/api/google/video.py +0 -0
  1843. pygpt_net/provider/api/google/vision.py +0 -0
  1844. pygpt_net/provider/api/openai/__init__.py +31 -18
  1845. pygpt_net/provider/api/openai/agents/__init__.py +0 -0
  1846. pygpt_net/provider/api/openai/agents/client.py +0 -0
  1847. pygpt_net/provider/api/openai/agents/computer.py +0 -0
  1848. pygpt_net/provider/api/openai/agents/experts.py +0 -0
  1849. pygpt_net/provider/api/openai/agents/remote_tools.py +0 -0
  1850. pygpt_net/provider/api/openai/agents/utils.py +0 -0
  1851. pygpt_net/provider/api/openai/assistants.py +0 -0
  1852. pygpt_net/provider/api/openai/audio.py +0 -0
  1853. pygpt_net/provider/api/openai/completion.py +0 -0
  1854. pygpt_net/provider/api/openai/computer.py +0 -0
  1855. pygpt_net/provider/api/openai/container.py +0 -0
  1856. pygpt_net/provider/api/openai/image.py +0 -0
  1857. pygpt_net/provider/api/openai/realtime/__init__.py +0 -0
  1858. pygpt_net/provider/api/openai/remote_tools.py +0 -0
  1859. pygpt_net/provider/api/openai/responses.py +3 -1
  1860. pygpt_net/provider/api/openai/store.py +0 -0
  1861. pygpt_net/provider/api/openai/tools.py +0 -0
  1862. pygpt_net/provider/api/openai/utils.py +0 -0
  1863. pygpt_net/provider/api/openai/vision.py +0 -0
  1864. pygpt_net/provider/api/openai/worker/__init__.py +0 -0
  1865. pygpt_net/provider/api/openai/worker/assistants.py +0 -0
  1866. pygpt_net/provider/api/openai/worker/importer.py +0 -0
  1867. pygpt_net/provider/api/x_ai/__init__.py +0 -0
  1868. pygpt_net/provider/api/x_ai/audio.py +0 -0
  1869. pygpt_net/provider/api/x_ai/chat.py +0 -0
  1870. pygpt_net/provider/api/x_ai/image.py +0 -0
  1871. pygpt_net/provider/api/x_ai/remote.py +0 -0
  1872. pygpt_net/provider/api/x_ai/tools.py +0 -0
  1873. pygpt_net/provider/api/x_ai/vision.py +0 -0
  1874. pygpt_net/provider/audio_input/__init__.py +0 -0
  1875. pygpt_net/provider/audio_input/base.py +0 -0
  1876. pygpt_net/provider/audio_input/bing_speech_recognition.py +0 -0
  1877. pygpt_net/provider/audio_input/google_cloud_speech_recognition.py +0 -0
  1878. pygpt_net/provider/audio_input/google_genai.py +0 -0
  1879. pygpt_net/provider/audio_input/google_speech_recognition.py +0 -0
  1880. pygpt_net/provider/audio_input/openai_whisper.py +0 -0
  1881. pygpt_net/provider/audio_input/openai_whisper_local.py +0 -0
  1882. pygpt_net/provider/audio_output/__init__.py +0 -0
  1883. pygpt_net/provider/audio_output/base.py +0 -0
  1884. pygpt_net/provider/audio_output/eleven_labs.py +0 -0
  1885. pygpt_net/provider/audio_output/google_genai_tts.py +0 -0
  1886. pygpt_net/provider/audio_output/google_tts.py +0 -0
  1887. pygpt_net/provider/audio_output/ms_azure_tts.py +0 -0
  1888. pygpt_net/provider/audio_output/openai_tts.py +0 -0
  1889. pygpt_net/provider/core/__init__.py +0 -0
  1890. pygpt_net/provider/core/assistant/__init__.py +0 -0
  1891. pygpt_net/provider/core/assistant/base.py +0 -0
  1892. pygpt_net/provider/core/assistant/json_file.py +0 -0
  1893. pygpt_net/provider/core/assistant_file/__init__.py +0 -0
  1894. pygpt_net/provider/core/assistant_file/base.py +0 -0
  1895. pygpt_net/provider/core/assistant_file/db_sqlite/__init__.py +0 -0
  1896. pygpt_net/provider/core/assistant_file/db_sqlite/patch.py +0 -0
  1897. pygpt_net/provider/core/assistant_file/db_sqlite/provider.py +0 -0
  1898. pygpt_net/provider/core/assistant_file/db_sqlite/storage.py +0 -0
  1899. pygpt_net/provider/core/assistant_file/db_sqlite/utils.py +0 -0
  1900. pygpt_net/provider/core/assistant_store/__init__.py +0 -0
  1901. pygpt_net/provider/core/assistant_store/base.py +0 -0
  1902. pygpt_net/provider/core/assistant_store/db_sqlite/__init__.py +0 -0
  1903. pygpt_net/provider/core/assistant_store/db_sqlite/patch.py +0 -0
  1904. pygpt_net/provider/core/assistant_store/db_sqlite/provider.py +0 -0
  1905. pygpt_net/provider/core/assistant_store/db_sqlite/storage.py +0 -0
  1906. pygpt_net/provider/core/assistant_store/db_sqlite/utils.py +0 -0
  1907. pygpt_net/provider/core/assistant_store/json_file.py +0 -0
  1908. pygpt_net/provider/core/attachment/__init__.py +0 -0
  1909. pygpt_net/provider/core/attachment/base.py +0 -0
  1910. pygpt_net/provider/core/attachment/json_file.py +0 -0
  1911. pygpt_net/provider/core/calendar/__init__.py +0 -0
  1912. pygpt_net/provider/core/calendar/base.py +0 -0
  1913. pygpt_net/provider/core/calendar/db_sqlite/__init__.py +0 -0
  1914. pygpt_net/provider/core/calendar/db_sqlite/patch.py +0 -0
  1915. pygpt_net/provider/core/calendar/db_sqlite/provider.py +0 -0
  1916. pygpt_net/provider/core/calendar/db_sqlite/storage.py +0 -0
  1917. pygpt_net/provider/core/config/__init__.py +0 -0
  1918. pygpt_net/provider/core/config/base.py +0 -0
  1919. pygpt_net/provider/core/config/patch.py +21 -1
  1920. pygpt_net/provider/core/ctx/__init__.py +0 -0
  1921. pygpt_net/provider/core/ctx/base.py +0 -0
  1922. pygpt_net/provider/core/ctx/db_sqlite/__init__.py +0 -0
  1923. pygpt_net/provider/core/ctx/db_sqlite/provider.py +0 -0
  1924. pygpt_net/provider/core/ctx/db_sqlite/storage.py +0 -0
  1925. pygpt_net/provider/core/ctx/db_sqlite/utils.py +0 -0
  1926. pygpt_net/provider/core/ctx/json_file.py +0 -0
  1927. pygpt_net/provider/core/history/__init__.py +0 -0
  1928. pygpt_net/provider/core/history/base.py +0 -0
  1929. pygpt_net/provider/core/history/patch.py +0 -0
  1930. pygpt_net/provider/core/history/txt_file.py +0 -0
  1931. pygpt_net/provider/core/index/__init__.py +0 -0
  1932. pygpt_net/provider/core/index/base.py +0 -0
  1933. pygpt_net/provider/core/index/db_sqlite/__init__.py +0 -0
  1934. pygpt_net/provider/core/index/db_sqlite/patch.py +0 -0
  1935. pygpt_net/provider/core/index/db_sqlite/provider.py +0 -0
  1936. pygpt_net/provider/core/index/db_sqlite/storage.py +0 -0
  1937. pygpt_net/provider/core/index/db_sqlite/utils.py +0 -0
  1938. pygpt_net/provider/core/index/json_file.py +0 -0
  1939. pygpt_net/provider/core/index/patch.py +0 -0
  1940. pygpt_net/provider/core/mode/__init__.py +0 -0
  1941. pygpt_net/provider/core/mode/base.py +0 -0
  1942. pygpt_net/provider/core/mode/json_file.py +0 -0
  1943. pygpt_net/provider/core/mode/patch.py +0 -0
  1944. pygpt_net/provider/core/model/__init__.py +0 -0
  1945. pygpt_net/provider/core/model/base.py +0 -0
  1946. pygpt_net/provider/core/notepad/__init__.py +0 -0
  1947. pygpt_net/provider/core/notepad/base.py +0 -0
  1948. pygpt_net/provider/core/notepad/db_sqlite/__init__.py +0 -0
  1949. pygpt_net/provider/core/notepad/db_sqlite/patch.py +0 -0
  1950. pygpt_net/provider/core/notepad/db_sqlite/provider.py +0 -0
  1951. pygpt_net/provider/core/notepad/db_sqlite/storage.py +0 -0
  1952. pygpt_net/provider/core/notepad/json_file.py +0 -0
  1953. pygpt_net/provider/core/plugin_preset/__init__.py +0 -0
  1954. pygpt_net/provider/core/plugin_preset/base.py +0 -0
  1955. pygpt_net/provider/core/preset/patch.py +0 -0
  1956. pygpt_net/provider/core/prompt/__init__.py +0 -0
  1957. pygpt_net/provider/core/prompt/base.py +0 -0
  1958. pygpt_net/provider/core/prompt/json_file.py +0 -0
  1959. pygpt_net/provider/llms/base.py +0 -0
  1960. pygpt_net/provider/llms/deepseek_api.py +0 -0
  1961. pygpt_net/provider/llms/google.py +0 -0
  1962. pygpt_net/provider/llms/hugging_face_api.py +0 -0
  1963. pygpt_net/provider/llms/hugging_face_router.py +0 -0
  1964. pygpt_net/provider/llms/llama_index/__init__.py +0 -0
  1965. pygpt_net/provider/llms/llama_index/openai/__init__.py +0 -0
  1966. pygpt_net/provider/llms/llama_index/openai/base.py +0 -0
  1967. pygpt_net/provider/llms/llama_index/openai/py.typed +0 -0
  1968. pygpt_net/provider/llms/llama_index/openai/responses.py +0 -0
  1969. pygpt_net/provider/llms/llama_index/openai/utils.py +0 -0
  1970. pygpt_net/provider/llms/llama_index/x_ai/__init__.py +0 -0
  1971. pygpt_net/provider/llms/llama_index/x_ai/embedding.py +0 -0
  1972. pygpt_net/provider/llms/local.py +0 -0
  1973. pygpt_net/provider/llms/mistral.py +0 -0
  1974. pygpt_net/provider/llms/ollama_custom.py +0 -0
  1975. pygpt_net/provider/llms/open_router.py +0 -0
  1976. pygpt_net/provider/llms/perplexity.py +0 -0
  1977. pygpt_net/provider/llms/x_ai.py +0 -0
  1978. pygpt_net/provider/loaders/__init__.py +0 -0
  1979. pygpt_net/provider/loaders/base.py +0 -0
  1980. pygpt_net/provider/loaders/file_csv.py +0 -0
  1981. pygpt_net/provider/loaders/file_docx.py +0 -0
  1982. pygpt_net/provider/loaders/file_epub.py +0 -0
  1983. pygpt_net/provider/loaders/file_excel.py +0 -0
  1984. pygpt_net/provider/loaders/file_html.py +0 -0
  1985. pygpt_net/provider/loaders/file_image_vision.py +0 -0
  1986. pygpt_net/provider/loaders/file_ipynb.py +0 -0
  1987. pygpt_net/provider/loaders/file_json.py +0 -0
  1988. pygpt_net/provider/loaders/file_markdown.py +0 -0
  1989. pygpt_net/provider/loaders/file_pdf.py +0 -0
  1990. pygpt_net/provider/loaders/file_video_audio.py +0 -0
  1991. pygpt_net/provider/loaders/file_xml.py +0 -0
  1992. pygpt_net/provider/loaders/hub/__init__.py +0 -0
  1993. pygpt_net/provider/loaders/hub/bitbucket/__init__.py +0 -0
  1994. pygpt_net/provider/loaders/hub/bitbucket/repo.py +0 -0
  1995. pygpt_net/provider/loaders/hub/chatgpt_retrieval/__init__.py +0 -0
  1996. pygpt_net/provider/loaders/hub/chatgpt_retrieval/base.py +0 -0
  1997. pygpt_net/provider/loaders/hub/database/__init__.py +0 -0
  1998. pygpt_net/provider/loaders/hub/database/base.py +0 -0
  1999. pygpt_net/provider/loaders/hub/github/__init__.py +0 -0
  2000. pygpt_net/provider/loaders/hub/github/issues.py +0 -0
  2001. pygpt_net/provider/loaders/hub/github/repo.py +0 -0
  2002. pygpt_net/provider/loaders/hub/google/__init__.py +0 -0
  2003. pygpt_net/provider/loaders/hub/google/calendar.py +0 -0
  2004. pygpt_net/provider/loaders/hub/google/docs.py +0 -0
  2005. pygpt_net/provider/loaders/hub/google/gmail.py +0 -0
  2006. pygpt_net/provider/loaders/hub/google/keep.py +0 -0
  2007. pygpt_net/provider/loaders/hub/google/sheets.py +0 -0
  2008. pygpt_net/provider/loaders/hub/image_vision/__init__.py +0 -0
  2009. pygpt_net/provider/loaders/hub/image_vision/base.py +0 -0
  2010. pygpt_net/provider/loaders/hub/json/__init__.py +0 -0
  2011. pygpt_net/provider/loaders/hub/json/base.py +0 -0
  2012. pygpt_net/provider/loaders/hub/pandas_excel/__init__.py +0 -0
  2013. pygpt_net/provider/loaders/hub/pandas_excel/base.py +0 -0
  2014. pygpt_net/provider/loaders/hub/simple_csv/__init__.py +0 -0
  2015. pygpt_net/provider/loaders/hub/simple_csv/base.py +0 -0
  2016. pygpt_net/provider/loaders/hub/video_audio/__init__.py +0 -0
  2017. pygpt_net/provider/loaders/hub/video_audio/base.py +0 -0
  2018. pygpt_net/provider/loaders/hub/web_page/__init__.py +0 -0
  2019. pygpt_net/provider/loaders/hub/web_page/base.py +0 -0
  2020. pygpt_net/provider/loaders/hub/yt/__init__.py +0 -0
  2021. pygpt_net/provider/loaders/hub/yt/base.py +0 -0
  2022. pygpt_net/provider/loaders/hub/yt/utils.py +0 -0
  2023. pygpt_net/provider/loaders/web_bitbucket.py +0 -0
  2024. pygpt_net/provider/loaders/web_chatgpt_retrieval.py +0 -0
  2025. pygpt_net/provider/loaders/web_database.py +0 -0
  2026. pygpt_net/provider/loaders/web_github_issues.py +0 -0
  2027. pygpt_net/provider/loaders/web_github_repo.py +0 -0
  2028. pygpt_net/provider/loaders/web_google_calendar.py +0 -0
  2029. pygpt_net/provider/loaders/web_google_docs.py +0 -0
  2030. pygpt_net/provider/loaders/web_google_drive.py +0 -0
  2031. pygpt_net/provider/loaders/web_google_gmail.py +0 -0
  2032. pygpt_net/provider/loaders/web_google_keep.py +0 -0
  2033. pygpt_net/provider/loaders/web_google_sheets.py +0 -0
  2034. pygpt_net/provider/loaders/web_microsoft_onedrive.py +0 -0
  2035. pygpt_net/provider/loaders/web_page.py +0 -0
  2036. pygpt_net/provider/loaders/web_rss.py +0 -0
  2037. pygpt_net/provider/loaders/web_sitemap.py +0 -0
  2038. pygpt_net/provider/loaders/web_twitter.py +0 -0
  2039. pygpt_net/provider/loaders/web_yt.py +0 -0
  2040. pygpt_net/provider/vector_stores/ctx_attachment.py +0 -0
  2041. pygpt_net/provider/web/__init__.py +0 -0
  2042. pygpt_net/provider/web/base.py +0 -0
  2043. pygpt_net/provider/web/duckduck_search.py +0 -0
  2044. pygpt_net/provider/web/google_custom_search.py +0 -0
  2045. pygpt_net/provider/web/microsoft_bing.py +0 -0
  2046. pygpt_net/tools/__init__.py +0 -0
  2047. pygpt_net/tools/audio_transcriber/tool.py +0 -0
  2048. pygpt_net/tools/audio_transcriber/ui/__init__.py +0 -0
  2049. pygpt_net/tools/audio_transcriber/ui/dialogs.py +0 -0
  2050. pygpt_net/tools/base.py +0 -0
  2051. pygpt_net/tools/code_interpreter/body.py +0 -0
  2052. pygpt_net/tools/code_interpreter/ui/__init__.py +0 -0
  2053. pygpt_net/tools/code_interpreter/ui/dialogs.py +0 -0
  2054. pygpt_net/tools/code_interpreter/ui/html.py +0 -0
  2055. pygpt_net/tools/code_interpreter/ui/widgets.py +0 -0
  2056. pygpt_net/tools/html_canvas/tool.py +0 -0
  2057. pygpt_net/tools/html_canvas/ui/__init__.py +0 -0
  2058. pygpt_net/tools/html_canvas/ui/dialogs.py +0 -0
  2059. pygpt_net/tools/html_canvas/ui/widgets.py +0 -0
  2060. pygpt_net/tools/image_viewer/tool.py +0 -0
  2061. pygpt_net/tools/image_viewer/ui/__init__.py +0 -0
  2062. pygpt_net/tools/image_viewer/ui/dialogs.py +0 -0
  2063. pygpt_net/tools/indexer/tool.py +0 -0
  2064. pygpt_net/tools/indexer/ui/__init__.py +0 -0
  2065. pygpt_net/tools/indexer/ui/browse.py +0 -0
  2066. pygpt_net/tools/indexer/ui/ctx.py +0 -0
  2067. pygpt_net/tools/indexer/ui/dialogs.py +0 -0
  2068. pygpt_net/tools/indexer/ui/files.py +0 -0
  2069. pygpt_net/tools/indexer/ui/web.py +0 -0
  2070. pygpt_net/tools/indexer/ui/widgets.py +0 -0
  2071. pygpt_net/tools/media_player/tool.py +0 -0
  2072. pygpt_net/tools/media_player/ui/__init__.py +0 -0
  2073. pygpt_net/tools/media_player/ui/dialogs.py +0 -0
  2074. pygpt_net/tools/media_player/ui/widgets.py +0 -0
  2075. pygpt_net/tools/text_editor/__init__.py +0 -0
  2076. pygpt_net/tools/text_editor/tool.py +0 -0
  2077. pygpt_net/tools/text_editor/ui/__init__.py +0 -0
  2078. pygpt_net/tools/text_editor/ui/dialogs.py +0 -0
  2079. pygpt_net/tools/text_editor/ui/widgets.py +0 -0
  2080. pygpt_net/ui/base/__init__.py +0 -0
  2081. pygpt_net/ui/base/flow_layout.py +0 -0
  2082. pygpt_net/ui/dialog/assistant_store.py +0 -0
  2083. pygpt_net/ui/dialog/create.py +0 -0
  2084. pygpt_net/ui/dialog/db.py +0 -0
  2085. pygpt_net/ui/dialog/dictionary.py +0 -0
  2086. pygpt_net/ui/dialog/find.py +0 -0
  2087. pygpt_net/ui/dialog/models_importer.py +0 -0
  2088. pygpt_net/ui/dialog/preset_plugins.py +0 -0
  2089. pygpt_net/ui/dialog/profile.py +0 -0
  2090. pygpt_net/ui/dialog/snap.py +0 -0
  2091. pygpt_net/ui/dialog/url.py +0 -0
  2092. pygpt_net/ui/dialog/workdir.py +0 -0
  2093. pygpt_net/ui/layout/chat/attachments_ctx.py +0 -0
  2094. pygpt_net/ui/layout/chat/calendar.py +0 -0
  2095. pygpt_net/ui/layout/chat/chat.py +0 -0
  2096. pygpt_net/ui/layout/chat/explorer.py +0 -0
  2097. pygpt_net/ui/layout/chat/painter.py +0 -0
  2098. pygpt_net/ui/layout/ctx/ctx.py +0 -0
  2099. pygpt_net/ui/layout/toolbox/agent.py +0 -0
  2100. pygpt_net/ui/layout/toolbox/agent_llama.py +0 -0
  2101. pygpt_net/ui/layout/toolbox/audio.py +0 -0
  2102. pygpt_net/ui/layout/toolbox/computer_env.py +0 -0
  2103. pygpt_net/ui/layout/toolbox/indexes.py +0 -0
  2104. pygpt_net/ui/layout/toolbox/raw.py +0 -0
  2105. pygpt_net/ui/layout/toolbox/split.py +0 -0
  2106. pygpt_net/ui/layout/toolbox/toolbox.py +0 -0
  2107. pygpt_net/ui/layout/toolbox/video.py +0 -0
  2108. pygpt_net/ui/menu/__init__.py +0 -0
  2109. pygpt_net/ui/menu/audio.py +0 -0
  2110. pygpt_net/ui/menu/config.py +0 -0
  2111. pygpt_net/ui/menu/debug.py +4 -1
  2112. pygpt_net/ui/menu/file.py +0 -0
  2113. pygpt_net/ui/menu/lang.py +0 -0
  2114. pygpt_net/ui/menu/menu.py +0 -0
  2115. pygpt_net/ui/menu/plugins.py +0 -0
  2116. pygpt_net/ui/menu/tools.py +0 -0
  2117. pygpt_net/ui/menu/video.py +0 -0
  2118. pygpt_net/ui/tray.py +0 -0
  2119. pygpt_net/ui/widget/anims/loader.py +0 -0
  2120. pygpt_net/ui/widget/anims/toggles.py +0 -0
  2121. pygpt_net/ui/widget/audio/bar.py +0 -0
  2122. pygpt_net/ui/widget/calendar/__init__.py +0 -0
  2123. pygpt_net/ui/widget/calendar/select.py +0 -0
  2124. pygpt_net/ui/widget/dialog/applog.py +0 -0
  2125. pygpt_net/ui/widget/dialog/assistant_store.py +0 -0
  2126. pygpt_net/ui/widget/dialog/audio.py +0 -0
  2127. pygpt_net/ui/widget/dialog/create.py +0 -0
  2128. pygpt_net/ui/widget/dialog/db.py +0 -0
  2129. pygpt_net/ui/widget/dialog/find.py +0 -0
  2130. pygpt_net/ui/widget/dialog/license.py +0 -0
  2131. pygpt_net/ui/widget/dialog/model.py +0 -0
  2132. pygpt_net/ui/widget/dialog/model_importer.py +0 -0
  2133. pygpt_net/ui/widget/dialog/preset_plugins.py +0 -0
  2134. pygpt_net/ui/widget/dialog/profile.py +0 -0
  2135. pygpt_net/ui/widget/dialog/snap.py +0 -0
  2136. pygpt_net/ui/widget/dialog/url.py +0 -0
  2137. pygpt_net/ui/widget/dialog/workdir.py +0 -0
  2138. pygpt_net/ui/widget/draw/painter.py +0 -0
  2139. pygpt_net/ui/widget/element/button.py +0 -0
  2140. pygpt_net/ui/widget/element/checkbox.py +0 -0
  2141. pygpt_net/ui/widget/lists/assistant_store.py +0 -0
  2142. pygpt_net/ui/widget/lists/attachment_ctx.py +0 -0
  2143. pygpt_net/ui/widget/lists/base_combo.py +0 -0
  2144. pygpt_net/ui/widget/lists/base_list_combo.py +0 -0
  2145. pygpt_net/ui/widget/lists/db.py +0 -0
  2146. pygpt_net/ui/widget/lists/debug.py +0 -0
  2147. pygpt_net/ui/widget/lists/experts.py +0 -0
  2148. pygpt_net/ui/widget/lists/index.py +0 -0
  2149. pygpt_net/ui/widget/lists/index_combo.py +0 -0
  2150. pygpt_net/ui/widget/lists/llama_mode_combo.py +0 -0
  2151. pygpt_net/ui/widget/lists/mode_combo.py +0 -0
  2152. pygpt_net/ui/widget/lists/model_combo.py +0 -0
  2153. pygpt_net/ui/widget/lists/model_editor.py +0 -0
  2154. pygpt_net/ui/widget/lists/model_importer.py +0 -0
  2155. pygpt_net/ui/widget/lists/preset_plugins.py +0 -0
  2156. pygpt_net/ui/widget/lists/profile.py +0 -0
  2157. pygpt_net/ui/widget/lists/settings.py +0 -0
  2158. pygpt_net/ui/widget/option/checkbox_list.py +0 -0
  2159. pygpt_net/ui/widget/option/cmd.py +0 -0
  2160. pygpt_net/ui/widget/option/combo.py +0 -0
  2161. pygpt_net/ui/widget/option/prompt.py +0 -0
  2162. pygpt_net/ui/widget/option/toggle.py +0 -0
  2163. pygpt_net/ui/widget/option/toggle_label.py +0 -0
  2164. pygpt_net/ui/widget/tabs/Input.py +0 -0
  2165. pygpt_net/ui/widget/tabs/__init__.py +0 -0
  2166. pygpt_net/ui/widget/tabs/body.py +0 -0
  2167. pygpt_net/ui/widget/tabs/layout.py +0 -0
  2168. pygpt_net/ui/widget/tabs/output.py +0 -0
  2169. pygpt_net/ui/widget/textarea/calendar_note.py +0 -0
  2170. pygpt_net/ui/widget/textarea/console.py +0 -0
  2171. pygpt_net/ui/widget/textarea/create.py +0 -0
  2172. pygpt_net/ui/widget/textarea/editor.py +0 -0
  2173. pygpt_net/ui/widget/textarea/find.py +0 -0
  2174. pygpt_net/ui/widget/textarea/html.py +0 -0
  2175. pygpt_net/ui/widget/textarea/url.py +0 -0
  2176. pygpt_net/ui/widget/textarea/web.py +84 -154
  2177. pygpt_net/utils.py +17 -0
  2178. {pygpt_net-2.6.39.dist-info → pygpt_net-2.6.41.dist-info}/METADATA +12 -2
  2179. {pygpt_net-2.6.39.dist-info → pygpt_net-2.6.41.dist-info}/RECORD +53 -47
  2180. {pygpt_net-2.6.39.dist-info → pygpt_net-2.6.41.dist-info}/LICENSE +0 -0
  2181. {pygpt_net-2.6.39.dist-info → pygpt_net-2.6.41.dist-info}/WHEEL +0 -0
  2182. {pygpt_net-2.6.39.dist-info → pygpt_net-2.6.41.dist-info}/entry_points.txt +0 -0
@@ -6,13 +6,14 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.09.04 00:00:00 #
9
+ # Updated Date: 2025.09.11 08:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ import gc
12
13
  import json
13
14
  import os
14
15
  import re
15
- import gc
16
+ import html as _html
16
17
  from dataclasses import dataclass, field
17
18
 
18
19
  from datetime import datetime
@@ -20,14 +21,19 @@ from typing import Optional, List, Any
20
21
  from time import monotonic
21
22
  from io import StringIO
22
23
 
24
+ from PySide6.QtCore import QTimer, QUrl
25
+ from PySide6.QtWebEngineCore import QWebEnginePage
26
+
23
27
  from pygpt_net.core.render.base import BaseRenderer
24
28
  from pygpt_net.core.text.utils import has_unclosed_code_tag
25
29
  from pygpt_net.item.ctx import CtxItem, CtxMeta
26
30
  from pygpt_net.ui.widget.textarea.input import ChatInput
27
- from pygpt_net.utils import trans
31
+ from pygpt_net.ui.widget.textarea.web import ChatWebOutput
32
+ from pygpt_net.utils import trans, sizeof_fmt
28
33
  from pygpt_net.core.tabs.tab import Tab
29
34
 
30
35
  from .body import Body
36
+ from .debug import malloc_trim_linux, parse_bytes, mem_used_bytes
31
37
  from .helpers import Helpers
32
38
  from .parser import Parser
33
39
  from .pid import PidData
@@ -39,17 +45,10 @@ class Renderer(BaseRenderer):
39
45
 
40
46
  NODE_INPUT = 0
41
47
  NODE_OUTPUT = 1
42
- ENDINGS_CODE = (
43
- "</code></pre></div>",
44
- "</code></pre></div><br/>",
45
- "</code></pre></div><br>"
46
- )
47
- ENDINGS_LIST = (
48
- "</ul>",
49
- "</ol>",
50
- "</li>"
51
- )
52
48
  RE_AMP_LT_GT = re.compile(r'&amp;(lt|gt);')
49
+ RE_MD_STRUCTURAL = re.compile(
50
+ r'(?m)(^|\n)\s*(?:#{1,6}\s|[-*+]\s|\d+\.\s|>\s|\|[^|\n]+\|[^|\n]*\|)'
51
+ )
53
52
 
54
53
  @dataclass(slots=True)
55
54
  class _AppendBuffer:
@@ -111,13 +110,52 @@ class Renderer(BaseRenderer):
111
110
  self._icon_sync = os.path.join(app_path, "data", "icons", "sync.svg")
112
111
  self._file_prefix = 'file:///' if self.window and self.window.core.platforms.is_windows() else 'file://'
113
112
 
114
- self._thr = {}
115
- self._throttle_interval = 0.03 # 30 ms delay
113
+ # Bridge readiness for node append/replace path
114
+ self._bridge_ready: dict[int, bool] = {}
115
+ self._pending_nodes: dict[int, list[tuple[bool, str]]] = {} # (replace, payload)
116
+ self._pending_timer: dict[int, QTimer] = {}
117
+
118
+ def _cfg(name: str, default: int) -> int:
119
+ try:
120
+ return int(self.window.core.config.get(name, default) if self.window else default)
121
+ except Exception:
122
+ return default
123
+
124
+ # ------------------------------------------------------------------
125
+ # Python-side micro-batching for streaming
126
+ # ------------------------------------------------------------------
127
+ # render.stream.interval_ms (int, default 100)
128
+ # render.stream.max_bytes (int, default 8192)
129
+ # render.stream.emergency_bytes (int, default 524288)
130
+
131
+ self._stream_interval_ms: int = _cfg('render.stream.interval_ms', 30) # ~100ms pacing
132
+ self._stream_max_bytes: int = _cfg('render.stream.max_bytes', 8 * 1024) # idle flush threshold
133
+ self._stream_emergency_bytes: int = _cfg('render.stream.emergency_bytes', 512 * 1024) # backstop
134
+
135
+ # Per-PID streaming state
136
+ self._stream_acc: dict[int, Renderer._AppendBuffer] = {}
137
+ self._stream_timer: dict[int, QTimer] = {}
138
+ self._stream_header: dict[int, str] = {}
139
+ self._stream_last_flush: dict[int, float] = {}
140
+
141
+ # Pid-related cached methods
142
+ self._get_pid = None
143
+ self._get_output_node_by_meta = None
144
+ self._get_output_node_by_pid = None
145
+ if (self.window and hasattr(self.window, "core")
146
+ and hasattr(self.window.core, "ctx")
147
+ and hasattr(self.window.core.ctx, "output")):
148
+ self._get_pid = self.window.core.ctx.output.get_pid
149
+ self._get_output_node_by_meta = self.window.core.ctx.output.get_current
150
+ self._get_output_node_by_pid = self.window.core.ctx.output.get_by_pid
151
+
152
+ # store last memory cleanup time
153
+ self._last_memory_cleanup = None
154
+ self._min_memory_cleanup_interval = 30 # seconds
155
+ self._min_memory_cleanup_bytes = 2147483648 # 2GB, TODO: init at startup based on system RAM
116
156
 
117
157
  def prepare(self):
118
- """
119
- Prepare renderer
120
- """
158
+ """Prepare renderer"""
121
159
  self.pids = {}
122
160
 
123
161
  def on_load(self, meta: CtxMeta = None):
@@ -129,7 +167,6 @@ class Renderer(BaseRenderer):
129
167
  node = self.get_output_node(meta)
130
168
  node.set_meta(meta)
131
169
  self.reset(meta)
132
- self.parser.reset()
133
170
  try:
134
171
  node.page().runJavaScript("if (typeof window.prepare !== 'undefined') prepare();")
135
172
  except Exception:
@@ -152,6 +189,12 @@ class Renderer(BaseRenderer):
152
189
  if pid is None or pid not in self.pids:
153
190
  return
154
191
 
192
+ node = self.get_output_node_by_pid(pid)
193
+ if node:
194
+ if pid not in self._bridge_ready:
195
+ self._bridge_ready[pid] = False
196
+ self._pending_nodes.setdefault(pid, [])
197
+
155
198
  self.pids[pid].loaded = True
156
199
  if self.pids[pid].html != "" and not self.pids[pid].use_buffer:
157
200
  self.clear_chunks_input(pid)
@@ -160,19 +203,23 @@ class Renderer(BaseRenderer):
160
203
  self.append(pid, self.pids[pid].html, flush=True)
161
204
  self.pids[pid].html = ""
162
205
 
163
- def get_pid(self, meta: CtxMeta):
206
+ def get_pid(self, meta: CtxMeta) -> Optional[int]:
164
207
  """
165
208
  Get PID for context meta
166
209
 
167
- :param meta: context PID
210
+ :param meta: context meta
211
+ :return: PID or None
168
212
  """
169
- return self.window.core.ctx.output.get_pid(meta)
213
+ if self._get_pid is None:
214
+ self._get_pid = self.window.core.ctx.output.get_pid
215
+ return self._get_pid(meta)
170
216
 
171
- def get_or_create_pid(self, meta: CtxMeta):
217
+ def get_or_create_pid(self, meta: CtxMeta) -> Optional[int]:
172
218
  """
173
219
  Get PID for context meta and create PID data (if not exists)
174
220
 
175
- :param meta: context PID
221
+ :param meta: context meta
222
+ :return: PID or None
176
223
  """
177
224
  if meta is not None:
178
225
  pid = self.get_pid(meta)
@@ -194,11 +241,12 @@ class Renderer(BaseRenderer):
194
241
  if pid is not None:
195
242
  self.pids[pid] = PidData(pid, meta)
196
243
 
197
- def get_pid_data(self, pid: int):
244
+ def get_pid_data(self, pid: int) -> Optional[PidData]:
198
245
  """
199
246
  Get PID data for given PID
200
247
 
201
248
  :param pid: PID
249
+ :return: PidData or None
202
250
  """
203
251
  if pid in self.pids:
204
252
  return self.pids[pid]
@@ -311,6 +359,9 @@ class Renderer(BaseRenderer):
311
359
  self.reload()
312
360
  self.pids[pid].clear()
313
361
 
362
+ # memory cleanup if needed
363
+ self.auto_cleanup(meta)
364
+
314
365
  def end_extra(
315
366
  self,
316
367
  meta: CtxMeta,
@@ -337,12 +388,26 @@ class Renderer(BaseRenderer):
337
388
  :param meta: context meta
338
389
  :param ctx: context item
339
390
  """
391
+ pid = self.get_or_create_pid(meta)
392
+ if pid is not None:
393
+ pctx = self.pids[pid]
394
+ pctx.clear()
395
+ self._stream_reset(pid)
340
396
  self.prev_chunk_replace = False
341
397
  try:
342
- self.get_output_node(meta).page().runJavaScript("beginStream();")
398
+ self.get_output_node(meta).page().runJavaScript(
399
+ "if (typeof window.beginStream !== 'undefined') beginStream();"
400
+ )
343
401
  except Exception:
344
402
  pass
345
403
 
404
+ # cache name header once per stream (used by JS to show avatar/name)
405
+ try:
406
+ self.pids[pid].header = self.get_name_header(ctx, stream=True)
407
+ except Exception:
408
+ self.pids[pid].header = ""
409
+ self.update_names(meta, ctx)
410
+
346
411
  def stream_end(
347
412
  self,
348
413
  meta: CtxMeta,
@@ -359,20 +424,64 @@ class Renderer(BaseRenderer):
359
424
  if pid is None:
360
425
  return
361
426
 
362
- self._throttle_emit(pid, force=True)
363
- self._throttle_reset(pid)
427
+ # Flush any pending micro-batch before we close the stream
428
+ self._stream_flush(pid, force=True)
364
429
  if self.window.controller.agent.legacy.enabled():
365
430
  if self.pids[pid].item is not None:
366
431
  self.append_context_item(meta, self.pids[pid].item)
367
432
  self.pids[pid].item = None
368
433
  self.pids[pid].clear()
369
434
  try:
370
- self.get_output_node(meta).page().runJavaScript("endStream();")
435
+ self.get_output_node(meta).page().runJavaScript("if (typeof window.endStream !== 'undefined') endStream();")
371
436
  except Exception:
372
437
  pass
438
+ self._stream_reset(pid) # clean after end
439
+
440
+ # memory cleanup if needed
441
+ self.auto_cleanup(meta)
373
442
 
374
- # release strings
375
- gc.collect()
443
+ def auto_cleanup(self, meta: CtxMeta):
444
+ """
445
+ Automatic cleanup after context is done
446
+
447
+ :param meta: context meta
448
+ """
449
+ # if memory limit reached - destroy old page view
450
+ try:
451
+ limit_bytes = parse_bytes(self.window.core.config.get('render.memory.limit', 0))
452
+ except Exception as e:
453
+ self.window.core.debug.log("[Renderer] auto-cleanup:", e)
454
+ limit_bytes = 0
455
+ #if limit_bytes <= 0 or limit_bytes < self._min_memory_cleanup_bytes:
456
+ if limit_bytes <= 0:
457
+ self.auto_cleanup_soft(meta)
458
+ return
459
+ used = mem_used_bytes()
460
+ if used >= limit_bytes:
461
+ now = datetime.now()
462
+ if self._last_memory_cleanup is not None:
463
+ delta = (now - self._last_memory_cleanup).total_seconds()
464
+ if delta < self._min_memory_cleanup_interval:
465
+ return
466
+ try:
467
+ self._last_memory_cleanup = now
468
+ self.fresh(meta, force=True)
469
+ print(f"[Renderer] Memory auto-cleanup done, reached limit: {sizeof_fmt(used)} / {sizeof_fmt(limit_bytes)}")
470
+ except Exception as e:
471
+ self.window.core.debug.log(e)
472
+ else:
473
+ self.auto_cleanup_soft(meta)
474
+
475
+ def auto_cleanup_soft(self, meta: CtxMeta = None):
476
+ """
477
+ Automatic soft cleanup (try to trim memory)
478
+
479
+ :param meta: context meta
480
+ """
481
+ try:
482
+ malloc_trim_linux()
483
+ except Exception:
484
+ pass
376
485
 
377
486
  def append_context(
378
487
  self,
@@ -445,7 +554,6 @@ class Renderer(BaseRenderer):
445
554
  self.pids[pid].html,
446
555
  flush=True,
447
556
  )
448
- self.parser.reset()
449
557
 
450
558
  def append_context_all(
451
559
  self,
@@ -544,7 +652,6 @@ class Renderer(BaseRenderer):
544
652
  flush=True,
545
653
  replace=True,
546
654
  )
547
- self.parser.reset()
548
655
 
549
656
  def prepare_input(
550
657
  self, meta: CtxMeta,
@@ -612,6 +719,7 @@ class Renderer(BaseRenderer):
612
719
  if self.is_stream() and not append:
613
720
  content = self.prepare_node(meta, ctx, text, self.NODE_INPUT)
614
721
  self.append_chunk_input(meta, ctx, content, begin=False)
722
+ text = None
615
723
  return
616
724
  self.append_node(
617
725
  meta=meta,
@@ -619,6 +727,7 @@ class Renderer(BaseRenderer):
619
727
  html=text,
620
728
  type=self.NODE_INPUT,
621
729
  )
730
+ text = None # free reference
622
731
 
623
732
  def prepare_output(
624
733
  self,
@@ -692,7 +801,10 @@ class Renderer(BaseRenderer):
692
801
  begin: bool = False
693
802
  ):
694
803
  """
695
- Append output chunk to output
804
+ Append streamed Markdown chunk to JS with micro-batching.
805
+ - No Python-side parsing
806
+ - No Python-side full buffer retention
807
+ - Minimal signal rate thanks to micro-batching (per PID)
696
808
 
697
809
  :param meta: context meta
698
810
  :param ctx: context item
@@ -700,124 +812,32 @@ class Renderer(BaseRenderer):
700
812
  :param begin: if it is the beginning of the text
701
813
  """
702
814
  pid = self.get_or_create_pid(meta)
703
- pctx = self.pids[pid]
704
- pctx.item = ctx
705
-
706
- if not text_chunk:
707
- if begin:
708
- pctx.clear()
709
- self._throttle_emit(pid, force=True)
710
- self._throttle_reset(pid)
815
+ if pid is None:
711
816
  return
712
817
 
713
- if begin:
714
- # Prepare name header once per streaming session
715
- pctx.header = self.get_name_header(ctx, stream=True)
716
- self.update_names(meta, ctx)
717
-
718
- name_header_str = pctx.header
719
- text_chunk = text_chunk if isinstance(text_chunk, str) else str(text_chunk)
720
- # Escape angle brackets only if present to avoid unnecessary allocations
721
- if ('<' in text_chunk) or ('>' in text_chunk):
722
- text_chunk = text_chunk.translate({ord('<'): '&lt;', ord('>'): '&gt;'})
723
-
724
- if begin:
725
- if self.is_debug():
726
- debug = self.append_debug(ctx, pid, "stream")
727
- if debug:
728
- text_chunk = debug + text_chunk
729
- self._throttle_emit(pid, force=True)
730
- self._throttle_reset(pid)
731
- pctx.clear()
732
- pctx.is_cmd = False
733
- self.clear_chunks_output(pid)
734
- self.prev_chunk_replace = False
735
-
736
- # Append to the logical buffer (owned by pid)
737
- pctx.append_buffer(text_chunk)
738
- buffer = pctx.buffer
739
-
740
- # Cheap detection of open code fence without full parse
741
- open_code = has_unclosed_code_tag(buffer)
742
-
743
- # Newline/flow state
744
- is_n = "\n" in text_chunk
745
- is_newline = is_n or buffer.endswith("\n") or open_code
746
- force_replace = self.prev_chunk_newline
747
- self.prev_chunk_newline = bool(is_n)
748
-
749
- replace = False
750
- if is_newline or force_replace:
751
- replace = True
752
- # Do not replace for an open code block unless a newline arrived
753
- if open_code and not is_n:
754
- replace = False
755
-
756
- thr = self._throttle_get(pid)
757
- html = None
758
-
759
- # Only parse when required:
760
- # - a replace is needed now, or
761
- # - a replace is pending in the throttle and must be refreshed, or
762
- # - rarely: we must detect list termination without a newline
763
- need_parse_for_pending_replace = (thr["op"] == 1)
764
- need_parse_for_list = False
765
-
766
- if not replace:
767
- # Very rare case: list closing without newline. Check on a short tail only.
768
- # This keeps behavior intact while avoiding full-buffer parse on every chunk.
769
- tail = buffer[-4096:]
770
- if tail:
771
- tail_to_parse = f"{tail}\n```" if open_code else tail
772
- tail_html = self.parser.parse(tail_to_parse)
773
- need_parse_for_list = tail_html.endswith(self.ENDINGS_LIST)
774
- # Tail string is short and will be collected promptly
775
- del tail_html
776
- if need_parse_for_list:
777
- replace = True
778
-
779
- if replace or need_parse_for_pending_replace:
780
- buffer_to_parse = f"{buffer}\n```" if open_code else buffer
781
- html = self.parser.parse(buffer_to_parse)
782
- # Help the GC by breaking the reference as soon as possible
783
- del buffer_to_parse
784
-
785
- is_code_block = open_code
786
-
787
- # Adjust output chunk formatting based on block type
788
- if not is_code_block:
789
- if is_n:
790
- # Convert text newlines to <br/> in non-code context
791
- text_chunk = text_chunk.replace("\n", "<br/>")
792
- else:
793
- # When previous operation replaced content and this chunk closes the fence,
794
- # prepend a newline so the final code block renders correctly.
795
- if self.prev_chunk_replace and (is_code_block and not has_unclosed_code_tag(text_chunk)):
796
- text_chunk = "\n" + text_chunk
797
-
798
- # Update replace flag for next iteration AFTER formatting decisions
799
- self.prev_chunk_replace = replace
818
+ pctx = self.pids[pid]
819
+ pctx.item = ctx
800
820
 
801
821
  if begin:
822
+ # Reset stream area and loader on the JS side
802
823
  try:
803
- self.get_output_node(meta).page().runJavaScript("hideLoading();")
824
+ self.get_output_node(meta).page().runJavaScript(
825
+ "if (typeof window.beginStream !== 'undefined') beginStream(true);"
826
+ )
804
827
  except Exception:
805
828
  pass
829
+ # Prepare name header for this stream (avatar/name)
830
+ pctx.header = self.get_name_header(ctx, stream=True)
831
+ self._stream_reset(pid)
832
+ self.update_names(meta, ctx)
806
833
 
807
- # Queue throttled emission; HTML is only provided when it is really needed
808
- self._throttle_queue(
809
- pid=pid,
810
- name=name_header_str or "",
811
- html=html if html is not None else "",
812
- text_chunk=text_chunk,
813
- replace=replace,
814
- is_code_block=is_code_block,
815
- )
816
- # Explicitly drop local ref to large html string as early as possible
817
- html = None
834
+ if not text_chunk:
835
+ return
818
836
 
819
- # Emit if throttle interval allows
820
- self._throttle_emit(pid, force=False)
837
+ # Push chunk into per-PID micro-batch buffer (will be flushed by a QTimer)
838
+ self._stream_push(pid, pctx.header or "", str(text_chunk))
839
+ # self.get_output_node(meta).page().bridge.chunk.emit(pctx.header or "", str(text_chunk))
840
+ text_chunk = None # release ref
821
841
 
822
842
  def next_chunk(
823
843
  self,
@@ -831,8 +851,8 @@ class Renderer(BaseRenderer):
831
851
  :param ctx: context item
832
852
  """
833
853
  pid = self.get_or_create_pid(meta)
834
- self._throttle_emit(pid, force=True)
835
- self._throttle_reset(pid)
854
+ # Ensure all pending chunks are delivered before switching message
855
+ self._stream_flush(pid, force=True)
836
856
  self.pids[pid].item = ctx
837
857
  self.pids[pid].buffer = ""
838
858
  self.update_names(meta, ctx)
@@ -840,10 +860,15 @@ class Renderer(BaseRenderer):
840
860
  self.prev_chunk_newline = False
841
861
  try:
842
862
  self.get_output_node(meta).page().runJavaScript(
843
- "nextStream();"
863
+ "if (typeof window.nextStream !== 'undefined') nextStream();"
844
864
  )
845
865
  except Exception:
846
866
  pass
867
+ # Reset micro-batch header for the next message
868
+ try:
869
+ self.pids[pid].header = self.get_name_header(ctx, stream=True)
870
+ except Exception:
871
+ self.pids[pid].header = ""
847
872
 
848
873
  def append_chunk_input(
849
874
  self,
@@ -860,23 +885,19 @@ class Renderer(BaseRenderer):
860
885
  :param text_chunk: text chunk
861
886
  :param begin: if it is the beginning of the text
862
887
  """
863
- if text_chunk is None or text_chunk == "":
888
+ if not text_chunk:
864
889
  return
865
890
  if ctx.hidden:
866
891
  return
867
-
868
- pid = self.get_or_create_pid(meta)
869
- self.clear_chunks_input(pid)
870
892
  try:
871
- self.get_output_node(meta).page().runJavaScript(
872
- f"""appendToInput({self.to_json(
873
- self.sanitize_html(
874
- self.helpers.format_chunk(text_chunk)
875
- )
876
- )});"""
893
+ self.get_output_node(meta).page().bridge.nodeInput.emit(
894
+ self.sanitize_html(
895
+ text_chunk
896
+ )
877
897
  )
878
898
  except Exception:
879
899
  pass
900
+ text_chunk = None # free reference
880
901
 
881
902
  def append_live(
882
903
  self,
@@ -912,15 +933,13 @@ class Renderer(BaseRenderer):
912
933
  self.pids[pid].is_cmd = False
913
934
  self.clear_live(meta, ctx)
914
935
  self.pids[pid].append_live_buffer(raw_chunk)
936
+ raw_chunk = None # free reference
915
937
 
916
- to_append = self.pids[pid].live_buffer
917
- if has_unclosed_code_tag(self.pids[pid].live_buffer):
918
- to_append += "\n```"
919
938
  try:
920
939
  self.get_output_node(meta).page().runJavaScript(
921
940
  f"""replaceLive({self.to_json(
922
941
  self.sanitize_html(
923
- self.parser.parse(to_append)
942
+ self.pids[pid].live_buffer
924
943
  )
925
944
  )});"""
926
945
  )
@@ -937,12 +956,10 @@ class Renderer(BaseRenderer):
937
956
  if meta is None:
938
957
  return
939
958
  pid = self.get_or_create_pid(meta)
940
- if not self.pids[pid].loaded:
941
- js = "var element = document.getElementById('_append_live_');if (element) { element.replaceChildren(); }"
942
- else:
943
- js = "clearLive();"
944
959
  try:
945
- self.get_output_node_by_pid(pid).page().runJavaScript(js)
960
+ self.get_output_node_by_pid(pid).page().runJavaScript(
961
+ "if (typeof window.clearLive !== 'undefined') clearLive();"
962
+ )
946
963
  except Exception:
947
964
  pass
948
965
 
@@ -1004,6 +1021,7 @@ class Renderer(BaseRenderer):
1004
1021
  else:
1005
1022
  if not flush:
1006
1023
  self.pids[pid].append_html(html)
1024
+ html = None # free reference
1007
1025
 
1008
1026
  def append_context_item(
1009
1027
  self,
@@ -1043,7 +1061,7 @@ class Renderer(BaseRenderer):
1043
1061
  """
1044
1062
  Append extra data (images, files, etc.) to output
1045
1063
 
1046
- :param meta: context meta
1064
+ :param meta: Context meta
1047
1065
  :param ctx: context item
1048
1066
  :param footer: True if it is a footer
1049
1067
  :param render: True if render, False if only return HTML
@@ -1183,12 +1201,11 @@ class Renderer(BaseRenderer):
1183
1201
  :param pid: context PID
1184
1202
  :param clear_nodes: True if clear nodes
1185
1203
  """
1186
- self.parser.reset()
1187
1204
  self.pids[pid].item = None
1188
1205
  self.pids[pid].html = ""
1189
1206
  if clear_nodes:
1190
1207
  self.clear_nodes(pid)
1191
- self.clear_chunks(pid)
1208
+ self.clear_chunks(pid)
1192
1209
  self.pids[pid].images_appended = []
1193
1210
  self.pids[pid].urls_appended = []
1194
1211
  self.pids[pid].files_appended = []
@@ -1197,7 +1214,7 @@ class Renderer(BaseRenderer):
1197
1214
  node.reset_current_content()
1198
1215
  self.reset_names_by_pid(pid)
1199
1216
  self.prev_chunk_replace = False
1200
- self._throttle_reset(pid)
1217
+ self._stream_reset(pid) # NEW
1201
1218
 
1202
1219
  def clear_input(self):
1203
1220
  """Clear input"""
@@ -1237,12 +1254,10 @@ class Renderer(BaseRenderer):
1237
1254
  """
1238
1255
  if pid is None:
1239
1256
  return
1240
- if not self.pids[pid].loaded:
1241
- js = "var element = document.getElementById('_append_input_');if (element) { element.replaceChildren(); }"
1242
- else:
1243
- js = "clearInput();"
1244
1257
  try:
1245
- self.get_output_node_by_pid(pid).page().runJavaScript(js)
1258
+ self.get_output_node_by_pid(pid).page().runJavaScript(
1259
+ "if (typeof window.clearInput !== 'undefined') clearInput();"
1260
+ )
1246
1261
  except Exception:
1247
1262
  pass
1248
1263
 
@@ -1256,15 +1271,13 @@ class Renderer(BaseRenderer):
1256
1271
  :pid: context PID
1257
1272
  """
1258
1273
  self.prev_chunk_replace = False
1259
- if not self.pids[pid].loaded:
1260
- js = "var element = document.getElementById('_append_output_');if (element) { element.replaceChildren(); }"
1261
- else:
1262
- js = "clearOutput();"
1263
1274
  try:
1264
- self.get_output_node_by_pid(pid).page().runJavaScript(js)
1275
+ self.get_output_node_by_pid(pid).page().runJavaScript(
1276
+ "if (typeof window.clearOutput !== 'undefined') clearOutput();"
1277
+ )
1265
1278
  except Exception:
1266
1279
  pass
1267
- self._throttle_reset(pid)
1280
+ self._stream_reset(pid) # NEW
1268
1281
 
1269
1282
  def clear_nodes(
1270
1283
  self,
@@ -1275,12 +1288,10 @@ class Renderer(BaseRenderer):
1275
1288
 
1276
1289
  :pid: context PID
1277
1290
  """
1278
- if not self.pids[pid].loaded:
1279
- js = "var element = document.getElementById('_nodes_');if (element) { element.replaceChildren(); }"
1280
- else:
1281
- js = "clearNodes();"
1282
1291
  try:
1283
- self.get_output_node_by_pid(pid).page().runJavaScript(js)
1292
+ self.get_output_node_by_pid(pid).page().runJavaScript(
1293
+ "if (typeof window.clearNodes !== 'undefined') clearNodes();"
1294
+ )
1284
1295
  except Exception:
1285
1296
  pass
1286
1297
 
@@ -1376,33 +1387,40 @@ class Renderer(BaseRenderer):
1376
1387
  next_ctx: Optional[CtxItem] = None
1377
1388
  ) -> str:
1378
1389
  """
1379
- Prepare output node
1390
+ Prepare output node wrapper; content stays as raw Markdown in HTML (md-block-markdown=1).
1391
+ JS (markdown-it) will render it and decorate code blocks.
1392
+ Backward compatible with previous JS pipeline and public API.
1380
1393
 
1381
- :param meta: CtxMeta
1394
+ :param meta: context meta
1382
1395
  :param ctx: CtxItem instance
1383
- :param html: html text
1396
+ :param html: raw markdown text (pre/post formatted)
1384
1397
  :param prev_ctx: previous context item
1385
1398
  :param next_ctx: next context item
1386
1399
  :return: prepared HTML
1387
1400
  """
1388
1401
  is_cmd = (
1389
- next_ctx is not None and
1390
- next_ctx.internal and
1391
- (len(ctx.cmds) > 0 or (ctx.extra_ctx is not None and len(ctx.extra_ctx) > 0))
1402
+ next_ctx is not None and
1403
+ next_ctx.internal and
1404
+ (len(ctx.cmds) > 0 or (ctx.extra_ctx is not None and len(ctx.extra_ctx) > 0))
1392
1405
  )
1406
+
1393
1407
  pid = self.get_or_create_pid(meta)
1394
1408
  msg_id = f"msg-bot-{ctx.id}" if ctx is not None else ""
1395
- html = self.helpers.pre_format_text(html)
1396
- html = self.parser.parse(html)
1397
- html = self.append_timestamp(ctx, html, type=self.NODE_OUTPUT)
1398
- html = self.helpers.post_format_text(html)
1409
+
1410
+ # raw Markdown (no Python-side HTML rendering); keep existing pre/post formatting hooks
1411
+ md_src = self.helpers.pre_format_text(html)
1412
+ md_text = self.helpers.post_format_text(md_src)
1413
+
1414
+ # Escape Markdown for safe inclusion as textContent (browser will decode entities back to chars)
1415
+ # This ensures no HTML is parsed before markdown-it processes the content on the JS side.
1416
+ md_text_escaped = _html.escape(md_text, quote=False)
1417
+
1418
+ # extras/footer
1399
1419
  extra = self.append_extra(meta, ctx, footer=True, render=False)
1400
1420
  footer = self.body.prepare_action_icons(ctx)
1401
1421
 
1402
1422
  tool_output = ""
1403
- spinner = ""
1404
1423
  output_class = "display:none"
1405
-
1406
1424
  if is_cmd:
1407
1425
  if ctx.results is not None and len(ctx.results) > 0 \
1408
1426
  and isinstance(ctx.extra, dict) and "agent_step" in ctx.extra:
@@ -1411,28 +1429,31 @@ class Renderer(BaseRenderer):
1411
1429
  else:
1412
1430
  tool_output = self.helpers.format_cmd_text(str(next_ctx.input), indent=True)
1413
1431
  output_class = ""
1414
-
1415
1432
  elif ctx.results is not None and len(ctx.results) > 0 \
1416
1433
  and isinstance(ctx.extra, dict) and "agent_step" in ctx.extra:
1417
1434
  tool_output = self.helpers.format_cmd_text(str(ctx.input), indent=True)
1418
- else:
1419
- out = (getattr(ctx, "output", "") or "")
1420
- cmds = getattr(ctx, "cmds", ())
1421
- if next_ctx is None and (
1422
- cmds
1423
- or out.startswith(('<tool>{"cmd"', '&lt;tool&gt;{"cmd"'))
1424
- or out.rstrip().endswith(('}</tool>', '}&lt;/tool&gt;'))
1425
- ):
1426
- spinner_class = ""
1427
- spinner = ""
1428
- # spinner_class = "" if ctx.live else "display:none"
1429
- # spinner = f"<span class=\"spinner\" style=\"{spinner_class}\"><img src=\"{self._file_prefix}{self._icon_sync}\" width=\"30\" height=\"30\" class=\"loading\"></span>"
1430
1435
 
1431
1436
  tool_extra = self.body.prepare_tool_extra(ctx)
1432
1437
  debug = self.append_debug(ctx, pid, "output") if self.is_debug() else ""
1433
1438
  name_header = self.get_name_header(ctx)
1434
1439
 
1435
- return f"<div class='msg-box msg-bot' id='{msg_id}'>{name_header}<div class='msg'>{html}{spinner}<div class='msg-tool-extra'>{tool_extra}</div><div class='tool-output' style='{output_class}'><span class='toggle-cmd-output' onclick='toggleToolOutput({ctx.id});' title='{trans('action.cmd.expand')}' role='button'><img src='{self._file_prefix}{self._icon_expand}' width='25' height='25' valign='middle'></span><div class='content' style='display:none'>{tool_output}</div></div><div class='msg-extra'>{extra}</div>{footer}{debug}</div></div>"
1440
+ # Native Markdown block: JS runtime will pick [md-block-markdown] and render via markdown-it.
1441
+ return (
1442
+ f"<div class='msg-box msg-bot' id='{msg_id}'>"
1443
+ f"{name_header}"
1444
+ f"<div class='msg'>"
1445
+ f"<div class='md-block' md-block-markdown='1'>{md_text_escaped}</div>"
1446
+ f"<div class='msg-tool-extra'>{tool_extra}</div>"
1447
+ f"<div class='tool-output' style='{output_class}'>"
1448
+ f"<span class='toggle-cmd-output' onclick='toggleToolOutput({ctx.id});' "
1449
+ f"title='{trans('action.cmd.expand')}' role='button'>"
1450
+ f"<img src='{self._file_prefix}{self._icon_expand}' width='25' height='25' valign='middle'></span>"
1451
+ f"<div class='content' style='display:none'>{tool_output}</div>"
1452
+ f"</div>"
1453
+ f"<div class='msg-extra'>{extra}</div>"
1454
+ f"{footer}{debug}"
1455
+ f"</div></div>"
1456
+ )
1436
1457
 
1437
1458
  def get_name_header(self, ctx: CtxItem, stream: bool = False) -> str:
1438
1459
  """
@@ -1473,31 +1494,48 @@ class Renderer(BaseRenderer):
1473
1494
  else:
1474
1495
  return f"<div class=\"name-header name-bot\">{avatar_html}{output_name}</div>"
1475
1496
 
1476
- def flush_output(
1477
- self,
1478
- pid: Optional[int],
1479
- html: str,
1480
- replace: bool = False
1481
- ):
1497
+ def flush_output(self, pid: int, html: str, replace: bool = False):
1482
1498
  """
1483
- Flush output
1499
+ Send content via QWebChannel when ready; otherwise queue with a safe fallback.
1484
1500
 
1485
1501
  :param pid: context PID
1486
1502
  :param html: HTML code
1487
1503
  :param replace: True if replace current content
1488
1504
  """
1505
+ if pid is None:
1506
+ return
1507
+ node = self.get_output_node_by_pid(pid)
1508
+ if node is None:
1509
+ return
1489
1510
  try:
1490
- if replace:
1491
- self.get_output_node_by_pid(pid).page().runJavaScript(
1492
- f"if (typeof window.replaceNodes !== 'undefined') replaceNodes({self.to_json(self.sanitize_html(html))});"
1493
- )
1494
- else:
1495
- self.get_output_node_by_pid(pid).page().runJavaScript(
1496
- f"if (typeof window.appendNode !== 'undefined') appendNode({self.to_json(self.sanitize_html(html))});"
1497
- )
1511
+ if pid not in self._bridge_ready:
1512
+ self._bridge_ready[pid] = False
1513
+ self._pending_nodes.setdefault(pid, [])
1514
+ if self._bridge_ready.get(pid, False):
1515
+ br = getattr(node.page(), "bridge", None)
1516
+ if br is not None:
1517
+ if replace and hasattr(br, "nodeReplace"):
1518
+ self.clear_nodes(pid)
1519
+ br.nodeReplace.emit(html)
1520
+ return
1521
+ if not replace and hasattr(br, "node"):
1522
+ br.node.emit(html)
1523
+ return
1524
+ # Not ready yet -> queue
1525
+ self._queue_node(pid, html, replace)
1498
1526
  except Exception:
1499
- pass
1500
- html = None
1527
+ # JS fallback
1528
+ try:
1529
+ if replace:
1530
+ node.page().runJavaScript(
1531
+ f"if (typeof window.replaceNodes !== 'undefined') replaceNodes({self.to_json(html)});"
1532
+ )
1533
+ else:
1534
+ node.page().runJavaScript(
1535
+ f"if (typeof window.appendNode !== 'undefined') appendNode({self.to_json(html)});"
1536
+ )
1537
+ except Exception:
1538
+ pass
1501
1539
 
1502
1540
  def reload(self):
1503
1541
  """Reload output, called externally only on theme change to redraw content"""
@@ -1523,45 +1561,107 @@ class Renderer(BaseRenderer):
1523
1561
 
1524
1562
  def fresh(
1525
1563
  self,
1526
- meta: Optional[CtxMeta] = None
1564
+ meta: Optional[CtxMeta] = None,
1565
+ force: bool = False
1527
1566
  ):
1528
1567
  """
1529
- Reset page
1568
+ Reset page / unload old renderer from memory
1530
1569
 
1531
1570
  :param meta: context meta
1571
+ :param force: True if force recycle even if not loaded
1532
1572
  """
1573
+ plain = self.window.core.config.get('render.plain')
1574
+ if plain:
1575
+ return # plain text mode, no need to recycle
1576
+
1533
1577
  pid = self.get_or_create_pid(meta)
1534
1578
  if pid is None:
1535
1579
  return
1536
1580
  node = self.get_output_node_by_pid(pid)
1537
1581
  if node is not None:
1538
- node.resetPage()
1582
+ t = self._pending_timer.pop(pid, None)
1583
+ if t:
1584
+ try:
1585
+ t.stop()
1586
+ except Exception:
1587
+ pass
1588
+ self._bridge_ready[pid] = False
1589
+ self._pending_nodes[pid] = []
1590
+ node.hide()
1591
+ p = node.page()
1592
+ p.triggerAction(QWebEnginePage.Stop)
1593
+ p.setUrl(QUrl("about:blank"))
1594
+ p.history().clear()
1595
+ p.setLifecycleState(QWebEnginePage.LifecycleState.Discarded)
1596
+ self._stream_reset(pid)
1597
+ self.pids[pid].clear(all=True)
1598
+ self.pids[pid].loaded = False
1599
+ self.recycle(node, meta)
1600
+ self.flush(pid)
1601
+
1602
+ def recycle(
1603
+ self,
1604
+ node: ChatWebOutput,
1605
+ meta: Optional[CtxMeta] = None
1606
+ ):
1607
+ """
1608
+ Recycle renderer to free memory and avoid leaks
1539
1609
 
1540
- self._throttle_reset(pid)
1610
+ Swaps out the old QWebEngineView with a fresh instance.
1611
+
1612
+ :param node: output node
1613
+ :param meta: context meta
1614
+ """
1615
+ tab = node.get_tab()
1616
+ layout = tab.child.layout() # layout of TabBody
1617
+ layout.removeWidget(node)
1618
+ self.window.ui.nodes['output'].pop(tab.pid, None)
1619
+ tab.child.delete_refs()
1620
+
1621
+ node.on_delete() # destroy old node
1622
+
1623
+ view = ChatWebOutput(self.window)
1624
+ view.set_tab(tab)
1625
+ view.set_meta(meta)
1626
+ view.signals.save_as.connect(self.window.controller.chat.render.handle_save_as)
1627
+ view.signals.audio_read.connect(self.window.controller.chat.render.handle_audio_read)
1628
+
1629
+ layout.addWidget(view)
1630
+ view.setVisible(True)
1631
+ self.window.ui.nodes['output'][tab.pid] = view
1632
+ try:
1633
+ gc.collect()
1634
+ except Exception:
1635
+ pass
1636
+ self.auto_cleanup_soft(meta) # trim memory in Linux
1541
1637
 
1542
1638
  def get_output_node(
1543
1639
  self,
1544
1640
  meta: Optional[CtxMeta] = None
1545
- ):
1641
+ ) -> Optional[ChatWebOutput]:
1546
1642
  """
1547
1643
  Get output node
1548
1644
 
1549
1645
  :param meta: context meta
1550
1646
  :return: output node
1551
1647
  """
1552
- return self.window.core.ctx.output.get_current(meta)
1648
+ if self._get_output_node_by_meta is None:
1649
+ self._get_output_node_by_meta = self.window.core.ctx.output.get_output_node_by_meta
1650
+ return self._get_output_node_by_meta(meta)
1553
1651
 
1554
1652
  def get_output_node_by_pid(
1555
1653
  self,
1556
1654
  pid: Optional[int]
1557
- ):
1655
+ ) -> Optional[ChatWebOutput]:
1558
1656
  """
1559
1657
  Get output node by PID
1560
1658
 
1561
1659
  :param pid: context pid
1562
1660
  :return: output node
1563
1661
  """
1564
- return self.window.core.ctx.output.get_by_pid(pid)
1662
+ if self._get_output_node_by_pid is None:
1663
+ self._get_output_node_by_pid = self.window.core.ctx.output.get_output_node_by_pid
1664
+ return self._get_output_node_by_pid(pid)
1565
1665
 
1566
1666
  def get_input_node(self) -> ChatInput:
1567
1667
  """
@@ -1718,7 +1818,7 @@ class Renderer(BaseRenderer):
1718
1818
  self.clear_chunks(pid)
1719
1819
  self.clear_nodes(pid)
1720
1820
  self.pids[pid].html = ""
1721
- self._throttle_reset(pid)
1821
+ self._stream_reset(pid)
1722
1822
 
1723
1823
  def scroll_to_bottom(self):
1724
1824
  """Scroll to bottom"""
@@ -1859,9 +1959,9 @@ class Renderer(BaseRenderer):
1859
1959
  :param html: HTML string to sanitize
1860
1960
  :return: sanitized HTML string
1861
1961
  """
1962
+ return html
1862
1963
  if not html:
1863
1964
  return ""
1864
- # Fast path: avoid regex work and extra allocations when not needed
1865
1965
  if '&amp;' not in html:
1866
1966
  return html
1867
1967
  return self.RE_AMP_LT_GT.sub(r'&\1;', html)
@@ -1892,6 +1992,24 @@ class Renderer(BaseRenderer):
1892
1992
  """
1893
1993
  return self.window.core.config.get("debug.render", False)
1894
1994
 
1995
+ def js_stream_queue_len(self, pid: int):
1996
+ """
1997
+ Ask the JS side how many items are currently queued for streaming (streamQ.length).
1998
+
1999
+ :param pid: context PID
2000
+ """
2001
+ node = self.get_output_node_by_pid(pid)
2002
+ if node is None:
2003
+ print(f"PID {pid}: node not found")
2004
+ return
2005
+ try:
2006
+ node.page().runJavaScript(
2007
+ "typeof streamQ !== 'undefined' ? streamQ.length : -1",
2008
+ lambda val: print(f"PID {pid} streamQ.length =", val)
2009
+ )
2010
+ except Exception:
2011
+ pass
2012
+
1895
2013
  def remove_pid(self, pid: int):
1896
2014
  """
1897
2015
  Remove PID from renderer
@@ -1900,139 +2018,278 @@ class Renderer(BaseRenderer):
1900
2018
  """
1901
2019
  if pid in self.pids:
1902
2020
  del self.pids[pid]
1903
- self._thr.pop(pid, None)
2021
+ # Clean micro-batch resources
2022
+ self._stream_reset(pid)
2023
+ t = self._stream_timer.pop(pid, None)
2024
+ if t:
2025
+ try:
2026
+ t.stop()
2027
+ except Exception:
2028
+ pass
2029
+ self._stream_acc.pop(pid, None)
2030
+ self._stream_header.pop(pid, None)
2031
+ self._stream_last_flush.pop(pid, None)
1904
2032
 
1905
- def _throttle_get(self, pid: int) -> dict:
2033
+ def on_js_ready(self, pid: int) -> None:
1906
2034
  """
1907
- Return per-pid throttle state
2035
+ On JS ready - called from JS side via QWebChannel when bridge is ready.
1908
2036
 
1909
2037
  :param pid: context PID
1910
- :return: throttle state dictionary
1911
2038
  """
1912
- thr = self._thr.get(pid)
1913
- if thr is None:
1914
- thr = {
1915
- "last": 0.0,
1916
- "op": 0,
1917
- "name": "",
1918
- "replace_html": "",
1919
- "append": Renderer._AppendBuffer(),
1920
- "code": False,
1921
- }
1922
- self._thr[pid] = thr
1923
- return thr
2039
+ if pid not in self._bridge_ready:
2040
+ self._bridge_ready[pid] = False
2041
+ self._pending_nodes.setdefault(pid, [])
2042
+ self._bridge_ready[pid] = True
2043
+ self._drain_pending_nodes(pid)
1924
2044
 
1925
- def _throttle_reset(self, pid: Optional[int]):
2045
+ def _drain_pending_nodes(self, pid: int):
1926
2046
  """
1927
- Reset throttle state
2047
+ Drain any pending nodes queued while bridge was not ready.
1928
2048
 
1929
2049
  :param pid: context PID
1930
2050
  """
1931
- if pid is None:
2051
+ node = self.get_output_node_by_pid(pid)
2052
+ if node is None:
1932
2053
  return
1933
- thr = self._thr.get(pid)
1934
- if thr is None:
2054
+ br = getattr(node.page(), "bridge", None)
2055
+ if br is None:
1935
2056
  return
1936
- thr["op"] = 0
1937
- thr["name"] = ""
1938
- thr["replace_html"] = ""
1939
- # Replace append buffer instance to drop any capacity eagerly
1940
- thr["append"] = Renderer._AppendBuffer()
1941
- thr["code"] = False
1942
-
1943
- def _throttle_queue(
1944
- self,
1945
- pid: int,
1946
- name: str,
1947
- html: str,
1948
- text_chunk: str,
1949
- replace: bool,
1950
- is_code_block: bool
1951
- ):
2057
+ q = self._pending_nodes.get(pid, [])
2058
+ while q:
2059
+ replace, payload = q.pop(0)
2060
+ try:
2061
+ if replace and hasattr(br, "nodeReplace"):
2062
+ self.clear_nodes(pid)
2063
+ br.nodeReplace.emit(payload)
2064
+ elif not replace and hasattr(br, "node"):
2065
+ br.node.emit(payload)
2066
+ except Exception:
2067
+ # If something goes wrong, stop draining to avoid dropping further items.
2068
+ break
2069
+ # stop/clear fallback timer if any
2070
+ t = self._pending_timer.pop(pid, None)
2071
+ if t:
2072
+ try:
2073
+ t.stop()
2074
+ except Exception:
2075
+ pass
2076
+
2077
+ def _queue_node(self, pid: int, payload: str, replace: bool):
1952
2078
  """
1953
- Queue text chunk for throttled output
2079
+ Queue node payload for later delivery when bridge is ready, with a safe fallback.
1954
2080
 
1955
2081
  :param pid: context PID
1956
- :param name: name header string
1957
- :param html: HTML content to replace or append
1958
- :param text_chunk: text chunk to append
1959
- :param replace: True if the chunk should replace existing content
1960
- :param is_code_block: True if the chunk is a code block
1961
- """
1962
- thr = self._throttle_get(pid)
1963
- if name:
1964
- thr["name"] = name
1965
-
1966
- if replace:
1967
- thr["op"] = 1
1968
- thr["replace_html"] = html
1969
- # Drop previous append items aggressively when a replace snapshot is available
1970
- thr["append"].clear()
1971
- thr["code"] = bool(is_code_block)
1972
- else:
1973
- if thr["op"] == 1:
1974
- # Refresh the pending replace with the latest HTML snapshot
1975
- thr["replace_html"] = html
1976
- thr["code"] = bool(is_code_block)
1977
- return
1978
- thr["op"] = 2
1979
- thr["append"].append(text_chunk)
1980
- thr["code"] = bool(is_code_block)
2082
+ :param payload: sanitized HTML payload
2083
+ :param replace: True if replace current content
2084
+ """
2085
+ q = self._pending_nodes.setdefault(pid, [])
2086
+ q.append((replace, payload))
2087
+ if pid not in self._pending_timer:
2088
+ t = QTimer(self.window)
2089
+ t.setSingleShot(True)
2090
+ t.setInterval(1200) # ms
1981
2091
 
1982
- def _throttle_emit(self, pid: int, force: bool = False):
2092
+ def on_timeout(pid=pid):
2093
+ # Still not ready? Fallback: flush queued via runJavaScript once.
2094
+ node = self.get_output_node_by_pid(pid)
2095
+ if node:
2096
+ while self._pending_nodes.get(pid):
2097
+ rep, pl = self._pending_nodes[pid].pop(0)
2098
+ try:
2099
+ if rep:
2100
+ node.page().runJavaScript(
2101
+ f"if (typeof window.replaceNodes !== 'undefined') "
2102
+ f"replaceNodes({self.to_json(pl)});"
2103
+ )
2104
+ else:
2105
+ node.page().runJavaScript(
2106
+ f"if (typeof window.appendNode !== 'undefined') "
2107
+ f"appendNode({self.to_json(pl)});"
2108
+ )
2109
+ except Exception:
2110
+ pass
2111
+ self._pending_timer.pop(pid, None)
2112
+
2113
+ t.timeout.connect(on_timeout)
2114
+ self._pending_timer[pid] = t
2115
+ t.start()
2116
+
2117
+ # ------------------------- Micro-batching -------------------------
2118
+
2119
+ def _stream_get(self, pid: int) -> tuple[_AppendBuffer, QTimer]:
2120
+ """
2121
+ Get or create per-PID append buffer and timer for micro-batching.
2122
+ Timer is single-shot and (re)started only when there is pending data.
2123
+
2124
+ :param pid: context PID
2125
+ :return: (buffer, timer) tuple
1983
2126
  """
1984
- Emit throttled output to the node
2127
+ buf = self._stream_acc.get(pid)
2128
+ if buf is None:
2129
+ buf = Renderer._AppendBuffer()
2130
+ self._stream_acc[pid] = buf
2131
+
2132
+ t = self._stream_timer.get(pid)
2133
+ if t is None:
2134
+ t = QTimer(self.window)
2135
+ t.setSingleShot(True)
2136
+ t.setInterval(self._stream_interval_ms)
2137
+
2138
+ def on_timeout(pid=pid):
2139
+ # Flush pending batch and, if more data arrives later, timer will be restarted by _stream_push()
2140
+ self._stream_flush(pid, force=False)
2141
+
2142
+ t.timeout.connect(on_timeout)
2143
+ self._stream_timer[pid] = t
2144
+
2145
+ return buf, t
2146
+
2147
+ def _stream_reset(self, pid: Optional[int]):
2148
+ """
2149
+ Reset micro-batch resources for a PID. Safe to call frequently.
2150
+
2151
+ Clear buffer, stop timer, clear header and last-flush timestamp.
2152
+
2153
+ :param pid: context PID
2154
+ """
2155
+ if pid is None:
2156
+ return
2157
+ buf = self._stream_acc.get(pid)
2158
+ if buf:
2159
+ buf.clear()
2160
+ t = self._stream_timer.get(pid)
2161
+ if t and t.isActive():
2162
+ try:
2163
+ t.stop()
2164
+ except Exception:
2165
+ pass
2166
+ self._stream_header[pid] = ""
2167
+ self._stream_last_flush[pid] = 0.0
2168
+
2169
+ def _stream_push(self, pid: int, header: str, chunk: str):
2170
+ """
2171
+ Append chunk to per-PID buffer. Start the micro-batch timer if it's not running.
2172
+ If accumulated size crosses thresholds, flush immediately.
2173
+
2174
+ :param pid: context PID
2175
+ :param header: header/name for this stream (only used if first chunk)
2176
+ :param chunk: chunk of text to append
2177
+ """
2178
+ if not chunk:
2179
+ return
2180
+
2181
+ buf, timer = self._stream_get(pid)
2182
+ # Remember last known header for this PID
2183
+ if header and not self._stream_header.get(pid):
2184
+ self._stream_header[pid] = header
2185
+
2186
+ # Append chunk cheaply
2187
+ buf.append(chunk)
2188
+
2189
+ # Emergency backstop: if buffer is getting too large, flush now
2190
+ pending_size = getattr(buf, "_size", 0)
2191
+ if pending_size >= self._stream_emergency_bytes:
2192
+ self._stream_flush(pid, force=True)
2193
+ return
2194
+
2195
+ # Size-based early flush for responsiveness
2196
+ if pending_size >= self._stream_max_bytes:
2197
+ self._stream_flush(pid, force=True)
2198
+ return
2199
+
2200
+ # Start timer if not active to flush at ~frame rate
2201
+ if not timer.isActive():
2202
+ try:
2203
+ timer.start()
2204
+ except Exception:
2205
+ # As a fallback, if timer cannot start, flush synchronously
2206
+ self._stream_flush(pid, force=True)
2207
+
2208
+ def _stream_flush(self, pid: int, force: bool = False):
2209
+ """
2210
+ Flush buffered chunks for a PID via QWebChannel (bridge.chunk.emit(name, chunk)).
2211
+ If the bridge is not available, fall back to runJavaScript appendStream(name, chunk).
2212
+
2213
+ If no data is pending, do nothing. Stop the timer if running.
1985
2214
 
1986
2215
  :param pid: context PID
1987
- :param force: Force emit even if throttle interval has not passed
2216
+ :param force: True to force flush ignoring interval
1988
2217
  """
1989
- thr = self._throttle_get(pid)
1990
- now = monotonic()
1991
- if not force and (now - thr["last"] < self._throttle_interval):
2218
+ buf = self._stream_acc.get(pid)
2219
+ if buf is None or buf.is_empty():
2220
+ # Nothing to send; stop timer if any
2221
+ t = self._stream_timer.get(pid)
2222
+ if t and t.isActive():
2223
+ try:
2224
+ t.stop()
2225
+ except Exception:
2226
+ pass
1992
2227
  return
1993
2228
 
1994
2229
  node = self.get_output_node_by_pid(pid)
1995
2230
  if node is None:
2231
+ # Drop buffer if node is gone to avoid leaks
2232
+ buf.clear()
1996
2233
  return
1997
2234
 
2235
+ # Stop timer for this flush; next push will re-arm it
2236
+ t = self._stream_timer.get(pid)
2237
+ if t and t.isActive():
2238
+ try:
2239
+ t.stop()
2240
+ except Exception:
2241
+ pass
2242
+
2243
+ # Gather and clear the pending data in one allocation
2244
+ data = buf.get_and_clear()
2245
+ name = self._stream_header.get(pid, "") or ""
2246
+
1998
2247
  try:
1999
- if thr["op"] == 1:
2000
- # Replace snapshot
2001
- replace_payload = self.sanitize_html(thr["replace_html"])
2002
- node.page().bridge.chunk.emit(
2003
- thr["name"],
2004
- replace_payload,
2005
- "",
2006
- True,
2007
- bool(thr["code"]),
2248
+ br = getattr(node.page(), "bridge", None)
2249
+ if br is not None and hasattr(br, "chunk"):
2250
+ # Send as raw text; JS runtime handles buffering/rendering
2251
+ br.chunk.emit(name, data)
2252
+ else:
2253
+ # Fallback path if bridge not yet connected on this page
2254
+ node.page().runJavaScript(
2255
+ f"if (typeof window.appendStream !== 'undefined') appendStream({self.to_json(name)},{self.to_json(data)});"
2008
2256
  )
2009
- thr["replace_html"] = "" # Cut reference ASAP
2010
- thr["last"] = now
2011
-
2012
- # Append tail (if any)
2013
- if not thr["append"].is_empty():
2014
- append_str = thr["append"].get_and_clear()
2015
- node.page().bridge.chunk.emit(
2016
- thr["name"],
2017
- "",
2018
- self.sanitize_html(append_str),
2019
- False,
2020
- bool(thr["code"]),
2021
- )
2022
- thr["last"] = now
2023
-
2024
- self._throttle_reset(pid)
2025
-
2026
- elif thr["op"] == 2 and not thr["append"].is_empty():
2027
- append_str = thr["append"].get_and_clear()
2028
- node.page().bridge.chunk.emit(
2029
- thr["name"],
2030
- "",
2031
- self.sanitize_html(append_str),
2032
- False,
2033
- bool(thr["code"]),
2257
+ except Exception:
2258
+ # If something goes wrong, attempt a JS fallback once
2259
+ try:
2260
+ node.page().runJavaScript(
2261
+ f"if (typeof window.appendStream !== 'undefined') appendStream({self.to_json(name)},{self.to_json(data)});"
2034
2262
  )
2035
- thr["last"] = now
2036
- self._throttle_reset(pid)
2263
+ except Exception:
2264
+ pass
2265
+
2266
+ # Opportunistic memory release on Linux for very large flushes
2267
+ try:
2268
+ if len(data) >= (256 * 1024):
2269
+ self.auto_cleanup_soft()
2270
+ except Exception:
2271
+ pass
2272
+
2273
+ # Explicitly drop reference to large string so GC/malloc_trim can reclaim sooner
2274
+ del data
2275
+
2276
+ self._stream_last_flush[pid] = monotonic()
2277
+
2278
+ def eval_js(self, script: str):
2279
+ """
2280
+ Evaluate arbitrary JS in the output node context.
2281
+
2282
+ :param script: JS code to run
2283
+ """
2284
+ current = self.window.core.ctx.get_current()
2285
+ meta = self.window.core.ctx.get_meta_by_id(current)
2286
+ node = self.get_output_node(meta)
2287
+ if node is None:
2288
+ return
2289
+ def callback(val):
2290
+ self.window.core.debug.console.log(f"[JS] {val}")
2291
+ print(f"[JS] {val}")
2292
+ try:
2293
+ node.page().runJavaScript(script, callback)
2037
2294
  except Exception:
2038
2295
  pass