pygpt-net 2.1.37__py3-none-any.whl → 2.4.48__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 (1868) hide show
  1. CHANGELOG.md +930 -133
  2. README.md +2229 -1137
  3. pygpt_net/CHANGELOG.txt +810 -9
  4. pygpt_net/LICENSE +1 -1
  5. pygpt_net/__init__.py +10 -4
  6. pygpt_net/app.py +77 -4
  7. pygpt_net/config.py +133 -12
  8. pygpt_net/container.py +23 -1
  9. pygpt_net/controller/__init__.py +55 -12
  10. pygpt_net/controller/access/__init__.py +81 -0
  11. pygpt_net/controller/access/control.py +410 -0
  12. pygpt_net/controller/access/voice.py +432 -0
  13. pygpt_net/controller/agent/__init__.py +21 -128
  14. pygpt_net/controller/agent/common.py +126 -0
  15. pygpt_net/controller/agent/experts.py +165 -0
  16. pygpt_net/controller/agent/legacy.py +398 -0
  17. pygpt_net/controller/agent/llama.py +154 -0
  18. pygpt_net/controller/assistant/__init__.py +75 -62
  19. pygpt_net/controller/assistant/batch.py +576 -0
  20. pygpt_net/controller/assistant/editor.py +171 -18
  21. pygpt_net/controller/assistant/files.py +115 -131
  22. pygpt_net/controller/assistant/store.py +480 -0
  23. pygpt_net/controller/assistant/threads.py +276 -58
  24. pygpt_net/controller/attachment.py +283 -65
  25. pygpt_net/controller/audio/__init__.py +158 -17
  26. pygpt_net/controller/calendar/__init__.py +38 -5
  27. pygpt_net/controller/calendar/note.py +134 -13
  28. pygpt_net/controller/camera.py +219 -100
  29. pygpt_net/controller/chat/__init__.py +73 -10
  30. pygpt_net/controller/chat/attachment.py +621 -0
  31. pygpt_net/controller/chat/audio.py +99 -0
  32. pygpt_net/controller/chat/command.py +90 -0
  33. pygpt_net/controller/chat/common.py +143 -37
  34. pygpt_net/controller/chat/files.py +28 -6
  35. pygpt_net/controller/chat/image.py +102 -145
  36. pygpt_net/controller/chat/input.py +130 -127
  37. pygpt_net/controller/chat/output.py +182 -203
  38. pygpt_net/controller/chat/render.py +542 -50
  39. pygpt_net/controller/chat/response.py +278 -0
  40. pygpt_net/controller/chat/stream.py +186 -0
  41. pygpt_net/controller/chat/text.py +167 -198
  42. pygpt_net/controller/chat/vision.py +36 -47
  43. pygpt_net/controller/command.py +39 -11
  44. pygpt_net/controller/config/__init__.py +45 -6
  45. pygpt_net/controller/config/field/checkbox.py +7 -4
  46. pygpt_net/controller/config/field/cmd.py +7 -5
  47. pygpt_net/controller/config/field/combo.py +41 -11
  48. pygpt_net/controller/config/field/dictionary.py +14 -11
  49. pygpt_net/controller/config/field/input.py +9 -6
  50. pygpt_net/controller/config/field/slider.py +12 -9
  51. pygpt_net/controller/config/field/textarea.py +8 -5
  52. pygpt_net/controller/config/placeholder.py +196 -25
  53. pygpt_net/controller/ctx/__init__.py +666 -86
  54. pygpt_net/controller/ctx/common.py +44 -23
  55. pygpt_net/controller/ctx/extra.py +76 -17
  56. pygpt_net/controller/ctx/summarizer.py +28 -6
  57. pygpt_net/controller/{debug.py → debug/__init__.py} +62 -8
  58. pygpt_net/controller/dialogs/confirm.py +194 -17
  59. pygpt_net/controller/dialogs/debug.py +10 -2
  60. pygpt_net/controller/dialogs/info.py +34 -2
  61. pygpt_net/controller/files.py +65 -13
  62. pygpt_net/controller/finder.py +175 -0
  63. pygpt_net/controller/idx/__init__.py +151 -18
  64. pygpt_net/controller/idx/common.py +11 -30
  65. pygpt_net/controller/idx/indexer.py +183 -53
  66. pygpt_net/controller/idx/settings.py +9 -3
  67. pygpt_net/controller/kernel/__init__.py +370 -0
  68. pygpt_net/controller/kernel/reply.py +171 -0
  69. pygpt_net/controller/kernel/stack.py +137 -0
  70. pygpt_net/controller/lang/__init__.py +24 -12
  71. pygpt_net/controller/lang/custom.py +46 -11
  72. pygpt_net/controller/lang/mapping.py +178 -19
  73. pygpt_net/controller/launcher.py +16 -2
  74. pygpt_net/controller/layout.py +78 -10
  75. pygpt_net/controller/mode.py +63 -24
  76. pygpt_net/controller/model/__init__.py +56 -20
  77. pygpt_net/controller/model/editor.py +9 -4
  78. pygpt_net/controller/notepad.py +132 -123
  79. pygpt_net/controller/painter/__init__.py +16 -4
  80. pygpt_net/controller/painter/capture.py +96 -22
  81. pygpt_net/controller/painter/common.py +9 -7
  82. pygpt_net/controller/plugins/__init__.py +90 -42
  83. pygpt_net/controller/plugins/presets.py +19 -10
  84. pygpt_net/controller/plugins/settings.py +12 -6
  85. pygpt_net/controller/presets/__init__.py +263 -17
  86. pygpt_net/controller/presets/editor.py +173 -41
  87. pygpt_net/controller/presets/experts.py +156 -0
  88. pygpt_net/controller/settings/__init__.py +49 -9
  89. pygpt_net/controller/settings/editor.py +132 -25
  90. pygpt_net/controller/settings/profile.py +569 -0
  91. pygpt_net/controller/settings/workdir.py +215 -0
  92. pygpt_net/controller/theme/__init__.py +86 -8
  93. pygpt_net/controller/theme/common.py +29 -5
  94. pygpt_net/controller/theme/markdown.py +74 -37
  95. pygpt_net/controller/theme/menu.py +56 -4
  96. pygpt_net/controller/theme/nodes.py +39 -12
  97. pygpt_net/controller/tools/__init__.py +91 -0
  98. pygpt_net/controller/ui/__init__.py +29 -43
  99. pygpt_net/controller/ui/mode.py +135 -35
  100. pygpt_net/controller/ui/tabs.py +687 -0
  101. pygpt_net/controller/ui/vision.py +45 -19
  102. pygpt_net/core/access/__init__.py +30 -0
  103. pygpt_net/core/access/actions.py +131 -0
  104. pygpt_net/core/access/helpers.py +234 -0
  105. pygpt_net/core/access/shortcuts.py +104 -0
  106. pygpt_net/core/access/voice.py +277 -0
  107. pygpt_net/core/agents/__init__.py +32 -0
  108. pygpt_net/core/agents/legacy.py +66 -0
  109. pygpt_net/core/agents/memory.py +80 -0
  110. pygpt_net/core/agents/observer/__init__.py +17 -0
  111. pygpt_net/core/agents/observer/evaluation.py +163 -0
  112. pygpt_net/core/agents/provider.py +68 -0
  113. pygpt_net/core/agents/runner.py +702 -0
  114. pygpt_net/core/agents/tools.py +175 -0
  115. pygpt_net/core/assistants/__init__.py +22 -141
  116. pygpt_net/core/assistants/files.py +359 -0
  117. pygpt_net/core/assistants/store.py +300 -0
  118. pygpt_net/core/{attachments.py → attachments/__init__.py} +124 -29
  119. pygpt_net/core/attachments/context.py +752 -0
  120. pygpt_net/core/attachments/worker.py +40 -0
  121. pygpt_net/core/{audio.py → audio/__init__.py} +74 -3
  122. pygpt_net/core/audio/context.py +39 -0
  123. pygpt_net/core/audio/whisper.py +37 -0
  124. pygpt_net/core/bridge/__init__.py +266 -0
  125. pygpt_net/core/bridge/context.py +113 -0
  126. pygpt_net/core/bridge/worker.py +157 -0
  127. pygpt_net/core/calendar/__init__.py +57 -11
  128. pygpt_net/core/chain/__init__.py +41 -23
  129. pygpt_net/core/chain/chat.py +55 -31
  130. pygpt_net/core/chain/completion.py +58 -34
  131. pygpt_net/core/command.py +321 -13
  132. pygpt_net/core/ctx/__init__.py +721 -70
  133. pygpt_net/core/ctx/bag.py +53 -0
  134. pygpt_net/core/ctx/container.py +142 -0
  135. pygpt_net/core/ctx/idx.py +45 -8
  136. pygpt_net/core/ctx/output.py +247 -0
  137. pygpt_net/core/ctx/reply.py +63 -0
  138. pygpt_net/core/db/__init__.py +109 -16
  139. pygpt_net/core/db/viewer.py +50 -12
  140. pygpt_net/core/debug/__init__.py +35 -14
  141. pygpt_net/core/debug/agent.py +12 -7
  142. pygpt_net/core/debug/assistants.py +10 -2
  143. pygpt_net/core/debug/attachments.py +5 -4
  144. pygpt_net/core/debug/config.py +11 -1
  145. pygpt_net/core/debug/context.py +67 -23
  146. pygpt_net/core/debug/events.py +58 -0
  147. pygpt_net/core/debug/indexes.py +3 -1
  148. pygpt_net/core/debug/kernel.py +30 -0
  149. pygpt_net/core/debug/models.py +2 -1
  150. pygpt_net/core/debug/presets.py +25 -9
  151. pygpt_net/core/debug/tabs.py +49 -0
  152. pygpt_net/core/dispatcher.py +86 -181
  153. pygpt_net/core/docker/__init__.py +410 -0
  154. pygpt_net/core/docker/builder.py +87 -0
  155. pygpt_net/core/events/__init__.py +17 -0
  156. pygpt_net/core/events/app.py +54 -0
  157. pygpt_net/core/events/base.py +73 -0
  158. pygpt_net/core/events/control.py +88 -0
  159. pygpt_net/core/events/event.py +120 -0
  160. pygpt_net/core/events/kernel.py +67 -0
  161. pygpt_net/core/events/render.py +71 -0
  162. pygpt_net/core/experts/__init__.py +501 -0
  163. pygpt_net/core/filesystem/__init__.py +257 -24
  164. pygpt_net/core/filesystem/actions.py +15 -10
  165. pygpt_net/core/filesystem/editor.py +57 -11
  166. pygpt_net/core/filesystem/packer.py +87 -0
  167. pygpt_net/core/filesystem/types.py +12 -7
  168. pygpt_net/core/filesystem/url.py +21 -1
  169. pygpt_net/core/history.py +3 -2
  170. pygpt_net/core/idx/__init__.py +125 -30
  171. pygpt_net/core/idx/chat.py +438 -83
  172. pygpt_net/core/idx/context.py +47 -7
  173. pygpt_net/core/idx/indexing.py +546 -62
  174. pygpt_net/core/idx/llm.py +42 -21
  175. pygpt_net/core/idx/metadata.py +21 -5
  176. pygpt_net/core/idx/types/ctx.py +32 -6
  177. pygpt_net/core/idx/types/external.py +41 -7
  178. pygpt_net/core/idx/types/files.py +31 -6
  179. pygpt_net/core/idx/ui/__init__.py +22 -0
  180. pygpt_net/core/idx/ui/loaders.py +217 -0
  181. pygpt_net/core/idx/worker.py +32 -3
  182. pygpt_net/core/image.py +22 -10
  183. pygpt_net/core/installer.py +2 -4
  184. pygpt_net/core/llm/__init__.py +13 -3
  185. pygpt_net/core/locale.py +43 -8
  186. pygpt_net/core/models.py +121 -17
  187. pygpt_net/core/modes.py +62 -14
  188. pygpt_net/core/notepad.py +38 -3
  189. pygpt_net/core/platforms.py +6 -3
  190. pygpt_net/core/plugins.py +59 -32
  191. pygpt_net/core/presets.py +223 -31
  192. pygpt_net/core/profile.py +280 -0
  193. pygpt_net/core/prompt/__init__.py +156 -0
  194. pygpt_net/core/prompt/custom.py +307 -0
  195. pygpt_net/core/prompt/template.py +107 -0
  196. pygpt_net/core/render/base.py +347 -32
  197. pygpt_net/core/render/markdown/__init__.py +0 -0
  198. pygpt_net/core/render/markdown/body.py +210 -0
  199. pygpt_net/core/render/markdown/helpers.py +91 -0
  200. pygpt_net/core/render/markdown/parser.py +78 -6
  201. pygpt_net/core/render/markdown/pid.py +23 -0
  202. pygpt_net/core/render/markdown/renderer.py +405 -383
  203. pygpt_net/core/render/plain/body.py +130 -0
  204. pygpt_net/core/render/plain/helpers.py +60 -0
  205. pygpt_net/core/render/plain/pid.py +22 -0
  206. pygpt_net/core/render/plain/renderer.py +281 -231
  207. pygpt_net/core/render/web/__init__.py +10 -0
  208. pygpt_net/core/render/web/body.py +800 -0
  209. pygpt_net/core/render/web/helpers.py +102 -0
  210. pygpt_net/core/render/web/parser.py +297 -0
  211. pygpt_net/core/render/web/pid.py +36 -0
  212. pygpt_net/core/render/web/renderer.py +1356 -0
  213. pygpt_net/core/render/web/syntax_highlight.py +58 -0
  214. pygpt_net/core/settings.py +49 -22
  215. pygpt_net/core/tabs/__init__.py +822 -0
  216. pygpt_net/core/tabs/tab.py +81 -0
  217. pygpt_net/core/text/finder.py +214 -0
  218. pygpt_net/core/text/utils.py +78 -0
  219. pygpt_net/core/text/web_finder.py +213 -0
  220. pygpt_net/core/tokens.py +97 -32
  221. pygpt_net/core/types/__init__.py +12 -0
  222. pygpt_net/core/types/mode.py +22 -0
  223. pygpt_net/core/updater/__init__.py +67 -6
  224. pygpt_net/core/vision/__init__.py +22 -0
  225. pygpt_net/core/vision/analyzer.py +158 -0
  226. pygpt_net/core/{web.py → web/__init__.py} +29 -7
  227. pygpt_net/core/web/helpers.py +237 -0
  228. pygpt_net/css.qrc +5 -0
  229. pygpt_net/css_rc.py +251 -0
  230. pygpt_net/data/audio/click_off.mp3 +0 -0
  231. pygpt_net/data/audio/click_on.mp3 +0 -0
  232. pygpt_net/data/audio/ok.mp3 +0 -0
  233. pygpt_net/data/config/config.json +188 -37
  234. pygpt_net/data/config/models.json +1509 -48
  235. pygpt_net/data/config/modes.json +23 -5
  236. pygpt_net/data/config/presets/agent_openai.json +33 -0
  237. pygpt_net/data/config/presets/agent_openai_assistant.json +33 -0
  238. pygpt_net/data/config/presets/agent_planner.json +33 -0
  239. pygpt_net/data/config/presets/agent_react.json +33 -0
  240. pygpt_net/data/config/presets/batman_and_joker.json +7 -3
  241. pygpt_net/data/config/presets/current.agent.json +7 -4
  242. pygpt_net/data/config/presets/current.agent_llama.json +32 -0
  243. pygpt_net/data/config/presets/current.assistant.json +6 -3
  244. pygpt_net/data/config/presets/current.audio.json +34 -0
  245. pygpt_net/data/config/presets/current.chat.json +6 -3
  246. pygpt_net/data/config/presets/current.completion.json +6 -3
  247. pygpt_net/data/config/presets/current.expert.json +23 -0
  248. pygpt_net/data/config/presets/current.img.json +6 -3
  249. pygpt_net/data/config/presets/current.langchain.json +6 -3
  250. pygpt_net/data/config/presets/current.llama_index.json +6 -3
  251. pygpt_net/data/config/presets/current.vision.json +6 -3
  252. pygpt_net/data/config/presets/dalle_white_cat.json +6 -3
  253. pygpt_net/data/config/presets/joke_agent.json +25 -0
  254. pygpt_net/data/config/presets/joke_expert.json +29 -0
  255. pygpt_net/data/config/settings.json +724 -64
  256. pygpt_net/data/config/settings_section.json +9 -0
  257. pygpt_net/data/css/markdown.css +28 -2
  258. pygpt_net/data/css/markdown.dark.css +2 -2
  259. pygpt_net/data/css/markdown.light.css +12 -3
  260. pygpt_net/data/css/style.css +1 -0
  261. pygpt_net/data/css/style.dark.css +2 -3
  262. pygpt_net/data/css/style.light.css +28 -4
  263. pygpt_net/data/css/web-blocks.css +339 -0
  264. pygpt_net/data/css/web-blocks.dark.css +74 -0
  265. pygpt_net/data/css/web-blocks.light.css +82 -0
  266. pygpt_net/data/css/web-chatgpt.css +350 -0
  267. pygpt_net/data/css/web-chatgpt.dark.css +64 -0
  268. pygpt_net/data/css/web-chatgpt.light.css +75 -0
  269. pygpt_net/data/css/web-chatgpt_wide.css +350 -0
  270. pygpt_net/data/css/web-chatgpt_wide.dark.css +64 -0
  271. pygpt_net/data/css/web-chatgpt_wide.light.css +75 -0
  272. pygpt_net/data/fonts/MonaspaceArgon/MonaspaceArgon-Bold.otf +0 -0
  273. pygpt_net/data/fonts/MonaspaceArgon/MonaspaceArgon-BoldItalic.otf +0 -0
  274. pygpt_net/data/fonts/MonaspaceArgon/MonaspaceArgon-Italic.otf +0 -0
  275. pygpt_net/data/fonts/MonaspaceArgon/MonaspaceArgon-Regular.otf +0 -0
  276. pygpt_net/data/fonts/MonaspaceKrypton/MonaspaceKrypton-Bold.otf +0 -0
  277. pygpt_net/data/fonts/MonaspaceKrypton/MonaspaceKrypton-BoldItalic.otf +0 -0
  278. pygpt_net/data/fonts/MonaspaceKrypton/MonaspaceKrypton-Italic.otf +0 -0
  279. pygpt_net/data/fonts/MonaspaceKrypton/MonaspaceKrypton-Regular.otf +0 -0
  280. pygpt_net/data/fonts/MonaspaceNeon/MonaspaceNeon-Bold.otf +0 -0
  281. pygpt_net/data/fonts/MonaspaceNeon/MonaspaceNeon-BoldItalic.otf +0 -0
  282. pygpt_net/data/fonts/MonaspaceNeon/MonaspaceNeon-Italic.otf +0 -0
  283. pygpt_net/data/fonts/MonaspaceNeon/MonaspaceNeon-Regular.otf +0 -0
  284. pygpt_net/data/fonts/MonaspaceRadon/MonaspaceRadon-Bold.otf +0 -0
  285. pygpt_net/data/fonts/MonaspaceRadon/MonaspaceRadon-BoldItalic.otf +0 -0
  286. pygpt_net/data/fonts/MonaspaceRadon/MonaspaceRadon-Italic.otf +0 -0
  287. pygpt_net/data/fonts/MonaspaceRadon/MonaspaceRadon-Regular.otf +0 -0
  288. pygpt_net/data/fonts/MonaspaceXenon/MonaspaceXenon-Bold.otf +0 -0
  289. pygpt_net/data/fonts/MonaspaceXenon/MonaspaceXenon-BoldItalic.otf +0 -0
  290. pygpt_net/data/fonts/MonaspaceXenon/MonaspaceXenon-Italic.otf +0 -0
  291. pygpt_net/data/fonts/MonaspaceXenon/MonaspaceXenon-Regular.otf +0 -0
  292. pygpt_net/data/icons/accessibility.svg +1 -0
  293. pygpt_net/data/icons/collapse.svg +3 -0
  294. pygpt_net/data/icons/cursor.png +0 -0
  295. pygpt_net/data/icons/split_screen.svg +1 -0
  296. pygpt_net/data/js/highlight/DIGESTS.md +793 -0
  297. pygpt_net/data/js/highlight/LICENSE +29 -0
  298. pygpt_net/data/js/highlight/README.md +45 -0
  299. pygpt_net/data/js/highlight/es/core.js +2600 -0
  300. pygpt_net/data/js/highlight/es/core.min.js +307 -0
  301. pygpt_net/data/js/highlight/es/highlight.js +2600 -0
  302. pygpt_net/data/js/highlight/es/highlight.min.js +307 -0
  303. pygpt_net/data/js/highlight/es/languages/1c.js +552 -0
  304. pygpt_net/data/js/highlight/es/languages/1c.min.js +25 -0
  305. pygpt_net/data/js/highlight/es/languages/abnf.js +91 -0
  306. pygpt_net/data/js/highlight/es/languages/abnf.min.js +12 -0
  307. pygpt_net/data/js/highlight/es/languages/accesslog.js +100 -0
  308. pygpt_net/data/js/highlight/es/languages/accesslog.min.js +13 -0
  309. pygpt_net/data/js/highlight/es/languages/actionscript.js +161 -0
  310. pygpt_net/data/js/highlight/es/languages/actionscript.min.js +17 -0
  311. pygpt_net/data/js/highlight/es/languages/ada.js +273 -0
  312. pygpt_net/data/js/highlight/es/languages/ada.min.js +25 -0
  313. pygpt_net/data/js/highlight/es/languages/angelscript.js +186 -0
  314. pygpt_net/data/js/highlight/es/languages/angelscript.min.js +21 -0
  315. pygpt_net/data/js/highlight/es/languages/apache.js +109 -0
  316. pygpt_net/data/js/highlight/es/languages/apache.min.js +14 -0
  317. pygpt_net/data/js/highlight/es/languages/applescript.js +157 -0
  318. pygpt_net/data/js/highlight/es/languages/applescript.min.js +18 -0
  319. pygpt_net/data/js/highlight/es/languages/arcade.js +425 -0
  320. pygpt_net/data/js/highlight/es/languages/arcade.min.js +28 -0
  321. pygpt_net/data/js/highlight/es/languages/arduino.js +1014 -0
  322. pygpt_net/data/js/highlight/es/languages/arduino.min.js +54 -0
  323. pygpt_net/data/js/highlight/es/languages/armasm.js +132 -0
  324. pygpt_net/data/js/highlight/es/languages/armasm.min.js +17 -0
  325. pygpt_net/data/js/highlight/es/languages/asciidoc.js +269 -0
  326. pygpt_net/data/js/highlight/es/languages/asciidoc.min.js +35 -0
  327. pygpt_net/data/js/highlight/es/languages/aspectj.js +239 -0
  328. pygpt_net/data/js/highlight/es/languages/aspectj.min.js +30 -0
  329. pygpt_net/data/js/highlight/es/languages/autohotkey.js +83 -0
  330. pygpt_net/data/js/highlight/es/languages/autohotkey.min.js +13 -0
  331. pygpt_net/data/js/highlight/es/languages/autoit.js +186 -0
  332. pygpt_net/data/js/highlight/es/languages/autoit.min.js +21 -0
  333. pygpt_net/data/js/highlight/es/languages/avrasm.js +86 -0
  334. pygpt_net/data/js/highlight/es/languages/avrasm.min.js +12 -0
  335. pygpt_net/data/js/highlight/es/languages/awk.js +76 -0
  336. pygpt_net/data/js/highlight/es/languages/awk.min.js +11 -0
  337. pygpt_net/data/js/highlight/es/languages/axapta.js +196 -0
  338. pygpt_net/data/js/highlight/es/languages/axapta.min.js +10 -0
  339. pygpt_net/data/js/highlight/es/languages/bash.js +415 -0
  340. pygpt_net/data/js/highlight/es/languages/bash.min.js +21 -0
  341. pygpt_net/data/js/highlight/es/languages/basic.js +238 -0
  342. pygpt_net/data/js/highlight/es/languages/basic.min.js +9 -0
  343. pygpt_net/data/js/highlight/es/languages/bnf.js +47 -0
  344. pygpt_net/data/js/highlight/es/languages/bnf.min.js +6 -0
  345. pygpt_net/data/js/highlight/es/languages/brainfuck.js +62 -0
  346. pygpt_net/data/js/highlight/es/languages/brainfuck.min.js +8 -0
  347. pygpt_net/data/js/highlight/es/languages/c.js +340 -0
  348. pygpt_net/data/js/highlight/es/languages/c.min.js +40 -0
  349. pygpt_net/data/js/highlight/es/languages/cal.js +168 -0
  350. pygpt_net/data/js/highlight/es/languages/cal.min.js +15 -0
  351. pygpt_net/data/js/highlight/es/languages/capnproto.js +107 -0
  352. pygpt_net/data/js/highlight/es/languages/capnproto.min.js +11 -0
  353. pygpt_net/data/js/highlight/es/languages/ceylon.js +148 -0
  354. pygpt_net/data/js/highlight/es/languages/ceylon.min.js +15 -0
  355. pygpt_net/data/js/highlight/es/languages/clean.js +75 -0
  356. pygpt_net/data/js/highlight/es/languages/clean.min.js +8 -0
  357. pygpt_net/data/js/highlight/es/languages/clojure-repl.js +35 -0
  358. pygpt_net/data/js/highlight/es/languages/clojure-repl.min.js +4 -0
  359. pygpt_net/data/js/highlight/es/languages/clojure.js +192 -0
  360. pygpt_net/data/js/highlight/es/languages/clojure.min.js +25 -0
  361. pygpt_net/data/js/highlight/es/languages/cmake.js +72 -0
  362. pygpt_net/data/js/highlight/es/languages/cmake.min.js +7 -0
  363. pygpt_net/data/js/highlight/es/languages/coffeescript.js +374 -0
  364. pygpt_net/data/js/highlight/es/languages/coffeescript.min.js +28 -0
  365. pygpt_net/data/js/highlight/es/languages/coq.js +453 -0
  366. pygpt_net/data/js/highlight/es/languages/coq.min.js +7 -0
  367. pygpt_net/data/js/highlight/es/languages/cos.js +148 -0
  368. pygpt_net/data/js/highlight/es/languages/cos.min.js +15 -0
  369. pygpt_net/data/js/highlight/es/languages/cpp.js +611 -0
  370. pygpt_net/data/js/highlight/es/languages/cpp.min.js +46 -0
  371. pygpt_net/data/js/highlight/es/languages/crmsh.js +108 -0
  372. pygpt_net/data/js/highlight/es/languages/crmsh.min.js +19 -0
  373. pygpt_net/data/js/highlight/es/languages/crystal.js +320 -0
  374. pygpt_net/data/js/highlight/es/languages/crystal.min.js +48 -0
  375. pygpt_net/data/js/highlight/es/languages/csharp.js +414 -0
  376. pygpt_net/data/js/highlight/es/languages/csharp.min.js +49 -0
  377. pygpt_net/data/js/highlight/es/languages/csp.js +66 -0
  378. pygpt_net/data/js/highlight/es/languages/csp.min.js +6 -0
  379. pygpt_net/data/js/highlight/es/languages/css.js +862 -0
  380. pygpt_net/data/js/highlight/es/languages/css.min.js +31 -0
  381. pygpt_net/data/js/highlight/es/languages/d.js +280 -0
  382. pygpt_net/data/js/highlight/es/languages/d.min.js +20 -0
  383. pygpt_net/data/js/highlight/es/languages/dart.js +270 -0
  384. pygpt_net/data/js/highlight/es/languages/dart.min.js +22 -0
  385. pygpt_net/data/js/highlight/es/languages/delphi.js +254 -0
  386. pygpt_net/data/js/highlight/es/languages/delphi.min.js +19 -0
  387. pygpt_net/data/js/highlight/es/languages/diff.js +70 -0
  388. pygpt_net/data/js/highlight/es/languages/diff.min.js +9 -0
  389. pygpt_net/data/js/highlight/es/languages/django.js +83 -0
  390. pygpt_net/data/js/highlight/es/languages/django.min.js +13 -0
  391. pygpt_net/data/js/highlight/es/languages/dns.js +86 -0
  392. pygpt_net/data/js/highlight/es/languages/dns.min.js +11 -0
  393. pygpt_net/data/js/highlight/es/languages/dockerfile.js +52 -0
  394. pygpt_net/data/js/highlight/es/languages/dockerfile.min.js +8 -0
  395. pygpt_net/data/js/highlight/es/languages/dos.js +175 -0
  396. pygpt_net/data/js/highlight/es/languages/dos.min.js +13 -0
  397. pygpt_net/data/js/highlight/es/languages/dsconfig.js +74 -0
  398. pygpt_net/data/js/highlight/es/languages/dsconfig.min.js +9 -0
  399. pygpt_net/data/js/highlight/es/languages/dts.js +165 -0
  400. pygpt_net/data/js/highlight/es/languages/dts.min.js +22 -0
  401. pygpt_net/data/js/highlight/es/languages/dust.js +55 -0
  402. pygpt_net/data/js/highlight/es/languages/dust.min.js +8 -0
  403. pygpt_net/data/js/highlight/es/languages/ebnf.js +62 -0
  404. pygpt_net/data/js/highlight/es/languages/ebnf.min.js +7 -0
  405. pygpt_net/data/js/highlight/es/languages/elixir.js +287 -0
  406. pygpt_net/data/js/highlight/es/languages/elixir.min.js +34 -0
  407. pygpt_net/data/js/highlight/es/languages/elm.js +151 -0
  408. pygpt_net/data/js/highlight/es/languages/elm.min.js +18 -0
  409. pygpt_net/data/js/highlight/es/languages/erb.js +37 -0
  410. pygpt_net/data/js/highlight/es/languages/erb.min.js +5 -0
  411. pygpt_net/data/js/highlight/es/languages/erlang-repl.js +62 -0
  412. pygpt_net/data/js/highlight/es/languages/erlang-repl.min.js +13 -0
  413. pygpt_net/data/js/highlight/es/languages/erlang.js +207 -0
  414. pygpt_net/data/js/highlight/es/languages/erlang.min.js +28 -0
  415. pygpt_net/data/js/highlight/es/languages/excel.js +553 -0
  416. pygpt_net/data/js/highlight/es/languages/excel.min.js +10 -0
  417. pygpt_net/data/js/highlight/es/languages/fix.js +47 -0
  418. pygpt_net/data/js/highlight/es/languages/fix.min.js +7 -0
  419. pygpt_net/data/js/highlight/es/languages/flix.js +87 -0
  420. pygpt_net/data/js/highlight/es/languages/flix.min.js +10 -0
  421. pygpt_net/data/js/highlight/es/languages/fortran.js +582 -0
  422. pygpt_net/data/js/highlight/es/languages/fortran.min.js +17 -0
  423. pygpt_net/data/js/highlight/es/languages/fsharp.js +635 -0
  424. pygpt_net/data/js/highlight/es/languages/fsharp.min.js +47 -0
  425. pygpt_net/data/js/highlight/es/languages/gams.js +189 -0
  426. pygpt_net/data/js/highlight/es/languages/gams.min.js +28 -0
  427. pygpt_net/data/js/highlight/es/languages/gauss.js +314 -0
  428. pygpt_net/data/js/highlight/es/languages/gauss.min.js +36 -0
  429. pygpt_net/data/js/highlight/es/languages/gcode.js +89 -0
  430. pygpt_net/data/js/highlight/es/languages/gcode.min.js +17 -0
  431. pygpt_net/data/js/highlight/es/languages/gherkin.js +57 -0
  432. pygpt_net/data/js/highlight/es/languages/gherkin.min.js +9 -0
  433. pygpt_net/data/js/highlight/es/languages/glsl.js +136 -0
  434. pygpt_net/data/js/highlight/es/languages/glsl.min.js +8 -0
  435. pygpt_net/data/js/highlight/es/languages/gml.js +3138 -0
  436. pygpt_net/data/js/highlight/es/languages/gml.min.js +10 -0
  437. pygpt_net/data/js/highlight/es/languages/go.js +164 -0
  438. pygpt_net/data/js/highlight/es/languages/go.min.js +19 -0
  439. pygpt_net/data/js/highlight/es/languages/golo.js +89 -0
  440. pygpt_net/data/js/highlight/es/languages/golo.min.js +6 -0
  441. pygpt_net/data/js/highlight/es/languages/gradle.js +198 -0
  442. pygpt_net/data/js/highlight/es/languages/gradle.min.js +6 -0
  443. pygpt_net/data/js/highlight/es/languages/graphql.js +86 -0
  444. pygpt_net/data/js/highlight/es/languages/graphql.min.js +12 -0
  445. pygpt_net/data/js/highlight/es/languages/groovy.js +198 -0
  446. pygpt_net/data/js/highlight/es/languages/groovy.min.js +21 -0
  447. pygpt_net/data/js/highlight/es/languages/haml.js +121 -0
  448. pygpt_net/data/js/highlight/es/languages/haml.min.js +18 -0
  449. pygpt_net/data/js/highlight/es/languages/handlebars.js +266 -0
  450. pygpt_net/data/js/highlight/es/languages/handlebars.min.js +29 -0
  451. pygpt_net/data/js/highlight/es/languages/haskell.js +225 -0
  452. pygpt_net/data/js/highlight/es/languages/haskell.min.js +32 -0
  453. pygpt_net/data/js/highlight/es/languages/haxe.js +175 -0
  454. pygpt_net/data/js/highlight/es/languages/haxe.min.js +30 -0
  455. pygpt_net/data/js/highlight/es/languages/hsp.js +67 -0
  456. pygpt_net/data/js/highlight/es/languages/hsp.min.js +14 -0
  457. pygpt_net/data/js/highlight/es/languages/http.js +105 -0
  458. pygpt_net/data/js/highlight/es/languages/http.min.js +14 -0
  459. pygpt_net/data/js/highlight/es/languages/hy.js +145 -0
  460. pygpt_net/data/js/highlight/es/languages/hy.min.js +15 -0
  461. pygpt_net/data/js/highlight/es/languages/inform7.js +78 -0
  462. pygpt_net/data/js/highlight/es/languages/inform7.min.js +10 -0
  463. pygpt_net/data/js/highlight/es/languages/ini.js +129 -0
  464. pygpt_net/data/js/highlight/es/languages/ini.min.js +16 -0
  465. pygpt_net/data/js/highlight/es/languages/irpf90.js +115 -0
  466. pygpt_net/data/js/highlight/es/languages/irpf90.min.js +15 -0
  467. pygpt_net/data/js/highlight/es/languages/isbl.js +3213 -0
  468. pygpt_net/data/js/highlight/es/languages/isbl.min.js +25 -0
  469. pygpt_net/data/js/highlight/es/languages/java.js +298 -0
  470. pygpt_net/data/js/highlight/es/languages/java.min.js +38 -0
  471. pygpt_net/data/js/highlight/es/languages/javascript.js +775 -0
  472. pygpt_net/data/js/highlight/es/languages/javascript.min.js +81 -0
  473. pygpt_net/data/js/highlight/es/languages/jboss-cli.js +71 -0
  474. pygpt_net/data/js/highlight/es/languages/jboss-cli.min.js +10 -0
  475. pygpt_net/data/js/highlight/es/languages/json.js +62 -0
  476. pygpt_net/data/js/highlight/es/languages/json.min.js +8 -0
  477. pygpt_net/data/js/highlight/es/languages/julia-repl.js +59 -0
  478. pygpt_net/data/js/highlight/es/languages/julia-repl.min.js +4 -0
  479. pygpt_net/data/js/highlight/es/languages/julia.js +450 -0
  480. pygpt_net/data/js/highlight/es/languages/julia.min.js +18 -0
  481. pygpt_net/data/js/highlight/es/languages/kotlin.js +294 -0
  482. pygpt_net/data/js/highlight/es/languages/kotlin.min.js +46 -0
  483. pygpt_net/data/js/highlight/es/languages/lasso.js +179 -0
  484. pygpt_net/data/js/highlight/es/languages/lasso.min.js +28 -0
  485. pygpt_net/data/js/highlight/es/languages/latex.js +286 -0
  486. pygpt_net/data/js/highlight/es/languages/latex.min.js +34 -0
  487. pygpt_net/data/js/highlight/es/languages/ldif.js +39 -0
  488. pygpt_net/data/js/highlight/es/languages/ldif.min.js +5 -0
  489. pygpt_net/data/js/highlight/es/languages/leaf.js +105 -0
  490. pygpt_net/data/js/highlight/es/languages/leaf.min.js +12 -0
  491. pygpt_net/data/js/highlight/es/languages/less.js +963 -0
  492. pygpt_net/data/js/highlight/es/languages/less.min.js +45 -0
  493. pygpt_net/data/js/highlight/es/languages/lisp.js +147 -0
  494. pygpt_net/data/js/highlight/es/languages/lisp.min.js +16 -0
  495. pygpt_net/data/js/highlight/es/languages/livecodeserver.js +181 -0
  496. pygpt_net/data/js/highlight/es/languages/livecodeserver.min.js +21 -0
  497. pygpt_net/data/js/highlight/es/languages/livescript.js +386 -0
  498. pygpt_net/data/js/highlight/es/languages/livescript.min.js +35 -0
  499. pygpt_net/data/js/highlight/es/languages/llvm.js +143 -0
  500. pygpt_net/data/js/highlight/es/languages/llvm.min.js +16 -0
  501. pygpt_net/data/js/highlight/es/languages/lsl.js +84 -0
  502. pygpt_net/data/js/highlight/es/languages/lsl.min.js +19 -0
  503. pygpt_net/data/js/highlight/es/languages/lua.js +88 -0
  504. pygpt_net/data/js/highlight/es/languages/lua.min.js +14 -0
  505. pygpt_net/data/js/highlight/es/languages/makefile.js +94 -0
  506. pygpt_net/data/js/highlight/es/languages/makefile.min.js +14 -0
  507. pygpt_net/data/js/highlight/es/languages/markdown.js +256 -0
  508. pygpt_net/data/js/highlight/es/languages/markdown.min.js +32 -0
  509. pygpt_net/data/js/highlight/es/languages/mathematica.js +7367 -0
  510. pygpt_net/data/js/highlight/es/languages/mathematica.min.js +21 -0
  511. pygpt_net/data/js/highlight/es/languages/matlab.js +115 -0
  512. pygpt_net/data/js/highlight/es/languages/matlab.min.js +15 -0
  513. pygpt_net/data/js/highlight/es/languages/maxima.js +422 -0
  514. pygpt_net/data/js/highlight/es/languages/maxima.min.js +12 -0
  515. pygpt_net/data/js/highlight/es/languages/mel.js +243 -0
  516. pygpt_net/data/js/highlight/es/languages/mel.min.js +8 -0
  517. pygpt_net/data/js/highlight/es/languages/mercury.js +116 -0
  518. pygpt_net/data/js/highlight/es/languages/mercury.min.js +16 -0
  519. pygpt_net/data/js/highlight/es/languages/mipsasm.js +112 -0
  520. pygpt_net/data/js/highlight/es/languages/mipsasm.min.js +15 -0
  521. pygpt_net/data/js/highlight/es/languages/mizar.js +35 -0
  522. pygpt_net/data/js/highlight/es/languages/mizar.min.js +4 -0
  523. pygpt_net/data/js/highlight/es/languages/mojolicious.js +44 -0
  524. pygpt_net/data/js/highlight/es/languages/mojolicious.min.js +6 -0
  525. pygpt_net/data/js/highlight/es/languages/monkey.js +192 -0
  526. pygpt_net/data/js/highlight/es/languages/monkey.min.js +17 -0
  527. pygpt_net/data/js/highlight/es/languages/moonscript.js +149 -0
  528. pygpt_net/data/js/highlight/es/languages/moonscript.min.js +23 -0
  529. pygpt_net/data/js/highlight/es/languages/n1ql.js +373 -0
  530. pygpt_net/data/js/highlight/es/languages/n1ql.min.js +13 -0
  531. pygpt_net/data/js/highlight/es/languages/nestedtext.js +91 -0
  532. pygpt_net/data/js/highlight/es/languages/nestedtext.min.js +9 -0
  533. pygpt_net/data/js/highlight/es/languages/nginx.js +161 -0
  534. pygpt_net/data/js/highlight/es/languages/nginx.min.js +21 -0
  535. pygpt_net/data/js/highlight/es/languages/nim.js +193 -0
  536. pygpt_net/data/js/highlight/es/languages/nim.min.js +15 -0
  537. pygpt_net/data/js/highlight/es/languages/nix.js +103 -0
  538. pygpt_net/data/js/highlight/es/languages/nix.min.js +12 -0
  539. pygpt_net/data/js/highlight/es/languages/node-repl.js +41 -0
  540. pygpt_net/data/js/highlight/es/languages/node-repl.min.js +5 -0
  541. pygpt_net/data/js/highlight/es/languages/nsis.js +565 -0
  542. pygpt_net/data/js/highlight/es/languages/nsis.min.js +23 -0
  543. pygpt_net/data/js/highlight/es/languages/objectivec.js +261 -0
  544. pygpt_net/data/js/highlight/es/languages/objectivec.min.js +23 -0
  545. pygpt_net/data/js/highlight/es/languages/ocaml.js +91 -0
  546. pygpt_net/data/js/highlight/es/languages/ocaml.min.js +14 -0
  547. pygpt_net/data/js/highlight/es/languages/openscad.js +85 -0
  548. pygpt_net/data/js/highlight/es/languages/openscad.min.js +15 -0
  549. pygpt_net/data/js/highlight/es/languages/oxygene.js +95 -0
  550. pygpt_net/data/js/highlight/es/languages/oxygene.min.js +13 -0
  551. pygpt_net/data/js/highlight/es/languages/parser3.js +63 -0
  552. pygpt_net/data/js/highlight/es/languages/parser3.min.js +10 -0
  553. pygpt_net/data/js/highlight/es/languages/perl.js +512 -0
  554. pygpt_net/data/js/highlight/es/languages/perl.min.js +40 -0
  555. pygpt_net/data/js/highlight/es/languages/pf.js +68 -0
  556. pygpt_net/data/js/highlight/es/languages/pf.min.js +9 -0
  557. pygpt_net/data/js/highlight/es/languages/pgsql.js +533 -0
  558. pygpt_net/data/js/highlight/es/languages/pgsql.min.js +69 -0
  559. pygpt_net/data/js/highlight/es/languages/php-template.js +62 -0
  560. pygpt_net/data/js/highlight/es/languages/php-template.min.js +8 -0
  561. pygpt_net/data/js/highlight/es/languages/php.js +621 -0
  562. pygpt_net/data/js/highlight/es/languages/php.min.js +58 -0
  563. pygpt_net/data/js/highlight/es/languages/plaintext.js +27 -0
  564. pygpt_net/data/js/highlight/es/languages/plaintext.min.js +3 -0
  565. pygpt_net/data/js/highlight/es/languages/pony.js +98 -0
  566. pygpt_net/data/js/highlight/es/languages/pony.min.js +12 -0
  567. pygpt_net/data/js/highlight/es/languages/powershell.js +325 -0
  568. pygpt_net/data/js/highlight/es/languages/powershell.min.js +40 -0
  569. pygpt_net/data/js/highlight/es/languages/processing.js +442 -0
  570. pygpt_net/data/js/highlight/es/languages/processing.min.js +18 -0
  571. pygpt_net/data/js/highlight/es/languages/profile.js +51 -0
  572. pygpt_net/data/js/highlight/es/languages/profile.min.js +9 -0
  573. pygpt_net/data/js/highlight/es/languages/prolog.js +105 -0
  574. pygpt_net/data/js/highlight/es/languages/prolog.min.js +11 -0
  575. pygpt_net/data/js/highlight/es/languages/properties.js +76 -0
  576. pygpt_net/data/js/highlight/es/languages/properties.min.js +9 -0
  577. pygpt_net/data/js/highlight/es/languages/protobuf.js +87 -0
  578. pygpt_net/data/js/highlight/es/languages/protobuf.min.js +11 -0
  579. pygpt_net/data/js/highlight/es/languages/puppet.js +154 -0
  580. pygpt_net/data/js/highlight/es/languages/puppet.min.js +18 -0
  581. pygpt_net/data/js/highlight/es/languages/purebasic.js +108 -0
  582. pygpt_net/data/js/highlight/es/languages/purebasic.min.js +11 -0
  583. pygpt_net/data/js/highlight/es/languages/python-repl.js +40 -0
  584. pygpt_net/data/js/highlight/es/languages/python-repl.min.js +5 -0
  585. pygpt_net/data/js/highlight/es/languages/python.js +444 -0
  586. pygpt_net/data/js/highlight/es/languages/python.min.js +42 -0
  587. pygpt_net/data/js/highlight/es/languages/q.js +46 -0
  588. pygpt_net/data/js/highlight/es/languages/q.min.js +8 -0
  589. pygpt_net/data/js/highlight/es/languages/qml.js +197 -0
  590. pygpt_net/data/js/highlight/es/languages/qml.min.js +29 -0
  591. pygpt_net/data/js/highlight/es/languages/r.js +265 -0
  592. pygpt_net/data/js/highlight/es/languages/r.min.js +26 -0
  593. pygpt_net/data/js/highlight/es/languages/reasonml.js +150 -0
  594. pygpt_net/data/js/highlight/es/languages/reasonml.min.js +18 -0
  595. pygpt_net/data/js/highlight/es/languages/rib.js +45 -0
  596. pygpt_net/data/js/highlight/es/languages/rib.min.js +6 -0
  597. pygpt_net/data/js/highlight/es/languages/roboconf.js +90 -0
  598. pygpt_net/data/js/highlight/es/languages/roboconf.min.js +13 -0
  599. pygpt_net/data/js/highlight/es/languages/routeros.js +172 -0
  600. pygpt_net/data/js/highlight/es/languages/routeros.min.js +22 -0
  601. pygpt_net/data/js/highlight/es/languages/rsl.js +157 -0
  602. pygpt_net/data/js/highlight/es/languages/rsl.min.js +11 -0
  603. pygpt_net/data/js/highlight/es/languages/ruby.js +456 -0
  604. pygpt_net/data/js/highlight/es/languages/ruby.min.js +54 -0
  605. pygpt_net/data/js/highlight/es/languages/ruleslanguage.js +84 -0
  606. pygpt_net/data/js/highlight/es/languages/ruleslanguage.min.js +9 -0
  607. pygpt_net/data/js/highlight/es/languages/rust.js +324 -0
  608. pygpt_net/data/js/highlight/es/languages/rust.min.js +27 -0
  609. pygpt_net/data/js/highlight/es/languages/sas.js +565 -0
  610. pygpt_net/data/js/highlight/es/languages/sas.min.js +17 -0
  611. pygpt_net/data/js/highlight/es/languages/scala.js +222 -0
  612. pygpt_net/data/js/highlight/es/languages/scala.min.js +28 -0
  613. pygpt_net/data/js/highlight/es/languages/scheme.js +204 -0
  614. pygpt_net/data/js/highlight/es/languages/scheme.min.js +19 -0
  615. pygpt_net/data/js/highlight/es/languages/scilab.js +81 -0
  616. pygpt_net/data/js/highlight/es/languages/scilab.min.js +13 -0
  617. pygpt_net/data/js/highlight/es/languages/scss.js +852 -0
  618. pygpt_net/data/js/highlight/es/languages/scss.min.js +33 -0
  619. pygpt_net/data/js/highlight/es/languages/shell.js +41 -0
  620. pygpt_net/data/js/highlight/es/languages/shell.min.js +5 -0
  621. pygpt_net/data/js/highlight/es/languages/smali.js +134 -0
  622. pygpt_net/data/js/highlight/es/languages/smali.min.js +13 -0
  623. pygpt_net/data/js/highlight/es/languages/smalltalk.js +77 -0
  624. pygpt_net/data/js/highlight/es/languages/smalltalk.min.js +11 -0
  625. pygpt_net/data/js/highlight/es/languages/sml.js +83 -0
  626. pygpt_net/data/js/highlight/es/languages/sml.min.js +14 -0
  627. pygpt_net/data/js/highlight/es/languages/sqf.js +2670 -0
  628. pygpt_net/data/js/highlight/es/languages/sqf.min.js +17 -0
  629. pygpt_net/data/js/highlight/es/languages/sql.js +690 -0
  630. pygpt_net/data/js/highlight/es/languages/sql.min.js +17 -0
  631. pygpt_net/data/js/highlight/es/languages/stan.js +529 -0
  632. pygpt_net/data/js/highlight/es/languages/stan.min.js +28 -0
  633. pygpt_net/data/js/highlight/es/languages/stata.js +61 -0
  634. pygpt_net/data/js/highlight/es/languages/stata.min.js +11 -0
  635. pygpt_net/data/js/highlight/es/languages/step21.js +75 -0
  636. pygpt_net/data/js/highlight/es/languages/step21.min.js +10 -0
  637. pygpt_net/data/js/highlight/es/languages/stylus.js +912 -0
  638. pygpt_net/data/js/highlight/es/languages/stylus.min.js +36 -0
  639. pygpt_net/data/js/highlight/es/languages/subunit.js +52 -0
  640. pygpt_net/data/js/highlight/es/languages/subunit.min.js +10 -0
  641. pygpt_net/data/js/highlight/es/languages/swift.js +951 -0
  642. pygpt_net/data/js/highlight/es/languages/swift.min.js +66 -0
  643. pygpt_net/data/js/highlight/es/languages/taggerscript.js +67 -0
  644. pygpt_net/data/js/highlight/es/languages/taggerscript.min.js +7 -0
  645. pygpt_net/data/js/highlight/es/languages/tap.js +55 -0
  646. pygpt_net/data/js/highlight/es/languages/tap.min.js +7 -0
  647. pygpt_net/data/js/highlight/es/languages/tcl.js +199 -0
  648. pygpt_net/data/js/highlight/es/languages/tcl.min.js +15 -0
  649. pygpt_net/data/js/highlight/es/languages/thrift.js +85 -0
  650. pygpt_net/data/js/highlight/es/languages/thrift.min.js +12 -0
  651. pygpt_net/data/js/highlight/es/languages/tp.js +180 -0
  652. pygpt_net/data/js/highlight/es/languages/tp.min.js +19 -0
  653. pygpt_net/data/js/highlight/es/languages/twig.js +268 -0
  654. pygpt_net/data/js/highlight/es/languages/twig.min.js +18 -0
  655. pygpt_net/data/js/highlight/es/languages/typescript.js +909 -0
  656. pygpt_net/data/js/highlight/es/languages/typescript.min.js +98 -0
  657. pygpt_net/data/js/highlight/es/languages/vala.js +69 -0
  658. pygpt_net/data/js/highlight/es/languages/vala.min.js +9 -0
  659. pygpt_net/data/js/highlight/es/languages/vbnet.js +165 -0
  660. pygpt_net/data/js/highlight/es/languages/vbnet.min.js +25 -0
  661. pygpt_net/data/js/highlight/es/languages/vbscript-html.js +32 -0
  662. pygpt_net/data/js/highlight/es/languages/vbscript-html.min.js +4 -0
  663. pygpt_net/data/js/highlight/es/languages/vbscript.js +228 -0
  664. pygpt_net/data/js/highlight/es/languages/vbscript.min.js +10 -0
  665. pygpt_net/data/js/highlight/es/languages/verilog.js +558 -0
  666. pygpt_net/data/js/highlight/es/languages/verilog.min.js +17 -0
  667. pygpt_net/data/js/highlight/es/languages/vhdl.js +224 -0
  668. pygpt_net/data/js/highlight/es/languages/vhdl.min.js +13 -0
  669. pygpt_net/data/js/highlight/es/languages/vim.js +137 -0
  670. pygpt_net/data/js/highlight/es/languages/vim.min.js +12 -0
  671. pygpt_net/data/js/highlight/es/languages/wasm.js +147 -0
  672. pygpt_net/data/js/highlight/es/languages/wasm.min.js +15 -0
  673. pygpt_net/data/js/highlight/es/languages/wren.js +310 -0
  674. pygpt_net/data/js/highlight/es/languages/wren.min.js +30 -0
  675. pygpt_net/data/js/highlight/es/languages/x86asm.js +161 -0
  676. pygpt_net/data/js/highlight/es/languages/x86asm.min.js +18 -0
  677. pygpt_net/data/js/highlight/es/languages/xl.js +213 -0
  678. pygpt_net/data/js/highlight/es/languages/xl.min.js +15 -0
  679. pygpt_net/data/js/highlight/es/languages/xml.js +249 -0
  680. pygpt_net/data/js/highlight/es/languages/xml.min.js +29 -0
  681. pygpt_net/data/js/highlight/es/languages/xquery.js +368 -0
  682. pygpt_net/data/js/highlight/es/languages/xquery.min.js +33 -0
  683. pygpt_net/data/js/highlight/es/languages/yaml.js +203 -0
  684. pygpt_net/data/js/highlight/es/languages/yaml.min.js +25 -0
  685. pygpt_net/data/js/highlight/es/languages/zephir.js +137 -0
  686. pygpt_net/data/js/highlight/es/languages/zephir.min.js +18 -0
  687. pygpt_net/data/js/highlight/es/package.json +1 -0
  688. pygpt_net/data/js/highlight/highlight.js +60739 -0
  689. pygpt_net/data/js/highlight/highlight.min.js +3861 -0
  690. pygpt_net/data/js/highlight/languages/1c.js +554 -0
  691. pygpt_net/data/js/highlight/languages/1c.min.js +25 -0
  692. pygpt_net/data/js/highlight/languages/abnf.js +93 -0
  693. pygpt_net/data/js/highlight/languages/abnf.min.js +11 -0
  694. pygpt_net/data/js/highlight/languages/accesslog.js +102 -0
  695. pygpt_net/data/js/highlight/languages/accesslog.min.js +13 -0
  696. pygpt_net/data/js/highlight/languages/actionscript.js +163 -0
  697. pygpt_net/data/js/highlight/languages/actionscript.min.js +17 -0
  698. pygpt_net/data/js/highlight/languages/ada.js +275 -0
  699. pygpt_net/data/js/highlight/languages/ada.min.js +25 -0
  700. pygpt_net/data/js/highlight/languages/angelscript.js +188 -0
  701. pygpt_net/data/js/highlight/languages/angelscript.min.js +21 -0
  702. pygpt_net/data/js/highlight/languages/apache.js +111 -0
  703. pygpt_net/data/js/highlight/languages/apache.min.js +14 -0
  704. pygpt_net/data/js/highlight/languages/applescript.js +159 -0
  705. pygpt_net/data/js/highlight/languages/applescript.min.js +19 -0
  706. pygpt_net/data/js/highlight/languages/arcade.js +427 -0
  707. pygpt_net/data/js/highlight/languages/arcade.min.js +27 -0
  708. pygpt_net/data/js/highlight/languages/arduino.js +1016 -0
  709. pygpt_net/data/js/highlight/languages/arduino.min.js +54 -0
  710. pygpt_net/data/js/highlight/languages/armasm.js +134 -0
  711. pygpt_net/data/js/highlight/languages/armasm.min.js +17 -0
  712. pygpt_net/data/js/highlight/languages/asciidoc.js +271 -0
  713. pygpt_net/data/js/highlight/languages/asciidoc.min.js +35 -0
  714. pygpt_net/data/js/highlight/languages/aspectj.js +241 -0
  715. pygpt_net/data/js/highlight/languages/aspectj.min.js +31 -0
  716. pygpt_net/data/js/highlight/languages/autohotkey.js +85 -0
  717. pygpt_net/data/js/highlight/languages/autohotkey.min.js +14 -0
  718. pygpt_net/data/js/highlight/languages/autoit.js +188 -0
  719. pygpt_net/data/js/highlight/languages/autoit.min.js +21 -0
  720. pygpt_net/data/js/highlight/languages/avrasm.js +88 -0
  721. pygpt_net/data/js/highlight/languages/avrasm.min.js +12 -0
  722. pygpt_net/data/js/highlight/languages/awk.js +78 -0
  723. pygpt_net/data/js/highlight/languages/awk.min.js +11 -0
  724. pygpt_net/data/js/highlight/languages/axapta.js +198 -0
  725. pygpt_net/data/js/highlight/languages/axapta.min.js +11 -0
  726. pygpt_net/data/js/highlight/languages/bash.js +417 -0
  727. pygpt_net/data/js/highlight/languages/bash.min.js +21 -0
  728. pygpt_net/data/js/highlight/languages/basic.js +240 -0
  729. pygpt_net/data/js/highlight/languages/basic.min.js +10 -0
  730. pygpt_net/data/js/highlight/languages/bnf.js +49 -0
  731. pygpt_net/data/js/highlight/languages/bnf.min.js +6 -0
  732. pygpt_net/data/js/highlight/languages/brainfuck.js +64 -0
  733. pygpt_net/data/js/highlight/languages/brainfuck.min.js +8 -0
  734. pygpt_net/data/js/highlight/languages/c.js +342 -0
  735. pygpt_net/data/js/highlight/languages/c.min.js +40 -0
  736. pygpt_net/data/js/highlight/languages/cal.js +170 -0
  737. pygpt_net/data/js/highlight/languages/cal.min.js +15 -0
  738. pygpt_net/data/js/highlight/languages/capnproto.js +109 -0
  739. pygpt_net/data/js/highlight/languages/capnproto.min.js +11 -0
  740. pygpt_net/data/js/highlight/languages/ceylon.js +150 -0
  741. pygpt_net/data/js/highlight/languages/ceylon.min.js +15 -0
  742. pygpt_net/data/js/highlight/languages/clean.js +77 -0
  743. pygpt_net/data/js/highlight/languages/clean.min.js +8 -0
  744. pygpt_net/data/js/highlight/languages/clojure-repl.js +37 -0
  745. pygpt_net/data/js/highlight/languages/clojure-repl.min.js +4 -0
  746. pygpt_net/data/js/highlight/languages/clojure.js +194 -0
  747. pygpt_net/data/js/highlight/languages/clojure.min.js +25 -0
  748. pygpt_net/data/js/highlight/languages/cmake.js +74 -0
  749. pygpt_net/data/js/highlight/languages/cmake.min.js +7 -0
  750. pygpt_net/data/js/highlight/languages/coffeescript.js +376 -0
  751. pygpt_net/data/js/highlight/languages/coffeescript.min.js +29 -0
  752. pygpt_net/data/js/highlight/languages/coq.js +455 -0
  753. pygpt_net/data/js/highlight/languages/coq.min.js +7 -0
  754. pygpt_net/data/js/highlight/languages/cos.js +150 -0
  755. pygpt_net/data/js/highlight/languages/cos.min.js +15 -0
  756. pygpt_net/data/js/highlight/languages/cpp.js +613 -0
  757. pygpt_net/data/js/highlight/languages/cpp.min.js +47 -0
  758. pygpt_net/data/js/highlight/languages/crmsh.js +110 -0
  759. pygpt_net/data/js/highlight/languages/crmsh.min.js +19 -0
  760. pygpt_net/data/js/highlight/languages/crystal.js +322 -0
  761. pygpt_net/data/js/highlight/languages/crystal.min.js +48 -0
  762. pygpt_net/data/js/highlight/languages/csharp.js +416 -0
  763. pygpt_net/data/js/highlight/languages/csharp.min.js +49 -0
  764. pygpt_net/data/js/highlight/languages/csp.js +68 -0
  765. pygpt_net/data/js/highlight/languages/csp.min.js +7 -0
  766. pygpt_net/data/js/highlight/languages/css.js +864 -0
  767. pygpt_net/data/js/highlight/languages/css.min.js +31 -0
  768. pygpt_net/data/js/highlight/languages/d.js +282 -0
  769. pygpt_net/data/js/highlight/languages/d.min.js +20 -0
  770. pygpt_net/data/js/highlight/languages/dart.js +272 -0
  771. pygpt_net/data/js/highlight/languages/dart.min.js +22 -0
  772. pygpt_net/data/js/highlight/languages/delphi.js +256 -0
  773. pygpt_net/data/js/highlight/languages/delphi.min.js +19 -0
  774. pygpt_net/data/js/highlight/languages/diff.js +72 -0
  775. pygpt_net/data/js/highlight/languages/diff.min.js +9 -0
  776. pygpt_net/data/js/highlight/languages/django.js +85 -0
  777. pygpt_net/data/js/highlight/languages/django.min.js +13 -0
  778. pygpt_net/data/js/highlight/languages/dns.js +88 -0
  779. pygpt_net/data/js/highlight/languages/dns.min.js +11 -0
  780. pygpt_net/data/js/highlight/languages/dockerfile.js +54 -0
  781. pygpt_net/data/js/highlight/languages/dockerfile.min.js +8 -0
  782. pygpt_net/data/js/highlight/languages/dos.js +177 -0
  783. pygpt_net/data/js/highlight/languages/dos.min.js +12 -0
  784. pygpt_net/data/js/highlight/languages/dsconfig.js +76 -0
  785. pygpt_net/data/js/highlight/languages/dsconfig.min.js +9 -0
  786. pygpt_net/data/js/highlight/languages/dts.js +167 -0
  787. pygpt_net/data/js/highlight/languages/dts.min.js +22 -0
  788. pygpt_net/data/js/highlight/languages/dust.js +57 -0
  789. pygpt_net/data/js/highlight/languages/dust.min.js +8 -0
  790. pygpt_net/data/js/highlight/languages/ebnf.js +64 -0
  791. pygpt_net/data/js/highlight/languages/ebnf.min.js +7 -0
  792. pygpt_net/data/js/highlight/languages/elixir.js +289 -0
  793. pygpt_net/data/js/highlight/languages/elixir.min.js +34 -0
  794. pygpt_net/data/js/highlight/languages/elm.js +153 -0
  795. pygpt_net/data/js/highlight/languages/elm.min.js +18 -0
  796. pygpt_net/data/js/highlight/languages/erb.js +39 -0
  797. pygpt_net/data/js/highlight/languages/erb.min.js +5 -0
  798. pygpt_net/data/js/highlight/languages/erlang-repl.js +64 -0
  799. pygpt_net/data/js/highlight/languages/erlang-repl.min.js +13 -0
  800. pygpt_net/data/js/highlight/languages/erlang.js +209 -0
  801. pygpt_net/data/js/highlight/languages/erlang.min.js +28 -0
  802. pygpt_net/data/js/highlight/languages/excel.js +555 -0
  803. pygpt_net/data/js/highlight/languages/excel.min.js +10 -0
  804. pygpt_net/data/js/highlight/languages/fix.js +49 -0
  805. pygpt_net/data/js/highlight/languages/fix.min.js +7 -0
  806. pygpt_net/data/js/highlight/languages/flix.js +89 -0
  807. pygpt_net/data/js/highlight/languages/flix.min.js +10 -0
  808. pygpt_net/data/js/highlight/languages/fortran.js +584 -0
  809. pygpt_net/data/js/highlight/languages/fortran.min.js +17 -0
  810. pygpt_net/data/js/highlight/languages/fsharp.js +637 -0
  811. pygpt_net/data/js/highlight/languages/fsharp.min.js +47 -0
  812. pygpt_net/data/js/highlight/languages/gams.js +191 -0
  813. pygpt_net/data/js/highlight/languages/gams.min.js +28 -0
  814. pygpt_net/data/js/highlight/languages/gauss.js +316 -0
  815. pygpt_net/data/js/highlight/languages/gauss.min.js +36 -0
  816. pygpt_net/data/js/highlight/languages/gcode.js +91 -0
  817. pygpt_net/data/js/highlight/languages/gcode.min.js +16 -0
  818. pygpt_net/data/js/highlight/languages/gherkin.js +59 -0
  819. pygpt_net/data/js/highlight/languages/gherkin.min.js +8 -0
  820. pygpt_net/data/js/highlight/languages/glsl.js +138 -0
  821. pygpt_net/data/js/highlight/languages/glsl.min.js +8 -0
  822. pygpt_net/data/js/highlight/languages/gml.js +3140 -0
  823. pygpt_net/data/js/highlight/languages/gml.min.js +10 -0
  824. pygpt_net/data/js/highlight/languages/go.js +166 -0
  825. pygpt_net/data/js/highlight/languages/go.min.js +20 -0
  826. pygpt_net/data/js/highlight/languages/golo.js +91 -0
  827. pygpt_net/data/js/highlight/languages/golo.min.js +6 -0
  828. pygpt_net/data/js/highlight/languages/gradle.js +200 -0
  829. pygpt_net/data/js/highlight/languages/gradle.min.js +5 -0
  830. pygpt_net/data/js/highlight/languages/graphql.js +88 -0
  831. pygpt_net/data/js/highlight/languages/graphql.min.js +12 -0
  832. pygpt_net/data/js/highlight/languages/groovy.js +200 -0
  833. pygpt_net/data/js/highlight/languages/groovy.min.js +21 -0
  834. pygpt_net/data/js/highlight/languages/haml.js +123 -0
  835. pygpt_net/data/js/highlight/languages/haml.min.js +18 -0
  836. pygpt_net/data/js/highlight/languages/handlebars.js +268 -0
  837. pygpt_net/data/js/highlight/languages/handlebars.min.js +29 -0
  838. pygpt_net/data/js/highlight/languages/haskell.js +227 -0
  839. pygpt_net/data/js/highlight/languages/haskell.min.js +32 -0
  840. pygpt_net/data/js/highlight/languages/haxe.js +177 -0
  841. pygpt_net/data/js/highlight/languages/haxe.min.js +29 -0
  842. pygpt_net/data/js/highlight/languages/hsp.js +69 -0
  843. pygpt_net/data/js/highlight/languages/hsp.min.js +14 -0
  844. pygpt_net/data/js/highlight/languages/http.js +107 -0
  845. pygpt_net/data/js/highlight/languages/http.min.js +14 -0
  846. pygpt_net/data/js/highlight/languages/hy.js +147 -0
  847. pygpt_net/data/js/highlight/languages/hy.min.js +16 -0
  848. pygpt_net/data/js/highlight/languages/inform7.js +80 -0
  849. pygpt_net/data/js/highlight/languages/inform7.min.js +11 -0
  850. pygpt_net/data/js/highlight/languages/ini.js +131 -0
  851. pygpt_net/data/js/highlight/languages/ini.min.js +15 -0
  852. pygpt_net/data/js/highlight/languages/irpf90.js +117 -0
  853. pygpt_net/data/js/highlight/languages/irpf90.min.js +15 -0
  854. pygpt_net/data/js/highlight/languages/isbl.js +3215 -0
  855. pygpt_net/data/js/highlight/languages/isbl.min.js +25 -0
  856. pygpt_net/data/js/highlight/languages/java.js +300 -0
  857. pygpt_net/data/js/highlight/languages/java.min.js +38 -0
  858. pygpt_net/data/js/highlight/languages/javascript.js +777 -0
  859. pygpt_net/data/js/highlight/languages/javascript.min.js +81 -0
  860. pygpt_net/data/js/highlight/languages/jboss-cli.js +73 -0
  861. pygpt_net/data/js/highlight/languages/jboss-cli.min.js +10 -0
  862. pygpt_net/data/js/highlight/languages/json.js +64 -0
  863. pygpt_net/data/js/highlight/languages/json.min.js +8 -0
  864. pygpt_net/data/js/highlight/languages/julia-repl.js +61 -0
  865. pygpt_net/data/js/highlight/languages/julia-repl.min.js +5 -0
  866. pygpt_net/data/js/highlight/languages/julia.js +452 -0
  867. pygpt_net/data/js/highlight/languages/julia.min.js +18 -0
  868. pygpt_net/data/js/highlight/languages/kotlin.js +296 -0
  869. pygpt_net/data/js/highlight/languages/kotlin.min.js +46 -0
  870. pygpt_net/data/js/highlight/languages/lasso.js +181 -0
  871. pygpt_net/data/js/highlight/languages/lasso.min.js +29 -0
  872. pygpt_net/data/js/highlight/languages/latex.js +288 -0
  873. pygpt_net/data/js/highlight/languages/latex.min.js +33 -0
  874. pygpt_net/data/js/highlight/languages/ldif.js +41 -0
  875. pygpt_net/data/js/highlight/languages/ldif.min.js +5 -0
  876. pygpt_net/data/js/highlight/languages/leaf.js +107 -0
  877. pygpt_net/data/js/highlight/languages/leaf.min.js +12 -0
  878. pygpt_net/data/js/highlight/languages/less.js +965 -0
  879. pygpt_net/data/js/highlight/languages/less.min.js +45 -0
  880. pygpt_net/data/js/highlight/languages/lisp.js +149 -0
  881. pygpt_net/data/js/highlight/languages/lisp.min.js +17 -0
  882. pygpt_net/data/js/highlight/languages/livecodeserver.js +183 -0
  883. pygpt_net/data/js/highlight/languages/livecodeserver.min.js +21 -0
  884. pygpt_net/data/js/highlight/languages/livescript.js +388 -0
  885. pygpt_net/data/js/highlight/languages/livescript.min.js +35 -0
  886. pygpt_net/data/js/highlight/languages/llvm.js +145 -0
  887. pygpt_net/data/js/highlight/languages/llvm.min.js +16 -0
  888. pygpt_net/data/js/highlight/languages/lsl.js +86 -0
  889. pygpt_net/data/js/highlight/languages/lsl.min.js +19 -0
  890. pygpt_net/data/js/highlight/languages/lua.js +90 -0
  891. pygpt_net/data/js/highlight/languages/lua.min.js +15 -0
  892. pygpt_net/data/js/highlight/languages/makefile.js +96 -0
  893. pygpt_net/data/js/highlight/languages/makefile.min.js +14 -0
  894. pygpt_net/data/js/highlight/languages/markdown.js +258 -0
  895. pygpt_net/data/js/highlight/languages/markdown.min.js +32 -0
  896. pygpt_net/data/js/highlight/languages/mathematica.js +7369 -0
  897. pygpt_net/data/js/highlight/languages/mathematica.min.js +21 -0
  898. pygpt_net/data/js/highlight/languages/matlab.js +117 -0
  899. pygpt_net/data/js/highlight/languages/matlab.min.js +15 -0
  900. pygpt_net/data/js/highlight/languages/maxima.js +424 -0
  901. pygpt_net/data/js/highlight/languages/maxima.min.js +12 -0
  902. pygpt_net/data/js/highlight/languages/mel.js +245 -0
  903. pygpt_net/data/js/highlight/languages/mel.min.js +8 -0
  904. pygpt_net/data/js/highlight/languages/mercury.js +118 -0
  905. pygpt_net/data/js/highlight/languages/mercury.min.js +16 -0
  906. pygpt_net/data/js/highlight/languages/mipsasm.js +114 -0
  907. pygpt_net/data/js/highlight/languages/mipsasm.min.js +15 -0
  908. pygpt_net/data/js/highlight/languages/mizar.js +37 -0
  909. pygpt_net/data/js/highlight/languages/mizar.min.js +4 -0
  910. pygpt_net/data/js/highlight/languages/mojolicious.js +46 -0
  911. pygpt_net/data/js/highlight/languages/mojolicious.min.js +6 -0
  912. pygpt_net/data/js/highlight/languages/monkey.js +194 -0
  913. pygpt_net/data/js/highlight/languages/monkey.min.js +17 -0
  914. pygpt_net/data/js/highlight/languages/moonscript.js +151 -0
  915. pygpt_net/data/js/highlight/languages/moonscript.min.js +23 -0
  916. pygpt_net/data/js/highlight/languages/n1ql.js +375 -0
  917. pygpt_net/data/js/highlight/languages/n1ql.min.js +13 -0
  918. pygpt_net/data/js/highlight/languages/nestedtext.js +93 -0
  919. pygpt_net/data/js/highlight/languages/nestedtext.min.js +9 -0
  920. pygpt_net/data/js/highlight/languages/nginx.js +163 -0
  921. pygpt_net/data/js/highlight/languages/nginx.min.js +21 -0
  922. pygpt_net/data/js/highlight/languages/nim.js +195 -0
  923. pygpt_net/data/js/highlight/languages/nim.min.js +15 -0
  924. pygpt_net/data/js/highlight/languages/nix.js +105 -0
  925. pygpt_net/data/js/highlight/languages/nix.min.js +13 -0
  926. pygpt_net/data/js/highlight/languages/node-repl.js +43 -0
  927. pygpt_net/data/js/highlight/languages/node-repl.min.js +5 -0
  928. pygpt_net/data/js/highlight/languages/nsis.js +567 -0
  929. pygpt_net/data/js/highlight/languages/nsis.min.js +23 -0
  930. pygpt_net/data/js/highlight/languages/objectivec.js +263 -0
  931. pygpt_net/data/js/highlight/languages/objectivec.min.js +23 -0
  932. pygpt_net/data/js/highlight/languages/ocaml.js +93 -0
  933. pygpt_net/data/js/highlight/languages/ocaml.min.js +14 -0
  934. pygpt_net/data/js/highlight/languages/openscad.js +87 -0
  935. pygpt_net/data/js/highlight/languages/openscad.min.js +15 -0
  936. pygpt_net/data/js/highlight/languages/oxygene.js +97 -0
  937. pygpt_net/data/js/highlight/languages/oxygene.min.js +13 -0
  938. pygpt_net/data/js/highlight/languages/parser3.js +65 -0
  939. pygpt_net/data/js/highlight/languages/parser3.min.js +10 -0
  940. pygpt_net/data/js/highlight/languages/perl.js +514 -0
  941. pygpt_net/data/js/highlight/languages/perl.min.js +41 -0
  942. pygpt_net/data/js/highlight/languages/pf.js +70 -0
  943. pygpt_net/data/js/highlight/languages/pf.min.js +10 -0
  944. pygpt_net/data/js/highlight/languages/pgsql.js +535 -0
  945. pygpt_net/data/js/highlight/languages/pgsql.min.js +69 -0
  946. pygpt_net/data/js/highlight/languages/php-template.js +64 -0
  947. pygpt_net/data/js/highlight/languages/php-template.min.js +8 -0
  948. pygpt_net/data/js/highlight/languages/php.js +623 -0
  949. pygpt_net/data/js/highlight/languages/php.min.js +58 -0
  950. pygpt_net/data/js/highlight/languages/plaintext.js +29 -0
  951. pygpt_net/data/js/highlight/languages/plaintext.min.js +4 -0
  952. pygpt_net/data/js/highlight/languages/pony.js +100 -0
  953. pygpt_net/data/js/highlight/languages/pony.min.js +12 -0
  954. pygpt_net/data/js/highlight/languages/powershell.js +327 -0
  955. pygpt_net/data/js/highlight/languages/powershell.min.js +39 -0
  956. pygpt_net/data/js/highlight/languages/processing.js +444 -0
  957. pygpt_net/data/js/highlight/languages/processing.min.js +18 -0
  958. pygpt_net/data/js/highlight/languages/profile.js +53 -0
  959. pygpt_net/data/js/highlight/languages/profile.min.js +9 -0
  960. pygpt_net/data/js/highlight/languages/prolog.js +107 -0
  961. pygpt_net/data/js/highlight/languages/prolog.min.js +11 -0
  962. pygpt_net/data/js/highlight/languages/properties.js +78 -0
  963. pygpt_net/data/js/highlight/languages/properties.min.js +10 -0
  964. pygpt_net/data/js/highlight/languages/protobuf.js +89 -0
  965. pygpt_net/data/js/highlight/languages/protobuf.min.js +11 -0
  966. pygpt_net/data/js/highlight/languages/puppet.js +156 -0
  967. pygpt_net/data/js/highlight/languages/puppet.min.js +18 -0
  968. pygpt_net/data/js/highlight/languages/purebasic.js +110 -0
  969. pygpt_net/data/js/highlight/languages/purebasic.min.js +11 -0
  970. pygpt_net/data/js/highlight/languages/python-repl.js +42 -0
  971. pygpt_net/data/js/highlight/languages/python-repl.min.js +5 -0
  972. pygpt_net/data/js/highlight/languages/python.js +446 -0
  973. pygpt_net/data/js/highlight/languages/python.min.js +42 -0
  974. pygpt_net/data/js/highlight/languages/q.js +48 -0
  975. pygpt_net/data/js/highlight/languages/q.min.js +8 -0
  976. pygpt_net/data/js/highlight/languages/qml.js +199 -0
  977. pygpt_net/data/js/highlight/languages/qml.min.js +29 -0
  978. pygpt_net/data/js/highlight/languages/r.js +267 -0
  979. pygpt_net/data/js/highlight/languages/r.min.js +26 -0
  980. pygpt_net/data/js/highlight/languages/reasonml.js +152 -0
  981. pygpt_net/data/js/highlight/languages/reasonml.min.js +18 -0
  982. pygpt_net/data/js/highlight/languages/rib.js +47 -0
  983. pygpt_net/data/js/highlight/languages/rib.min.js +6 -0
  984. pygpt_net/data/js/highlight/languages/roboconf.js +92 -0
  985. pygpt_net/data/js/highlight/languages/roboconf.min.js +12 -0
  986. pygpt_net/data/js/highlight/languages/routeros.js +174 -0
  987. pygpt_net/data/js/highlight/languages/routeros.min.js +22 -0
  988. pygpt_net/data/js/highlight/languages/rsl.js +159 -0
  989. pygpt_net/data/js/highlight/languages/rsl.min.js +11 -0
  990. pygpt_net/data/js/highlight/languages/ruby.js +458 -0
  991. pygpt_net/data/js/highlight/languages/ruby.min.js +54 -0
  992. pygpt_net/data/js/highlight/languages/ruleslanguage.js +86 -0
  993. pygpt_net/data/js/highlight/languages/ruleslanguage.min.js +9 -0
  994. pygpt_net/data/js/highlight/languages/rust.js +326 -0
  995. pygpt_net/data/js/highlight/languages/rust.min.js +27 -0
  996. pygpt_net/data/js/highlight/languages/sas.js +567 -0
  997. pygpt_net/data/js/highlight/languages/sas.min.js +18 -0
  998. pygpt_net/data/js/highlight/languages/scala.js +224 -0
  999. pygpt_net/data/js/highlight/languages/scala.min.js +28 -0
  1000. pygpt_net/data/js/highlight/languages/scheme.js +206 -0
  1001. pygpt_net/data/js/highlight/languages/scheme.min.js +20 -0
  1002. pygpt_net/data/js/highlight/languages/scilab.js +83 -0
  1003. pygpt_net/data/js/highlight/languages/scilab.min.js +13 -0
  1004. pygpt_net/data/js/highlight/languages/scss.js +854 -0
  1005. pygpt_net/data/js/highlight/languages/scss.min.js +33 -0
  1006. pygpt_net/data/js/highlight/languages/shell.js +43 -0
  1007. pygpt_net/data/js/highlight/languages/shell.min.js +5 -0
  1008. pygpt_net/data/js/highlight/languages/smali.js +136 -0
  1009. pygpt_net/data/js/highlight/languages/smali.min.js +13 -0
  1010. pygpt_net/data/js/highlight/languages/smalltalk.js +79 -0
  1011. pygpt_net/data/js/highlight/languages/smalltalk.min.js +11 -0
  1012. pygpt_net/data/js/highlight/languages/sml.js +85 -0
  1013. pygpt_net/data/js/highlight/languages/sml.min.js +14 -0
  1014. pygpt_net/data/js/highlight/languages/sqf.js +2672 -0
  1015. pygpt_net/data/js/highlight/languages/sqf.min.js +17 -0
  1016. pygpt_net/data/js/highlight/languages/sql.js +692 -0
  1017. pygpt_net/data/js/highlight/languages/sql.min.js +17 -0
  1018. pygpt_net/data/js/highlight/languages/stan.js +531 -0
  1019. pygpt_net/data/js/highlight/languages/stan.min.js +28 -0
  1020. pygpt_net/data/js/highlight/languages/stata.js +63 -0
  1021. pygpt_net/data/js/highlight/languages/stata.min.js +11 -0
  1022. pygpt_net/data/js/highlight/languages/step21.js +77 -0
  1023. pygpt_net/data/js/highlight/languages/step21.min.js +10 -0
  1024. pygpt_net/data/js/highlight/languages/stylus.js +914 -0
  1025. pygpt_net/data/js/highlight/languages/stylus.min.js +36 -0
  1026. pygpt_net/data/js/highlight/languages/subunit.js +54 -0
  1027. pygpt_net/data/js/highlight/languages/subunit.min.js +9 -0
  1028. pygpt_net/data/js/highlight/languages/swift.js +953 -0
  1029. pygpt_net/data/js/highlight/languages/swift.min.js +66 -0
  1030. pygpt_net/data/js/highlight/languages/taggerscript.js +69 -0
  1031. pygpt_net/data/js/highlight/languages/taggerscript.min.js +8 -0
  1032. pygpt_net/data/js/highlight/languages/tap.js +57 -0
  1033. pygpt_net/data/js/highlight/languages/tap.min.js +7 -0
  1034. pygpt_net/data/js/highlight/languages/tcl.js +201 -0
  1035. pygpt_net/data/js/highlight/languages/tcl.min.js +15 -0
  1036. pygpt_net/data/js/highlight/languages/thrift.js +87 -0
  1037. pygpt_net/data/js/highlight/languages/thrift.min.js +12 -0
  1038. pygpt_net/data/js/highlight/languages/tp.js +182 -0
  1039. pygpt_net/data/js/highlight/languages/tp.min.js +19 -0
  1040. pygpt_net/data/js/highlight/languages/twig.js +270 -0
  1041. pygpt_net/data/js/highlight/languages/twig.min.js +18 -0
  1042. pygpt_net/data/js/highlight/languages/typescript.js +911 -0
  1043. pygpt_net/data/js/highlight/languages/typescript.min.js +98 -0
  1044. pygpt_net/data/js/highlight/languages/vala.js +71 -0
  1045. pygpt_net/data/js/highlight/languages/vala.min.js +9 -0
  1046. pygpt_net/data/js/highlight/languages/vbnet.js +167 -0
  1047. pygpt_net/data/js/highlight/languages/vbnet.min.js +25 -0
  1048. pygpt_net/data/js/highlight/languages/vbscript-html.js +34 -0
  1049. pygpt_net/data/js/highlight/languages/vbscript-html.min.js +4 -0
  1050. pygpt_net/data/js/highlight/languages/vbscript.js +230 -0
  1051. pygpt_net/data/js/highlight/languages/vbscript.min.js +10 -0
  1052. pygpt_net/data/js/highlight/languages/verilog.js +560 -0
  1053. pygpt_net/data/js/highlight/languages/verilog.min.js +17 -0
  1054. pygpt_net/data/js/highlight/languages/vhdl.js +226 -0
  1055. pygpt_net/data/js/highlight/languages/vhdl.min.js +13 -0
  1056. pygpt_net/data/js/highlight/languages/vim.js +139 -0
  1057. pygpt_net/data/js/highlight/languages/vim.min.js +12 -0
  1058. pygpt_net/data/js/highlight/languages/wasm.js +149 -0
  1059. pygpt_net/data/js/highlight/languages/wasm.min.js +14 -0
  1060. pygpt_net/data/js/highlight/languages/wren.js +312 -0
  1061. pygpt_net/data/js/highlight/languages/wren.min.js +30 -0
  1062. pygpt_net/data/js/highlight/languages/x86asm.js +163 -0
  1063. pygpt_net/data/js/highlight/languages/x86asm.min.js +19 -0
  1064. pygpt_net/data/js/highlight/languages/xl.js +215 -0
  1065. pygpt_net/data/js/highlight/languages/xl.min.js +15 -0
  1066. pygpt_net/data/js/highlight/languages/xml.js +251 -0
  1067. pygpt_net/data/js/highlight/languages/xml.min.js +29 -0
  1068. pygpt_net/data/js/highlight/languages/xquery.js +370 -0
  1069. pygpt_net/data/js/highlight/languages/xquery.min.js +33 -0
  1070. pygpt_net/data/js/highlight/languages/yaml.js +205 -0
  1071. pygpt_net/data/js/highlight/languages/yaml.min.js +25 -0
  1072. pygpt_net/data/js/highlight/languages/zephir.js +139 -0
  1073. pygpt_net/data/js/highlight/languages/zephir.min.js +18 -0
  1074. pygpt_net/data/js/highlight/package.json +93 -0
  1075. pygpt_net/data/js/highlight/styles/1c-light.css +107 -0
  1076. pygpt_net/data/js/highlight/styles/1c-light.min.css +9 -0
  1077. pygpt_net/data/js/highlight/styles/a11y-dark.css +94 -0
  1078. pygpt_net/data/js/highlight/styles/a11y-dark.min.css +7 -0
  1079. pygpt_net/data/js/highlight/styles/a11y-light.css +94 -0
  1080. pygpt_net/data/js/highlight/styles/a11y-light.min.css +7 -0
  1081. pygpt_net/data/js/highlight/styles/agate.css +127 -0
  1082. pygpt_net/data/js/highlight/styles/agate.min.css +20 -0
  1083. pygpt_net/data/js/highlight/styles/an-old-hope.css +75 -0
  1084. pygpt_net/data/js/highlight/styles/an-old-hope.min.css +9 -0
  1085. pygpt_net/data/js/highlight/styles/androidstudio.css +60 -0
  1086. pygpt_net/data/js/highlight/styles/androidstudio.min.css +1 -0
  1087. pygpt_net/data/js/highlight/styles/arduino-light.css +78 -0
  1088. pygpt_net/data/js/highlight/styles/arduino-light.min.css +1 -0
  1089. pygpt_net/data/js/highlight/styles/arta.css +66 -0
  1090. pygpt_net/data/js/highlight/styles/arta.min.css +1 -0
  1091. pygpt_net/data/js/highlight/styles/ascetic.css +45 -0
  1092. pygpt_net/data/js/highlight/styles/ascetic.min.css +1 -0
  1093. pygpt_net/data/js/highlight/styles/atom-one-dark-reasonable.css +105 -0
  1094. pygpt_net/data/js/highlight/styles/atom-one-dark-reasonable.min.css +1 -0
  1095. pygpt_net/data/js/highlight/styles/atom-one-dark.css +90 -0
  1096. pygpt_net/data/js/highlight/styles/atom-one-dark.min.css +1 -0
  1097. pygpt_net/data/js/highlight/styles/atom-one-light.css +90 -0
  1098. pygpt_net/data/js/highlight/styles/atom-one-light.min.css +1 -0
  1099. pygpt_net/data/js/highlight/styles/brown-paper.css +63 -0
  1100. pygpt_net/data/js/highlight/styles/brown-paper.min.css +1 -0
  1101. pygpt_net/data/js/highlight/styles/brown-papersq.png +0 -0
  1102. pygpt_net/data/js/highlight/styles/codepen-embed.css +57 -0
  1103. pygpt_net/data/js/highlight/styles/codepen-embed.min.css +1 -0
  1104. pygpt_net/data/js/highlight/styles/codeschool.css +163 -0
  1105. pygpt_net/data/js/highlight/styles/codeschool.min.css +7 -0
  1106. pygpt_net/data/js/highlight/styles/color-brewer.css +66 -0
  1107. pygpt_net/data/js/highlight/styles/color-brewer.min.css +1 -0
  1108. pygpt_net/data/js/highlight/styles/darcula.css +163 -0
  1109. pygpt_net/data/js/highlight/styles/darcula.min.css +7 -0
  1110. pygpt_net/data/js/highlight/styles/dark.css +62 -0
  1111. pygpt_net/data/js/highlight/styles/dark.min.css +1 -0
  1112. pygpt_net/data/js/highlight/styles/default-dark.css +163 -0
  1113. pygpt_net/data/js/highlight/styles/default-dark.min.css +7 -0
  1114. pygpt_net/data/js/highlight/styles/default-light.css +163 -0
  1115. pygpt_net/data/js/highlight/styles/default-light.min.css +7 -0
  1116. pygpt_net/data/js/highlight/styles/default.css +117 -0
  1117. pygpt_net/data/js/highlight/styles/default.min.css +9 -0
  1118. pygpt_net/data/js/highlight/styles/devibeans.css +90 -0
  1119. pygpt_net/data/js/highlight/styles/devibeans.min.css +7 -0
  1120. pygpt_net/data/js/highlight/styles/docco.css +83 -0
  1121. pygpt_net/data/js/highlight/styles/docco.min.css +1 -0
  1122. pygpt_net/data/js/highlight/styles/far.css +67 -0
  1123. pygpt_net/data/js/highlight/styles/far.min.css +1 -0
  1124. pygpt_net/data/js/highlight/styles/felipec.css +94 -0
  1125. pygpt_net/data/js/highlight/styles/felipec.min.css +7 -0
  1126. pygpt_net/data/js/highlight/styles/foundation.css +80 -0
  1127. pygpt_net/data/js/highlight/styles/foundation.min.css +1 -0
  1128. pygpt_net/data/js/highlight/styles/github-dark-dimmed.css +117 -0
  1129. pygpt_net/data/js/highlight/styles/github-dark-dimmed.min.css +9 -0
  1130. pygpt_net/data/js/highlight/styles/github-dark.css +118 -0
  1131. pygpt_net/data/js/highlight/styles/github-dark.min.css +10 -0
  1132. pygpt_net/data/js/highlight/styles/github.css +118 -0
  1133. pygpt_net/data/js/highlight/styles/github.min.css +10 -0
  1134. pygpt_net/data/js/highlight/styles/gml.css +72 -0
  1135. pygpt_net/data/js/highlight/styles/gml.min.css +1 -0
  1136. pygpt_net/data/js/highlight/styles/googlecode.css +79 -0
  1137. pygpt_net/data/js/highlight/styles/googlecode.min.css +1 -0
  1138. pygpt_net/data/js/highlight/styles/gradient-dark.css +90 -0
  1139. pygpt_net/data/js/highlight/styles/gradient-dark.min.css +1 -0
  1140. pygpt_net/data/js/highlight/styles/gradient-light.css +90 -0
  1141. pygpt_net/data/js/highlight/styles/gradient-light.min.css +1 -0
  1142. pygpt_net/data/js/highlight/styles/grayscale.css +89 -0
  1143. pygpt_net/data/js/highlight/styles/grayscale.min.css +1 -0
  1144. pygpt_net/data/js/highlight/styles/hybrid.css +88 -0
  1145. pygpt_net/data/js/highlight/styles/hybrid.min.css +1 -0
  1146. pygpt_net/data/js/highlight/styles/idea.css +86 -0
  1147. pygpt_net/data/js/highlight/styles/idea.min.css +1 -0
  1148. pygpt_net/data/js/highlight/styles/intellij-light.css +107 -0
  1149. pygpt_net/data/js/highlight/styles/intellij-light.min.css +1 -0
  1150. pygpt_net/data/js/highlight/styles/ir-black.css +66 -0
  1151. pygpt_net/data/js/highlight/styles/ir-black.min.css +1 -0
  1152. pygpt_net/data/js/highlight/styles/isbl-editor-dark.css +94 -0
  1153. pygpt_net/data/js/highlight/styles/isbl-editor-dark.min.css +1 -0
  1154. pygpt_net/data/js/highlight/styles/isbl-editor-light.css +93 -0
  1155. pygpt_net/data/js/highlight/styles/isbl-editor-light.min.css +1 -0
  1156. pygpt_net/data/js/highlight/styles/kimbie-dark.css +69 -0
  1157. pygpt_net/data/js/highlight/styles/kimbie-dark.min.css +1 -0
  1158. pygpt_net/data/js/highlight/styles/kimbie-light.css +69 -0
  1159. pygpt_net/data/js/highlight/styles/kimbie-light.min.css +1 -0
  1160. pygpt_net/data/js/highlight/styles/lightfair.css +81 -0
  1161. pygpt_net/data/js/highlight/styles/lightfair.min.css +1 -0
  1162. pygpt_net/data/js/highlight/styles/lioshi.css +76 -0
  1163. pygpt_net/data/js/highlight/styles/lioshi.min.css +1 -0
  1164. pygpt_net/data/js/highlight/styles/magula.css +66 -0
  1165. pygpt_net/data/js/highlight/styles/magula.min.css +1 -0
  1166. pygpt_net/data/js/highlight/styles/material-darker.css +163 -0
  1167. pygpt_net/data/js/highlight/styles/material-darker.min.css +7 -0
  1168. pygpt_net/data/js/highlight/styles/material-lighter.css +163 -0
  1169. pygpt_net/data/js/highlight/styles/material-lighter.min.css +7 -0
  1170. pygpt_net/data/js/highlight/styles/material-palenight.css +163 -0
  1171. pygpt_net/data/js/highlight/styles/material-palenight.min.css +7 -0
  1172. pygpt_net/data/js/highlight/styles/material-vivid.css +163 -0
  1173. pygpt_net/data/js/highlight/styles/material-vivid.min.css +7 -0
  1174. pygpt_net/data/js/highlight/styles/material.css +163 -0
  1175. pygpt_net/data/js/highlight/styles/material.min.css +7 -0
  1176. pygpt_net/data/js/highlight/styles/mono-blue.css +56 -0
  1177. pygpt_net/data/js/highlight/styles/mono-blue.min.css +1 -0
  1178. pygpt_net/data/js/highlight/styles/monokai-sublime.css +76 -0
  1179. pygpt_net/data/js/highlight/styles/monokai-sublime.min.css +1 -0
  1180. pygpt_net/data/js/highlight/styles/monokai.css +70 -0
  1181. pygpt_net/data/js/highlight/styles/monokai.min.css +1 -0
  1182. pygpt_net/data/js/highlight/styles/night-owl.css +174 -0
  1183. pygpt_net/data/js/highlight/styles/night-owl.min.css +1 -0
  1184. pygpt_net/data/js/highlight/styles/nnfx-dark.css +104 -0
  1185. pygpt_net/data/js/highlight/styles/nnfx-dark.min.css +10 -0
  1186. pygpt_net/data/js/highlight/styles/nnfx-light.css +104 -0
  1187. pygpt_net/data/js/highlight/styles/nnfx-light.min.css +10 -0
  1188. pygpt_net/data/js/highlight/styles/nord.css +275 -0
  1189. pygpt_net/data/js/highlight/styles/nord.min.css +1 -0
  1190. pygpt_net/data/js/highlight/styles/obsidian.css +79 -0
  1191. pygpt_net/data/js/highlight/styles/obsidian.min.css +1 -0
  1192. pygpt_net/data/js/highlight/styles/panda-syntax-dark.css +92 -0
  1193. pygpt_net/data/js/highlight/styles/panda-syntax-dark.min.css +1 -0
  1194. pygpt_net/data/js/highlight/styles/panda-syntax-light.css +89 -0
  1195. pygpt_net/data/js/highlight/styles/panda-syntax-light.min.css +1 -0
  1196. pygpt_net/data/js/highlight/styles/paraiso-dark.css +67 -0
  1197. pygpt_net/data/js/highlight/styles/paraiso-dark.min.css +1 -0
  1198. pygpt_net/data/js/highlight/styles/paraiso-light.css +67 -0
  1199. pygpt_net/data/js/highlight/styles/paraiso-light.min.css +1 -0
  1200. pygpt_net/data/js/highlight/styles/pojoaque.css +76 -0
  1201. pygpt_net/data/js/highlight/styles/pojoaque.jpg +0 -0
  1202. pygpt_net/data/js/highlight/styles/pojoaque.min.css +1 -0
  1203. pygpt_net/data/js/highlight/styles/purebasic.css +103 -0
  1204. pygpt_net/data/js/highlight/styles/purebasic.min.css +1 -0
  1205. pygpt_net/data/js/highlight/styles/qtcreator-dark.css +76 -0
  1206. pygpt_net/data/js/highlight/styles/qtcreator-dark.min.css +1 -0
  1207. pygpt_net/data/js/highlight/styles/qtcreator-light.css +74 -0
  1208. pygpt_net/data/js/highlight/styles/qtcreator-light.min.css +1 -0
  1209. pygpt_net/data/js/highlight/styles/rainbow.css +77 -0
  1210. pygpt_net/data/js/highlight/styles/rainbow.min.css +1 -0
  1211. pygpt_net/data/js/highlight/styles/routeros.css +86 -0
  1212. pygpt_net/data/js/highlight/styles/routeros.min.css +1 -0
  1213. pygpt_net/data/js/highlight/styles/school-book.css +62 -0
  1214. pygpt_net/data/js/highlight/styles/school-book.min.css +1 -0
  1215. pygpt_net/data/js/highlight/styles/shades-of-purple.css +84 -0
  1216. pygpt_net/data/js/highlight/styles/shades-of-purple.min.css +1 -0
  1217. pygpt_net/data/js/highlight/styles/srcery.css +89 -0
  1218. pygpt_net/data/js/highlight/styles/srcery.min.css +1 -0
  1219. pygpt_net/data/js/highlight/styles/stackoverflow-dark.css +117 -0
  1220. pygpt_net/data/js/highlight/styles/stackoverflow-dark.min.css +13 -0
  1221. pygpt_net/data/js/highlight/styles/stackoverflow-light.css +117 -0
  1222. pygpt_net/data/js/highlight/styles/stackoverflow-light.min.css +13 -0
  1223. pygpt_net/data/js/highlight/styles/sunburst.css +89 -0
  1224. pygpt_net/data/js/highlight/styles/sunburst.min.css +1 -0
  1225. pygpt_net/data/js/highlight/styles/tokyo-night-dark.css +114 -0
  1226. pygpt_net/data/js/highlight/styles/tokyo-night-dark.min.css +8 -0
  1227. pygpt_net/data/js/highlight/styles/tokyo-night-light.css +114 -0
  1228. pygpt_net/data/js/highlight/styles/tokyo-night-light.min.css +8 -0
  1229. pygpt_net/data/js/highlight/styles/tomorrow-night-blue.css +69 -0
  1230. pygpt_net/data/js/highlight/styles/tomorrow-night-blue.min.css +1 -0
  1231. pygpt_net/data/js/highlight/styles/tomorrow-night-bright.css +68 -0
  1232. pygpt_net/data/js/highlight/styles/tomorrow-night-bright.min.css +1 -0
  1233. pygpt_net/data/js/highlight/styles/vs.css +63 -0
  1234. pygpt_net/data/js/highlight/styles/vs.min.css +1 -0
  1235. pygpt_net/data/js/highlight/styles/vs2015.css +100 -0
  1236. pygpt_net/data/js/highlight/styles/vs2015.min.css +1 -0
  1237. pygpt_net/data/js/highlight/styles/windows-10-light.css +163 -0
  1238. pygpt_net/data/js/highlight/styles/windows-10-light.min.css +7 -0
  1239. pygpt_net/data/js/highlight/styles/windows-10.css +163 -0
  1240. pygpt_net/data/js/highlight/styles/windows-10.min.css +7 -0
  1241. pygpt_net/data/js/highlight/styles/xcode.css +90 -0
  1242. pygpt_net/data/js/highlight/styles/xcode.min.css +1 -0
  1243. pygpt_net/data/js/highlight/styles/xt256.css +79 -0
  1244. pygpt_net/data/js/highlight/styles/xt256.min.css +1 -0
  1245. pygpt_net/data/js/katex/auto-render.min.js +1 -0
  1246. pygpt_net/data/js/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
  1247. pygpt_net/data/js/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
  1248. pygpt_net/data/js/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  1249. pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  1250. pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  1251. pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  1252. pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  1253. pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  1254. pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  1255. pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  1256. pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  1257. pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  1258. pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  1259. pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  1260. pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  1261. pygpt_net/data/js/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
  1262. pygpt_net/data/js/katex/fonts/KaTeX_Main-Bold.woff +0 -0
  1263. pygpt_net/data/js/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  1264. pygpt_net/data/js/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  1265. pygpt_net/data/js/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  1266. pygpt_net/data/js/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  1267. pygpt_net/data/js/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
  1268. pygpt_net/data/js/katex/fonts/KaTeX_Main-Italic.woff +0 -0
  1269. pygpt_net/data/js/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  1270. pygpt_net/data/js/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
  1271. pygpt_net/data/js/katex/fonts/KaTeX_Main-Regular.woff +0 -0
  1272. pygpt_net/data/js/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  1273. pygpt_net/data/js/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  1274. pygpt_net/data/js/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  1275. pygpt_net/data/js/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  1276. pygpt_net/data/js/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
  1277. pygpt_net/data/js/katex/fonts/KaTeX_Math-Italic.woff +0 -0
  1278. pygpt_net/data/js/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  1279. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  1280. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  1281. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  1282. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  1283. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  1284. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  1285. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  1286. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  1287. pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  1288. pygpt_net/data/js/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
  1289. pygpt_net/data/js/katex/fonts/KaTeX_Script-Regular.woff +0 -0
  1290. pygpt_net/data/js/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  1291. pygpt_net/data/js/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
  1292. pygpt_net/data/js/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
  1293. pygpt_net/data/js/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  1294. pygpt_net/data/js/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
  1295. pygpt_net/data/js/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
  1296. pygpt_net/data/js/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  1297. pygpt_net/data/js/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
  1298. pygpt_net/data/js/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
  1299. pygpt_net/data/js/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  1300. pygpt_net/data/js/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
  1301. pygpt_net/data/js/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
  1302. pygpt_net/data/js/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  1303. pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  1304. pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  1305. pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  1306. pygpt_net/data/js/katex/katex.min.css +1 -0
  1307. pygpt_net/data/js/katex/katex.min.js +1 -0
  1308. pygpt_net/data/locale/locale.de.ini +580 -124
  1309. pygpt_net/data/locale/locale.en.ini +820 -282
  1310. pygpt_net/data/locale/locale.es.ini +580 -124
  1311. pygpt_net/data/locale/locale.fr.ini +581 -125
  1312. pygpt_net/data/locale/locale.it.ini +581 -125
  1313. pygpt_net/data/locale/locale.pl.ini +584 -128
  1314. pygpt_net/data/locale/locale.uk.ini +1046 -0
  1315. pygpt_net/data/locale/locale.zh.ini +642 -189
  1316. pygpt_net/data/locale/plugin.agent.de.ini +17 -0
  1317. pygpt_net/data/locale/plugin.agent.en.ini +13 -18
  1318. pygpt_net/data/locale/plugin.agent.es.ini +17 -0
  1319. pygpt_net/data/locale/plugin.agent.fr.ini +17 -0
  1320. pygpt_net/data/locale/plugin.agent.it.ini +17 -0
  1321. pygpt_net/data/locale/plugin.agent.pl.ini +15 -18
  1322. pygpt_net/data/locale/plugin.agent.uk.ini +17 -0
  1323. pygpt_net/data/locale/plugin.agent.zh.ini +17 -0
  1324. pygpt_net/data/locale/plugin.audio_input.de.ini +63 -0
  1325. pygpt_net/data/locale/plugin.audio_input.en.ini +41 -67
  1326. pygpt_net/data/locale/plugin.audio_input.es.ini +63 -0
  1327. pygpt_net/data/locale/plugin.audio_input.fr.ini +63 -0
  1328. pygpt_net/data/locale/plugin.audio_input.it.ini +63 -0
  1329. pygpt_net/data/locale/plugin.audio_input.pl.ini +51 -64
  1330. pygpt_net/data/locale/plugin.audio_input.uk.ini +63 -0
  1331. pygpt_net/data/locale/plugin.audio_input.zh.ini +63 -0
  1332. pygpt_net/data/locale/plugin.audio_output.de.ini +30 -0
  1333. pygpt_net/data/locale/plugin.audio_output.en.ini +23 -36
  1334. pygpt_net/data/locale/plugin.audio_output.es.ini +30 -0
  1335. pygpt_net/data/locale/plugin.audio_output.fr.ini +30 -0
  1336. pygpt_net/data/locale/plugin.audio_output.it.ini +30 -0
  1337. pygpt_net/data/locale/plugin.audio_output.pl.ini +26 -27
  1338. pygpt_net/data/locale/plugin.audio_output.uk.ini +30 -0
  1339. pygpt_net/data/locale/plugin.audio_output.zh.ini +30 -0
  1340. pygpt_net/data/locale/plugin.cmd_api.de.ini +12 -0
  1341. pygpt_net/data/locale/plugin.cmd_api.en.ini +9 -13
  1342. pygpt_net/data/locale/plugin.cmd_api.es.ini +12 -0
  1343. pygpt_net/data/locale/plugin.cmd_api.fr.ini +12 -0
  1344. pygpt_net/data/locale/plugin.cmd_api.it.ini +12 -0
  1345. pygpt_net/data/locale/plugin.cmd_api.pl.ini +10 -17
  1346. pygpt_net/data/locale/plugin.cmd_api.uk.ini +12 -0
  1347. pygpt_net/data/locale/plugin.cmd_api.zh.ini +12 -0
  1348. pygpt_net/data/locale/plugin.cmd_code_interpreter.de.ini +33 -0
  1349. pygpt_net/data/locale/plugin.cmd_code_interpreter.en.ini +60 -34
  1350. pygpt_net/data/locale/plugin.cmd_code_interpreter.es.ini +33 -0
  1351. pygpt_net/data/locale/plugin.cmd_code_interpreter.fr.ini +33 -0
  1352. pygpt_net/data/locale/plugin.cmd_code_interpreter.it.ini +33 -0
  1353. pygpt_net/data/locale/plugin.cmd_code_interpreter.pl.ini +32 -26
  1354. pygpt_net/data/locale/plugin.cmd_code_interpreter.uk.ini +33 -0
  1355. pygpt_net/data/locale/plugin.cmd_code_interpreter.zh.ini +33 -0
  1356. pygpt_net/data/locale/plugin.cmd_custom.de.ini +6 -0
  1357. pygpt_net/data/locale/plugin.cmd_custom.en.ini +4 -6
  1358. pygpt_net/data/locale/plugin.cmd_custom.es.ini +6 -0
  1359. pygpt_net/data/locale/plugin.cmd_custom.fr.ini +6 -0
  1360. pygpt_net/data/locale/plugin.cmd_custom.it.ini +6 -0
  1361. pygpt_net/data/locale/plugin.cmd_custom.pl.ini +4 -5
  1362. pygpt_net/data/locale/plugin.cmd_custom.uk.ini +6 -0
  1363. pygpt_net/data/locale/plugin.cmd_custom.zh.ini +6 -0
  1364. pygpt_net/data/locale/plugin.cmd_files.de.ini +56 -0
  1365. pygpt_net/data/locale/plugin.cmd_files.en.ini +42 -68
  1366. pygpt_net/data/locale/plugin.cmd_files.es.ini +56 -0
  1367. pygpt_net/data/locale/plugin.cmd_files.fr.ini +56 -0
  1368. pygpt_net/data/locale/plugin.cmd_files.it.ini +56 -0
  1369. pygpt_net/data/locale/plugin.cmd_files.pl.ini +55 -75
  1370. pygpt_net/data/locale/plugin.cmd_files.uk.ini +56 -0
  1371. pygpt_net/data/locale/plugin.cmd_files.zh.ini +56 -0
  1372. pygpt_net/data/locale/plugin.cmd_history.de.ini +31 -0
  1373. pygpt_net/data/locale/plugin.cmd_history.en.ini +25 -39
  1374. pygpt_net/data/locale/plugin.cmd_history.es.ini +31 -0
  1375. pygpt_net/data/locale/plugin.cmd_history.fr.ini +31 -0
  1376. pygpt_net/data/locale/plugin.cmd_history.it.ini +31 -0
  1377. pygpt_net/data/locale/plugin.cmd_history.pl.ini +28 -44
  1378. pygpt_net/data/locale/plugin.cmd_history.uk.ini +31 -0
  1379. pygpt_net/data/locale/plugin.cmd_history.zh.ini +31 -0
  1380. pygpt_net/data/locale/plugin.cmd_mouse_control.de.ini +31 -0
  1381. pygpt_net/data/locale/plugin.cmd_mouse_control.en.ini +33 -0
  1382. pygpt_net/data/locale/plugin.cmd_mouse_control.es.ini +31 -0
  1383. pygpt_net/data/locale/plugin.cmd_mouse_control.fr.ini +31 -0
  1384. pygpt_net/data/locale/plugin.cmd_mouse_control.it.ini +31 -0
  1385. pygpt_net/data/locale/plugin.cmd_mouse_control.pl.ini +31 -0
  1386. pygpt_net/data/locale/plugin.cmd_mouse_control.uk.ini +31 -0
  1387. pygpt_net/data/locale/plugin.cmd_mouse_control.zh.ini +31 -0
  1388. pygpt_net/data/locale/plugin.cmd_serial.de.ini +17 -0
  1389. pygpt_net/data/locale/plugin.cmd_serial.en.ini +13 -20
  1390. pygpt_net/data/locale/plugin.cmd_serial.es.ini +17 -0
  1391. pygpt_net/data/locale/plugin.cmd_serial.fr.ini +17 -0
  1392. pygpt_net/data/locale/plugin.cmd_serial.it.ini +17 -0
  1393. pygpt_net/data/locale/plugin.cmd_serial.pl.ini +14 -31
  1394. pygpt_net/data/locale/plugin.cmd_serial.uk.ini +17 -0
  1395. pygpt_net/data/locale/plugin.cmd_serial.zh.ini +17 -0
  1396. pygpt_net/data/locale/plugin.cmd_system.de.ini +17 -0
  1397. pygpt_net/data/locale/plugin.cmd_system.en.ini +23 -0
  1398. pygpt_net/data/locale/plugin.cmd_system.es.ini +17 -0
  1399. pygpt_net/data/locale/plugin.cmd_system.fr.ini +17 -0
  1400. pygpt_net/data/locale/plugin.cmd_system.it.ini +17 -0
  1401. pygpt_net/data/locale/plugin.cmd_system.pl.ini +17 -0
  1402. pygpt_net/data/locale/plugin.cmd_system.uk.ini +17 -0
  1403. pygpt_net/data/locale/plugin.cmd_system.zh.ini +17 -0
  1404. pygpt_net/data/locale/plugin.cmd_web.de.ini +62 -0
  1405. pygpt_net/data/locale/plugin.cmd_web.en.ini +58 -71
  1406. pygpt_net/data/locale/plugin.cmd_web.es.ini +62 -0
  1407. pygpt_net/data/locale/plugin.cmd_web.fr.ini +62 -0
  1408. pygpt_net/data/locale/plugin.cmd_web.it.ini +62 -0
  1409. pygpt_net/data/locale/plugin.cmd_web.pl.ini +59 -76
  1410. pygpt_net/data/locale/plugin.cmd_web.uk.ini +62 -0
  1411. pygpt_net/data/locale/plugin.cmd_web.zh.ini +62 -0
  1412. pygpt_net/data/locale/plugin.crontab.de.ini +9 -0
  1413. pygpt_net/data/locale/plugin.crontab.en.ini +5 -8
  1414. pygpt_net/data/locale/plugin.crontab.es.ini +9 -0
  1415. pygpt_net/data/locale/plugin.crontab.fr.ini +9 -0
  1416. pygpt_net/data/locale/plugin.crontab.it.ini +9 -0
  1417. pygpt_net/data/locale/plugin.crontab.pl.ini +7 -10
  1418. pygpt_net/data/locale/plugin.crontab.uk.ini +9 -0
  1419. pygpt_net/data/locale/plugin.crontab.zh.ini +9 -0
  1420. pygpt_net/data/locale/plugin.experts.de.ini +3 -0
  1421. pygpt_net/data/locale/plugin.experts.en.ini +3 -0
  1422. pygpt_net/data/locale/plugin.experts.es.ini +3 -0
  1423. pygpt_net/data/locale/plugin.experts.fr.ini +3 -0
  1424. pygpt_net/data/locale/plugin.experts.it.ini +3 -0
  1425. pygpt_net/data/locale/plugin.experts.pl.ini +3 -0
  1426. pygpt_net/data/locale/plugin.experts.uk.ini +3 -0
  1427. pygpt_net/data/locale/plugin.experts.zh.ini +3 -0
  1428. pygpt_net/data/locale/plugin.extra_prompt.de.ini +5 -0
  1429. pygpt_net/data/locale/plugin.extra_prompt.en.ini +3 -4
  1430. pygpt_net/data/locale/plugin.extra_prompt.es.ini +5 -0
  1431. pygpt_net/data/locale/plugin.extra_prompt.fr.ini +5 -0
  1432. pygpt_net/data/locale/plugin.extra_prompt.it.ini +5 -0
  1433. pygpt_net/data/locale/plugin.extra_prompt.pl.ini +4 -6
  1434. pygpt_net/data/locale/plugin.extra_prompt.uk.ini +5 -0
  1435. pygpt_net/data/locale/plugin.extra_prompt.zh.ini +5 -0
  1436. pygpt_net/data/locale/plugin.idx_llama_index.de.ini +23 -0
  1437. pygpt_net/data/locale/plugin.idx_llama_index.en.ini +20 -30
  1438. pygpt_net/data/locale/plugin.idx_llama_index.es.ini +23 -0
  1439. pygpt_net/data/locale/plugin.idx_llama_index.fr.ini +23 -0
  1440. pygpt_net/data/locale/plugin.idx_llama_index.it.ini +23 -0
  1441. pygpt_net/data/locale/plugin.idx_llama_index.pl.ini +21 -16
  1442. pygpt_net/data/locale/plugin.idx_llama_index.uk.ini +23 -0
  1443. pygpt_net/data/locale/plugin.idx_llama_index.zh.ini +23 -0
  1444. pygpt_net/data/locale/plugin.mailer.en.ini +21 -0
  1445. pygpt_net/data/locale/plugin.openai_dalle.de.ini +5 -0
  1446. pygpt_net/data/locale/plugin.openai_dalle.en.ini +2 -3
  1447. pygpt_net/data/locale/plugin.openai_dalle.es.ini +5 -0
  1448. pygpt_net/data/locale/plugin.openai_dalle.fr.ini +5 -0
  1449. pygpt_net/data/locale/plugin.openai_dalle.it.ini +5 -0
  1450. pygpt_net/data/locale/plugin.openai_dalle.pl.ini +3 -4
  1451. pygpt_net/data/locale/plugin.openai_dalle.uk.ini +5 -0
  1452. pygpt_net/data/locale/plugin.openai_dalle.zh.ini +5 -0
  1453. pygpt_net/data/locale/plugin.openai_vision.de.ini +15 -0
  1454. pygpt_net/data/locale/plugin.openai_vision.en.ini +11 -16
  1455. pygpt_net/data/locale/plugin.openai_vision.es.ini +15 -0
  1456. pygpt_net/data/locale/plugin.openai_vision.fr.ini +15 -0
  1457. pygpt_net/data/locale/plugin.openai_vision.it.ini +15 -0
  1458. pygpt_net/data/locale/plugin.openai_vision.pl.ini +11 -16
  1459. pygpt_net/data/locale/plugin.openai_vision.uk.ini +15 -0
  1460. pygpt_net/data/locale/plugin.openai_vision.zh.ini +15 -0
  1461. pygpt_net/data/locale/plugin.real_time.de.ini +12 -0
  1462. pygpt_net/data/locale/plugin.real_time.en.ini +8 -11
  1463. pygpt_net/data/locale/plugin.real_time.es.ini +12 -0
  1464. pygpt_net/data/locale/plugin.real_time.fr.ini +12 -0
  1465. pygpt_net/data/locale/plugin.real_time.it.ini +12 -0
  1466. pygpt_net/data/locale/plugin.real_time.pl.ini +8 -11
  1467. pygpt_net/data/locale/plugin.real_time.uk.ini +12 -0
  1468. pygpt_net/data/locale/plugin.real_time.zh.ini +12 -0
  1469. pygpt_net/data/locale/plugin.voice_control.de.ini +5 -0
  1470. pygpt_net/data/locale/plugin.voice_control.en.ini +5 -0
  1471. pygpt_net/data/locale/plugin.voice_control.es.ini +5 -0
  1472. pygpt_net/data/locale/plugin.voice_control.fr.ini +5 -0
  1473. pygpt_net/data/locale/plugin.voice_control.it.ini +5 -0
  1474. pygpt_net/data/locale/plugin.voice_control.pl.ini +5 -0
  1475. pygpt_net/data/locale/plugin.voice_control.uk.ini +5 -0
  1476. pygpt_net/data/locale/plugin.voice_control.zh.ini +5 -0
  1477. pygpt_net/data/prompts.csv +169 -0
  1478. pygpt_net/data/win32/README.rtf +0 -0
  1479. pygpt_net/data/win32/USER-LICENSE.rtf +0 -0
  1480. pygpt_net/data/win32/banner.bmp +0 -0
  1481. pygpt_net/data/win32/banner_welcome.bmp +0 -0
  1482. pygpt_net/fonts.qrc +64 -0
  1483. pygpt_net/fonts_rc.py +67878 -0
  1484. pygpt_net/icons.qrc +138 -403
  1485. pygpt_net/icons_rc.py +214 -133
  1486. pygpt_net/item/assistant.py +192 -28
  1487. pygpt_net/item/attachment.py +35 -3
  1488. pygpt_net/item/ctx.py +294 -17
  1489. pygpt_net/item/model.py +58 -3
  1490. pygpt_net/item/preset.py +41 -1
  1491. pygpt_net/item/prompt.py +63 -0
  1492. pygpt_net/js.qrc +8 -0
  1493. pygpt_net/js_rc.py +50785 -0
  1494. pygpt_net/launcher.py +81 -3
  1495. pygpt_net/migrations/Version20240408180000.py +34 -0
  1496. pygpt_net/migrations/Version20240426050000.py +55 -0
  1497. pygpt_net/migrations/Version20240501030000.py +31 -0
  1498. pygpt_net/migrations/Version20241122130000.py +34 -0
  1499. pygpt_net/migrations/Version20241126170000.py +28 -0
  1500. pygpt_net/migrations/Version20241215110000.py +25 -0
  1501. pygpt_net/migrations/__init__.py +13 -2
  1502. pygpt_net/plugin/agent/__init__.py +25 -154
  1503. pygpt_net/plugin/agent/config.py +146 -0
  1504. pygpt_net/plugin/audio_input/__init__.py +54 -263
  1505. pygpt_net/plugin/audio_input/config.py +247 -0
  1506. pygpt_net/plugin/audio_input/simple.py +68 -9
  1507. pygpt_net/plugin/audio_input/worker.py +43 -2
  1508. pygpt_net/plugin/audio_output/__init__.py +61 -34
  1509. pygpt_net/plugin/audio_output/config.py +34 -0
  1510. pygpt_net/plugin/audio_output/worker.py +56 -13
  1511. pygpt_net/plugin/base/__init__.py +0 -0
  1512. pygpt_net/plugin/base/config.py +26 -0
  1513. pygpt_net/plugin/{base.py → base/plugin.py} +212 -133
  1514. pygpt_net/plugin/base/signals.py +23 -0
  1515. pygpt_net/plugin/base/worker.py +268 -0
  1516. pygpt_net/plugin/cmd_api/__init__.py +16 -112
  1517. pygpt_net/plugin/cmd_api/config.py +91 -0
  1518. pygpt_net/plugin/cmd_api/worker.py +19 -25
  1519. pygpt_net/plugin/cmd_code_interpreter/__init__.py +166 -194
  1520. pygpt_net/plugin/cmd_code_interpreter/builder.py +82 -0
  1521. pygpt_net/plugin/cmd_code_interpreter/config.py +390 -0
  1522. pygpt_net/plugin/cmd_code_interpreter/docker.py +63 -0
  1523. pygpt_net/plugin/cmd_code_interpreter/ipython/__init__.py +13 -0
  1524. pygpt_net/plugin/cmd_code_interpreter/ipython/docker_kernel.py +546 -0
  1525. pygpt_net/plugin/cmd_code_interpreter/ipython/local_kernel.py +220 -0
  1526. pygpt_net/plugin/cmd_code_interpreter/output.py +42 -0
  1527. pygpt_net/plugin/cmd_code_interpreter/runner.py +207 -48
  1528. pygpt_net/plugin/cmd_code_interpreter/worker.py +188 -120
  1529. pygpt_net/plugin/cmd_custom/__init__.py +15 -75
  1530. pygpt_net/plugin/cmd_custom/config.py +54 -0
  1531. pygpt_net/plugin/cmd_custom/worker.py +15 -30
  1532. pygpt_net/plugin/cmd_files/__init__.py +31 -436
  1533. pygpt_net/plugin/cmd_files/config.py +426 -0
  1534. pygpt_net/plugin/cmd_files/output.py +42 -0
  1535. pygpt_net/plugin/cmd_files/worker.py +203 -356
  1536. pygpt_net/plugin/cmd_history/__init__.py +33 -294
  1537. pygpt_net/plugin/cmd_history/config.py +270 -0
  1538. pygpt_net/plugin/cmd_history/worker.py +56 -88
  1539. pygpt_net/plugin/cmd_mouse_control/__init__.py +166 -0
  1540. pygpt_net/plugin/cmd_mouse_control/config.py +277 -0
  1541. pygpt_net/plugin/cmd_mouse_control/worker.py +327 -0
  1542. pygpt_net/plugin/cmd_serial/__init__.py +15 -127
  1543. pygpt_net/plugin/cmd_serial/config.py +105 -0
  1544. pygpt_net/plugin/cmd_serial/worker.py +28 -59
  1545. pygpt_net/plugin/cmd_system/__init__.py +169 -0
  1546. pygpt_net/plugin/cmd_system/config.py +137 -0
  1547. pygpt_net/plugin/cmd_system/docker.py +63 -0
  1548. pygpt_net/plugin/cmd_system/output.py +42 -0
  1549. pygpt_net/plugin/cmd_system/runner.py +258 -0
  1550. pygpt_net/plugin/cmd_system/worker.py +120 -0
  1551. pygpt_net/plugin/cmd_web/__init__.py +127 -321
  1552. pygpt_net/plugin/cmd_web/config.py +367 -0
  1553. pygpt_net/plugin/cmd_web/websearch.py +96 -35
  1554. pygpt_net/plugin/cmd_web/worker.py +226 -118
  1555. pygpt_net/plugin/crontab/__init__.py +20 -83
  1556. pygpt_net/plugin/crontab/config.py +73 -0
  1557. pygpt_net/plugin/experts/__init__.py +81 -0
  1558. pygpt_net/plugin/experts/config.py +26 -0
  1559. pygpt_net/plugin/extra_prompt/__init__.py +10 -42
  1560. pygpt_net/plugin/extra_prompt/config.py +44 -0
  1561. pygpt_net/plugin/idx_llama_index/__init__.py +88 -162
  1562. pygpt_net/plugin/idx_llama_index/config.py +134 -0
  1563. pygpt_net/plugin/idx_llama_index/worker.py +31 -31
  1564. pygpt_net/plugin/mailer/__init__.py +123 -0
  1565. pygpt_net/plugin/mailer/config.py +149 -0
  1566. pygpt_net/plugin/mailer/runner.py +285 -0
  1567. pygpt_net/plugin/mailer/worker.py +123 -0
  1568. pygpt_net/plugin/openai_dalle/__init__.py +63 -67
  1569. pygpt_net/plugin/openai_dalle/config.py +72 -0
  1570. pygpt_net/plugin/openai_vision/__init__.py +105 -143
  1571. pygpt_net/plugin/openai_vision/config.py +118 -0
  1572. pygpt_net/plugin/openai_vision/worker.py +159 -0
  1573. pygpt_net/plugin/real_time/__init__.py +101 -51
  1574. pygpt_net/plugin/real_time/config.py +61 -0
  1575. pygpt_net/plugin/voice_control/__init__.py +158 -0
  1576. pygpt_net/plugin/voice_control/config.py +35 -0
  1577. pygpt_net/provider/agents/__init__.py +0 -0
  1578. pygpt_net/provider/agents/base.py +36 -0
  1579. pygpt_net/provider/agents/openai.py +43 -0
  1580. pygpt_net/provider/agents/openai_assistant.py +77 -0
  1581. pygpt_net/provider/agents/planner.py +52 -0
  1582. pygpt_net/provider/agents/react.py +68 -0
  1583. pygpt_net/provider/audio_input/base.py +2 -2
  1584. pygpt_net/provider/audio_output/base.py +2 -2
  1585. pygpt_net/provider/audio_output/openai_tts.py +5 -11
  1586. pygpt_net/provider/core/assistant/base.py +5 -3
  1587. pygpt_net/provider/core/assistant/json_file.py +21 -5
  1588. pygpt_net/provider/core/assistant_file/__init__.py +10 -0
  1589. pygpt_net/provider/core/assistant_file/base.py +55 -0
  1590. pygpt_net/provider/core/assistant_file/db_sqlite/__init__.py +201 -0
  1591. pygpt_net/provider/core/assistant_file/db_sqlite/patch.py +27 -0
  1592. pygpt_net/provider/core/assistant_file/db_sqlite/storage.py +352 -0
  1593. pygpt_net/provider/core/assistant_file/db_sqlite/utils.py +62 -0
  1594. pygpt_net/provider/core/assistant_store/__init__.py +10 -0
  1595. pygpt_net/provider/core/assistant_store/base.py +56 -0
  1596. pygpt_net/provider/core/assistant_store/db_sqlite/__init__.py +135 -0
  1597. pygpt_net/provider/core/assistant_store/db_sqlite/patch.py +27 -0
  1598. pygpt_net/provider/core/assistant_store/db_sqlite/storage.py +240 -0
  1599. pygpt_net/provider/core/assistant_store/db_sqlite/utils.py +66 -0
  1600. pygpt_net/provider/core/assistant_store/json_file.py +150 -0
  1601. pygpt_net/provider/core/attachment/base.py +5 -3
  1602. pygpt_net/provider/core/attachment/json_file.py +14 -4
  1603. pygpt_net/provider/core/calendar/base.py +5 -3
  1604. pygpt_net/provider/core/calendar/db_sqlite/__init__.py +6 -5
  1605. pygpt_net/provider/core/calendar/db_sqlite/storage.py +5 -4
  1606. pygpt_net/provider/core/config/base.py +8 -6
  1607. pygpt_net/provider/core/config/json_file.py +9 -7
  1608. pygpt_net/provider/core/config/patch.py +535 -1
  1609. pygpt_net/provider/core/ctx/base.py +47 -19
  1610. pygpt_net/provider/core/ctx/db_sqlite/__init__.py +152 -20
  1611. pygpt_net/provider/core/ctx/db_sqlite/storage.py +530 -46
  1612. pygpt_net/provider/core/ctx/db_sqlite/utils.py +87 -17
  1613. pygpt_net/provider/core/index/base.py +129 -23
  1614. pygpt_net/provider/core/index/db_sqlite/__init__.py +130 -23
  1615. pygpt_net/provider/core/index/db_sqlite/storage.py +130 -23
  1616. pygpt_net/provider/core/index/db_sqlite/utils.py +4 -2
  1617. pygpt_net/provider/core/mode/base.py +5 -3
  1618. pygpt_net/provider/core/mode/json_file.py +7 -6
  1619. pygpt_net/provider/core/model/base.py +6 -4
  1620. pygpt_net/provider/core/model/json_file.py +13 -7
  1621. pygpt_net/provider/core/model/patch.py +274 -1
  1622. pygpt_net/provider/core/notepad/base.py +5 -3
  1623. pygpt_net/provider/core/notepad/db_sqlite/__init__.py +5 -4
  1624. pygpt_net/provider/core/notepad/db_sqlite/storage.py +4 -3
  1625. pygpt_net/provider/core/plugin_preset/base.py +4 -2
  1626. pygpt_net/provider/core/plugin_preset/json_file.py +5 -3
  1627. pygpt_net/provider/core/preset/base.py +6 -4
  1628. pygpt_net/provider/core/preset/json_file.py +75 -33
  1629. pygpt_net/provider/core/preset/patch.py +63 -1
  1630. pygpt_net/provider/core/prompt/__init__.py +0 -0
  1631. pygpt_net/provider/core/prompt/base.py +51 -0
  1632. pygpt_net/provider/core/prompt/json_file.py +170 -0
  1633. pygpt_net/provider/gpt/__init__.py +107 -60
  1634. pygpt_net/provider/gpt/assistants.py +252 -239
  1635. pygpt_net/provider/gpt/audio.py +64 -0
  1636. pygpt_net/provider/gpt/chat.py +159 -54
  1637. pygpt_net/provider/gpt/completion.py +67 -36
  1638. pygpt_net/provider/gpt/image.py +77 -47
  1639. pygpt_net/provider/gpt/store.py +608 -0
  1640. pygpt_net/provider/gpt/summarizer.py +15 -3
  1641. pygpt_net/provider/gpt/utils.py +27 -0
  1642. pygpt_net/provider/gpt/vision.py +110 -46
  1643. pygpt_net/provider/gpt/worker/assistants.py +454 -36
  1644. pygpt_net/provider/gpt/worker/importer.py +320 -38
  1645. pygpt_net/provider/llms/anthropic.py +23 -20
  1646. pygpt_net/provider/llms/azure_openai.py +39 -6
  1647. pygpt_net/provider/llms/base.py +64 -10
  1648. pygpt_net/provider/llms/google.py +73 -0
  1649. pygpt_net/provider/llms/hugging_face.py +18 -6
  1650. pygpt_net/provider/llms/hugging_face_api.py +85 -0
  1651. pygpt_net/provider/llms/local.py +43 -0
  1652. pygpt_net/provider/llms/ollama.py +83 -5
  1653. pygpt_net/provider/llms/openai.py +50 -6
  1654. pygpt_net/provider/loaders/base.py +25 -1
  1655. pygpt_net/provider/loaders/file_csv.py +5 -1
  1656. pygpt_net/provider/loaders/file_html.py +5 -1
  1657. pygpt_net/provider/loaders/file_image_vision.py +12 -3
  1658. pygpt_net/provider/loaders/file_ipynb.py +5 -1
  1659. pygpt_net/provider/loaders/file_markdown.py +5 -1
  1660. pygpt_net/provider/loaders/file_pdf.py +4 -1
  1661. pygpt_net/provider/loaders/file_video_audio.py +5 -1
  1662. pygpt_net/provider/loaders/file_xml.py +4 -1
  1663. pygpt_net/provider/loaders/hub/github/issues.py +5 -5
  1664. pygpt_net/provider/loaders/hub/google/gmail.py +2 -2
  1665. pygpt_net/provider/loaders/hub/image_vision/base.py +22 -0
  1666. pygpt_net/provider/loaders/hub/json/base.py +2 -2
  1667. pygpt_net/provider/loaders/hub/pandas_excel/base.py +2 -2
  1668. pygpt_net/provider/loaders/hub/simple_csv/base.py +2 -2
  1669. pygpt_net/provider/loaders/hub/yt/base.py +6 -1
  1670. pygpt_net/provider/loaders/web_bitbucket.py +6 -1
  1671. pygpt_net/provider/loaders/web_chatgpt_retrieval.py +7 -1
  1672. pygpt_net/provider/loaders/web_database.py +22 -3
  1673. pygpt_net/provider/loaders/web_github_issues.py +22 -1
  1674. pygpt_net/provider/loaders/web_github_repo.py +23 -1
  1675. pygpt_net/provider/loaders/web_google_calendar.py +13 -1
  1676. pygpt_net/provider/loaders/web_google_docs.py +10 -1
  1677. pygpt_net/provider/loaders/web_google_drive.py +18 -2
  1678. pygpt_net/provider/loaders/web_google_gmail.py +12 -2
  1679. pygpt_net/provider/loaders/web_google_keep.py +8 -1
  1680. pygpt_net/provider/loaders/web_google_sheets.py +10 -1
  1681. pygpt_net/provider/loaders/web_microsoft_onedrive.py +20 -1
  1682. pygpt_net/provider/loaders/web_page.py +4 -2
  1683. pygpt_net/provider/loaders/web_rss.py +3 -1
  1684. pygpt_net/provider/loaders/web_sitemap.py +13 -3
  1685. pygpt_net/provider/loaders/web_twitter.py +8 -2
  1686. pygpt_net/provider/loaders/web_yt.py +35 -2
  1687. pygpt_net/provider/vector_stores/__init__.py +113 -14
  1688. pygpt_net/provider/vector_stores/base.py +45 -10
  1689. pygpt_net/provider/vector_stores/chroma.py +22 -6
  1690. pygpt_net/provider/vector_stores/ctx_attachment.py +125 -0
  1691. pygpt_net/provider/vector_stores/elasticsearch.py +21 -6
  1692. pygpt_net/provider/vector_stores/pinecode.py +21 -6
  1693. pygpt_net/provider/vector_stores/redis.py +21 -6
  1694. pygpt_net/provider/vector_stores/simple.py +17 -6
  1695. pygpt_net/provider/vector_stores/temp.py +21 -7
  1696. pygpt_net/provider/web/base.py +11 -4
  1697. pygpt_net/provider/web/google_custom_search.py +9 -3
  1698. pygpt_net/provider/web/microsoft_bing.py +9 -3
  1699. pygpt_net/tools/__init__.py +150 -0
  1700. pygpt_net/{controller/audio/transcript.py → tools/audio_transcriber/__init__.py} +105 -41
  1701. pygpt_net/tools/audio_transcriber/ui/__init__.py +0 -0
  1702. pygpt_net/tools/audio_transcriber/ui/dialogs.py +150 -0
  1703. pygpt_net/tools/base.py +113 -0
  1704. pygpt_net/tools/code_interpreter/__init__.py +563 -0
  1705. pygpt_net/tools/code_interpreter/ui/__init__.py +0 -0
  1706. pygpt_net/tools/code_interpreter/ui/dialogs.py +127 -0
  1707. pygpt_net/tools/code_interpreter/ui/widgets.py +386 -0
  1708. pygpt_net/tools/html_canvas/__init__.py +320 -0
  1709. pygpt_net/tools/html_canvas/ui/__init__.py +0 -0
  1710. pygpt_net/tools/html_canvas/ui/dialogs.py +142 -0
  1711. pygpt_net/tools/html_canvas/ui/widgets.py +135 -0
  1712. pygpt_net/tools/image_viewer/__init__.py +303 -0
  1713. pygpt_net/tools/image_viewer/ui/__init__.py +0 -0
  1714. pygpt_net/tools/image_viewer/ui/dialogs.py +152 -0
  1715. pygpt_net/tools/indexer/__init__.py +520 -0
  1716. pygpt_net/tools/indexer/ui/__init__.py +0 -0
  1717. pygpt_net/tools/indexer/ui/browse.py +46 -0
  1718. pygpt_net/tools/indexer/ui/ctx.py +96 -0
  1719. pygpt_net/tools/indexer/ui/dialogs.py +199 -0
  1720. pygpt_net/tools/indexer/ui/files.py +101 -0
  1721. pygpt_net/tools/indexer/ui/web.py +199 -0
  1722. pygpt_net/tools/indexer/ui/widgets.py +121 -0
  1723. pygpt_net/tools/media_player/__init__.py +202 -0
  1724. pygpt_net/tools/media_player/ui/__init__.py +0 -0
  1725. pygpt_net/tools/media_player/ui/dialogs.py +113 -0
  1726. pygpt_net/{ui/widget/video/player.py → tools/media_player/ui/widgets.py} +61 -33
  1727. pygpt_net/tools/text_editor/__init__.py +293 -0
  1728. pygpt_net/tools/text_editor/ui/__init__.py +0 -0
  1729. pygpt_net/tools/text_editor/ui/dialogs.py +80 -0
  1730. pygpt_net/tools/text_editor/ui/widgets.py +77 -0
  1731. pygpt_net/ui/__init__.py +90 -22
  1732. pygpt_net/ui/base/config_dialog.py +2 -1
  1733. pygpt_net/ui/base/context_menu.py +81 -0
  1734. pygpt_net/ui/dialog/about.py +44 -29
  1735. pygpt_net/ui/dialog/applog.py +17 -4
  1736. pygpt_net/ui/dialog/assistant.py +45 -29
  1737. pygpt_net/ui/dialog/assistant_store.py +525 -0
  1738. pygpt_net/ui/dialog/db.py +111 -49
  1739. pygpt_net/ui/dialog/editor.py +16 -68
  1740. pygpt_net/ui/dialog/find.py +29 -0
  1741. pygpt_net/ui/dialog/image.py +4 -44
  1742. pygpt_net/ui/dialog/logger.py +2 -1
  1743. pygpt_net/ui/dialog/plugins.py +8 -6
  1744. pygpt_net/ui/dialog/preset.py +118 -47
  1745. pygpt_net/ui/dialog/profile.py +118 -0
  1746. pygpt_net/ui/dialog/settings.py +23 -7
  1747. pygpt_net/ui/dialog/start.py +5 -2
  1748. pygpt_net/ui/dialog/url.py +29 -0
  1749. pygpt_net/ui/dialog/workdir.py +108 -0
  1750. pygpt_net/ui/dialogs.py +35 -19
  1751. pygpt_net/ui/layout/chat/__init__.py +3 -3
  1752. pygpt_net/ui/layout/chat/attachments.py +56 -6
  1753. pygpt_net/ui/layout/chat/attachments_ctx.py +162 -0
  1754. pygpt_net/ui/layout/chat/attachments_uploaded.py +41 -16
  1755. pygpt_net/ui/layout/chat/calendar.py +15 -21
  1756. pygpt_net/ui/layout/chat/explorer.py +39 -0
  1757. pygpt_net/ui/layout/chat/input.py +48 -11
  1758. pygpt_net/ui/layout/chat/output.py +112 -99
  1759. pygpt_net/ui/layout/chat/painter.py +35 -29
  1760. pygpt_net/ui/layout/ctx/__init__.py +4 -1
  1761. pygpt_net/ui/layout/ctx/ctx_list.py +233 -36
  1762. pygpt_net/ui/layout/status.py +9 -1
  1763. pygpt_net/ui/layout/toolbox/__init__.py +17 -23
  1764. pygpt_net/ui/layout/toolbox/agent.py +23 -13
  1765. pygpt_net/ui/layout/toolbox/agent_llama.py +74 -0
  1766. pygpt_net/ui/layout/toolbox/assistants.py +12 -8
  1767. pygpt_net/ui/layout/toolbox/footer.py +33 -7
  1768. pygpt_net/ui/layout/toolbox/image.py +2 -1
  1769. pygpt_net/ui/layout/toolbox/indexes.py +99 -12
  1770. pygpt_net/ui/layout/toolbox/mode.py +11 -49
  1771. pygpt_net/ui/layout/toolbox/model.py +12 -48
  1772. pygpt_net/ui/layout/toolbox/presets.py +44 -12
  1773. pygpt_net/ui/layout/toolbox/prompt.py +30 -15
  1774. pygpt_net/ui/main.py +98 -20
  1775. pygpt_net/ui/menu/__init__.py +11 -1
  1776. pygpt_net/ui/menu/about.py +14 -3
  1777. pygpt_net/ui/menu/audio.py +40 -11
  1778. pygpt_net/ui/menu/config.py +61 -11
  1779. pygpt_net/ui/menu/debug.py +34 -9
  1780. pygpt_net/ui/menu/donate.py +46 -0
  1781. pygpt_net/ui/menu/file.py +25 -3
  1782. pygpt_net/ui/menu/theme.py +19 -1
  1783. pygpt_net/ui/menu/tools.py +83 -0
  1784. pygpt_net/ui/menu/video.py +1 -13
  1785. pygpt_net/ui/tray.py +5 -5
  1786. pygpt_net/ui/widget/anims/loader.py +229 -0
  1787. pygpt_net/ui/widget/anims/toggles.py +167 -0
  1788. pygpt_net/ui/widget/audio/input_button.py +53 -3
  1789. pygpt_net/ui/widget/calendar/select.py +30 -4
  1790. pygpt_net/ui/widget/dialog/alert.py +3 -1
  1791. pygpt_net/ui/widget/dialog/{interpreter.py → assistant_store.py} +14 -14
  1792. pygpt_net/ui/widget/dialog/audio.py +1 -38
  1793. pygpt_net/ui/widget/dialog/base.py +22 -8
  1794. pygpt_net/ui/widget/dialog/confirm.py +8 -7
  1795. pygpt_net/ui/widget/dialog/debug.py +2 -1
  1796. pygpt_net/ui/widget/dialog/editor_file.py +117 -13
  1797. pygpt_net/ui/widget/dialog/find.py +88 -0
  1798. pygpt_net/ui/widget/dialog/image.py +1 -1
  1799. pygpt_net/ui/widget/dialog/preset_plugins.py +2 -2
  1800. pygpt_net/ui/widget/dialog/profile.py +177 -0
  1801. pygpt_net/ui/widget/dialog/url.py +207 -0
  1802. pygpt_net/ui/widget/dialog/{video_player.py → workdir.py} +11 -11
  1803. pygpt_net/ui/widget/draw/painter.py +40 -2
  1804. pygpt_net/ui/widget/element/button.py +87 -3
  1805. pygpt_net/ui/widget/element/group.py +38 -2
  1806. pygpt_net/ui/widget/filesystem/explorer.py +46 -13
  1807. pygpt_net/ui/widget/image/display.py +42 -9
  1808. pygpt_net/ui/widget/lists/assistant_store.py +114 -0
  1809. pygpt_net/ui/widget/lists/attachment.py +82 -15
  1810. pygpt_net/ui/widget/lists/attachment_ctx.py +173 -0
  1811. pygpt_net/ui/widget/lists/base.py +2 -2
  1812. pygpt_net/ui/widget/lists/base_combo.py +130 -0
  1813. pygpt_net/ui/widget/lists/base_list_combo.py +121 -0
  1814. pygpt_net/ui/widget/lists/context.py +359 -173
  1815. pygpt_net/ui/widget/lists/db.py +7 -3
  1816. pygpt_net/ui/widget/lists/experts.py +136 -0
  1817. pygpt_net/ui/widget/lists/index.py +3 -3
  1818. pygpt_net/ui/widget/lists/index_combo.py +130 -0
  1819. pygpt_net/ui/widget/lists/llama_mode_combo.py +35 -0
  1820. pygpt_net/ui/widget/lists/mode.py +2 -6
  1821. pygpt_net/ui/widget/lists/mode_combo.py +34 -0
  1822. pygpt_net/ui/widget/lists/model_combo.py +34 -0
  1823. pygpt_net/ui/widget/lists/preset.py +48 -1
  1824. pygpt_net/ui/widget/lists/profile.py +141 -0
  1825. pygpt_net/ui/widget/lists/uploaded.py +20 -7
  1826. pygpt_net/ui/widget/option/checkbox.py +69 -6
  1827. pygpt_net/ui/widget/option/cmd.py +11 -5
  1828. pygpt_net/ui/widget/option/combo.py +41 -4
  1829. pygpt_net/ui/widget/option/dictionary.py +33 -10
  1830. pygpt_net/ui/widget/option/input.py +106 -2
  1831. pygpt_net/ui/widget/option/prompt.py +14 -1
  1832. pygpt_net/ui/widget/option/textarea.py +18 -1
  1833. pygpt_net/ui/widget/option/toggle.py +63 -0
  1834. pygpt_net/ui/widget/option/toggle_label.py +79 -0
  1835. pygpt_net/ui/widget/tabs/Input.py +2 -2
  1836. pygpt_net/ui/widget/tabs/body.py +36 -0
  1837. pygpt_net/ui/widget/tabs/layout.py +195 -0
  1838. pygpt_net/ui/widget/tabs/output.py +305 -26
  1839. pygpt_net/ui/widget/textarea/calendar_note.py +55 -32
  1840. pygpt_net/ui/widget/textarea/editor.py +66 -115
  1841. pygpt_net/ui/widget/textarea/find.py +52 -0
  1842. pygpt_net/ui/widget/textarea/html.py +329 -0
  1843. pygpt_net/ui/widget/textarea/input.py +67 -33
  1844. pygpt_net/ui/widget/textarea/notepad.py +77 -44
  1845. pygpt_net/ui/widget/textarea/output.py +54 -40
  1846. pygpt_net/ui/widget/textarea/search_input.py +9 -1
  1847. pygpt_net/ui/widget/textarea/url.py +43 -0
  1848. pygpt_net/ui/widget/textarea/web.py +361 -0
  1849. pygpt_net/utils.py +100 -15
  1850. {pygpt_net-2.1.37.dist-info → pygpt_net-2.4.48.dist-info}/LICENSE +2 -0
  1851. {pygpt_net-2.1.37.dist-info → pygpt_net-2.4.48.dist-info}/METADATA +2288 -1173
  1852. pygpt_net-2.4.48.dist-info/RECORD +2181 -0
  1853. pygpt_net/controller/agent/flow.py +0 -223
  1854. pygpt_net/controller/editor.py +0 -54
  1855. pygpt_net/controller/interpreter.py +0 -299
  1856. pygpt_net/controller/video.py +0 -107
  1857. pygpt_net/core/bridge.py +0 -121
  1858. pygpt_net/core/prompt.py +0 -69
  1859. pygpt_net/data/locale/locale.ua.ini +0 -591
  1860. pygpt_net/provider/llms/llama.py +0 -47
  1861. pygpt_net/ui/dialog/audio.py +0 -75
  1862. pygpt_net/ui/dialog/interpreter.py +0 -107
  1863. pygpt_net/ui/dialog/video_player.py +0 -36
  1864. pygpt_net/ui/widget/textarea/interpreter.py +0 -104
  1865. pygpt_net-2.1.37.dist-info/RECORD +0 -760
  1866. /pygpt_net/{ui/widget/video → core/text}/__init__.py +0 -0
  1867. {pygpt_net-2.1.37.dist-info → pygpt_net-2.4.48.dist-info}/WHEEL +0 -0
  1868. {pygpt_net-2.1.37.dist-info → pygpt_net-2.4.48.dist-info}/entry_points.txt +0 -0
@@ -1,66 +1,88 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pygpt-net
3
- Version: 2.1.37
4
- Summary: Desktop AI Assistant powered by GPT-4, GPT-4V, GPT-3.5, DALL-E 3, Langchain LLMs, Llama-index, Whisper with chatbot, assistant, text completion, vision and image generation, internet access, chat with files, commands and code execution, file upload and download and more
5
- Home-page: https://github.com/szczyglis-dev/py-gpt
3
+ Version: 2.4.48
4
+ Summary: Desktop AI Assistant powered by models: OpenAI o1, GPT-4o, GPT-4, GPT-4 Vision, GPT-3.5, DALL-E 3, Llama 3, Mistral, Gemini, Claude, Bielik, and other models supported by Langchain, Llama Index, and Ollama. Features include chatbot, text completion, image generation, vision analysis, speech-to-text, internet access, file handling, command execution and more.
5
+ Home-page: https://pygpt.net
6
6
  License: MIT
7
- Keywords: py_gpt,py-gpt,pygpt,desktop,app,gpt,gpt4,gpt4-v,gpt3.5,gpt-4,gpt-4V,gpt-3.5,tts,whisper,vision,chatgpt,dall-e,chat,chatbot,assistant,text completion,image generation,ai,api,openai,api key,langchain,llama-index,presets,ui,qt,pyside
7
+ Keywords: py_gpt,py-gpt,pygpt,desktop,app,o1,gpt,gpt4,gpt-4o,gpt-4v,gpt3.5,gpt-4,gpt-4-vision,gpt-3.5,llama3,mistral,gemini,bielik,claude,tts,whisper,vision,chatgpt,dall-e,chat,chatbot,assistant,text completion,image generation,ai,api,openai,api key,langchain,llama-index,ollama,presets,ui,qt,pyside
8
8
  Author: Marcin Szczyglinski
9
9
  Author-email: info@pygpt.net
10
- Requires-Python: >=3.10,<3.12
10
+ Requires-Python: >=3.10,<3.13
11
11
  Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Programming Language :: Python
13
13
  Classifier: Programming Language :: Python :: 3
14
14
  Classifier: Programming Language :: Python :: 3.10
15
15
  Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
16
17
  Classifier: Topic :: Utilities
17
18
  Requires-Dist: EbookLib (>=0.18,<0.19)
18
- Requires-Dist: Markdown (>=3.5.1,<4.0.0)
19
+ Requires-Dist: Markdown (>=3.7,<4.0)
19
20
  Requires-Dist: PyAudio (>=0.2.14,<0.3.0)
20
- Requires-Dist: PySide6 (==6.4.2)
21
- Requires-Dist: PySide6-Addons (==6.4.2)
22
- Requires-Dist: PySide6-Essentials (==6.4.2)
23
- Requires-Dist: SQLAlchemy (>=2.0.23,<3.0.0)
24
- Requires-Dist: SpeechRecognition (>=3.10.0,<4.0.0)
25
- Requires-Dist: beautifulsoup4 (>=4.12.2,<5.0.0)
26
- Requires-Dist: chromadb (>=0.4.23,<0.5.0)
21
+ Requires-Dist: PyAutoGUI (>=0.9.54,<0.10.0)
22
+ Requires-Dist: PySide6 (==6.6.1)
23
+ Requires-Dist: Pygments (>=2.18.0,<3.0.0)
24
+ Requires-Dist: SQLAlchemy (>=2.0.27,<3.0.0)
25
+ Requires-Dist: SpeechRecognition (>=3.10.1,<4.0.0)
26
+ Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
27
+ Requires-Dist: chromadb (>=0.5.17,<0.6.0)
27
28
  Requires-Dist: croniter (>=2.0.1,<3.0.0)
28
29
  Requires-Dist: docker (>=7.0.0,<8.0.0)
29
30
  Requires-Dist: docx2txt (>=0.8,<0.9)
30
- Requires-Dist: langchain (>=0.1.9,<0.2.0)
31
- Requires-Dist: langchain-community (>=0.0.24,<0.0.25)
32
- Requires-Dist: langchain-experimental (>=0.0.52,<0.0.53)
33
- Requires-Dist: langchain-openai (>=0.0.2.post1,<0.0.3)
34
- Requires-Dist: llama-index (>=0.10.13.post1,<0.11.0)
35
- Requires-Dist: llama-index-embeddings-azure-openai (>=0.1.6,<0.2.0)
36
- Requires-Dist: llama-index-llms-azure-openai (>=0.1.5,<0.2.0)
37
- Requires-Dist: llama-index-readers-chatgpt-plugin (>=0.1.3,<0.2.0)
38
- Requires-Dist: llama-index-readers-database (>=0.1.3,<0.2.0)
39
- Requires-Dist: llama-index-readers-file (>=0.1.6,<0.2.0)
40
- Requires-Dist: llama-index-readers-github (>=0.1.7,<0.2.0)
41
- Requires-Dist: llama-index-readers-google (>=0.1.4,<0.2.0)
42
- Requires-Dist: llama-index-readers-microsoft-onedrive (>=0.1.3,<0.2.0)
43
- Requires-Dist: llama-index-readers-twitter (>=0.1.3,<0.2.0)
44
- Requires-Dist: llama-index-readers-web (>=0.1.6,<0.2.0)
45
- Requires-Dist: llama-index-vector-stores-chroma (>=0.1.4,<0.2.0)
46
- Requires-Dist: llama-index-vector-stores-elasticsearch (>=0.1.4,<0.2.0)
47
- Requires-Dist: llama-index-vector-stores-pinecone (>=0.1.3,<0.2.0)
48
- Requires-Dist: llama-index-vector-stores-redis (>=0.1.2,<0.2.0)
31
+ Requires-Dist: google-generativeai (>=0.8.3,<0.9.0)
32
+ Requires-Dist: httpx (>=0.27.2,<0.28.0)
33
+ Requires-Dist: httpx-socks (>=0.9.2,<0.10.0)
34
+ Requires-Dist: ipykernel (>=6.29.5,<7.0.0)
35
+ Requires-Dist: jupyter_client (>=8.6.3,<9.0.0)
36
+ Requires-Dist: langchain (>=0.2.14,<0.3.0)
37
+ Requires-Dist: langchain-community (>=0.2.12,<0.3.0)
38
+ Requires-Dist: langchain-experimental (>=0.0.64,<0.0.65)
39
+ Requires-Dist: langchain-openai (>=0.1.22,<0.2.0)
40
+ Requires-Dist: llama-index (>=0.12.11,<0.13.0)
41
+ Requires-Dist: llama-index-agent-openai (>=0.4.2,<0.5.0)
42
+ Requires-Dist: llama-index-core (==0.12.11)
43
+ Requires-Dist: llama-index-embeddings-azure-openai (>=0.3.0,<0.4.0)
44
+ Requires-Dist: llama-index-embeddings-gemini (>=0.3.1,<0.4.0)
45
+ Requires-Dist: llama-index-embeddings-huggingface-api (>=0.3.0,<0.4.0)
46
+ Requires-Dist: llama-index-embeddings-ollama (>=0.5.0,<0.6.0)
47
+ Requires-Dist: llama-index-embeddings-openai (>=0.3.1,<0.4.0)
48
+ Requires-Dist: llama-index-llms-anthropic (>=0.6.3,<0.7.0)
49
+ Requires-Dist: llama-index-llms-azure-openai (>=0.3.0,<0.4.0)
50
+ Requires-Dist: llama-index-llms-gemini (>=0.4.3,<0.5.0)
51
+ Requires-Dist: llama-index-llms-huggingface-api (>=0.3.1,<0.4.0)
52
+ Requires-Dist: llama-index-llms-ollama (>=0.5.0,<0.6.0)
53
+ Requires-Dist: llama-index-llms-openai (>=0.3.13,<0.4.0)
54
+ Requires-Dist: llama-index-llms-openai-like (>=0.3.3,<0.4.0)
55
+ Requires-Dist: llama-index-multi-modal-llms-openai (>=0.4.2,<0.5.0)
56
+ Requires-Dist: llama-index-readers-chatgpt-plugin (>=0.3.0,<0.4.0)
57
+ Requires-Dist: llama-index-readers-database (>=0.3.0,<0.4.0)
58
+ Requires-Dist: llama-index-readers-file (>=0.4.3,<0.5.0)
59
+ Requires-Dist: llama-index-readers-github (>=0.5.0,<0.6.0)
60
+ Requires-Dist: llama-index-readers-google (>=0.5.0,<0.6.0)
61
+ Requires-Dist: llama-index-readers-microsoft-onedrive (>=0.3.0,<0.4.0)
62
+ Requires-Dist: llama-index-readers-twitter (>=0.3.0,<0.4.0)
63
+ Requires-Dist: llama-index-readers-web (>=0.3.3,<0.4.0)
64
+ Requires-Dist: llama-index-vector-stores-chroma (>=0.4.1,<0.5.0)
65
+ Requires-Dist: llama-index-vector-stores-elasticsearch (>=0.4.0,<0.5.0)
66
+ Requires-Dist: llama-index-vector-stores-pinecone (>=0.4.2,<0.5.0)
67
+ Requires-Dist: llama-index-vector-stores-redis (>=0.4.0,<0.5.0)
68
+ Requires-Dist: mss (>=9.0.2,<10.0.0)
49
69
  Requires-Dist: nbconvert (>=7.16.1,<8.0.0)
50
- Requires-Dist: openai (>=1.12.0,<2.0.0)
51
- Requires-Dist: opencv-python (>=4.8.1.78,<5.0.0.0)
70
+ Requires-Dist: openai (>=1.55.1,<1.60.0)
71
+ Requires-Dist: opencv-python (>=4.9.0.80,<5.0.0.0)
52
72
  Requires-Dist: packaging (>=23.2,<24.0)
53
- Requires-Dist: pandas (>=2.1.4,<3.0.0)
73
+ Requires-Dist: pandas (>=2.2.0,<3.0.0)
54
74
  Requires-Dist: pillow (>=10.2.0,<11.0.0)
55
75
  Requires-Dist: pinecone-client (>=3.1.0,<4.0.0)
56
76
  Requires-Dist: pydub (>=0.25.1,<0.26.0)
57
77
  Requires-Dist: pygame (>=2.5.2,<3.0.0)
58
- Requires-Dist: pypdf (>=4.0.2,<5.0.0)
78
+ Requires-Dist: pynput (>=1.7.7,<2.0.0)
79
+ Requires-Dist: pypdf (>=5.1.0,<6.0.0)
59
80
  Requires-Dist: pyserial (>=3.5,<4.0)
81
+ Requires-Dist: python-markdown-math (>=0.8,<0.9)
60
82
  Requires-Dist: qt-material (>=2.14,<3.0)
61
83
  Requires-Dist: redis (>=5.0.1,<6.0.0)
62
84
  Requires-Dist: show-in-file-manager (>=1.1.4,<2.0.0)
63
- Requires-Dist: tiktoken (>=0.5.2,<0.6.0)
85
+ Requires-Dist: tiktoken (>=0.7.0,<0.8.0)
64
86
  Requires-Dist: wikipedia (>=1.4.0,<2.0.0)
65
87
  Requires-Dist: youtube-transcript-api (>=0.6.2,<0.7.0)
66
88
  Project-URL: Documentation, https://pygpt.readthedocs.io/
@@ -71,33 +93,35 @@ Description-Content-Type: text/markdown
71
93
 
72
94
  [![pygpt](https://snapcraft.io/pygpt/badge.svg)](https://snapcraft.io/pygpt)
73
95
 
74
- Release: **2.1.37** | build: **2024.03.19** | Python: **>=3.10, <3.12**
96
+ Release: **2.4.48** | build: **2025.01.16** | Python: **>=3.10, <3.13**
75
97
 
76
- Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
77
-
78
- Snap Store: https://snapcraft.io/pygpt | PyPi: https://pypi.org/project/pygpt-net
79
-
80
- Compiled version for Linux (`tar.gz`) and Windows 10/11 (`msi`) 64-bit: https://pygpt.net/#download
98
+ > Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
99
+ >
100
+ > Discord: https://pygpt.net/discord | Snap: https://snapcraft.io/pygpt | PyPi: https://pypi.org/project/pygpt-net
101
+ >
102
+ > Compiled version for Linux (`zip`) and Windows 10/11 (`msi`) 64-bit: https://pygpt.net/#download
103
+ >
104
+ > ❤️ Donate: https://www.buymeacoffee.com/szczyglis | https://github.com/sponsors/szczyglis-dev
81
105
 
82
106
  ## Overview
83
107
 
84
- **PyGPT** is **all-in-one** Desktop AI Assistant that provides direct interaction with OpenAI language models, including `GPT-4`, `GPT-4 Vision`, and `GPT-3.5`, through the `OpenAI API`. The application also integrates with alternative LLMs, like those available on `HuggingFace`, by utilizing `Langchain`.
108
+ **PyGPT** is **all-in-one** Desktop AI Assistant that provides direct interaction with OpenAI language models, including `o1`, `gpt-4o`, `gpt-4`, `gpt-4 Vision`, and `gpt-3.5`, through the `OpenAI API`. By utilizing `LangChain` and `LlamaIndex`, the application also supports alternative LLMs, like those available on `HuggingFace`, locally available models (like `Llama 3`,`Mistral` or `Bielik`), `Google Gemini` and `Anthropic Claude`.
85
109
 
86
- This assistant offers multiple modes of operation such as chat, assistants, completions, and image-related tasks using `DALL-E 3` for generation and `GPT-4 Vision` for image analysis. **PyGPT** has filesystem capabilities for file I/O, can generate and run Python code, execute system commands, execute custom commands and manage file transfers. It also allows models to perform web searches with the `Google` and `Microsoft Bing`.
110
+ This assistant offers multiple modes of operation such as chat, assistants, completions, and image-related tasks using `DALL-E 3` for generation and `gpt-4 Vision` for image analysis. **PyGPT** has filesystem capabilities for file I/O, can generate and run Python code, execute system commands, execute custom commands and manage file transfers. It also allows models to perform web searches with the `Google` and `Microsoft Bing`.
87
111
 
88
112
  For audio interactions, **PyGPT** includes speech synthesis using the `Microsoft Azure`, `Google`, `Eleven Labs` and `OpenAI` Text-To-Speech services. Additionally, it features speech recognition capabilities provided by `OpenAI Whisper`, `Google` and `Bing` enabling the application to understand spoken commands and transcribe audio inputs into text. It features context memory with save and load functionality, enabling users to resume interactions from predefined points in the conversation. Prompt creation and management are streamlined through an intuitive preset system.
89
113
 
90
114
  **PyGPT**'s functionality extends through plugin support, allowing for custom enhancements. Its multi-modal capabilities make it an adaptable tool for a range of AI-assisted operations, such as text-based interactions, system automation, daily assisting, vision applications, natural language processing, code generation and image creation.
91
115
 
92
- Multiple operation modes are included, such as chat, text completion, assistant, vision, Langchain, Chat with files (via `Llama-index`), commands execution, external API calls and image generation, making **PyGPT** a multi-tool for many AI-driven tasks.
116
+ Multiple operation modes are included, such as chat, text completion, assistant, vision, LangChain, Chat with Files (via `LlamaIndex`), commands execution, external API calls and image generation, making **PyGPT** a multi-tool for many AI-driven tasks.
93
117
 
94
- **Video** (mp4, version `2.0.153`, build `2024-02-18`):
118
+ **Video** (mp4, version `2.4.35`, build `2024-11-28`):
95
119
 
96
- https://github.com/szczyglis-dev/py-gpt/assets/61396542/996db435-fea3-4836-85b5-4f93505df6c4
120
+ https://github.com/user-attachments/assets/5751a003-950f-40e7-a655-d098bbf27b0c
97
121
 
98
- **Screenshot** (version `2.0.153` build `2024-02-18`):
122
+ **Screenshot** (version `2.4.35`, build `2024-11-28`):
99
123
 
100
- ![v2_main](https://github.com/szczyglis-dev/py-gpt/assets/61396542/3a7fe49f-b6c4-4daa-b3ba-521affd5af28)
124
+ ![v2_main](https://github.com/user-attachments/assets/5d1b0da4-f8b3-437f-af07-764798315253)
101
125
 
102
126
  You can download compiled 64-bit versions for Windows and Linux here: https://pygpt.net/#download
103
127
 
@@ -105,55 +129,59 @@ You can download compiled 64-bit versions for Windows and Linux here: https://py
105
129
 
106
130
  - Desktop AI Assistant for `Linux`, `Windows` and `Mac`, written in Python.
107
131
  - Works similarly to `ChatGPT`, but locally (on a desktop computer).
108
- - 8 modes of operation: Chat, Vision, Completion, Assistant, Image generation, Langchain, Chat with files and Agent (autonomous).
109
- - Supports multiple models: `GPT-4`, `GPT-3.5`, and any model accessible through `Langchain`.
110
- - Handles and stores the full context of conversations (short-term memory).
111
- - Real-time video camera capture in Vision mode.
132
+ - 11 modes of operation: Chat, Vision, Completion, Assistant, Image generation, LangChain, Chat with Files, Chat with Audio, Experts, Autonomous Mode and Agents.
133
+ - Supports multiple models: `o1`, `GPT-4o`, `GPT-4`, `GPT-3.5`, and any model accessible through `LangChain`, `LlamaIndex` and `Ollama` such as `Llama 3`, `Mistral`, `Google Gemini`, `Anthropic Claude`, `Bielik`, etc.
134
+ - Chat with your own Files: integrated `LlamaIndex` support: chat with data such as: `txt`, `pdf`, `csv`, `html`, `md`, `docx`, `json`, `epub`, `xlsx`, `xml`, webpages, `Google`, `GitHub`, video/audio, images and other data types, or use conversation history as additional context provided to the model.
135
+ - Built-in vector databases support and automated files and data embedding.
136
+ - Included support features for individuals with disabilities: customizable keyboard shortcuts, voice control, and translation of on-screen actions into audio via speech synthesis.
137
+ - Handles and stores the full context of conversations (short and long-term memory).
112
138
  - Internet access via `Google` and `Microsoft Bing`.
113
139
  - Speech synthesis via `Microsoft Azure`, `Google`, `Eleven Labs` and `OpenAI` Text-To-Speech services.
114
- - Speech recognition via `OpenAI Whisper`, `Google`, `Google Cloud` and `Microsoft Bing`.
115
- - Image analysis via `GPT-4 Vision`.
116
- - Crontab / Task scheduler included.
117
- - Integrated `Langchain` support (you can connect to any LLM, e.g., on `HuggingFace`).
118
- - Integrated `Llama-index` support: chat with `txt`, `pdf`, `csv`, `html`, `md`, `docx`, `json`, `epub`, `xlsx`, `xml`, webpages, `Google`, `GitHub`, video/audio, images and other data types, or use conversation history as additional context provided to the model.
140
+ - Speech recognition via `OpenAI Whisper`, `Google` and `Microsoft Speech Recognition`.
141
+ - Real-time video camera capture in Vision mode.
142
+ - Image analysis via `GPT-4 Vision` and `GPT-4o`.
143
+ - Integrated `LangChain` support (you can connect to any LLM, e.g., on `HuggingFace`).
119
144
  - Integrated calendar, day notes and search in contexts by selected date.
120
- - Commands execution (via plugins: access to the local filesystem, Python code interpreter, system commands execution).
145
+ - Tools and commands execution (via plugins: access to the local filesystem, Python Code Interpreter, system commands execution, and more).
121
146
  - Custom commands creation and execution.
147
+ - Crontab / Task scheduler included.
122
148
  - Manages files and attachments with options to upload, download, and organize.
123
149
  - Context history with the capability to revert to previous contexts (long-term memory).
124
150
  - Allows you to easily manage prompts with handy editable presets.
125
151
  - Provides an intuitive operation and interface.
126
152
  - Includes a notepad.
127
153
  - Includes simple painter / drawing tool.
128
- - Includes optional Autonomous Mode (Agents).
129
154
  - Supports multiple languages.
130
- - Enables the use of all the powerful features of `GPT-4`, `GPT-4V`, and `GPT-3.5`.
131
155
  - Requires no previous knowledge of using AI models.
132
- - Simplifies image generation using `DALL-E 3` and `DALL-E 2`.
133
- - Possesses the potential to support future OpenAI models.
156
+ - Simplifies image generation using `DALL-E`.
134
157
  - Fully configurable.
135
158
  - Themes support.
159
+ - Real-time code syntax highlighting.
136
160
  - Plugins support.
137
161
  - Built-in token usage calculation.
138
- - It's open source; source code is available on `GitHub`.
162
+ - Possesses the potential to support future OpenAI models.
163
+ - **Open source**; source code is available on `GitHub`.
139
164
  - Utilizes the user's own API key.
165
+ - and many more.
140
166
 
141
167
  The application is free, open-source, and runs on PCs with `Linux`, `Windows 10`, `Windows 11` and `Mac`.
142
168
  Full Python source code is available on `GitHub`.
143
169
 
144
- **PyGPT uses the user's API key - to use the application,
145
- you must have a registered OpenAI account and your own API key.**
170
+ **PyGPT uses the user's API key - to use the GPT models,
171
+ you must have a registered OpenAI account and your own API key. Local models do not require any API keys.**
146
172
 
147
- You can also use built-it Langchain support to connect to other Large Language Models (LLMs),
173
+ You can also use built-it LangChain support to connect to other Large Language Models (LLMs),
148
174
  such as those on HuggingFace. Additional API keys may be required.
149
175
 
150
176
  # Installation
151
177
 
152
- ## Compiled versions (Linux, Windows 10 and 11)
178
+ ## Binaries (Linux, Windows 10 and 11)
153
179
 
154
- You can download compiled versions for `Linux` and `Windows` (10/11).
180
+ You can download compiled binary versions for `Linux` and `Windows` (10/11).
155
181
 
156
- Download the `.msi` or `tar.gz` for the appropriate OS from the download page at https://pygpt.net and then extract files from the archive and run the application. 64-bit only.
182
+ **PyGPT** binaries require a PC with Windows 10, 11, or Linux. Simply download the installer or the archive with the appropriate version from the download page at https://pygpt.net, extract it, or install it, and then run the application. A binary version for Mac is not available, so you must run PyGPT from PyPi or from the source code on Mac. Currently, only 64-bit binaries are available.
183
+
184
+ Linux version requires `GLIBC` >= `2.35`.
157
185
 
158
186
  ## Snap Store
159
187
 
@@ -183,6 +211,18 @@ sudo snap connect pygpt:camera
183
211
  sudo snap connect pygpt:audio-record :audio-record
184
212
  ```
185
213
 
214
+ **Connecting IPython in Docker in Snap version**:
215
+
216
+ To use IPython in the Snap version, you must connect PyGPT to the Docker daemon:
217
+
218
+ ```commandline
219
+ sudo snap connect pygpt:docker-executables docker:docker-executables
220
+ ```
221
+
222
+ ````commandline
223
+ sudo snap connect pygpt:docker docker:docker-daemon
224
+ ````
225
+
186
226
  ## PyPi (pip)
187
227
 
188
228
  The application can also be installed from `PyPi` using `pip install`:
@@ -206,11 +246,11 @@ pip install pygpt-net
206
246
  pygpt
207
247
  ```
208
248
 
209
- ## Source Code
249
+ ## Running from GitHub source code
210
250
 
211
- An alternative method is to download the source code from `GitHub` and execute the application using the Python interpreter (>=3.10, <3.12).
251
+ An alternative method is to download the source code from `GitHub` and execute the application using the Python interpreter (`>=3.10`, `<3.13`).
212
252
 
213
- ### Running from GitHub source code
253
+ ### Install with pip
214
254
 
215
255
  1. Clone git repository or download .zip file:
216
256
 
@@ -219,7 +259,7 @@ git clone https://github.com/szczyglis-dev/py-gpt.git
219
259
  cd py-gpt
220
260
  ```
221
261
 
222
- 2. Create virtual environment:
262
+ 2. Create a new virtual environment:
223
263
 
224
264
  ```commandline
225
265
  python3 -m venv venv
@@ -238,7 +278,7 @@ pip install -r requirements.txt
238
278
  python3 run.py
239
279
  ```
240
280
 
241
- **Install with Poetry**
281
+ ### Install with Poetry
242
282
 
243
283
  1. Clone git repository or download .zip file:
244
284
 
@@ -303,9 +343,17 @@ sudo apt install libasound2-data
303
343
  sudo apt install libasound2-plugins
304
344
  ```
305
345
 
346
+ **Problems with GLIBC on Linux**
347
+
348
+ If you encounter error:
349
+
350
+ ```commandline
351
+ Error loading Python lib libpython3.10.so.1.0: dlopen: /lib/x86_64-linux-gnu/libm.so.6: version GLIBC_2.35 not found (required by libpython3.10.so.1.0)
352
+ ```
353
+ when trying to run the compiled version for Linux, try updating GLIBC to version `2.35`, or use a newer operating system that has at least version `2.35` of GLIBC.
354
+
306
355
  **Access to camera in Snap version:**
307
356
 
308
- To use camera in Vision mode in Snap version you must connect the camera with:
309
357
 
310
358
  ```commandline
311
359
  sudo snap connect pygpt:camera
@@ -330,33 +378,54 @@ The absence of the installed libraries may cause display errors or completely pr
330
378
 
331
379
  It may also be necessary to add the path `C:\path\to\venv\Lib\python3.x\site-packages\PySide6` to the `PATH` variable.
332
380
 
381
+ **WebEngine/Chromium renderer and OpenGL problems**
382
+
383
+ If you have a problems with `WebEngine / Chromium` renderer you can force the legacy mode by launching the app with command line arguments:
384
+
385
+ ``` ini
386
+ python3 run.py --legacy=1
387
+ ```
388
+
389
+ and to force disable OpenGL hardware acceleration:
390
+
391
+ ``` ini
392
+ python3 run.py --disable-gpu=1
393
+ ```
394
+
395
+ You can also manualy enable legacy mode by editing config file - open the `%WORKDIR%/config.json` config file in editor and set the following options:
396
+
397
+ ``` json
398
+ "render.engine": "legacy",
399
+ "render.open_gl": false,
400
+ ```
401
+
333
402
  ## Other requirements
334
403
 
335
404
  For operation, an internet connection is needed (for API connectivity), a registered OpenAI account,
336
- and an active API key that must be input into the program.
405
+ and an active API key that must be input into the program. Local models, such as `Llama3` do not require OpenAI account and any API keys.
337
406
 
338
407
  ## Debugging and logging
339
408
 
340
- **Tip:** Go to `Debugging and Logging` section for instructions on how to log and diagnose issues in a more detailed manner.
409
+ Please go to `Debugging and Logging` section for instructions on how to log and diagnose issues in a more detailed manner.
341
410
 
342
411
 
343
412
  # Quick Start
344
413
 
345
414
  ## Setting-up OpenAI API KEY
346
415
 
416
+ **Tip:** The API key is required to work with the OpenAI API. If you wish to use custom API endpoints or local API that do not require API keys, simply enter anything into the API key field to avoid a prompt about the API key being empty.
417
+
347
418
  During the initial launch, you must configure your API key within the application.
348
419
 
349
420
  To do so, navigate to the menu:
350
421
 
351
422
  ``` ini
352
- Config -> Settings...
423
+ Config -> Settings -> API Keys
353
424
  ```
354
425
 
355
426
  and then paste the API key into the `OpenAI API KEY` field.
356
427
 
357
- ## Overview
358
-
359
- ![v2_settings](https://github.com/szczyglis-dev/py-gpt/assets/61396542/21d7e43d-858f-4bc7-a06f-ec848338e7a9)
428
+ ![v2_api_keys](https://github.com/user-attachments/assets/8564add8-364b-471d-80d5-7e99ae77e129)
360
429
 
361
430
  The API key can be obtained by registering on the OpenAI website:
362
431
 
@@ -368,126 +437,196 @@ Your API keys will be available here:
368
437
 
369
438
  **Note:** The ability to use models within the application depends on the API user's access to a given model!
370
439
 
371
- # Chat, completion, assistants and vision (GPT-4, GPT-3.5, Langchain)
440
+ # Working modes
372
441
 
373
442
  ## Chat
374
443
 
375
- **+ inline Vision and Image generation**
444
+ **+ Inline Vision and Image generation**
376
445
 
377
- This mode in **PyGPT** mirrors `ChatGPT`, allowing you to chat with models such as `GPT-4`, `GPT-4 Turbo` and `GPT-3.5`. It's easy to switch models whenever you want. It works by using the `ChatCompletion API`.
446
+ This mode in **PyGPT** mirrors `ChatGPT`, allowing you to chat with models such as `o1`, `GPT-4`, `GPT-4o` and `GPT-3.5`. It works by using the `ChatCompletion` OpenAI API.
378
447
 
379
- The main part of the interface is a chat window where conversations appear. Right below that is where you type your messages. On the right side of the screen, there's a section to set up or change your system prompts. You can also save these setups as presets to quickly switch between different models or tasks.
448
+ **Tip: This mode directly uses the OpenAI API. If you want to use models other than GPT (such as Gemini, Claude, or Llama3), use `Chat with Files` mode.**
380
449
 
381
- Above where you type your messages, the interface shows you the number of tokens your message will use up as you type it this helps to keep track of usage. There's also a feature to upload files in this area. Go to the `Files` tab to manage your uploads or add attachments to send to the OpenAI API (but this makes effect only in `Assisant` and `Vision` modes).
450
+ The main part of the interface is a chat window where you see your conversations. Below it is a message box for typing. On the right side, you can set up or change the model and system prompt. You can also save these settings as presets to easily switch between models or tasks.
382
451
 
383
- ![v2_mode_chat](https://github.com/szczyglis-dev/py-gpt/assets/61396542/931a07f3-9fd5-40b3-a446-1540d2587899)
452
+ Above where you type your messages, the interface shows you the number of tokens your message will use up as you type it – this helps to keep track of usage. There is also a feature to attach and upload files in this area. Go to the `Files and Attachments` section for more information on how to use attachments.
384
453
 
385
- **Vision:** If you want to send photos or image from camera to analysis you must enable plugin **GPT-4 Vision Inline** in the Plugins menu.
386
- Plugin allows you to send photos or image from camera to analysis in any Chat mode:
454
+ ![v2_mode_chat](https://github.com/user-attachments/assets/ed9a0290-1dcc-42e7-9585-078ad06f2e28)
387
455
 
388
- ![v3_vision_plugins](https://github.com/szczyglis-dev/py-gpt/assets/61396542/104b0a80-7cf8-4a02-aa74-27e89ad2e409)
456
+ **Vision:** If you want to send photos from your disk or images from your camera for analysis, and the selected model does not support Vision, you must enable the `GPT-4 Vision (inline)` plugin in the Plugins menu. This plugin allows you to send photos or images from your camera for analysis in any Chat mode.
457
+
458
+ ![v3_vision_plugins](https://github.com/user-attachments/assets/7d16f5f3-71b0-4c87-8f52-77b42ac9ded8)
389
459
 
390
460
  With this plugin, you can capture an image with your camera or attach an image and send it for analysis to discuss the photograph:
391
461
 
392
- ![v3_vision_chat](https://github.com/szczyglis-dev/py-gpt/assets/61396542/93d3928c-f86a-4313-b645-6277c26a39b9)
462
+ ![v3_vision_chat](https://github.com/user-attachments/assets/928d1aed-2689-44e1-b32a-68f02f83fb55)
393
463
 
394
- **Image generation:** If you want to generate images (using DALL-E) directly in chat you must enable plugin **DALL-E 3 Inline** in the Plugins menu.
464
+ **Image generation:** If you want to generate images (using DALL-E) directly in chat you must enable plugin `DALL-E 3 (inline)` in the Plugins menu.
395
465
  Plugin allows you to generate images in Chat mode:
396
466
 
397
- ![v3_img_chat](https://github.com/szczyglis-dev/py-gpt/assets/61396542/52715d3e-725b-4e8c-b62d-669bd5da595d)
467
+ ![v3_img_chat](https://github.com/user-attachments/assets/1af65452-1ed1-43ec-8d78-21b0e61f0ec3)
468
+
469
+
470
+ ## Chat with Audio
471
+
472
+ 2024-11-26: currently in beta.
473
+
474
+ This mode works like the Chat mode but with native support for audio input and output using a multimodal model - `gpt-4o-audio`. In this mode, audio input and output are directed to and from the model directly, without the use of external plugins. This enables faster and better audio communication.
475
+
476
+ More info: https://platform.openai.com/docs/guides/audio/quickstart
477
+
478
+ Currently, in beta. Tool and function calls are not enabled in this mode.
479
+
480
+ **INFO:** The execution of commands and tools in this mode is temporarily unavailable.
398
481
 
399
482
  ## Completion
400
483
 
401
- This mode provides in-depth access to a broader range of capabilities offered by Large Language Models (LLMs). While it maintains a chat-like interface for user interaction, it introduces additional settings and functional richness beyond typical chat exchanges. Users can leverage this mode to prompt models for complex text completions, role-play dialogues between different characters, perform text analysis, and execute a variety of other sophisticated tasks. It supports any model provided by the OpenAI API as well as other models through `Langchain`.
484
+ An older mode of operation that allows working in the standard text completion mode. However, it allows for a bit more flexibility with the text by enabling you to initiate the entire discussion in any way you like.
402
485
 
403
486
  Similar to chat mode, on the right-hand side of the interface, there are convenient presets. These allow you to fine-tune instructions and swiftly transition between varied configurations and pre-made prompt templates.
404
487
 
405
488
  Additionally, this mode offers options for labeling the AI and the user, making it possible to simulate dialogues between specific characters - for example, you could create a conversation between Batman and the Joker, as predefined in the prompt. This feature presents a range of creative possibilities for setting up different conversational scenarios in an engaging and exploratory manner.
406
489
 
407
- ![v2_mode_completion](https://github.com/szczyglis-dev/py-gpt/assets/61396542/56e45c45-067c-4d63-9f41-f26dbbf08660)
408
-
409
490
  From version `2.0.107` the `davinci` models are deprecated and has been replaced with `gpt-3.5-turbo-instruct` model in Completion mode.
410
491
 
411
- ## Assistants
492
+ ## Image generation (DALL-E)
412
493
 
413
- This mode uses the new OpenAI's **Assistants API**.
494
+ ### DALL-E 3
414
495
 
415
- This mode expands on the basic chat functionality by including additional external tools like a `Code Interpreter` for executing code, `Retrieval Files` for accessing files, and custom `Functions` for enhanced interaction and integration with other APIs or services. In this mode, you can easily upload and download files. **PyGPT** streamlines file management, enabling you to quickly upload documents and manage files created by the model.
496
+ **PyGPT** enables quick and easy image creation with `DALL-E 3`.
497
+ The older model version, `DALL-E 2`, is also accessible. Generating images is akin to a chat conversation - a user's prompt triggers the generation, followed by downloading, saving to the computer,
498
+ and displaying the image onscreen. You can send raw prompt to `DALL-E` in `Image generation` mode or ask the model for the best prompt.
416
499
 
417
- Setting up new assistants is simple - a single click is all it takes, and they instantly sync with the `OpenAI API`. Importing assistants you've previously created with OpenAI into **PyGPT** is also a seamless process.
500
+ ![v3_img](https://github.com/user-attachments/assets/d7521cd1-3162-4425-89df-f7a43881574f)
418
501
 
419
- ![v2_mode_assistant](https://github.com/szczyglis-dev/py-gpt/assets/61396542/e0c2c248-82c4-41d2-a0f5-5fa595911745)
502
+ Image generation using DALL-E is available in every mode via plugin `DALL-E 3 Image Generation (inline)`. Just ask any model, in any mode, like e.g. GPT-4 to generate an image and it will do it inline, without need to mode change.
420
503
 
421
- In Assistant mode you are allowed to storage your files (per Assistant) and manage them easily from app:
504
+ If you want to generate images (using DALL-E) directly in chat you must enable plugin **DALL-E 3 Inline** in the Plugins menu.
505
+ Plugin allows you to generate images in Chat mode:
422
506
 
423
- ![v2_mode_assistant_upload](https://github.com/szczyglis-dev/py-gpt/assets/61396542/0a25c34d-e989-4d00-b049-6acf8c271606)
507
+ ![v3_img_chat](https://github.com/user-attachments/assets/1af65452-1ed1-43ec-8d78-21b0e61f0ec3)
508
+
509
+ ### Multiple variants
510
+
511
+ You can generate up to **4 different variants** (DALL-E 2) for a given prompt in one session. DALL-E 3 allows one image.
512
+ To select the desired number of variants to create, use the slider located in the right-hand corner at
513
+ the bottom of the screen. This replaces the conversation temperature slider when you switch to image generation mode.
514
+
515
+ ### Raw mode
516
+
517
+ There is an option for switching prompt generation mode.
518
+
519
+ If **Raw Mode** is enabled, DALL-E will receive the prompt exactly as you have provided it.
520
+ If **Raw Mode** is disabled, GPT will generate the best prompt for you based on your instructions.
521
+
522
+ ![v2_dalle2](https://github.com/szczyglis-dev/py-gpt/assets/61396542/e1c30292-8ed0-4346-8b85-6d7a02d65fb6)
523
+
524
+ ### Image storage
525
+
526
+ Once you've generated an image, you can easily save it anywhere on your disk by right-clicking on it.
527
+ You also have the options to delete it or view it in full size in your web browser.
528
+
529
+ **Tip:** Use presets to save your prepared prompts.
530
+ This lets you quickly use them again for generating new images later on.
531
+
532
+ The app keeps a history of all your prompts, allowing you to revisit any session and reuse previous
533
+ prompts for creating new images.
534
+
535
+ Images are stored in ``img`` directory in **PyGPT** user data folder.
424
536
 
425
- Please note that token usage calculation is unavailable in this mode. Nonetheless, file (attachment)
426
- uploads are supported. Simply navigate to the `Files` tab to effortlessly manage files and attachments which
427
- can be sent to the OpenAI API.
428
537
 
429
538
  ## Vision (GPT-4 Vision)
430
539
 
431
- This mode enables image analysis using the `GPT-4 Vision` model. Functioning much like the chat mode,
540
+ This mode enables image analysis using the `gpt-4o` and `gpt-4-vision` models. Functioning much like the chat mode,
432
541
  it also allows you to upload images or provide URLs to images. The vision feature can analyze both local
433
542
  images and those found online.
434
543
 
435
- **From version 2.0.68** - Vision is integrated into any chat mode via plugin `GPT-4 Vision (inline)`. Just enable the plugin and use Vision in standard modes.
436
-
437
- **From version 2.0.14** - Vision mode also includes real-time video capture from camera. To enable capture check the option `Camera` on the right-bottom corner. It will enable real-time capturing from your camera. To capture image from camera and append it to chat just click on video at left side. You can also enable `Auto capture` - image will be captured and appended to chat message every time you send message.
544
+ Vision is also integrated into any chat mode via plugin `GPT-4 Vision (inline)`. Just enable the plugin and use Vision in other work modes, such as Chat or Chat with Files.
438
545
 
439
- ![v2_capture_enable](https://github.com/szczyglis-dev/py-gpt/assets/61396542/c40ce0b4-57c8-4643-9982-25d15e68377e)
546
+ Vision mode also includes real-time video capture from camera. To capture image from camera and append it to chat just click on video at left side. You can also enable `Auto capture` - image will be captured and appended to chat message every time you send message.
440
547
 
441
548
  **1) Video camera real-time image capture**
442
549
 
443
- ![v2_capture1](https://github.com/szczyglis-dev/py-gpt/assets/61396542/d6d26a81-c559-470f-ba28-8d2d836dc138)
550
+ ![v2_capture1](https://github.com/szczyglis-dev/py-gpt/assets/61396542/477bb7fa-4639-42bb-8466-937e88e4a835)
444
551
 
445
- ![v3_vision_chat](https://github.com/szczyglis-dev/py-gpt/assets/61396542/93d3928c-f86a-4313-b645-6277c26a39b9)
552
+ ![v3_vision_chat](https://github.com/user-attachments/assets/928d1aed-2689-44e1-b32a-68f02f83fb55)
446
553
 
447
554
  **2) you can also provide an image URL**
448
555
 
449
- ![v2_mode_vision](https://github.com/szczyglis-dev/py-gpt/assets/61396542/6c8bbec7-6f67-46d9-bb5f-e833c015b39c)
556
+ ![v2_mode_vision](https://github.com/szczyglis-dev/py-gpt/assets/61396542/d1b68225-bf7f-4aa5-9562-b973211b57d7)
450
557
 
451
558
  **3) or you can just upload your local images or use the inline Vision in the standard chat mode:**
452
559
 
453
- ![v2_mode_vision_upload](https://github.com/szczyglis-dev/py-gpt/assets/61396542/68d26c32-9c7e-4068-b7d2-6c00e27a1d80)
560
+ ![v2_mode_vision_upload](https://github.com/szczyglis-dev/py-gpt/assets/61396542/7885d7d0-072e-4053-a81b-6374711fd348)
454
561
 
455
- **Tip:** When using `Vision (inline)` by utilizing a plugin in standard mode, such as `Chat` (not `Vision` mode), the `+ Vision` special checkbox will appear at the bottom of the Chat window. It will be automatically enabled any time you provide content for analysis (like an uploaded photo). When the checkbox is enabled, the vision model is used. If you wish to exit the vision model after image analysis, simply uncheck the checkbox. It will activate again automatically when the next image content for analysis is provided.
562
+ **Tip:** When using `Vision (inline)` by utilizing a plugin in standard mode, such as `Chat` (not `Vision` mode), the `+ Vision` label will appear at the bottom of the Chat window.
563
+
564
+ ## Assistants
565
+
566
+ This mode uses the OpenAI's **Assistants API**.
567
+
568
+ This mode expands on the basic chat functionality by including additional external tools like a `Code Interpreter` for executing code, `Retrieval Files` for accessing files, and custom `Functions` for enhanced interaction and integration with other APIs or services. In this mode, you can easily upload and download files. **PyGPT** streamlines file management, enabling you to quickly upload documents and manage files created by the model.
569
+
570
+ Setting up new assistants is simple - a single click is all it takes, and they instantly sync with the `OpenAI API`. Importing assistants you've previously created with OpenAI into **PyGPT** is also a seamless process.
571
+
572
+ ![v2_mode_assistant](https://github.com/user-attachments/assets/726d31f8-9120-47af-9811-269c1178f506)
573
+
574
+ In Assistant mode you are allowed to storage your files in remote vector store (per Assistant) and manage them easily from app:
575
+
576
+ ![v2_mode_assistant_upload](https://github.com/szczyglis-dev/py-gpt/assets/61396542/b2c835ea-2816-4b85-bb6f-e08874e758f7)
577
+
578
+ Please note that token usage calculation is unavailable in this mode. Nonetheless, file (attachment)
579
+ uploads are supported. Simply navigate to the `Files` tab to effortlessly manage files and attachments which
580
+ can be sent to the OpenAI API.
581
+
582
+ ### Vector stores (via Assistants API)
583
+
584
+ Assistant mode supports the use of external vector databases offered by the OpenAI API. This feature allows you to store your files in a database and then search them using the Assistant's API. Each assistant can be linked to one vector database—if a database is linked, all files uploaded in this mode will be stored in the linked vector database. If an assistant does not have a linked vector database, a temporary database is automatically created during the file upload, which is accessible only in the current thread. Files from temporary databases are automatically deleted after 7 days.
585
+
586
+ To enable the use of vector stores, enable the `Chat with Files` checkbox in the Assistant settings. This enables the `File search` tool in Assistants API.
587
+
588
+ To manage external vector databases, click the DB icon next to the vector database selection list in the Assistant creation and editing window (screen below). In this management window, you can create a new vector database, edit an existing one, or import a list of all existing databases from the OpenAI server:
589
+
590
+ ![v2_assistant_stores](https://github.com/szczyglis-dev/py-gpt/assets/61396542/2f605326-5bf5-4c82-8dfd-cb1c0edf6724)
591
+
592
+ You can define, using `Expire days`, how long files should be automatically kept in the database before deletion (as storing files on OpenAI incurs costs). If the value is set to 0, files will not be automatically deleted.
593
+
594
+ The vector database in use will be displayed in the list of uploaded files, on the field to the right—if a file is stored in a database, the name of the database will be displayed there; if not, information will be shown indicating that the file is only accessible within the thread:
456
595
 
457
- ## Langchain
596
+ ![v2_assistant_stores_upload](https://github.com/szczyglis-dev/py-gpt/assets/61396542/8f13c2eb-f961-4eae-b08b-0b4937f06ca9)
458
597
 
459
- This mode enables you to work with models that are supported by `Langchain`. The Langchain support is integrated
598
+ ## LangChain
599
+
600
+ This mode enables you to work with models that are supported by `LangChain`. The LangChain support is integrated
460
601
  into the application, allowing you to interact with any LLM by simply supplying a configuration
461
602
  file for the specific model. You can add as many models as you like; just list them in the configuration
462
603
  file named `models.json`.
463
604
 
464
- Available LLMs providers supported by **PyGPT**:
605
+ Available LLMs providers supported by **PyGPT**, in `LangChain` and `Chat with Files (LlamaIndex)` modes:
465
606
 
466
607
  ```
467
608
  - OpenAI
468
609
  - Azure OpenAI
610
+ - Google (Gemini, etc.)
469
611
  - HuggingFace
470
612
  - Anthropic
471
- - Llama 2
472
- - Ollama
613
+ - Ollama (Llama3, Mistral, etc.)
473
614
  ```
474
615
 
475
- ![v2_mode_langchain](https://github.com/szczyglis-dev/py-gpt/assets/61396542/85e95c38-86db-4c75-b994-ba42521c278b)
476
-
477
616
  You have the ability to add custom model wrappers for models that are not available by default in **PyGPT**.
478
617
  To integrate a new model, you can create your own wrapper and register it with the application.
479
- Detailed instructions for this process are provided in the section titled `Managing models / Adding models via Langchain`.
618
+ Detailed instructions for this process are provided in the section titled `Managing models / Adding models via LangChain`.
480
619
 
481
- ## Chat with files (Llama-index)
620
+ ## Chat with Files (LlamaIndex)
482
621
 
483
622
  This mode enables chat interaction with your documents and entire context history through conversation.
484
- It seamlessly incorporates `Llama-index` into the chat interface, allowing for immediate querying of your indexed documents.
623
+ It seamlessly incorporates `LlamaIndex` into the chat interface, allowing for immediate querying of your indexed documents.
485
624
 
486
625
  **Querying single files**
487
626
 
488
- From version `2.1.8`, you can also query individual files "on the fly" using the `query_file` command from the `Files I/O` plugin. This allows you to query any file by simply asking a question about that file. A temporary index will be created in memory for the file being queried, and an answer will be returned from it. From version `2.1.9` similar command is available for querying web and external content: `Directly query web content with Llama-index`.
627
+ You can also query individual files "on the fly" using the `query_file` command from the `Files I/O` plugin. This allows you to query any file by simply asking a question about that file. A temporary index will be created in memory for the file being queried, and an answer will be returned from it. From version `2.1.9` similar command is available for querying web and external content: `Directly query web content with LlamaIndex`.
489
628
 
490
- For example:
629
+ **For example:**
491
630
 
492
631
  If you have a file: `data/my_cars.txt` with content `My car is red.`
493
632
 
@@ -495,9 +634,9 @@ You can ask for: `Query the file my_cars.txt about what color my car is.`
495
634
 
496
635
  And you will receive the response: `Red`.
497
636
 
498
- Note: this command indexes the file only for the current query and does not persist it in the database. To store queried files also in the standard index you must enable the option "Auto-index readed files" in plugin settings. Remember to enable "Execute commands" checkbox to allow usage of query commands.
637
+ Note: this command indexes the file only for the current query and does not persist it in the database. To store queried files also in the standard index you must enable the option `Auto-index readed files` in plugin settings. Remember to enable `+ Tools` checkbox to allow usage of tools and commands from plugins.
499
638
 
500
- **Using Chat with files mode**
639
+ **Using Chat with Files mode**
501
640
 
502
641
  In this mode, you are querying the whole index, stored in a vector store database.
503
642
  To start, you need to index (embed) the files you want to use as additional context.
@@ -511,13 +650,13 @@ For a visualization from OpenAI's page, see this picture:
511
650
 
512
651
  Source: https://cdn.openai.com/new-and-improved-embedding-model/draft-20221214a/vectors-3.svg
513
652
 
514
- To index your files, simply copy or upload them into the `data` directory and initiate indexing (embedding) by clicking the `Index all` button, or right-click on a file and select `Index...`. Additionally, you have the option to utilize data from indexed files in any Chat mode by activating the `Chat with files (Llama-index, inline)` plugin.
653
+ To index your files, simply copy or upload them into the `data` directory and initiate indexing (embedding) by clicking the `Index all` button, or right-click on a file and select `Index...`. Additionally, you have the option to utilize data from indexed files in any Chat mode by activating the `Chat with Files (LlamaIndex, inline)` plugin.
515
654
 
516
655
  ![v2_idx1](https://github.com/szczyglis-dev/py-gpt/assets/61396542/c3dfbc89-cbfe-4ae3-b7e7-821401d755cd)
517
656
 
518
657
  After the file(s) are indexed (embedded in vector store), you can use context from them in chat mode:
519
658
 
520
- ![v2_idx2](https://github.com/szczyglis-dev/py-gpt/assets/61396542/29c89de9-ba3c-49ca-97b3-e6397fd648ad)
659
+ ![v2_idx2](https://github.com/szczyglis-dev/py-gpt/assets/61396542/70c9ab66-82d9-4f61-81ed-268743bfa6b4)
521
660
 
522
661
  Built-in file loaders:
523
662
 
@@ -557,20 +696,19 @@ Built-in file loaders:
557
696
  - Webpages (crawling any webpage content)
558
697
  - YouTube (transcriptions)
559
698
 
560
- You can configure data loaders in `Settings / Llama-index / Data Loaders` by providing list of keyword arguments for specified loaders.
699
+ You can configure data loaders in `Settings / Indexes (LlamaIndex) / Data Loaders` by providing list of keyword arguments for specified loaders.
561
700
  You can also develop and provide your own custom loader and register it within the application.
562
701
 
563
- **From version `2.0.100` Llama-index is also integrated with context database - you can use data from database (your context history) as additional context in discussion.
564
- Options for indexing existing context history or enabling real-time indexing new ones (from database) are available in `Settings / Llama-index` section.**
702
+ LlamaIndex is also integrated with context database - you can use data from database (your context history) as additional context in discussion.
703
+ Options for indexing existing context history or enabling real-time indexing new ones (from database) are available in `Settings / Indexes (LlamaIndex)` section.
565
704
 
566
705
  **WARNING:** remember that when indexing content, API calls to the embedding model are used. Each indexing consumes additional tokens. Always control the number of tokens used on the OpenAI page.
567
706
 
568
- **Tip:** when using `Chat with files` you are using additional context from db data and files indexed from `data` directory, not the files sending via `Attachments` tab.
569
- Attachments tab in `Chat with files` mode can be used to provide images to `Vision (inline)` plugin only.
707
+ **Tip:** Using the Chat with Files mode, you have default access to files manually indexed from the /data directory. However, you can use additional context by attaching a file - such additional context from the attachment does not land in the main index, but only in a temporary one, available only for the given conversation.
570
708
 
571
- **Token limit:** When you use `Chat with files` in non-query mode, Llama-index adds extra context to the system prompt. If you use a plugins (which also adds more instructions to system prompt), you might go over the maximum number of tokens allowed. If you get a warning that says you've used too many tokens, turn off plugins you're not using or turn off the "Execute commands" option to reduce the number of tokens used by the system prompt.
709
+ **Token limit:** When you use `Chat with Files` in non-query mode, LlamaIndex adds extra context to the system prompt. If you use a plugins (which also adds more instructions to system prompt), you might go over the maximum number of tokens allowed. If you get a warning that says you've used too many tokens, turn off plugins you're not using or turn off the "+ Tools" option to reduce the number of tokens used by the system prompt.
572
710
 
573
- **Available vector stores** (provided by `Llama-index`):
711
+ **Available vector stores** (provided by `LlamaIndex`):
574
712
 
575
713
  ```
576
714
  - ChromaVectorStore
@@ -580,722 +718,473 @@ Attachments tab in `Chat with files` mode can be used to provide images to `Visi
580
718
  - SimpleVectorStore
581
719
  ```
582
720
 
583
- You can configure selected vector store by providing config options like `api_key`, etc. in `Settings -> Llama-index` window.
584
- Arguments provided here (on list: `Vector Store (**kwargs)` in `Advanced settings` will be passed to selected vector store provider.
585
- You can check keyword arguments needed by selected provider on Llama-index API reference page:
721
+ You can configure selected vector store by providing config options like `api_key`, etc. in `Settings -> LlamaIndex` window. See the section: `Configuration / Vector stores` for configuration reference.
586
722
 
587
- https://docs.llamaindex.ai/en/stable/api_reference/storage/vector_store.html
588
723
 
589
- Which keyword arguments are passed to providers?
724
+ **Configuring data loaders**
590
725
 
591
- For `ChromaVectorStore` and `SimpleVectorStore` all arguments are set by PyGPT and passed internally (you do not need to configure anything).
592
- For other providers you can provide these arguments:
726
+ In the `Settings -> LlamaIndex -> Data loaders` section you can define the additional keyword arguments to pass into data loader instance. See the section: `Configuration / Data Loaders` for configuration reference.
593
727
 
594
- **ElasticsearchStore**
595
728
 
596
- Keyword arguments for ElasticsearchStore(`**kwargs`):
729
+ ## Agent (LlamaIndex)
597
730
 
598
- - `index_name` (default: current index ID, already set, not required)
599
- - any other keyword arguments provided on list
731
+ **Currently in beta version** -- introduced in `2.4.10` (2024-11-14)
600
732
 
601
- **PinecodeVectorStore**
733
+ Mode that allows the use of agents offered by `LlamaIndex`.
602
734
 
603
- Keyword arguments for Pinecone(`**kwargs`):
735
+ Includes built-in agents:
604
736
 
605
- - `api_key`
606
- - index_name (default: current index ID, already set, not required)
737
+ - OpenAI
738
+ - ReAct
739
+ - Structured Planner (sub-tasks)
607
740
 
608
- **RedisVectorStore**
741
+ In the future, the list of built-in agents will be expanded.
609
742
 
610
- Keyword arguments for RedisVectorStore(`**kwargs`):
743
+ You can also create your own agent by creating a new provider that inherits from `pygpt_net.provider.agents.base`.
611
744
 
612
- - `index_name` (default: current index ID, already set, not required)
613
- - any other keyword arguments provided on list
745
+ **Tools and Plugins**
614
746
 
615
- You can extend list of available providers by creating custom provider and registering it on app launch.
747
+ In this mode, all commands from active plugins are available (commands from plugins are automatically converted into tools for the agent on-the-fly).
616
748
 
617
- By default, you are using chat-based mode when using `Chat with files`.
618
- If you want to only query index (without chat) you can enable `Query index only (without chat)` option.
749
+ **RAG - using indexes**
619
750
 
620
- ### Adding custom vector stores and data loaders
751
+ If an index is selected in the agent preset, a tool for reading data from the index is automatically added to the agent, creating a RAG automatically.
621
752
 
622
- You can create a custom vector store provider or data loader for your data and develop a custom launcher for the application. To register your custom vector store provider or data loader, simply register it by passing the vector store provider instance to `vector_stores` keyword argument and loader instance in the `loaders` keyword argument:
753
+ Multimodality is currently unavailable, only text is supported. Vision support will be added in the future.
623
754
 
624
- ```python
755
+ **Loop / Evaluate Mode**
625
756
 
626
- # custom_launcher.py
757
+ You can run the agent in autonomous mode, in a loop, and with evaluation of the current output. When you enable the `Loop / Evaluate` checkbox, after the final response is given, the quality of the answer will be rated on a percentage scale of `0% to 100%` by another agent. If the response receives a score lower than the one expected (set using a slider at the bottom right corner of the screen, with a default value `75%`), a prompt will be sent to the agent requesting improvements and enhancements to the response.
627
758
 
628
- from pygpt_net.app import run
629
- from plugins import CustomPlugin, OtherCustomPlugin
630
- from llms import CustomLLM
631
- from vector_stores import CustomVectorStore
632
- from loaders import CustomLoader
759
+ Setting the expected (required) score to `0%` means that the response will be evaluated every time the agent produces a result, and it will always be prompted to self-improve its answer. This way, you can put the agent in an autonomous loop, where it will continue to operate until it succeeds.
633
760
 
634
- plugins = [
635
- CustomPlugin(),
636
- OtherCustomPlugin(),
637
- ]
638
- llms = [
639
- CustomLLM(),
640
- ]
641
- vector_stores = [
642
- CustomVectorStore(),
643
- ]
644
- loaders = [
645
- CustomLoader(),
646
- ]
761
+ You can set the limit of steps in such a loop by going to `Settings -> Agents and experts -> LlamaIndex agents -> Max evaluation steps `. The default value is `3`, meaning the agent will only make three attempts to improve or correct its answer. If you set the limit to zero, there will be no limit, and the agent can operate in this mode indefinitely (watch out for tokens!).
647
762
 
648
- run(
649
- plugins=plugins,
650
- llms=llms,
651
- vector_stores=vector_stores, # <--- list with custom vector store providers
652
- loaders=loaders # <--- list with custom data loaders
653
- )
654
- ```
655
- The vector store provider must be an instance of `pygpt_net.provider.vector_stores.base.BaseStore`.
656
- You can review the code of the built-in providers in `pygpt_net.provider.vector_stores` and use them as examples when creating a custom provider.
763
+ You can change the prompt used for evaluating the response in `Settings -> Prompts -> Agent: evaluation prompt in loop`. Here, you can adjust it to suit your needs, for example, by defining more or less critical feedback for the responses received.
657
764
 
658
- The data loader must be an instance of `pygpt_net.provider.loaders.base.BaseLoader`.
659
- You can review the code of the built-in loaders in `pygpt_net.provider.loaders` and use them as examples when creating a custom loader.
765
+ ## Agent (Autonomous)
660
766
 
661
- **Configuring data loaders**
767
+ This is an older version of the Agent mode, still available as legacy. However, it is recommended to use the newer mode: `Agent (LlamaIndex)`.
662
768
 
663
- In the `Settings -> Llama-index -> Data loaders` section you can define the additional keyword arguments to pass into data loader instance.
769
+ **WARNING: Please use this mode with caution** - autonomous mode, when connected with other plugins, may produce unexpected results!
664
770
 
665
- In most cases, an internal Llama-index loaders are used internally.
666
- You can check these base loaders e.g. here:
771
+ The mode activates autonomous mode, where AI begins a conversation with itself.
772
+ You can set this loop to run for any number of iterations. Throughout this sequence, the model will engage
773
+ in self-dialogue, answering his own questions and comments, in order to find the best possible solution, subjecting previously generated steps to criticism.
667
774
 
668
- File: https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/readers/llama-index-readers-file/llama_index/readers/file
775
+ **WARNING:** Setting the number of run steps (iterations) to `0` activates an infinite loop which can generate a large number of requests and cause very high token consumption, so use this option with caution! Confirmation will be displayed every time you run the infinite loop.
669
776
 
670
- Web: https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/readers/llama-index-readers-web
777
+ This mode is similar to `Auto-GPT` - it can be used to create more advanced inferences and to solve problems by breaking them down into subtasks that the model will autonomously perform one after another until the goal is achieved.
671
778
 
672
- **Tip:** to index an external data or data from the Web just ask for it, by using `Command: Web Search` plugin, e.g. you can ask the model with `Please index the youtube video: URL to video`, etc. Data loader for a specified content will be choosen automatically.
779
+ You can create presets with custom instructions for multiple agents, incorporating various workflows, instructions, and goals to achieve.
673
780
 
674
- Allowed additional keyword arguments for built-in data loaders (files):
781
+ All plugins are available for agents, so you can enable features such as file access, command execution, web searching, image generation, vision analysis, etc., for your agents. Connecting agents with plugins can create a fully autonomous, self-sufficient system. All currently enabled plugins are automatically available to the Agent.
675
782
 
676
- **CSV Files** (file_csv)
783
+ When the `Auto-stop` option is enabled, the agent will attempt to stop once the goal has been reached.
677
784
 
678
- - `concat_rows` - bool, default: `True`
679
- - `encoding` - str, default: `utf-8`
785
+ In opposition to `Auto-stop`, when the `Always continue...` option is enabled, the agent will use the "always continue" prompt to generate additional reasoning and automatically proceed to the next step, even if it appears that the task has been completed.
680
786
 
681
- **HTML Files** (file_html)
787
+ **Options**
682
788
 
683
- - `tag` - str, default: `section`
684
- - `ignore_no_id` - bool, default: `False`
789
+ The agent is essentially a **virtual** mode that internally sequences the execution of a selected underlying mode.
790
+ You can choose which internal mode the agent should use in the settings:
685
791
 
686
- **Image (vision)** (file_image_vision)
792
+ ```Settings / Agent (autonomous) / Sub-mode to use```
687
793
 
688
- This loader can operate in two modes: local model and API.
689
- If the local mode is enabled, then the local model will be used. The local mode requires a Python/PyPi version of the application and is not available in the compiled or Snap versions.
690
- If the API mode (default) is selected, then the OpenAI API and the standard vision model will be used.
794
+ Available choices include: `chat`, `completion`, `langchain`, `vision`, `llama_index` (Chat with Files).
691
795
 
692
- **Note:** Usage of API mode consumes additional tokens in OpenAI API (for `GPT-4 Vision` model)!
796
+ Default is: `chat`.
693
797
 
694
- Local mode requires `torch`, `transformers`, `sentencepiece` and `Pillow` to be installed and uses the `Salesforce/blip2-opt-2.7b` model to describing images.
798
+ If you want to use the LlamaIndex mode when running the agent, you can also specify which index `LlamaIndex` should use with the option:
695
799
 
696
- - `keep_image` - bool, default: `False`
697
- - `local_prompt` - str, default: `Question: describe what you see in this image. Answer:`
698
- - `api_prompt` - str, default: `Describe what you see in this image` - Prompt to use in API
699
- - `api_model` - str, default: `gpt-4-vision-preview` - Model to use in API
700
- - `api_tokens` - int, default: `1000` - Max output tokens in API
800
+ ```Settings / Agents and experts / Index to use```
701
801
 
702
- **IPYNB Notebook files** (file_ipynb)
802
+ ![v2_agent_settings](https://github.com/user-attachments/assets/5e4658dc-4488-415b-8be4-51bb5b45d0bd)
703
803
 
704
- - `parser_config` - dict, default: `None`
705
- - `concatenate` - bool, default: `False`
706
804
 
707
- **Markdown files** (file_md)
805
+ ## Experts (co-op, co-operation mode)
708
806
 
709
- - `remove_hyperlinks` - bool, default: `True`
710
- - `remove_images` - bool, default: `True`
807
+ **This mode is experimental.**
711
808
 
712
- **PDF documents** (file_pdf)
809
+ Expert mode allows for the creation of experts (using presets) and then consulting them during a conversation. In this mode, a primary base context is created for conducting the conversation. From within this context, the model can make requests to an expert to perform a task and return the results to the main thread. When an expert is called in the background, a separate context is created for them with their own memory. This means that each expert, during the life of one main context, also has access to their own memory via their separate, isolated context.
713
810
 
714
- - `return_full_document` - bool, default: `False`
811
+ **In simple terms - you can imagine an expert as a separate, additional instance of the model running in the background, which can be called at any moment for assistance, with its own context and memory, as well as its own specialized instructions in a given subject.**
715
812
 
716
- **Video/Audio** (file_video_audio)
813
+ Experts do not share contexts with one another, and the only point of contact between them is the main conversation thread. In this main thread, the model acts as a manager of experts, who can exchange data between them as needed.
717
814
 
718
- This loader can operate in two modes: local model and API.
719
- If the local mode is enabled, then the local `Whisper` model will be used. The local mode requires a Python/PyPi version of the application and is not available in the compiled or Snap versions.
720
- If the API mode (default) is selected, then the currently selected provider in `Audio Input` plugin will be used. If the `OpenAI Whisper` is chosen then the OpenAI API and the API Whisper model will be used.
815
+ An expert is selected based on the name in the presets; for example, naming your expert as: ID = python_expert, name = "Python programmer" will create an expert whom the model will attempt to invoke for matters related to Python programming. You can also manually request to refer to a given expert:
721
816
 
722
- **Note:** Usage of Whisper via API consumes additional tokens in OpenAI API (for `Whisper` model)!
817
+ ```bash
818
+ Call the Python expert to generate some code.
819
+ ```
723
820
 
724
- Local mode requires `torch` and `openai-whisper` to be installed and uses the `Whisper` model locally to transcribing video and audio.
821
+ Experts can be activated or deactivated - to enable or disable use RMB context menu to select the `Enable/Disable` options from the presets list. Only enabled experts are available to use in the thread.
725
822
 
726
- - `model_version` - str, default: `base` - Whisper model to use, available models: https://github.com/openai/whisper
823
+ Experts can also be used in `Agent (autonomous)` mode - by creating a new agent using a preset. Simply move the appropriate experts to the active list to automatically make them available for use by the agent.
727
824
 
728
- **XML files** (file_xml)
825
+ You can also use experts in "inline" mode - by activating the `Experts (inline)` plugin. This allows for the use of experts in any mode, such as normal chat.
729
826
 
730
- - `tree_level_split` - int, default: `0`
827
+ Expert mode, like agent mode, is a "virtual" mode - you need to select a target mode of operation for it, which can be done in the settings at `Settings / Agent (autonomous) / Sub-mode for experts`.
731
828
 
732
- Allowed additional keyword arguments for built-in data loaders (Web and external content):
829
+ You can also ask for a list of active experts at any time:
733
830
 
734
- **Bitbucket** (web_bitbucket)
831
+ ```bash
832
+ Give me a list of active experts.
833
+ ```
735
834
 
736
- - `username` - str, default: `None`
737
- - `api_key` - str, default: `None`
738
- - `extensions_to_skip` - list, default: `[]`
739
835
 
740
- **ChatGPT Retrieval** (web_chatgpt_retrieval)
836
+ # Context and memory
741
837
 
742
- - `endpoint_url` - str, default: `None`
743
- - `bearer_token` - str, default: `None`
744
- - `retries` - int, default: `None`
745
- - `batch_size` - int, default: `100`
838
+ ## Short and long-term memory
746
839
 
747
- **Google Calendar** (web_google_calendar)
840
+ **PyGPT** features a continuous chat mode that maintains a long context of the ongoing dialogue. It preserves the entire conversation history and automatically appends it to each new message (prompt) you send to the AI. Additionally, you have the flexibility to revisit past conversations whenever you choose. The application keeps a record of your chat history, allowing you to resume discussions from the exact point you stopped.
748
841
 
749
- - `credentials_path` - str, default: `credentials.json`
750
- - `token_path` - str, default: `token.json`
842
+ ## Handling multiple contexts
751
843
 
752
- **Google Docs** (web_google_docs)
844
+ On the left side of the application interface, there is a panel that displays a list of saved conversations. You can save numerous contexts and switch between them with ease. This feature allows you to revisit and continue from any point in a previous conversation. **PyGPT** automatically generates a summary for each context, akin to the way `ChatGPT` operates and gives you the option to modify these titles itself.
753
845
 
754
- - `credentials_path` - str, default: `credentials.json`
755
- - `token_path` - str, default: `token.json`
846
+ ![v2_context_list](https://github.com/user-attachments/assets/75d1eb9d-da85-422b-8b54-d5f3e95ba059)
756
847
 
757
- **Google Drive** (web_google_drive)
848
+ You can disable context support in the settings by using the following option:
758
849
 
759
- - `credentials_path` - str, default: `credentials.json`
760
- - `token_path` - str, default: `token.json`
761
- - `pydrive_creds_path` - str, default: `creds.txt`
850
+ ``` ini
851
+ Config -> Settings -> Use context
852
+ ```
762
853
 
763
- **Google Gmail** (web_google_gmail)
854
+ ## Clearing history
764
855
 
765
- - `credentials_path` - str, default: `credentials.json`
766
- - `token_path` - str, default: `token.json`
767
- - `use_iterative_parser` - bool, default: `False`
768
- - `max_results` - int, default: `10`
769
- - `results_per_page` - int, default: `None`
856
+ You can clear the entire memory (all contexts) by selecting the menu option:
770
857
 
771
- **Google Keep** (web_google_keep)
858
+ ``` ini
859
+ File -> Clear history...
860
+ ```
772
861
 
773
- - `credentials_path` - str, default: `keep_credentials.json`
862
+ ## Context storage
774
863
 
775
- **Google Sheets** (web_google_sheets)
864
+ On the application side, the context is stored in the `SQLite` database located in the working directory (`db.sqlite`).
865
+ In addition, all history is also saved to `.txt` files for easy reading.
776
866
 
777
- - `credentials_path` - str, default: `credentials.json`
778
- - `token_path` - str, default: `token.json`
867
+ Once a conversation begins, a title for the chat is generated and displayed on the list to the left. This process is similar to `ChatGPT`, where the subject of the conversation is summarized, and a title for the thread is created based on that summary. You can change the name of the thread at any time.
779
868
 
780
- **GitHub Issues** (web_github_issues)
869
+ # Files And Attachments
781
870
 
782
- - `token` - str, default: `None`
783
- - `verbose` - bool, default: `False`
871
+ ## Uploading attachments
784
872
 
785
- **GitHub Repository** (web_github_repository)
873
+ **Using Your Own Files as Additional Context in Conversations**
786
874
 
787
- - `token` - str, default: `None`
788
- - `verbose` - bool, default: `False`
789
- - `concurrent_requests` - int, default: `5`
790
- - `timeout` - int, default: `5`
791
- - `retries` - int, default: `0`
792
- - `filter_dirs_include` - list, default: `None`
793
- - `filter_dirs_exclude` - list, default: `None`
794
- - `filter_file_ext_include` - list, default: `None`
795
- - `filter_file_ext_exclude` - list, default: `None`
875
+ You can use your own files (for example, to analyze them) during any conversation. You can do this in two ways: by indexing (embedding) your files in a vector database, which makes them available all the time during a "Chat with Files" session, or by adding a file attachment (the attachment file will only be available during the conversation in which it was uploaded).
796
876
 
797
- **Microsoft OneDrive** (web_microsoft_onedrive)
877
+ **Attachments**
798
878
 
799
- - `client_id` - str, default: `None`
800
- - `client_secret` - str, default: `None`
801
- - `tenant_id` - str, default: `consumers`
879
+ **PyGPT** makes it simple for users to upload files and send them to the model for tasks like analysis, similar to attaching files in `ChatGPT`. There's a separate `Attachments` tab next to the text input area specifically for managing file uploads.
802
880
 
803
- **Sitemap (XML)** (web_sitemap)
881
+ **Tip: Attachments uploaded in group are available in all contexts in group**.
804
882
 
805
- - `html_to_text` - bool, default: `False`
806
- - `limit` - int, default: `10`
883
+ ![v2_file_input](https://github.com/user-attachments/assets/db8467b6-2d07-4e20-a795-430fc09443a7)
807
884
 
808
- **SQL Database** (web_database)
885
+ You can use attachments to provide additional context to the conversation. Uploaded files will be converted into text using loaders from LlamaIndex, and then embedded into the vector store. You can upload any file format supported by the application through LlamaIndex. Supported formats include:
809
886
 
810
- - `engine` - str, default: `None`
811
- - `uri` - str, default: `None`
812
- - `scheme` - str, default: `None`
813
- - `host` - str, default: `None`
814
- - `port` - str, default: `None`
815
- - `user` - str, default: `None`
816
- - `password` - str, default: `None`
817
- - `dbname` - str, default: `None`
887
+ Text-based types:
818
888
 
819
- **Twitter/X posts** (web_twitter)
889
+ - CSV files (csv)
890
+ - Epub files (epub)
891
+ - Excel .xlsx spreadsheets (xlsx)
892
+ - HTML files (html, htm)
893
+ - IPYNB Notebook files (ipynb)
894
+ - JSON files (json)
895
+ - Markdown files (md)
896
+ - PDF documents (pdf)
897
+ - Plain-text files (txt and etc.)
898
+ - Word .docx documents (docx)
899
+ - XML files (xml)
820
900
 
821
- - `bearer_token` - str, default: `None`
822
- - `num_tweets` - int, default: `100`
901
+ Media-types:
823
902
 
824
- ## Agent (autonomous)
903
+ - Image (using vision) (jpg, jpeg, png, gif, bmp, tiff, webp)
904
+ - Video/audio (mp4, avi, mov, mkv, webm, mp3, mpeg, mpga, m4a, wav)
825
905
 
826
- This mode is experimental.
906
+ Archives:
827
907
 
828
- **WARNING: Please use this mode with caution!** - autonomous mode, when connected with other plugins, may produce unexpected results!
908
+ - zip
909
+ - tar, tar.gz, tar.bz2
829
910
 
830
- The mode activates autonomous mode, where AI begins a conversation with itself.
831
- You can set this loop to run for any number of iterations. Throughout this sequence, the model will engage
832
- in self-dialogue, answering his own questions and comments, in order to find the best possible solution, subjecting previously generated steps to criticism.
911
+ The content from the uploaded attachments will be used in the current conversation and will be available throughout (per context). There are 3 modes available for working with additional context from attachments:
833
912
 
834
- ![v2_agent_toolbox](https://github.com/szczyglis-dev/py-gpt/assets/61396542/a0ae5d13-942e-4a18-9c53-33e7ad1886ff)
913
+ - `Full context`: Provides best results. This mode attaches the entire content of the read file to the user's prompt. This process happens in the background and may require a large number of tokens if you uploaded extensive content.
835
914
 
836
- **WARNING:** Setting the number of run steps (iterations) to `0` activates an infinite loop which can generate a large number of requests and cause very high token consumption, so use this option with caution! Confirmation will be displayed every time you run the infinite loop.
915
+ - `RAG`: The indexed attachment will only be queried in real-time using LlamaIndex. This operation does not require any additional tokens, but it may not provide access to the full content of the file 1:1.
837
916
 
838
- This mode is similar to `Auto-GPT` - it can be used to create more advanced inferences and to solve problems by breaking them down into subtasks that the model will autonomously perform one after another until the goal is achieved.
917
+ - `Summary`: When queried, an additional query will be generated in the background and executed by a separate model to summarize the content of the attachment and return the required information to the main model. You can change the model used for summarization in the settings under the `Files and attachments` section.
839
918
 
840
- You can create presets with custom instructions for multiple agents, incorporating various workflows, instructions, and goals to achieve.
919
+ In the `RAG` and `Summary` mode, you can enable an additional setting by going to `Settings -> Files and attachments -> Use history in RAG query`. This allows for better preparation of queries for RAG. When this option is turned on, the entire conversation context is considered, rather than just the user's last query. This allows for better searching of the index for additional context. In the `RAG limit` option, you can set a limit on how many recent entries in a discussion should be considered (`0 = no limit, default: 3`).
841
920
 
842
- All plugins are available for agents, so you can enable features such as file access, command execution, web searching, image generation, vision analysis, etc., for your agents. Connecting agents with plugins can create a fully autonomous, self-sufficient system. All currently enabled plugins are automatically available to the Agent.
921
+ **Important**: When using `Full context` mode, the entire content of the file is included in the prompt, which can result in high token usage each time. If you want to reduce the number of tokens used, instead use the `RAG` option, which will only query the indexed attachment in the vector database to provide additional context.
843
922
 
844
- When the `Auto-stop` option is enabled, the agent will attempt to stop once the goal has been reached.
923
+ **Images as Additional Context**
845
924
 
846
- **Options**
925
+ Files such as jpg, png, and similar images are a special case. By default, images are not used as additional context; they are analyzed in real-time using a vision model. If you want to use them as additional context instead, you must enable the "Allow images as additional context" option in the settings: `Files and attachments -> Allow images as additional context`.
847
926
 
848
- The agent is essentially a **virtual** mode that internally sequences the execution of a selected underlying mode.
849
- You can choose which internal mode the agent should use in the settings:
927
+ **Uploading larger files and auto-index**
850
928
 
851
- ```Settings / Agent (autonomous) / Sub-mode to use```
929
+ To use the `RAG` mode, the file must be indexed in the vector database. This occurs automatically at the time of upload if the `Auto-index on upload` option in the `Attachments` tab is enabled. When uploading large files, such indexing might take a while - therefore, if you are using the `Full context` option, which does not use the index, you can disable the `Auto-index` option to speed up the upload of the attachment. In this case, it will only be indexed when the `RAG` option is called for the first time, and until then, attachment will be available in the form of `Full context` and `Summary`.
852
930
 
853
- Available choices include: `chat`, `completion`, `langchain`, `vision`, `llama_index` (Chat with files).
931
+ ## Downloading files
854
932
 
855
- Default is: `chat`.
933
+ **PyGPT** enables the automatic download and saving of files created by the model. This is carried out in the background, with the files being saved to an `data` folder located within the user's working directory. To view or manage these files, users can navigate to the `Files` tab which features a file browser for this specific directory. Here, users have the interface to handle all files sent by the AI.
856
934
 
857
- If you want to use the Llama-index mode when running the agent, you can also specify which index `Llama-index` should use with the option:
935
+ This `data` directory is also where the application stores files that are generated locally by the AI, such as code files or any other data requested from the model. Users have the option to execute code directly from the stored files and read their contents, with the results fed back to the AI. This hands-off process is managed by the built-in plugin system and model-triggered commands. You can also indexing files from this directory (using integrated `LlamaIndex`) and use it's contents as additional context provided to discussion.
858
936
 
859
- ```Settings / Agent (autonomous) / Index to use```
937
+ The `Files I/O` plugin takes care of file operations in the `data` directory, while the `Code Interpreter` plugin allows for the execution of code from these files.
860
938
 
861
- ![v2_agent_settings](https://github.com/szczyglis-dev/py-gpt/assets/61396542/c577d219-eb25-4f0e-9ea5-adf20a6b6b81)
939
+ ![v2_file_output](https://github.com/szczyglis-dev/py-gpt/assets/61396542/2ada219d-68c9-45e3-96af-86ac5bc73593)
862
940
 
941
+ To allow the model to manage files or python code execution, the `+ Tools` option must be active, along with the above-mentioned plugins:
863
942
 
864
- # Files and attachments
943
+ ![v2_code_execute](https://github.com/user-attachments/assets/0b96b362-52ca-4928-9675-a39038d787a1)
865
944
 
866
- ## Input attachments (upload)
945
+ # Presets
867
946
 
868
- **PyGPT** makes it simple for users to upload files to the server and send them to the model for tasks like analysis, similar to attaching files in `ChatGPT`. There's a separate `Files` tab next to the text input area specifically for managing file uploads. Users can opt to have files automatically deleted after each upload or keep them on the list for repeated use.
947
+ ## What is preset?
869
948
 
870
- ![v2_file_input](https://github.com/szczyglis-dev/py-gpt/assets/61396542/00263f3d-ec62-4daa-85b3-5a5ce178dce0)
949
+ Presets in **PyGPT** are essentially templates used to store and quickly apply different configurations. Each preset includes settings for the mode you want to use (such as chat, completion, or image generation), an initial system prompt, an assigned name for the AI, a username for the session, and the desired "temperature" for the conversation. A warmer "temperature" setting allows the AI to provide more creative responses, while a cooler setting encourages more predictable replies. These presets can be used across various modes and with models accessed via the `OpenAI API` or `LangChain`.
871
950
 
872
- The attachment feature is available in both the `Assistant` and `Vision` modes at default.
873
- In `Assistant` mode, you can send documents and files to analyze, while in `Vision` mode, you can send images.
874
- In other modes, you can enable attachments by activating the `Vision (inline)` plugin (for providing images only).
951
+ The application lets you create as many presets as needed and easily switch among them. Additionally, you can clone an existing preset, which is useful for creating variations based on previously set configurations and experimentation.
875
952
 
876
- ## Files (download, code generation)
953
+ ![v2_preset](https://github.com/user-attachments/assets/15d142c7-6669-4e0a-9a21-e57555a4cb83)
877
954
 
878
- **PyGPT** enables the automatic download and saving of files created by the model. This is carried out in the background, with the files being saved to an `data` folder located within the user's working directory. To view or manage these files, users can navigate to the `Files` tab which features a file browser for this specific directory. Here, users have the interface to handle all files sent by the AI.
955
+ ## Example usage
879
956
 
880
- This `data` directory is also where the application stores files that are generated locally by the AI, such as code files or any other data requested from the model. Users have the option to execute code directly from the stored files and read their contents, with the results fed back to the AI. This hands-off process is managed by the built-in plugin system and model-triggered commands. You can also indexing files from this directory (using integrated `Llama-index`) and use it's contents as additional context provided to discussion.
957
+ The application includes several sample presets that help you become acquainted with the mechanism of their use.
881
958
 
882
- The `Command: Files I/O` plugin takes care of file operations in the `data` directory, while the `Command: Code Interpreter` plugin allows for the execution of code from these files.
959
+ # Profiles
960
+
961
+ You can create multiple profiles for an app and switch between them. Each profile uses its own configuration, settings, context history, and a separate folder for user files. This allows you to set up different environments and quickly switch between them, changing the entire setup with just one click.
962
+
963
+ The app lets you create new profiles, edit existing ones, and duplicate current ones.
964
+
965
+ To create a new profile, select the option from the menu: `Config -> Profile -> New Profile...`
966
+
967
+ To edit saved profiles, choose the option from the menu: `Config -> Profile -> Edit Profiles...`
968
+
969
+ To switch to a created profile, pick the profile from the menu: `Config -> Profile -> [Profile Name]`
970
+
971
+ Each profile uses its own user directory (workdir). You can link a newly created or edited profile to an existing workdir with its configuration.
972
+
973
+ The name of the currently active profile is shown as (Profile Name) in the window title.
974
+
975
+ # Models
976
+
977
+ ## Built-in models
978
+
979
+ PyGPT has built-in support for models (as of 2024-11-27):
980
+
981
+ - `bielik-11b-v2.2-instruct:Q4_K_M`
982
+ - `chatgpt-4o-latest`
983
+ - `claude-3-5-sonnet-20240620`
984
+ - `claude-3-opus-20240229`
985
+ - `codellama`
986
+ - `dall-e-2`
987
+ - `dall-e-3`
988
+ - `gemini-1.5-flash`
989
+ - `gemini-1.5-pro`
990
+ - `gpt-3.5-turbo`
991
+ - `gpt-3.5-turbo-1106`
992
+ - `gpt-3.5-turbo-16k`
993
+ - `gpt-3.5-turbo-instruct`
994
+ - `gpt-4`
995
+ - `gpt-4-0125-preview`
996
+ - `gpt-4-1106-preview`
997
+ - `gpt-4-32k`
998
+ - `gpt-4-turbo`
999
+ - `gpt-4-turbo-2024-04-09`
1000
+ - `gpt-4-turbo-preview`
1001
+ - `gpt-4-vision-preview`
1002
+ - `gpt-4o`
1003
+ - `gpt-4o-2024-11-20`
1004
+ - `gpt-4o-audio-preview`
1005
+ - `gpt-4o-mini`
1006
+ - `llama2-uncensored`
1007
+ - `llama3.1`
1008
+ - `llama3.1:405b`
1009
+ - `llama3.1:70b`
1010
+ - `mistral`
1011
+ - `mistral-large`
1012
+ - `o1-mini`
1013
+ - `o1-preview`
883
1014
 
884
- ![v2_file_output](https://github.com/szczyglis-dev/py-gpt/assets/61396542/2ada219d-68c9-45e3-96af-86ac5bc73593)
1015
+ All models are specified in the configuration file `models.json`, which you can customize.
1016
+ This file is located in your working directory. You can add new models provided directly by `OpenAI API`
1017
+ and those supported by `LlamaIndex` or `LangChain` to this file. Configuration for LangChain wrapper is placed in `langchain` key, configuration for LlamaIndex in `llama_index` key.
885
1018
 
886
- To allow the model to manage files or python code execution, the `Execute commands` option must be active, along with the above-mentioned plugins:
1019
+ ## Adding a custom model
887
1020
 
888
- ![v2_code_execute](https://github.com/szczyglis-dev/py-gpt/assets/61396542/d5181eeb-6ab4-426f-93f0-037d256cb078)
1021
+ You can add your own models. See the section `Extending PyGPT / Adding a new model` for more info.
889
1022
 
890
- # Draw (paint)
1023
+ There is built-in support for those LLM providers:
891
1024
 
892
- Using the `Draw` tool, you can create quick sketches and submit them to the model for analysis. You can also edit opened from disk or captured from camera images, for example, by adding elements like arrows or outlines to objects. Additionally, you can capture screenshots from the system - the captured image is placed in the drawing tool and attached to the query being sent.
1025
+ - OpenAI (openai)
1026
+ - Azure OpenAI (azure_openai)
1027
+ - Google (google)
1028
+ - HuggingFace (huggingface)
1029
+ - Anthropic (anthropic)
1030
+ - Ollama (ollama)
893
1031
 
894
- ![v2_draw](https://github.com/szczyglis-dev/py-gpt/assets/61396542/09c1de36-1241-4330-9fd7-67c6e09888fa)
1032
+ ## How to use local or non-GPT models
895
1033
 
896
- To capture the screenshot just click on the `Ask with screenshot` option in a tray-icon dropdown:
1034
+ ### Llama 3, Mistral, and other local models
897
1035
 
898
- ![v2_screenshot](https://github.com/szczyglis-dev/py-gpt/assets/61396542/7305a814-ca76-4f8f-8908-47f6a9496fa5)
1036
+ How to use locally installed Llama 3 or Mistral models:
899
1037
 
900
- # Calendar
1038
+ 1) Choose a working mode: `Chat with Files` or `LangChain`.
901
1039
 
902
- Using the calendar, you can go back to selected conversations from a specific day and add daily notes. After adding a note, it will be marked on the list, and you can change the color of its label by right-clicking and selecting `Set label color`. By clicking on a particular day of the week, conversations from that day will be displayed.
1040
+ 2) On the models list - select, edit, or add a new model (with `ollama` provider). You can edit the model settings through the menu `Config -> Models`, then configure the model parameters in the `advanced` section.
903
1041
 
904
- ![v2_calendar](https://github.com/szczyglis-dev/py-gpt/assets/61396542/c7d17375-b61f-452c-81bc-62a7d466fc18)
1042
+ 3) Download and install Ollama from here: https://github.com/ollama/ollama
905
1043
 
906
- # Context and memory
1044
+ For example, on Linux:
907
1045
 
908
- ## Short and long-term memory
1046
+ ```curl -fsSL https://ollama.com/install.sh | sh```
909
1047
 
910
- **PyGPT** features a continuous chat mode that maintains a long context of the ongoing dialogue. It preserves the entire conversation history and automatically appends it to each new message (prompt) you send to the AI. Additionally, you have the flexibility to revisit past conversations whenever you choose. The application keeps a record of your chat history, allowing you to resume discussions from the exact point you stopped.
1048
+ 4) Run the model (e.g. Llama 3) locally on your machine. For example, on Linux:
911
1049
 
912
- ## Handling multiple contexts
1050
+ ```ollama run llama3.1```
913
1051
 
914
- On the left side of the application interface, there is a panel that displays a list of saved conversations. You can save numerous contexts and switch between them with ease. This feature allows you to revisit and continue from any point in a previous conversation. **PyGPT** automatically generates a summary for each context, akin to the way `ChatGPT` operates and gives you the option to modify these titles itself.
1052
+ 5) Return to PyGPT and select the correct model from models list to chat with selected model using Ollama running locally.
915
1053
 
916
- ![v2_context_list](https://github.com/szczyglis-dev/py-gpt/assets/61396542/9228ea4c-f30c-4b02-ba85-da10b4e2eb7b)
1054
+ **Example available models**
917
1055
 
918
- You can disable context support in the settings by using the following option:
1056
+ - `llama3.1`
1057
+ - `codellama`
1058
+ - `mistral`
1059
+ - `llama2-uncensored`
919
1060
 
920
- ``` ini
921
- Config -> Settings -> Use context
922
- ```
1061
+ You can add more models by editing the models list.
923
1062
 
924
- ## Clearing history
1063
+ **List of all models supported by Ollama**
925
1064
 
926
- You can clear the entire memory (all contexts) by selecting the menu option:
1065
+ https://ollama.com/library
927
1066
 
928
- ``` ini
929
- File -> Clear history...
930
- ```
1067
+ https://github.com/ollama/ollama
931
1068
 
932
- ## Context storage
1069
+ **IMPORTANT:** Remember to define the correct model name in the **kwargs list in the model settings.
933
1070
 
934
- On the application side, the context is stored in the `SQLite` database located in the working directory (`db.sqlite`).
935
- In addition, all history is also saved to `.txt` files for easy reading.
1071
+ **Using local embeddings**
936
1072
 
937
- Once a conversation begins, a title for the chat is generated and displayed on the list to the left. This process is similar to `ChatGPT`, where the subject of the conversation is summarized, and a title for the thread is created based on that summary. You can change the name of the thread at any time.
1073
+ Refer to: https://docs.llamaindex.ai/en/stable/examples/embeddings/ollama_embedding/
938
1074
 
939
- # Presets
1075
+ You can use an Ollama instance for embeddings. Simply select the `ollama` provider in:
940
1076
 
941
- ## What is preset?
1077
+ ```Config -> Settings -> Indexes (LlamaIndex) -> Embeddings -> Embeddings provider```
942
1078
 
943
- Presets in **PyGPT** are essentially templates used to store and quickly apply different configurations. Each preset includes settings for the mode you want to use (such as chat, completion, or image generation), an initial system message, an assigned name for the AI, a username for the session, and the desired "temperature" for the conversation. A warmer "temperature" setting allows the AI to provide more creative responses, while a cooler setting encourages more predictable replies. These presets can be used across various modes and with models accessed via the `OpenAI API` or `Langchain`.
1079
+ Define parameters like model name and Ollama base URL in the Embeddings provider **kwargs list, e.g.:
944
1080
 
945
- The system lets you create as many presets as needed and easily switch among them. Additionally, you can clone an existing preset, which is useful for creating variations based on previously set configurations and experimentation.
1081
+ - name: `model_name`, value: `llama3.1`, type: `str`
946
1082
 
947
- ![v2_preset](https://github.com/szczyglis-dev/py-gpt/assets/61396542/88167631-feb6-45ca-a006-25a21ec2339e)
1083
+ - name: `base_url`, value: `http://localhost:11434`, type: `str`
948
1084
 
949
- ## Example usage
1085
+ ### Google Gemini and Anthropic Claude
950
1086
 
951
- The application includes several sample presets that help you become acquainted with the mechanism of their use.
1087
+ To use `Gemini` or `Claude` models, select the `Chat with Files` mode in PyGPT and select a predefined model.
1088
+ Remember to configure the required parameters like API keys in the model ENV config fields.
952
1089
 
1090
+ **Google Gemini**
953
1091
 
954
- # Image generation (DALL-E 3 and DALL-E 2)
1092
+ Required ENV:
955
1093
 
956
- ## DALL-E 3
1094
+ - GOOGLE_API_KEY
957
1095
 
958
- **PyGPT** enables quick and easy image creation with `DALL-E 3`.
959
- The older model version, `DALL-E 2`, is also accessible. Generating images is akin to a chat conversation - a user's prompt triggers the generation, followed by downloading, saving to the computer,
960
- and displaying the image onscreen. You can send raw prompt to `DALL-E` in `Image generation` mode or ask the model for the best prompt.
1096
+ Required **kwargs:
961
1097
 
962
- **From version 2.0.68 (released 2023-12-31) image generation using DALL-E is available in every mode via plugin `DALL-E 3 Image Generation (inline)`. Just ask any model, in any mode, like e.g. GPT-4 to generate an image and it will do it inline, without need to mode change.**
1098
+ - model
963
1099
 
964
- If you want to generate images (using DALL-E) directly in chat you must enable plugin **DALL-E 3 Inline** in the Plugins menu.
965
- Plugin allows you to generate images in Chat mode:
1100
+ **Anthropic Claude**
966
1101
 
967
- ![v3_img_chat](https://github.com/szczyglis-dev/py-gpt/assets/61396542/52715d3e-725b-4e8c-b62d-669bd5da595d)
1102
+ Required ENV:
968
1103
 
969
- ## Multiple variants
1104
+ - ANTHROPIC_API_KEY
970
1105
 
971
- You can generate up to **4 different variants** (DALL-E 2) for a given prompt in one session. DALL-E 3 allows one image.
972
- To select the desired number of variants to create, use the slider located in the right-hand corner at
973
- the bottom of the screen. This replaces the conversation temperature slider when you switch to image generation mode.
1106
+ Required **kwargs:
974
1107
 
975
- ## Raw mode
1108
+ - model
976
1109
 
977
- There is an option for switching prompt generation mode.
978
1110
 
979
- If **Raw Mode** is enabled, DALL-E will receive the prompt exactly as you have provided it.
980
- If **Raw Mode** is disabled, GPT will generate the best prompt for you based on your instructions.
1111
+ # Plugins
981
1112
 
982
- ![v2_dalle2](https://github.com/szczyglis-dev/py-gpt/assets/61396542/e1c30292-8ed0-4346-8b85-6d7a02d65fb6)
1113
+ ## Overview
983
1114
 
984
- ## Image storage
1115
+ **PyGPT** can be enhanced with plugins to add new features.
985
1116
 
986
- Once you've generated an image, you can easily save it anywhere on your disk by right-clicking on it.
987
- You also have the options to delete it or view it in full size in your web browser.
1117
+ **Tip:** Plugins works best with GPT-4 models.
988
1118
 
989
- **Tip:** Use presets to save your prepared prompts.
990
- This lets you quickly use them again for generating new images later on.
1119
+ The following plugins are currently available, and model can use them instantly:
991
1120
 
992
- The app keeps a history of all your prompts, allowing you to revisit any session and reuse previous
993
- prompts for creating new images.
1121
+ - `Audio Input` - provides speech recognition.
994
1122
 
995
- Images are stored in ``img`` directory in **PyGPT** user data folder.
1123
+ - `Audio Output` - provides voice synthesis.
996
1124
 
997
- # Managing models
1125
+ - `Autonomous Agent (inline)` - enables autonomous conversation (AI to AI), manages loop, and connects output back to input. This is the inline Agent mode.
998
1126
 
999
- All models are specified in the configuration file `models.json`, which you can customize.
1000
- This file is located in your working directory. You can add new models provided directly by `OpenAI API`
1001
- and those supported by `Langchain` to this file. Configuration for Langchain wrapper is placed in `langchain` key.
1127
+ - `Chat with Files (LlamaIndex, inline)` - plugin integrates `LlamaIndex` storage in any chat and provides additional knowledge into context (from indexed files and previous context from database).
1002
1128
 
1003
- ## Adding custom LLMs via Langchain
1129
+ - `API calls` - plugin lets you connect the model to the external services using custom defined API calls.
1004
1130
 
1005
- To add a new model using the Langchain wrapper in **PyGPT**, insert the model's configuration details into the `models.json` file. This should include the model's name, its supported modes (either `chat`, `completion`, or both), the LLM provider (which can be either e.g. `OpenAI` or `HuggingFace`), and, if you are using a `HuggingFace` model, an optional `API KEY`.
1131
+ - `Code Interpreter` - responsible for generating and executing Python code, functioning much like
1132
+ the Code Interpreter on ChatGPT, but locally. This means GPT can interface with any script, application, or code.
1133
+ Plugins can work in conjunction to perform sequential tasks; for example, the `Files` plugin can write generated
1134
+ Python code to a file, which the `Code Interpreter` can execute it and return its result to GPT.
1006
1135
 
1007
- Example of models configuration - `models.json`:
1136
+ - `Custom Commands` - allows you to create and execute custom commands on your system.
1008
1137
 
1009
- ```
1010
- "gpt-3.5-turbo": {
1011
- "id": "gpt-3.5-turbo",
1012
- "name": "gpt-3.5-turbo",
1013
- "mode": [
1014
- "chat",
1015
- "assistant",
1016
- "langchain",
1017
- "llama_index"
1018
- ],
1019
- "langchain": {
1020
- "provider": "openai",
1021
- "mode": [
1022
- "chat"
1023
- ],
1024
- "args": [
1025
- {
1026
- "name": "model_name",
1027
- "value": "gpt-3.5-turbo",
1028
- "type": "str"
1029
- }
1030
- ],
1031
- "env": [
1032
- {
1033
- "name": "OPENAI_API_KEY",
1034
- "value": "{api_key}"
1035
- }
1036
- ]
1037
- },
1038
- "llama_index": {
1039
- "provider": "openai",
1040
- "mode": [
1041
- "chat"
1042
- ],
1043
- "args": [
1044
- {
1045
- "name": "model",
1046
- "value": "gpt-3.5-turbo",
1047
- "type": "str"
1048
- }
1049
- ],
1050
- "env": [
1051
- {
1052
- "name": "OPENAI_API_KEY",
1053
- "value": "{api_key}"
1054
- }
1055
- ]
1056
- },
1057
- "ctx": 4096,
1058
- "tokens": 4096,
1059
- "default": false
1060
- },
1061
- ```
1138
+ - `Files I/O` - provides access to the local filesystem, enabling GPT to read and write files,
1139
+ as well as list and create directories.
1062
1140
 
1063
- There is bult-in support for those LLMs providers:
1141
+ - `System (OS)` - allows you to create and execute custom commands on your system.
1064
1142
 
1065
- ```
1066
- - OpenAI (openai)
1067
- - Azure OpenAI (azure_openai)
1068
- - HuggingFace (huggingface)
1069
- - Anthropic (anthropic)
1070
- - Llama 2 (llama2)
1071
- - Ollama (ollama)
1072
- ```
1143
+ - `Mouse and Keyboard` - provides the ability to control the mouse and keyboard by the model.
1073
1144
 
1074
- ## Adding custom LLM providers
1145
+ - `Web Search` - provides the ability to connect to the Web, search web pages for current data, and index external content using LlamaIndex data loaders.
1075
1146
 
1076
- Handling LLMs with Langchain is implemented through separated wrappers. This allows for the addition of support for any provider and model available via Langchain. All built-in wrappers for the models and its providers are placed in the `pygpt_net.provider.llms`.
1147
+ - `Serial port / USB` - plugin provides commands for reading and sending data to USB ports.
1077
1148
 
1078
- These wrappers are loaded into the application during startup using `launcher.add_llm()` method:
1149
+ - `Context history (calendar, inline)` - provides access to context history database.
1079
1150
 
1080
- ```python
1081
- # app.py
1151
+ - `Crontab / Task scheduler` - plugin provides cron-based job scheduling - you can schedule tasks/prompts to be sent at any time using cron-based syntax for task setup.
1082
1152
 
1083
- from pygpt_net.provider.llms.openai import OpenAILLM
1084
- from pygpt_net.provider.llms.azure_openai import AzureOpenAILLM
1085
- from pygpt_net.provider.llms.anthropic import AnthropicLLM
1086
- from pygpt_net.provider.llms.hugging_face import HuggingFaceLLM
1087
- from pygpt_net.provider.llms.llama import Llama2LLM
1088
- from pygpt_net.provider.llms.ollama import OllamaLLM
1153
+ - `DALL-E 3: Image Generation (inline)` - integrates DALL-E 3 image generation with any chat and mode. Just enable and ask for image in Chat mode, using standard model like GPT-4. The plugin does not require the `+ Tools` option to be enabled.
1089
1154
 
1155
+ - `Experts (inline)` - allows calling experts in any chat mode. This is the inline Experts (co-op) mode.
1090
1156
 
1091
- def run(**kwargs):
1092
- """Runs the app."""
1093
- # Initialize the app
1094
- launcher = Launcher()
1095
- launcher.init()
1157
+ - `GPT-4 Vision (inline)` - integrates Vision capabilities with any chat mode, not just Vision mode. When the plugin is enabled, the model temporarily switches to vision in the background when an image attachment or vision capture is provided.
1096
1158
 
1097
- # Register plugins
1098
- ...
1159
+ - `Real Time` - automatically appends the current date and time to the system prompt, informing the model about current time.
1099
1160
 
1100
- # Register langchain LLMs wrappers
1101
- launcher.add_llm(OpenAILLM())
1102
- launcher.add_llm(AzureOpenAILLM())
1103
- launcher.add_llm(AnthropicLLM())
1104
- launcher.add_llm(HuggingFaceLLM())
1105
- launcher.add_llm(Llama2LLM())
1106
- launcher.add_llm(OllamaLLM())
1161
+ - `System Prompt Extra (append)` - appends additional system prompts (extra data) from a list to every current system prompt. You can enhance every system prompt with extra instructions that will be automatically appended to the system prompt.
1107
1162
 
1108
- # Launch the app
1109
- launcher.run()
1110
- ```
1163
+ - `Voice Control (inline)` - provides voice control command execution within a conversation.
1111
1164
 
1112
- To add support for providers not included by default, you can create your own wrapper that returns a custom model to the application and then pass this custom wrapper to the launcher.
1165
+ - `Mailer` - Provides the ability to send, receive and read emails.
1113
1166
 
1114
- Extending **PyGPT** with custom plugins and LLM wrappers is straightforward:
1167
+ ## Audio Input
1115
1168
 
1116
- - Pass instances of custom plugins and LLM wrappers directly to the launcher.
1169
+ The plugin facilitates speech recognition (by default using the `Whisper` model from OpenAI, `Google` and `Bing` are also available). It allows for voice commands to be relayed to the AI using your own voice. Whisper doesn't require any extra API keys or additional configurations; it uses the main OpenAI key. In the plugin's configuration options, you should adjust the volume level (min energy) at which the plugin will respond to your microphone. Once the plugin is activated, a new `Speak` option will appear at the bottom near the `Send` button - when this is enabled, the application will respond to the voice received from the microphone.
1117
1170
 
1118
- To register custom LLM wrappers:
1171
+ The plugin can be extended with other speech recognition providers.
1119
1172
 
1120
- - Provide a list of LLM wrapper instances as `llms` keyword argument.
1173
+ Options:
1121
1174
 
1122
- **Example:**
1175
+ - `Provider` *provider*
1123
1176
 
1177
+ Choose the provider. *Default:* `Whisper`
1124
1178
 
1125
- ```python
1126
- # launcher.py
1179
+ Available providers:
1127
1180
 
1128
- from pygpt_net.app import run
1129
- from plugins import CustomPlugin, OtherCustomPlugin
1130
- from llms import CustomLLM
1181
+ - Whisper (via `OpenAI API`)
1182
+ - Whisper (local model) - not available in compiled and Snap versions, only Python/PyPi version
1183
+ - Google (via `SpeechRecognition` library)
1184
+ - Google Cloud (via `SpeechRecognition` library)
1185
+ - Microsoft Bing (via `SpeechRecognition` library)
1131
1186
 
1132
- plugins = [
1133
- CustomPlugin(),
1134
- OtherCustomPlugin(),
1135
- ]
1136
- llms = [
1137
- CustomLLM(),
1138
- ]
1139
- vector_stores = []
1140
-
1141
- run(
1142
- plugins=plugins,
1143
- llms=llms,
1144
- vector_stores=vector_stores
1145
- )
1146
- ```
1147
-
1148
- **Examples (tutorial files)**
1149
-
1150
- See the `examples` directory in this repository with examples of custom launcher, plugin, vector store, LLM (Langchain and Llama-index) provider and data loader:
1151
-
1152
- - `examples/custom_launcher.py`
1153
-
1154
- - `examples/example_audio_input.py`
1155
-
1156
- - `examples/example_audio_output.py`
1157
-
1158
- - `examples/example_data_loader.py`
1159
-
1160
- - `examples/example_llm.py` <-- use it as an example
1161
-
1162
- - `examples/example_plugin.py`
1163
-
1164
- - `examples/example_vector_store.py`
1165
-
1166
- - `examples/example_web_search.py`
1167
-
1168
- These example files can be used as a starting point for creating your own extensions for **PyGPT**.
1169
-
1170
- To integrate your own model or provider into **PyGPT**, you can also reference the classes located in the `pygpt_net.provider.llms`. These samples can act as an more complex example for your custom class. Ensure that your custom wrapper class includes two essential methods: `chat` and `completion`. These methods should return the respective objects required for the model to operate in `chat` and `completion` modes.
1171
-
1172
-
1173
- ## Adding custom Vector Store providers
1174
-
1175
- **From version 2.0.114 you can also register your own Vector Store provider**:
1176
-
1177
- ```python
1178
- # app.py
1179
-
1180
- # vector stores
1181
- from pygpt_net.provider.vector_stores.chroma import ChromaProvider
1182
- from pygpt_net.provider.vector_stores.elasticsearch import ElasticsearchProvider
1183
- from pygpt_net.provider.vector_stores.pinecode import PinecodeProvider
1184
- from pygpt_net.provider.vector_stores.redis import RedisProvider
1185
- from pygpt_net.provider.vector_stores.simple import SimpleProvider
1186
-
1187
- def run(**kwargs):
1188
- # ...
1189
- # register base vector store providers (llama-index)
1190
- launcher.add_vector_store(ChromaProvider())
1191
- launcher.add_vector_store(ElasticsearchProvider())
1192
- launcher.add_vector_store(PinecodeProvider())
1193
- launcher.add_vector_store(RedisProvider())
1194
- launcher.add_vector_store(SimpleProvider())
1195
-
1196
- # register custom vector store providers (llama-index)
1197
- vector_stores = kwargs.get('vector_stores', None)
1198
- if isinstance(vector_stores, list):
1199
- for store in vector_stores:
1200
- launcher.add_vector_store(store)
1201
-
1202
- # ...
1203
- ```
1204
-
1205
- To register your custom vector store provider just register it by passing provider instance in `vector_stores` keyword argument:
1206
-
1207
- ```python
1208
-
1209
- # custom_launcher.py
1210
-
1211
- from pygpt_net.app import run
1212
- from plugins import CustomPlugin, OtherCustomPlugin
1213
- from llms import CustomLLM
1214
- from vector_stores import CustomVectorStore
1215
-
1216
- plugins = [
1217
- CustomPlugin(),
1218
- OtherCustomPlugin(),
1219
- ]
1220
- llms = [
1221
- CustomLLM(),
1222
- ]
1223
- vector_stores = [
1224
- CustomVectorStore(),
1225
- ]
1226
-
1227
- run(
1228
- plugins=plugins,
1229
- llms=llms,
1230
- vector_stores=vector_stores
1231
- )
1232
- ```
1233
-
1234
- # Plugins
1235
-
1236
- **PyGPT** can be enhanced with plugins to add new features.
1237
-
1238
- The following plugins are currently available, and model can use them instantly:
1239
-
1240
- - `Audio Input` - provides speech recognition.
1241
-
1242
- - `Audio Output` - provides voice synthesis.
1243
-
1244
- - `Autonomous Agent (inline)` - enables autonomous conversation (AI to AI), manages loop, and connects output back to input. This is the inline Agent mode.
1245
-
1246
- - `Chat with files (Llama-index, inline)` - plugin integrates `Llama-index` storage in any chat and provides additional knowledge into context (from indexed files and previous context from database).
1247
-
1248
- - `Command: API calls` - plugin lets you connect the model to the external services using custom defined API calls.
1249
-
1250
- - `Command: Code Interpreter` - responsible for generating and executing Python code, functioning much like
1251
- the Code Interpreter on ChatGPT, but locally. This means GPT can interface with any script, application, or code.
1252
- The plugin can also execute system commands, allowing GPT to integrate with your operating system.
1253
- Plugins can work in conjunction to perform sequential tasks; for example, the `Files` plugin can write generated
1254
- Python code to a file, which the `Code Interpreter` can execute it and return its result to GPT.
1255
-
1256
- - `Command: Custom Commands` - allows you to create and execute custom commands on your system.
1257
-
1258
- - `Command: Files I/O` - provides access to the local filesystem, enabling GPT to read and write files,
1259
- as well as list and create directories.
1260
-
1261
- - `Command: Web Search` - provides the ability to connect to the Web, search web pages for current data, and index external content using Llama-index data loaders.
1262
-
1263
- - `Command: Serial port / USB` - plugin provides commands for reading and sending data to USB ports.
1264
-
1265
- - `Context history (calendar, inline)` - provides access to context history database.
1266
-
1267
- - `Crontab / Task scheduler` - plugin provides cron-based job scheduling - you can schedule tasks/prompts to be sent at any time using cron-based syntax for task setup.
1268
-
1269
- - `DALL-E 3: Image Generation (inline)` - integrates DALL-E 3 image generation with any chat and mode. Just enable and ask for image in Chat mode, using standard model like GPT-4. The plugin does not require the `Execute commands` option to be enabled.
1270
-
1271
- - `GPT-4 Vision (inline)` - integrates Vision capabilities with any chat mode, not just Vision mode. When the plugin is enabled, the model temporarily switches to vision in the background when an image attachment or vision capture is provided.
1272
-
1273
- - `Real Time` - automatically appends the current date and time to the system prompt, informing the model about current time.
1274
-
1275
- - `System Prompt Extra (append)` - appends additional system prompts (extra data) from a list to every current system prompt. You can enhance every system prompt with extra instructions that will be automatically appended to the system prompt.
1276
-
1277
-
1278
- ## Audio Input
1279
-
1280
- The plugin facilitates speech recognition (by default using the `Whisper` model from OpenAI, `Google` and `Bing` are also available). It allows for voice commands to be relayed to the AI using your own voice. Whisper doesn't require any extra API keys or additional configurations; it uses the main OpenAI key. In the plugin's configuration options, you should adjust the volume level (min energy) at which the plugin will respond to your microphone. Once the plugin is activated, a new `Speak` option will appear at the bottom near the `Send` button - when this is enabled, the application will respond to the voice received from the microphone.
1281
-
1282
- The plugin can be extended with other speech recognition providers.
1283
-
1284
- Options:
1285
-
1286
- - `Provider` *provider*
1287
-
1288
- Choose the provider. *Default:* `Whisper`
1289
-
1290
- Available providers:
1291
-
1292
- - Whisper (via `OpenAI API`)
1293
- - Whisper (local model) - not available in compiled and Snap versions, only Python/PyPi version
1294
- - Google (via `SpeechRecognition` library)
1295
- - Google Cloud (via `SpeechRecognition` library)
1296
- - Microsoft Bing (via `SpeechRecognition` library)
1297
-
1298
- **Whisper (API)**
1187
+ **Whisper (API)**
1299
1188
 
1300
1189
  - `Model` *whisper_model*
1301
1190
 
@@ -1429,7 +1318,7 @@ Options reference: https://pypi.org/project/SpeechRecognition/1.3.1/
1429
1318
  The plugin lets you turn text into speech using the TTS model from OpenAI or other services like ``Microsoft Azure``, ``Google``, and ``Eleven Labs``. You can add more text-to-speech providers to it too. `OpenAI TTS` does not require any additional API keys or extra configuration; it utilizes the main OpenAI key.
1430
1319
  Microsoft Azure requires to have an Azure API Key. Before using speech synthesis via `Microsoft Azure`, `Google` or `Eleven Labs`, you must configure the audio plugin with your API keys, regions and voices if required.
1431
1320
 
1432
- ![v2_azure](https://github.com/szczyglis-dev/py-gpt/assets/61396542/8035e9a5-5a01-44a1-85da-6e44c52459e4)
1321
+ ![v2_azure](https://github.com/user-attachments/assets/475108c1-5ea8-4f43-8cd5-effcd5ef352c)
1433
1322
 
1434
1323
  Through the available options, you can select the voice that you want the model to use. More voice synthesis providers coming soon.
1435
1324
 
@@ -1555,30 +1444,30 @@ If enabled, plugin will stop after goal is reached." *Default:* `True`
1555
1444
 
1556
1445
  - `Reverse roles between iterations` *reverse_roles*
1557
1446
 
1558
- Only for Completion/Langchain modes.
1447
+ Only for Completion/LangChain modes.
1559
1448
  If enabled, this option reverses the roles (AI <> user) with each iteration. For example,
1560
1449
  if in the previous iteration the response was generated for "Batman," the next iteration will use that
1561
1450
  response to generate an input for "Joker." *Default:* `True`
1562
1451
 
1563
- ## Chat with files (Llama-index, inline)
1452
+ ## Chat with Files (LlamaIndex, inline)
1564
1453
 
1565
- Plugin integrates `Llama-index` storage in any chat and provides additional knowledge into context.
1454
+ Plugin integrates `LlamaIndex` storage in any chat and provides additional knowledge into context.
1566
1455
 
1567
- - `Ask Llama-index first` *ask_llama_first*
1456
+ - `Ask LlamaIndex first` *ask_llama_first*
1568
1457
 
1569
- When enabled, then `Llama-index` will be asked first, and response will be used as additional knowledge in prompt. When disabled, then `Llama-index` will be asked only when needed. **INFO: Disabled in autonomous mode (via plugin)!** *Default:* `False`
1458
+ When enabled, then `LlamaIndex` will be asked first, and response will be used as additional knowledge in prompt. When disabled, then `LlamaIndex` will be asked only when needed. **INFO: Disabled in autonomous mode (via plugin)!** *Default:* `False`
1570
1459
 
1571
- - `Auto-prepare question before asking Llama-index first` *prepare_question*
1460
+ - `Auto-prepare question before asking LlamaIndex first` *prepare_question*
1572
1461
 
1573
- When enabled, then question will be prepared before asking Llama-index first to create best query. *Default:* `False`
1462
+ When enabled, then question will be prepared before asking LlamaIndex first to create best query. *Default:* `False`
1574
1463
 
1575
1464
  - `Model for question preparation` *model_prepare_question*
1576
1465
 
1577
- Model used to prepare question before asking Llama-index. *Default:* `gpt-3.5-turbo`
1466
+ Model used to prepare question before asking LlamaIndex. *Default:* `gpt-3.5-turbo`
1578
1467
 
1579
1468
  - `Max output tokens for question preparation` *prepare_question_max_tokens*
1580
1469
 
1581
- Max tokens in output when preparing question before asking Llama-index. *Default:* `500`
1470
+ Max tokens in output when preparing question before asking LlamaIndex. *Default:* `500`
1582
1471
 
1583
1472
  - `Prompt for question preparation` *syntax_prepare_question*
1584
1473
 
@@ -1586,26 +1475,26 @@ System prompt for question preparation.
1586
1475
 
1587
1476
  - `Max characters in question` *max_question_chars*
1588
1477
 
1589
- Max characters in question when querying Llama-index, 0 = no limit. *Default:* `1000`
1478
+ Max characters in question when querying LlamaIndex, 0 = no limit. *Default:* `1000`
1590
1479
 
1591
1480
  - `Append metadata to context` *append_meta*
1592
1481
 
1593
- If enabled, then metadata from Llama-index will be appended to additional context. *Default:* `False`
1482
+ If enabled, then metadata from LlamaIndex will be appended to additional context. *Default:* `False`
1594
1483
 
1595
1484
  - `Model` *model_query*
1596
1485
 
1597
- Model used for querying `Llama-index`. *Default:* `gpt-3.5-turbo`
1486
+ Model used for querying `LlamaIndex`. *Default:* `gpt-3.5-turbo`
1598
1487
 
1599
1488
  - `Indexes IDs` *idx*
1600
1489
 
1601
1490
  Indexes to use. If you want to use multiple indexes at once then separate them by comma. *Default:* `base`
1602
1491
 
1603
1492
 
1604
- ## Command: API calls
1493
+ ## API calls
1605
1494
 
1606
1495
  **PyGPT** lets you connect the model to the external services using custom defined API calls.
1607
1496
 
1608
- To activate this feature, turn on the `Command: API calls` plugin found in the `Plugins` menu.
1497
+ To activate this feature, turn on the `API calls` plugin found in the `Plugins` menu.
1609
1498
 
1610
1499
  In this plugin you can provide list of allowed API calls, their parameters and request types. The model will replace provided placeholders with required params and make API call to external service.
1611
1500
 
@@ -1658,58 +1547,162 @@ Connection timeout (seconds). *Default:* `5`
1658
1547
  User agent to use when making requests. *Default:* `Mozilla/5.0`
1659
1548
 
1660
1549
 
1661
- ## Command: Code Interpreter
1550
+ ## Code Interpreter
1662
1551
 
1663
1552
  ### Executing Code
1664
1553
 
1665
- The plugin operates similarly to the `Code Interpreter` in `ChatGPT`, with the key difference that it works locally on the user's system. It allows for the execution of any Python code on the computer that the model may generate. When combined with the `Command: Files I/O` plugin, it facilitates running code from files saved in the `data` directory. You can also prepare your own code files and enable the model to use them or add your own plugin for this purpose. You can execute commands and code on the host machine or in Docker container.
1554
+ From version `2.4.13` with built-in `IPython`.
1666
1555
 
1667
- **Real-time code interpreter:** From version `2.1.29`, a real-time Python code interpreter is included. Click the `<>` icon to open the interpreter window. Both the input and output of the interpreter are connected to the plugin. Any output generated by the executed code will be displayed in the interpreter. Additionally, you can request the model to retrieve contents from the interpreter window output.
1556
+ The plugin operates similarly to the `Code Interpreter` in `ChatGPT`, with the key difference that it works locally on the user's system. It allows for the execution of any Python code on the computer that the model may generate. When combined with the `Files I/O` plugin, it facilitates running code from files saved in the `data` directory. You can also prepare your own code files and enable the model to use them or add your own plugin for this purpose. You can execute commands and code on the host machine or in Docker container.
1668
1557
 
1669
- ![v2_python](https://github.com/szczyglis-dev/py-gpt/assets/61396542/793e554c-7619-402a-8370-ab89c7464fec)
1558
+ **IPython:** Starting from version `2.4.13`, it is highly recommended to adopt the new option: `IPython`, which offers significant improvements over previous workflows. IPython provides a robust environment for executing code within a kernel, allowing you to maintain the state of your session by preserving the results of previous commands. This feature is particularly useful for iterative development and data analysis, as it enables you to build upon prior computations without starting from scratch. Moreover, IPython supports the use of magic commands, such as `!pip install <package_name>`, which facilitate the installation of new packages directly within the session. This capability streamlines the process of managing dependencies and enhances the flexibility of your development environment. Overall, IPython offers a more efficient and user-friendly experience for executing and managing code.
1670
1559
 
1671
- ### Executing system commands
1560
+ To use IPython in sandbox mode, Docker must be installed on your system.
1672
1561
 
1673
- Another feature is the ability to execute system commands and return their results. With this functionality, the plugin can run any system command, retrieve the output, and then feed the result back to the model. When used with other features, this provides extensive integration capabilities with the system.
1562
+ You can find the installation instructions here: https://docs.docker.com/engine/install/
1674
1563
 
1564
+ **Tip: connecting IPython in Docker in Snap version**:
1675
1565
 
1566
+ To use IPython in the Snap version, you must connect PyGPT to the Docker daemon:
1567
+
1568
+ ```commandline
1569
+ sudo snap connect pygpt:docker-executables docker:docker-executables
1570
+ ```
1571
+
1572
+ ````commandline
1573
+ sudo snap connect pygpt:docker docker:docker-daemon
1574
+ ````
1575
+
1576
+
1577
+ **Code interpreter:** a real-time Python Code Interpreter is built-in. Click the `<>` icon to open the interpreter window. Both the input and output of the interpreter are connected to the plugin. Any output generated by the executed code will be displayed in the interpreter. Additionally, you can request the model to retrieve contents from the interpreter window output.
1578
+
1579
+ ![v2_python](https://github.com/szczyglis-dev/py-gpt/assets/61396542/793e554c-7619-402a-8370-ab89c7464fec)
1676
1580
 
1677
- **Tip:** always remember to enable the `Execute commands` option to allow execute commands from the plugins.
1581
+
1582
+ **Tip:** always remember to enable the `+ Tools` option to allow execute commands from the plugins.
1678
1583
 
1679
1584
 
1680
1585
  **Options:**
1681
1586
 
1587
+ **General**
1588
+
1589
+ - `Connect to the Python Code Interpreter window` *attach_output*
1590
+
1591
+ Automatically attach code input/output to the Python Code Interpreter window. *Default:* `True`
1592
+
1593
+ - `Tool: get_python_output` *cmd.get_python_output*
1594
+
1595
+ Allows `get_python_output` command execution. If enabled, it allows retrieval of the output from the Python Code Interpreter window. *Default:* `True`
1596
+
1597
+ - `Tool: get_python_input` *cmd.get_python_input*
1598
+
1599
+ Allows `get_python_input` command execution. If enabled, it allows retrieval all input code (from edit section) from the Python Code Interpreter window. *Default:* `True`
1600
+
1601
+ - `Tool: clear_python_output` *cmd.clear_python_output*
1602
+
1603
+ Allows `clear_python_output` command execution. If enabled, it allows clear the output of the Python Code Interpreter window. *Default:* `True`
1604
+
1605
+
1606
+ **IPython**
1607
+
1608
+ - `Sandbox (docker container)` *sandbox_ipython*
1609
+
1610
+ Executes IPython in sandbox (docker container). Docker must be installed and running.
1611
+
1612
+ - `Dockerfile` *ipython_dockerfile*
1613
+
1614
+ You can customize the Dockerfile for the image used by IPython by editing the configuration above and rebuilding the image via Tools -> Rebuild IPython Docker Image.
1615
+
1616
+ - `Session Key` *ipython_session_key*
1617
+
1618
+ It must match the key provided in the Dockerfile.
1619
+
1620
+ - `Docker image name` *ipython_image_name*
1621
+
1622
+ Custom image name
1623
+
1624
+ - `Docker container name` *ipython_container_name*
1625
+
1626
+ Custom container name
1627
+
1628
+ - `Connection address` *ipython_conn_addr*
1629
+
1630
+ Default: 127.0.0.1
1631
+
1632
+ - `Port: shell` *ipython_port_shell*
1633
+
1634
+ Default: 5555
1635
+
1636
+ - `Port: iopub` *ipython_port_iopub*
1637
+
1638
+ Default: 5556
1639
+
1640
+ - `Port: stdin` *ipython_port_stdin*
1641
+
1642
+ Default: 5557
1643
+
1644
+ - `Port: control` *ipython_port_control*
1645
+
1646
+ Default: 5558
1647
+
1648
+ - `Port: hb` *ipython_port_hb*
1649
+
1650
+ Default: 5559
1651
+
1652
+
1653
+ - `Tool: ipython_execute` *cmd.ipython_execute*
1654
+
1655
+ Allows Python code execution in IPython interpreter (in current kernel). *Default:* `True`
1656
+
1657
+ - `Tool: python_kernel_restart` *cmd.ipython_kernel_restart*
1658
+
1659
+ Allows to restart IPython kernel. *Default:* `True`
1660
+
1661
+
1662
+ **Python (legacy)**
1663
+
1664
+ - `Sandbox (docker container)` *sandbox_docker*
1665
+
1666
+ Executes commands in sandbox (docker container). Docker must be installed and running.
1667
+
1682
1668
  - `Python command template` *python_cmd_tpl*
1683
1669
 
1684
1670
  Python command template (use {filename} as path to file placeholder). *Default:* `python3 {filename}`
1685
1671
 
1686
- - `Enable: code_execute` *cmd.code_execute*
1672
+ - `Dockerfile` *dockerfile*
1673
+
1674
+ You can customize the Dockerfile for the image used by legacy Python by editing the configuration above and rebuilding the image via Tools -> Rebuild Python (Legacy) Docker Image.
1675
+
1676
+ - `Docker image name` *image_name*
1677
+
1678
+ Custom Docker image name
1679
+
1680
+ - `Docker container name` *container_name*
1681
+
1682
+ Custom Docker container name
1683
+
1684
+ - `Tool: code_execute` *cmd.code_execute*
1687
1685
 
1688
1686
  Allows `code_execute` command execution. If enabled, provides Python code execution (generate and execute from file). *Default:* `True`
1689
1687
 
1690
- - `Enable: code_execute_all` *cmd.code_execute_all*
1688
+ - `Tool: code_execute_all` *cmd.code_execute_all*
1691
1689
 
1692
1690
  Allows `code_execute_all` command execution. If enabled, provides execution of all the Python code in interpreter window. *Default:* `True`
1693
1691
 
1694
- - `Enable: code_execute_file` *cmd.code_execute_file*
1692
+ - `Tool: code_execute_file` *cmd.code_execute_file*
1695
1693
 
1696
1694
  Allows `code_execute_file` command execution. If enabled, provides Python code execution from existing .py file. *Default:* `True`
1697
-
1698
- - `Enable: sys_exec` *cmd.sys_exec*
1699
-
1700
- Allows `sys_exec` command execution. If enabled, provides system commands execution. *Default:* `True`
1701
1695
 
1702
- - `Enable: get_python_output` *cmd.get_python_output*
1703
1696
 
1704
- Allows `get_python_output` command execution. If enabled, it allows retrieval of the output from the Python code interpreter window. *Default:* `True`
1697
+ **HTML Canvas**
1705
1698
 
1706
- - `Enable: get_python_input` *cmd.get_python_input*
1699
+ - `Tool: render_html_output` *cmd.render_html_output*
1707
1700
 
1708
- Allows `get_python_input` command execution. If enabled, it allows retrieval all input code (from edit section) from the Python code interpreter window. *Default:* `True`
1701
+ Allows `render_html_output` command execution. If enabled, it allows to render HTML/JS code in built-it HTML/JS browser (HTML Canvas). *Default:* `True`
1709
1702
 
1710
- - `Enable: clear_python_output` *cmd.clear_python_output*
1703
+ - `Tool: get_html_output` *cmd.get_html_output*
1711
1704
 
1712
- Allows `clear_python_output` command execution. If enabled, it allows clear the output of the Python code interpreter window. *Default:* `True`
1705
+ Allows `get_html_output` command execution. If enabled, it allows retrieval current output from HTML Canvas. *Default:* `True`
1713
1706
 
1714
1707
  - `Sandbox (docker container)` *sandbox_docker*
1715
1708
 
@@ -1719,20 +1712,13 @@ Execute commands in sandbox (docker container). Docker must be installed and run
1719
1712
 
1720
1713
  Docker image to use for sandbox *Default:* `python:3.8-alpine`
1721
1714
 
1722
- - `Auto-append CWD to sys_exec` *auto_cwd*
1723
-
1724
- Automatically append current working directory to `sys_exec` command. *Default:* `True`
1725
-
1726
- - `Connect to the Python code interpreter window` *attach_output*
1727
-
1728
- Automatically attach code input/output to the Python code interpreter window. *Default:* `True`
1729
1715
 
1730
1716
 
1731
- ## Command: Custom Commands
1717
+ ## Custom Commands
1732
1718
 
1733
1719
  With the `Custom Commands` plugin, you can integrate **PyGPT** with your operating system and scripts or applications. You can define an unlimited number of custom commands and instruct GPT on when and how to execute them. Configuration is straightforward, and **PyGPT** includes a simple tutorial command for testing and learning how it works:
1734
1720
 
1735
- ![v2_custom_cmd](https://github.com/szczyglis-dev/py-gpt/assets/61396542/b30b8724-9ca1-44b1-abc7-78241588e1f6)
1721
+ ![v2_custom_cmd](https://github.com/user-attachments/assets/e1d803e8-9452-4507-a9a6-7a43b83b897d)
1736
1722
 
1737
1723
  To add a new custom command, click the **ADD** button and then:
1738
1724
 
@@ -1788,9 +1774,9 @@ With the setup above, every time you ask GPT to generate a song for you and save
1788
1774
 
1789
1775
  ```> please execute tutorial test command```
1790
1776
 
1791
- ![v2_custom_cmd_example](https://github.com/szczyglis-dev/py-gpt/assets/61396542/64a95a9c-634c-4d71-ad7d-4eabe8b2509b)
1777
+ ![v2_custom_cmd_example](https://github.com/szczyglis-dev/py-gpt/assets/61396542/97cbc5b9-0dd9-487e-9182-d9873dea42ab)
1792
1778
 
1793
- ## Command: Files I/O
1779
+ ## Files I/O
1794
1780
 
1795
1781
  The plugin allows for file management within the local filesystem. It enables the model to create, read, write and query files located in the `data` directory, which can be found in the user's work directory. With this plugin, the AI can also generate Python code files and thereafter execute that code within the user's system.
1796
1782
 
@@ -1807,8 +1793,8 @@ Plugin capabilities include:
1807
1793
  - Copying files and directories
1808
1794
  - Moving (renaming) files and directories
1809
1795
  - Reading file info
1810
- - Indexing files and directories using Llama-index
1811
- - Querying files using Llama-index
1796
+ - Indexing files and directories using LlamaIndex
1797
+ - Querying files using LlamaIndex
1812
1798
  - Searching for files and directories
1813
1799
 
1814
1800
  If a file being created (with the same name) already exists, a prefix including the date and time is added to the file name.
@@ -1817,89 +1803,89 @@ If a file being created (with the same name) already exists, a prefix including
1817
1803
 
1818
1804
  **General**
1819
1805
 
1820
- - `Enable: send (upload) file as attachment` *cmd.send_file*
1806
+ - `Tool: send (upload) file as attachment` *cmd.send_file*
1821
1807
 
1822
1808
  Allows `cmd.send_file` command execution. *Default:* `True`
1823
1809
 
1824
- - `Enable: read file` *cmd.read_file*
1810
+ - `Tool: read file` *cmd.read_file*
1825
1811
 
1826
1812
  Allows `read_file` command execution. *Default:* `True`
1827
1813
 
1828
- - `Enable: append to file` *cmd.append_file*
1814
+ - `Tool: append to file` *cmd.append_file*
1829
1815
 
1830
1816
  Allows `append_file` command execution. Text-based files only (plain text, JSON, CSV, etc.) *Default:* `True`
1831
1817
 
1832
- - `Enable: save file` *cmd.save_file*
1818
+ - `Tool: save file` *cmd.save_file*
1833
1819
 
1834
1820
  Allows `save_file` command execution. Text-based files only (plain text, JSON, CSV, etc.) *Default:* `True`
1835
1821
 
1836
- - `Enable: delete file` *cmd.delete_file*
1822
+ - `Tool: delete file` *cmd.delete_file*
1837
1823
 
1838
1824
  Allows `delete_file` command execution. *Default:* `True`
1839
1825
 
1840
- - `Enable: list files (ls)` *cmd.list_files*
1826
+ - `Tool: list files (ls)` *cmd.list_files*
1841
1827
 
1842
1828
  Allows `list_dir` command execution. *Default:* `True`
1843
1829
 
1844
- - `Enable: list files in dirs in directory (ls)` *cmd.list_dir*
1830
+ - `Tool: list files in dirs in directory (ls)` *cmd.list_dir*
1845
1831
 
1846
1832
  Allows `mkdir` command execution. *Default:* `True`
1847
1833
 
1848
- - `Enable: downloading files` *cmd.download_file*
1834
+ - `Tool: downloading files` *cmd.download_file*
1849
1835
 
1850
1836
  Allows `download_file` command execution. *Default:* `True`
1851
1837
 
1852
- - `Enable: removing directories` *cmd.rmdir*
1838
+ - `Tool: removing directories` *cmd.rmdir*
1853
1839
 
1854
1840
  Allows `rmdir` command execution. *Default:* `True`
1855
1841
 
1856
- - `Enable: copying files` *cmd.copy_file*
1842
+ - `Tool: copying files` *cmd.copy_file*
1857
1843
 
1858
1844
  Allows `copy_file` command execution. *Default:* `True`
1859
1845
 
1860
- - `Enable: copying directories (recursive)` *cmd.copy_dir*
1846
+ - `Tool: copying directories (recursive)` *cmd.copy_dir*
1861
1847
 
1862
1848
  Allows `copy_dir` command execution. *Default:* `True`
1863
1849
 
1864
- - `Enable: move files and directories (rename)` *cmd.move*
1850
+ - `Tool: move files and directories (rename)` *cmd.move*
1865
1851
 
1866
1852
  Allows `move` command execution. *Default:* `True`
1867
1853
 
1868
- - `Enable: check if path is directory` *cmd.is_dir*
1854
+ - `Tool: check if path is directory` *cmd.is_dir*
1869
1855
 
1870
1856
  Allows `is_dir` command execution. *Default:* `True`
1871
1857
 
1872
- - `Enable: check if path is file` *cmd.is_file*
1858
+ - `Tool: check if path is file` *cmd.is_file*
1873
1859
 
1874
1860
  Allows `is_file` command execution. *Default:* `True`
1875
1861
 
1876
- - `Enable: check if file or directory exists` *cmd.file_exists*
1862
+ - `Tool: check if file or directory exists` *cmd.file_exists*
1877
1863
 
1878
1864
  Allows `file_exists` command execution. *Default:* `True`
1879
1865
 
1880
- - `Enable: get file size` *cmd.file_size*
1866
+ - `Tool: get file size` *cmd.file_size*
1881
1867
 
1882
1868
  Allows `file_size` command execution. *Default:* `True`
1883
1869
 
1884
- - `Enable: get file info` *cmd.file_info*
1870
+ - `Tool: get file info` *cmd.file_info*
1885
1871
 
1886
1872
  Allows `file_info` command execution. *Default:* `True`
1887
1873
 
1888
- - `Enable: find file or directory` *cmd.find*
1874
+ - `Tool: find file or directory` *cmd.find*
1889
1875
 
1890
1876
  Allows `find` command execution. *Default:* `True`
1891
1877
 
1892
- - `Enable: get current working directory` *cmd.cwd*
1878
+ - `Tool: get current working directory` *cmd.cwd*
1893
1879
 
1894
1880
  Allows `cwd` command execution. *Default:* `True`
1895
1881
 
1896
1882
  - `Use data loaders` *use_loaders*
1897
1883
 
1898
- Use data loaders from Llama-index for file reading (`read_file` command). *Default:* `True`
1884
+ Use data loaders from LlamaIndex for file reading (`read_file` command). *Default:* `True`
1899
1885
 
1900
1886
  **Indexing**
1901
1887
 
1902
- - `Enable: quick query the file with Llama-index` *cmd.query_file*
1888
+ - `Tool: quick query the file with LlamaIndex` *cmd.query_file*
1903
1889
 
1904
1890
  Allows `query_file` command execution (in-memory index). If enabled, model will be able to quick index file into memory and query it for data (in-memory index) *Default:* `True`
1905
1891
 
@@ -1907,9 +1893,9 @@ Allows `query_file` command execution (in-memory index). If enabled, model will
1907
1893
 
1908
1894
  Model used for query temporary index for `query_file` command (in-memory index). *Default:* `gpt-3.5-turbo`
1909
1895
 
1910
- - `Enable: indexing files to persistent index` *cmd.file_index*
1896
+ - `Tool: indexing files to persistent index` *cmd.file_index*
1911
1897
 
1912
- Allows `file_index` command execution. If enabled, model will be able to index file or directory using Llama-index (persistent index). *Default:* `True`
1898
+ Allows `file_index` command execution. If enabled, model will be able to index file or directory using LlamaIndex (persistent index). *Default:* `True`
1913
1899
 
1914
1900
  - `Index to use when indexing files` *idx*
1915
1901
 
@@ -1923,83 +1909,183 @@ If enabled, every time file is read, it will be automatically indexed (persisten
1923
1909
 
1924
1910
  If enabled, file will be indexed without return its content on file read (persistent index). *Default:* `False`
1925
1911
 
1912
+ ## System (OS)
1926
1913
 
1927
- ## Command: Web Search
1914
+ The plugin provides access to the operating system and executes system commands.
1928
1915
 
1929
- **PyGPT** lets you connect GPT to the internet and carry out web searches in real time as you make queries.
1916
+ **Options:**
1930
1917
 
1931
- To activate this feature, turn on the `Command: Web Search` plugin found in the `Plugins` menu.
1918
+ **General**
1932
1919
 
1933
- Web searches are provided by `Google Custom Search Engine` and `Microsoft Bing` APIs and can be extended with other search engine providers.
1920
+ - `Auto-append CWD to sys_exec` *auto_cwd*
1934
1921
 
1935
- **Options**
1922
+ Automatically append current working directory to `sys_exec` command. *Default:* `True`
1936
1923
 
1937
- - `Provider` *provider*
1924
+ - `Tool: sys_exec` *cmd.sys_exec*
1938
1925
 
1939
- Choose the provider. *Default:* `Google`
1926
+ Allows `sys_exec` command execution. If enabled, provides system commands execution. *Default:* `True`
1940
1927
 
1941
- Available providers:
1942
1928
 
1943
- - Google
1944
- - Microsoft Bing
1929
+ ## Mouse And Keyboard
1945
1930
 
1946
- **Google**
1931
+ Introduced in version: `2.4.4` (2024-11-09)
1947
1932
 
1948
- To use this provider, you need an API key, which you can obtain by registering an account at:
1933
+ **WARNING: Use this plugin with caution - allowing all options gives the model full control over the mouse and keyboard**
1949
1934
 
1950
- https://developers.google.com/custom-search/v1/overview
1935
+ The plugin allows for controlling the mouse and keyboard by the model. With this plugin, you can send a task to the model, e.g., "open notepad, type something in it" or "open web browser, do search, find something."
1951
1936
 
1952
- After registering an account, create a new project and select it from the list of available projects:
1937
+ Plugin capabilities include:
1953
1938
 
1954
- https://programmablesearchengine.google.com/controlpanel/all
1939
+ - Get mouse cursor position
1940
+ - Control mouse cursor position
1941
+ - Control mouse clicks
1942
+ - Control mouse scroll
1943
+ - Control the keyboard (pressing keys, typing text)
1944
+ - Making screenshots
1955
1945
 
1956
- After selecting your project, you need to enable the `Whole Internet Search` option in its settings.
1957
- Then, copy the following two items into **PyGPT**:
1946
+ The `+ Tools` option must be enabled to use this plugin.
1958
1947
 
1959
- - `Api Key`
1960
- - `CX ID`
1948
+ **Options:**
1961
1949
 
1962
- These data must be configured in the appropriate fields in the `Plugins / Settings...` menu:
1950
+ **General**
1963
1951
 
1964
- ![v2_plugin_google](https://github.com/szczyglis-dev/py-gpt/assets/61396542/f2e0df62-caaa-40ef-9b1e-239b2f912ec8)
1952
+ - `Prompt` *prompt*
1965
1953
 
1966
- - `Google Custom Search API KEY` *google_api_key*
1954
+ Prompt used to instruct how to control the mouse and keyboard.
1967
1955
 
1968
- You can obtain your own API key at https://developers.google.com/custom-search/v1/overview
1956
+ - `Enable: Allow mouse movement` *allow_mouse_move*
1969
1957
 
1970
- - `Google Custom Search CX ID` *google_api_cx*
1958
+ Allows mouse movement. *Default:* `True`
1971
1959
 
1972
- You will find your CX ID at https://programmablesearchengine.google.com/controlpanel/all - remember to enable "Search on ALL internet pages" option in project settings.
1960
+ - `Enable: Allow mouse click` *allow_mouse_click*
1973
1961
 
1974
- **Microsoft Bing**
1962
+ Allows mouse click. *Default:* `True`
1975
1963
 
1976
- - `Bing Search API KEY` *bing_api_key*
1964
+ - `Enable: Allow mouse scroll` *allow_mouse_scroll*
1977
1965
 
1978
- You can obtain your own API key at https://www.microsoft.com/en-us/bing/apis/bing-web-search-api
1966
+ Allows mouse scroll. *Default:* `True`
1979
1967
 
1980
- - `Bing Search API endpoint` *bing_endpoint*
1968
+ - `Enable: Allow keyboard key press` *allow_keyboard*
1981
1969
 
1982
- API endpoint for Bing Search API, default: https://api.bing.microsoft.com/v7.0/search
1970
+ Allows keyboard typing. *Default:* `True`
1983
1971
 
1984
- **General options**
1972
+ - `Enable: Allow making screenshots` *allow_screenshot*
1985
1973
 
1986
- - `Number of pages to search` *num_pages*
1974
+ Allows making screenshots. *Default:* `True`
1987
1975
 
1988
- Number of max pages to search per query. *Default:* `10`
1976
+ - `Tool: mouse_get_pos` *cmd.mouse_get_pos*
1989
1977
 
1990
- - `Max content characters` *max_page_content_length*
1978
+ Allows `mouse_get_pos` command execution. *Default:* `True`
1991
1979
 
1992
- Max characters of page content to get (0 = unlimited). *Default:* `0`
1980
+ - `Tool: mouse_set_pos` *cmd.mouse_set_pos*
1993
1981
 
1994
- - `Per-page content chunk size` *chunk_size*
1982
+ Allows `mouse_set_pos` command execution. *Default:* `True`
1995
1983
 
1996
- Per-page content chunk size (max characters per chunk). *Default:* `20000`
1984
+ - `Tool: make_screenshot` *cmd.make_screenshot*
1997
1985
 
1998
- - `Disable SSL verify` *disable_ssl*
1986
+ Allows `make_screenshot` command execution. *Default:* `True`
1999
1987
 
2000
- Disables SSL verification when crawling web pages. *Default:* `False`
1988
+ - `Tool: mouse_click` *cmd.mouse_click*
2001
1989
 
2002
- - `Timeout` *timeout*
1990
+ Allows `mouse_click` command execution. *Default:* `True`
1991
+
1992
+ - `Tool: mouse_move` *cmd.mouse_move*
1993
+
1994
+ Allows `mouse_move` command execution. *Default:* `True`
1995
+
1996
+ - `Tool: mouse_scroll` *cmd.mouse_scroll*
1997
+
1998
+ Allows `mouse_scroll` command execution. *Default:* `True`
1999
+
2000
+ - `Tool: keyboard_key` *cmd.keyboard_key*
2001
+
2002
+ Allows `keyboard_key` command execution. *Default:* `True`
2003
+
2004
+ - `Tool: keyboard_type` *cmd.keyboard_type*
2005
+
2006
+ Allows `keyboard_type` command execution. *Default:* `True`
2007
+
2008
+
2009
+ ## Web Search
2010
+
2011
+ **PyGPT** lets you connect GPT to the internet and carry out web searches in real time as you make queries.
2012
+
2013
+ To activate this feature, turn on the `Web Search` plugin found in the `Plugins` menu.
2014
+
2015
+ Web searches are provided by `Google Custom Search Engine` and `Microsoft Bing` APIs and can be extended with other search engine providers.
2016
+
2017
+ **Options**
2018
+
2019
+ - `Provider` *provider*
2020
+
2021
+ Choose the provider. *Default:* `Google`
2022
+
2023
+ Available providers:
2024
+
2025
+ - Google
2026
+ - Microsoft Bing
2027
+
2028
+ **Google**
2029
+
2030
+ To use this provider, you need an API key, which you can obtain by registering an account at:
2031
+
2032
+ https://developers.google.com/custom-search/v1/overview
2033
+
2034
+ After registering an account, create a new project and select it from the list of available projects:
2035
+
2036
+ https://programmablesearchengine.google.com/controlpanel/all
2037
+
2038
+ After selecting your project, you need to enable the `Whole Internet Search` option in its settings.
2039
+ Then, copy the following two items into **PyGPT**:
2040
+
2041
+ - `Api Key`
2042
+ - `CX ID`
2043
+
2044
+ These data must be configured in the appropriate fields in the `Plugins / Settings...` menu:
2045
+
2046
+ ![v2_plugin_google](https://github.com/user-attachments/assets/6a9ed44d-7a1e-45f7-a9c9-afd2b66baccc)
2047
+
2048
+ - `Google Custom Search API KEY` *google_api_key*
2049
+
2050
+ You can obtain your own API key at https://developers.google.com/custom-search/v1/overview
2051
+
2052
+ - `Google Custom Search CX ID` *google_api_cx*
2053
+
2054
+ You will find your CX ID at https://programmablesearchengine.google.com/controlpanel/all - remember to enable "Search on ALL internet pages" option in project settings.
2055
+
2056
+ **Microsoft Bing**
2057
+
2058
+ - `Bing Search API KEY` *bing_api_key*
2059
+
2060
+ You can obtain your own API key at https://www.microsoft.com/en-us/bing/apis/bing-web-search-api
2061
+
2062
+ - `Bing Search API endpoint` *bing_endpoint*
2063
+
2064
+ API endpoint for Bing Search API, default: https://api.bing.microsoft.com/v7.0/search
2065
+
2066
+ **General options**
2067
+
2068
+ - `Number of pages to search` *num_pages*
2069
+
2070
+ Number of max pages to search per query. *Default:* `10`
2071
+
2072
+ - `Max content characters` *max_page_content_length*
2073
+
2074
+ Max characters of page content to get (0 = unlimited). *Default:* `0`
2075
+
2076
+ - `Per-page content chunk size` *chunk_size*
2077
+
2078
+ Per-page content chunk size (max characters per chunk). *Default:* `20000`
2079
+
2080
+ - `Disable SSL verify` *disable_ssl*
2081
+
2082
+ Disables SSL verification when crawling web pages. *Default:* `False`
2083
+
2084
+ - `Use raw content (without summarization)` *raw*
2085
+
2086
+ Return raw content from web search instead of summarized content. Provides more data but consumes more tokens. *Default:* `True`
2087
+
2088
+ - `Timeout` *timeout*
2003
2089
 
2004
2090
  Connection timeout (seconds). *Default:* `5`
2005
2091
 
@@ -2009,47 +2095,41 @@ User agent to use when making requests. *Default:* `Mozilla/5.0`.
2009
2095
 
2010
2096
  - `Max result length` *max_result_length*
2011
2097
 
2012
- Max length of summarized result (characters). *Default:* `1500`
2098
+ Max length of the summarized or raw result (characters). *Default:* `50000`
2013
2099
 
2014
2100
  - `Max summary tokens` *summary_max_tokens*
2015
2101
 
2016
2102
  Max tokens in output when generating summary. *Default:* `1500`
2017
2103
 
2018
- - `Enable: search the Web` *cmd.web_search*
2104
+ - `Tool: web_search` *cmd.web_search*
2019
2105
 
2020
2106
  Allows `web_search` command execution. If enabled, model will be able to search the Web. *Default:* `True`
2021
2107
 
2022
- - `Enable: opening URLs` *cmd.web_url_open*
2108
+ - `Tool: web_url_open` *cmd.web_url_open*
2023
2109
 
2024
2110
  Allows `web_url_open` command execution. If enabled, model will be able to open specified URL and summarize content. *Default:* `True`
2025
2111
 
2026
- - `Enable: reading the raw content from URLs` *cmd.web_url_raw*
2112
+ - `Tool: web_url_raw` *cmd.web_url_raw*
2027
2113
 
2028
2114
  Allows `web_url_raw` command execution. If enabled, model will be able to open specified URL and get the raw content. *Default:* `True`
2029
2115
 
2030
- - `Enable: getting a list of URLs from search results` *cmd.web_urls*
2031
-
2032
- Allows `web_urls` command execution. If enabled, model will be able to search the Web and get founded URLs list. *Default:* `True`
2033
-
2034
- - `Enable: indexing web and external content` *cmd.web_index*
2035
-
2036
- Allows `web_index` command execution. If enabled, model will be able to index pages and external content using Llama-index (persistent index). *Default:* `True`
2116
+ - `Tool: web_request` *cmd.web_request*
2037
2117
 
2038
- - `Enable: quick query the web and external content` *cmd.web_index_query*
2118
+ Allows `web_request` command execution. If enabled, model will be able to send any HTTP request to specified URL or API endpoint. *Default:* `True`
2039
2119
 
2040
- Allows `web_index_query` command execution. If enabled, model will be able to quick index and query web content using Llama-index (in-memory index). *Default:* `True`
2120
+ - `Tool: web_extract_links` *cmd.web_extract_links*
2041
2121
 
2042
- - `Auto-index all used URLs using Llama-index` *auto_index*
2122
+ Allows `web_extract_links` command execution. If enabled, model will be able to open URL and get list of all links from it. *Default:* `True`
2043
2123
 
2044
- If enabled, every URL used by the model will be automatically indexed using Llama-index (persistent index). *Default:* `False`
2124
+ - `Tool: web_extract_images` *cmd.web_extract_images*
2045
2125
 
2046
- - `Index to use` *idx*
2126
+ Allows `web_extract_images` command execution. If enabled, model will be able to open URL and get list of all images from it.. *Default:* `True`
2047
2127
 
2048
- ID of index to use for web page indexing (persistent index). *Default:* `base`
2128
+ **Advanced**
2049
2129
 
2050
2130
  - `Model used for web page summarize` *summary_model*
2051
2131
 
2052
- Model used for web page summarize. *Default:* `gpt-3.5-turbo-1106`
2132
+ Model used for web page summarize. *Default:* `gpt-4o-mini`
2053
2133
 
2054
2134
  - `Summarize prompt` *prompt_summarize*
2055
2135
 
@@ -2059,7 +2139,25 @@ Prompt used for web search results summarize, use {query} as a placeholder for s
2059
2139
 
2060
2140
  Prompt used for specified URL page summarize.
2061
2141
 
2062
- ## Command: Serial port / USB
2142
+ **Indexing**
2143
+
2144
+ - `Tool: web_index` *cmd.web_index*
2145
+
2146
+ Allows `web_index` command execution. If enabled, model will be able to index pages and external content using LlamaIndex (persistent index). *Default:* `True`
2147
+
2148
+ - `Tool: web_index_query` *cmd.web_index_query*
2149
+
2150
+ Allows `web_index_query` command execution. If enabled, model will be able to quick index and query web content using LlamaIndex (in-memory index). *Default:* `True`
2151
+
2152
+ - `Auto-index all used URLs using LlamaIndex` *auto_index*
2153
+
2154
+ If enabled, every URL used by the model will be automatically indexed using LlamaIndex (persistent index). *Default:* `False`
2155
+
2156
+ - `Index to use` *idx*
2157
+
2158
+ ID of index to use for web page indexing (persistent index). *Default:* `base`
2159
+
2160
+ ## Serial port / USB
2063
2161
 
2064
2162
  Provides commands for reading and sending data to USB ports.
2065
2163
 
@@ -2106,15 +2204,15 @@ Timeout in seconds. *Default:* `1`
2106
2204
 
2107
2205
  Sleep in seconds after connection *Default:* `2`
2108
2206
 
2109
- - `Enable: Send text commands to USB port` *cmd.serial_send*
2207
+ - `Tool: Send text commands to USB port` *cmd.serial_send*
2110
2208
 
2111
2209
  Allows `serial_send` command execution. *Default:* `True`
2112
2210
 
2113
- - `Enable: Send raw bytes to USB port` *cmd.serial_send_bytes*
2211
+ - `Tool: Send raw bytes to USB port` *cmd.serial_send_bytes*
2114
2212
 
2115
2213
  Allows `serial_send_bytes` command execution. *Default:* `True`
2116
2214
 
2117
- - `Enable: Read data from USB port` *cmd.serial_read*
2215
+ - `Tool: Read data from USB port` *cmd.serial_read*
2118
2216
 
2119
2217
  Allows `serial_read` command execution. *Default:* `True`
2120
2218
 
@@ -2137,7 +2235,7 @@ Examples of use, you can ask e.g. for the following:
2137
2235
 
2138
2236
  etc.
2139
2237
 
2140
- From version `2.0.147` it is possible to use `@` ID tags to automatically use summary of previous contexts in current discussion.
2238
+ You can also use `@` ID tags to automatically use summary of previous contexts in current discussion.
2141
2239
  To use context from previous discussion with specified ID use following syntax in your query:
2142
2240
 
2143
2241
  ```@123```
@@ -2153,31 +2251,31 @@ Where `123` is the ID of previous context (conversation) in database, example of
2153
2251
 
2154
2252
  When enabled, it allows to automatically retrieve context history using @ tags, e.g. use @123 in question to use summary of context with ID 123 as additional context. *Default:* `False`
2155
2253
 
2156
- - `Enable: get date range context list` *cmd.get_ctx_list_in_date_range*
2254
+ - `Tool: get date range context list` *cmd.get_ctx_list_in_date_range*
2157
2255
 
2158
2256
  Allows `get_ctx_list_in_date_range` command execution. If enabled, it allows getting the list of context history (previous conversations). *Default:* `True
2159
2257
 
2160
- - `Enable: get context content by ID` *cmd.get_ctx_content_by_id*
2258
+ - `Tool: get context content by ID` *cmd.get_ctx_content_by_id*
2161
2259
 
2162
2260
  Allows `get_ctx_content_by_id` command execution. If enabled, it allows getting summarized content of context with defined ID. *Default:* `True`
2163
2261
 
2164
- - `Enable: count contexts in date range` *cmd.count_ctx_in_date*
2262
+ - `Tool: count contexts in date range` *cmd.count_ctx_in_date*
2165
2263
 
2166
2264
  Allows `count_ctx_in_date` command execution. If enabled, it allows counting contexts in date range. *Default:* `True`
2167
2265
 
2168
- - `Enable: get day note` *cmd.get_day_note*
2266
+ - `Tool: get day note` *cmd.get_day_note*
2169
2267
 
2170
2268
  Allows `get_day_note` command execution. If enabled, it allows retrieving day note for specific date. *Default:* `True`
2171
2269
 
2172
- - `Enable: add day note` *cmd.add_day_note*
2270
+ - `Tool: add day note` *cmd.add_day_note*
2173
2271
 
2174
2272
  Allows `add_day_note` command execution. If enabled, it allows adding day note for specific date. *Default:* `True`
2175
2273
 
2176
- - `Enable: update day note` *cmd.update_day_note*
2274
+ - `Tool: update day note` *cmd.update_day_note*
2177
2275
 
2178
2276
  Allows `update_day_note` command execution. If enabled, it allows updating day note for specific date. *Default:* `True`
2179
2277
 
2180
- - `Enable: remove day note` *cmd.remove_day_note*
2278
+ - `Tool: remove day note` *cmd.remove_day_note*
2181
2279
 
2182
2280
  Allows `remove_day_note` command execution. If enabled, it allows removing day note for specific date. *Default:* `True`
2183
2281
 
@@ -2235,7 +2333,7 @@ If enabled, then a tray notification will be shown on every run of the job. *Def
2235
2333
 
2236
2334
  ## DALL-E 3: Image Generation (inline)
2237
2335
 
2238
- The plugin integrates `DALL-E 3` image generation with any chat mode. Simply enable it and request an image in Chat mode, using a standard model such as `GPT-4`. The plugin does not require the `Execute commands` option to be enabled.
2336
+ The plugin integrates `DALL-E 3` image generation with any chat mode. Simply enable it and request an image in Chat mode, using a standard model such as `GPT-4`. The plugin does not require the `+ Tools` option to be enabled.
2239
2337
 
2240
2338
  **Options**
2241
2339
 
@@ -2243,6 +2341,12 @@ The plugin integrates `DALL-E 3` image generation with any chat mode. Simply ena
2243
2341
 
2244
2342
  The prompt is used to generate a query for the `DALL-E` image generation model, which runs in the background.
2245
2343
 
2344
+ ## Experts (inline)
2345
+
2346
+ The plugin allows calling experts in any chat mode. This is the inline Experts (co-op) mode.
2347
+
2348
+ See the `Work modes -> Experts` section for more details.
2349
+
2246
2350
  ## GPT-4 Vision (inline)
2247
2351
 
2248
2352
  The plugin integrates vision capabilities across all chat modes, not just Vision mode. Once enabled, it allows the model to seamlessly switch to vision processing in the background whenever an image attachment or vision capture is detected.
@@ -2263,13 +2367,56 @@ The prompt used for vision mode. It will append or replace current system prompt
2263
2367
 
2264
2368
  Replace whole system prompt with vision prompt against appending it to the current prompt. *Default:* `False`
2265
2369
 
2266
- - `Enable: capturing images from camera` *cmd.camera_capture*
2370
+ - `Tool: capturing images from camera` *cmd.camera_capture*
2371
+
2372
+ Allows `capture` command execution. If enabled, model will be able to capture images from camera itself. The `+ Tools` option must be enabled. *Default:* `False`
2373
+
2374
+ - `Tool: making screenshots` *cmd.make_screenshot*
2375
+
2376
+ Allows `screenshot` command execution. If enabled, model will be able to making screenshots itself. The `+ Tools` option must be enabled. *Default:* `False`
2377
+
2378
+ ## Mailer
2379
+
2380
+ Enables the sending, receiving, and reading of emails from the inbox. Currently, only SMTP is supported. More options coming soon.
2381
+
2382
+ **Options**
2383
+
2384
+ - `From (email)` *from_email*
2385
+
2386
+ From (email), e.g. me@domain.com
2387
+
2388
+ - `Tool: send_mail` *cmd.send_mail*
2389
+
2390
+ Allows `send_mail` command execution. If enabled, model will be able to sending emails.
2391
+
2392
+ - `Tool: receive_emails` *cmd.receive_emails*
2393
+
2394
+ Allows `receive_emails` command execution. If enabled, model will be able to receive emails from the server.
2395
+
2396
+ - `Tool: get_email_body` *cmd.get_email_body*
2397
+
2398
+ Allows `get_email_body` command execution. If enabled, model will be able to receive message body from the server.
2399
+
2400
+ - `SMTP Host` *smtp_host*
2401
+
2402
+ SMTP Host, e.g. smtp.domain.com
2403
+
2404
+ - `SMTP Port (Inbox)` *smtp_port_inbox*
2405
+
2406
+ SMTP Port, default: 995
2407
+
2408
+ - `SMTP Port (Outbox)` *smtp_port_outbox*
2409
+
2410
+ SMTP Port, default: 465
2411
+
2412
+ - `SMTP User` *smtp_user*
2413
+
2414
+ SMTP User, e.g. user@domain.com
2267
2415
 
2268
- Allows `capture` command execution. If enabled, model will be able to capture images from camera itself. The `Execute commands` option must be enabled. *Default:* `False`
2416
+ - `SMTP Password` *smtp_password*
2269
2417
 
2270
- - `Enable: making screenshots` *cmd.make_screenshot*
2418
+ SMTP Password.
2271
2419
 
2272
- Allows `screenshot` command execution. If enabled, model will be able to making screenshots itself. The `Execute commands` option must be enabled. *Default:* `False`
2273
2420
 
2274
2421
  ## Real Time
2275
2422
 
@@ -2306,325 +2453,354 @@ List of extra prompts - prompts that will be appended to system prompt.
2306
2453
  All active extra prompts defined on list will be appended to the system prompt in the order they are listed here.
2307
2454
 
2308
2455
 
2456
+ ## Voice Control (inline)
2457
+
2458
+ The plugin provides voice control command execution within a conversation.
2459
+
2460
+ See the ``Accessibility`` section for more details.
2461
+
2462
+
2309
2463
  # Creating Your Own Plugins
2310
2464
 
2311
2465
  You can create your own plugin for **PyGPT** at any time. The plugin can be written in Python and then registered with the application just before launching it. All plugins included with the app are stored in the `plugin` directory - you can use them as coding examples for your own plugins.
2312
2466
 
2313
2467
  PyGPT can be extended with:
2314
2468
 
2315
- - Custom plugins
2469
+ - custom models
2316
2470
 
2317
- - Custom LLMs wrappers
2471
+ - custom plugins
2318
2472
 
2319
- - Custom vector store providers
2473
+ - custom LLMs wrappers
2320
2474
 
2321
- - Custom data loaders
2475
+ - custom vector store providers
2322
2476
 
2323
- - Custom audio input providers
2477
+ - custom data loaders
2324
2478
 
2325
- - Custom audio output providers
2479
+ - custom audio input providers
2326
2480
 
2327
- - Custom web search engine providers
2481
+ - custom audio output providers
2328
2482
 
2483
+ - custom web search engine providers
2329
2484
 
2330
- **Examples (tutorial files)**
2331
2485
 
2332
- See the `examples` directory in this repository with examples of custom launcher, plugin, vector store, LLM (Langchain and Llama-index) provider and data loader:
2486
+ See the section `Extending PyGPT / Adding a custom plugin` for more details.
2333
2487
 
2334
- - `examples/custom_launcher.py`
2488
+ # Functions and commands execution
2335
2489
 
2336
- - `examples/example_audio_input.py`
2490
+ **Tip** remember to enable the `+ Tools` checkbox to enable execution of tools and commands from plugins.
2337
2491
 
2338
- - `examples/example_audio_output.py`
2492
+ From version `2.2.20` PyGPT uses native API function calls by default. You can go back to internal syntax (described below) by switching off option `Config -> Settings -> Prompts -> Use native API function calls`. Native API function calls are available in Chat, Completion and Assistant modes only (using OpenAI API).
2339
2493
 
2340
- - `examples/example_data_loader.py`
2494
+ In background, **PyGPT** uses an internal syntax to define commands and their parameters, which can then be used by the model and executed on the application side or even directly in the system. This syntax looks as follows (example command below):
2341
2495
 
2342
- - `examples/example_llm.py`
2496
+ ```~###~{"cmd": "send_email", "params": {"quote": "Why don't skeletons fight each other? They don't have the guts!"}}~###~```
2343
2497
 
2344
- - `examples/example_plugin.py`
2498
+ It is a JSON object wrapped between `~###~`. The application extracts the JSON object from such formatted text and executes the appropriate function based on the provided parameters and command name. Many of these types of commands are defined in plugins (e.g., those used for file operations or internet searches). You can also define your own commands using the `Custom Commands` plugin, or simply by creating your own plugin and adding it to the application.
2345
2499
 
2346
- - `examples/example_vector_store.py`
2500
+ **Tip:** The `+ Tools` option checkbox must be enabled to allow the execution of commands from plugins. Disable the option if you do not want to use commands, to prevent additional token usage (as the command execution system prompt consumes additional tokens).
2347
2501
 
2348
- - `examples/example_web_search.py`
2502
+ ![v2_code_execute](https://github.com/user-attachments/assets/0b96b362-52ca-4928-9675-a39038d787a1)
2349
2503
 
2350
- These example files can be used as a starting point for creating your own extensions for **PyGPT**.
2504
+ When native API function calls are disabled, a special system prompt responsible for invoking commands is added to the main system prompt if the `+ Tools` option is active.
2351
2505
 
2352
- Extending PyGPT with custom plugins, LLMs wrappers and vector stores:
2506
+ However, there is an additional possibility to define your own commands and execute them with the help of GPT.
2507
+ These are functions - defined on the OpenAI API side and described using JSON objects. You can find a complete guide on how to define functions here:
2353
2508
 
2354
- - You can pass custom plugin instances, LLMs wrappers and vector store providers to the launcher.
2509
+ https://platform.openai.com/docs/guides/function-calling
2355
2510
 
2356
- - This is useful if you want to extend PyGPT with your own plugins, vectors storage and LLMs.
2511
+ https://cookbook.openai.com/examples/how_to_call_functions_with_chat_models
2357
2512
 
2358
- To register custom plugins:
2513
+ PyGPT offers compatibility of these functions with commands used in the application. All you need to do is define the appropriate functions using the syntax required by OpenAI, and PyGPT will do the rest, translating such syntax on the fly into its own internal format.
2359
2514
 
2360
- - Pass a list with the plugin instances as `plugins` keyword argument.
2515
+ You can define functions for modes: `Chat` and `Assistants`.
2516
+ Note that - in Chat mode, they should be defined in `Presets`, and for Assistants, in the `Assistant` settings.
2361
2517
 
2362
- To register custom LLMs wrappers:
2518
+ **Example of usage:**
2363
2519
 
2364
- - Pass a list with the LLMs wrappers instances as `llms` keyword argument.
2520
+ 1) Chat
2365
2521
 
2366
- To register custom vector store providers:
2522
+ Create a new Preset, open the Preset edit dialog and add a new function using `+ Function` button with the following content:
2367
2523
 
2368
- - Pass a list with the vector store provider instances as `vector_stores` keyword argument.
2524
+ **Name:** `send_email`
2369
2525
 
2370
- To register custom data loaders:
2526
+ **Description:** `Sends a quote using email`
2371
2527
 
2372
- - Pass a list with the data loader instances as `loaders` keyword argument.
2528
+ **Params (JSON):**
2373
2529
 
2374
- To register custom audio input providers:
2530
+ ```json
2531
+ {
2532
+ "type": "object",
2533
+ "properties": {
2534
+ "quote": {
2535
+ "type": "string",
2536
+ "description": "A generated funny quote"
2537
+ }
2538
+ },
2539
+ "required": [
2540
+ "quote"
2541
+ ]
2542
+ }
2543
+ ```
2375
2544
 
2376
- - Pass a list with the audio input provider instances as `audio_input` keyword argument.
2545
+ Then, in the `Custom Commands` plugin, create a new command with the same name and the same parameters:
2377
2546
 
2378
- To register custom audio output providers:
2547
+ **Command name:** `send_email`
2379
2548
 
2380
- - Pass a list with the audio output provider instances as `audio_output` keyword argument.
2549
+ **Instruction/prompt:** `send mail` *(don't needed, because it will be called on OpenAI side)*
2381
2550
 
2382
- To register custom web providers:
2551
+ **Params list:** `quote`
2383
2552
 
2384
- - Pass a list with the web provider instances as `web` keyword argument.
2553
+ **Command to execute:** `echo "OK. Email sent: {quote}"`
2385
2554
 
2386
- **Example:**
2555
+ At next, enable the `+ Tools` option and enable the plugin.
2387
2556
 
2557
+ Ask GPT in Chat mode:
2388
2558
 
2389
- ```python
2390
- # custom_launcher.py
2559
+ ```Create a funny quote and email it```
2391
2560
 
2392
- from pygpt_net.app import run
2393
- from plugins import CustomPlugin, OtherCustomPlugin
2394
- from llms import CustomLLM
2395
- from vector_stores import CustomVectorStore
2561
+ In response you will receive prepared command, like this:
2396
2562
 
2397
- plugins = [
2398
- CustomPlugin(),
2399
- OtherCustomPlugin(),
2400
- ]
2401
- llms = [
2402
- CustomLLM(),
2403
- ]
2404
- vector_stores = [
2405
- CustomVectorStore(),
2406
- ]
2563
+ ```~###~{"cmd": "send_email", "params": {"quote": "Why do we tell actors to 'break a leg?' Because every play has a cast!"}}~###~```
2407
2564
 
2408
- run(
2409
- plugins=plugins,
2410
- llms=llms,
2411
- vector_stores=vector_stores
2412
- )
2413
- ```
2565
+ After receiving this, PyGPT will execute the system `echo` command with params given from `params` field and replacing `{quote}` placeholder with `quote` param value.
2414
2566
 
2415
- ## Handling events
2567
+ As a result, response like this will be sent to the model:
2416
2568
 
2417
- In the plugin, you can receive and modify dispatched events.
2418
- To do this, create a method named `handle(self, event, *args, **kwargs)` and handle the received events like here:
2569
+ ```[{"request": {"cmd": "send_email"}, "result": "OK. Email sent: Why do we tell actors to 'break a leg?' Because every play has a cast!"}]```
2419
2570
 
2420
- ```python
2421
- # custom_plugin.py
2422
2571
 
2423
- from pygpt_net.core.dispatcher import Event
2572
+ 2) Assistant
2424
2573
 
2574
+ In this mode (via Assistants API), it should be done similarly, with the difference that here the functions should be defined in the assistant's settings.
2425
2575
 
2426
- def handle(self, event: Event, *args, **kwargs):
2427
- """
2428
- Handle dispatched events
2576
+ With this flow you can use both forms - OpenAI and PyGPT - to define and execute commands and functions in the application. They will cooperate with each other and you can use them interchangeably.
2429
2577
 
2430
- :param event: event object
2431
- """
2432
- name = event.name
2433
- data = event.data
2434
- ctx = event.ctx
2578
+ # Tools
2435
2579
 
2436
- if name == Event.INPUT_BEFORE:
2437
- self.some_method(data['value'])
2438
- elif name == Event.CTX_BEGIN:
2439
- self.some_other_method(ctx)
2440
- else:
2441
- # ...
2442
- ```
2580
+ PyGPT features several useful tools, including:
2443
2581
 
2444
- **List of Events**
2582
+ - Notepad
2583
+ - Painter
2584
+ - Calendar
2585
+ - Indexer
2586
+ - Media Player
2587
+ - Image viewer
2588
+ - Text editor
2589
+ - Transcribe audio/video files
2590
+ - Python Code Interpreter
2591
+ - HTML/JS Canvas (built-in HTML renderer)
2445
2592
 
2446
- Event names are defined in `Event` class in `pygpt_net.core.dispatcher.Event`.
2593
+ ![v2_tool_menu](https://github.com/user-attachments/assets/c8041cdc-64fd-41a5-b1af-8c987b06e5f0)
2447
2594
 
2448
- Syntax: `event name` - triggered on, `event data` *(data type)*:
2449
2595
 
2450
- - `AI_NAME` - when preparing an AI name, `data['value']` *(string, name of the AI assistant)*
2596
+ ## Notepad
2451
2597
 
2452
- - `AUDIO_INPUT_STOP` - force stop audio input
2598
+ The application has a built-in notepad, divided into several tabs. This can be useful for storing information in a convenient way, without the need to open an external text editor. The content of the notepad is automatically saved whenever the content changes.
2453
2599
 
2454
- - `AUDIO_INPUT_TOGGLE` - when speech input is enabled or disabled, `data['value']` *(bool, True/False)*
2600
+ ![v2_notepad](https://github.com/szczyglis-dev/py-gpt/assets/61396542/f6aa0126-bad1-4e6c-ace6-72e979186433)
2455
2601
 
2456
- - `AUDIO_OUTPUT_STOP` - force stop audio output
2602
+ ## Painter
2457
2603
 
2458
- - `AUDIO_OUTPUT_TOGGLE` - when speech output is enabled or disabled, `data['value']` *(bool, True/False)*
2604
+ Using the `Painter` tool, you can create quick sketches and submit them to the model for analysis. You can also edit opened from disk or captured from camera images, for example, by adding elements like arrows or outlines to objects. Additionally, you can capture screenshots from the system - the captured image is placed in the drawing tool and attached to the query being sent.
2459
2605
 
2460
- - `AUDIO_READ_TEXT` - on text read with speech synthesis, `data['value']` *(str)*
2606
+ ![v2_draw](https://github.com/szczyglis-dev/py-gpt/assets/61396542/09c1de36-1241-4330-9fd7-67c6e09888fa)
2461
2607
 
2462
- - `CMD_EXECUTE` - when a command is executed, `data['commands']` *(list, commands and arguments)*
2608
+ To capture the screenshot just click on the `Ask with screenshot` option in a tray-icon dropdown:
2463
2609
 
2464
- - `CMD_INLINE` - when an inline command is executed, `data['commands']` *(list, commands and arguments)*
2610
+ ![v2_screenshot](https://github.com/szczyglis-dev/py-gpt/assets/61396542/7305a814-ca76-4f8f-8908-47f6a9496fa5)
2465
2611
 
2466
- - `CMD_SYNTAX` - when appending syntax for commands, `data['prompt'], data['syntax']` *(string, list, prompt and list with commands usage syntax)*
2612
+ ## Calendar
2467
2613
 
2468
- - `CMD_SYNTAX_INLINE` - when appending syntax for commands (inline mode), `data['prompt'], data['syntax']` *(string, list, prompt and list with commands usage syntax)*
2469
-
2470
- - `CTX_AFTER` - after the context item is sent, `ctx`
2471
-
2472
- - `CTX_BEFORE` - before the context item is sent, `ctx`
2473
-
2474
- - `CTX_BEGIN` - when context item create, `ctx`
2475
-
2476
- - `CTX_END` - when context item handling is finished, `ctx`
2477
-
2478
- - `CTX_SELECT` - when context is selected on list, `data['value']` *(int, ctx meta ID)*
2479
-
2480
- - `DISABLE` - when the plugin is disabled, `data['value']` *(string, plugin ID)*
2481
-
2482
- - `ENABLE` - when the plugin is enabled, `data['value']` *(string, plugin ID)*
2614
+ Using the calendar, you can go back to selected conversations from a specific day and add daily notes. After adding a note, it will be marked on the list, and you can change the color of its label by right-clicking and selecting `Set label color`. By clicking on a particular day of the week, conversations from that day will be displayed.
2483
2615
 
2484
- - `FORCE_STOP` - on force stop plugins
2616
+ ![v2_calendar](https://github.com/szczyglis-dev/py-gpt/assets/61396542/c7d17375-b61f-452c-81bc-62a7d466fc18)
2485
2617
 
2486
- - `INPUT_BEFORE` - upon receiving input from the textarea, `data['value']` *(string, text to be sent)*
2487
2618
 
2488
- - `MODE_BEFORE` - before the mode is selected `data['value'], data['prompt']` *(string, string, mode ID)*
2619
+ ## Indexer
2489
2620
 
2490
- - `MODE_SELECT` - on mode select `data['value']` *(string, mode ID)*
2491
2621
 
2492
- - `MODEL_BEFORE` - before the model is selected `data['value']` *(string, model ID)*
2622
+ This tool allows indexing of local files or directories and external web content to a vector database, which can then be used with the `Chat with Files` mode. Using this tool, you can manage local indexes and add new data with built-in `LlamaIndex` integration.
2493
2623
 
2494
- - `MODEL_SELECT` - on model select `data['value']` *(string, model ID)*
2624
+ ![v2_tool_indexer](https://github.com/szczyglis-dev/py-gpt/assets/61396542/1caeab6e-6119-44e2-a7cb-ed34f8fe9e30)
2495
2625
 
2496
- - `PLUGIN_SETTINGS_CHANGED` - on plugin settings update
2626
+ ## Media Player
2497
2627
 
2498
- - `PLUGIN_OPTION_GET` - on request for plugin option value `data['name'], data['value']` *(string, any, name of requested option, value)*
2499
2628
 
2500
- - `POST_PROMPT` - after preparing a system prompt, `data['value']` *(string, system prompt)*
2629
+ A simple video/audio player that allows you to play video files directly from within the app.
2501
2630
 
2502
- - `PRE_PROMPT` - before preparing a system prompt, `data['value']` *(string, system prompt)*
2503
2631
 
2504
- - `SYSTEM_PROMPT` - when preparing a system prompt, `data['value']` *(string, system prompt)*
2632
+ ## Image Viewer
2505
2633
 
2506
- - `UI_ATTACHMENTS` - when the attachment upload elements are rendered, `data['value']` *(bool, show True/False)*
2507
2634
 
2508
- - `UI_VISION` - when the vision elements are rendered, `data['value']` *(bool, show True/False)*
2635
+ A simple image browser that lets you preview images directly within the app.
2509
2636
 
2510
- - `USER_NAME` - when preparing a user's name, `data['value']` *(string, name of the user)*
2511
2637
 
2512
- - `USER_SEND` - just before the input text is sent, `data['value']` *(string, input text)*
2638
+ ## Text Editor
2513
2639
 
2514
2640
 
2515
- You can stop the propagation of a received event at any time by setting `stop` to `True`:
2641
+ A simple text editor that enables you to edit text files directly within the app.
2516
2642
 
2517
- ```
2518
- event.stop = True
2519
- ```
2520
2643
 
2521
- # Functions and commands execute
2644
+ ## Transcribe Audio/Video Files
2522
2645
 
2523
- **Tip:** `gpt-4-1106-preview` is the best model to use for command handling, The `gpt-4-turbo-preview` model can sometimes refuse to execute commands.
2524
2646
 
2525
- **PyGPT** uses an internal syntax to define commands and their parameters, which can then be used by the model and executed on the application side or even directly in the system. This syntax looks as follows (example command below):
2647
+ An audio transcription tool with which you can prepare a transcript from a video or audio file. It will use a speech recognition plugin to generate the text from the file.
2526
2648
 
2527
- ```~###~{"cmd": "send_email", "params": {"quote": "Why don't skeletons fight each other? They don't have the guts!"}}~###~```
2528
2649
 
2529
- It is JSON wrapped between `~###~`. The application extracts the JSON object from such formatted text and executes the appropriate function based on the provided parameters and command name. Many of these types of commands are defined in plugins (e.g., those used for file operations or internet searches). You can also define your own commands using the `Custom Commands` plugin, or simply by creating your own plugin and adding it to the application.
2650
+ ## Python Code Interpreter
2530
2651
 
2531
- **Tip:** The `Execute commands` option checkbox must be enabled to allow the execution of commands from plugins. Disable the option if you do not want to use commands, to prevent additional token usage (as the command execution system prompt consumes additional tokens).
2532
2652
 
2533
- ![v2_code_execute](https://github.com/szczyglis-dev/py-gpt/assets/61396542/d5181eeb-6ab4-426f-93f0-037d256cb078)
2653
+ This tool allows you to run Python code directly from within the app. It is integrated with the `Code Interpreter` plugin, ensuring that code generated by the model is automatically available from the interpreter. In the plugin settings, you can enable the execution of code in a Docker environment.
2534
2654
 
2535
- A special system prompt responsible for invoking commands is added to the main system prompt if the `Execute commands` option is active.
2655
+ ## HTML/JS Canvas
2536
2656
 
2537
- However, there is an additional possibility to define your own commands and execute them with the help of GPT.
2538
- These are functions - defined on the OpenAI API side and described using JSON objects. You can find a complete guide on how to define functions here:
2657
+ Allows to render HTML/JS code in HTML Canvas (built-in renderer based on Chromium). To use it, just ask the model to render the HTML/JS code in built-in browser (HTML Canvas). Tool is integrated with the `Code Interpreter` plugin.
2539
2658
 
2540
- https://platform.openai.com/docs/guides/function-calling
2541
2659
 
2542
- https://cookbook.openai.com/examples/how_to_call_functions_with_chat_models
2660
+ # Token usage calculation
2543
2661
 
2662
+ ## Input tokens
2544
2663
 
2545
- From version **2.0.150**, PyGPT offers compatibility of these functions with commands used in the application. All you need to do is define the appropriate functions using the syntax required by OpenAI, and PyGPT will do the rest, translating such syntax on the fly into its own internal format.
2664
+ The application features a token calculator. It attempts to forecast the number of tokens that
2665
+ a particular query will consume and displays this estimate in real time. This gives you improved
2666
+ control over your token usage. The app provides detailed information about the tokens used for the user's prompt,
2667
+ the system prompt, any additional data, and those used within the context (the memory of previous entries).
2546
2668
 
2547
- You can define functions for modes: `Chat` and `Assistants`.
2548
- Note that - in Chat mode, they should be defined in `Presets`, and for Assistants, in the `Assistant` settings.
2669
+ **Remember that these are only approximate calculations and do not include, for example, the number of tokens consumed by some plugins. You can find the exact number of tokens used on the OpenAI website.**
2549
2670
 
2550
- **Example of usage:**
2671
+ ![v2_tokens1](https://github.com/user-attachments/assets/e131a880-986d-4014-b5fd-9820516c6a10)
2551
2672
 
2552
- 1) Chat
2673
+ ## Total tokens
2553
2674
 
2554
- Create a new Preset, open the Preset edit dialog and add a new function using `+ Function` button with the following content:
2675
+ After receiving a response from the model, the application displays the actual total number of tokens used for the query (received from the API).
2555
2676
 
2556
- **Name:** `send_email`
2677
+ ![v2_tokens2](https://github.com/user-attachments/assets/52cd355f-c7b0-432b-9ff9-31c8a6a60b89)
2557
2678
 
2558
- **Description:** `Sends a quote using email`
2559
2679
 
2560
- **Params (JSON):**
2680
+ # Accessibility
2561
2681
 
2562
- ```json
2563
- {
2564
- "type": "object",
2565
- "properties": {
2566
- "quote": {
2567
- "type": "string",
2568
- "description": "A generated funny quote"
2569
- }
2570
- },
2571
- "required": [
2572
- "quote"
2573
- ]
2574
- }
2575
- ```
2682
+ Since version `2.2.8`, PyGPT has added beta support for disabled people and voice control. This may be very useful for blind people.
2576
2683
 
2577
- Then, in the `Custom Commands` plugin, create a new command with the same name and the same parameters:
2684
+ In the `Config / Accessibility` menu, you can turn on accessibility features such as:
2578
2685
 
2579
- **Command name:** `send_email`
2580
2686
 
2581
- **Instruction/prompt:** `send mail` *(don't needed, because it will be called on OpenAI side)*
2687
+ - activating voice control
2582
2688
 
2583
- **Params list:** `quote`
2689
+ - translating actions and events on the screen with audio speech
2584
2690
 
2585
- **Command to execute:** `echo "OK. Email sent: {quote}"`
2691
+ - setting up keyboard shortcuts for actions.
2586
2692
 
2587
- At next, enable the `Execute commands` option and enable the plugin.
2588
2693
 
2589
- Ask GPT in Chat mode:
2694
+ **Using voice control**
2590
2695
 
2591
- ```Create a funny quote and email it```
2696
+ Voice control can be turned on in two ways: globally, through settings in `Config -> Accessibility`, and by using the `Voice control (inline)` plugin. Both options let you use the same voice commands, but they work a bit differently - the global option allows you to run commands outside of a conversation, anywhere, while the plugin option lets you execute commands directly during a conversation – allowing you to interact with the model and execute commands at the same time, within the conversation.
2592
2697
 
2593
- In response you will receive prepared command, like this:
2698
+ In the plugin (inline) option, you can also turn on a special trigger word that will be needed for content to be recognized as a voice command. You can set this up by going to `Plugins -> Settings -> Voice Control (inline)`:
2594
2699
 
2595
- ```~###~{"cmd": "send_email", "params": {"quote": "Why do we tell actors to 'break a leg?' Because every play has a cast!"}}~###~```
2700
+ ```bash
2701
+ Magic prefix for voice commands
2702
+ ```
2596
2703
 
2597
- After receiving this, PyGPT will execute the system `echo` command with params given from `params` field and replacing `{quote}` placeholder with `quote` param value.
2704
+ **Tip:** When the voice control is enabled via a plugin, simply provide commands while providing the content of the conversation by using the standard `Microphone` button.
2598
2705
 
2599
- As a result, response like this will be sent to the model:
2600
2706
 
2601
- ```[{"request": {"cmd": "send_email"}, "result": "OK. Email sent: Why do we tell actors to 'break a leg?' Because every play has a cast!"}]```
2707
+ **Enabling voice control globally**
2602
2708
 
2603
2709
 
2604
- 2) Assistant
2710
+ Turn on the voice control option in `Config / Accessibility`:
2605
2711
 
2606
- In this mode (via Assistants API), it should be done similarly, with the difference that here the functions should be defined in the assistant's settings.
2607
2712
 
2608
- With this flow you can use both forms - OpenAI and PyGPT - to define and execute commands and functions in the application. They will cooperate with each other and you can use them interchangeably.
2713
+ ```bash
2714
+ Enable voice control (using microphone)
2715
+ ```
2609
2716
 
2610
- # Token usage calculation
2717
+ Once you enable this option, an `Voice Control` button will appear at the bottom right corner of the window. When you click on this button, the microphone will start listening; clicking it again stops listening and starts recognizing the voice command you said. You can cancel voice recording at any time with the `ESC` key. You can also set a keyboard shortcut to turn voice recording on/off.
2718
+
2719
+
2720
+ Voice command recognition works based on a model, so you don't have to worry about saying things perfectly.
2721
+
2722
+
2723
+ **Here's a list of commands you can ask for by voice:**
2724
+
2725
+ - Get the current application status
2726
+ - Exit the application
2727
+ - Enable audio output
2728
+ - Disable audio output
2729
+ - Enable audio input
2730
+ - Disable audio input
2731
+ - Add a memo to the calendar
2732
+ - Clear memos from calendar
2733
+ - Read the calendar memos
2734
+ - Enable the camera
2735
+ - Disable the camera
2736
+ - Capture image from camera
2737
+ - Create a new context
2738
+ - Go to the previous context
2739
+ - Go to the next context
2740
+ - Go to the latest context
2741
+ - Focus on the input
2742
+ - Send the input
2743
+ - Clear the input
2744
+ - Get current conversation info
2745
+ - Get available commands list
2746
+ - Stop executing current action
2747
+ - Clear the attachments
2748
+ - Read the last conversation entry
2749
+ - Read the whole conversation
2750
+ - Rename current context
2751
+ - Search for a conversation
2752
+ - Clear the search results
2753
+ - Send the message to input
2754
+ - Append message to current input without sending it
2755
+ - Switch to chat mode
2756
+ - Switch to chat with files (llama-index) mode
2757
+ - Switch to the next mode
2758
+ - Switch to the previous mode
2759
+ - Switch to the next model
2760
+ - Switch to the previous model
2761
+ - Add note to notepad
2762
+ - Clear notepad contents
2763
+ - Read current notepad contents
2764
+ - Switch to the next preset
2765
+ - Switch to the previous preset
2766
+ - Switch to the chat tab
2767
+ - Switch to the calendar tab
2768
+ - Switch to the draw (painter) tab
2769
+ - Switch to the files tab
2770
+ - Switch to the notepad tab
2771
+ - Switch to the next tab
2772
+ - Switch to the previous tab
2773
+ - Start listening for voice input
2774
+ - Stop listening for voice input
2775
+ - Toggle listening for voice input
2776
+
2777
+ More commands coming soon.
2778
+
2779
+ Just ask for an action that matches one of the descriptions above. These descriptions are also known to the model, and relevant commands are assigned to them. When you voice a command that fits one of those patterns, the model will trigger the appropriate action.
2780
+
2781
+
2782
+ For convenience, you can enable a short sound to play when voice recording starts and stops. To do this, turn on the option:
2783
+
2784
+
2785
+ ```bash
2786
+ Audio notify microphone listening start/stop
2787
+ ```
2611
2788
 
2612
- ## Input tokens
2789
+ To enable a sound notification when a voice command is recognized and command execution begins, turn on the option:
2613
2790
 
2614
- The application features a token calculator. It attempts to forecast the number of tokens that
2615
- a particular query will consume and displays this estimate in real time. This gives you improved
2616
- control over your token usage. The app provides detailed information about the tokens used for the user's prompt,
2617
- the system prompt, any additional data, and those used within the context (the memory of previous entries).
2618
2791
 
2619
- **Remember that these are only approximate calculations and do not include, for example, the number of tokens consumed by some plugins. You can find the exact number of tokens used on the OpenAI website.**
2792
+ ```bash
2793
+ Audio notify voice command execution
2794
+ ```
2620
2795
 
2621
- ![v2_tokens1](https://github.com/szczyglis-dev/py-gpt/assets/61396542/29b610be-9e96-41cc-84f0-1b946886f801)
2796
+ For voice translation of on-screen events and information about completed commands via speech synthesis, you can turn on the option:
2622
2797
 
2623
- ## Total tokens
2798
+ ```bash
2799
+ Use voice synthesis to describe events on the screen.
2800
+ ```
2624
2801
 
2625
- After receiving a response from the model, the application displays the actual total number of tokens used for the query (received from the API).
2802
+ ![v2_access](https://github.com/szczyglis-dev/py-gpt/assets/61396542/02dd161b-6fb1-48f9-9217-40c658888833)
2626
2803
 
2627
- ![v2_tokens2](https://github.com/szczyglis-dev/py-gpt/assets/61396542/c81e95b5-7c33-41a6-8910-21d674db37e5)
2628
2804
 
2629
2805
  # Configuration
2630
2806
 
@@ -2636,23 +2812,47 @@ The following basic options can be modified directly within the application:
2636
2812
  Config -> Settings...
2637
2813
  ```
2638
2814
 
2639
- ![v2_settings](https://github.com/szczyglis-dev/py-gpt/assets/61396542/21d7e43d-858f-4bc7-a06f-ec848338e7a9)
2815
+ ![v2_settings](https://github.com/user-attachments/assets/003b0f86-8225-4478-8525-fb9324ac5c88)
2640
2816
 
2641
2817
  **General**
2642
2818
 
2643
- - `OpenAI API KEY`: The personal API key you'll need to enter into the application for it to function.
2819
+ - `Minimize to tray on exit`: Minimize to tray icon on exit. Tray icon enabled is required for this option to work. Default: False.
2820
+
2821
+ - `Render engine`: chat output render engine: `WebEngine / Chromium` - for full HTML/CSS and `Legacy (markdown)` for legacy, simple markdown CSS output. Default: WebEngine / Chromium.
2822
+
2823
+ - `OpenGL hardware acceleration`: enables hardware acceleration in `WebEngine / Chromium` renderer. Default: False.
2824
+
2825
+ - `Application environment (os.environ)`: Additional environment vars to set on application start.
2826
+
2827
+ **API Keys**
2828
+
2829
+ - `OpenAI API KEY`: Required for the OpenAI API. If you wish to use custom endpoints or local APIs, then you may enter any value here.
2644
2830
 
2645
2831
  - `OpenAI ORGANIZATION KEY`: The organization's API key, which is optional for use within the application.
2646
2832
 
2647
2833
  - `API Endpoint`: OpenAI API endpoint URL, default: https://api.openai.com/v1.
2648
2834
 
2649
- - `Number of notepads`: Number of notepad tabs. Restart of the application is required for this option to take effect.
2835
+ - `Proxy address`: Proxy address to be used for connection; supports HTTP/SOCKS.
2650
2836
 
2651
- - `Minimize to tray on exit`: Minimize to tray icon on exit. Tray icon enabled is required for this option to work. Default: False.
2837
+ - `Google API KEY`: Required for the Google API and Gemini models.
2838
+
2839
+ - `Anthropic API KEY`: Required for the Anthropic API and Claude models.
2840
+
2841
+ - `HuggingFace API KEY`: Required for the HuggingFace API.
2842
+
2843
+ - `OpenAI API version`: Azure OpenAI API version, e.g. 2023-07-01-preview
2844
+
2845
+ - `Azure OpenAI API endpoint`: Azure OpenAI API endpoint, https://<your-resource-name>.openai.azure.com/
2652
2846
 
2653
2847
  **Layout**
2654
2848
 
2655
- - `Font Size (chat window)`: Adjusts the font size in the chat window.
2849
+ - `Zoom`: Adjusts the zoom in chat window (web render view). `WebEngine / Chromium` render mode only.
2850
+
2851
+ - `Style (chat)`: Chat style (Blocks, or ChatGPT-like, or ChatGPT-like Wide. `WebEngine / Chromium` render mode only.
2852
+
2853
+ - `Code syntax highlight`: Syntax highlight theme in code blocks. `WebEngine / Chromium` render mode only.
2854
+
2855
+ - `Font Size (chat window)`: Adjusts the font size in the chat window (plain-text) and notepads.
2656
2856
 
2657
2857
  - `Font Size (input)`: Adjusts the font size in the input window.
2658
2858
 
@@ -2672,8 +2872,6 @@ Config -> Settings...
2672
2872
 
2673
2873
  - `Use theme colors in chat window`: Use color theme in chat window, Default: True.
2674
2874
 
2675
- - `Disable markdown formatting in output`: Enables plain-text display in output window, Default: False.
2676
-
2677
2875
  **Files and attachments**
2678
2876
 
2679
2877
  - `Store attachments in the workdir upload directory`: Enable to store a local copy of uploaded attachments for future use. Default: True
@@ -2682,12 +2880,30 @@ Config -> Settings...
2682
2880
 
2683
2881
  - `Directory for file downloads`: Subdirectory for downloaded files, e.g. in Assistants mode, inside "data". Default: "download"
2684
2882
 
2883
+ - `Verbose mode`: Enabled verbose mode when using attachment as additional context.
2884
+
2885
+ - `Model for querying index`: Model to use for preparing query and querying the index when the RAG option is selected.
2886
+
2887
+ - `Model for attachment content summary`: Model to use when generating a summary for the content of a file when the Summary option is selected.
2888
+
2889
+ - `Use history in RAG query`: When enabled, the content of the entire conversation will be used when preparing a query if mode is RAG or Summary.
2890
+
2891
+ - `RAG limit`: Only if the option `Use history in RAG query` is enabled. Specify the limit of how many recent entries in the conversation will be used when generating a query for RAG. 0 = no limit.
2892
+
2685
2893
  **Context**
2686
2894
 
2687
2895
  - `Context Threshold`: Sets the number of tokens reserved for the model to respond to the next prompt.
2688
2896
 
2689
2897
  - `Limit of last contexts on list to show (0 = unlimited)`: Limit of the last contexts on list, default: 0 (unlimited)
2690
2898
 
2899
+ - `Show context groups on top of the context list`: Display groups on top, default: False
2900
+
2901
+ - `Show date separators on the context list`: Show date periods, default: True
2902
+
2903
+ - `Show date separators in groups on the context list`: Show date periods in groups, default: True
2904
+
2905
+ - `Show date separators in pinned on the context list`: Show date periods in pinned items, default: False
2906
+
2691
2907
  - `Use Context`: Toggles the use of conversation context (memory of previous inputs).
2692
2908
 
2693
2909
  - `Store History`: Toggles conversation history store.
@@ -2700,12 +2916,14 @@ Config -> Settings...
2700
2916
 
2701
2917
  - `Search also in conversation content, not only in titles`: When enabled, context search will also consider the content of conversations, not just the titles of conversations.
2702
2918
 
2703
- - `Show Llama-index sources`: If enabled, sources utilized will be displayed in the response (if available, it will not work in streamed chat).
2919
+ - `Show LlamaIndex sources`: If enabled, sources utilized will be displayed in the response (if available, it will not work in streamed chat).
2704
2920
 
2705
- - `Always show audio icon`: If enabled, then read with audio icon will be always displayed.
2921
+ - `Show code interpreter output`: If enabled, output from the code interpreter in the Assistant API will be displayed in real-time (in stream mode), Default: True.
2706
2922
 
2707
2923
  - `Use extra context output`: If enabled, plain text output (if available) from command results will be displayed alongside the JSON output, Default: True.
2708
2924
 
2925
+ - `Convert lists to paragraphs`: If enabled, lists (ul, ol) will be converted to paragraphs (p), Default: True.
2926
+
2709
2927
  - `Model used for auto-summary`: Model used for context auto-summary (default: *gpt-3.5-turbo-1106*).
2710
2928
 
2711
2929
  **Models**
@@ -2726,6 +2944,8 @@ Config -> Settings...
2726
2944
 
2727
2945
  **Prompts**
2728
2946
 
2947
+ - `Use native API function calls`: Use API function calls to run commands from plugins instead of using command prompts - Chat and Assistants modes ONLY, default: True
2948
+
2729
2949
  - `Command execute: instruction`: Prompt for appending command execution instructions. Placeholders: {schema}, {extra}
2730
2950
 
2731
2951
  - `Command execute: extra footer (non-Assistant modes)`: Extra footer to append after commands JSON schema.
@@ -2736,9 +2956,17 @@ Config -> Settings...
2736
2956
 
2737
2957
  - `Context: auto-summary (user message)`: User message for context auto-summary. Placeholders: {input}, {output}
2738
2958
 
2739
- - `Agent: continue`: Prompt sent to automatically continue the conversation. Default: `continue...`
2959
+ - `Agent: evaluation prompt in loop (LlamaIndex)`: Prompt used for evaluating the response in Agents (LlamaIndex) mode.
2960
+
2961
+ - `Agent: system instruction (Legacy)`: Prompt to instruct how to handle autonomous mode.
2962
+
2963
+ - `Agent: continue (Legacy)`: Prompt sent to automatically continue the conversation.
2740
2964
 
2741
- - `Agent: goal update`: Prompt to instruct how to update current goal status.
2965
+ - `Agent: continue (always, more steps) (Legacy)`: Prompt sent to always automatically continue the conversation (more reasoning - "Always continue..." option).
2966
+
2967
+ - `Agent: goal update (Legacy)`: Prompt to instruct how to update current goal status.
2968
+
2969
+ - `Experts: Master prompt`: Prompt to instruct how to handle experts.
2742
2970
 
2743
2971
  - `DALL-E: image generate`: Prompt for generating prompts for DALL-E (if raw-mode is disabled).
2744
2972
 
@@ -2754,206 +2982,1052 @@ Config -> Settings...
2754
2982
 
2755
2983
  **Vision**
2756
2984
 
2985
+ - `Vision: Camera Input Device`: Video capture camera index (index of the camera, default: 0).
2986
+
2757
2987
  - `Vision: Camera capture width (px)`: Video capture resolution (width).
2758
2988
 
2759
2989
  - `Vision: Camera capture height (px)`: Video capture resolution (height).
2760
2990
 
2761
- - `Vision: Camera IDX (number)`: Video capture camera index (number of camera).
2991
+ - `Vision: Image capture quality`: Video capture image JPEG quality (%).
2992
+
2993
+ **Audio**
2994
+
2995
+ - `Audio Input Device`: Selects the audio device for Microphone input.
2996
+
2997
+ - `Channels`: Input channels, default: 1
2998
+
2999
+ - `Sampling Rate`: Sampling rate, default: 44100
3000
+
3001
+ **Indexes (LlamaIndex)**
3002
+
3003
+ - `Indexes`: List of created indexes.
3004
+
3005
+ - `Vector Store`: Vector store to use (vector database provided by LlamaIndex).
3006
+
3007
+ - `Vector Store (**kwargs)`: Keyword arguments for vector store provider (api_key, index_name, etc.).
3008
+
3009
+ - `Embeddings provider`: Embeddings provider.
3010
+
3011
+ - `Embeddings provider (ENV)`: ENV vars to embeddings provider (API keys, etc.).
3012
+
3013
+ - `Embeddings provider (**kwargs)`: Keyword arguments for embeddings provider (model name, etc.).
3014
+
3015
+ - `RPM limit for embeddings API calls`: Specify the limit of maximum requests per minute (RPM), 0 = no limit.
3016
+
3017
+ - `Recursive directory indexing`: Enables recursive directory indexing, default is False.
3018
+
3019
+ - `Replace old document versions in the index during re-indexing`: If enabled, previous versions of documents will be deleted from the index when the newest versions are indexed, default is True.
3020
+
3021
+ - `Excluded file extensions`: File extensions to exclude if no data loader for this extension, separated by comma.
3022
+
3023
+ - `Force exclude files`: If enabled, the exclusion list will be applied even when the data loader for the extension is active. Default: False.
3024
+
3025
+ - `Stop indexing on error`: If enabled, indexing will stop whenever an error occurs Default: True.
3026
+
3027
+ - `Custom metadata to append/replace to indexed documents (file)`: Define custom metadata key => value fields for specified file extensions, separate extensions by comma.\nAllowed placeholders: {path}, {relative_path} {filename}, {dirname}, {relative_dir} {ext}, {size}, {mtime}, {date}, {date_time}, {time}, {timestamp}. Use * (asterisk) as extension if you want to apply field to all files. Set empty value to remove field with specified key from metadata.
3028
+
3029
+ - `Custom metadata to append/replace to indexed documents (web)`: Define custom metadata key => value fields for specified external data loaders.\nAllowed placeholders: {date}, {date_time}, {time}, {timestamp} + {data loader args}
3030
+
3031
+ - `Additional keyword arguments (**kwargs) for data loaders`: Additional keyword arguments, such as settings, API keys, for the data loader. These arguments will be passed to the loader; please refer to the LlamaIndex or LlamaHub loaders reference for a list of allowed arguments for the specified data loader.
3032
+
3033
+ - `Use local models in Video/Audio and Image (vision) loaders`: Enables usage of local models in Video/Audio and Image (vision) loaders. If disabled then API models will be used (GPT-4 Vision and Whisper). Note: local models will work only in Python version (not compiled/Snap). Default: False.
3034
+
3035
+ - `Auto-index DB in real time`: Enables conversation context auto-indexing in defined modes.
3036
+
3037
+ - `ID of index for auto-indexing`: Index to use if auto-indexing of conversation context is enabled.
3038
+
3039
+ - `Enable auto-index in modes`: List of modes with enabled context auto-index, separated by comma.
3040
+
3041
+ - `DB (ALL), DB (UPDATE), FILES (ALL)`: Index the data – batch indexing is available here.
3042
+
3043
+ - `Chat mode`: chat mode for use in query engine, default: context
3044
+
3045
+ **Agent and experts**
3046
+
3047
+ **General**
3048
+
3049
+ - `Display a tray notification when the goal is achieved.`: If enabled, a notification will be displayed after goal achieved / finished run.
3050
+
3051
+ **LlamaIndex Agents**
3052
+
3053
+ - `Max steps (per iteration)` - Max steps is one iteration before goal achieved
3054
+
3055
+ - `Max evaluation steps in loop` - Maximum evaluation steps to achieve the final result, set 0 to infinity
3056
+
3057
+ - `Append and compare previous evaluation prompt in next evaluation` - If enabled, previous improvement prompt will be checked in next eval in loop, default: False
3058
+
3059
+ - `Verbose` - enables verbose mode.
3060
+
3061
+ **Legacy**
3062
+
3063
+ - `Sub-mode for agents`: Sub-mode to use in Agent mode (chat, completion, langchain, llama_index, etc.). Default: chat.
3064
+
3065
+ - `Sub-mode for experts`: Sub-mode to use in Experts mode (chat, completion, langchain, llama_index, etc.). Default: chat.
3066
+
3067
+ - `Index to use`: Only if sub-mode is llama_index (Chat with Files), choose the index to use in both Agent and Expert modes.
3068
+
3069
+ **Accessibility**
3070
+
3071
+ - `Enable voice control (using microphone)`: enables voice control (using microphone and defined commands).
3072
+
3073
+ - `Model`: model used for voice command recognition.
3074
+
3075
+ - `Use voice synthesis to describe events on the screen.`: enables audio description of on-screen events.
3076
+
3077
+ - `Use audio output cache`: If enabled, all static audio outputs will be cached on the disk instead of being generated every time. Default: True.
3078
+
3079
+ - `Audio notify microphone listening start/stop`: enables audio "tick" notify when microphone listening started/ended.
3080
+
3081
+ - `Audio notify voice command execution`: enables audio "tick" notify when voice command is executed.
3082
+
3083
+ - `Control shortcut keys`: configuration for keyboard shortcuts for a specified actions.
3084
+
3085
+ - `Blacklist for voice synthesis events describe (ignored events)`: list of muted events for 'Use voice synthesis to describe event' option.
3086
+
3087
+ - `Voice control actions blacklist`: Disable actions in voice control; add actions to the blacklist to prevent execution through voice commands.
3088
+
3089
+ **Updates**
3090
+
3091
+ - `Check for updates on start`: Enables checking for updates on start. Default: True.
3092
+
3093
+ - `Check for updates in background`: Enables checking for updates in background (checking every 5 minutes). Default: True.
3094
+
3095
+ **Developer**
3096
+
3097
+ - `Show debug menu`: Enables debug (developer) menu.
3098
+
3099
+ - `Log and debug context`: Enables logging of context input/output.
3100
+
3101
+ - `Log and debug events`: Enables logging of event dispatch.
3102
+
3103
+ - `Log plugin usage to console`: Enables logging of plugin usage to console.
3104
+
3105
+ - `Log DALL-E usage to console`: Enables logging of DALL-E usage to console.
3106
+
3107
+ - `Log LlamaIndex usage to console`: Enables logging of LlamaIndex usage to console.
3108
+
3109
+ - `Log Assistants usage to console`: Enables logging of Assistants API usage to console.
3110
+
3111
+ - `Log level`: toggle log level (ERROR|WARNING|INFO|DEBUG)
3112
+
3113
+
3114
+ ## JSON files
3115
+
3116
+ The configuration is stored in JSON files for easy manual modification outside of the application.
3117
+ These configuration files are located in the user's work directory within the following subdirectory:
3118
+
3119
+ ``` ini
3120
+ {HOME_DIR}/.config/pygpt-net/
3121
+ ```
3122
+
3123
+ ## Manual configuration
3124
+
3125
+ You can manually edit the configuration files in this directory (this is your work directory):
3126
+
3127
+ ``` ini
3128
+ {HOME_DIR}/.config/pygpt-net/
3129
+ ```
3130
+
3131
+ - `assistants.json` - stores the list of assistants.
3132
+ - `attachments.json` - stores the list of current attachments.
3133
+ - `config.json` - stores the main configuration settings.
3134
+ - `models.json` - stores models configurations.
3135
+ - `cache` - a directory for audio cache.
3136
+ - `capture` - a directory for captured images from camera and screenshots
3137
+ - `css` - a directory for CSS stylesheets (user override)
3138
+ - `history` - a directory for context history in `.txt` format.
3139
+ - `idx` - `LlamaIndex` indexes
3140
+ - `img` - a directory for images generated with `DALL-E 3` and `DALL-E 2`, saved as `.png` files.
3141
+ - `locale` - a directory for locales (user override)
3142
+ - `data` - a directory for data files and files downloaded/generated by GPT.
3143
+ - `presets` - a directory for presets stored as `.json` files.
3144
+ - `upload` - a directory for local copies of attachments coming from outside the workdir
3145
+ - `db.sqlite` - a database with contexts, notepads and indexes data records
3146
+ - `app.log` - a file with error and debug log
3147
+
3148
+ ---
3149
+
3150
+ ## Setting the Working Directory Using Command Line Arguments
3151
+
3152
+ To set the current working directory using a command-line argument, use:
3153
+
3154
+ ```
3155
+ python3 ./run.py --workdir="/path/to/workdir"
3156
+ ```
3157
+ or, for the binary version:
3158
+
3159
+ ```
3160
+ pygpt.exe --workdir="/path/to/workdir"
3161
+ ```
3162
+
3163
+
3164
+ ## Translations / Locale
3165
+
3166
+ Locale `.ini` files are located in the app directory:
3167
+
3168
+ ``` ini
3169
+ ./data/locale
3170
+ ```
3171
+
3172
+ This directory is automatically scanned when the application launches. To add a new translation,
3173
+ create and save the file with the appropriate name, for example:
3174
+
3175
+ ``` ini
3176
+ locale.es.ini
3177
+ ```
3178
+
3179
+ This will add Spanish as a selectable language in the application's language menu.
3180
+
3181
+ **Overwriting CSS and locales with Your Own Files:**
3182
+
3183
+ You can also overwrite files in the `locale` and `css` app directories with your own files in the user directory.
3184
+ This allows you to overwrite language files or CSS styles in a very simple way - by just creating files in your working directory.
3185
+
3186
+
3187
+ ``` ini
3188
+ {HOME_DIR}/.config/pygpt-net/
3189
+ ```
3190
+
3191
+ - `locale` - a directory for locales in `.ini` format.
3192
+ - `css` - a directory for CSS styles in `.css` format.
3193
+
3194
+ **Adding Your Own Fonts**
3195
+
3196
+ You can add your own fonts and use them in CSS files. To load your own fonts, you should place them in the `%workdir%/fonts` directory. Supported font types include: `otf`, `ttf`.
3197
+ You can see the list of loaded fonts in `Debug / Config`.
3198
+
3199
+ **Example:**
3200
+
3201
+ ```
3202
+ %workdir%
3203
+ |_css
3204
+ |_data
3205
+ |_fonts
3206
+ |_MyFont
3207
+ |_MyFont-Regular.ttf
3208
+ |_MyFont-Bold.ttf
3209
+ |...
3210
+ ```
3211
+
3212
+ ```css
3213
+ pre {{
3214
+ font-family: 'MyFont';
3215
+ }}
3216
+ ```
3217
+
3218
+ ## Data Loaders
3219
+
3220
+ **Configuring data loaders**
3221
+
3222
+ In the `Settings -> LlamaIndex -> Data loaders` section you can define the additional keyword arguments to pass into data loader instance.
3223
+
3224
+ In most cases, an internal LlamaIndex loaders are used internally.
3225
+ You can check these base loaders e.g. here:
3226
+
3227
+ File: https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/readers/llama-index-readers-file/llama_index/readers/file
3228
+
3229
+ Web: https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/readers/llama-index-readers-web
3230
+
3231
+ **Tip:** to index an external data or data from the Web just ask for it, by using `Web Search` plugin, e.g. you can ask the model with `Please index the youtube video: URL to video`, etc. Data loader for a specified content will be choosen automatically.
3232
+
3233
+ Allowed additional keyword arguments for built-in data loaders (files):
3234
+
3235
+ **CSV Files** (file_csv)
3236
+
3237
+ - `concat_rows` - bool, default: `True`
3238
+ - `encoding` - str, default: `utf-8`
3239
+
3240
+ **HTML Files** (file_html)
3241
+
3242
+ - `tag` - str, default: `section`
3243
+ - `ignore_no_id` - bool, default: `False`
3244
+
3245
+ **Image (vision)** (file_image_vision)
3246
+
3247
+ This loader can operate in two modes: local model and API.
3248
+ If the local mode is enabled, then the local model will be used. The local mode requires a Python/PyPi version of the application and is not available in the compiled or Snap versions.
3249
+ If the API mode (default) is selected, then the OpenAI API and the standard vision model will be used.
3250
+
3251
+ **Note:** Usage of API mode consumes additional tokens in OpenAI API (for `GPT-4 Vision` model)!
3252
+
3253
+ Local mode requires `torch`, `transformers`, `sentencepiece` and `Pillow` to be installed and uses the `Salesforce/blip2-opt-2.7b` model to describing images.
3254
+
3255
+ - `keep_image` - bool, default: `False`
3256
+ - `local_prompt` - str, default: `Question: describe what you see in this image. Answer:`
3257
+ - `api_prompt` - str, default: `Describe what you see in this image` - Prompt to use in API
3258
+ - `api_model` - str, default: `gpt-4-vision-preview` - Model to use in API
3259
+ - `api_tokens` - int, default: `1000` - Max output tokens in API
3260
+
3261
+ **IPYNB Notebook files** (file_ipynb)
3262
+
3263
+ - `parser_config` - dict, default: `None`
3264
+ - `concatenate` - bool, default: `False`
3265
+
3266
+ **Markdown files** (file_md)
3267
+
3268
+ - `remove_hyperlinks` - bool, default: `True`
3269
+ - `remove_images` - bool, default: `True`
3270
+
3271
+ **PDF documents** (file_pdf)
3272
+
3273
+ - `return_full_document` - bool, default: `False`
3274
+
3275
+ **Video/Audio** (file_video_audio)
3276
+
3277
+ This loader can operate in two modes: local model and API.
3278
+ If the local mode is enabled, then the local `Whisper` model will be used. The local mode requires a Python/PyPi version of the application and is not available in the compiled or Snap versions.
3279
+ If the API mode (default) is selected, then the currently selected provider in `Audio Input` plugin will be used. If the `OpenAI Whisper` is chosen then the OpenAI API and the API Whisper model will be used.
3280
+
3281
+ **Note:** Usage of Whisper via API consumes additional tokens in OpenAI API (for `Whisper` model)!
3282
+
3283
+ Local mode requires `torch` and `openai-whisper` to be installed and uses the `Whisper` model locally to transcribing video and audio.
3284
+
3285
+ - `model_version` - str, default: `base` - Whisper model to use, available models: https://github.com/openai/whisper
3286
+
3287
+ **XML files** (file_xml)
3288
+
3289
+ - `tree_level_split` - int, default: `0`
3290
+
3291
+ Allowed additional keyword arguments for built-in data loaders (Web and external content):
3292
+
3293
+ **Bitbucket** (web_bitbucket)
3294
+
3295
+ - `username` - str, default: `None`
3296
+ - `api_key` - str, default: `None`
3297
+ - `extensions_to_skip` - list, default: `[]`
3298
+
3299
+ **ChatGPT Retrieval** (web_chatgpt_retrieval)
3300
+
3301
+ - `endpoint_url` - str, default: `None`
3302
+ - `bearer_token` - str, default: `None`
3303
+ - `retries` - int, default: `None`
3304
+ - `batch_size` - int, default: `100`
3305
+
3306
+ **Google Calendar** (web_google_calendar)
3307
+
3308
+ - `credentials_path` - str, default: `credentials.json`
3309
+ - `token_path` - str, default: `token.json`
3310
+
3311
+ **Google Docs** (web_google_docs)
3312
+
3313
+ - `credentials_path` - str, default: `credentials.json`
3314
+ - `token_path` - str, default: `token.json`
3315
+
3316
+ **Google Drive** (web_google_drive)
3317
+
3318
+ - `credentials_path` - str, default: `credentials.json`
3319
+ - `token_path` - str, default: `token.json`
3320
+ - `pydrive_creds_path` - str, default: `creds.txt`
3321
+ - `client_config` - dict, default: `{}`
3322
+
3323
+ **Google Gmail** (web_google_gmail)
3324
+
3325
+ - `credentials_path` - str, default: `credentials.json`
3326
+ - `token_path` - str, default: `token.json`
3327
+ - `use_iterative_parser` - bool, default: `False`
3328
+ - `max_results` - int, default: `10`
3329
+ - `results_per_page` - int, default: `None`
3330
+
3331
+ **Google Keep** (web_google_keep)
3332
+
3333
+ - `credentials_path` - str, default: `keep_credentials.json`
3334
+
3335
+ **Google Sheets** (web_google_sheets)
3336
+
3337
+ - `credentials_path` - str, default: `credentials.json`
3338
+ - `token_path` - str, default: `token.json`
3339
+
3340
+ **GitHub Issues** (web_github_issues)
3341
+
3342
+ - `token` - str, default: `None`
3343
+ - `verbose` - bool, default: `False`
3344
+
3345
+ **GitHub Repository** (web_github_repository)
3346
+
3347
+ - `token` - str, default: `None`
3348
+ - `verbose` - bool, default: `False`
3349
+ - `concurrent_requests` - int, default: `5`
3350
+ - `timeout` - int, default: `5`
3351
+ - `retries` - int, default: `0`
3352
+ - `filter_dirs_include` - list, default: `None`
3353
+ - `filter_dirs_exclude` - list, default: `None`
3354
+ - `filter_file_ext_include` - list, default: `None`
3355
+ - `filter_file_ext_exclude` - list, default: `None`
3356
+
3357
+ **Microsoft OneDrive** (web_microsoft_onedrive)
3358
+
3359
+ - `client_id` - str, default: `None`
3360
+ - `client_secret` - str, default: `None`
3361
+ - `tenant_id` - str, default: `consumers`
3362
+
3363
+ **Sitemap (XML)** (web_sitemap)
3364
+
3365
+ - `html_to_text` - bool, default: `False`
3366
+ - `limit` - int, default: `10`
3367
+
3368
+ **SQL Database** (web_database)
3369
+
3370
+ - `uri` - str, default: `None`
3371
+
3372
+ You can provide a single URI in the form of: `{scheme}://{user}:{password}@{host}:{port}/{dbname}`, or you can provide each field manually:
3373
+
3374
+ - `scheme` - str, default: `None`
3375
+ - `host` - str, default: `None`
3376
+ - `port` - str, default: `None`
3377
+ - `user` - str, default: `None`
3378
+ - `password` - str, default: `None`
3379
+ - `dbname` - str, default: `None`
3380
+
3381
+ **Twitter/X posts** (web_twitter)
3382
+
3383
+ - `bearer_token` - str, default: `None`
3384
+ - `num_tweets` - int, default: `100`
3385
+
3386
+ ## Vector stores
3387
+
3388
+ **Available vector stores** (provided by `LlamaIndex`):
3389
+
3390
+ ```
3391
+ - ChromaVectorStore
3392
+ - ElasticsearchStore
3393
+ - PinecodeVectorStore
3394
+ - RedisVectorStore
3395
+ - SimpleVectorStore
3396
+ ```
3397
+
3398
+ You can configure selected vector store by providing config options like `api_key`, etc. in `Settings -> LlamaIndex` window.
3399
+
3400
+ Arguments provided here (on list: `Vector Store (**kwargs)` in `Advanced settings` will be passed to selected vector store provider. You can check keyword arguments needed by selected provider on LlamaIndex API reference page:
3401
+
3402
+ https://docs.llamaindex.ai/en/stable/api_reference/storage/vector_store.html
3403
+
3404
+ Which keyword arguments are passed to providers?
3405
+
3406
+ For `ChromaVectorStore` and `SimpleVectorStore` all arguments are set by PyGPT and passed internally (you do not need to configure anything).
3407
+
3408
+ For other providers you can provide these arguments:
3409
+
3410
+ **ElasticsearchStore**
3411
+
3412
+ Keyword arguments for ElasticsearchStore(`**kwargs`):
3413
+
3414
+ - `index_name` (default: current index ID, already set, not required)
3415
+ - any other keyword arguments provided on list
3416
+
3417
+ **PinecodeVectorStore**
3418
+
3419
+ Keyword arguments for Pinecone(`**kwargs`):
3420
+
3421
+ - `api_key`
3422
+ - index_name (default: current index ID, already set, not required)
3423
+
3424
+ **RedisVectorStore**
3425
+
3426
+ Keyword arguments for RedisVectorStore(`**kwargs`):
3427
+
3428
+ - `index_name` (default: current index ID, already set, not required)
3429
+ - any other keyword arguments provided on list
3430
+
3431
+ You can extend list of available providers by creating custom provider and registering it on app launch.
3432
+
3433
+ By default, you are using chat-based mode when using `Chat with Files`.
3434
+ If you want to only query index (without chat) you can enable `Query index only (without chat)` option.
3435
+
3436
+ ### Adding custom vector stores and data loaders
3437
+
3438
+ You can create a custom vector store provider or data loader for your data and develop a custom launcher for the application.
3439
+
3440
+ See the section `Extending PyGPT / Adding a custom Vector Store provider` for more details.
3441
+
3442
+ # Updates
3443
+
3444
+ ### Updating PyGPT
3445
+
3446
+ **PyGPT** comes with an integrated update notification system. When a new version with additional features is released, you'll receive an alert within the app.
3447
+
3448
+ To get the new version, simply download it and start using it in place of the old one. All your custom settings like configuration, presets, indexes, and past conversations will be kept and ready to use right away in the new version.
3449
+
3450
+ # Debugging and Logging
3451
+
3452
+ In `Settings -> Developer` dialog, you can enable the `Show debug menu` option to turn on the debugging menu. The menu allows you to inspect the status of application elements. In the debugging menu, there is a `Logger` option that opens a log window. In the window, the program's operation is displayed in real-time.
3453
+
3454
+ **Logging levels**:
3455
+
3456
+ By default, all errors and exceptions are logged to the file:
3457
+
3458
+ ```ini
3459
+ {HOME_DIR}/.config/pygpt-net/app.log
3460
+ ```
3461
+
3462
+ To increase the logging level (`ERROR` level is default), run the application with `--debug` argument:
3463
+
3464
+ ``` ini
3465
+ python3 run.py --debug=1
3466
+ ```
3467
+
3468
+ or
3469
+
3470
+ ```ini
3471
+ python3 run.py --debug=2
3472
+ ```
3473
+
3474
+ The value `1` enables the `INFO`logging level.
3475
+
3476
+ The value `2` enables the `DEBUG` logging level (most information).
3477
+
3478
+ **Compatibility (legacy) mode**
3479
+
3480
+ If you have a problems with `WebEngine / Chromium` renderer you can force the legacy mode by launching the app with command line arguments:
3481
+
3482
+ ``` ini
3483
+ python3 run.py --legacy=1
3484
+ ```
3485
+
3486
+ and to force disable OpenGL hardware acceleration:
3487
+
3488
+ ``` ini
3489
+ python3 run.py --disable-gpu=1
3490
+ ```
3491
+
3492
+ You can also manualy enable legacy mode by editing config file - open the `%WORKDIR%/config.json` config file in editor and set the following options:
3493
+
3494
+ ``` json
3495
+ "render.engine": "legacy",
3496
+ "render.open_gl": false,
3497
+ ```
3498
+
3499
+ # Extending PyGPT
3500
+
3501
+ ## Quick start
3502
+
3503
+ You can create your own extensions for **PyGPT** at any time.
3504
+
3505
+ PyGPT can be extended with:
3506
+
3507
+ - custom models
3508
+
3509
+ - custom plugins
3510
+
3511
+ - custom LLM wrappers
3512
+
3513
+ - custom vector store providers
3514
+
3515
+ - custom data loaders
3516
+
3517
+ - custom audio input providers
3518
+
3519
+ - custom audio output providers
3520
+
3521
+ - custom web search engine providers
3522
+
3523
+ **Examples (tutorial files)**
3524
+
3525
+ See the `examples` directory in this repository with examples of custom launcher, plugin, vector store, LLM (LangChain and LlamaIndex) provider and data loader:
3526
+
3527
+ - `examples/custom_launcher.py`
3528
+
3529
+ - `examples/example_audio_input.py`
3530
+
3531
+ - `examples/example_audio_output.py`
3532
+
3533
+ - `examples/example_data_loader.py`
3534
+
3535
+ - `examples/example_llm.py`
3536
+
3537
+ - `examples/example_plugin.py`
3538
+
3539
+ - `examples/example_vector_store.py`
3540
+
3541
+ - `examples/example_web_search.py`
3542
+
3543
+ These example files can be used as a starting point for creating your own extensions for **PyGPT**.
3544
+
3545
+ Extending PyGPT with custom plugins, LLMs wrappers and vector stores:
3546
+
3547
+ - You can pass custom plugin instances, LLMs wrappers and vector store providers to the launcher.
3548
+
3549
+ - This is useful if you want to extend PyGPT with your own plugins, vectors storage and LLMs.
3550
+
3551
+ To register custom plugins:
3552
+
3553
+ - Pass a list with the plugin instances as `plugins` keyword argument.
3554
+
3555
+ To register custom LLMs wrappers:
3556
+
3557
+ - Pass a list with the LLMs wrappers instances as `llms` keyword argument.
3558
+
3559
+ To register custom vector store providers:
3560
+
3561
+ - Pass a list with the vector store provider instances as `vector_stores` keyword argument.
3562
+
3563
+ To register custom data loaders:
3564
+
3565
+ - Pass a list with the data loader instances as `loaders` keyword argument.
3566
+
3567
+ To register custom audio input providers:
3568
+
3569
+ - Pass a list with the audio input provider instances as `audio_input` keyword argument.
3570
+
3571
+ To register custom audio output providers:
3572
+
3573
+ - Pass a list with the audio output provider instances as `audio_output` keyword argument.
3574
+
3575
+ To register custom web providers:
3576
+
3577
+ - Pass a list with the web provider instances as `web` keyword argument.
3578
+
3579
+ ## Adding a custom model
3580
+
3581
+ To add a new model using the OpenAI API, LangChain, or LlamaIndex wrapper, use the editor in `Config -> Models` or manually edit the `models.json` file by inserting the model's configuration details. If you are adding a model via LangChain or LlamaIndex, ensure to include the model's name, its supported modes (either `chat`, `completion`, or both), the LLM provider (such as `OpenAI` or `HuggingFace`), and, if you are using an external API-based model, an optional `API KEY` along with any other necessary environment settings.
3582
+
3583
+ Example of models configuration - `%WORKDIR%/models.json`:
3584
+
3585
+ ```
3586
+ "gpt-3.5-turbo": {
3587
+ "id": "gpt-3.5-turbo",
3588
+ "name": "gpt-3.5-turbo",
3589
+ "mode": [
3590
+ "chat",
3591
+ "assistant",
3592
+ "langchain",
3593
+ "llama_index"
3594
+ ],
3595
+ "langchain": {
3596
+ "provider": "openai",
3597
+ "mode": [
3598
+ "chat"
3599
+ ],
3600
+ "args": [
3601
+ {
3602
+ "name": "model_name",
3603
+ "value": "gpt-3.5-turbo",
3604
+ "type": "str"
3605
+ }
3606
+ ],
3607
+ "env": [
3608
+ {
3609
+ "name": "OPENAI_API_KEY",
3610
+ "value": "{api_key}"
3611
+ }
3612
+ ]
3613
+ },
3614
+ "llama_index": {
3615
+ "provider": "openai",
3616
+ "mode": [
3617
+ "chat"
3618
+ ],
3619
+ "args": [
3620
+ {
3621
+ "name": "model",
3622
+ "value": "gpt-3.5-turbo",
3623
+ "type": "str"
3624
+ }
3625
+ ],
3626
+ "env": [
3627
+ {
3628
+ "name": "OPENAI_API_KEY",
3629
+ "value": "{api_key}"
3630
+ }
3631
+ ]
3632
+ },
3633
+ "ctx": 4096,
3634
+ "tokens": 4096,
3635
+ "default": false
3636
+ },
3637
+ ```
3638
+
3639
+ There is built-in support for those LLM providers:
3640
+
3641
+ ```
3642
+ - `OpenAI` (openai)
3643
+ - `Azure OpenAI` (azure_openai)
3644
+ - `Google` (google)
3645
+ - `HuggingFace API` (huggingface_api)
3646
+ - `Anthropic` (anthropic)
3647
+ - `Ollama` (ollama)
3648
+ ```
3649
+
3650
+ **Tip**: `{api_key}` in `models.json` is a placeholder for the main OpenAI API KEY from the settings. It will be replaced by the configured key value.
3651
+
3652
+ ## Adding a custom plugin
3653
+
3654
+ ### Creating Your Own Plugin
3655
+
3656
+ You can create your own plugin for **PyGPT**. The plugin can be written in Python and then registered with the application just before launching it. All plugins included with the app are stored in the `plugin` directory - you can use them as coding examples for your own plugins.
3657
+
3658
+ **Examples (tutorial files)**
3659
+
3660
+ See the example plugin in this `examples` directory:
3661
+
3662
+ - `examples/example_plugin.py`
3663
+
3664
+ These example file can be used as a starting point for creating your own plugin for **PyGPT**.
3665
+
3666
+ To register a custom plugin:
3667
+
3668
+ - Create a custom launcher for the app.
3669
+
3670
+ - Pass a list with the custom plugin instances as `plugins` keyword argument.
3671
+
3672
+ **Example of a custom launcher:**
3673
+
3674
+
3675
+ ```python
3676
+ # custom_launcher.py
3677
+
3678
+ from pygpt_net.app import run
3679
+ from plugins import CustomPlugin, OtherCustomPlugin
3680
+ from llms import CustomLLM
3681
+ from vector_stores import CustomVectorStore
3682
+
3683
+ plugins = [
3684
+ CustomPlugin(),
3685
+ OtherCustomPlugin(),
3686
+ ]
3687
+ llms = [
3688
+ CustomLLM(),
3689
+ ]
3690
+ vector_stores = [
3691
+ CustomVectorStore(),
3692
+ ]
3693
+
3694
+ run(
3695
+ plugins=plugins,
3696
+ llms=llms,
3697
+ vector_stores=vector_stores,
3698
+ )
3699
+ ```
3700
+
3701
+ ### Handling events
3702
+
3703
+ In the plugin, you can receive and modify dispatched events.
3704
+ To do this, create a method named `handle(self, event, *args, **kwargs)` and handle the received events like here:
3705
+
3706
+ ```python
3707
+ # custom_plugin.py
3708
+
3709
+ from pygpt_net.core.events import Event
3710
+
3711
+
3712
+ def handle(self, event: Event, *args, **kwargs):
3713
+ """
3714
+ Handle dispatched events
3715
+
3716
+ :param event: event object
3717
+ """
3718
+ name = event.name
3719
+ data = event.data
3720
+ ctx = event.ctx
3721
+
3722
+ if name == Event.INPUT_BEFORE:
3723
+ self.some_method(data['value'])
3724
+ elif name == Event.CTX_BEGIN:
3725
+ self.some_other_method(ctx)
3726
+ else:
3727
+ # ...
3728
+ ```
3729
+
3730
+ ### List of Events
3731
+
3732
+ Event names are defined in `Event` class in `pygpt_net.core.events`.
3733
+
3734
+ Syntax: `event name` - triggered on, `event data` *(data type)*:
3735
+
3736
+ - `AI_NAME` - when preparing an AI name, `data['value']` *(string, name of the AI assistant)*
3737
+
3738
+ - `AGENT_PROMPT` - on agent prompt in eval mode, `data['value']` *(string, prompt)*
3739
+
3740
+ - `AUDIO_INPUT_RECORD_START` - start audio input recording
3741
+
3742
+ - `AUDIO_INPUT_RECORD_STOP` - stop audio input recording
3743
+
3744
+ - `AUDIO_INPUT_RECORD_TOGGLE` - toggle audio input recording
3745
+
3746
+ - `AUDIO_INPUT_TRANSCRIBE` - on audio file transcribe, `data['path']` *(string, path to audio file)*
3747
+
3748
+ - `AUDIO_INPUT_STOP` - force stop audio input
3749
+
3750
+ - `AUDIO_INPUT_TOGGLE` - when speech input is enabled or disabled, `data['value']` *(bool, True/False)*
3751
+
3752
+ - `AUDIO_OUTPUT_STOP` - force stop audio output
3753
+
3754
+ - `AUDIO_OUTPUT_TOGGLE` - when speech output is enabled or disabled, `data['value']` *(bool, True/False)*
3755
+
3756
+ - `AUDIO_READ_TEXT` - on text read using speech synthesis, `data['text']` *(str, text to read)*
3757
+
3758
+ - `CMD_EXECUTE` - when a command is executed, `data['commands']` *(list, commands and arguments)*
3759
+
3760
+ - `CMD_INLINE` - when an inline command is executed, `data['commands']` *(list, commands and arguments)*
3761
+
3762
+ - `CMD_SYNTAX` - when appending syntax for commands, `data['prompt'], data['syntax']` *(string, list, prompt and list with commands usage syntax)*
3763
+
3764
+ - `CMD_SYNTAX_INLINE` - when appending syntax for commands (inline mode), `data['prompt'], data['syntax']` *(string, list, prompt and list with commands usage syntax)*
3765
+
3766
+ - `CTX_AFTER` - after the context item is sent, `ctx`
3767
+
3768
+ - `CTX_BEFORE` - before the context item is sent, `ctx`
3769
+
3770
+ - `CTX_BEGIN` - when context item create, `ctx`
3771
+
3772
+ - `CTX_END` - when context item handling is finished, `ctx`
3773
+
3774
+ - `CTX_SELECT` - when context is selected on list, `data['value']` *(int, ctx meta ID)*
3775
+
3776
+ - `DISABLE` - when the plugin is disabled, `data['value']` *(string, plugin ID)*
3777
+
3778
+ - `ENABLE` - when the plugin is enabled, `data['value']` *(string, plugin ID)*
3779
+
3780
+ - `FORCE_STOP` - on force stop plugins
3781
+
3782
+ - `INPUT_BEFORE` - upon receiving input from the textarea, `data['value']` *(string, text to be sent)*
2762
3783
 
2763
- - `Vision: Image capture quality`: Video capture image JPEG quality (%).
3784
+ - `MODE_BEFORE` - before the mode is selected `data['value'], data['prompt']` *(string, string, mode ID)*
2764
3785
 
2765
- **Indexes (Llama-index)**
3786
+ - `MODE_SELECT` - on mode select `data['value']` *(string, mode ID)*
2766
3787
 
2767
- - `Indexes`: List of created indexes.
3788
+ - `MODEL_BEFORE` - before the model is selected `data['value']` *(string, model ID)*
2768
3789
 
2769
- - `Vector Store`: Vector store to use (vector database provided by Llama-index).
3790
+ - `MODEL_SELECT` - on model select `data['value']` *(string, model ID)*
2770
3791
 
2771
- - `Vector Store (**kwargs)`: Keyword arguments for vector store provider (api_key, index_name, etc.).
3792
+ - `PLUGIN_SETTINGS_CHANGED` - on plugin settings update (saving settings)
2772
3793
 
2773
- - `Embeddings provider`: Embeddings provider.
3794
+ - `PLUGIN_OPTION_GET` - on request for plugin option value `data['name'], data['value']` *(string, any, name of requested option, value)*
2774
3795
 
2775
- - `Embeddings provider (ENV)`: ENV vars to embeddings provider (API keys, etc.).
3796
+ - `POST_PROMPT` - after preparing a system prompt, `data['value']` *(string, system prompt)*
2776
3797
 
2777
- - `Embeddings provider (**kwargs)`: Keyword arguments for embeddings provider (model name, etc.).
3798
+ - `POST_PROMPT_ASYNC` - after preparing a system prompt, just before request in async thread, `data['value']` *(string, system prompt)*
2778
3799
 
2779
- - `RPM limit for embeddings API calls`: Specify the limit of maximum requests per minute (RPM), 0 = no limit.
3800
+ - `POST_PROMPT_END` - after preparing a system prompt, just before request in async thread, at the very end `data['value']` *(string, system prompt)*
2780
3801
 
2781
- - `Recursive directory indexing`: Enables recursive directory indexing, default is False.
3802
+ - `PRE_PROMPT` - before preparing a system prompt, `data['value']` *(string, system prompt)*
2782
3803
 
2783
- - `Replace old document versions in the index during re-indexing`: If enabled, previous versions of documents will be deleted from the index when the newest versions are indexed, default is True.
3804
+ - `SYSTEM_PROMPT` - when preparing a system prompt, `data['value']` *(string, system prompt)*
2784
3805
 
2785
- - `Excluded file extensions`: File extensions to exclude if no data loader for this extension, separated by comma.
3806
+ - `TOOL_OUTPUT_RENDER` - when rendering extra content from tools from plugins, `data['content']` *(string, content)*
2786
3807
 
2787
- - `Force exclude files`: If enabled, the exclusion list will be applied even when the data loader for the extension is active. Default: False.
3808
+ - `UI_ATTACHMENTS` - when the attachment upload elements are rendered, `data['value']` *(bool, show True/False)*
2788
3809
 
2789
- - `Custom metadata to append/replace to indexed documents (file)`: Define custom metadata key => value fields for specified file extensions, separate extensions by comma.\nAllowed placeholders: {path}, {relative_path} {filename}, {dirname}, {relative_dir} {ext}, {size}, {mtime}, {date}, {date_time}, {time}, {timestamp}. Use * (asterisk) as extension if you want to apply field to all files. Set empty value to remove field with specified key from metadata.
3810
+ - `UI_VISION` - when the vision elements are rendered, `data['value']` *(bool, show True/False)*
2790
3811
 
2791
- - `Custom metadata to append/replace to indexed documents (web)`: Define custom metadata key => value fields for specified external data loaders.\nAllowed placeholders: {date}, {date_time}, {time}, {timestamp} + {data loader args}
3812
+ - `USER_NAME` - when preparing a user's name, `data['value']` *(string, name of the user)*
2792
3813
 
2793
- - `Additional keyword arguments (**kwargs) for data loaders`: Additional keyword arguments, such as settings, API keys, for the data loader. These arguments will be passed to the loader; please refer to the Llama-index or LlamaHub loaders reference for a list of allowed arguments for the specified data loader.
3814
+ - `USER_SEND` - just before the input text is sent, `data['value']` *(string, input text)*
2794
3815
 
2795
- - `Use local models in Video/Audio and Image (vision) loaders`: Enables usage of local models in Video/Audio and Image (vision) loaders. If disabled then API models will be used (GPT-4 Vision and Whisper). Note: local models will work only in Python version (not compiled/Snap). Default: False.
2796
3816
 
2797
- - `Auto-index DB in real time`: Enables conversation context auto-indexing in defined modes.
3817
+ You can stop the propagation of a received event at any time by setting `stop` to `True`:
2798
3818
 
2799
- - `ID of index for auto-indexing`: Index to use if auto-indexing of conversation context is enabled.
3819
+ ```
3820
+ event.stop = True
3821
+ ```
2800
3822
 
2801
- - `Enable auto-index in modes`: List of modes with enabled context auto-index, separated by comma.
3823
+ Events flow can be debugged by enabling the option `Config -> Settings -> Developer -> Log and debug events`.
2802
3824
 
2803
- - `DB (ALL), DB (UPDATE), FILES (ALL)`: Index the data – batch indexing is available here.
3825
+ ## Adding a custom LLM provider
2804
3826
 
2805
- **Agent (autonomous)**
3827
+ Handling LLMs with LangChain and LlamaIndex is implemented through separated wrappers. This allows for the addition of support for any provider and model available via LangChain or LlamaIndex. All built-in wrappers for the models and its providers are placed in the `pygpt_net.provider.llms`.
2806
3828
 
2807
- - `Sub-mode to use`: Sub-mode to use in Agent mode (chat, completion, langchain, llama_index, etc.). Default: chat.
3829
+ These wrappers are loaded into the application during startup using `launcher.add_llm()` method:
2808
3830
 
2809
- - `Index to use`: Only if sub-mode is llama_index (Chat with files), choose the index to use in Agent mode.
3831
+ ```python
3832
+ # app.py
2810
3833
 
2811
- - `Display a tray notification when the goal is achieved.`: If enabled, a notification will be displayed after goal achieved / finished run.
3834
+ from pygpt_net.provider.llms.openai import OpenAILLM
3835
+ from pygpt_net.provider.llms.azure_openai import AzureOpenAILLM
3836
+ from pygpt_net.provider.llms.anthropic import AnthropicLLM
3837
+ from pygpt_net.provider.llms.hugging_face import HuggingFaceLLM
3838
+ from pygpt_net.provider.llms.ollama import OllamaLLM
3839
+ from pygpt_net.provider.llms.google import GoogleLLM
2812
3840
 
2813
- **Updates**
2814
3841
 
2815
- - `Check for updates on start`: Enables checking for updates on start. Default: True.
3842
+ def run(**kwargs):
3843
+ """Runs the app."""
3844
+ # Initialize the app
3845
+ launcher = Launcher()
3846
+ launcher.init()
2816
3847
 
2817
- - `Check for updates in background`: Enables checking for updates in background (checking every 5 minutes). Default: True.
3848
+ # Register plugins
3849
+ ...
2818
3850
 
2819
- **Developer**
3851
+ # Register langchain and llama-index LLMs wrappers
3852
+ launcher.add_llm(OpenAILLM())
3853
+ launcher.add_llm(AzureOpenAILLM())
3854
+ launcher.add_llm(AnthropicLLM())
3855
+ launcher.add_llm(HuggingFaceLLM())
3856
+ launcher.add_llm(OllamaLLM())
3857
+ launcher.add_llm(GoogleLLM())
2820
3858
 
2821
- - `Show debug menu`: Enables debug (developer) menu.
3859
+ # Launch the app
3860
+ launcher.run()
3861
+ ```
2822
3862
 
2823
- - `Log and debug context`: Enables logging of context input/output.
3863
+ To add support for providers not included by default, you can create your own wrapper that returns a custom model to the application and then pass this custom wrapper to the launcher.
2824
3864
 
2825
- - `Log and debug events`: Enables logging of event dispatch.
3865
+ Extending **PyGPT** with custom plugins and LLM wrappers is straightforward:
2826
3866
 
2827
- - `Log plugin usage to console`: Enables logging of plugin usage to console.
3867
+ - Pass instances of custom plugins and LLM wrappers directly to the launcher.
2828
3868
 
2829
- - `Log DALL-E usage to console`: Enables logging of DALL-E usage to console.
3869
+ To register custom LLM wrappers:
2830
3870
 
2831
- - `Log Llama-index usage to console`: Enables logging of Llama-index usage to console.
3871
+ - Provide a list of LLM wrapper instances as `llms` keyword argument.
2832
3872
 
2833
- - `Log Assistants usage to console`: Enables logging of Assistants API usage to console.
3873
+ **Example:**
2834
3874
 
2835
- - `Log level`: toggle log level (ERROR|WARNING|INFO|DEBUG)
2836
3875
 
3876
+ ```python
3877
+ # launcher.py
2837
3878
 
2838
- ## JSON files
3879
+ from pygpt_net.app import run
3880
+ from plugins import CustomPlugin, OtherCustomPlugin
3881
+ from llms import CustomLLM
2839
3882
 
2840
- The configuration is stored in JSON files for easy manual modification outside of the application.
2841
- These configuration files are located in the user's work directory within the following subdirectory:
3883
+ plugins = [
3884
+ CustomPlugin(),
3885
+ OtherCustomPlugin(),
3886
+ ]
3887
+ llms = [
3888
+ CustomLLM(), # <--- custom LLM provider (wrapper)
3889
+ ]
3890
+ vector_stores = []
2842
3891
 
2843
- ``` ini
2844
- {HOME_DIR}/.config/pygpt-net/
3892
+ run(
3893
+ plugins=plugins,
3894
+ llms=llms,
3895
+ vector_stores=vector_stores,
3896
+ )
2845
3897
  ```
2846
3898
 
2847
- # Notepad
2848
-
2849
- The application has a built-in notepad, divided into several tabs. This can be useful for storing information in a convenient way, without the need to open an external text editor. The content of the notepad is automatically saved whenever the content changes.
3899
+ **Examples (tutorial files)**
2850
3900
 
2851
- ![v2_notepad](https://github.com/szczyglis-dev/py-gpt/assets/61396542/f6aa0126-bad1-4e6c-ace6-72e979186433)
3901
+ See the `examples` directory in this repository with examples of custom launcher, plugin, vector store, LLM (LangChain and LlamaIndex) provider and data loader:
2852
3902
 
2853
- # Advanced configuration
3903
+ - `examples/custom_launcher.py`
2854
3904
 
2855
- ## Manual configuration
3905
+ - `examples/example_audio_input.py`
2856
3906
 
3907
+ - `examples/example_audio_output.py`
2857
3908
 
2858
- You can manually edit the configuration files in this directory (this is your work directory):
3909
+ - `examples/example_data_loader.py`
2859
3910
 
2860
- ``` ini
2861
- {HOME_DIR}/.config/pygpt-net/
2862
- ```
3911
+ - `examples/example_llm.py` <-- use it as an example
2863
3912
 
2864
- - `assistants.json` - stores the list of assistants.
2865
- - `attachments.json` - stores the list of current attachments.
2866
- - `config.json` - stores the main configuration settings.
2867
- - `models.json` - stores models configurations.
2868
- - `capture` - a directory for captured images from camera and screenshots
2869
- - `css` - a directory for CSS stylesheets (user override)
2870
- - `history` - a directory for context history in `.txt` format.
2871
- - `idx` - `Llama-index` indexes
2872
- - `img` - a directory for images generated with `DALL-E 3` and `DALL-E 2`, saved as `.png` files.
2873
- - `locale` - a directory for locales (user override)
2874
- - `data` - a directory for data files and files downloaded/generated by GPT.
2875
- - `presets` - a directory for presets stored as `.json` files.
2876
- - `upload` - a directory for local copies of attachments coming from outside the workdir
2877
- - `db.sqlite` - a database with contexts, notepads and indexes data records
2878
- - `app.log` - a file with error and debug log
3913
+ - `examples/example_plugin.py`
2879
3914
 
2880
- ---
3915
+ - `examples/example_vector_store.py`
2881
3916
 
2882
- ## Translations / Locale
3917
+ - `examples/example_web_search.py`
2883
3918
 
2884
- Locale `.ini` files are located in the app directory:
3919
+ These example files can be used as a starting point for creating your own extensions for **PyGPT**.
2885
3920
 
2886
- ``` ini
2887
- ./data/locale
2888
- ```
3921
+ To integrate your own model or provider into **PyGPT**, you can also reference the classes located in the `pygpt_net.provider.llms`. These samples can act as an more complex example for your custom class. Ensure that your custom wrapper class includes two essential methods: `chat` and `completion`. These methods should return the respective objects required for the model to operate in `chat` and `completion` modes.
2889
3922
 
2890
- This directory is automatically scanned when the application launches. To add a new translation,
2891
- create and save the file with the appropriate name, for example:
3923
+ Every single LLM provider (wrapper) inherits from `BaseLLM` class and can provide 3 components: provider for LangChain, provider for LlamaIndex, and provider for Embeddings.
2892
3924
 
2893
- ``` ini
2894
- locale.es.ini
2895
- ```
2896
3925
 
2897
- This will add Spanish as a selectable language in the application's language menu.
3926
+ ## Adding a custom vector store provider
2898
3927
 
2899
- **Overwriting CSS and locales with your own files:**
3928
+ You can create a custom vector store provider or data loader for your data and develop a custom launcher for the application. To register your custom vector store provider or data loader, simply register it by passing the vector store provider instance to `vector_stores` keyword argument and loader instance in the `loaders` keyword argument:
2900
3929
 
2901
- You can also overwrite files in the `locale` and `css` app directories with your own files in the user directory.
2902
- This allows you to overwrite language files or CSS styles in a very simple way - by just creating files in your working directory.
2903
3930
 
3931
+ ```python
3932
+ # app.py
2904
3933
 
2905
- ``` ini
2906
- {HOME_DIR}/.config/pygpt-net/
2907
- ```
3934
+ # vector stores
3935
+ from pygpt_net.provider.vector_stores.chroma import ChromaProvider
3936
+ from pygpt_net.provider.vector_stores.elasticsearch import ElasticsearchProvider
3937
+ from pygpt_net.provider.vector_stores.pinecode import PinecodeProvider
3938
+ from pygpt_net.provider.vector_stores.redis import RedisProvider
3939
+ from pygpt_net.provider.vector_stores.simple import SimpleProvider
2908
3940
 
2909
- - `locale` - a directory for locales in `.ini` format.
2910
- - `css` - a directory for CSS styles in `.css` format.
3941
+ def run(**kwargs):
3942
+ # ...
3943
+ # register base vector store providers (llama-index)
3944
+ launcher.add_vector_store(ChromaProvider())
3945
+ launcher.add_vector_store(ElasticsearchProvider())
3946
+ launcher.add_vector_store(PinecodeProvider())
3947
+ launcher.add_vector_store(RedisProvider())
3948
+ launcher.add_vector_store(SimpleProvider())
2911
3949
 
3950
+ # register custom vector store providers (llama-index)
3951
+ vector_stores = kwargs.get('vector_stores', None)
3952
+ if isinstance(vector_stores, list):
3953
+ for store in vector_stores:
3954
+ launcher.add_vector_store(store)
2912
3955
 
2913
- ## Debugging and Logging
3956
+ # ...
3957
+ ```
2914
3958
 
2915
- In `Settings -> Developer` dialog, you can enable the `Show debug menu` option to turn on the debugging menu. The menu allows you to inspect the status of application elements. In the debugging menu, there is a `Logger` option that opens a log window. In the window, the program's operation is displayed in real-time.
3959
+ To register your custom vector store provider just register it by passing provider instance in `vector_stores` keyword argument:
2916
3960
 
2917
- **Logging levels**:
3961
+ ```python
2918
3962
 
2919
- By default, all errors and exceptions are logged to the file:
3963
+ # custom_launcher.py
2920
3964
 
2921
- ```ini
2922
- {HOME_DIR}/.config/pygpt-net/app.log
2923
- ```
3965
+ from pygpt_net.app import run
3966
+ from plugins import CustomPlugin, OtherCustomPlugin
3967
+ from llms import CustomLLM
3968
+ from vector_stores import CustomVectorStore
2924
3969
 
2925
- To increase the logging level (`ERROR` level is default), run the application with `--debug` argument:
3970
+ plugins = [
3971
+ CustomPlugin(),
3972
+ OtherCustomPlugin(),
3973
+ ]
3974
+ llms = [
3975
+ CustomLLM(),
3976
+ ]
3977
+ vector_stores = [
3978
+ CustomVectorStore(), # <--- custom vector store provider
3979
+ ]
2926
3980
 
2927
- ``` ini
2928
- python3 run.py --debug=1
3981
+ run(
3982
+ plugins=plugins,
3983
+ llms=llms,
3984
+ vector_stores=vector_stores,
3985
+ )
2929
3986
  ```
2930
3987
 
2931
- or
2932
-
2933
- ```ini
2934
- python3 run.py --debug=2
2935
- ```
3988
+ The vector store provider must be an instance of `pygpt_net.provider.vector_stores.base.BaseStore`.
3989
+ You can review the code of the built-in providers in `pygpt_net.provider.vector_stores` and use them as examples when creating a custom provider.
2936
3990
 
2937
- The value `1` enables the `INFO`logging level.
3991
+ ### Adding a custom data loader
2938
3992
 
2939
- The value `2` enables the `DEBUG` logging level (most information).
2940
3993
 
2941
- ## Updates
3994
+ ```python
2942
3995
 
2943
- ### Updating PyGPT
3996
+ # custom_launcher.py
2944
3997
 
2945
- **PyGPT** comes with an integrated update notification system. When a new version with additional features is released, you'll receive an alert within the app.
3998
+ from pygpt_net.app import run
3999
+ from plugins import CustomPlugin, OtherCustomPlugin
4000
+ from llms import CustomLLM
4001
+ from vector_stores import CustomVectorStore
4002
+ from loaders import CustomLoader
2946
4003
 
2947
- To get the new version, simply download it and start using it in place of the old one. All your custom settings like configuration, presets, indexes, and past conversations will be kept and ready to use right away in the new version.
4004
+ plugins = [
4005
+ CustomPlugin(),
4006
+ OtherCustomPlugin(),
4007
+ ]
4008
+ llms = [
4009
+ CustomLLM(),
4010
+ ]
4011
+ vector_stores = [
4012
+ CustomVectorStore(),
4013
+ ]
4014
+ loaders = [
4015
+ CustomLoader(), # <---- custom data loader
4016
+ ]
2948
4017
 
4018
+ run(
4019
+ plugins=plugins,
4020
+ llms=llms,
4021
+ vector_stores=vector_stores, # <--- list with custom vector store providers
4022
+ loaders=loaders # <--- list with custom data loaders
4023
+ )
4024
+ ```
2949
4025
 
2950
- ## Coming soon
4026
+ The data loader must be an instance of `pygpt_net.provider.loaders.base.BaseLoader`.
4027
+ You can review the code of the built-in loaders in `pygpt_net.provider.loaders` and use them as examples when creating a custom loader.
2951
4028
 
2952
- - Enhanced integration with Langchain
2953
- - More vector databases support
2954
- - Development of autonomous agents
2955
4029
 
2956
- ## DISCLAIMER
4030
+ # DISCLAIMER
2957
4031
 
2958
4032
  This application is not officially associated with OpenAI. The author shall not be held liable for any damages
2959
4033
  resulting from the use of this application. It is provided "as is," without any form of warranty.
@@ -2969,61 +4043,85 @@ may consume additional tokens that are not displayed in the main window.
2969
4043
 
2970
4044
  ## Recent changes:
2971
4045
 
2972
- # 2.1.37 (2024-03-19)
4046
+ **2.4.48 (2025-01-16)**
4047
+
4048
+ - Fix: parsing lists in data loaders configuration.
4049
+ - Fix: crash on Windows on PySide6 v6.6.0.
4050
+ - Added Gemini embeddings to LlamaIndex settings.
4051
+ - LlamaIndex upgraded to 0.12.11.
4052
+ - Security updates.
2973
4053
 
2974
- - Added generation of audio transcriptions from audio/video files.
4054
+ **2.4.47 (2025-01-14)**
2975
4055
 
2976
- # 2.1.36 (2024-03-19)
4056
+ - Added support for Python 3.12.
4057
+ - Added a new model to Chat with Files: gemini-2.0-flash-exp.
4058
+ - PySide6 upgraded to 6.6.0.
2977
4059
 
2978
- - Added split screen view (output/edit) to code interpreter.
4060
+ **2.4.46 (2024-12-16)**
2979
4061
 
2980
- # 2.1.35 (2024-03-19)
4062
+ - Added a new tab in Settings: "API Keys", where the API keys configuration for Google and Anthropic models has been relocated.
4063
+ - Introduced a new mode in "Chat with Files": "Retrieve Only", which allows for retrieving raw documents from the index.
4064
+ - Fixed a bug related to tool calls in the Gemini provider when using Chat with Files mode.
2981
4065
 
2982
- - Added text file editor and image viewer.
2983
- - Improved video player and code interpreter.
4066
+ **2.4.45 (2024-12-16)**
2984
4067
 
2985
- # 2.1.34 (2024-03-18)
4068
+ - Enhanced web data loaders UI.
2986
4069
 
2987
- - Added video player.
2988
- - Fixed audio input message append in agent mode.
4070
+ **2.4.44 (2024-12-16)**
2989
4071
 
2990
- # 2.1.33 (2024-03-18)
4072
+ - Enhanced web data loaders.
4073
+ - Web loaders have been added to attachments, allowing external web content to be attached to context via the "+Web" button in the Attachments tab.
4074
+ - Improved handling of attachments in groups and added an attachment icon when a group contains attachments.
2991
4075
 
2992
- - Code interpreter enabled even if interpreter plugin is disabled.
2993
- - Added "Connect to the Python code interpreter window" config option in Code interpreter plugin.
2994
- - Added Monospace font support - issue #37.
2995
- - Improved raw JSON command outputs.
4076
+ **2.4.43 (2024-12-15)**
2996
4077
 
2997
- # 2.1.32 (2024-03-17)
4078
+ - Fix: Bug on attachment upload.
4079
+ - Added: Attachments uploaded in groups are now available for all contexts in the group (beta).
2998
4080
 
2999
- - Global prompts config moved to a separated settings section "Prompts".
3000
- - Added auto-clear option in code interpreter.
3001
- - Added "Use extra context output" config option in "Settings -> Context".
4081
+ **2.4.42 (2024-12-15)**
3002
4082
 
3003
- # 2.1.31 (2024-03-17)
4083
+ - Added Mailer plugin, which allows sending and retrieving emails from the server, and reading them. It currently supports only SMTP.
4084
+ - Added 'web_request' command to the Web Search plugin, enabling GET/POST/PUT and other connections to any address and API endpoint. It also supports sending POST data, files, headers, cookies, and more.
4085
+ - Improved audio output.
4086
+ - Enhanced visibility of the Video menu.
4087
+ - Other fixes.
3004
4088
 
3005
- - Improved code interpreter integration with sandbox/docker.
3006
- - Added display of hidden files in Files explorer.
3007
- - Added "Use as image" context menu action in Files explorer.
4089
+ **2.4.41 (2024-12-14)**
3008
4090
 
3009
- # 2.1.30 (2024-03-16)
4091
+ - Improved switching between columns on a split screen.
4092
+ - Added visual identification of the active column.
3010
4093
 
3011
- - Improved real-time Python code interpreter: added edit mode and whole code execution (history).
4094
+ **2.4.40 (2024-12-13)**
3012
4095
 
3013
- # 2.1.29 (2024-03-16)
4096
+ - Enhanced Split Screen mode, now promoted from beta to stable.
4097
+ - Python Code Interpreter tool added to the Tabs.
4098
+ - HTML/JS Canvas tool added to the Tabs.
4099
+ - Added attachment icon to the context list if context has attachments.
4100
+ - Improved audio playback.
4101
+ - Improved web search.
4102
+ - Added a thumbnail image to web search results.
4103
+ - Added a new commands to web search: "extract_images" and "extract_links".
4104
+ - Added the option "Use raw content (without summarization)" to the web search plugin, which provides a more detailed result to the main model.
4105
+ - Extended the default maximum result characters to 50,000 in the web search plugin.
3014
4106
 
3015
- - Added real-time Python code interpreter (<> icon), connected with the Code Interpreter plugin's input and output.
3016
- - Improved plugin command execution.
4107
+ **2.4.39 (2024-12-09)**
3017
4108
 
3018
- # 2.1.28 (2024-03-15)
4109
+ - Added "Split Screen" mode (accessible via the switch in the bottom-right corner of the screen), which allows you to work in two windows simultaneously. It is currently experimental (beta). Future updates will include Code Interpreter and Canvas running in tabs.
3019
4110
 
3020
- - Fixed local commands handling in Assistant API.
3021
- - Fixed system prompt replace after mode changed on app start.
3022
- - Improved related links rendering in chat output.
3023
- - Added RPM limit config option for embeddings API.
3024
- - UI improvements.
4111
+ - Fixed: Language switch.
3025
4112
 
3026
- The full changelog is located in the **[CHANGELOG.md](CHANGELOG.md)** file in the main folder of this repository.
4113
+ **2.4.38 (2024-12-08)**
4114
+
4115
+ - Added the ability to select a style for chat display between: Blocks, ChatGPT-like, and ChatGPT-like Wide. New option in the menu: Config -> Theme -> Style...
4116
+ - Added configuration options for audio input in Settings -> Audio -> Audio Input Device, Channels, and Sampling rate.
4117
+
4118
+ **2.4.37 (2024-11-30)**
4119
+
4120
+ - The `Query only` mode in `Uploaded` tab has been renamed to `RAG`.
4121
+ - New options have been added under `Settings -> Files and Attachments`:
4122
+ - `Use history in RAG query`: When enabled, the content of the entire conversation will be used when preparing a query if the mode is set to RAG or Summary.
4123
+ - `RAG limit`: This option is applicable only if 'Use history in RAG query' is enabled. It specifies the limit on how many recent entries in the conversation will be used when generating a query for RAG. A value of 0 indicates no limit.
4124
+ - Cache: dynamic parts of the system prompt (from plugins) have been moved to the very end of the prompt stack to enable the use of prompt cache mechanisms in OpenAI.
3027
4125
 
3028
4126
 
3029
4127
  # Credits and links
@@ -3032,8 +4130,12 @@ The full changelog is located in the **[CHANGELOG.md](CHANGELOG.md)** file in th
3032
4130
 
3033
4131
  **Documentation:** <https://pygpt.readthedocs.io>
3034
4132
 
4133
+ **Support and donate:** <https://pygpt.net/#donate>
4134
+
3035
4135
  **GitHub:** <https://github.com/szczyglis-dev/py-gpt>
3036
4136
 
4137
+ **Discord:** <https://pygpt.net/discord>
4138
+
3037
4139
  **Snap Store:** <https://snapcraft.io/pygpt>
3038
4140
 
3039
4141
  **PyPI:** <https://pypi.org/project/pygpt-net>
@@ -3046,23 +4148,27 @@ The full changelog is located in the **[CHANGELOG.md](CHANGELOG.md)** file in th
3046
4148
 
3047
4149
  # Special thanks
3048
4150
 
3049
- GitHub community:
4151
+ GitHub's community:
4152
+
4153
+ - [@BillionShields](https://github.com/BillionShields)
3050
4154
 
3051
- - **gfsysa**
4155
+ - [@gfsysa](https://github.com/gfsysa)
3052
4156
 
3053
- - **kaneda2004**
4157
+ - [@glinkot](https://github.com/glinkot)
3054
4158
 
3055
- - **linnflux**
4159
+ - [@kaneda2004](https://github.com/kaneda2004)
3056
4160
 
3057
- - **moritz-t-w**
4161
+ - [@linnflux](https://github.com/linnflux)
3058
4162
 
3059
- - **oleksii-honchar**
4163
+ - [@moritz-t-w](https://github.com/moritz-t-w)
3060
4164
 
3061
- - **yf007**
4165
+ - [@oleksii-honchar](https://github.com/oleksii-honchar)
4166
+
4167
+ - [@yf007](https://github.com/yf007)
3062
4168
 
3063
4169
  ## Third-party libraries
3064
4170
 
3065
- Full list of external libraries used in this project is located in the **[requirements.txt](requirements.txt)** file in the main folder of this repository.
4171
+ Full list of external libraries used in this project is located in the [requirements.txt](https://github.com/szczyglis-dev/py-gpt/blob/master/requirements.txt) file in the main folder of the repository.
3066
4172
 
3067
4173
  All used SVG icons are from `Material Design Icons` provided by Google:
3068
4174
 
@@ -3070,4 +4176,13 @@ https://github.com/google/material-design-icons
3070
4176
 
3071
4177
  https://fonts.google.com/icons
3072
4178
 
3073
- Code of the Llama-index offline loaders integrated into app is taken from LlamaHub: https://llamahub.ai
4179
+ Monaspace fonts provided by GitHub: https://github.com/githubnext/monaspace
4180
+
4181
+ Code of the LlamaIndex offline loaders integrated into app is taken from LlamaHub: https://llamahub.ai
4182
+
4183
+ Awesome ChatGPT Prompts (used in templates): https://github.com/f/awesome-chatgpt-prompts/
4184
+
4185
+ Code syntax highlight powered by: https://highlightjs.org
4186
+
4187
+ LaTeX support by: https://katex.org and https://github.com/mitya57/python-markdown-math
4188
+