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.
- CHANGELOG.md +930 -133
- README.md +2229 -1137
- pygpt_net/CHANGELOG.txt +810 -9
- pygpt_net/LICENSE +1 -1
- pygpt_net/__init__.py +10 -4
- pygpt_net/app.py +77 -4
- pygpt_net/config.py +133 -12
- pygpt_net/container.py +23 -1
- pygpt_net/controller/__init__.py +55 -12
- pygpt_net/controller/access/__init__.py +81 -0
- pygpt_net/controller/access/control.py +410 -0
- pygpt_net/controller/access/voice.py +432 -0
- pygpt_net/controller/agent/__init__.py +21 -128
- pygpt_net/controller/agent/common.py +126 -0
- pygpt_net/controller/agent/experts.py +165 -0
- pygpt_net/controller/agent/legacy.py +398 -0
- pygpt_net/controller/agent/llama.py +154 -0
- pygpt_net/controller/assistant/__init__.py +75 -62
- pygpt_net/controller/assistant/batch.py +576 -0
- pygpt_net/controller/assistant/editor.py +171 -18
- pygpt_net/controller/assistant/files.py +115 -131
- pygpt_net/controller/assistant/store.py +480 -0
- pygpt_net/controller/assistant/threads.py +276 -58
- pygpt_net/controller/attachment.py +283 -65
- pygpt_net/controller/audio/__init__.py +158 -17
- pygpt_net/controller/calendar/__init__.py +38 -5
- pygpt_net/controller/calendar/note.py +134 -13
- pygpt_net/controller/camera.py +219 -100
- pygpt_net/controller/chat/__init__.py +73 -10
- pygpt_net/controller/chat/attachment.py +621 -0
- pygpt_net/controller/chat/audio.py +99 -0
- pygpt_net/controller/chat/command.py +90 -0
- pygpt_net/controller/chat/common.py +143 -37
- pygpt_net/controller/chat/files.py +28 -6
- pygpt_net/controller/chat/image.py +102 -145
- pygpt_net/controller/chat/input.py +130 -127
- pygpt_net/controller/chat/output.py +182 -203
- pygpt_net/controller/chat/render.py +542 -50
- pygpt_net/controller/chat/response.py +278 -0
- pygpt_net/controller/chat/stream.py +186 -0
- pygpt_net/controller/chat/text.py +167 -198
- pygpt_net/controller/chat/vision.py +36 -47
- pygpt_net/controller/command.py +39 -11
- pygpt_net/controller/config/__init__.py +45 -6
- pygpt_net/controller/config/field/checkbox.py +7 -4
- pygpt_net/controller/config/field/cmd.py +7 -5
- pygpt_net/controller/config/field/combo.py +41 -11
- pygpt_net/controller/config/field/dictionary.py +14 -11
- pygpt_net/controller/config/field/input.py +9 -6
- pygpt_net/controller/config/field/slider.py +12 -9
- pygpt_net/controller/config/field/textarea.py +8 -5
- pygpt_net/controller/config/placeholder.py +196 -25
- pygpt_net/controller/ctx/__init__.py +666 -86
- pygpt_net/controller/ctx/common.py +44 -23
- pygpt_net/controller/ctx/extra.py +76 -17
- pygpt_net/controller/ctx/summarizer.py +28 -6
- pygpt_net/controller/{debug.py → debug/__init__.py} +62 -8
- pygpt_net/controller/dialogs/confirm.py +194 -17
- pygpt_net/controller/dialogs/debug.py +10 -2
- pygpt_net/controller/dialogs/info.py +34 -2
- pygpt_net/controller/files.py +65 -13
- pygpt_net/controller/finder.py +175 -0
- pygpt_net/controller/idx/__init__.py +151 -18
- pygpt_net/controller/idx/common.py +11 -30
- pygpt_net/controller/idx/indexer.py +183 -53
- pygpt_net/controller/idx/settings.py +9 -3
- pygpt_net/controller/kernel/__init__.py +370 -0
- pygpt_net/controller/kernel/reply.py +171 -0
- pygpt_net/controller/kernel/stack.py +137 -0
- pygpt_net/controller/lang/__init__.py +24 -12
- pygpt_net/controller/lang/custom.py +46 -11
- pygpt_net/controller/lang/mapping.py +178 -19
- pygpt_net/controller/launcher.py +16 -2
- pygpt_net/controller/layout.py +78 -10
- pygpt_net/controller/mode.py +63 -24
- pygpt_net/controller/model/__init__.py +56 -20
- pygpt_net/controller/model/editor.py +9 -4
- pygpt_net/controller/notepad.py +132 -123
- pygpt_net/controller/painter/__init__.py +16 -4
- pygpt_net/controller/painter/capture.py +96 -22
- pygpt_net/controller/painter/common.py +9 -7
- pygpt_net/controller/plugins/__init__.py +90 -42
- pygpt_net/controller/plugins/presets.py +19 -10
- pygpt_net/controller/plugins/settings.py +12 -6
- pygpt_net/controller/presets/__init__.py +263 -17
- pygpt_net/controller/presets/editor.py +173 -41
- pygpt_net/controller/presets/experts.py +156 -0
- pygpt_net/controller/settings/__init__.py +49 -9
- pygpt_net/controller/settings/editor.py +132 -25
- pygpt_net/controller/settings/profile.py +569 -0
- pygpt_net/controller/settings/workdir.py +215 -0
- pygpt_net/controller/theme/__init__.py +86 -8
- pygpt_net/controller/theme/common.py +29 -5
- pygpt_net/controller/theme/markdown.py +74 -37
- pygpt_net/controller/theme/menu.py +56 -4
- pygpt_net/controller/theme/nodes.py +39 -12
- pygpt_net/controller/tools/__init__.py +91 -0
- pygpt_net/controller/ui/__init__.py +29 -43
- pygpt_net/controller/ui/mode.py +135 -35
- pygpt_net/controller/ui/tabs.py +687 -0
- pygpt_net/controller/ui/vision.py +45 -19
- pygpt_net/core/access/__init__.py +30 -0
- pygpt_net/core/access/actions.py +131 -0
- pygpt_net/core/access/helpers.py +234 -0
- pygpt_net/core/access/shortcuts.py +104 -0
- pygpt_net/core/access/voice.py +277 -0
- pygpt_net/core/agents/__init__.py +32 -0
- pygpt_net/core/agents/legacy.py +66 -0
- pygpt_net/core/agents/memory.py +80 -0
- pygpt_net/core/agents/observer/__init__.py +17 -0
- pygpt_net/core/agents/observer/evaluation.py +163 -0
- pygpt_net/core/agents/provider.py +68 -0
- pygpt_net/core/agents/runner.py +702 -0
- pygpt_net/core/agents/tools.py +175 -0
- pygpt_net/core/assistants/__init__.py +22 -141
- pygpt_net/core/assistants/files.py +359 -0
- pygpt_net/core/assistants/store.py +300 -0
- pygpt_net/core/{attachments.py → attachments/__init__.py} +124 -29
- pygpt_net/core/attachments/context.py +752 -0
- pygpt_net/core/attachments/worker.py +40 -0
- pygpt_net/core/{audio.py → audio/__init__.py} +74 -3
- pygpt_net/core/audio/context.py +39 -0
- pygpt_net/core/audio/whisper.py +37 -0
- pygpt_net/core/bridge/__init__.py +266 -0
- pygpt_net/core/bridge/context.py +113 -0
- pygpt_net/core/bridge/worker.py +157 -0
- pygpt_net/core/calendar/__init__.py +57 -11
- pygpt_net/core/chain/__init__.py +41 -23
- pygpt_net/core/chain/chat.py +55 -31
- pygpt_net/core/chain/completion.py +58 -34
- pygpt_net/core/command.py +321 -13
- pygpt_net/core/ctx/__init__.py +721 -70
- pygpt_net/core/ctx/bag.py +53 -0
- pygpt_net/core/ctx/container.py +142 -0
- pygpt_net/core/ctx/idx.py +45 -8
- pygpt_net/core/ctx/output.py +247 -0
- pygpt_net/core/ctx/reply.py +63 -0
- pygpt_net/core/db/__init__.py +109 -16
- pygpt_net/core/db/viewer.py +50 -12
- pygpt_net/core/debug/__init__.py +35 -14
- pygpt_net/core/debug/agent.py +12 -7
- pygpt_net/core/debug/assistants.py +10 -2
- pygpt_net/core/debug/attachments.py +5 -4
- pygpt_net/core/debug/config.py +11 -1
- pygpt_net/core/debug/context.py +67 -23
- pygpt_net/core/debug/events.py +58 -0
- pygpt_net/core/debug/indexes.py +3 -1
- pygpt_net/core/debug/kernel.py +30 -0
- pygpt_net/core/debug/models.py +2 -1
- pygpt_net/core/debug/presets.py +25 -9
- pygpt_net/core/debug/tabs.py +49 -0
- pygpt_net/core/dispatcher.py +86 -181
- pygpt_net/core/docker/__init__.py +410 -0
- pygpt_net/core/docker/builder.py +87 -0
- pygpt_net/core/events/__init__.py +17 -0
- pygpt_net/core/events/app.py +54 -0
- pygpt_net/core/events/base.py +73 -0
- pygpt_net/core/events/control.py +88 -0
- pygpt_net/core/events/event.py +120 -0
- pygpt_net/core/events/kernel.py +67 -0
- pygpt_net/core/events/render.py +71 -0
- pygpt_net/core/experts/__init__.py +501 -0
- pygpt_net/core/filesystem/__init__.py +257 -24
- pygpt_net/core/filesystem/actions.py +15 -10
- pygpt_net/core/filesystem/editor.py +57 -11
- pygpt_net/core/filesystem/packer.py +87 -0
- pygpt_net/core/filesystem/types.py +12 -7
- pygpt_net/core/filesystem/url.py +21 -1
- pygpt_net/core/history.py +3 -2
- pygpt_net/core/idx/__init__.py +125 -30
- pygpt_net/core/idx/chat.py +438 -83
- pygpt_net/core/idx/context.py +47 -7
- pygpt_net/core/idx/indexing.py +546 -62
- pygpt_net/core/idx/llm.py +42 -21
- pygpt_net/core/idx/metadata.py +21 -5
- pygpt_net/core/idx/types/ctx.py +32 -6
- pygpt_net/core/idx/types/external.py +41 -7
- pygpt_net/core/idx/types/files.py +31 -6
- pygpt_net/core/idx/ui/__init__.py +22 -0
- pygpt_net/core/idx/ui/loaders.py +217 -0
- pygpt_net/core/idx/worker.py +32 -3
- pygpt_net/core/image.py +22 -10
- pygpt_net/core/installer.py +2 -4
- pygpt_net/core/llm/__init__.py +13 -3
- pygpt_net/core/locale.py +43 -8
- pygpt_net/core/models.py +121 -17
- pygpt_net/core/modes.py +62 -14
- pygpt_net/core/notepad.py +38 -3
- pygpt_net/core/platforms.py +6 -3
- pygpt_net/core/plugins.py +59 -32
- pygpt_net/core/presets.py +223 -31
- pygpt_net/core/profile.py +280 -0
- pygpt_net/core/prompt/__init__.py +156 -0
- pygpt_net/core/prompt/custom.py +307 -0
- pygpt_net/core/prompt/template.py +107 -0
- pygpt_net/core/render/base.py +347 -32
- pygpt_net/core/render/markdown/__init__.py +0 -0
- pygpt_net/core/render/markdown/body.py +210 -0
- pygpt_net/core/render/markdown/helpers.py +91 -0
- pygpt_net/core/render/markdown/parser.py +78 -6
- pygpt_net/core/render/markdown/pid.py +23 -0
- pygpt_net/core/render/markdown/renderer.py +405 -383
- pygpt_net/core/render/plain/body.py +130 -0
- pygpt_net/core/render/plain/helpers.py +60 -0
- pygpt_net/core/render/plain/pid.py +22 -0
- pygpt_net/core/render/plain/renderer.py +281 -231
- pygpt_net/core/render/web/__init__.py +10 -0
- pygpt_net/core/render/web/body.py +800 -0
- pygpt_net/core/render/web/helpers.py +102 -0
- pygpt_net/core/render/web/parser.py +297 -0
- pygpt_net/core/render/web/pid.py +36 -0
- pygpt_net/core/render/web/renderer.py +1356 -0
- pygpt_net/core/render/web/syntax_highlight.py +58 -0
- pygpt_net/core/settings.py +49 -22
- pygpt_net/core/tabs/__init__.py +822 -0
- pygpt_net/core/tabs/tab.py +81 -0
- pygpt_net/core/text/finder.py +214 -0
- pygpt_net/core/text/utils.py +78 -0
- pygpt_net/core/text/web_finder.py +213 -0
- pygpt_net/core/tokens.py +97 -32
- pygpt_net/core/types/__init__.py +12 -0
- pygpt_net/core/types/mode.py +22 -0
- pygpt_net/core/updater/__init__.py +67 -6
- pygpt_net/core/vision/__init__.py +22 -0
- pygpt_net/core/vision/analyzer.py +158 -0
- pygpt_net/core/{web.py → web/__init__.py} +29 -7
- pygpt_net/core/web/helpers.py +237 -0
- pygpt_net/css.qrc +5 -0
- pygpt_net/css_rc.py +251 -0
- pygpt_net/data/audio/click_off.mp3 +0 -0
- pygpt_net/data/audio/click_on.mp3 +0 -0
- pygpt_net/data/audio/ok.mp3 +0 -0
- pygpt_net/data/config/config.json +188 -37
- pygpt_net/data/config/models.json +1509 -48
- pygpt_net/data/config/modes.json +23 -5
- pygpt_net/data/config/presets/agent_openai.json +33 -0
- pygpt_net/data/config/presets/agent_openai_assistant.json +33 -0
- pygpt_net/data/config/presets/agent_planner.json +33 -0
- pygpt_net/data/config/presets/agent_react.json +33 -0
- pygpt_net/data/config/presets/batman_and_joker.json +7 -3
- pygpt_net/data/config/presets/current.agent.json +7 -4
- pygpt_net/data/config/presets/current.agent_llama.json +32 -0
- pygpt_net/data/config/presets/current.assistant.json +6 -3
- pygpt_net/data/config/presets/current.audio.json +34 -0
- pygpt_net/data/config/presets/current.chat.json +6 -3
- pygpt_net/data/config/presets/current.completion.json +6 -3
- pygpt_net/data/config/presets/current.expert.json +23 -0
- pygpt_net/data/config/presets/current.img.json +6 -3
- pygpt_net/data/config/presets/current.langchain.json +6 -3
- pygpt_net/data/config/presets/current.llama_index.json +6 -3
- pygpt_net/data/config/presets/current.vision.json +6 -3
- pygpt_net/data/config/presets/dalle_white_cat.json +6 -3
- pygpt_net/data/config/presets/joke_agent.json +25 -0
- pygpt_net/data/config/presets/joke_expert.json +29 -0
- pygpt_net/data/config/settings.json +724 -64
- pygpt_net/data/config/settings_section.json +9 -0
- pygpt_net/data/css/markdown.css +28 -2
- pygpt_net/data/css/markdown.dark.css +2 -2
- pygpt_net/data/css/markdown.light.css +12 -3
- pygpt_net/data/css/style.css +1 -0
- pygpt_net/data/css/style.dark.css +2 -3
- pygpt_net/data/css/style.light.css +28 -4
- pygpt_net/data/css/web-blocks.css +339 -0
- pygpt_net/data/css/web-blocks.dark.css +74 -0
- pygpt_net/data/css/web-blocks.light.css +82 -0
- pygpt_net/data/css/web-chatgpt.css +350 -0
- pygpt_net/data/css/web-chatgpt.dark.css +64 -0
- pygpt_net/data/css/web-chatgpt.light.css +75 -0
- pygpt_net/data/css/web-chatgpt_wide.css +350 -0
- pygpt_net/data/css/web-chatgpt_wide.dark.css +64 -0
- pygpt_net/data/css/web-chatgpt_wide.light.css +75 -0
- pygpt_net/data/fonts/MonaspaceArgon/MonaspaceArgon-Bold.otf +0 -0
- pygpt_net/data/fonts/MonaspaceArgon/MonaspaceArgon-BoldItalic.otf +0 -0
- pygpt_net/data/fonts/MonaspaceArgon/MonaspaceArgon-Italic.otf +0 -0
- pygpt_net/data/fonts/MonaspaceArgon/MonaspaceArgon-Regular.otf +0 -0
- pygpt_net/data/fonts/MonaspaceKrypton/MonaspaceKrypton-Bold.otf +0 -0
- pygpt_net/data/fonts/MonaspaceKrypton/MonaspaceKrypton-BoldItalic.otf +0 -0
- pygpt_net/data/fonts/MonaspaceKrypton/MonaspaceKrypton-Italic.otf +0 -0
- pygpt_net/data/fonts/MonaspaceKrypton/MonaspaceKrypton-Regular.otf +0 -0
- pygpt_net/data/fonts/MonaspaceNeon/MonaspaceNeon-Bold.otf +0 -0
- pygpt_net/data/fonts/MonaspaceNeon/MonaspaceNeon-BoldItalic.otf +0 -0
- pygpt_net/data/fonts/MonaspaceNeon/MonaspaceNeon-Italic.otf +0 -0
- pygpt_net/data/fonts/MonaspaceNeon/MonaspaceNeon-Regular.otf +0 -0
- pygpt_net/data/fonts/MonaspaceRadon/MonaspaceRadon-Bold.otf +0 -0
- pygpt_net/data/fonts/MonaspaceRadon/MonaspaceRadon-BoldItalic.otf +0 -0
- pygpt_net/data/fonts/MonaspaceRadon/MonaspaceRadon-Italic.otf +0 -0
- pygpt_net/data/fonts/MonaspaceRadon/MonaspaceRadon-Regular.otf +0 -0
- pygpt_net/data/fonts/MonaspaceXenon/MonaspaceXenon-Bold.otf +0 -0
- pygpt_net/data/fonts/MonaspaceXenon/MonaspaceXenon-BoldItalic.otf +0 -0
- pygpt_net/data/fonts/MonaspaceXenon/MonaspaceXenon-Italic.otf +0 -0
- pygpt_net/data/fonts/MonaspaceXenon/MonaspaceXenon-Regular.otf +0 -0
- pygpt_net/data/icons/accessibility.svg +1 -0
- pygpt_net/data/icons/collapse.svg +3 -0
- pygpt_net/data/icons/cursor.png +0 -0
- pygpt_net/data/icons/split_screen.svg +1 -0
- pygpt_net/data/js/highlight/DIGESTS.md +793 -0
- pygpt_net/data/js/highlight/LICENSE +29 -0
- pygpt_net/data/js/highlight/README.md +45 -0
- pygpt_net/data/js/highlight/es/core.js +2600 -0
- pygpt_net/data/js/highlight/es/core.min.js +307 -0
- pygpt_net/data/js/highlight/es/highlight.js +2600 -0
- pygpt_net/data/js/highlight/es/highlight.min.js +307 -0
- pygpt_net/data/js/highlight/es/languages/1c.js +552 -0
- pygpt_net/data/js/highlight/es/languages/1c.min.js +25 -0
- pygpt_net/data/js/highlight/es/languages/abnf.js +91 -0
- pygpt_net/data/js/highlight/es/languages/abnf.min.js +12 -0
- pygpt_net/data/js/highlight/es/languages/accesslog.js +100 -0
- pygpt_net/data/js/highlight/es/languages/accesslog.min.js +13 -0
- pygpt_net/data/js/highlight/es/languages/actionscript.js +161 -0
- pygpt_net/data/js/highlight/es/languages/actionscript.min.js +17 -0
- pygpt_net/data/js/highlight/es/languages/ada.js +273 -0
- pygpt_net/data/js/highlight/es/languages/ada.min.js +25 -0
- pygpt_net/data/js/highlight/es/languages/angelscript.js +186 -0
- pygpt_net/data/js/highlight/es/languages/angelscript.min.js +21 -0
- pygpt_net/data/js/highlight/es/languages/apache.js +109 -0
- pygpt_net/data/js/highlight/es/languages/apache.min.js +14 -0
- pygpt_net/data/js/highlight/es/languages/applescript.js +157 -0
- pygpt_net/data/js/highlight/es/languages/applescript.min.js +18 -0
- pygpt_net/data/js/highlight/es/languages/arcade.js +425 -0
- pygpt_net/data/js/highlight/es/languages/arcade.min.js +28 -0
- pygpt_net/data/js/highlight/es/languages/arduino.js +1014 -0
- pygpt_net/data/js/highlight/es/languages/arduino.min.js +54 -0
- pygpt_net/data/js/highlight/es/languages/armasm.js +132 -0
- pygpt_net/data/js/highlight/es/languages/armasm.min.js +17 -0
- pygpt_net/data/js/highlight/es/languages/asciidoc.js +269 -0
- pygpt_net/data/js/highlight/es/languages/asciidoc.min.js +35 -0
- pygpt_net/data/js/highlight/es/languages/aspectj.js +239 -0
- pygpt_net/data/js/highlight/es/languages/aspectj.min.js +30 -0
- pygpt_net/data/js/highlight/es/languages/autohotkey.js +83 -0
- pygpt_net/data/js/highlight/es/languages/autohotkey.min.js +13 -0
- pygpt_net/data/js/highlight/es/languages/autoit.js +186 -0
- pygpt_net/data/js/highlight/es/languages/autoit.min.js +21 -0
- pygpt_net/data/js/highlight/es/languages/avrasm.js +86 -0
- pygpt_net/data/js/highlight/es/languages/avrasm.min.js +12 -0
- pygpt_net/data/js/highlight/es/languages/awk.js +76 -0
- pygpt_net/data/js/highlight/es/languages/awk.min.js +11 -0
- pygpt_net/data/js/highlight/es/languages/axapta.js +196 -0
- pygpt_net/data/js/highlight/es/languages/axapta.min.js +10 -0
- pygpt_net/data/js/highlight/es/languages/bash.js +415 -0
- pygpt_net/data/js/highlight/es/languages/bash.min.js +21 -0
- pygpt_net/data/js/highlight/es/languages/basic.js +238 -0
- pygpt_net/data/js/highlight/es/languages/basic.min.js +9 -0
- pygpt_net/data/js/highlight/es/languages/bnf.js +47 -0
- pygpt_net/data/js/highlight/es/languages/bnf.min.js +6 -0
- pygpt_net/data/js/highlight/es/languages/brainfuck.js +62 -0
- pygpt_net/data/js/highlight/es/languages/brainfuck.min.js +8 -0
- pygpt_net/data/js/highlight/es/languages/c.js +340 -0
- pygpt_net/data/js/highlight/es/languages/c.min.js +40 -0
- pygpt_net/data/js/highlight/es/languages/cal.js +168 -0
- pygpt_net/data/js/highlight/es/languages/cal.min.js +15 -0
- pygpt_net/data/js/highlight/es/languages/capnproto.js +107 -0
- pygpt_net/data/js/highlight/es/languages/capnproto.min.js +11 -0
- pygpt_net/data/js/highlight/es/languages/ceylon.js +148 -0
- pygpt_net/data/js/highlight/es/languages/ceylon.min.js +15 -0
- pygpt_net/data/js/highlight/es/languages/clean.js +75 -0
- pygpt_net/data/js/highlight/es/languages/clean.min.js +8 -0
- pygpt_net/data/js/highlight/es/languages/clojure-repl.js +35 -0
- pygpt_net/data/js/highlight/es/languages/clojure-repl.min.js +4 -0
- pygpt_net/data/js/highlight/es/languages/clojure.js +192 -0
- pygpt_net/data/js/highlight/es/languages/clojure.min.js +25 -0
- pygpt_net/data/js/highlight/es/languages/cmake.js +72 -0
- pygpt_net/data/js/highlight/es/languages/cmake.min.js +7 -0
- pygpt_net/data/js/highlight/es/languages/coffeescript.js +374 -0
- pygpt_net/data/js/highlight/es/languages/coffeescript.min.js +28 -0
- pygpt_net/data/js/highlight/es/languages/coq.js +453 -0
- pygpt_net/data/js/highlight/es/languages/coq.min.js +7 -0
- pygpt_net/data/js/highlight/es/languages/cos.js +148 -0
- pygpt_net/data/js/highlight/es/languages/cos.min.js +15 -0
- pygpt_net/data/js/highlight/es/languages/cpp.js +611 -0
- pygpt_net/data/js/highlight/es/languages/cpp.min.js +46 -0
- pygpt_net/data/js/highlight/es/languages/crmsh.js +108 -0
- pygpt_net/data/js/highlight/es/languages/crmsh.min.js +19 -0
- pygpt_net/data/js/highlight/es/languages/crystal.js +320 -0
- pygpt_net/data/js/highlight/es/languages/crystal.min.js +48 -0
- pygpt_net/data/js/highlight/es/languages/csharp.js +414 -0
- pygpt_net/data/js/highlight/es/languages/csharp.min.js +49 -0
- pygpt_net/data/js/highlight/es/languages/csp.js +66 -0
- pygpt_net/data/js/highlight/es/languages/csp.min.js +6 -0
- pygpt_net/data/js/highlight/es/languages/css.js +862 -0
- pygpt_net/data/js/highlight/es/languages/css.min.js +31 -0
- pygpt_net/data/js/highlight/es/languages/d.js +280 -0
- pygpt_net/data/js/highlight/es/languages/d.min.js +20 -0
- pygpt_net/data/js/highlight/es/languages/dart.js +270 -0
- pygpt_net/data/js/highlight/es/languages/dart.min.js +22 -0
- pygpt_net/data/js/highlight/es/languages/delphi.js +254 -0
- pygpt_net/data/js/highlight/es/languages/delphi.min.js +19 -0
- pygpt_net/data/js/highlight/es/languages/diff.js +70 -0
- pygpt_net/data/js/highlight/es/languages/diff.min.js +9 -0
- pygpt_net/data/js/highlight/es/languages/django.js +83 -0
- pygpt_net/data/js/highlight/es/languages/django.min.js +13 -0
- pygpt_net/data/js/highlight/es/languages/dns.js +86 -0
- pygpt_net/data/js/highlight/es/languages/dns.min.js +11 -0
- pygpt_net/data/js/highlight/es/languages/dockerfile.js +52 -0
- pygpt_net/data/js/highlight/es/languages/dockerfile.min.js +8 -0
- pygpt_net/data/js/highlight/es/languages/dos.js +175 -0
- pygpt_net/data/js/highlight/es/languages/dos.min.js +13 -0
- pygpt_net/data/js/highlight/es/languages/dsconfig.js +74 -0
- pygpt_net/data/js/highlight/es/languages/dsconfig.min.js +9 -0
- pygpt_net/data/js/highlight/es/languages/dts.js +165 -0
- pygpt_net/data/js/highlight/es/languages/dts.min.js +22 -0
- pygpt_net/data/js/highlight/es/languages/dust.js +55 -0
- pygpt_net/data/js/highlight/es/languages/dust.min.js +8 -0
- pygpt_net/data/js/highlight/es/languages/ebnf.js +62 -0
- pygpt_net/data/js/highlight/es/languages/ebnf.min.js +7 -0
- pygpt_net/data/js/highlight/es/languages/elixir.js +287 -0
- pygpt_net/data/js/highlight/es/languages/elixir.min.js +34 -0
- pygpt_net/data/js/highlight/es/languages/elm.js +151 -0
- pygpt_net/data/js/highlight/es/languages/elm.min.js +18 -0
- pygpt_net/data/js/highlight/es/languages/erb.js +37 -0
- pygpt_net/data/js/highlight/es/languages/erb.min.js +5 -0
- pygpt_net/data/js/highlight/es/languages/erlang-repl.js +62 -0
- pygpt_net/data/js/highlight/es/languages/erlang-repl.min.js +13 -0
- pygpt_net/data/js/highlight/es/languages/erlang.js +207 -0
- pygpt_net/data/js/highlight/es/languages/erlang.min.js +28 -0
- pygpt_net/data/js/highlight/es/languages/excel.js +553 -0
- pygpt_net/data/js/highlight/es/languages/excel.min.js +10 -0
- pygpt_net/data/js/highlight/es/languages/fix.js +47 -0
- pygpt_net/data/js/highlight/es/languages/fix.min.js +7 -0
- pygpt_net/data/js/highlight/es/languages/flix.js +87 -0
- pygpt_net/data/js/highlight/es/languages/flix.min.js +10 -0
- pygpt_net/data/js/highlight/es/languages/fortran.js +582 -0
- pygpt_net/data/js/highlight/es/languages/fortran.min.js +17 -0
- pygpt_net/data/js/highlight/es/languages/fsharp.js +635 -0
- pygpt_net/data/js/highlight/es/languages/fsharp.min.js +47 -0
- pygpt_net/data/js/highlight/es/languages/gams.js +189 -0
- pygpt_net/data/js/highlight/es/languages/gams.min.js +28 -0
- pygpt_net/data/js/highlight/es/languages/gauss.js +314 -0
- pygpt_net/data/js/highlight/es/languages/gauss.min.js +36 -0
- pygpt_net/data/js/highlight/es/languages/gcode.js +89 -0
- pygpt_net/data/js/highlight/es/languages/gcode.min.js +17 -0
- pygpt_net/data/js/highlight/es/languages/gherkin.js +57 -0
- pygpt_net/data/js/highlight/es/languages/gherkin.min.js +9 -0
- pygpt_net/data/js/highlight/es/languages/glsl.js +136 -0
- pygpt_net/data/js/highlight/es/languages/glsl.min.js +8 -0
- pygpt_net/data/js/highlight/es/languages/gml.js +3138 -0
- pygpt_net/data/js/highlight/es/languages/gml.min.js +10 -0
- pygpt_net/data/js/highlight/es/languages/go.js +164 -0
- pygpt_net/data/js/highlight/es/languages/go.min.js +19 -0
- pygpt_net/data/js/highlight/es/languages/golo.js +89 -0
- pygpt_net/data/js/highlight/es/languages/golo.min.js +6 -0
- pygpt_net/data/js/highlight/es/languages/gradle.js +198 -0
- pygpt_net/data/js/highlight/es/languages/gradle.min.js +6 -0
- pygpt_net/data/js/highlight/es/languages/graphql.js +86 -0
- pygpt_net/data/js/highlight/es/languages/graphql.min.js +12 -0
- pygpt_net/data/js/highlight/es/languages/groovy.js +198 -0
- pygpt_net/data/js/highlight/es/languages/groovy.min.js +21 -0
- pygpt_net/data/js/highlight/es/languages/haml.js +121 -0
- pygpt_net/data/js/highlight/es/languages/haml.min.js +18 -0
- pygpt_net/data/js/highlight/es/languages/handlebars.js +266 -0
- pygpt_net/data/js/highlight/es/languages/handlebars.min.js +29 -0
- pygpt_net/data/js/highlight/es/languages/haskell.js +225 -0
- pygpt_net/data/js/highlight/es/languages/haskell.min.js +32 -0
- pygpt_net/data/js/highlight/es/languages/haxe.js +175 -0
- pygpt_net/data/js/highlight/es/languages/haxe.min.js +30 -0
- pygpt_net/data/js/highlight/es/languages/hsp.js +67 -0
- pygpt_net/data/js/highlight/es/languages/hsp.min.js +14 -0
- pygpt_net/data/js/highlight/es/languages/http.js +105 -0
- pygpt_net/data/js/highlight/es/languages/http.min.js +14 -0
- pygpt_net/data/js/highlight/es/languages/hy.js +145 -0
- pygpt_net/data/js/highlight/es/languages/hy.min.js +15 -0
- pygpt_net/data/js/highlight/es/languages/inform7.js +78 -0
- pygpt_net/data/js/highlight/es/languages/inform7.min.js +10 -0
- pygpt_net/data/js/highlight/es/languages/ini.js +129 -0
- pygpt_net/data/js/highlight/es/languages/ini.min.js +16 -0
- pygpt_net/data/js/highlight/es/languages/irpf90.js +115 -0
- pygpt_net/data/js/highlight/es/languages/irpf90.min.js +15 -0
- pygpt_net/data/js/highlight/es/languages/isbl.js +3213 -0
- pygpt_net/data/js/highlight/es/languages/isbl.min.js +25 -0
- pygpt_net/data/js/highlight/es/languages/java.js +298 -0
- pygpt_net/data/js/highlight/es/languages/java.min.js +38 -0
- pygpt_net/data/js/highlight/es/languages/javascript.js +775 -0
- pygpt_net/data/js/highlight/es/languages/javascript.min.js +81 -0
- pygpt_net/data/js/highlight/es/languages/jboss-cli.js +71 -0
- pygpt_net/data/js/highlight/es/languages/jboss-cli.min.js +10 -0
- pygpt_net/data/js/highlight/es/languages/json.js +62 -0
- pygpt_net/data/js/highlight/es/languages/json.min.js +8 -0
- pygpt_net/data/js/highlight/es/languages/julia-repl.js +59 -0
- pygpt_net/data/js/highlight/es/languages/julia-repl.min.js +4 -0
- pygpt_net/data/js/highlight/es/languages/julia.js +450 -0
- pygpt_net/data/js/highlight/es/languages/julia.min.js +18 -0
- pygpt_net/data/js/highlight/es/languages/kotlin.js +294 -0
- pygpt_net/data/js/highlight/es/languages/kotlin.min.js +46 -0
- pygpt_net/data/js/highlight/es/languages/lasso.js +179 -0
- pygpt_net/data/js/highlight/es/languages/lasso.min.js +28 -0
- pygpt_net/data/js/highlight/es/languages/latex.js +286 -0
- pygpt_net/data/js/highlight/es/languages/latex.min.js +34 -0
- pygpt_net/data/js/highlight/es/languages/ldif.js +39 -0
- pygpt_net/data/js/highlight/es/languages/ldif.min.js +5 -0
- pygpt_net/data/js/highlight/es/languages/leaf.js +105 -0
- pygpt_net/data/js/highlight/es/languages/leaf.min.js +12 -0
- pygpt_net/data/js/highlight/es/languages/less.js +963 -0
- pygpt_net/data/js/highlight/es/languages/less.min.js +45 -0
- pygpt_net/data/js/highlight/es/languages/lisp.js +147 -0
- pygpt_net/data/js/highlight/es/languages/lisp.min.js +16 -0
- pygpt_net/data/js/highlight/es/languages/livecodeserver.js +181 -0
- pygpt_net/data/js/highlight/es/languages/livecodeserver.min.js +21 -0
- pygpt_net/data/js/highlight/es/languages/livescript.js +386 -0
- pygpt_net/data/js/highlight/es/languages/livescript.min.js +35 -0
- pygpt_net/data/js/highlight/es/languages/llvm.js +143 -0
- pygpt_net/data/js/highlight/es/languages/llvm.min.js +16 -0
- pygpt_net/data/js/highlight/es/languages/lsl.js +84 -0
- pygpt_net/data/js/highlight/es/languages/lsl.min.js +19 -0
- pygpt_net/data/js/highlight/es/languages/lua.js +88 -0
- pygpt_net/data/js/highlight/es/languages/lua.min.js +14 -0
- pygpt_net/data/js/highlight/es/languages/makefile.js +94 -0
- pygpt_net/data/js/highlight/es/languages/makefile.min.js +14 -0
- pygpt_net/data/js/highlight/es/languages/markdown.js +256 -0
- pygpt_net/data/js/highlight/es/languages/markdown.min.js +32 -0
- pygpt_net/data/js/highlight/es/languages/mathematica.js +7367 -0
- pygpt_net/data/js/highlight/es/languages/mathematica.min.js +21 -0
- pygpt_net/data/js/highlight/es/languages/matlab.js +115 -0
- pygpt_net/data/js/highlight/es/languages/matlab.min.js +15 -0
- pygpt_net/data/js/highlight/es/languages/maxima.js +422 -0
- pygpt_net/data/js/highlight/es/languages/maxima.min.js +12 -0
- pygpt_net/data/js/highlight/es/languages/mel.js +243 -0
- pygpt_net/data/js/highlight/es/languages/mel.min.js +8 -0
- pygpt_net/data/js/highlight/es/languages/mercury.js +116 -0
- pygpt_net/data/js/highlight/es/languages/mercury.min.js +16 -0
- pygpt_net/data/js/highlight/es/languages/mipsasm.js +112 -0
- pygpt_net/data/js/highlight/es/languages/mipsasm.min.js +15 -0
- pygpt_net/data/js/highlight/es/languages/mizar.js +35 -0
- pygpt_net/data/js/highlight/es/languages/mizar.min.js +4 -0
- pygpt_net/data/js/highlight/es/languages/mojolicious.js +44 -0
- pygpt_net/data/js/highlight/es/languages/mojolicious.min.js +6 -0
- pygpt_net/data/js/highlight/es/languages/monkey.js +192 -0
- pygpt_net/data/js/highlight/es/languages/monkey.min.js +17 -0
- pygpt_net/data/js/highlight/es/languages/moonscript.js +149 -0
- pygpt_net/data/js/highlight/es/languages/moonscript.min.js +23 -0
- pygpt_net/data/js/highlight/es/languages/n1ql.js +373 -0
- pygpt_net/data/js/highlight/es/languages/n1ql.min.js +13 -0
- pygpt_net/data/js/highlight/es/languages/nestedtext.js +91 -0
- pygpt_net/data/js/highlight/es/languages/nestedtext.min.js +9 -0
- pygpt_net/data/js/highlight/es/languages/nginx.js +161 -0
- pygpt_net/data/js/highlight/es/languages/nginx.min.js +21 -0
- pygpt_net/data/js/highlight/es/languages/nim.js +193 -0
- pygpt_net/data/js/highlight/es/languages/nim.min.js +15 -0
- pygpt_net/data/js/highlight/es/languages/nix.js +103 -0
- pygpt_net/data/js/highlight/es/languages/nix.min.js +12 -0
- pygpt_net/data/js/highlight/es/languages/node-repl.js +41 -0
- pygpt_net/data/js/highlight/es/languages/node-repl.min.js +5 -0
- pygpt_net/data/js/highlight/es/languages/nsis.js +565 -0
- pygpt_net/data/js/highlight/es/languages/nsis.min.js +23 -0
- pygpt_net/data/js/highlight/es/languages/objectivec.js +261 -0
- pygpt_net/data/js/highlight/es/languages/objectivec.min.js +23 -0
- pygpt_net/data/js/highlight/es/languages/ocaml.js +91 -0
- pygpt_net/data/js/highlight/es/languages/ocaml.min.js +14 -0
- pygpt_net/data/js/highlight/es/languages/openscad.js +85 -0
- pygpt_net/data/js/highlight/es/languages/openscad.min.js +15 -0
- pygpt_net/data/js/highlight/es/languages/oxygene.js +95 -0
- pygpt_net/data/js/highlight/es/languages/oxygene.min.js +13 -0
- pygpt_net/data/js/highlight/es/languages/parser3.js +63 -0
- pygpt_net/data/js/highlight/es/languages/parser3.min.js +10 -0
- pygpt_net/data/js/highlight/es/languages/perl.js +512 -0
- pygpt_net/data/js/highlight/es/languages/perl.min.js +40 -0
- pygpt_net/data/js/highlight/es/languages/pf.js +68 -0
- pygpt_net/data/js/highlight/es/languages/pf.min.js +9 -0
- pygpt_net/data/js/highlight/es/languages/pgsql.js +533 -0
- pygpt_net/data/js/highlight/es/languages/pgsql.min.js +69 -0
- pygpt_net/data/js/highlight/es/languages/php-template.js +62 -0
- pygpt_net/data/js/highlight/es/languages/php-template.min.js +8 -0
- pygpt_net/data/js/highlight/es/languages/php.js +621 -0
- pygpt_net/data/js/highlight/es/languages/php.min.js +58 -0
- pygpt_net/data/js/highlight/es/languages/plaintext.js +27 -0
- pygpt_net/data/js/highlight/es/languages/plaintext.min.js +3 -0
- pygpt_net/data/js/highlight/es/languages/pony.js +98 -0
- pygpt_net/data/js/highlight/es/languages/pony.min.js +12 -0
- pygpt_net/data/js/highlight/es/languages/powershell.js +325 -0
- pygpt_net/data/js/highlight/es/languages/powershell.min.js +40 -0
- pygpt_net/data/js/highlight/es/languages/processing.js +442 -0
- pygpt_net/data/js/highlight/es/languages/processing.min.js +18 -0
- pygpt_net/data/js/highlight/es/languages/profile.js +51 -0
- pygpt_net/data/js/highlight/es/languages/profile.min.js +9 -0
- pygpt_net/data/js/highlight/es/languages/prolog.js +105 -0
- pygpt_net/data/js/highlight/es/languages/prolog.min.js +11 -0
- pygpt_net/data/js/highlight/es/languages/properties.js +76 -0
- pygpt_net/data/js/highlight/es/languages/properties.min.js +9 -0
- pygpt_net/data/js/highlight/es/languages/protobuf.js +87 -0
- pygpt_net/data/js/highlight/es/languages/protobuf.min.js +11 -0
- pygpt_net/data/js/highlight/es/languages/puppet.js +154 -0
- pygpt_net/data/js/highlight/es/languages/puppet.min.js +18 -0
- pygpt_net/data/js/highlight/es/languages/purebasic.js +108 -0
- pygpt_net/data/js/highlight/es/languages/purebasic.min.js +11 -0
- pygpt_net/data/js/highlight/es/languages/python-repl.js +40 -0
- pygpt_net/data/js/highlight/es/languages/python-repl.min.js +5 -0
- pygpt_net/data/js/highlight/es/languages/python.js +444 -0
- pygpt_net/data/js/highlight/es/languages/python.min.js +42 -0
- pygpt_net/data/js/highlight/es/languages/q.js +46 -0
- pygpt_net/data/js/highlight/es/languages/q.min.js +8 -0
- pygpt_net/data/js/highlight/es/languages/qml.js +197 -0
- pygpt_net/data/js/highlight/es/languages/qml.min.js +29 -0
- pygpt_net/data/js/highlight/es/languages/r.js +265 -0
- pygpt_net/data/js/highlight/es/languages/r.min.js +26 -0
- pygpt_net/data/js/highlight/es/languages/reasonml.js +150 -0
- pygpt_net/data/js/highlight/es/languages/reasonml.min.js +18 -0
- pygpt_net/data/js/highlight/es/languages/rib.js +45 -0
- pygpt_net/data/js/highlight/es/languages/rib.min.js +6 -0
- pygpt_net/data/js/highlight/es/languages/roboconf.js +90 -0
- pygpt_net/data/js/highlight/es/languages/roboconf.min.js +13 -0
- pygpt_net/data/js/highlight/es/languages/routeros.js +172 -0
- pygpt_net/data/js/highlight/es/languages/routeros.min.js +22 -0
- pygpt_net/data/js/highlight/es/languages/rsl.js +157 -0
- pygpt_net/data/js/highlight/es/languages/rsl.min.js +11 -0
- pygpt_net/data/js/highlight/es/languages/ruby.js +456 -0
- pygpt_net/data/js/highlight/es/languages/ruby.min.js +54 -0
- pygpt_net/data/js/highlight/es/languages/ruleslanguage.js +84 -0
- pygpt_net/data/js/highlight/es/languages/ruleslanguage.min.js +9 -0
- pygpt_net/data/js/highlight/es/languages/rust.js +324 -0
- pygpt_net/data/js/highlight/es/languages/rust.min.js +27 -0
- pygpt_net/data/js/highlight/es/languages/sas.js +565 -0
- pygpt_net/data/js/highlight/es/languages/sas.min.js +17 -0
- pygpt_net/data/js/highlight/es/languages/scala.js +222 -0
- pygpt_net/data/js/highlight/es/languages/scala.min.js +28 -0
- pygpt_net/data/js/highlight/es/languages/scheme.js +204 -0
- pygpt_net/data/js/highlight/es/languages/scheme.min.js +19 -0
- pygpt_net/data/js/highlight/es/languages/scilab.js +81 -0
- pygpt_net/data/js/highlight/es/languages/scilab.min.js +13 -0
- pygpt_net/data/js/highlight/es/languages/scss.js +852 -0
- pygpt_net/data/js/highlight/es/languages/scss.min.js +33 -0
- pygpt_net/data/js/highlight/es/languages/shell.js +41 -0
- pygpt_net/data/js/highlight/es/languages/shell.min.js +5 -0
- pygpt_net/data/js/highlight/es/languages/smali.js +134 -0
- pygpt_net/data/js/highlight/es/languages/smali.min.js +13 -0
- pygpt_net/data/js/highlight/es/languages/smalltalk.js +77 -0
- pygpt_net/data/js/highlight/es/languages/smalltalk.min.js +11 -0
- pygpt_net/data/js/highlight/es/languages/sml.js +83 -0
- pygpt_net/data/js/highlight/es/languages/sml.min.js +14 -0
- pygpt_net/data/js/highlight/es/languages/sqf.js +2670 -0
- pygpt_net/data/js/highlight/es/languages/sqf.min.js +17 -0
- pygpt_net/data/js/highlight/es/languages/sql.js +690 -0
- pygpt_net/data/js/highlight/es/languages/sql.min.js +17 -0
- pygpt_net/data/js/highlight/es/languages/stan.js +529 -0
- pygpt_net/data/js/highlight/es/languages/stan.min.js +28 -0
- pygpt_net/data/js/highlight/es/languages/stata.js +61 -0
- pygpt_net/data/js/highlight/es/languages/stata.min.js +11 -0
- pygpt_net/data/js/highlight/es/languages/step21.js +75 -0
- pygpt_net/data/js/highlight/es/languages/step21.min.js +10 -0
- pygpt_net/data/js/highlight/es/languages/stylus.js +912 -0
- pygpt_net/data/js/highlight/es/languages/stylus.min.js +36 -0
- pygpt_net/data/js/highlight/es/languages/subunit.js +52 -0
- pygpt_net/data/js/highlight/es/languages/subunit.min.js +10 -0
- pygpt_net/data/js/highlight/es/languages/swift.js +951 -0
- pygpt_net/data/js/highlight/es/languages/swift.min.js +66 -0
- pygpt_net/data/js/highlight/es/languages/taggerscript.js +67 -0
- pygpt_net/data/js/highlight/es/languages/taggerscript.min.js +7 -0
- pygpt_net/data/js/highlight/es/languages/tap.js +55 -0
- pygpt_net/data/js/highlight/es/languages/tap.min.js +7 -0
- pygpt_net/data/js/highlight/es/languages/tcl.js +199 -0
- pygpt_net/data/js/highlight/es/languages/tcl.min.js +15 -0
- pygpt_net/data/js/highlight/es/languages/thrift.js +85 -0
- pygpt_net/data/js/highlight/es/languages/thrift.min.js +12 -0
- pygpt_net/data/js/highlight/es/languages/tp.js +180 -0
- pygpt_net/data/js/highlight/es/languages/tp.min.js +19 -0
- pygpt_net/data/js/highlight/es/languages/twig.js +268 -0
- pygpt_net/data/js/highlight/es/languages/twig.min.js +18 -0
- pygpt_net/data/js/highlight/es/languages/typescript.js +909 -0
- pygpt_net/data/js/highlight/es/languages/typescript.min.js +98 -0
- pygpt_net/data/js/highlight/es/languages/vala.js +69 -0
- pygpt_net/data/js/highlight/es/languages/vala.min.js +9 -0
- pygpt_net/data/js/highlight/es/languages/vbnet.js +165 -0
- pygpt_net/data/js/highlight/es/languages/vbnet.min.js +25 -0
- pygpt_net/data/js/highlight/es/languages/vbscript-html.js +32 -0
- pygpt_net/data/js/highlight/es/languages/vbscript-html.min.js +4 -0
- pygpt_net/data/js/highlight/es/languages/vbscript.js +228 -0
- pygpt_net/data/js/highlight/es/languages/vbscript.min.js +10 -0
- pygpt_net/data/js/highlight/es/languages/verilog.js +558 -0
- pygpt_net/data/js/highlight/es/languages/verilog.min.js +17 -0
- pygpt_net/data/js/highlight/es/languages/vhdl.js +224 -0
- pygpt_net/data/js/highlight/es/languages/vhdl.min.js +13 -0
- pygpt_net/data/js/highlight/es/languages/vim.js +137 -0
- pygpt_net/data/js/highlight/es/languages/vim.min.js +12 -0
- pygpt_net/data/js/highlight/es/languages/wasm.js +147 -0
- pygpt_net/data/js/highlight/es/languages/wasm.min.js +15 -0
- pygpt_net/data/js/highlight/es/languages/wren.js +310 -0
- pygpt_net/data/js/highlight/es/languages/wren.min.js +30 -0
- pygpt_net/data/js/highlight/es/languages/x86asm.js +161 -0
- pygpt_net/data/js/highlight/es/languages/x86asm.min.js +18 -0
- pygpt_net/data/js/highlight/es/languages/xl.js +213 -0
- pygpt_net/data/js/highlight/es/languages/xl.min.js +15 -0
- pygpt_net/data/js/highlight/es/languages/xml.js +249 -0
- pygpt_net/data/js/highlight/es/languages/xml.min.js +29 -0
- pygpt_net/data/js/highlight/es/languages/xquery.js +368 -0
- pygpt_net/data/js/highlight/es/languages/xquery.min.js +33 -0
- pygpt_net/data/js/highlight/es/languages/yaml.js +203 -0
- pygpt_net/data/js/highlight/es/languages/yaml.min.js +25 -0
- pygpt_net/data/js/highlight/es/languages/zephir.js +137 -0
- pygpt_net/data/js/highlight/es/languages/zephir.min.js +18 -0
- pygpt_net/data/js/highlight/es/package.json +1 -0
- pygpt_net/data/js/highlight/highlight.js +60739 -0
- pygpt_net/data/js/highlight/highlight.min.js +3861 -0
- pygpt_net/data/js/highlight/languages/1c.js +554 -0
- pygpt_net/data/js/highlight/languages/1c.min.js +25 -0
- pygpt_net/data/js/highlight/languages/abnf.js +93 -0
- pygpt_net/data/js/highlight/languages/abnf.min.js +11 -0
- pygpt_net/data/js/highlight/languages/accesslog.js +102 -0
- pygpt_net/data/js/highlight/languages/accesslog.min.js +13 -0
- pygpt_net/data/js/highlight/languages/actionscript.js +163 -0
- pygpt_net/data/js/highlight/languages/actionscript.min.js +17 -0
- pygpt_net/data/js/highlight/languages/ada.js +275 -0
- pygpt_net/data/js/highlight/languages/ada.min.js +25 -0
- pygpt_net/data/js/highlight/languages/angelscript.js +188 -0
- pygpt_net/data/js/highlight/languages/angelscript.min.js +21 -0
- pygpt_net/data/js/highlight/languages/apache.js +111 -0
- pygpt_net/data/js/highlight/languages/apache.min.js +14 -0
- pygpt_net/data/js/highlight/languages/applescript.js +159 -0
- pygpt_net/data/js/highlight/languages/applescript.min.js +19 -0
- pygpt_net/data/js/highlight/languages/arcade.js +427 -0
- pygpt_net/data/js/highlight/languages/arcade.min.js +27 -0
- pygpt_net/data/js/highlight/languages/arduino.js +1016 -0
- pygpt_net/data/js/highlight/languages/arduino.min.js +54 -0
- pygpt_net/data/js/highlight/languages/armasm.js +134 -0
- pygpt_net/data/js/highlight/languages/armasm.min.js +17 -0
- pygpt_net/data/js/highlight/languages/asciidoc.js +271 -0
- pygpt_net/data/js/highlight/languages/asciidoc.min.js +35 -0
- pygpt_net/data/js/highlight/languages/aspectj.js +241 -0
- pygpt_net/data/js/highlight/languages/aspectj.min.js +31 -0
- pygpt_net/data/js/highlight/languages/autohotkey.js +85 -0
- pygpt_net/data/js/highlight/languages/autohotkey.min.js +14 -0
- pygpt_net/data/js/highlight/languages/autoit.js +188 -0
- pygpt_net/data/js/highlight/languages/autoit.min.js +21 -0
- pygpt_net/data/js/highlight/languages/avrasm.js +88 -0
- pygpt_net/data/js/highlight/languages/avrasm.min.js +12 -0
- pygpt_net/data/js/highlight/languages/awk.js +78 -0
- pygpt_net/data/js/highlight/languages/awk.min.js +11 -0
- pygpt_net/data/js/highlight/languages/axapta.js +198 -0
- pygpt_net/data/js/highlight/languages/axapta.min.js +11 -0
- pygpt_net/data/js/highlight/languages/bash.js +417 -0
- pygpt_net/data/js/highlight/languages/bash.min.js +21 -0
- pygpt_net/data/js/highlight/languages/basic.js +240 -0
- pygpt_net/data/js/highlight/languages/basic.min.js +10 -0
- pygpt_net/data/js/highlight/languages/bnf.js +49 -0
- pygpt_net/data/js/highlight/languages/bnf.min.js +6 -0
- pygpt_net/data/js/highlight/languages/brainfuck.js +64 -0
- pygpt_net/data/js/highlight/languages/brainfuck.min.js +8 -0
- pygpt_net/data/js/highlight/languages/c.js +342 -0
- pygpt_net/data/js/highlight/languages/c.min.js +40 -0
- pygpt_net/data/js/highlight/languages/cal.js +170 -0
- pygpt_net/data/js/highlight/languages/cal.min.js +15 -0
- pygpt_net/data/js/highlight/languages/capnproto.js +109 -0
- pygpt_net/data/js/highlight/languages/capnproto.min.js +11 -0
- pygpt_net/data/js/highlight/languages/ceylon.js +150 -0
- pygpt_net/data/js/highlight/languages/ceylon.min.js +15 -0
- pygpt_net/data/js/highlight/languages/clean.js +77 -0
- pygpt_net/data/js/highlight/languages/clean.min.js +8 -0
- pygpt_net/data/js/highlight/languages/clojure-repl.js +37 -0
- pygpt_net/data/js/highlight/languages/clojure-repl.min.js +4 -0
- pygpt_net/data/js/highlight/languages/clojure.js +194 -0
- pygpt_net/data/js/highlight/languages/clojure.min.js +25 -0
- pygpt_net/data/js/highlight/languages/cmake.js +74 -0
- pygpt_net/data/js/highlight/languages/cmake.min.js +7 -0
- pygpt_net/data/js/highlight/languages/coffeescript.js +376 -0
- pygpt_net/data/js/highlight/languages/coffeescript.min.js +29 -0
- pygpt_net/data/js/highlight/languages/coq.js +455 -0
- pygpt_net/data/js/highlight/languages/coq.min.js +7 -0
- pygpt_net/data/js/highlight/languages/cos.js +150 -0
- pygpt_net/data/js/highlight/languages/cos.min.js +15 -0
- pygpt_net/data/js/highlight/languages/cpp.js +613 -0
- pygpt_net/data/js/highlight/languages/cpp.min.js +47 -0
- pygpt_net/data/js/highlight/languages/crmsh.js +110 -0
- pygpt_net/data/js/highlight/languages/crmsh.min.js +19 -0
- pygpt_net/data/js/highlight/languages/crystal.js +322 -0
- pygpt_net/data/js/highlight/languages/crystal.min.js +48 -0
- pygpt_net/data/js/highlight/languages/csharp.js +416 -0
- pygpt_net/data/js/highlight/languages/csharp.min.js +49 -0
- pygpt_net/data/js/highlight/languages/csp.js +68 -0
- pygpt_net/data/js/highlight/languages/csp.min.js +7 -0
- pygpt_net/data/js/highlight/languages/css.js +864 -0
- pygpt_net/data/js/highlight/languages/css.min.js +31 -0
- pygpt_net/data/js/highlight/languages/d.js +282 -0
- pygpt_net/data/js/highlight/languages/d.min.js +20 -0
- pygpt_net/data/js/highlight/languages/dart.js +272 -0
- pygpt_net/data/js/highlight/languages/dart.min.js +22 -0
- pygpt_net/data/js/highlight/languages/delphi.js +256 -0
- pygpt_net/data/js/highlight/languages/delphi.min.js +19 -0
- pygpt_net/data/js/highlight/languages/diff.js +72 -0
- pygpt_net/data/js/highlight/languages/diff.min.js +9 -0
- pygpt_net/data/js/highlight/languages/django.js +85 -0
- pygpt_net/data/js/highlight/languages/django.min.js +13 -0
- pygpt_net/data/js/highlight/languages/dns.js +88 -0
- pygpt_net/data/js/highlight/languages/dns.min.js +11 -0
- pygpt_net/data/js/highlight/languages/dockerfile.js +54 -0
- pygpt_net/data/js/highlight/languages/dockerfile.min.js +8 -0
- pygpt_net/data/js/highlight/languages/dos.js +177 -0
- pygpt_net/data/js/highlight/languages/dos.min.js +12 -0
- pygpt_net/data/js/highlight/languages/dsconfig.js +76 -0
- pygpt_net/data/js/highlight/languages/dsconfig.min.js +9 -0
- pygpt_net/data/js/highlight/languages/dts.js +167 -0
- pygpt_net/data/js/highlight/languages/dts.min.js +22 -0
- pygpt_net/data/js/highlight/languages/dust.js +57 -0
- pygpt_net/data/js/highlight/languages/dust.min.js +8 -0
- pygpt_net/data/js/highlight/languages/ebnf.js +64 -0
- pygpt_net/data/js/highlight/languages/ebnf.min.js +7 -0
- pygpt_net/data/js/highlight/languages/elixir.js +289 -0
- pygpt_net/data/js/highlight/languages/elixir.min.js +34 -0
- pygpt_net/data/js/highlight/languages/elm.js +153 -0
- pygpt_net/data/js/highlight/languages/elm.min.js +18 -0
- pygpt_net/data/js/highlight/languages/erb.js +39 -0
- pygpt_net/data/js/highlight/languages/erb.min.js +5 -0
- pygpt_net/data/js/highlight/languages/erlang-repl.js +64 -0
- pygpt_net/data/js/highlight/languages/erlang-repl.min.js +13 -0
- pygpt_net/data/js/highlight/languages/erlang.js +209 -0
- pygpt_net/data/js/highlight/languages/erlang.min.js +28 -0
- pygpt_net/data/js/highlight/languages/excel.js +555 -0
- pygpt_net/data/js/highlight/languages/excel.min.js +10 -0
- pygpt_net/data/js/highlight/languages/fix.js +49 -0
- pygpt_net/data/js/highlight/languages/fix.min.js +7 -0
- pygpt_net/data/js/highlight/languages/flix.js +89 -0
- pygpt_net/data/js/highlight/languages/flix.min.js +10 -0
- pygpt_net/data/js/highlight/languages/fortran.js +584 -0
- pygpt_net/data/js/highlight/languages/fortran.min.js +17 -0
- pygpt_net/data/js/highlight/languages/fsharp.js +637 -0
- pygpt_net/data/js/highlight/languages/fsharp.min.js +47 -0
- pygpt_net/data/js/highlight/languages/gams.js +191 -0
- pygpt_net/data/js/highlight/languages/gams.min.js +28 -0
- pygpt_net/data/js/highlight/languages/gauss.js +316 -0
- pygpt_net/data/js/highlight/languages/gauss.min.js +36 -0
- pygpt_net/data/js/highlight/languages/gcode.js +91 -0
- pygpt_net/data/js/highlight/languages/gcode.min.js +16 -0
- pygpt_net/data/js/highlight/languages/gherkin.js +59 -0
- pygpt_net/data/js/highlight/languages/gherkin.min.js +8 -0
- pygpt_net/data/js/highlight/languages/glsl.js +138 -0
- pygpt_net/data/js/highlight/languages/glsl.min.js +8 -0
- pygpt_net/data/js/highlight/languages/gml.js +3140 -0
- pygpt_net/data/js/highlight/languages/gml.min.js +10 -0
- pygpt_net/data/js/highlight/languages/go.js +166 -0
- pygpt_net/data/js/highlight/languages/go.min.js +20 -0
- pygpt_net/data/js/highlight/languages/golo.js +91 -0
- pygpt_net/data/js/highlight/languages/golo.min.js +6 -0
- pygpt_net/data/js/highlight/languages/gradle.js +200 -0
- pygpt_net/data/js/highlight/languages/gradle.min.js +5 -0
- pygpt_net/data/js/highlight/languages/graphql.js +88 -0
- pygpt_net/data/js/highlight/languages/graphql.min.js +12 -0
- pygpt_net/data/js/highlight/languages/groovy.js +200 -0
- pygpt_net/data/js/highlight/languages/groovy.min.js +21 -0
- pygpt_net/data/js/highlight/languages/haml.js +123 -0
- pygpt_net/data/js/highlight/languages/haml.min.js +18 -0
- pygpt_net/data/js/highlight/languages/handlebars.js +268 -0
- pygpt_net/data/js/highlight/languages/handlebars.min.js +29 -0
- pygpt_net/data/js/highlight/languages/haskell.js +227 -0
- pygpt_net/data/js/highlight/languages/haskell.min.js +32 -0
- pygpt_net/data/js/highlight/languages/haxe.js +177 -0
- pygpt_net/data/js/highlight/languages/haxe.min.js +29 -0
- pygpt_net/data/js/highlight/languages/hsp.js +69 -0
- pygpt_net/data/js/highlight/languages/hsp.min.js +14 -0
- pygpt_net/data/js/highlight/languages/http.js +107 -0
- pygpt_net/data/js/highlight/languages/http.min.js +14 -0
- pygpt_net/data/js/highlight/languages/hy.js +147 -0
- pygpt_net/data/js/highlight/languages/hy.min.js +16 -0
- pygpt_net/data/js/highlight/languages/inform7.js +80 -0
- pygpt_net/data/js/highlight/languages/inform7.min.js +11 -0
- pygpt_net/data/js/highlight/languages/ini.js +131 -0
- pygpt_net/data/js/highlight/languages/ini.min.js +15 -0
- pygpt_net/data/js/highlight/languages/irpf90.js +117 -0
- pygpt_net/data/js/highlight/languages/irpf90.min.js +15 -0
- pygpt_net/data/js/highlight/languages/isbl.js +3215 -0
- pygpt_net/data/js/highlight/languages/isbl.min.js +25 -0
- pygpt_net/data/js/highlight/languages/java.js +300 -0
- pygpt_net/data/js/highlight/languages/java.min.js +38 -0
- pygpt_net/data/js/highlight/languages/javascript.js +777 -0
- pygpt_net/data/js/highlight/languages/javascript.min.js +81 -0
- pygpt_net/data/js/highlight/languages/jboss-cli.js +73 -0
- pygpt_net/data/js/highlight/languages/jboss-cli.min.js +10 -0
- pygpt_net/data/js/highlight/languages/json.js +64 -0
- pygpt_net/data/js/highlight/languages/json.min.js +8 -0
- pygpt_net/data/js/highlight/languages/julia-repl.js +61 -0
- pygpt_net/data/js/highlight/languages/julia-repl.min.js +5 -0
- pygpt_net/data/js/highlight/languages/julia.js +452 -0
- pygpt_net/data/js/highlight/languages/julia.min.js +18 -0
- pygpt_net/data/js/highlight/languages/kotlin.js +296 -0
- pygpt_net/data/js/highlight/languages/kotlin.min.js +46 -0
- pygpt_net/data/js/highlight/languages/lasso.js +181 -0
- pygpt_net/data/js/highlight/languages/lasso.min.js +29 -0
- pygpt_net/data/js/highlight/languages/latex.js +288 -0
- pygpt_net/data/js/highlight/languages/latex.min.js +33 -0
- pygpt_net/data/js/highlight/languages/ldif.js +41 -0
- pygpt_net/data/js/highlight/languages/ldif.min.js +5 -0
- pygpt_net/data/js/highlight/languages/leaf.js +107 -0
- pygpt_net/data/js/highlight/languages/leaf.min.js +12 -0
- pygpt_net/data/js/highlight/languages/less.js +965 -0
- pygpt_net/data/js/highlight/languages/less.min.js +45 -0
- pygpt_net/data/js/highlight/languages/lisp.js +149 -0
- pygpt_net/data/js/highlight/languages/lisp.min.js +17 -0
- pygpt_net/data/js/highlight/languages/livecodeserver.js +183 -0
- pygpt_net/data/js/highlight/languages/livecodeserver.min.js +21 -0
- pygpt_net/data/js/highlight/languages/livescript.js +388 -0
- pygpt_net/data/js/highlight/languages/livescript.min.js +35 -0
- pygpt_net/data/js/highlight/languages/llvm.js +145 -0
- pygpt_net/data/js/highlight/languages/llvm.min.js +16 -0
- pygpt_net/data/js/highlight/languages/lsl.js +86 -0
- pygpt_net/data/js/highlight/languages/lsl.min.js +19 -0
- pygpt_net/data/js/highlight/languages/lua.js +90 -0
- pygpt_net/data/js/highlight/languages/lua.min.js +15 -0
- pygpt_net/data/js/highlight/languages/makefile.js +96 -0
- pygpt_net/data/js/highlight/languages/makefile.min.js +14 -0
- pygpt_net/data/js/highlight/languages/markdown.js +258 -0
- pygpt_net/data/js/highlight/languages/markdown.min.js +32 -0
- pygpt_net/data/js/highlight/languages/mathematica.js +7369 -0
- pygpt_net/data/js/highlight/languages/mathematica.min.js +21 -0
- pygpt_net/data/js/highlight/languages/matlab.js +117 -0
- pygpt_net/data/js/highlight/languages/matlab.min.js +15 -0
- pygpt_net/data/js/highlight/languages/maxima.js +424 -0
- pygpt_net/data/js/highlight/languages/maxima.min.js +12 -0
- pygpt_net/data/js/highlight/languages/mel.js +245 -0
- pygpt_net/data/js/highlight/languages/mel.min.js +8 -0
- pygpt_net/data/js/highlight/languages/mercury.js +118 -0
- pygpt_net/data/js/highlight/languages/mercury.min.js +16 -0
- pygpt_net/data/js/highlight/languages/mipsasm.js +114 -0
- pygpt_net/data/js/highlight/languages/mipsasm.min.js +15 -0
- pygpt_net/data/js/highlight/languages/mizar.js +37 -0
- pygpt_net/data/js/highlight/languages/mizar.min.js +4 -0
- pygpt_net/data/js/highlight/languages/mojolicious.js +46 -0
- pygpt_net/data/js/highlight/languages/mojolicious.min.js +6 -0
- pygpt_net/data/js/highlight/languages/monkey.js +194 -0
- pygpt_net/data/js/highlight/languages/monkey.min.js +17 -0
- pygpt_net/data/js/highlight/languages/moonscript.js +151 -0
- pygpt_net/data/js/highlight/languages/moonscript.min.js +23 -0
- pygpt_net/data/js/highlight/languages/n1ql.js +375 -0
- pygpt_net/data/js/highlight/languages/n1ql.min.js +13 -0
- pygpt_net/data/js/highlight/languages/nestedtext.js +93 -0
- pygpt_net/data/js/highlight/languages/nestedtext.min.js +9 -0
- pygpt_net/data/js/highlight/languages/nginx.js +163 -0
- pygpt_net/data/js/highlight/languages/nginx.min.js +21 -0
- pygpt_net/data/js/highlight/languages/nim.js +195 -0
- pygpt_net/data/js/highlight/languages/nim.min.js +15 -0
- pygpt_net/data/js/highlight/languages/nix.js +105 -0
- pygpt_net/data/js/highlight/languages/nix.min.js +13 -0
- pygpt_net/data/js/highlight/languages/node-repl.js +43 -0
- pygpt_net/data/js/highlight/languages/node-repl.min.js +5 -0
- pygpt_net/data/js/highlight/languages/nsis.js +567 -0
- pygpt_net/data/js/highlight/languages/nsis.min.js +23 -0
- pygpt_net/data/js/highlight/languages/objectivec.js +263 -0
- pygpt_net/data/js/highlight/languages/objectivec.min.js +23 -0
- pygpt_net/data/js/highlight/languages/ocaml.js +93 -0
- pygpt_net/data/js/highlight/languages/ocaml.min.js +14 -0
- pygpt_net/data/js/highlight/languages/openscad.js +87 -0
- pygpt_net/data/js/highlight/languages/openscad.min.js +15 -0
- pygpt_net/data/js/highlight/languages/oxygene.js +97 -0
- pygpt_net/data/js/highlight/languages/oxygene.min.js +13 -0
- pygpt_net/data/js/highlight/languages/parser3.js +65 -0
- pygpt_net/data/js/highlight/languages/parser3.min.js +10 -0
- pygpt_net/data/js/highlight/languages/perl.js +514 -0
- pygpt_net/data/js/highlight/languages/perl.min.js +41 -0
- pygpt_net/data/js/highlight/languages/pf.js +70 -0
- pygpt_net/data/js/highlight/languages/pf.min.js +10 -0
- pygpt_net/data/js/highlight/languages/pgsql.js +535 -0
- pygpt_net/data/js/highlight/languages/pgsql.min.js +69 -0
- pygpt_net/data/js/highlight/languages/php-template.js +64 -0
- pygpt_net/data/js/highlight/languages/php-template.min.js +8 -0
- pygpt_net/data/js/highlight/languages/php.js +623 -0
- pygpt_net/data/js/highlight/languages/php.min.js +58 -0
- pygpt_net/data/js/highlight/languages/plaintext.js +29 -0
- pygpt_net/data/js/highlight/languages/plaintext.min.js +4 -0
- pygpt_net/data/js/highlight/languages/pony.js +100 -0
- pygpt_net/data/js/highlight/languages/pony.min.js +12 -0
- pygpt_net/data/js/highlight/languages/powershell.js +327 -0
- pygpt_net/data/js/highlight/languages/powershell.min.js +39 -0
- pygpt_net/data/js/highlight/languages/processing.js +444 -0
- pygpt_net/data/js/highlight/languages/processing.min.js +18 -0
- pygpt_net/data/js/highlight/languages/profile.js +53 -0
- pygpt_net/data/js/highlight/languages/profile.min.js +9 -0
- pygpt_net/data/js/highlight/languages/prolog.js +107 -0
- pygpt_net/data/js/highlight/languages/prolog.min.js +11 -0
- pygpt_net/data/js/highlight/languages/properties.js +78 -0
- pygpt_net/data/js/highlight/languages/properties.min.js +10 -0
- pygpt_net/data/js/highlight/languages/protobuf.js +89 -0
- pygpt_net/data/js/highlight/languages/protobuf.min.js +11 -0
- pygpt_net/data/js/highlight/languages/puppet.js +156 -0
- pygpt_net/data/js/highlight/languages/puppet.min.js +18 -0
- pygpt_net/data/js/highlight/languages/purebasic.js +110 -0
- pygpt_net/data/js/highlight/languages/purebasic.min.js +11 -0
- pygpt_net/data/js/highlight/languages/python-repl.js +42 -0
- pygpt_net/data/js/highlight/languages/python-repl.min.js +5 -0
- pygpt_net/data/js/highlight/languages/python.js +446 -0
- pygpt_net/data/js/highlight/languages/python.min.js +42 -0
- pygpt_net/data/js/highlight/languages/q.js +48 -0
- pygpt_net/data/js/highlight/languages/q.min.js +8 -0
- pygpt_net/data/js/highlight/languages/qml.js +199 -0
- pygpt_net/data/js/highlight/languages/qml.min.js +29 -0
- pygpt_net/data/js/highlight/languages/r.js +267 -0
- pygpt_net/data/js/highlight/languages/r.min.js +26 -0
- pygpt_net/data/js/highlight/languages/reasonml.js +152 -0
- pygpt_net/data/js/highlight/languages/reasonml.min.js +18 -0
- pygpt_net/data/js/highlight/languages/rib.js +47 -0
- pygpt_net/data/js/highlight/languages/rib.min.js +6 -0
- pygpt_net/data/js/highlight/languages/roboconf.js +92 -0
- pygpt_net/data/js/highlight/languages/roboconf.min.js +12 -0
- pygpt_net/data/js/highlight/languages/routeros.js +174 -0
- pygpt_net/data/js/highlight/languages/routeros.min.js +22 -0
- pygpt_net/data/js/highlight/languages/rsl.js +159 -0
- pygpt_net/data/js/highlight/languages/rsl.min.js +11 -0
- pygpt_net/data/js/highlight/languages/ruby.js +458 -0
- pygpt_net/data/js/highlight/languages/ruby.min.js +54 -0
- pygpt_net/data/js/highlight/languages/ruleslanguage.js +86 -0
- pygpt_net/data/js/highlight/languages/ruleslanguage.min.js +9 -0
- pygpt_net/data/js/highlight/languages/rust.js +326 -0
- pygpt_net/data/js/highlight/languages/rust.min.js +27 -0
- pygpt_net/data/js/highlight/languages/sas.js +567 -0
- pygpt_net/data/js/highlight/languages/sas.min.js +18 -0
- pygpt_net/data/js/highlight/languages/scala.js +224 -0
- pygpt_net/data/js/highlight/languages/scala.min.js +28 -0
- pygpt_net/data/js/highlight/languages/scheme.js +206 -0
- pygpt_net/data/js/highlight/languages/scheme.min.js +20 -0
- pygpt_net/data/js/highlight/languages/scilab.js +83 -0
- pygpt_net/data/js/highlight/languages/scilab.min.js +13 -0
- pygpt_net/data/js/highlight/languages/scss.js +854 -0
- pygpt_net/data/js/highlight/languages/scss.min.js +33 -0
- pygpt_net/data/js/highlight/languages/shell.js +43 -0
- pygpt_net/data/js/highlight/languages/shell.min.js +5 -0
- pygpt_net/data/js/highlight/languages/smali.js +136 -0
- pygpt_net/data/js/highlight/languages/smali.min.js +13 -0
- pygpt_net/data/js/highlight/languages/smalltalk.js +79 -0
- pygpt_net/data/js/highlight/languages/smalltalk.min.js +11 -0
- pygpt_net/data/js/highlight/languages/sml.js +85 -0
- pygpt_net/data/js/highlight/languages/sml.min.js +14 -0
- pygpt_net/data/js/highlight/languages/sqf.js +2672 -0
- pygpt_net/data/js/highlight/languages/sqf.min.js +17 -0
- pygpt_net/data/js/highlight/languages/sql.js +692 -0
- pygpt_net/data/js/highlight/languages/sql.min.js +17 -0
- pygpt_net/data/js/highlight/languages/stan.js +531 -0
- pygpt_net/data/js/highlight/languages/stan.min.js +28 -0
- pygpt_net/data/js/highlight/languages/stata.js +63 -0
- pygpt_net/data/js/highlight/languages/stata.min.js +11 -0
- pygpt_net/data/js/highlight/languages/step21.js +77 -0
- pygpt_net/data/js/highlight/languages/step21.min.js +10 -0
- pygpt_net/data/js/highlight/languages/stylus.js +914 -0
- pygpt_net/data/js/highlight/languages/stylus.min.js +36 -0
- pygpt_net/data/js/highlight/languages/subunit.js +54 -0
- pygpt_net/data/js/highlight/languages/subunit.min.js +9 -0
- pygpt_net/data/js/highlight/languages/swift.js +953 -0
- pygpt_net/data/js/highlight/languages/swift.min.js +66 -0
- pygpt_net/data/js/highlight/languages/taggerscript.js +69 -0
- pygpt_net/data/js/highlight/languages/taggerscript.min.js +8 -0
- pygpt_net/data/js/highlight/languages/tap.js +57 -0
- pygpt_net/data/js/highlight/languages/tap.min.js +7 -0
- pygpt_net/data/js/highlight/languages/tcl.js +201 -0
- pygpt_net/data/js/highlight/languages/tcl.min.js +15 -0
- pygpt_net/data/js/highlight/languages/thrift.js +87 -0
- pygpt_net/data/js/highlight/languages/thrift.min.js +12 -0
- pygpt_net/data/js/highlight/languages/tp.js +182 -0
- pygpt_net/data/js/highlight/languages/tp.min.js +19 -0
- pygpt_net/data/js/highlight/languages/twig.js +270 -0
- pygpt_net/data/js/highlight/languages/twig.min.js +18 -0
- pygpt_net/data/js/highlight/languages/typescript.js +911 -0
- pygpt_net/data/js/highlight/languages/typescript.min.js +98 -0
- pygpt_net/data/js/highlight/languages/vala.js +71 -0
- pygpt_net/data/js/highlight/languages/vala.min.js +9 -0
- pygpt_net/data/js/highlight/languages/vbnet.js +167 -0
- pygpt_net/data/js/highlight/languages/vbnet.min.js +25 -0
- pygpt_net/data/js/highlight/languages/vbscript-html.js +34 -0
- pygpt_net/data/js/highlight/languages/vbscript-html.min.js +4 -0
- pygpt_net/data/js/highlight/languages/vbscript.js +230 -0
- pygpt_net/data/js/highlight/languages/vbscript.min.js +10 -0
- pygpt_net/data/js/highlight/languages/verilog.js +560 -0
- pygpt_net/data/js/highlight/languages/verilog.min.js +17 -0
- pygpt_net/data/js/highlight/languages/vhdl.js +226 -0
- pygpt_net/data/js/highlight/languages/vhdl.min.js +13 -0
- pygpt_net/data/js/highlight/languages/vim.js +139 -0
- pygpt_net/data/js/highlight/languages/vim.min.js +12 -0
- pygpt_net/data/js/highlight/languages/wasm.js +149 -0
- pygpt_net/data/js/highlight/languages/wasm.min.js +14 -0
- pygpt_net/data/js/highlight/languages/wren.js +312 -0
- pygpt_net/data/js/highlight/languages/wren.min.js +30 -0
- pygpt_net/data/js/highlight/languages/x86asm.js +163 -0
- pygpt_net/data/js/highlight/languages/x86asm.min.js +19 -0
- pygpt_net/data/js/highlight/languages/xl.js +215 -0
- pygpt_net/data/js/highlight/languages/xl.min.js +15 -0
- pygpt_net/data/js/highlight/languages/xml.js +251 -0
- pygpt_net/data/js/highlight/languages/xml.min.js +29 -0
- pygpt_net/data/js/highlight/languages/xquery.js +370 -0
- pygpt_net/data/js/highlight/languages/xquery.min.js +33 -0
- pygpt_net/data/js/highlight/languages/yaml.js +205 -0
- pygpt_net/data/js/highlight/languages/yaml.min.js +25 -0
- pygpt_net/data/js/highlight/languages/zephir.js +139 -0
- pygpt_net/data/js/highlight/languages/zephir.min.js +18 -0
- pygpt_net/data/js/highlight/package.json +93 -0
- pygpt_net/data/js/highlight/styles/1c-light.css +107 -0
- pygpt_net/data/js/highlight/styles/1c-light.min.css +9 -0
- pygpt_net/data/js/highlight/styles/a11y-dark.css +94 -0
- pygpt_net/data/js/highlight/styles/a11y-dark.min.css +7 -0
- pygpt_net/data/js/highlight/styles/a11y-light.css +94 -0
- pygpt_net/data/js/highlight/styles/a11y-light.min.css +7 -0
- pygpt_net/data/js/highlight/styles/agate.css +127 -0
- pygpt_net/data/js/highlight/styles/agate.min.css +20 -0
- pygpt_net/data/js/highlight/styles/an-old-hope.css +75 -0
- pygpt_net/data/js/highlight/styles/an-old-hope.min.css +9 -0
- pygpt_net/data/js/highlight/styles/androidstudio.css +60 -0
- pygpt_net/data/js/highlight/styles/androidstudio.min.css +1 -0
- pygpt_net/data/js/highlight/styles/arduino-light.css +78 -0
- pygpt_net/data/js/highlight/styles/arduino-light.min.css +1 -0
- pygpt_net/data/js/highlight/styles/arta.css +66 -0
- pygpt_net/data/js/highlight/styles/arta.min.css +1 -0
- pygpt_net/data/js/highlight/styles/ascetic.css +45 -0
- pygpt_net/data/js/highlight/styles/ascetic.min.css +1 -0
- pygpt_net/data/js/highlight/styles/atom-one-dark-reasonable.css +105 -0
- pygpt_net/data/js/highlight/styles/atom-one-dark-reasonable.min.css +1 -0
- pygpt_net/data/js/highlight/styles/atom-one-dark.css +90 -0
- pygpt_net/data/js/highlight/styles/atom-one-dark.min.css +1 -0
- pygpt_net/data/js/highlight/styles/atom-one-light.css +90 -0
- pygpt_net/data/js/highlight/styles/atom-one-light.min.css +1 -0
- pygpt_net/data/js/highlight/styles/brown-paper.css +63 -0
- pygpt_net/data/js/highlight/styles/brown-paper.min.css +1 -0
- pygpt_net/data/js/highlight/styles/brown-papersq.png +0 -0
- pygpt_net/data/js/highlight/styles/codepen-embed.css +57 -0
- pygpt_net/data/js/highlight/styles/codepen-embed.min.css +1 -0
- pygpt_net/data/js/highlight/styles/codeschool.css +163 -0
- pygpt_net/data/js/highlight/styles/codeschool.min.css +7 -0
- pygpt_net/data/js/highlight/styles/color-brewer.css +66 -0
- pygpt_net/data/js/highlight/styles/color-brewer.min.css +1 -0
- pygpt_net/data/js/highlight/styles/darcula.css +163 -0
- pygpt_net/data/js/highlight/styles/darcula.min.css +7 -0
- pygpt_net/data/js/highlight/styles/dark.css +62 -0
- pygpt_net/data/js/highlight/styles/dark.min.css +1 -0
- pygpt_net/data/js/highlight/styles/default-dark.css +163 -0
- pygpt_net/data/js/highlight/styles/default-dark.min.css +7 -0
- pygpt_net/data/js/highlight/styles/default-light.css +163 -0
- pygpt_net/data/js/highlight/styles/default-light.min.css +7 -0
- pygpt_net/data/js/highlight/styles/default.css +117 -0
- pygpt_net/data/js/highlight/styles/default.min.css +9 -0
- pygpt_net/data/js/highlight/styles/devibeans.css +90 -0
- pygpt_net/data/js/highlight/styles/devibeans.min.css +7 -0
- pygpt_net/data/js/highlight/styles/docco.css +83 -0
- pygpt_net/data/js/highlight/styles/docco.min.css +1 -0
- pygpt_net/data/js/highlight/styles/far.css +67 -0
- pygpt_net/data/js/highlight/styles/far.min.css +1 -0
- pygpt_net/data/js/highlight/styles/felipec.css +94 -0
- pygpt_net/data/js/highlight/styles/felipec.min.css +7 -0
- pygpt_net/data/js/highlight/styles/foundation.css +80 -0
- pygpt_net/data/js/highlight/styles/foundation.min.css +1 -0
- pygpt_net/data/js/highlight/styles/github-dark-dimmed.css +117 -0
- pygpt_net/data/js/highlight/styles/github-dark-dimmed.min.css +9 -0
- pygpt_net/data/js/highlight/styles/github-dark.css +118 -0
- pygpt_net/data/js/highlight/styles/github-dark.min.css +10 -0
- pygpt_net/data/js/highlight/styles/github.css +118 -0
- pygpt_net/data/js/highlight/styles/github.min.css +10 -0
- pygpt_net/data/js/highlight/styles/gml.css +72 -0
- pygpt_net/data/js/highlight/styles/gml.min.css +1 -0
- pygpt_net/data/js/highlight/styles/googlecode.css +79 -0
- pygpt_net/data/js/highlight/styles/googlecode.min.css +1 -0
- pygpt_net/data/js/highlight/styles/gradient-dark.css +90 -0
- pygpt_net/data/js/highlight/styles/gradient-dark.min.css +1 -0
- pygpt_net/data/js/highlight/styles/gradient-light.css +90 -0
- pygpt_net/data/js/highlight/styles/gradient-light.min.css +1 -0
- pygpt_net/data/js/highlight/styles/grayscale.css +89 -0
- pygpt_net/data/js/highlight/styles/grayscale.min.css +1 -0
- pygpt_net/data/js/highlight/styles/hybrid.css +88 -0
- pygpt_net/data/js/highlight/styles/hybrid.min.css +1 -0
- pygpt_net/data/js/highlight/styles/idea.css +86 -0
- pygpt_net/data/js/highlight/styles/idea.min.css +1 -0
- pygpt_net/data/js/highlight/styles/intellij-light.css +107 -0
- pygpt_net/data/js/highlight/styles/intellij-light.min.css +1 -0
- pygpt_net/data/js/highlight/styles/ir-black.css +66 -0
- pygpt_net/data/js/highlight/styles/ir-black.min.css +1 -0
- pygpt_net/data/js/highlight/styles/isbl-editor-dark.css +94 -0
- pygpt_net/data/js/highlight/styles/isbl-editor-dark.min.css +1 -0
- pygpt_net/data/js/highlight/styles/isbl-editor-light.css +93 -0
- pygpt_net/data/js/highlight/styles/isbl-editor-light.min.css +1 -0
- pygpt_net/data/js/highlight/styles/kimbie-dark.css +69 -0
- pygpt_net/data/js/highlight/styles/kimbie-dark.min.css +1 -0
- pygpt_net/data/js/highlight/styles/kimbie-light.css +69 -0
- pygpt_net/data/js/highlight/styles/kimbie-light.min.css +1 -0
- pygpt_net/data/js/highlight/styles/lightfair.css +81 -0
- pygpt_net/data/js/highlight/styles/lightfair.min.css +1 -0
- pygpt_net/data/js/highlight/styles/lioshi.css +76 -0
- pygpt_net/data/js/highlight/styles/lioshi.min.css +1 -0
- pygpt_net/data/js/highlight/styles/magula.css +66 -0
- pygpt_net/data/js/highlight/styles/magula.min.css +1 -0
- pygpt_net/data/js/highlight/styles/material-darker.css +163 -0
- pygpt_net/data/js/highlight/styles/material-darker.min.css +7 -0
- pygpt_net/data/js/highlight/styles/material-lighter.css +163 -0
- pygpt_net/data/js/highlight/styles/material-lighter.min.css +7 -0
- pygpt_net/data/js/highlight/styles/material-palenight.css +163 -0
- pygpt_net/data/js/highlight/styles/material-palenight.min.css +7 -0
- pygpt_net/data/js/highlight/styles/material-vivid.css +163 -0
- pygpt_net/data/js/highlight/styles/material-vivid.min.css +7 -0
- pygpt_net/data/js/highlight/styles/material.css +163 -0
- pygpt_net/data/js/highlight/styles/material.min.css +7 -0
- pygpt_net/data/js/highlight/styles/mono-blue.css +56 -0
- pygpt_net/data/js/highlight/styles/mono-blue.min.css +1 -0
- pygpt_net/data/js/highlight/styles/monokai-sublime.css +76 -0
- pygpt_net/data/js/highlight/styles/monokai-sublime.min.css +1 -0
- pygpt_net/data/js/highlight/styles/monokai.css +70 -0
- pygpt_net/data/js/highlight/styles/monokai.min.css +1 -0
- pygpt_net/data/js/highlight/styles/night-owl.css +174 -0
- pygpt_net/data/js/highlight/styles/night-owl.min.css +1 -0
- pygpt_net/data/js/highlight/styles/nnfx-dark.css +104 -0
- pygpt_net/data/js/highlight/styles/nnfx-dark.min.css +10 -0
- pygpt_net/data/js/highlight/styles/nnfx-light.css +104 -0
- pygpt_net/data/js/highlight/styles/nnfx-light.min.css +10 -0
- pygpt_net/data/js/highlight/styles/nord.css +275 -0
- pygpt_net/data/js/highlight/styles/nord.min.css +1 -0
- pygpt_net/data/js/highlight/styles/obsidian.css +79 -0
- pygpt_net/data/js/highlight/styles/obsidian.min.css +1 -0
- pygpt_net/data/js/highlight/styles/panda-syntax-dark.css +92 -0
- pygpt_net/data/js/highlight/styles/panda-syntax-dark.min.css +1 -0
- pygpt_net/data/js/highlight/styles/panda-syntax-light.css +89 -0
- pygpt_net/data/js/highlight/styles/panda-syntax-light.min.css +1 -0
- pygpt_net/data/js/highlight/styles/paraiso-dark.css +67 -0
- pygpt_net/data/js/highlight/styles/paraiso-dark.min.css +1 -0
- pygpt_net/data/js/highlight/styles/paraiso-light.css +67 -0
- pygpt_net/data/js/highlight/styles/paraiso-light.min.css +1 -0
- pygpt_net/data/js/highlight/styles/pojoaque.css +76 -0
- pygpt_net/data/js/highlight/styles/pojoaque.jpg +0 -0
- pygpt_net/data/js/highlight/styles/pojoaque.min.css +1 -0
- pygpt_net/data/js/highlight/styles/purebasic.css +103 -0
- pygpt_net/data/js/highlight/styles/purebasic.min.css +1 -0
- pygpt_net/data/js/highlight/styles/qtcreator-dark.css +76 -0
- pygpt_net/data/js/highlight/styles/qtcreator-dark.min.css +1 -0
- pygpt_net/data/js/highlight/styles/qtcreator-light.css +74 -0
- pygpt_net/data/js/highlight/styles/qtcreator-light.min.css +1 -0
- pygpt_net/data/js/highlight/styles/rainbow.css +77 -0
- pygpt_net/data/js/highlight/styles/rainbow.min.css +1 -0
- pygpt_net/data/js/highlight/styles/routeros.css +86 -0
- pygpt_net/data/js/highlight/styles/routeros.min.css +1 -0
- pygpt_net/data/js/highlight/styles/school-book.css +62 -0
- pygpt_net/data/js/highlight/styles/school-book.min.css +1 -0
- pygpt_net/data/js/highlight/styles/shades-of-purple.css +84 -0
- pygpt_net/data/js/highlight/styles/shades-of-purple.min.css +1 -0
- pygpt_net/data/js/highlight/styles/srcery.css +89 -0
- pygpt_net/data/js/highlight/styles/srcery.min.css +1 -0
- pygpt_net/data/js/highlight/styles/stackoverflow-dark.css +117 -0
- pygpt_net/data/js/highlight/styles/stackoverflow-dark.min.css +13 -0
- pygpt_net/data/js/highlight/styles/stackoverflow-light.css +117 -0
- pygpt_net/data/js/highlight/styles/stackoverflow-light.min.css +13 -0
- pygpt_net/data/js/highlight/styles/sunburst.css +89 -0
- pygpt_net/data/js/highlight/styles/sunburst.min.css +1 -0
- pygpt_net/data/js/highlight/styles/tokyo-night-dark.css +114 -0
- pygpt_net/data/js/highlight/styles/tokyo-night-dark.min.css +8 -0
- pygpt_net/data/js/highlight/styles/tokyo-night-light.css +114 -0
- pygpt_net/data/js/highlight/styles/tokyo-night-light.min.css +8 -0
- pygpt_net/data/js/highlight/styles/tomorrow-night-blue.css +69 -0
- pygpt_net/data/js/highlight/styles/tomorrow-night-blue.min.css +1 -0
- pygpt_net/data/js/highlight/styles/tomorrow-night-bright.css +68 -0
- pygpt_net/data/js/highlight/styles/tomorrow-night-bright.min.css +1 -0
- pygpt_net/data/js/highlight/styles/vs.css +63 -0
- pygpt_net/data/js/highlight/styles/vs.min.css +1 -0
- pygpt_net/data/js/highlight/styles/vs2015.css +100 -0
- pygpt_net/data/js/highlight/styles/vs2015.min.css +1 -0
- pygpt_net/data/js/highlight/styles/windows-10-light.css +163 -0
- pygpt_net/data/js/highlight/styles/windows-10-light.min.css +7 -0
- pygpt_net/data/js/highlight/styles/windows-10.css +163 -0
- pygpt_net/data/js/highlight/styles/windows-10.min.css +7 -0
- pygpt_net/data/js/highlight/styles/xcode.css +90 -0
- pygpt_net/data/js/highlight/styles/xcode.min.css +1 -0
- pygpt_net/data/js/highlight/styles/xt256.css +79 -0
- pygpt_net/data/js/highlight/styles/xt256.min.css +1 -0
- pygpt_net/data/js/katex/auto-render.min.js +1 -0
- pygpt_net/data/js/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Main-Bold.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Main-Italic.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Main-Regular.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Math-Italic.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Script-Regular.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- pygpt_net/data/js/katex/katex.min.css +1 -0
- pygpt_net/data/js/katex/katex.min.js +1 -0
- pygpt_net/data/locale/locale.de.ini +580 -124
- pygpt_net/data/locale/locale.en.ini +820 -282
- pygpt_net/data/locale/locale.es.ini +580 -124
- pygpt_net/data/locale/locale.fr.ini +581 -125
- pygpt_net/data/locale/locale.it.ini +581 -125
- pygpt_net/data/locale/locale.pl.ini +584 -128
- pygpt_net/data/locale/locale.uk.ini +1046 -0
- pygpt_net/data/locale/locale.zh.ini +642 -189
- pygpt_net/data/locale/plugin.agent.de.ini +17 -0
- pygpt_net/data/locale/plugin.agent.en.ini +13 -18
- pygpt_net/data/locale/plugin.agent.es.ini +17 -0
- pygpt_net/data/locale/plugin.agent.fr.ini +17 -0
- pygpt_net/data/locale/plugin.agent.it.ini +17 -0
- pygpt_net/data/locale/plugin.agent.pl.ini +15 -18
- pygpt_net/data/locale/plugin.agent.uk.ini +17 -0
- pygpt_net/data/locale/plugin.agent.zh.ini +17 -0
- pygpt_net/data/locale/plugin.audio_input.de.ini +63 -0
- pygpt_net/data/locale/plugin.audio_input.en.ini +41 -67
- pygpt_net/data/locale/plugin.audio_input.es.ini +63 -0
- pygpt_net/data/locale/plugin.audio_input.fr.ini +63 -0
- pygpt_net/data/locale/plugin.audio_input.it.ini +63 -0
- pygpt_net/data/locale/plugin.audio_input.pl.ini +51 -64
- pygpt_net/data/locale/plugin.audio_input.uk.ini +63 -0
- pygpt_net/data/locale/plugin.audio_input.zh.ini +63 -0
- pygpt_net/data/locale/plugin.audio_output.de.ini +30 -0
- pygpt_net/data/locale/plugin.audio_output.en.ini +23 -36
- pygpt_net/data/locale/plugin.audio_output.es.ini +30 -0
- pygpt_net/data/locale/plugin.audio_output.fr.ini +30 -0
- pygpt_net/data/locale/plugin.audio_output.it.ini +30 -0
- pygpt_net/data/locale/plugin.audio_output.pl.ini +26 -27
- pygpt_net/data/locale/plugin.audio_output.uk.ini +30 -0
- pygpt_net/data/locale/plugin.audio_output.zh.ini +30 -0
- pygpt_net/data/locale/plugin.cmd_api.de.ini +12 -0
- pygpt_net/data/locale/plugin.cmd_api.en.ini +9 -13
- pygpt_net/data/locale/plugin.cmd_api.es.ini +12 -0
- pygpt_net/data/locale/plugin.cmd_api.fr.ini +12 -0
- pygpt_net/data/locale/plugin.cmd_api.it.ini +12 -0
- pygpt_net/data/locale/plugin.cmd_api.pl.ini +10 -17
- pygpt_net/data/locale/plugin.cmd_api.uk.ini +12 -0
- pygpt_net/data/locale/plugin.cmd_api.zh.ini +12 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.de.ini +33 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.en.ini +60 -34
- pygpt_net/data/locale/plugin.cmd_code_interpreter.es.ini +33 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.fr.ini +33 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.it.ini +33 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.pl.ini +32 -26
- pygpt_net/data/locale/plugin.cmd_code_interpreter.uk.ini +33 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.zh.ini +33 -0
- pygpt_net/data/locale/plugin.cmd_custom.de.ini +6 -0
- pygpt_net/data/locale/plugin.cmd_custom.en.ini +4 -6
- pygpt_net/data/locale/plugin.cmd_custom.es.ini +6 -0
- pygpt_net/data/locale/plugin.cmd_custom.fr.ini +6 -0
- pygpt_net/data/locale/plugin.cmd_custom.it.ini +6 -0
- pygpt_net/data/locale/plugin.cmd_custom.pl.ini +4 -5
- pygpt_net/data/locale/plugin.cmd_custom.uk.ini +6 -0
- pygpt_net/data/locale/plugin.cmd_custom.zh.ini +6 -0
- pygpt_net/data/locale/plugin.cmd_files.de.ini +56 -0
- pygpt_net/data/locale/plugin.cmd_files.en.ini +42 -68
- pygpt_net/data/locale/plugin.cmd_files.es.ini +56 -0
- pygpt_net/data/locale/plugin.cmd_files.fr.ini +56 -0
- pygpt_net/data/locale/plugin.cmd_files.it.ini +56 -0
- pygpt_net/data/locale/plugin.cmd_files.pl.ini +55 -75
- pygpt_net/data/locale/plugin.cmd_files.uk.ini +56 -0
- pygpt_net/data/locale/plugin.cmd_files.zh.ini +56 -0
- pygpt_net/data/locale/plugin.cmd_history.de.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_history.en.ini +25 -39
- pygpt_net/data/locale/plugin.cmd_history.es.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_history.fr.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_history.it.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_history.pl.ini +28 -44
- pygpt_net/data/locale/plugin.cmd_history.uk.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_history.zh.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.de.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.en.ini +33 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.es.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.fr.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.it.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.pl.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.uk.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.zh.ini +31 -0
- pygpt_net/data/locale/plugin.cmd_serial.de.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_serial.en.ini +13 -20
- pygpt_net/data/locale/plugin.cmd_serial.es.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_serial.fr.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_serial.it.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_serial.pl.ini +14 -31
- pygpt_net/data/locale/plugin.cmd_serial.uk.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_serial.zh.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_system.de.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_system.en.ini +23 -0
- pygpt_net/data/locale/plugin.cmd_system.es.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_system.fr.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_system.it.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_system.pl.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_system.uk.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_system.zh.ini +17 -0
- pygpt_net/data/locale/plugin.cmd_web.de.ini +62 -0
- pygpt_net/data/locale/plugin.cmd_web.en.ini +58 -71
- pygpt_net/data/locale/plugin.cmd_web.es.ini +62 -0
- pygpt_net/data/locale/plugin.cmd_web.fr.ini +62 -0
- pygpt_net/data/locale/plugin.cmd_web.it.ini +62 -0
- pygpt_net/data/locale/plugin.cmd_web.pl.ini +59 -76
- pygpt_net/data/locale/plugin.cmd_web.uk.ini +62 -0
- pygpt_net/data/locale/plugin.cmd_web.zh.ini +62 -0
- pygpt_net/data/locale/plugin.crontab.de.ini +9 -0
- pygpt_net/data/locale/plugin.crontab.en.ini +5 -8
- pygpt_net/data/locale/plugin.crontab.es.ini +9 -0
- pygpt_net/data/locale/plugin.crontab.fr.ini +9 -0
- pygpt_net/data/locale/plugin.crontab.it.ini +9 -0
- pygpt_net/data/locale/plugin.crontab.pl.ini +7 -10
- pygpt_net/data/locale/plugin.crontab.uk.ini +9 -0
- pygpt_net/data/locale/plugin.crontab.zh.ini +9 -0
- pygpt_net/data/locale/plugin.experts.de.ini +3 -0
- pygpt_net/data/locale/plugin.experts.en.ini +3 -0
- pygpt_net/data/locale/plugin.experts.es.ini +3 -0
- pygpt_net/data/locale/plugin.experts.fr.ini +3 -0
- pygpt_net/data/locale/plugin.experts.it.ini +3 -0
- pygpt_net/data/locale/plugin.experts.pl.ini +3 -0
- pygpt_net/data/locale/plugin.experts.uk.ini +3 -0
- pygpt_net/data/locale/plugin.experts.zh.ini +3 -0
- pygpt_net/data/locale/plugin.extra_prompt.de.ini +5 -0
- pygpt_net/data/locale/plugin.extra_prompt.en.ini +3 -4
- pygpt_net/data/locale/plugin.extra_prompt.es.ini +5 -0
- pygpt_net/data/locale/plugin.extra_prompt.fr.ini +5 -0
- pygpt_net/data/locale/plugin.extra_prompt.it.ini +5 -0
- pygpt_net/data/locale/plugin.extra_prompt.pl.ini +4 -6
- pygpt_net/data/locale/plugin.extra_prompt.uk.ini +5 -0
- pygpt_net/data/locale/plugin.extra_prompt.zh.ini +5 -0
- pygpt_net/data/locale/plugin.idx_llama_index.de.ini +23 -0
- pygpt_net/data/locale/plugin.idx_llama_index.en.ini +20 -30
- pygpt_net/data/locale/plugin.idx_llama_index.es.ini +23 -0
- pygpt_net/data/locale/plugin.idx_llama_index.fr.ini +23 -0
- pygpt_net/data/locale/plugin.idx_llama_index.it.ini +23 -0
- pygpt_net/data/locale/plugin.idx_llama_index.pl.ini +21 -16
- pygpt_net/data/locale/plugin.idx_llama_index.uk.ini +23 -0
- pygpt_net/data/locale/plugin.idx_llama_index.zh.ini +23 -0
- pygpt_net/data/locale/plugin.mailer.en.ini +21 -0
- pygpt_net/data/locale/plugin.openai_dalle.de.ini +5 -0
- pygpt_net/data/locale/plugin.openai_dalle.en.ini +2 -3
- pygpt_net/data/locale/plugin.openai_dalle.es.ini +5 -0
- pygpt_net/data/locale/plugin.openai_dalle.fr.ini +5 -0
- pygpt_net/data/locale/plugin.openai_dalle.it.ini +5 -0
- pygpt_net/data/locale/plugin.openai_dalle.pl.ini +3 -4
- pygpt_net/data/locale/plugin.openai_dalle.uk.ini +5 -0
- pygpt_net/data/locale/plugin.openai_dalle.zh.ini +5 -0
- pygpt_net/data/locale/plugin.openai_vision.de.ini +15 -0
- pygpt_net/data/locale/plugin.openai_vision.en.ini +11 -16
- pygpt_net/data/locale/plugin.openai_vision.es.ini +15 -0
- pygpt_net/data/locale/plugin.openai_vision.fr.ini +15 -0
- pygpt_net/data/locale/plugin.openai_vision.it.ini +15 -0
- pygpt_net/data/locale/plugin.openai_vision.pl.ini +11 -16
- pygpt_net/data/locale/plugin.openai_vision.uk.ini +15 -0
- pygpt_net/data/locale/plugin.openai_vision.zh.ini +15 -0
- pygpt_net/data/locale/plugin.real_time.de.ini +12 -0
- pygpt_net/data/locale/plugin.real_time.en.ini +8 -11
- pygpt_net/data/locale/plugin.real_time.es.ini +12 -0
- pygpt_net/data/locale/plugin.real_time.fr.ini +12 -0
- pygpt_net/data/locale/plugin.real_time.it.ini +12 -0
- pygpt_net/data/locale/plugin.real_time.pl.ini +8 -11
- pygpt_net/data/locale/plugin.real_time.uk.ini +12 -0
- pygpt_net/data/locale/plugin.real_time.zh.ini +12 -0
- pygpt_net/data/locale/plugin.voice_control.de.ini +5 -0
- pygpt_net/data/locale/plugin.voice_control.en.ini +5 -0
- pygpt_net/data/locale/plugin.voice_control.es.ini +5 -0
- pygpt_net/data/locale/plugin.voice_control.fr.ini +5 -0
- pygpt_net/data/locale/plugin.voice_control.it.ini +5 -0
- pygpt_net/data/locale/plugin.voice_control.pl.ini +5 -0
- pygpt_net/data/locale/plugin.voice_control.uk.ini +5 -0
- pygpt_net/data/locale/plugin.voice_control.zh.ini +5 -0
- pygpt_net/data/prompts.csv +169 -0
- pygpt_net/data/win32/README.rtf +0 -0
- pygpt_net/data/win32/USER-LICENSE.rtf +0 -0
- pygpt_net/data/win32/banner.bmp +0 -0
- pygpt_net/data/win32/banner_welcome.bmp +0 -0
- pygpt_net/fonts.qrc +64 -0
- pygpt_net/fonts_rc.py +67878 -0
- pygpt_net/icons.qrc +138 -403
- pygpt_net/icons_rc.py +214 -133
- pygpt_net/item/assistant.py +192 -28
- pygpt_net/item/attachment.py +35 -3
- pygpt_net/item/ctx.py +294 -17
- pygpt_net/item/model.py +58 -3
- pygpt_net/item/preset.py +41 -1
- pygpt_net/item/prompt.py +63 -0
- pygpt_net/js.qrc +8 -0
- pygpt_net/js_rc.py +50785 -0
- pygpt_net/launcher.py +81 -3
- pygpt_net/migrations/Version20240408180000.py +34 -0
- pygpt_net/migrations/Version20240426050000.py +55 -0
- pygpt_net/migrations/Version20240501030000.py +31 -0
- pygpt_net/migrations/Version20241122130000.py +34 -0
- pygpt_net/migrations/Version20241126170000.py +28 -0
- pygpt_net/migrations/Version20241215110000.py +25 -0
- pygpt_net/migrations/__init__.py +13 -2
- pygpt_net/plugin/agent/__init__.py +25 -154
- pygpt_net/plugin/agent/config.py +146 -0
- pygpt_net/plugin/audio_input/__init__.py +54 -263
- pygpt_net/plugin/audio_input/config.py +247 -0
- pygpt_net/plugin/audio_input/simple.py +68 -9
- pygpt_net/plugin/audio_input/worker.py +43 -2
- pygpt_net/plugin/audio_output/__init__.py +61 -34
- pygpt_net/plugin/audio_output/config.py +34 -0
- pygpt_net/plugin/audio_output/worker.py +56 -13
- pygpt_net/plugin/base/__init__.py +0 -0
- pygpt_net/plugin/base/config.py +26 -0
- pygpt_net/plugin/{base.py → base/plugin.py} +212 -133
- pygpt_net/plugin/base/signals.py +23 -0
- pygpt_net/plugin/base/worker.py +268 -0
- pygpt_net/plugin/cmd_api/__init__.py +16 -112
- pygpt_net/plugin/cmd_api/config.py +91 -0
- pygpt_net/plugin/cmd_api/worker.py +19 -25
- pygpt_net/plugin/cmd_code_interpreter/__init__.py +166 -194
- pygpt_net/plugin/cmd_code_interpreter/builder.py +82 -0
- pygpt_net/plugin/cmd_code_interpreter/config.py +390 -0
- pygpt_net/plugin/cmd_code_interpreter/docker.py +63 -0
- pygpt_net/plugin/cmd_code_interpreter/ipython/__init__.py +13 -0
- pygpt_net/plugin/cmd_code_interpreter/ipython/docker_kernel.py +546 -0
- pygpt_net/plugin/cmd_code_interpreter/ipython/local_kernel.py +220 -0
- pygpt_net/plugin/cmd_code_interpreter/output.py +42 -0
- pygpt_net/plugin/cmd_code_interpreter/runner.py +207 -48
- pygpt_net/plugin/cmd_code_interpreter/worker.py +188 -120
- pygpt_net/plugin/cmd_custom/__init__.py +15 -75
- pygpt_net/plugin/cmd_custom/config.py +54 -0
- pygpt_net/plugin/cmd_custom/worker.py +15 -30
- pygpt_net/plugin/cmd_files/__init__.py +31 -436
- pygpt_net/plugin/cmd_files/config.py +426 -0
- pygpt_net/plugin/cmd_files/output.py +42 -0
- pygpt_net/plugin/cmd_files/worker.py +203 -356
- pygpt_net/plugin/cmd_history/__init__.py +33 -294
- pygpt_net/plugin/cmd_history/config.py +270 -0
- pygpt_net/plugin/cmd_history/worker.py +56 -88
- pygpt_net/plugin/cmd_mouse_control/__init__.py +166 -0
- pygpt_net/plugin/cmd_mouse_control/config.py +277 -0
- pygpt_net/plugin/cmd_mouse_control/worker.py +327 -0
- pygpt_net/plugin/cmd_serial/__init__.py +15 -127
- pygpt_net/plugin/cmd_serial/config.py +105 -0
- pygpt_net/plugin/cmd_serial/worker.py +28 -59
- pygpt_net/plugin/cmd_system/__init__.py +169 -0
- pygpt_net/plugin/cmd_system/config.py +137 -0
- pygpt_net/plugin/cmd_system/docker.py +63 -0
- pygpt_net/plugin/cmd_system/output.py +42 -0
- pygpt_net/plugin/cmd_system/runner.py +258 -0
- pygpt_net/plugin/cmd_system/worker.py +120 -0
- pygpt_net/plugin/cmd_web/__init__.py +127 -321
- pygpt_net/plugin/cmd_web/config.py +367 -0
- pygpt_net/plugin/cmd_web/websearch.py +96 -35
- pygpt_net/plugin/cmd_web/worker.py +226 -118
- pygpt_net/plugin/crontab/__init__.py +20 -83
- pygpt_net/plugin/crontab/config.py +73 -0
- pygpt_net/plugin/experts/__init__.py +81 -0
- pygpt_net/plugin/experts/config.py +26 -0
- pygpt_net/plugin/extra_prompt/__init__.py +10 -42
- pygpt_net/plugin/extra_prompt/config.py +44 -0
- pygpt_net/plugin/idx_llama_index/__init__.py +88 -162
- pygpt_net/plugin/idx_llama_index/config.py +134 -0
- pygpt_net/plugin/idx_llama_index/worker.py +31 -31
- pygpt_net/plugin/mailer/__init__.py +123 -0
- pygpt_net/plugin/mailer/config.py +149 -0
- pygpt_net/plugin/mailer/runner.py +285 -0
- pygpt_net/plugin/mailer/worker.py +123 -0
- pygpt_net/plugin/openai_dalle/__init__.py +63 -67
- pygpt_net/plugin/openai_dalle/config.py +72 -0
- pygpt_net/plugin/openai_vision/__init__.py +105 -143
- pygpt_net/plugin/openai_vision/config.py +118 -0
- pygpt_net/plugin/openai_vision/worker.py +159 -0
- pygpt_net/plugin/real_time/__init__.py +101 -51
- pygpt_net/plugin/real_time/config.py +61 -0
- pygpt_net/plugin/voice_control/__init__.py +158 -0
- pygpt_net/plugin/voice_control/config.py +35 -0
- pygpt_net/provider/agents/__init__.py +0 -0
- pygpt_net/provider/agents/base.py +36 -0
- pygpt_net/provider/agents/openai.py +43 -0
- pygpt_net/provider/agents/openai_assistant.py +77 -0
- pygpt_net/provider/agents/planner.py +52 -0
- pygpt_net/provider/agents/react.py +68 -0
- pygpt_net/provider/audio_input/base.py +2 -2
- pygpt_net/provider/audio_output/base.py +2 -2
- pygpt_net/provider/audio_output/openai_tts.py +5 -11
- pygpt_net/provider/core/assistant/base.py +5 -3
- pygpt_net/provider/core/assistant/json_file.py +21 -5
- pygpt_net/provider/core/assistant_file/__init__.py +10 -0
- pygpt_net/provider/core/assistant_file/base.py +55 -0
- pygpt_net/provider/core/assistant_file/db_sqlite/__init__.py +201 -0
- pygpt_net/provider/core/assistant_file/db_sqlite/patch.py +27 -0
- pygpt_net/provider/core/assistant_file/db_sqlite/storage.py +352 -0
- pygpt_net/provider/core/assistant_file/db_sqlite/utils.py +62 -0
- pygpt_net/provider/core/assistant_store/__init__.py +10 -0
- pygpt_net/provider/core/assistant_store/base.py +56 -0
- pygpt_net/provider/core/assistant_store/db_sqlite/__init__.py +135 -0
- pygpt_net/provider/core/assistant_store/db_sqlite/patch.py +27 -0
- pygpt_net/provider/core/assistant_store/db_sqlite/storage.py +240 -0
- pygpt_net/provider/core/assistant_store/db_sqlite/utils.py +66 -0
- pygpt_net/provider/core/assistant_store/json_file.py +150 -0
- pygpt_net/provider/core/attachment/base.py +5 -3
- pygpt_net/provider/core/attachment/json_file.py +14 -4
- pygpt_net/provider/core/calendar/base.py +5 -3
- pygpt_net/provider/core/calendar/db_sqlite/__init__.py +6 -5
- pygpt_net/provider/core/calendar/db_sqlite/storage.py +5 -4
- pygpt_net/provider/core/config/base.py +8 -6
- pygpt_net/provider/core/config/json_file.py +9 -7
- pygpt_net/provider/core/config/patch.py +535 -1
- pygpt_net/provider/core/ctx/base.py +47 -19
- pygpt_net/provider/core/ctx/db_sqlite/__init__.py +152 -20
- pygpt_net/provider/core/ctx/db_sqlite/storage.py +530 -46
- pygpt_net/provider/core/ctx/db_sqlite/utils.py +87 -17
- pygpt_net/provider/core/index/base.py +129 -23
- pygpt_net/provider/core/index/db_sqlite/__init__.py +130 -23
- pygpt_net/provider/core/index/db_sqlite/storage.py +130 -23
- pygpt_net/provider/core/index/db_sqlite/utils.py +4 -2
- pygpt_net/provider/core/mode/base.py +5 -3
- pygpt_net/provider/core/mode/json_file.py +7 -6
- pygpt_net/provider/core/model/base.py +6 -4
- pygpt_net/provider/core/model/json_file.py +13 -7
- pygpt_net/provider/core/model/patch.py +274 -1
- pygpt_net/provider/core/notepad/base.py +5 -3
- pygpt_net/provider/core/notepad/db_sqlite/__init__.py +5 -4
- pygpt_net/provider/core/notepad/db_sqlite/storage.py +4 -3
- pygpt_net/provider/core/plugin_preset/base.py +4 -2
- pygpt_net/provider/core/plugin_preset/json_file.py +5 -3
- pygpt_net/provider/core/preset/base.py +6 -4
- pygpt_net/provider/core/preset/json_file.py +75 -33
- pygpt_net/provider/core/preset/patch.py +63 -1
- pygpt_net/provider/core/prompt/__init__.py +0 -0
- pygpt_net/provider/core/prompt/base.py +51 -0
- pygpt_net/provider/core/prompt/json_file.py +170 -0
- pygpt_net/provider/gpt/__init__.py +107 -60
- pygpt_net/provider/gpt/assistants.py +252 -239
- pygpt_net/provider/gpt/audio.py +64 -0
- pygpt_net/provider/gpt/chat.py +159 -54
- pygpt_net/provider/gpt/completion.py +67 -36
- pygpt_net/provider/gpt/image.py +77 -47
- pygpt_net/provider/gpt/store.py +608 -0
- pygpt_net/provider/gpt/summarizer.py +15 -3
- pygpt_net/provider/gpt/utils.py +27 -0
- pygpt_net/provider/gpt/vision.py +110 -46
- pygpt_net/provider/gpt/worker/assistants.py +454 -36
- pygpt_net/provider/gpt/worker/importer.py +320 -38
- pygpt_net/provider/llms/anthropic.py +23 -20
- pygpt_net/provider/llms/azure_openai.py +39 -6
- pygpt_net/provider/llms/base.py +64 -10
- pygpt_net/provider/llms/google.py +73 -0
- pygpt_net/provider/llms/hugging_face.py +18 -6
- pygpt_net/provider/llms/hugging_face_api.py +85 -0
- pygpt_net/provider/llms/local.py +43 -0
- pygpt_net/provider/llms/ollama.py +83 -5
- pygpt_net/provider/llms/openai.py +50 -6
- pygpt_net/provider/loaders/base.py +25 -1
- pygpt_net/provider/loaders/file_csv.py +5 -1
- pygpt_net/provider/loaders/file_html.py +5 -1
- pygpt_net/provider/loaders/file_image_vision.py +12 -3
- pygpt_net/provider/loaders/file_ipynb.py +5 -1
- pygpt_net/provider/loaders/file_markdown.py +5 -1
- pygpt_net/provider/loaders/file_pdf.py +4 -1
- pygpt_net/provider/loaders/file_video_audio.py +5 -1
- pygpt_net/provider/loaders/file_xml.py +4 -1
- pygpt_net/provider/loaders/hub/github/issues.py +5 -5
- pygpt_net/provider/loaders/hub/google/gmail.py +2 -2
- pygpt_net/provider/loaders/hub/image_vision/base.py +22 -0
- pygpt_net/provider/loaders/hub/json/base.py +2 -2
- pygpt_net/provider/loaders/hub/pandas_excel/base.py +2 -2
- pygpt_net/provider/loaders/hub/simple_csv/base.py +2 -2
- pygpt_net/provider/loaders/hub/yt/base.py +6 -1
- pygpt_net/provider/loaders/web_bitbucket.py +6 -1
- pygpt_net/provider/loaders/web_chatgpt_retrieval.py +7 -1
- pygpt_net/provider/loaders/web_database.py +22 -3
- pygpt_net/provider/loaders/web_github_issues.py +22 -1
- pygpt_net/provider/loaders/web_github_repo.py +23 -1
- pygpt_net/provider/loaders/web_google_calendar.py +13 -1
- pygpt_net/provider/loaders/web_google_docs.py +10 -1
- pygpt_net/provider/loaders/web_google_drive.py +18 -2
- pygpt_net/provider/loaders/web_google_gmail.py +12 -2
- pygpt_net/provider/loaders/web_google_keep.py +8 -1
- pygpt_net/provider/loaders/web_google_sheets.py +10 -1
- pygpt_net/provider/loaders/web_microsoft_onedrive.py +20 -1
- pygpt_net/provider/loaders/web_page.py +4 -2
- pygpt_net/provider/loaders/web_rss.py +3 -1
- pygpt_net/provider/loaders/web_sitemap.py +13 -3
- pygpt_net/provider/loaders/web_twitter.py +8 -2
- pygpt_net/provider/loaders/web_yt.py +35 -2
- pygpt_net/provider/vector_stores/__init__.py +113 -14
- pygpt_net/provider/vector_stores/base.py +45 -10
- pygpt_net/provider/vector_stores/chroma.py +22 -6
- pygpt_net/provider/vector_stores/ctx_attachment.py +125 -0
- pygpt_net/provider/vector_stores/elasticsearch.py +21 -6
- pygpt_net/provider/vector_stores/pinecode.py +21 -6
- pygpt_net/provider/vector_stores/redis.py +21 -6
- pygpt_net/provider/vector_stores/simple.py +17 -6
- pygpt_net/provider/vector_stores/temp.py +21 -7
- pygpt_net/provider/web/base.py +11 -4
- pygpt_net/provider/web/google_custom_search.py +9 -3
- pygpt_net/provider/web/microsoft_bing.py +9 -3
- pygpt_net/tools/__init__.py +150 -0
- pygpt_net/{controller/audio/transcript.py → tools/audio_transcriber/__init__.py} +105 -41
- pygpt_net/tools/audio_transcriber/ui/__init__.py +0 -0
- pygpt_net/tools/audio_transcriber/ui/dialogs.py +150 -0
- pygpt_net/tools/base.py +113 -0
- pygpt_net/tools/code_interpreter/__init__.py +563 -0
- pygpt_net/tools/code_interpreter/ui/__init__.py +0 -0
- pygpt_net/tools/code_interpreter/ui/dialogs.py +127 -0
- pygpt_net/tools/code_interpreter/ui/widgets.py +386 -0
- pygpt_net/tools/html_canvas/__init__.py +320 -0
- pygpt_net/tools/html_canvas/ui/__init__.py +0 -0
- pygpt_net/tools/html_canvas/ui/dialogs.py +142 -0
- pygpt_net/tools/html_canvas/ui/widgets.py +135 -0
- pygpt_net/tools/image_viewer/__init__.py +303 -0
- pygpt_net/tools/image_viewer/ui/__init__.py +0 -0
- pygpt_net/tools/image_viewer/ui/dialogs.py +152 -0
- pygpt_net/tools/indexer/__init__.py +520 -0
- pygpt_net/tools/indexer/ui/__init__.py +0 -0
- pygpt_net/tools/indexer/ui/browse.py +46 -0
- pygpt_net/tools/indexer/ui/ctx.py +96 -0
- pygpt_net/tools/indexer/ui/dialogs.py +199 -0
- pygpt_net/tools/indexer/ui/files.py +101 -0
- pygpt_net/tools/indexer/ui/web.py +199 -0
- pygpt_net/tools/indexer/ui/widgets.py +121 -0
- pygpt_net/tools/media_player/__init__.py +202 -0
- pygpt_net/tools/media_player/ui/__init__.py +0 -0
- pygpt_net/tools/media_player/ui/dialogs.py +113 -0
- pygpt_net/{ui/widget/video/player.py → tools/media_player/ui/widgets.py} +61 -33
- pygpt_net/tools/text_editor/__init__.py +293 -0
- pygpt_net/tools/text_editor/ui/__init__.py +0 -0
- pygpt_net/tools/text_editor/ui/dialogs.py +80 -0
- pygpt_net/tools/text_editor/ui/widgets.py +77 -0
- pygpt_net/ui/__init__.py +90 -22
- pygpt_net/ui/base/config_dialog.py +2 -1
- pygpt_net/ui/base/context_menu.py +81 -0
- pygpt_net/ui/dialog/about.py +44 -29
- pygpt_net/ui/dialog/applog.py +17 -4
- pygpt_net/ui/dialog/assistant.py +45 -29
- pygpt_net/ui/dialog/assistant_store.py +525 -0
- pygpt_net/ui/dialog/db.py +111 -49
- pygpt_net/ui/dialog/editor.py +16 -68
- pygpt_net/ui/dialog/find.py +29 -0
- pygpt_net/ui/dialog/image.py +4 -44
- pygpt_net/ui/dialog/logger.py +2 -1
- pygpt_net/ui/dialog/plugins.py +8 -6
- pygpt_net/ui/dialog/preset.py +118 -47
- pygpt_net/ui/dialog/profile.py +118 -0
- pygpt_net/ui/dialog/settings.py +23 -7
- pygpt_net/ui/dialog/start.py +5 -2
- pygpt_net/ui/dialog/url.py +29 -0
- pygpt_net/ui/dialog/workdir.py +108 -0
- pygpt_net/ui/dialogs.py +35 -19
- pygpt_net/ui/layout/chat/__init__.py +3 -3
- pygpt_net/ui/layout/chat/attachments.py +56 -6
- pygpt_net/ui/layout/chat/attachments_ctx.py +162 -0
- pygpt_net/ui/layout/chat/attachments_uploaded.py +41 -16
- pygpt_net/ui/layout/chat/calendar.py +15 -21
- pygpt_net/ui/layout/chat/explorer.py +39 -0
- pygpt_net/ui/layout/chat/input.py +48 -11
- pygpt_net/ui/layout/chat/output.py +112 -99
- pygpt_net/ui/layout/chat/painter.py +35 -29
- pygpt_net/ui/layout/ctx/__init__.py +4 -1
- pygpt_net/ui/layout/ctx/ctx_list.py +233 -36
- pygpt_net/ui/layout/status.py +9 -1
- pygpt_net/ui/layout/toolbox/__init__.py +17 -23
- pygpt_net/ui/layout/toolbox/agent.py +23 -13
- pygpt_net/ui/layout/toolbox/agent_llama.py +74 -0
- pygpt_net/ui/layout/toolbox/assistants.py +12 -8
- pygpt_net/ui/layout/toolbox/footer.py +33 -7
- pygpt_net/ui/layout/toolbox/image.py +2 -1
- pygpt_net/ui/layout/toolbox/indexes.py +99 -12
- pygpt_net/ui/layout/toolbox/mode.py +11 -49
- pygpt_net/ui/layout/toolbox/model.py +12 -48
- pygpt_net/ui/layout/toolbox/presets.py +44 -12
- pygpt_net/ui/layout/toolbox/prompt.py +30 -15
- pygpt_net/ui/main.py +98 -20
- pygpt_net/ui/menu/__init__.py +11 -1
- pygpt_net/ui/menu/about.py +14 -3
- pygpt_net/ui/menu/audio.py +40 -11
- pygpt_net/ui/menu/config.py +61 -11
- pygpt_net/ui/menu/debug.py +34 -9
- pygpt_net/ui/menu/donate.py +46 -0
- pygpt_net/ui/menu/file.py +25 -3
- pygpt_net/ui/menu/theme.py +19 -1
- pygpt_net/ui/menu/tools.py +83 -0
- pygpt_net/ui/menu/video.py +1 -13
- pygpt_net/ui/tray.py +5 -5
- pygpt_net/ui/widget/anims/loader.py +229 -0
- pygpt_net/ui/widget/anims/toggles.py +167 -0
- pygpt_net/ui/widget/audio/input_button.py +53 -3
- pygpt_net/ui/widget/calendar/select.py +30 -4
- pygpt_net/ui/widget/dialog/alert.py +3 -1
- pygpt_net/ui/widget/dialog/{interpreter.py → assistant_store.py} +14 -14
- pygpt_net/ui/widget/dialog/audio.py +1 -38
- pygpt_net/ui/widget/dialog/base.py +22 -8
- pygpt_net/ui/widget/dialog/confirm.py +8 -7
- pygpt_net/ui/widget/dialog/debug.py +2 -1
- pygpt_net/ui/widget/dialog/editor_file.py +117 -13
- pygpt_net/ui/widget/dialog/find.py +88 -0
- pygpt_net/ui/widget/dialog/image.py +1 -1
- pygpt_net/ui/widget/dialog/preset_plugins.py +2 -2
- pygpt_net/ui/widget/dialog/profile.py +177 -0
- pygpt_net/ui/widget/dialog/url.py +207 -0
- pygpt_net/ui/widget/dialog/{video_player.py → workdir.py} +11 -11
- pygpt_net/ui/widget/draw/painter.py +40 -2
- pygpt_net/ui/widget/element/button.py +87 -3
- pygpt_net/ui/widget/element/group.py +38 -2
- pygpt_net/ui/widget/filesystem/explorer.py +46 -13
- pygpt_net/ui/widget/image/display.py +42 -9
- pygpt_net/ui/widget/lists/assistant_store.py +114 -0
- pygpt_net/ui/widget/lists/attachment.py +82 -15
- pygpt_net/ui/widget/lists/attachment_ctx.py +173 -0
- pygpt_net/ui/widget/lists/base.py +2 -2
- pygpt_net/ui/widget/lists/base_combo.py +130 -0
- pygpt_net/ui/widget/lists/base_list_combo.py +121 -0
- pygpt_net/ui/widget/lists/context.py +359 -173
- pygpt_net/ui/widget/lists/db.py +7 -3
- pygpt_net/ui/widget/lists/experts.py +136 -0
- pygpt_net/ui/widget/lists/index.py +3 -3
- pygpt_net/ui/widget/lists/index_combo.py +130 -0
- pygpt_net/ui/widget/lists/llama_mode_combo.py +35 -0
- pygpt_net/ui/widget/lists/mode.py +2 -6
- pygpt_net/ui/widget/lists/mode_combo.py +34 -0
- pygpt_net/ui/widget/lists/model_combo.py +34 -0
- pygpt_net/ui/widget/lists/preset.py +48 -1
- pygpt_net/ui/widget/lists/profile.py +141 -0
- pygpt_net/ui/widget/lists/uploaded.py +20 -7
- pygpt_net/ui/widget/option/checkbox.py +69 -6
- pygpt_net/ui/widget/option/cmd.py +11 -5
- pygpt_net/ui/widget/option/combo.py +41 -4
- pygpt_net/ui/widget/option/dictionary.py +33 -10
- pygpt_net/ui/widget/option/input.py +106 -2
- pygpt_net/ui/widget/option/prompt.py +14 -1
- pygpt_net/ui/widget/option/textarea.py +18 -1
- pygpt_net/ui/widget/option/toggle.py +63 -0
- pygpt_net/ui/widget/option/toggle_label.py +79 -0
- pygpt_net/ui/widget/tabs/Input.py +2 -2
- pygpt_net/ui/widget/tabs/body.py +36 -0
- pygpt_net/ui/widget/tabs/layout.py +195 -0
- pygpt_net/ui/widget/tabs/output.py +305 -26
- pygpt_net/ui/widget/textarea/calendar_note.py +55 -32
- pygpt_net/ui/widget/textarea/editor.py +66 -115
- pygpt_net/ui/widget/textarea/find.py +52 -0
- pygpt_net/ui/widget/textarea/html.py +329 -0
- pygpt_net/ui/widget/textarea/input.py +67 -33
- pygpt_net/ui/widget/textarea/notepad.py +77 -44
- pygpt_net/ui/widget/textarea/output.py +54 -40
- pygpt_net/ui/widget/textarea/search_input.py +9 -1
- pygpt_net/ui/widget/textarea/url.py +43 -0
- pygpt_net/ui/widget/textarea/web.py +361 -0
- pygpt_net/utils.py +100 -15
- {pygpt_net-2.1.37.dist-info → pygpt_net-2.4.48.dist-info}/LICENSE +2 -0
- {pygpt_net-2.1.37.dist-info → pygpt_net-2.4.48.dist-info}/METADATA +2288 -1173
- pygpt_net-2.4.48.dist-info/RECORD +2181 -0
- pygpt_net/controller/agent/flow.py +0 -223
- pygpt_net/controller/editor.py +0 -54
- pygpt_net/controller/interpreter.py +0 -299
- pygpt_net/controller/video.py +0 -107
- pygpt_net/core/bridge.py +0 -121
- pygpt_net/core/prompt.py +0 -69
- pygpt_net/data/locale/locale.ua.ini +0 -591
- pygpt_net/provider/llms/llama.py +0 -47
- pygpt_net/ui/dialog/audio.py +0 -75
- pygpt_net/ui/dialog/interpreter.py +0 -107
- pygpt_net/ui/dialog/video_player.py +0 -36
- pygpt_net/ui/widget/textarea/interpreter.py +0 -104
- pygpt_net-2.1.37.dist-info/RECORD +0 -760
- /pygpt_net/{ui/widget/video → core/text}/__init__.py +0 -0
- {pygpt_net-2.1.37.dist-info → pygpt_net-2.4.48.dist-info}/WHEEL +0 -0
- {pygpt_net-2.1.37.dist-info → pygpt_net-2.4.48.dist-info}/entry_points.txt +0 -0
README.md
CHANGED
@@ -2,33 +2,35 @@
|
|
2
2
|
|
3
3
|
[](https://snapcraft.io/pygpt)
|
4
4
|
|
5
|
-
Release: **2.
|
5
|
+
Release: **2.4.48** | build: **2025.01.16** | Python: **>=3.10, <3.13**
|
6
6
|
|
7
|
-
Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
Compiled version for Linux (`
|
7
|
+
> Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
|
8
|
+
>
|
9
|
+
> Discord: https://pygpt.net/discord | Snap: https://snapcraft.io/pygpt | PyPi: https://pypi.org/project/pygpt-net
|
10
|
+
>
|
11
|
+
> Compiled version for Linux (`zip`) and Windows 10/11 (`msi`) 64-bit: https://pygpt.net/#download
|
12
|
+
>
|
13
|
+
> ❤️ Donate: https://www.buymeacoffee.com/szczyglis | https://github.com/sponsors/szczyglis-dev
|
12
14
|
|
13
15
|
## Overview
|
14
16
|
|
15
|
-
**PyGPT** is **all-in-one** Desktop AI Assistant that provides direct interaction with OpenAI language models, including `
|
17
|
+
**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`.
|
16
18
|
|
17
|
-
This assistant offers multiple modes of operation such as chat, assistants, completions, and image-related tasks using `DALL-E 3` for generation and `
|
19
|
+
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`.
|
18
20
|
|
19
21
|
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.
|
20
22
|
|
21
23
|
**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.
|
22
24
|
|
23
|
-
Multiple operation modes are included, such as chat, text completion, assistant, vision,
|
25
|
+
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.
|
24
26
|
|
25
|
-
**Video** (mp4, version `2.
|
27
|
+
**Video** (mp4, version `2.4.35`, build `2024-11-28`):
|
26
28
|
|
27
|
-
https://github.com/
|
29
|
+
https://github.com/user-attachments/assets/5751a003-950f-40e7-a655-d098bbf27b0c
|
28
30
|
|
29
|
-
**Screenshot** (version `2.
|
31
|
+
**Screenshot** (version `2.4.35`, build `2024-11-28`):
|
30
32
|
|
31
|
-

|
32
34
|
|
33
35
|
You can download compiled 64-bit versions for Windows and Linux here: https://pygpt.net/#download
|
34
36
|
|
@@ -36,55 +38,59 @@ You can download compiled 64-bit versions for Windows and Linux here: https://py
|
|
36
38
|
|
37
39
|
- Desktop AI Assistant for `Linux`, `Windows` and `Mac`, written in Python.
|
38
40
|
- Works similarly to `ChatGPT`, but locally (on a desktop computer).
|
39
|
-
-
|
40
|
-
- Supports multiple models: `GPT-4`, `GPT-3.5`, and any model accessible through `
|
41
|
-
-
|
42
|
-
-
|
41
|
+
- 11 modes of operation: Chat, Vision, Completion, Assistant, Image generation, LangChain, Chat with Files, Chat with Audio, Experts, Autonomous Mode and Agents.
|
42
|
+
- 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.
|
43
|
+
- 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.
|
44
|
+
- Built-in vector databases support and automated files and data embedding.
|
45
|
+
- Included support features for individuals with disabilities: customizable keyboard shortcuts, voice control, and translation of on-screen actions into audio via speech synthesis.
|
46
|
+
- Handles and stores the full context of conversations (short and long-term memory).
|
43
47
|
- Internet access via `Google` and `Microsoft Bing`.
|
44
48
|
- Speech synthesis via `Microsoft Azure`, `Google`, `Eleven Labs` and `OpenAI` Text-To-Speech services.
|
45
|
-
- Speech recognition via `OpenAI Whisper`, `Google
|
46
|
-
-
|
47
|
-
-
|
48
|
-
- Integrated `
|
49
|
-
- 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.
|
49
|
+
- Speech recognition via `OpenAI Whisper`, `Google` and `Microsoft Speech Recognition`.
|
50
|
+
- Real-time video camera capture in Vision mode.
|
51
|
+
- Image analysis via `GPT-4 Vision` and `GPT-4o`.
|
52
|
+
- Integrated `LangChain` support (you can connect to any LLM, e.g., on `HuggingFace`).
|
50
53
|
- Integrated calendar, day notes and search in contexts by selected date.
|
51
|
-
-
|
54
|
+
- Tools and commands execution (via plugins: access to the local filesystem, Python Code Interpreter, system commands execution, and more).
|
52
55
|
- Custom commands creation and execution.
|
56
|
+
- Crontab / Task scheduler included.
|
53
57
|
- Manages files and attachments with options to upload, download, and organize.
|
54
58
|
- Context history with the capability to revert to previous contexts (long-term memory).
|
55
59
|
- Allows you to easily manage prompts with handy editable presets.
|
56
60
|
- Provides an intuitive operation and interface.
|
57
61
|
- Includes a notepad.
|
58
62
|
- Includes simple painter / drawing tool.
|
59
|
-
- Includes optional Autonomous Mode (Agents).
|
60
63
|
- Supports multiple languages.
|
61
|
-
- Enables the use of all the powerful features of `GPT-4`, `GPT-4V`, and `GPT-3.5`.
|
62
64
|
- Requires no previous knowledge of using AI models.
|
63
|
-
- Simplifies image generation using `DALL-E
|
64
|
-
- Possesses the potential to support future OpenAI models.
|
65
|
+
- Simplifies image generation using `DALL-E`.
|
65
66
|
- Fully configurable.
|
66
67
|
- Themes support.
|
68
|
+
- Real-time code syntax highlighting.
|
67
69
|
- Plugins support.
|
68
70
|
- Built-in token usage calculation.
|
69
|
-
-
|
71
|
+
- Possesses the potential to support future OpenAI models.
|
72
|
+
- **Open source**; source code is available on `GitHub`.
|
70
73
|
- Utilizes the user's own API key.
|
74
|
+
- and many more.
|
71
75
|
|
72
76
|
The application is free, open-source, and runs on PCs with `Linux`, `Windows 10`, `Windows 11` and `Mac`.
|
73
77
|
Full Python source code is available on `GitHub`.
|
74
78
|
|
75
|
-
**PyGPT uses the user's API key - to use the
|
76
|
-
you must have a registered OpenAI account and your own API key.**
|
79
|
+
**PyGPT uses the user's API key - to use the GPT models,
|
80
|
+
you must have a registered OpenAI account and your own API key. Local models do not require any API keys.**
|
77
81
|
|
78
|
-
You can also use built-it
|
82
|
+
You can also use built-it LangChain support to connect to other Large Language Models (LLMs),
|
79
83
|
such as those on HuggingFace. Additional API keys may be required.
|
80
84
|
|
81
85
|
# Installation
|
82
86
|
|
83
|
-
##
|
87
|
+
## Binaries (Linux, Windows 10 and 11)
|
84
88
|
|
85
|
-
You can download compiled versions for `Linux` and `Windows` (10/11).
|
89
|
+
You can download compiled binary versions for `Linux` and `Windows` (10/11).
|
86
90
|
|
87
|
-
|
91
|
+
**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.
|
92
|
+
|
93
|
+
Linux version requires `GLIBC` >= `2.35`.
|
88
94
|
|
89
95
|
## Snap Store
|
90
96
|
|
@@ -114,6 +120,18 @@ sudo snap connect pygpt:camera
|
|
114
120
|
sudo snap connect pygpt:audio-record :audio-record
|
115
121
|
```
|
116
122
|
|
123
|
+
**Connecting IPython in Docker in Snap version**:
|
124
|
+
|
125
|
+
To use IPython in the Snap version, you must connect PyGPT to the Docker daemon:
|
126
|
+
|
127
|
+
```commandline
|
128
|
+
sudo snap connect pygpt:docker-executables docker:docker-executables
|
129
|
+
```
|
130
|
+
|
131
|
+
````commandline
|
132
|
+
sudo snap connect pygpt:docker docker:docker-daemon
|
133
|
+
````
|
134
|
+
|
117
135
|
## PyPi (pip)
|
118
136
|
|
119
137
|
The application can also be installed from `PyPi` using `pip install`:
|
@@ -137,11 +155,11 @@ pip install pygpt-net
|
|
137
155
|
pygpt
|
138
156
|
```
|
139
157
|
|
140
|
-
##
|
158
|
+
## Running from GitHub source code
|
141
159
|
|
142
|
-
An alternative method is to download the source code from `GitHub` and execute the application using the Python interpreter (
|
160
|
+
An alternative method is to download the source code from `GitHub` and execute the application using the Python interpreter (`>=3.10`, `<3.13`).
|
143
161
|
|
144
|
-
###
|
162
|
+
### Install with pip
|
145
163
|
|
146
164
|
1. Clone git repository or download .zip file:
|
147
165
|
|
@@ -150,7 +168,7 @@ git clone https://github.com/szczyglis-dev/py-gpt.git
|
|
150
168
|
cd py-gpt
|
151
169
|
```
|
152
170
|
|
153
|
-
2. Create virtual environment:
|
171
|
+
2. Create a new virtual environment:
|
154
172
|
|
155
173
|
```commandline
|
156
174
|
python3 -m venv venv
|
@@ -169,7 +187,7 @@ pip install -r requirements.txt
|
|
169
187
|
python3 run.py
|
170
188
|
```
|
171
189
|
|
172
|
-
|
190
|
+
### Install with Poetry
|
173
191
|
|
174
192
|
1. Clone git repository or download .zip file:
|
175
193
|
|
@@ -234,9 +252,17 @@ sudo apt install libasound2-data
|
|
234
252
|
sudo apt install libasound2-plugins
|
235
253
|
```
|
236
254
|
|
255
|
+
**Problems with GLIBC on Linux**
|
256
|
+
|
257
|
+
If you encounter error:
|
258
|
+
|
259
|
+
```commandline
|
260
|
+
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)
|
261
|
+
```
|
262
|
+
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.
|
263
|
+
|
237
264
|
**Access to camera in Snap version:**
|
238
265
|
|
239
|
-
To use camera in Vision mode in Snap version you must connect the camera with:
|
240
266
|
|
241
267
|
```commandline
|
242
268
|
sudo snap connect pygpt:camera
|
@@ -261,33 +287,54 @@ The absence of the installed libraries may cause display errors or completely pr
|
|
261
287
|
|
262
288
|
It may also be necessary to add the path `C:\path\to\venv\Lib\python3.x\site-packages\PySide6` to the `PATH` variable.
|
263
289
|
|
290
|
+
**WebEngine/Chromium renderer and OpenGL problems**
|
291
|
+
|
292
|
+
If you have a problems with `WebEngine / Chromium` renderer you can force the legacy mode by launching the app with command line arguments:
|
293
|
+
|
294
|
+
``` ini
|
295
|
+
python3 run.py --legacy=1
|
296
|
+
```
|
297
|
+
|
298
|
+
and to force disable OpenGL hardware acceleration:
|
299
|
+
|
300
|
+
``` ini
|
301
|
+
python3 run.py --disable-gpu=1
|
302
|
+
```
|
303
|
+
|
304
|
+
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:
|
305
|
+
|
306
|
+
``` json
|
307
|
+
"render.engine": "legacy",
|
308
|
+
"render.open_gl": false,
|
309
|
+
```
|
310
|
+
|
264
311
|
## Other requirements
|
265
312
|
|
266
313
|
For operation, an internet connection is needed (for API connectivity), a registered OpenAI account,
|
267
|
-
and an active API key that must be input into the program.
|
314
|
+
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.
|
268
315
|
|
269
316
|
## Debugging and logging
|
270
317
|
|
271
|
-
|
318
|
+
Please go to `Debugging and Logging` section for instructions on how to log and diagnose issues in a more detailed manner.
|
272
319
|
|
273
320
|
|
274
321
|
# Quick Start
|
275
322
|
|
276
323
|
## Setting-up OpenAI API KEY
|
277
324
|
|
325
|
+
**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.
|
326
|
+
|
278
327
|
During the initial launch, you must configure your API key within the application.
|
279
328
|
|
280
329
|
To do so, navigate to the menu:
|
281
330
|
|
282
331
|
``` ini
|
283
|
-
Config -> Settings
|
332
|
+
Config -> Settings -> API Keys
|
284
333
|
```
|
285
334
|
|
286
335
|
and then paste the API key into the `OpenAI API KEY` field.
|
287
336
|
|
288
|
-
|
289
|
-
|
290
|
-

|
337
|
+

|
291
338
|
|
292
339
|
The API key can be obtained by registering on the OpenAI website:
|
293
340
|
|
@@ -299,126 +346,196 @@ Your API keys will be available here:
|
|
299
346
|
|
300
347
|
**Note:** The ability to use models within the application depends on the API user's access to a given model!
|
301
348
|
|
302
|
-
#
|
349
|
+
# Working modes
|
303
350
|
|
304
351
|
## Chat
|
305
352
|
|
306
|
-
**+
|
353
|
+
**+ Inline Vision and Image generation**
|
307
354
|
|
308
|
-
This mode in **PyGPT** mirrors `ChatGPT`, allowing you to chat with models such as `GPT-4`, `GPT-
|
355
|
+
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.
|
309
356
|
|
310
|
-
|
357
|
+
**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.**
|
311
358
|
|
312
|
-
|
359
|
+
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.
|
313
360
|
|
314
|
-
|
361
|
+
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.
|
315
362
|
|
316
|
-
|
317
|
-
Plugin allows you to send photos or image from camera to analysis in any Chat mode:
|
363
|
+

|
318
364
|
|
319
|
-
|
365
|
+
**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.
|
366
|
+
|
367
|
+

|
320
368
|
|
321
369
|
With this plugin, you can capture an image with your camera or attach an image and send it for analysis to discuss the photograph:
|
322
370
|
|
323
|
-

|
324
372
|
|
325
|
-
**Image generation:** If you want to generate images (using DALL-E) directly in chat you must enable plugin
|
373
|
+
**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.
|
326
374
|
Plugin allows you to generate images in Chat mode:
|
327
375
|
|
328
|
-

|
377
|
+
|
378
|
+
|
379
|
+
## Chat with Audio
|
380
|
+
|
381
|
+
2024-11-26: currently in beta.
|
382
|
+
|
383
|
+
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.
|
384
|
+
|
385
|
+
More info: https://platform.openai.com/docs/guides/audio/quickstart
|
386
|
+
|
387
|
+
Currently, in beta. Tool and function calls are not enabled in this mode.
|
388
|
+
|
389
|
+
**INFO:** The execution of commands and tools in this mode is temporarily unavailable.
|
329
390
|
|
330
391
|
## Completion
|
331
392
|
|
332
|
-
|
393
|
+
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.
|
333
394
|
|
334
395
|
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.
|
335
396
|
|
336
397
|
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.
|
337
398
|
|
338
|
-

|
339
|
-
|
340
399
|
From version `2.0.107` the `davinci` models are deprecated and has been replaced with `gpt-3.5-turbo-instruct` model in Completion mode.
|
341
400
|
|
342
|
-
##
|
401
|
+
## Image generation (DALL-E)
|
343
402
|
|
344
|
-
|
403
|
+
### DALL-E 3
|
345
404
|
|
346
|
-
|
405
|
+
**PyGPT** enables quick and easy image creation with `DALL-E 3`.
|
406
|
+
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,
|
407
|
+
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.
|
347
408
|
|
348
|
-
|
409
|
+

|
349
410
|
|
350
|
-
|
411
|
+
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.
|
351
412
|
|
352
|
-
|
413
|
+
If you want to generate images (using DALL-E) directly in chat you must enable plugin **DALL-E 3 Inline** in the Plugins menu.
|
414
|
+
Plugin allows you to generate images in Chat mode:
|
353
415
|
|
354
|
-

|
417
|
+
|
418
|
+
### Multiple variants
|
419
|
+
|
420
|
+
You can generate up to **4 different variants** (DALL-E 2) for a given prompt in one session. DALL-E 3 allows one image.
|
421
|
+
To select the desired number of variants to create, use the slider located in the right-hand corner at
|
422
|
+
the bottom of the screen. This replaces the conversation temperature slider when you switch to image generation mode.
|
423
|
+
|
424
|
+
### Raw mode
|
425
|
+
|
426
|
+
There is an option for switching prompt generation mode.
|
427
|
+
|
428
|
+
If **Raw Mode** is enabled, DALL-E will receive the prompt exactly as you have provided it.
|
429
|
+
If **Raw Mode** is disabled, GPT will generate the best prompt for you based on your instructions.
|
430
|
+
|
431
|
+

|
432
|
+
|
433
|
+
### Image storage
|
434
|
+
|
435
|
+
Once you've generated an image, you can easily save it anywhere on your disk by right-clicking on it.
|
436
|
+
You also have the options to delete it or view it in full size in your web browser.
|
437
|
+
|
438
|
+
**Tip:** Use presets to save your prepared prompts.
|
439
|
+
This lets you quickly use them again for generating new images later on.
|
440
|
+
|
441
|
+
The app keeps a history of all your prompts, allowing you to revisit any session and reuse previous
|
442
|
+
prompts for creating new images.
|
443
|
+
|
444
|
+
Images are stored in ``img`` directory in **PyGPT** user data folder.
|
355
445
|
|
356
|
-
Please note that token usage calculation is unavailable in this mode. Nonetheless, file (attachment)
|
357
|
-
uploads are supported. Simply navigate to the `Files` tab to effortlessly manage files and attachments which
|
358
|
-
can be sent to the OpenAI API.
|
359
446
|
|
360
447
|
## Vision (GPT-4 Vision)
|
361
448
|
|
362
|
-
This mode enables image analysis using the `
|
449
|
+
This mode enables image analysis using the `gpt-4o` and `gpt-4-vision` models. Functioning much like the chat mode,
|
363
450
|
it also allows you to upload images or provide URLs to images. The vision feature can analyze both local
|
364
451
|
images and those found online.
|
365
452
|
|
366
|
-
|
367
|
-
|
368
|
-
**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.
|
453
|
+
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.
|
369
454
|
|
370
|
-
|
455
|
+
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.
|
371
456
|
|
372
457
|
**1) Video camera real-time image capture**
|
373
458
|
|
374
|
-

|
375
460
|
|
376
|
-

|
377
462
|
|
378
463
|
**2) you can also provide an image URL**
|
379
464
|
|
380
|
-

|
381
466
|
|
382
467
|
**3) or you can just upload your local images or use the inline Vision in the standard chat mode:**
|
383
468
|
|
384
|
-

|
385
470
|
|
386
|
-
**Tip:** When using `Vision (inline)` by utilizing a plugin in standard mode, such as `Chat` (not `Vision` mode), the `+ Vision`
|
471
|
+
**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.
|
472
|
+
|
473
|
+
## Assistants
|
474
|
+
|
475
|
+
This mode uses the OpenAI's **Assistants API**.
|
476
|
+
|
477
|
+
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.
|
478
|
+
|
479
|
+
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.
|
480
|
+
|
481
|
+

|
482
|
+
|
483
|
+
In Assistant mode you are allowed to storage your files in remote vector store (per Assistant) and manage them easily from app:
|
484
|
+
|
485
|
+

|
486
|
+
|
487
|
+
Please note that token usage calculation is unavailable in this mode. Nonetheless, file (attachment)
|
488
|
+
uploads are supported. Simply navigate to the `Files` tab to effortlessly manage files and attachments which
|
489
|
+
can be sent to the OpenAI API.
|
490
|
+
|
491
|
+
### Vector stores (via Assistants API)
|
492
|
+
|
493
|
+
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.
|
494
|
+
|
495
|
+
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.
|
496
|
+
|
497
|
+
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:
|
498
|
+
|
499
|
+

|
500
|
+
|
501
|
+
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.
|
502
|
+
|
503
|
+
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:
|
387
504
|
|
388
|
-
|
505
|
+

|
389
506
|
|
390
|
-
|
507
|
+
## LangChain
|
508
|
+
|
509
|
+
This mode enables you to work with models that are supported by `LangChain`. The LangChain support is integrated
|
391
510
|
into the application, allowing you to interact with any LLM by simply supplying a configuration
|
392
511
|
file for the specific model. You can add as many models as you like; just list them in the configuration
|
393
512
|
file named `models.json`.
|
394
513
|
|
395
|
-
Available LLMs providers supported by **PyGPT
|
514
|
+
Available LLMs providers supported by **PyGPT**, in `LangChain` and `Chat with Files (LlamaIndex)` modes:
|
396
515
|
|
397
516
|
```
|
398
517
|
- OpenAI
|
399
518
|
- Azure OpenAI
|
519
|
+
- Google (Gemini, etc.)
|
400
520
|
- HuggingFace
|
401
521
|
- Anthropic
|
402
|
-
-
|
403
|
-
- Ollama
|
522
|
+
- Ollama (Llama3, Mistral, etc.)
|
404
523
|
```
|
405
524
|
|
406
|
-

|
407
|
-
|
408
525
|
You have the ability to add custom model wrappers for models that are not available by default in **PyGPT**.
|
409
526
|
To integrate a new model, you can create your own wrapper and register it with the application.
|
410
|
-
Detailed instructions for this process are provided in the section titled `Managing models / Adding models via
|
527
|
+
Detailed instructions for this process are provided in the section titled `Managing models / Adding models via LangChain`.
|
411
528
|
|
412
|
-
## Chat with
|
529
|
+
## Chat with Files (LlamaIndex)
|
413
530
|
|
414
531
|
This mode enables chat interaction with your documents and entire context history through conversation.
|
415
|
-
It seamlessly incorporates `
|
532
|
+
It seamlessly incorporates `LlamaIndex` into the chat interface, allowing for immediate querying of your indexed documents.
|
416
533
|
|
417
534
|
**Querying single files**
|
418
535
|
|
419
|
-
|
536
|
+
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`.
|
420
537
|
|
421
|
-
For example
|
538
|
+
**For example:**
|
422
539
|
|
423
540
|
If you have a file: `data/my_cars.txt` with content `My car is red.`
|
424
541
|
|
@@ -426,9 +543,9 @@ You can ask for: `Query the file my_cars.txt about what color my car is.`
|
|
426
543
|
|
427
544
|
And you will receive the response: `Red`.
|
428
545
|
|
429
|
-
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
|
546
|
+
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.
|
430
547
|
|
431
|
-
**Using Chat with
|
548
|
+
**Using Chat with Files mode**
|
432
549
|
|
433
550
|
In this mode, you are querying the whole index, stored in a vector store database.
|
434
551
|
To start, you need to index (embed) the files you want to use as additional context.
|
@@ -442,13 +559,13 @@ For a visualization from OpenAI's page, see this picture:
|
|
442
559
|
|
443
560
|
Source: https://cdn.openai.com/new-and-improved-embedding-model/draft-20221214a/vectors-3.svg
|
444
561
|
|
445
|
-
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
|
562
|
+
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.
|
446
563
|
|
447
564
|

|
448
565
|
|
449
566
|
After the file(s) are indexed (embedded in vector store), you can use context from them in chat mode:
|
450
567
|
|
451
|
-

|
452
569
|
|
453
570
|
Built-in file loaders:
|
454
571
|
|
@@ -488,20 +605,19 @@ Built-in file loaders:
|
|
488
605
|
- Webpages (crawling any webpage content)
|
489
606
|
- YouTube (transcriptions)
|
490
607
|
|
491
|
-
You can configure data loaders in `Settings /
|
608
|
+
You can configure data loaders in `Settings / Indexes (LlamaIndex) / Data Loaders` by providing list of keyword arguments for specified loaders.
|
492
609
|
You can also develop and provide your own custom loader and register it within the application.
|
493
610
|
|
494
|
-
|
495
|
-
Options for indexing existing context history or enabling real-time indexing new ones (from database) are available in `Settings /
|
611
|
+
LlamaIndex is also integrated with context database - you can use data from database (your context history) as additional context in discussion.
|
612
|
+
Options for indexing existing context history or enabling real-time indexing new ones (from database) are available in `Settings / Indexes (LlamaIndex)` section.
|
496
613
|
|
497
614
|
**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.
|
498
615
|
|
499
|
-
**Tip:**
|
500
|
-
Attachments tab in `Chat with files` mode can be used to provide images to `Vision (inline)` plugin only.
|
616
|
+
**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.
|
501
617
|
|
502
|
-
**Token limit:** When you use `Chat with
|
618
|
+
**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.
|
503
619
|
|
504
|
-
**Available vector stores** (provided by `
|
620
|
+
**Available vector stores** (provided by `LlamaIndex`):
|
505
621
|
|
506
622
|
```
|
507
623
|
- ChromaVectorStore
|
@@ -511,722 +627,473 @@ Attachments tab in `Chat with files` mode can be used to provide images to `Visi
|
|
511
627
|
- SimpleVectorStore
|
512
628
|
```
|
513
629
|
|
514
|
-
You can configure selected vector store by providing config options like `api_key`, etc. in `Settings ->
|
515
|
-
Arguments provided here (on list: `Vector Store (**kwargs)` in `Advanced settings` will be passed to selected vector store provider.
|
516
|
-
You can check keyword arguments needed by selected provider on Llama-index API reference page:
|
630
|
+
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.
|
517
631
|
|
518
|
-
https://docs.llamaindex.ai/en/stable/api_reference/storage/vector_store.html
|
519
632
|
|
520
|
-
|
633
|
+
**Configuring data loaders**
|
521
634
|
|
522
|
-
|
523
|
-
For other providers you can provide these arguments:
|
635
|
+
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.
|
524
636
|
|
525
|
-
**ElasticsearchStore**
|
526
637
|
|
527
|
-
|
638
|
+
## Agent (LlamaIndex)
|
528
639
|
|
529
|
-
|
530
|
-
- any other keyword arguments provided on list
|
640
|
+
**Currently in beta version** -- introduced in `2.4.10` (2024-11-14)
|
531
641
|
|
532
|
-
|
642
|
+
Mode that allows the use of agents offered by `LlamaIndex`.
|
533
643
|
|
534
|
-
|
644
|
+
Includes built-in agents:
|
535
645
|
|
536
|
-
-
|
537
|
-
-
|
646
|
+
- OpenAI
|
647
|
+
- ReAct
|
648
|
+
- Structured Planner (sub-tasks)
|
538
649
|
|
539
|
-
|
650
|
+
In the future, the list of built-in agents will be expanded.
|
540
651
|
|
541
|
-
|
652
|
+
You can also create your own agent by creating a new provider that inherits from `pygpt_net.provider.agents.base`.
|
542
653
|
|
543
|
-
|
544
|
-
- any other keyword arguments provided on list
|
654
|
+
**Tools and Plugins**
|
545
655
|
|
546
|
-
|
656
|
+
In this mode, all commands from active plugins are available (commands from plugins are automatically converted into tools for the agent on-the-fly).
|
547
657
|
|
548
|
-
|
549
|
-
If you want to only query index (without chat) you can enable `Query index only (without chat)` option.
|
658
|
+
**RAG - using indexes**
|
550
659
|
|
551
|
-
|
660
|
+
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.
|
552
661
|
|
553
|
-
|
662
|
+
Multimodality is currently unavailable, only text is supported. Vision support will be added in the future.
|
554
663
|
|
555
|
-
|
664
|
+
**Loop / Evaluate Mode**
|
556
665
|
|
557
|
-
|
666
|
+
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.
|
558
667
|
|
559
|
-
|
560
|
-
from plugins import CustomPlugin, OtherCustomPlugin
|
561
|
-
from llms import CustomLLM
|
562
|
-
from vector_stores import CustomVectorStore
|
563
|
-
from loaders import CustomLoader
|
668
|
+
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.
|
564
669
|
|
565
|
-
|
566
|
-
CustomPlugin(),
|
567
|
-
OtherCustomPlugin(),
|
568
|
-
]
|
569
|
-
llms = [
|
570
|
-
CustomLLM(),
|
571
|
-
]
|
572
|
-
vector_stores = [
|
573
|
-
CustomVectorStore(),
|
574
|
-
]
|
575
|
-
loaders = [
|
576
|
-
CustomLoader(),
|
577
|
-
]
|
670
|
+
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!).
|
578
671
|
|
579
|
-
|
580
|
-
plugins=plugins,
|
581
|
-
llms=llms,
|
582
|
-
vector_stores=vector_stores, # <--- list with custom vector store providers
|
583
|
-
loaders=loaders # <--- list with custom data loaders
|
584
|
-
)
|
585
|
-
```
|
586
|
-
The vector store provider must be an instance of `pygpt_net.provider.vector_stores.base.BaseStore`.
|
587
|
-
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.
|
672
|
+
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.
|
588
673
|
|
589
|
-
|
590
|
-
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.
|
674
|
+
## Agent (Autonomous)
|
591
675
|
|
592
|
-
|
676
|
+
This is an older version of the Agent mode, still available as legacy. However, it is recommended to use the newer mode: `Agent (LlamaIndex)`.
|
593
677
|
|
594
|
-
|
678
|
+
**WARNING: Please use this mode with caution** - autonomous mode, when connected with other plugins, may produce unexpected results!
|
595
679
|
|
596
|
-
|
597
|
-
You can
|
680
|
+
The mode activates autonomous mode, where AI begins a conversation with itself.
|
681
|
+
You can set this loop to run for any number of iterations. Throughout this sequence, the model will engage
|
682
|
+
in self-dialogue, answering his own questions and comments, in order to find the best possible solution, subjecting previously generated steps to criticism.
|
598
683
|
|
599
|
-
|
684
|
+
**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.
|
600
685
|
|
601
|
-
|
686
|
+
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.
|
602
687
|
|
603
|
-
|
688
|
+
You can create presets with custom instructions for multiple agents, incorporating various workflows, instructions, and goals to achieve.
|
604
689
|
|
605
|
-
|
690
|
+
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.
|
606
691
|
|
607
|
-
|
692
|
+
When the `Auto-stop` option is enabled, the agent will attempt to stop once the goal has been reached.
|
608
693
|
|
609
|
-
- `
|
610
|
-
- `encoding` - str, default: `utf-8`
|
694
|
+
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.
|
611
695
|
|
612
|
-
**
|
696
|
+
**Options**
|
613
697
|
|
614
|
-
|
615
|
-
|
698
|
+
The agent is essentially a **virtual** mode that internally sequences the execution of a selected underlying mode.
|
699
|
+
You can choose which internal mode the agent should use in the settings:
|
616
700
|
|
617
|
-
|
701
|
+
```Settings / Agent (autonomous) / Sub-mode to use```
|
618
702
|
|
619
|
-
|
620
|
-
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.
|
621
|
-
If the API mode (default) is selected, then the OpenAI API and the standard vision model will be used.
|
703
|
+
Available choices include: `chat`, `completion`, `langchain`, `vision`, `llama_index` (Chat with Files).
|
622
704
|
|
623
|
-
|
705
|
+
Default is: `chat`.
|
624
706
|
|
625
|
-
|
707
|
+
If you want to use the LlamaIndex mode when running the agent, you can also specify which index `LlamaIndex` should use with the option:
|
626
708
|
|
627
|
-
|
628
|
-
- `local_prompt` - str, default: `Question: describe what you see in this image. Answer:`
|
629
|
-
- `api_prompt` - str, default: `Describe what you see in this image` - Prompt to use in API
|
630
|
-
- `api_model` - str, default: `gpt-4-vision-preview` - Model to use in API
|
631
|
-
- `api_tokens` - int, default: `1000` - Max output tokens in API
|
709
|
+
```Settings / Agents and experts / Index to use```
|
632
710
|
|
633
|
-
|
711
|
+

|
634
712
|
|
635
|
-
- `parser_config` - dict, default: `None`
|
636
|
-
- `concatenate` - bool, default: `False`
|
637
713
|
|
638
|
-
|
714
|
+
## Experts (co-op, co-operation mode)
|
639
715
|
|
640
|
-
|
641
|
-
- `remove_images` - bool, default: `True`
|
716
|
+
**This mode is experimental.**
|
642
717
|
|
643
|
-
|
718
|
+
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.
|
644
719
|
|
645
|
-
|
720
|
+
**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.**
|
646
721
|
|
647
|
-
|
722
|
+
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.
|
648
723
|
|
649
|
-
|
650
|
-
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.
|
651
|
-
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.
|
724
|
+
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:
|
652
725
|
|
653
|
-
|
726
|
+
```bash
|
727
|
+
Call the Python expert to generate some code.
|
728
|
+
```
|
654
729
|
|
655
|
-
|
730
|
+
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.
|
656
731
|
|
657
|
-
|
732
|
+
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.
|
658
733
|
|
659
|
-
|
734
|
+
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.
|
660
735
|
|
661
|
-
|
736
|
+
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`.
|
662
737
|
|
663
|
-
|
738
|
+
You can also ask for a list of active experts at any time:
|
664
739
|
|
665
|
-
|
740
|
+
```bash
|
741
|
+
Give me a list of active experts.
|
742
|
+
```
|
666
743
|
|
667
|
-
- `username` - str, default: `None`
|
668
|
-
- `api_key` - str, default: `None`
|
669
|
-
- `extensions_to_skip` - list, default: `[]`
|
670
744
|
|
671
|
-
|
745
|
+
# Context and memory
|
672
746
|
|
673
|
-
|
674
|
-
- `bearer_token` - str, default: `None`
|
675
|
-
- `retries` - int, default: `None`
|
676
|
-
- `batch_size` - int, default: `100`
|
747
|
+
## Short and long-term memory
|
677
748
|
|
678
|
-
**
|
749
|
+
**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.
|
679
750
|
|
680
|
-
|
681
|
-
- `token_path` - str, default: `token.json`
|
751
|
+
## Handling multiple contexts
|
682
752
|
|
683
|
-
|
753
|
+
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.
|
684
754
|
|
685
|
-
-
|
686
|
-
- `token_path` - str, default: `token.json`
|
755
|
+

|
687
756
|
|
688
|
-
|
757
|
+
You can disable context support in the settings by using the following option:
|
689
758
|
|
690
|
-
|
691
|
-
|
692
|
-
|
759
|
+
``` ini
|
760
|
+
Config -> Settings -> Use context
|
761
|
+
```
|
693
762
|
|
694
|
-
|
763
|
+
## Clearing history
|
695
764
|
|
696
|
-
|
697
|
-
- `token_path` - str, default: `token.json`
|
698
|
-
- `use_iterative_parser` - bool, default: `False`
|
699
|
-
- `max_results` - int, default: `10`
|
700
|
-
- `results_per_page` - int, default: `None`
|
765
|
+
You can clear the entire memory (all contexts) by selecting the menu option:
|
701
766
|
|
702
|
-
|
767
|
+
``` ini
|
768
|
+
File -> Clear history...
|
769
|
+
```
|
703
770
|
|
704
|
-
|
771
|
+
## Context storage
|
705
772
|
|
706
|
-
|
773
|
+
On the application side, the context is stored in the `SQLite` database located in the working directory (`db.sqlite`).
|
774
|
+
In addition, all history is also saved to `.txt` files for easy reading.
|
707
775
|
|
708
|
-
|
709
|
-
- `token_path` - str, default: `token.json`
|
776
|
+
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.
|
710
777
|
|
711
|
-
|
778
|
+
# Files And Attachments
|
712
779
|
|
713
|
-
|
714
|
-
- `verbose` - bool, default: `False`
|
780
|
+
## Uploading attachments
|
715
781
|
|
716
|
-
**
|
782
|
+
**Using Your Own Files as Additional Context in Conversations**
|
717
783
|
|
718
|
-
|
719
|
-
- `verbose` - bool, default: `False`
|
720
|
-
- `concurrent_requests` - int, default: `5`
|
721
|
-
- `timeout` - int, default: `5`
|
722
|
-
- `retries` - int, default: `0`
|
723
|
-
- `filter_dirs_include` - list, default: `None`
|
724
|
-
- `filter_dirs_exclude` - list, default: `None`
|
725
|
-
- `filter_file_ext_include` - list, default: `None`
|
726
|
-
- `filter_file_ext_exclude` - list, default: `None`
|
784
|
+
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).
|
727
785
|
|
728
|
-
**
|
786
|
+
**Attachments**
|
729
787
|
|
730
|
-
|
731
|
-
- `client_secret` - str, default: `None`
|
732
|
-
- `tenant_id` - str, default: `consumers`
|
788
|
+
**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.
|
733
789
|
|
734
|
-
**
|
790
|
+
**Tip: Attachments uploaded in group are available in all contexts in group**.
|
735
791
|
|
736
|
-
-
|
737
|
-
- `limit` - int, default: `10`
|
792
|
+

|
738
793
|
|
739
|
-
|
794
|
+
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:
|
740
795
|
|
741
|
-
-
|
742
|
-
- `uri` - str, default: `None`
|
743
|
-
- `scheme` - str, default: `None`
|
744
|
-
- `host` - str, default: `None`
|
745
|
-
- `port` - str, default: `None`
|
746
|
-
- `user` - str, default: `None`
|
747
|
-
- `password` - str, default: `None`
|
748
|
-
- `dbname` - str, default: `None`
|
796
|
+
Text-based types:
|
749
797
|
|
750
|
-
|
798
|
+
- CSV files (csv)
|
799
|
+
- Epub files (epub)
|
800
|
+
- Excel .xlsx spreadsheets (xlsx)
|
801
|
+
- HTML files (html, htm)
|
802
|
+
- IPYNB Notebook files (ipynb)
|
803
|
+
- JSON files (json)
|
804
|
+
- Markdown files (md)
|
805
|
+
- PDF documents (pdf)
|
806
|
+
- Plain-text files (txt and etc.)
|
807
|
+
- Word .docx documents (docx)
|
808
|
+
- XML files (xml)
|
751
809
|
|
752
|
-
-
|
753
|
-
- `num_tweets` - int, default: `100`
|
810
|
+
Media-types:
|
754
811
|
|
755
|
-
|
812
|
+
- Image (using vision) (jpg, jpeg, png, gif, bmp, tiff, webp)
|
813
|
+
- Video/audio (mp4, avi, mov, mkv, webm, mp3, mpeg, mpga, m4a, wav)
|
756
814
|
|
757
|
-
|
815
|
+
Archives:
|
758
816
|
|
759
|
-
|
817
|
+
- zip
|
818
|
+
- tar, tar.gz, tar.bz2
|
760
819
|
|
761
|
-
The
|
762
|
-
You can set this loop to run for any number of iterations. Throughout this sequence, the model will engage
|
763
|
-
in self-dialogue, answering his own questions and comments, in order to find the best possible solution, subjecting previously generated steps to criticism.
|
820
|
+
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:
|
764
821
|
|
765
|
-
|
822
|
+
- `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.
|
766
823
|
|
767
|
-
|
824
|
+
- `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.
|
768
825
|
|
769
|
-
|
826
|
+
- `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.
|
770
827
|
|
771
|
-
|
828
|
+
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`).
|
772
829
|
|
773
|
-
|
830
|
+
**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.
|
774
831
|
|
775
|
-
|
832
|
+
**Images as Additional Context**
|
776
833
|
|
777
|
-
|
834
|
+
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`.
|
778
835
|
|
779
|
-
|
780
|
-
You can choose which internal mode the agent should use in the settings:
|
836
|
+
**Uploading larger files and auto-index**
|
781
837
|
|
782
|
-
|
838
|
+
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`.
|
783
839
|
|
784
|
-
|
840
|
+
## Downloading files
|
785
841
|
|
786
|
-
|
842
|
+
**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.
|
787
843
|
|
788
|
-
|
844
|
+
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.
|
789
845
|
|
790
|
-
|
846
|
+
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.
|
791
847
|
|
792
|
-

|
793
849
|
|
850
|
+
To allow the model to manage files or python code execution, the `+ Tools` option must be active, along with the above-mentioned plugins:
|
794
851
|
|
795
|
-
|
852
|
+

|
796
853
|
|
797
|
-
|
854
|
+
# Presets
|
798
855
|
|
799
|
-
|
856
|
+
## What is preset?
|
800
857
|
|
801
|
-
|
858
|
+
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`.
|
802
859
|
|
803
|
-
The
|
804
|
-
In `Assistant` mode, you can send documents and files to analyze, while in `Vision` mode, you can send images.
|
805
|
-
In other modes, you can enable attachments by activating the `Vision (inline)` plugin (for providing images only).
|
860
|
+
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.
|
806
861
|
|
807
|
-
|
862
|
+

|
808
863
|
|
809
|
-
|
864
|
+
## Example usage
|
810
865
|
|
811
|
-
|
866
|
+
The application includes several sample presets that help you become acquainted with the mechanism of their use.
|
812
867
|
|
813
|
-
|
868
|
+
# Profiles
|
869
|
+
|
870
|
+
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.
|
871
|
+
|
872
|
+
The app lets you create new profiles, edit existing ones, and duplicate current ones.
|
873
|
+
|
874
|
+
To create a new profile, select the option from the menu: `Config -> Profile -> New Profile...`
|
875
|
+
|
876
|
+
To edit saved profiles, choose the option from the menu: `Config -> Profile -> Edit Profiles...`
|
877
|
+
|
878
|
+
To switch to a created profile, pick the profile from the menu: `Config -> Profile -> [Profile Name]`
|
879
|
+
|
880
|
+
Each profile uses its own user directory (workdir). You can link a newly created or edited profile to an existing workdir with its configuration.
|
881
|
+
|
882
|
+
The name of the currently active profile is shown as (Profile Name) in the window title.
|
883
|
+
|
884
|
+
# Models
|
885
|
+
|
886
|
+
## Built-in models
|
887
|
+
|
888
|
+
PyGPT has built-in support for models (as of 2024-11-27):
|
889
|
+
|
890
|
+
- `bielik-11b-v2.2-instruct:Q4_K_M`
|
891
|
+
- `chatgpt-4o-latest`
|
892
|
+
- `claude-3-5-sonnet-20240620`
|
893
|
+
- `claude-3-opus-20240229`
|
894
|
+
- `codellama`
|
895
|
+
- `dall-e-2`
|
896
|
+
- `dall-e-3`
|
897
|
+
- `gemini-1.5-flash`
|
898
|
+
- `gemini-1.5-pro`
|
899
|
+
- `gpt-3.5-turbo`
|
900
|
+
- `gpt-3.5-turbo-1106`
|
901
|
+
- `gpt-3.5-turbo-16k`
|
902
|
+
- `gpt-3.5-turbo-instruct`
|
903
|
+
- `gpt-4`
|
904
|
+
- `gpt-4-0125-preview`
|
905
|
+
- `gpt-4-1106-preview`
|
906
|
+
- `gpt-4-32k`
|
907
|
+
- `gpt-4-turbo`
|
908
|
+
- `gpt-4-turbo-2024-04-09`
|
909
|
+
- `gpt-4-turbo-preview`
|
910
|
+
- `gpt-4-vision-preview`
|
911
|
+
- `gpt-4o`
|
912
|
+
- `gpt-4o-2024-11-20`
|
913
|
+
- `gpt-4o-audio-preview`
|
914
|
+
- `gpt-4o-mini`
|
915
|
+
- `llama2-uncensored`
|
916
|
+
- `llama3.1`
|
917
|
+
- `llama3.1:405b`
|
918
|
+
- `llama3.1:70b`
|
919
|
+
- `mistral`
|
920
|
+
- `mistral-large`
|
921
|
+
- `o1-mini`
|
922
|
+
- `o1-preview`
|
814
923
|
|
815
|
-
|
924
|
+
All models are specified in the configuration file `models.json`, which you can customize.
|
925
|
+
This file is located in your working directory. You can add new models provided directly by `OpenAI API`
|
926
|
+
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.
|
816
927
|
|
817
|
-
|
928
|
+
## Adding a custom model
|
818
929
|
|
819
|
-
|
930
|
+
You can add your own models. See the section `Extending PyGPT / Adding a new model` for more info.
|
820
931
|
|
821
|
-
|
932
|
+
There is built-in support for those LLM providers:
|
822
933
|
|
823
|
-
|
934
|
+
- OpenAI (openai)
|
935
|
+
- Azure OpenAI (azure_openai)
|
936
|
+
- Google (google)
|
937
|
+
- HuggingFace (huggingface)
|
938
|
+
- Anthropic (anthropic)
|
939
|
+
- Ollama (ollama)
|
824
940
|
|
825
|
-
|
941
|
+
## How to use local or non-GPT models
|
826
942
|
|
827
|
-
|
943
|
+
### Llama 3, Mistral, and other local models
|
828
944
|
|
829
|
-
|
945
|
+
How to use locally installed Llama 3 or Mistral models:
|
830
946
|
|
831
|
-
|
947
|
+
1) Choose a working mode: `Chat with Files` or `LangChain`.
|
832
948
|
|
833
|
-
|
949
|
+
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.
|
834
950
|
|
835
|
-
|
951
|
+
3) Download and install Ollama from here: https://github.com/ollama/ollama
|
836
952
|
|
837
|
-
|
953
|
+
For example, on Linux:
|
838
954
|
|
839
|
-
|
955
|
+
```curl -fsSL https://ollama.com/install.sh | sh```
|
840
956
|
|
841
|
-
|
957
|
+
4) Run the model (e.g. Llama 3) locally on your machine. For example, on Linux:
|
842
958
|
|
843
|
-
|
959
|
+
```ollama run llama3.1```
|
844
960
|
|
845
|
-
|
961
|
+
5) Return to PyGPT and select the correct model from models list to chat with selected model using Ollama running locally.
|
846
962
|
|
847
|
-
|
963
|
+
**Example available models**
|
848
964
|
|
849
|
-
|
965
|
+
- `llama3.1`
|
966
|
+
- `codellama`
|
967
|
+
- `mistral`
|
968
|
+
- `llama2-uncensored`
|
850
969
|
|
851
|
-
|
852
|
-
Config -> Settings -> Use context
|
853
|
-
```
|
970
|
+
You can add more models by editing the models list.
|
854
971
|
|
855
|
-
|
972
|
+
**List of all models supported by Ollama**
|
856
973
|
|
857
|
-
|
974
|
+
https://ollama.com/library
|
858
975
|
|
859
|
-
|
860
|
-
File -> Clear history...
|
861
|
-
```
|
976
|
+
https://github.com/ollama/ollama
|
862
977
|
|
863
|
-
|
978
|
+
**IMPORTANT:** Remember to define the correct model name in the **kwargs list in the model settings.
|
864
979
|
|
865
|
-
|
866
|
-
In addition, all history is also saved to `.txt` files for easy reading.
|
980
|
+
**Using local embeddings**
|
867
981
|
|
868
|
-
|
982
|
+
Refer to: https://docs.llamaindex.ai/en/stable/examples/embeddings/ollama_embedding/
|
869
983
|
|
870
|
-
|
984
|
+
You can use an Ollama instance for embeddings. Simply select the `ollama` provider in:
|
871
985
|
|
872
|
-
|
986
|
+
```Config -> Settings -> Indexes (LlamaIndex) -> Embeddings -> Embeddings provider```
|
873
987
|
|
874
|
-
|
988
|
+
Define parameters like model name and Ollama base URL in the Embeddings provider **kwargs list, e.g.:
|
875
989
|
|
876
|
-
|
990
|
+
- name: `model_name`, value: `llama3.1`, type: `str`
|
877
991
|
|
878
|
-
|
992
|
+
- name: `base_url`, value: `http://localhost:11434`, type: `str`
|
879
993
|
|
880
|
-
|
994
|
+
### Google Gemini and Anthropic Claude
|
881
995
|
|
882
|
-
|
996
|
+
To use `Gemini` or `Claude` models, select the `Chat with Files` mode in PyGPT and select a predefined model.
|
997
|
+
Remember to configure the required parameters like API keys in the model ENV config fields.
|
883
998
|
|
999
|
+
**Google Gemini**
|
884
1000
|
|
885
|
-
|
1001
|
+
Required ENV:
|
886
1002
|
|
887
|
-
|
1003
|
+
- GOOGLE_API_KEY
|
888
1004
|
|
889
|
-
**
|
890
|
-
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,
|
891
|
-
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.
|
1005
|
+
Required **kwargs:
|
892
1006
|
|
893
|
-
|
1007
|
+
- model
|
894
1008
|
|
895
|
-
|
896
|
-
Plugin allows you to generate images in Chat mode:
|
1009
|
+
**Anthropic Claude**
|
897
1010
|
|
898
|
-
|
1011
|
+
Required ENV:
|
899
1012
|
|
900
|
-
|
1013
|
+
- ANTHROPIC_API_KEY
|
901
1014
|
|
902
|
-
|
903
|
-
To select the desired number of variants to create, use the slider located in the right-hand corner at
|
904
|
-
the bottom of the screen. This replaces the conversation temperature slider when you switch to image generation mode.
|
1015
|
+
Required **kwargs:
|
905
1016
|
|
906
|
-
|
1017
|
+
- model
|
907
1018
|
|
908
|
-
There is an option for switching prompt generation mode.
|
909
1019
|
|
910
|
-
|
911
|
-
If **Raw Mode** is disabled, GPT will generate the best prompt for you based on your instructions.
|
1020
|
+
# Plugins
|
912
1021
|
|
913
|
-
|
1022
|
+
## Overview
|
914
1023
|
|
915
|
-
|
1024
|
+
**PyGPT** can be enhanced with plugins to add new features.
|
916
1025
|
|
917
|
-
|
918
|
-
You also have the options to delete it or view it in full size in your web browser.
|
1026
|
+
**Tip:** Plugins works best with GPT-4 models.
|
919
1027
|
|
920
|
-
|
921
|
-
This lets you quickly use them again for generating new images later on.
|
1028
|
+
The following plugins are currently available, and model can use them instantly:
|
922
1029
|
|
923
|
-
|
924
|
-
prompts for creating new images.
|
1030
|
+
- `Audio Input` - provides speech recognition.
|
925
1031
|
|
926
|
-
|
1032
|
+
- `Audio Output` - provides voice synthesis.
|
927
1033
|
|
928
|
-
|
1034
|
+
- `Autonomous Agent (inline)` - enables autonomous conversation (AI to AI), manages loop, and connects output back to input. This is the inline Agent mode.
|
929
1035
|
|
930
|
-
|
931
|
-
This file is located in your working directory. You can add new models provided directly by `OpenAI API`
|
932
|
-
and those supported by `Langchain` to this file. Configuration for Langchain wrapper is placed in `langchain` key.
|
1036
|
+
- `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).
|
933
1037
|
|
934
|
-
|
1038
|
+
- `API calls` - plugin lets you connect the model to the external services using custom defined API calls.
|
935
1039
|
|
936
|
-
|
1040
|
+
- `Code Interpreter` - responsible for generating and executing Python code, functioning much like
|
1041
|
+
the Code Interpreter on ChatGPT, but locally. This means GPT can interface with any script, application, or code.
|
1042
|
+
Plugins can work in conjunction to perform sequential tasks; for example, the `Files` plugin can write generated
|
1043
|
+
Python code to a file, which the `Code Interpreter` can execute it and return its result to GPT.
|
937
1044
|
|
938
|
-
|
1045
|
+
- `Custom Commands` - allows you to create and execute custom commands on your system.
|
939
1046
|
|
940
|
-
|
941
|
-
|
942
|
-
"id": "gpt-3.5-turbo",
|
943
|
-
"name": "gpt-3.5-turbo",
|
944
|
-
"mode": [
|
945
|
-
"chat",
|
946
|
-
"assistant",
|
947
|
-
"langchain",
|
948
|
-
"llama_index"
|
949
|
-
],
|
950
|
-
"langchain": {
|
951
|
-
"provider": "openai",
|
952
|
-
"mode": [
|
953
|
-
"chat"
|
954
|
-
],
|
955
|
-
"args": [
|
956
|
-
{
|
957
|
-
"name": "model_name",
|
958
|
-
"value": "gpt-3.5-turbo",
|
959
|
-
"type": "str"
|
960
|
-
}
|
961
|
-
],
|
962
|
-
"env": [
|
963
|
-
{
|
964
|
-
"name": "OPENAI_API_KEY",
|
965
|
-
"value": "{api_key}"
|
966
|
-
}
|
967
|
-
]
|
968
|
-
},
|
969
|
-
"llama_index": {
|
970
|
-
"provider": "openai",
|
971
|
-
"mode": [
|
972
|
-
"chat"
|
973
|
-
],
|
974
|
-
"args": [
|
975
|
-
{
|
976
|
-
"name": "model",
|
977
|
-
"value": "gpt-3.5-turbo",
|
978
|
-
"type": "str"
|
979
|
-
}
|
980
|
-
],
|
981
|
-
"env": [
|
982
|
-
{
|
983
|
-
"name": "OPENAI_API_KEY",
|
984
|
-
"value": "{api_key}"
|
985
|
-
}
|
986
|
-
]
|
987
|
-
},
|
988
|
-
"ctx": 4096,
|
989
|
-
"tokens": 4096,
|
990
|
-
"default": false
|
991
|
-
},
|
992
|
-
```
|
1047
|
+
- `Files I/O` - provides access to the local filesystem, enabling GPT to read and write files,
|
1048
|
+
as well as list and create directories.
|
993
1049
|
|
994
|
-
|
1050
|
+
- `System (OS)` - allows you to create and execute custom commands on your system.
|
995
1051
|
|
996
|
-
|
997
|
-
- OpenAI (openai)
|
998
|
-
- Azure OpenAI (azure_openai)
|
999
|
-
- HuggingFace (huggingface)
|
1000
|
-
- Anthropic (anthropic)
|
1001
|
-
- Llama 2 (llama2)
|
1002
|
-
- Ollama (ollama)
|
1003
|
-
```
|
1052
|
+
- `Mouse and Keyboard` - provides the ability to control the mouse and keyboard by the model.
|
1004
1053
|
|
1005
|
-
|
1054
|
+
- `Web Search` - provides the ability to connect to the Web, search web pages for current data, and index external content using LlamaIndex data loaders.
|
1006
1055
|
|
1007
|
-
|
1056
|
+
- `Serial port / USB` - plugin provides commands for reading and sending data to USB ports.
|
1008
1057
|
|
1009
|
-
|
1058
|
+
- `Context history (calendar, inline)` - provides access to context history database.
|
1010
1059
|
|
1011
|
-
|
1012
|
-
# app.py
|
1060
|
+
- `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.
|
1013
1061
|
|
1014
|
-
|
1015
|
-
from pygpt_net.provider.llms.azure_openai import AzureOpenAILLM
|
1016
|
-
from pygpt_net.provider.llms.anthropic import AnthropicLLM
|
1017
|
-
from pygpt_net.provider.llms.hugging_face import HuggingFaceLLM
|
1018
|
-
from pygpt_net.provider.llms.llama import Llama2LLM
|
1019
|
-
from pygpt_net.provider.llms.ollama import OllamaLLM
|
1062
|
+
- `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.
|
1020
1063
|
|
1064
|
+
- `Experts (inline)` - allows calling experts in any chat mode. This is the inline Experts (co-op) mode.
|
1021
1065
|
|
1022
|
-
|
1023
|
-
"""Runs the app."""
|
1024
|
-
# Initialize the app
|
1025
|
-
launcher = Launcher()
|
1026
|
-
launcher.init()
|
1066
|
+
- `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.
|
1027
1067
|
|
1028
|
-
|
1029
|
-
...
|
1068
|
+
- `Real Time` - automatically appends the current date and time to the system prompt, informing the model about current time.
|
1030
1069
|
|
1031
|
-
|
1032
|
-
launcher.add_llm(OpenAILLM())
|
1033
|
-
launcher.add_llm(AzureOpenAILLM())
|
1034
|
-
launcher.add_llm(AnthropicLLM())
|
1035
|
-
launcher.add_llm(HuggingFaceLLM())
|
1036
|
-
launcher.add_llm(Llama2LLM())
|
1037
|
-
launcher.add_llm(OllamaLLM())
|
1070
|
+
- `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.
|
1038
1071
|
|
1039
|
-
|
1040
|
-
launcher.run()
|
1041
|
-
```
|
1072
|
+
- `Voice Control (inline)` - provides voice control command execution within a conversation.
|
1042
1073
|
|
1043
|
-
|
1074
|
+
- `Mailer` - Provides the ability to send, receive and read emails.
|
1044
1075
|
|
1045
|
-
|
1076
|
+
## Audio Input
|
1046
1077
|
|
1047
|
-
|
1078
|
+
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.
|
1048
1079
|
|
1049
|
-
|
1080
|
+
The plugin can be extended with other speech recognition providers.
|
1050
1081
|
|
1051
|
-
|
1082
|
+
Options:
|
1052
1083
|
|
1053
|
-
|
1084
|
+
- `Provider` *provider*
|
1054
1085
|
|
1086
|
+
Choose the provider. *Default:* `Whisper`
|
1055
1087
|
|
1056
|
-
|
1057
|
-
# launcher.py
|
1088
|
+
Available providers:
|
1058
1089
|
|
1059
|
-
|
1060
|
-
|
1061
|
-
|
1090
|
+
- Whisper (via `OpenAI API`)
|
1091
|
+
- Whisper (local model) - not available in compiled and Snap versions, only Python/PyPi version
|
1092
|
+
- Google (via `SpeechRecognition` library)
|
1093
|
+
- Google Cloud (via `SpeechRecognition` library)
|
1094
|
+
- Microsoft Bing (via `SpeechRecognition` library)
|
1062
1095
|
|
1063
|
-
|
1064
|
-
CustomPlugin(),
|
1065
|
-
OtherCustomPlugin(),
|
1066
|
-
]
|
1067
|
-
llms = [
|
1068
|
-
CustomLLM(),
|
1069
|
-
]
|
1070
|
-
vector_stores = []
|
1071
|
-
|
1072
|
-
run(
|
1073
|
-
plugins=plugins,
|
1074
|
-
llms=llms,
|
1075
|
-
vector_stores=vector_stores
|
1076
|
-
)
|
1077
|
-
```
|
1078
|
-
|
1079
|
-
**Examples (tutorial files)**
|
1080
|
-
|
1081
|
-
See the `examples` directory in this repository with examples of custom launcher, plugin, vector store, LLM (Langchain and Llama-index) provider and data loader:
|
1082
|
-
|
1083
|
-
- `examples/custom_launcher.py`
|
1084
|
-
|
1085
|
-
- `examples/example_audio_input.py`
|
1086
|
-
|
1087
|
-
- `examples/example_audio_output.py`
|
1088
|
-
|
1089
|
-
- `examples/example_data_loader.py`
|
1090
|
-
|
1091
|
-
- `examples/example_llm.py` <-- use it as an example
|
1092
|
-
|
1093
|
-
- `examples/example_plugin.py`
|
1094
|
-
|
1095
|
-
- `examples/example_vector_store.py`
|
1096
|
-
|
1097
|
-
- `examples/example_web_search.py`
|
1098
|
-
|
1099
|
-
These example files can be used as a starting point for creating your own extensions for **PyGPT**.
|
1100
|
-
|
1101
|
-
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.
|
1102
|
-
|
1103
|
-
|
1104
|
-
## Adding custom Vector Store providers
|
1105
|
-
|
1106
|
-
**From version 2.0.114 you can also register your own Vector Store provider**:
|
1107
|
-
|
1108
|
-
```python
|
1109
|
-
# app.py
|
1110
|
-
|
1111
|
-
# vector stores
|
1112
|
-
from pygpt_net.provider.vector_stores.chroma import ChromaProvider
|
1113
|
-
from pygpt_net.provider.vector_stores.elasticsearch import ElasticsearchProvider
|
1114
|
-
from pygpt_net.provider.vector_stores.pinecode import PinecodeProvider
|
1115
|
-
from pygpt_net.provider.vector_stores.redis import RedisProvider
|
1116
|
-
from pygpt_net.provider.vector_stores.simple import SimpleProvider
|
1117
|
-
|
1118
|
-
def run(**kwargs):
|
1119
|
-
# ...
|
1120
|
-
# register base vector store providers (llama-index)
|
1121
|
-
launcher.add_vector_store(ChromaProvider())
|
1122
|
-
launcher.add_vector_store(ElasticsearchProvider())
|
1123
|
-
launcher.add_vector_store(PinecodeProvider())
|
1124
|
-
launcher.add_vector_store(RedisProvider())
|
1125
|
-
launcher.add_vector_store(SimpleProvider())
|
1126
|
-
|
1127
|
-
# register custom vector store providers (llama-index)
|
1128
|
-
vector_stores = kwargs.get('vector_stores', None)
|
1129
|
-
if isinstance(vector_stores, list):
|
1130
|
-
for store in vector_stores:
|
1131
|
-
launcher.add_vector_store(store)
|
1132
|
-
|
1133
|
-
# ...
|
1134
|
-
```
|
1135
|
-
|
1136
|
-
To register your custom vector store provider just register it by passing provider instance in `vector_stores` keyword argument:
|
1137
|
-
|
1138
|
-
```python
|
1139
|
-
|
1140
|
-
# custom_launcher.py
|
1141
|
-
|
1142
|
-
from pygpt_net.app import run
|
1143
|
-
from plugins import CustomPlugin, OtherCustomPlugin
|
1144
|
-
from llms import CustomLLM
|
1145
|
-
from vector_stores import CustomVectorStore
|
1146
|
-
|
1147
|
-
plugins = [
|
1148
|
-
CustomPlugin(),
|
1149
|
-
OtherCustomPlugin(),
|
1150
|
-
]
|
1151
|
-
llms = [
|
1152
|
-
CustomLLM(),
|
1153
|
-
]
|
1154
|
-
vector_stores = [
|
1155
|
-
CustomVectorStore(),
|
1156
|
-
]
|
1157
|
-
|
1158
|
-
run(
|
1159
|
-
plugins=plugins,
|
1160
|
-
llms=llms,
|
1161
|
-
vector_stores=vector_stores
|
1162
|
-
)
|
1163
|
-
```
|
1164
|
-
|
1165
|
-
# Plugins
|
1166
|
-
|
1167
|
-
**PyGPT** can be enhanced with plugins to add new features.
|
1168
|
-
|
1169
|
-
The following plugins are currently available, and model can use them instantly:
|
1170
|
-
|
1171
|
-
- `Audio Input` - provides speech recognition.
|
1172
|
-
|
1173
|
-
- `Audio Output` - provides voice synthesis.
|
1174
|
-
|
1175
|
-
- `Autonomous Agent (inline)` - enables autonomous conversation (AI to AI), manages loop, and connects output back to input. This is the inline Agent mode.
|
1176
|
-
|
1177
|
-
- `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).
|
1178
|
-
|
1179
|
-
- `Command: API calls` - plugin lets you connect the model to the external services using custom defined API calls.
|
1180
|
-
|
1181
|
-
- `Command: Code Interpreter` - responsible for generating and executing Python code, functioning much like
|
1182
|
-
the Code Interpreter on ChatGPT, but locally. This means GPT can interface with any script, application, or code.
|
1183
|
-
The plugin can also execute system commands, allowing GPT to integrate with your operating system.
|
1184
|
-
Plugins can work in conjunction to perform sequential tasks; for example, the `Files` plugin can write generated
|
1185
|
-
Python code to a file, which the `Code Interpreter` can execute it and return its result to GPT.
|
1186
|
-
|
1187
|
-
- `Command: Custom Commands` - allows you to create and execute custom commands on your system.
|
1188
|
-
|
1189
|
-
- `Command: Files I/O` - provides access to the local filesystem, enabling GPT to read and write files,
|
1190
|
-
as well as list and create directories.
|
1191
|
-
|
1192
|
-
- `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.
|
1193
|
-
|
1194
|
-
- `Command: Serial port / USB` - plugin provides commands for reading and sending data to USB ports.
|
1195
|
-
|
1196
|
-
- `Context history (calendar, inline)` - provides access to context history database.
|
1197
|
-
|
1198
|
-
- `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.
|
1199
|
-
|
1200
|
-
- `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.
|
1201
|
-
|
1202
|
-
- `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.
|
1203
|
-
|
1204
|
-
- `Real Time` - automatically appends the current date and time to the system prompt, informing the model about current time.
|
1205
|
-
|
1206
|
-
- `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.
|
1207
|
-
|
1208
|
-
|
1209
|
-
## Audio Input
|
1210
|
-
|
1211
|
-
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.
|
1212
|
-
|
1213
|
-
The plugin can be extended with other speech recognition providers.
|
1214
|
-
|
1215
|
-
Options:
|
1216
|
-
|
1217
|
-
- `Provider` *provider*
|
1218
|
-
|
1219
|
-
Choose the provider. *Default:* `Whisper`
|
1220
|
-
|
1221
|
-
Available providers:
|
1222
|
-
|
1223
|
-
- Whisper (via `OpenAI API`)
|
1224
|
-
- Whisper (local model) - not available in compiled and Snap versions, only Python/PyPi version
|
1225
|
-
- Google (via `SpeechRecognition` library)
|
1226
|
-
- Google Cloud (via `SpeechRecognition` library)
|
1227
|
-
- Microsoft Bing (via `SpeechRecognition` library)
|
1228
|
-
|
1229
|
-
**Whisper (API)**
|
1096
|
+
**Whisper (API)**
|
1230
1097
|
|
1231
1098
|
- `Model` *whisper_model*
|
1232
1099
|
|
@@ -1360,7 +1227,7 @@ Options reference: https://pypi.org/project/SpeechRecognition/1.3.1/
|
|
1360
1227
|
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.
|
1361
1228
|
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.
|
1362
1229
|
|
1363
|
-

|
1364
1231
|
|
1365
1232
|
Through the available options, you can select the voice that you want the model to use. More voice synthesis providers coming soon.
|
1366
1233
|
|
@@ -1486,30 +1353,30 @@ If enabled, plugin will stop after goal is reached." *Default:* `True`
|
|
1486
1353
|
|
1487
1354
|
- `Reverse roles between iterations` *reverse_roles*
|
1488
1355
|
|
1489
|
-
Only for Completion/
|
1356
|
+
Only for Completion/LangChain modes.
|
1490
1357
|
If enabled, this option reverses the roles (AI <> user) with each iteration. For example,
|
1491
1358
|
if in the previous iteration the response was generated for "Batman," the next iteration will use that
|
1492
1359
|
response to generate an input for "Joker." *Default:* `True`
|
1493
1360
|
|
1494
|
-
## Chat with
|
1361
|
+
## Chat with Files (LlamaIndex, inline)
|
1495
1362
|
|
1496
|
-
Plugin integrates `
|
1363
|
+
Plugin integrates `LlamaIndex` storage in any chat and provides additional knowledge into context.
|
1497
1364
|
|
1498
|
-
- `Ask
|
1365
|
+
- `Ask LlamaIndex first` *ask_llama_first*
|
1499
1366
|
|
1500
|
-
When enabled, then `
|
1367
|
+
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`
|
1501
1368
|
|
1502
|
-
- `Auto-prepare question before asking
|
1369
|
+
- `Auto-prepare question before asking LlamaIndex first` *prepare_question*
|
1503
1370
|
|
1504
|
-
When enabled, then question will be prepared before asking
|
1371
|
+
When enabled, then question will be prepared before asking LlamaIndex first to create best query. *Default:* `False`
|
1505
1372
|
|
1506
1373
|
- `Model for question preparation` *model_prepare_question*
|
1507
1374
|
|
1508
|
-
Model used to prepare question before asking
|
1375
|
+
Model used to prepare question before asking LlamaIndex. *Default:* `gpt-3.5-turbo`
|
1509
1376
|
|
1510
1377
|
- `Max output tokens for question preparation` *prepare_question_max_tokens*
|
1511
1378
|
|
1512
|
-
Max tokens in output when preparing question before asking
|
1379
|
+
Max tokens in output when preparing question before asking LlamaIndex. *Default:* `500`
|
1513
1380
|
|
1514
1381
|
- `Prompt for question preparation` *syntax_prepare_question*
|
1515
1382
|
|
@@ -1517,26 +1384,26 @@ System prompt for question preparation.
|
|
1517
1384
|
|
1518
1385
|
- `Max characters in question` *max_question_chars*
|
1519
1386
|
|
1520
|
-
Max characters in question when querying
|
1387
|
+
Max characters in question when querying LlamaIndex, 0 = no limit. *Default:* `1000`
|
1521
1388
|
|
1522
1389
|
- `Append metadata to context` *append_meta*
|
1523
1390
|
|
1524
|
-
If enabled, then metadata from
|
1391
|
+
If enabled, then metadata from LlamaIndex will be appended to additional context. *Default:* `False`
|
1525
1392
|
|
1526
1393
|
- `Model` *model_query*
|
1527
1394
|
|
1528
|
-
Model used for querying `
|
1395
|
+
Model used for querying `LlamaIndex`. *Default:* `gpt-3.5-turbo`
|
1529
1396
|
|
1530
1397
|
- `Indexes IDs` *idx*
|
1531
1398
|
|
1532
1399
|
Indexes to use. If you want to use multiple indexes at once then separate them by comma. *Default:* `base`
|
1533
1400
|
|
1534
1401
|
|
1535
|
-
##
|
1402
|
+
## API calls
|
1536
1403
|
|
1537
1404
|
**PyGPT** lets you connect the model to the external services using custom defined API calls.
|
1538
1405
|
|
1539
|
-
To activate this feature, turn on the `
|
1406
|
+
To activate this feature, turn on the `API calls` plugin found in the `Plugins` menu.
|
1540
1407
|
|
1541
1408
|
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.
|
1542
1409
|
|
@@ -1589,58 +1456,162 @@ Connection timeout (seconds). *Default:* `5`
|
|
1589
1456
|
User agent to use when making requests. *Default:* `Mozilla/5.0`
|
1590
1457
|
|
1591
1458
|
|
1592
|
-
##
|
1459
|
+
## Code Interpreter
|
1593
1460
|
|
1594
1461
|
### Executing Code
|
1595
1462
|
|
1596
|
-
|
1463
|
+
From version `2.4.13` with built-in `IPython`.
|
1597
1464
|
|
1598
|
-
|
1465
|
+
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.
|
1599
1466
|
|
1600
|
-
|
1467
|
+
**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.
|
1601
1468
|
|
1602
|
-
|
1469
|
+
To use IPython in sandbox mode, Docker must be installed on your system.
|
1603
1470
|
|
1604
|
-
|
1471
|
+
You can find the installation instructions here: https://docs.docker.com/engine/install/
|
1605
1472
|
|
1473
|
+
**Tip: connecting IPython in Docker in Snap version**:
|
1606
1474
|
|
1475
|
+
To use IPython in the Snap version, you must connect PyGPT to the Docker daemon:
|
1476
|
+
|
1477
|
+
```commandline
|
1478
|
+
sudo snap connect pygpt:docker-executables docker:docker-executables
|
1479
|
+
```
|
1480
|
+
|
1481
|
+
````commandline
|
1482
|
+
sudo snap connect pygpt:docker docker:docker-daemon
|
1483
|
+
````
|
1484
|
+
|
1485
|
+
|
1486
|
+
**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.
|
1487
|
+
|
1488
|
+

|
1607
1489
|
|
1608
|
-
|
1490
|
+
|
1491
|
+
**Tip:** always remember to enable the `+ Tools` option to allow execute commands from the plugins.
|
1609
1492
|
|
1610
1493
|
|
1611
1494
|
**Options:**
|
1612
1495
|
|
1496
|
+
**General**
|
1497
|
+
|
1498
|
+
- `Connect to the Python Code Interpreter window` *attach_output*
|
1499
|
+
|
1500
|
+
Automatically attach code input/output to the Python Code Interpreter window. *Default:* `True`
|
1501
|
+
|
1502
|
+
- `Tool: get_python_output` *cmd.get_python_output*
|
1503
|
+
|
1504
|
+
Allows `get_python_output` command execution. If enabled, it allows retrieval of the output from the Python Code Interpreter window. *Default:* `True`
|
1505
|
+
|
1506
|
+
- `Tool: get_python_input` *cmd.get_python_input*
|
1507
|
+
|
1508
|
+
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`
|
1509
|
+
|
1510
|
+
- `Tool: clear_python_output` *cmd.clear_python_output*
|
1511
|
+
|
1512
|
+
Allows `clear_python_output` command execution. If enabled, it allows clear the output of the Python Code Interpreter window. *Default:* `True`
|
1513
|
+
|
1514
|
+
|
1515
|
+
**IPython**
|
1516
|
+
|
1517
|
+
- `Sandbox (docker container)` *sandbox_ipython*
|
1518
|
+
|
1519
|
+
Executes IPython in sandbox (docker container). Docker must be installed and running.
|
1520
|
+
|
1521
|
+
- `Dockerfile` *ipython_dockerfile*
|
1522
|
+
|
1523
|
+
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.
|
1524
|
+
|
1525
|
+
- `Session Key` *ipython_session_key*
|
1526
|
+
|
1527
|
+
It must match the key provided in the Dockerfile.
|
1528
|
+
|
1529
|
+
- `Docker image name` *ipython_image_name*
|
1530
|
+
|
1531
|
+
Custom image name
|
1532
|
+
|
1533
|
+
- `Docker container name` *ipython_container_name*
|
1534
|
+
|
1535
|
+
Custom container name
|
1536
|
+
|
1537
|
+
- `Connection address` *ipython_conn_addr*
|
1538
|
+
|
1539
|
+
Default: 127.0.0.1
|
1540
|
+
|
1541
|
+
- `Port: shell` *ipython_port_shell*
|
1542
|
+
|
1543
|
+
Default: 5555
|
1544
|
+
|
1545
|
+
- `Port: iopub` *ipython_port_iopub*
|
1546
|
+
|
1547
|
+
Default: 5556
|
1548
|
+
|
1549
|
+
- `Port: stdin` *ipython_port_stdin*
|
1550
|
+
|
1551
|
+
Default: 5557
|
1552
|
+
|
1553
|
+
- `Port: control` *ipython_port_control*
|
1554
|
+
|
1555
|
+
Default: 5558
|
1556
|
+
|
1557
|
+
- `Port: hb` *ipython_port_hb*
|
1558
|
+
|
1559
|
+
Default: 5559
|
1560
|
+
|
1561
|
+
|
1562
|
+
- `Tool: ipython_execute` *cmd.ipython_execute*
|
1563
|
+
|
1564
|
+
Allows Python code execution in IPython interpreter (in current kernel). *Default:* `True`
|
1565
|
+
|
1566
|
+
- `Tool: python_kernel_restart` *cmd.ipython_kernel_restart*
|
1567
|
+
|
1568
|
+
Allows to restart IPython kernel. *Default:* `True`
|
1569
|
+
|
1570
|
+
|
1571
|
+
**Python (legacy)**
|
1572
|
+
|
1573
|
+
- `Sandbox (docker container)` *sandbox_docker*
|
1574
|
+
|
1575
|
+
Executes commands in sandbox (docker container). Docker must be installed and running.
|
1576
|
+
|
1613
1577
|
- `Python command template` *python_cmd_tpl*
|
1614
1578
|
|
1615
1579
|
Python command template (use {filename} as path to file placeholder). *Default:* `python3 {filename}`
|
1616
1580
|
|
1617
|
-
- `
|
1581
|
+
- `Dockerfile` *dockerfile*
|
1582
|
+
|
1583
|
+
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.
|
1584
|
+
|
1585
|
+
- `Docker image name` *image_name*
|
1586
|
+
|
1587
|
+
Custom Docker image name
|
1588
|
+
|
1589
|
+
- `Docker container name` *container_name*
|
1590
|
+
|
1591
|
+
Custom Docker container name
|
1592
|
+
|
1593
|
+
- `Tool: code_execute` *cmd.code_execute*
|
1618
1594
|
|
1619
1595
|
Allows `code_execute` command execution. If enabled, provides Python code execution (generate and execute from file). *Default:* `True`
|
1620
1596
|
|
1621
|
-
- `
|
1597
|
+
- `Tool: code_execute_all` *cmd.code_execute_all*
|
1622
1598
|
|
1623
1599
|
Allows `code_execute_all` command execution. If enabled, provides execution of all the Python code in interpreter window. *Default:* `True`
|
1624
1600
|
|
1625
|
-
- `
|
1601
|
+
- `Tool: code_execute_file` *cmd.code_execute_file*
|
1626
1602
|
|
1627
1603
|
Allows `code_execute_file` command execution. If enabled, provides Python code execution from existing .py file. *Default:* `True`
|
1628
|
-
|
1629
|
-
- `Enable: sys_exec` *cmd.sys_exec*
|
1630
|
-
|
1631
|
-
Allows `sys_exec` command execution. If enabled, provides system commands execution. *Default:* `True`
|
1632
1604
|
|
1633
|
-
- `Enable: get_python_output` *cmd.get_python_output*
|
1634
1605
|
|
1635
|
-
|
1606
|
+
**HTML Canvas**
|
1636
1607
|
|
1637
|
-
- `
|
1608
|
+
- `Tool: render_html_output` *cmd.render_html_output*
|
1638
1609
|
|
1639
|
-
Allows `
|
1610
|
+
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`
|
1640
1611
|
|
1641
|
-
- `
|
1612
|
+
- `Tool: get_html_output` *cmd.get_html_output*
|
1642
1613
|
|
1643
|
-
Allows `
|
1614
|
+
Allows `get_html_output` command execution. If enabled, it allows retrieval current output from HTML Canvas. *Default:* `True`
|
1644
1615
|
|
1645
1616
|
- `Sandbox (docker container)` *sandbox_docker*
|
1646
1617
|
|
@@ -1650,20 +1621,13 @@ Execute commands in sandbox (docker container). Docker must be installed and run
|
|
1650
1621
|
|
1651
1622
|
Docker image to use for sandbox *Default:* `python:3.8-alpine`
|
1652
1623
|
|
1653
|
-
- `Auto-append CWD to sys_exec` *auto_cwd*
|
1654
|
-
|
1655
|
-
Automatically append current working directory to `sys_exec` command. *Default:* `True`
|
1656
|
-
|
1657
|
-
- `Connect to the Python code interpreter window` *attach_output*
|
1658
|
-
|
1659
|
-
Automatically attach code input/output to the Python code interpreter window. *Default:* `True`
|
1660
1624
|
|
1661
1625
|
|
1662
|
-
##
|
1626
|
+
## Custom Commands
|
1663
1627
|
|
1664
1628
|
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:
|
1665
1629
|
|
1666
|
-

|
1667
1631
|
|
1668
1632
|
To add a new custom command, click the **ADD** button and then:
|
1669
1633
|
|
@@ -1719,9 +1683,9 @@ With the setup above, every time you ask GPT to generate a song for you and save
|
|
1719
1683
|
|
1720
1684
|
```> please execute tutorial test command```
|
1721
1685
|
|
1722
|
-

|
1723
1687
|
|
1724
|
-
##
|
1688
|
+
## Files I/O
|
1725
1689
|
|
1726
1690
|
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.
|
1727
1691
|
|
@@ -1738,8 +1702,8 @@ Plugin capabilities include:
|
|
1738
1702
|
- Copying files and directories
|
1739
1703
|
- Moving (renaming) files and directories
|
1740
1704
|
- Reading file info
|
1741
|
-
- Indexing files and directories using
|
1742
|
-
- Querying files using
|
1705
|
+
- Indexing files and directories using LlamaIndex
|
1706
|
+
- Querying files using LlamaIndex
|
1743
1707
|
- Searching for files and directories
|
1744
1708
|
|
1745
1709
|
If a file being created (with the same name) already exists, a prefix including the date and time is added to the file name.
|
@@ -1748,89 +1712,89 @@ If a file being created (with the same name) already exists, a prefix including
|
|
1748
1712
|
|
1749
1713
|
**General**
|
1750
1714
|
|
1751
|
-
- `
|
1715
|
+
- `Tool: send (upload) file as attachment` *cmd.send_file*
|
1752
1716
|
|
1753
1717
|
Allows `cmd.send_file` command execution. *Default:* `True`
|
1754
1718
|
|
1755
|
-
- `
|
1719
|
+
- `Tool: read file` *cmd.read_file*
|
1756
1720
|
|
1757
1721
|
Allows `read_file` command execution. *Default:* `True`
|
1758
1722
|
|
1759
|
-
- `
|
1723
|
+
- `Tool: append to file` *cmd.append_file*
|
1760
1724
|
|
1761
1725
|
Allows `append_file` command execution. Text-based files only (plain text, JSON, CSV, etc.) *Default:* `True`
|
1762
1726
|
|
1763
|
-
- `
|
1727
|
+
- `Tool: save file` *cmd.save_file*
|
1764
1728
|
|
1765
1729
|
Allows `save_file` command execution. Text-based files only (plain text, JSON, CSV, etc.) *Default:* `True`
|
1766
1730
|
|
1767
|
-
- `
|
1731
|
+
- `Tool: delete file` *cmd.delete_file*
|
1768
1732
|
|
1769
1733
|
Allows `delete_file` command execution. *Default:* `True`
|
1770
1734
|
|
1771
|
-
- `
|
1735
|
+
- `Tool: list files (ls)` *cmd.list_files*
|
1772
1736
|
|
1773
1737
|
Allows `list_dir` command execution. *Default:* `True`
|
1774
1738
|
|
1775
|
-
- `
|
1739
|
+
- `Tool: list files in dirs in directory (ls)` *cmd.list_dir*
|
1776
1740
|
|
1777
1741
|
Allows `mkdir` command execution. *Default:* `True`
|
1778
1742
|
|
1779
|
-
- `
|
1743
|
+
- `Tool: downloading files` *cmd.download_file*
|
1780
1744
|
|
1781
1745
|
Allows `download_file` command execution. *Default:* `True`
|
1782
1746
|
|
1783
|
-
- `
|
1747
|
+
- `Tool: removing directories` *cmd.rmdir*
|
1784
1748
|
|
1785
1749
|
Allows `rmdir` command execution. *Default:* `True`
|
1786
1750
|
|
1787
|
-
- `
|
1751
|
+
- `Tool: copying files` *cmd.copy_file*
|
1788
1752
|
|
1789
1753
|
Allows `copy_file` command execution. *Default:* `True`
|
1790
1754
|
|
1791
|
-
- `
|
1755
|
+
- `Tool: copying directories (recursive)` *cmd.copy_dir*
|
1792
1756
|
|
1793
1757
|
Allows `copy_dir` command execution. *Default:* `True`
|
1794
1758
|
|
1795
|
-
- `
|
1759
|
+
- `Tool: move files and directories (rename)` *cmd.move*
|
1796
1760
|
|
1797
1761
|
Allows `move` command execution. *Default:* `True`
|
1798
1762
|
|
1799
|
-
- `
|
1763
|
+
- `Tool: check if path is directory` *cmd.is_dir*
|
1800
1764
|
|
1801
1765
|
Allows `is_dir` command execution. *Default:* `True`
|
1802
1766
|
|
1803
|
-
- `
|
1767
|
+
- `Tool: check if path is file` *cmd.is_file*
|
1804
1768
|
|
1805
1769
|
Allows `is_file` command execution. *Default:* `True`
|
1806
1770
|
|
1807
|
-
- `
|
1771
|
+
- `Tool: check if file or directory exists` *cmd.file_exists*
|
1808
1772
|
|
1809
1773
|
Allows `file_exists` command execution. *Default:* `True`
|
1810
1774
|
|
1811
|
-
- `
|
1775
|
+
- `Tool: get file size` *cmd.file_size*
|
1812
1776
|
|
1813
1777
|
Allows `file_size` command execution. *Default:* `True`
|
1814
1778
|
|
1815
|
-
- `
|
1779
|
+
- `Tool: get file info` *cmd.file_info*
|
1816
1780
|
|
1817
1781
|
Allows `file_info` command execution. *Default:* `True`
|
1818
1782
|
|
1819
|
-
- `
|
1783
|
+
- `Tool: find file or directory` *cmd.find*
|
1820
1784
|
|
1821
1785
|
Allows `find` command execution. *Default:* `True`
|
1822
1786
|
|
1823
|
-
- `
|
1787
|
+
- `Tool: get current working directory` *cmd.cwd*
|
1824
1788
|
|
1825
1789
|
Allows `cwd` command execution. *Default:* `True`
|
1826
1790
|
|
1827
1791
|
- `Use data loaders` *use_loaders*
|
1828
1792
|
|
1829
|
-
Use data loaders from
|
1793
|
+
Use data loaders from LlamaIndex for file reading (`read_file` command). *Default:* `True`
|
1830
1794
|
|
1831
1795
|
**Indexing**
|
1832
1796
|
|
1833
|
-
- `
|
1797
|
+
- `Tool: quick query the file with LlamaIndex` *cmd.query_file*
|
1834
1798
|
|
1835
1799
|
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`
|
1836
1800
|
|
@@ -1838,9 +1802,9 @@ Allows `query_file` command execution (in-memory index). If enabled, model will
|
|
1838
1802
|
|
1839
1803
|
Model used for query temporary index for `query_file` command (in-memory index). *Default:* `gpt-3.5-turbo`
|
1840
1804
|
|
1841
|
-
- `
|
1805
|
+
- `Tool: indexing files to persistent index` *cmd.file_index*
|
1842
1806
|
|
1843
|
-
Allows `file_index` command execution. If enabled, model will be able to index file or directory using
|
1807
|
+
Allows `file_index` command execution. If enabled, model will be able to index file or directory using LlamaIndex (persistent index). *Default:* `True`
|
1844
1808
|
|
1845
1809
|
- `Index to use when indexing files` *idx*
|
1846
1810
|
|
@@ -1854,83 +1818,183 @@ If enabled, every time file is read, it will be automatically indexed (persisten
|
|
1854
1818
|
|
1855
1819
|
If enabled, file will be indexed without return its content on file read (persistent index). *Default:* `False`
|
1856
1820
|
|
1821
|
+
## System (OS)
|
1857
1822
|
|
1858
|
-
|
1823
|
+
The plugin provides access to the operating system and executes system commands.
|
1859
1824
|
|
1860
|
-
**
|
1825
|
+
**Options:**
|
1861
1826
|
|
1862
|
-
|
1827
|
+
**General**
|
1863
1828
|
|
1864
|
-
|
1829
|
+
- `Auto-append CWD to sys_exec` *auto_cwd*
|
1865
1830
|
|
1866
|
-
|
1831
|
+
Automatically append current working directory to `sys_exec` command. *Default:* `True`
|
1867
1832
|
|
1868
|
-
- `
|
1833
|
+
- `Tool: sys_exec` *cmd.sys_exec*
|
1869
1834
|
|
1870
|
-
|
1835
|
+
Allows `sys_exec` command execution. If enabled, provides system commands execution. *Default:* `True`
|
1871
1836
|
|
1872
|
-
Available providers:
|
1873
1837
|
|
1874
|
-
|
1875
|
-
- Microsoft Bing
|
1838
|
+
## Mouse And Keyboard
|
1876
1839
|
|
1877
|
-
|
1840
|
+
Introduced in version: `2.4.4` (2024-11-09)
|
1878
1841
|
|
1879
|
-
|
1842
|
+
**WARNING: Use this plugin with caution - allowing all options gives the model full control over the mouse and keyboard**
|
1880
1843
|
|
1881
|
-
|
1844
|
+
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."
|
1882
1845
|
|
1883
|
-
|
1846
|
+
Plugin capabilities include:
|
1884
1847
|
|
1885
|
-
|
1848
|
+
- Get mouse cursor position
|
1849
|
+
- Control mouse cursor position
|
1850
|
+
- Control mouse clicks
|
1851
|
+
- Control mouse scroll
|
1852
|
+
- Control the keyboard (pressing keys, typing text)
|
1853
|
+
- Making screenshots
|
1886
1854
|
|
1887
|
-
|
1888
|
-
Then, copy the following two items into **PyGPT**:
|
1855
|
+
The `+ Tools` option must be enabled to use this plugin.
|
1889
1856
|
|
1890
|
-
|
1891
|
-
- `CX ID`
|
1857
|
+
**Options:**
|
1892
1858
|
|
1893
|
-
|
1859
|
+
**General**
|
1894
1860
|
|
1895
|
-
|
1861
|
+
- `Prompt` *prompt*
|
1896
1862
|
|
1897
|
-
|
1863
|
+
Prompt used to instruct how to control the mouse and keyboard.
|
1898
1864
|
|
1899
|
-
|
1865
|
+
- `Enable: Allow mouse movement` *allow_mouse_move*
|
1900
1866
|
|
1901
|
-
|
1867
|
+
Allows mouse movement. *Default:* `True`
|
1902
1868
|
|
1903
|
-
|
1869
|
+
- `Enable: Allow mouse click` *allow_mouse_click*
|
1904
1870
|
|
1905
|
-
|
1871
|
+
Allows mouse click. *Default:* `True`
|
1906
1872
|
|
1907
|
-
- `
|
1873
|
+
- `Enable: Allow mouse scroll` *allow_mouse_scroll*
|
1908
1874
|
|
1909
|
-
|
1875
|
+
Allows mouse scroll. *Default:* `True`
|
1910
1876
|
|
1911
|
-
- `
|
1877
|
+
- `Enable: Allow keyboard key press` *allow_keyboard*
|
1912
1878
|
|
1913
|
-
|
1879
|
+
Allows keyboard typing. *Default:* `True`
|
1914
1880
|
|
1915
|
-
|
1881
|
+
- `Enable: Allow making screenshots` *allow_screenshot*
|
1916
1882
|
|
1917
|
-
|
1883
|
+
Allows making screenshots. *Default:* `True`
|
1918
1884
|
|
1919
|
-
|
1885
|
+
- `Tool: mouse_get_pos` *cmd.mouse_get_pos*
|
1920
1886
|
|
1921
|
-
|
1887
|
+
Allows `mouse_get_pos` command execution. *Default:* `True`
|
1922
1888
|
|
1923
|
-
|
1889
|
+
- `Tool: mouse_set_pos` *cmd.mouse_set_pos*
|
1924
1890
|
|
1925
|
-
|
1891
|
+
Allows `mouse_set_pos` command execution. *Default:* `True`
|
1926
1892
|
|
1927
|
-
|
1893
|
+
- `Tool: make_screenshot` *cmd.make_screenshot*
|
1928
1894
|
|
1929
|
-
|
1895
|
+
Allows `make_screenshot` command execution. *Default:* `True`
|
1930
1896
|
|
1931
|
-
|
1897
|
+
- `Tool: mouse_click` *cmd.mouse_click*
|
1932
1898
|
|
1933
|
-
|
1899
|
+
Allows `mouse_click` command execution. *Default:* `True`
|
1900
|
+
|
1901
|
+
- `Tool: mouse_move` *cmd.mouse_move*
|
1902
|
+
|
1903
|
+
Allows `mouse_move` command execution. *Default:* `True`
|
1904
|
+
|
1905
|
+
- `Tool: mouse_scroll` *cmd.mouse_scroll*
|
1906
|
+
|
1907
|
+
Allows `mouse_scroll` command execution. *Default:* `True`
|
1908
|
+
|
1909
|
+
- `Tool: keyboard_key` *cmd.keyboard_key*
|
1910
|
+
|
1911
|
+
Allows `keyboard_key` command execution. *Default:* `True`
|
1912
|
+
|
1913
|
+
- `Tool: keyboard_type` *cmd.keyboard_type*
|
1914
|
+
|
1915
|
+
Allows `keyboard_type` command execution. *Default:* `True`
|
1916
|
+
|
1917
|
+
|
1918
|
+
## Web Search
|
1919
|
+
|
1920
|
+
**PyGPT** lets you connect GPT to the internet and carry out web searches in real time as you make queries.
|
1921
|
+
|
1922
|
+
To activate this feature, turn on the `Web Search` plugin found in the `Plugins` menu.
|
1923
|
+
|
1924
|
+
Web searches are provided by `Google Custom Search Engine` and `Microsoft Bing` APIs and can be extended with other search engine providers.
|
1925
|
+
|
1926
|
+
**Options**
|
1927
|
+
|
1928
|
+
- `Provider` *provider*
|
1929
|
+
|
1930
|
+
Choose the provider. *Default:* `Google`
|
1931
|
+
|
1932
|
+
Available providers:
|
1933
|
+
|
1934
|
+
- Google
|
1935
|
+
- Microsoft Bing
|
1936
|
+
|
1937
|
+
**Google**
|
1938
|
+
|
1939
|
+
To use this provider, you need an API key, which you can obtain by registering an account at:
|
1940
|
+
|
1941
|
+
https://developers.google.com/custom-search/v1/overview
|
1942
|
+
|
1943
|
+
After registering an account, create a new project and select it from the list of available projects:
|
1944
|
+
|
1945
|
+
https://programmablesearchengine.google.com/controlpanel/all
|
1946
|
+
|
1947
|
+
After selecting your project, you need to enable the `Whole Internet Search` option in its settings.
|
1948
|
+
Then, copy the following two items into **PyGPT**:
|
1949
|
+
|
1950
|
+
- `Api Key`
|
1951
|
+
- `CX ID`
|
1952
|
+
|
1953
|
+
These data must be configured in the appropriate fields in the `Plugins / Settings...` menu:
|
1954
|
+
|
1955
|
+

|
1956
|
+
|
1957
|
+
- `Google Custom Search API KEY` *google_api_key*
|
1958
|
+
|
1959
|
+
You can obtain your own API key at https://developers.google.com/custom-search/v1/overview
|
1960
|
+
|
1961
|
+
- `Google Custom Search CX ID` *google_api_cx*
|
1962
|
+
|
1963
|
+
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.
|
1964
|
+
|
1965
|
+
**Microsoft Bing**
|
1966
|
+
|
1967
|
+
- `Bing Search API KEY` *bing_api_key*
|
1968
|
+
|
1969
|
+
You can obtain your own API key at https://www.microsoft.com/en-us/bing/apis/bing-web-search-api
|
1970
|
+
|
1971
|
+
- `Bing Search API endpoint` *bing_endpoint*
|
1972
|
+
|
1973
|
+
API endpoint for Bing Search API, default: https://api.bing.microsoft.com/v7.0/search
|
1974
|
+
|
1975
|
+
**General options**
|
1976
|
+
|
1977
|
+
- `Number of pages to search` *num_pages*
|
1978
|
+
|
1979
|
+
Number of max pages to search per query. *Default:* `10`
|
1980
|
+
|
1981
|
+
- `Max content characters` *max_page_content_length*
|
1982
|
+
|
1983
|
+
Max characters of page content to get (0 = unlimited). *Default:* `0`
|
1984
|
+
|
1985
|
+
- `Per-page content chunk size` *chunk_size*
|
1986
|
+
|
1987
|
+
Per-page content chunk size (max characters per chunk). *Default:* `20000`
|
1988
|
+
|
1989
|
+
- `Disable SSL verify` *disable_ssl*
|
1990
|
+
|
1991
|
+
Disables SSL verification when crawling web pages. *Default:* `False`
|
1992
|
+
|
1993
|
+
- `Use raw content (without summarization)` *raw*
|
1994
|
+
|
1995
|
+
Return raw content from web search instead of summarized content. Provides more data but consumes more tokens. *Default:* `True`
|
1996
|
+
|
1997
|
+
- `Timeout` *timeout*
|
1934
1998
|
|
1935
1999
|
Connection timeout (seconds). *Default:* `5`
|
1936
2000
|
|
@@ -1940,47 +2004,41 @@ User agent to use when making requests. *Default:* `Mozilla/5.0`.
|
|
1940
2004
|
|
1941
2005
|
- `Max result length` *max_result_length*
|
1942
2006
|
|
1943
|
-
Max length of summarized result (characters). *Default:* `
|
2007
|
+
Max length of the summarized or raw result (characters). *Default:* `50000`
|
1944
2008
|
|
1945
2009
|
- `Max summary tokens` *summary_max_tokens*
|
1946
2010
|
|
1947
2011
|
Max tokens in output when generating summary. *Default:* `1500`
|
1948
2012
|
|
1949
|
-
- `
|
2013
|
+
- `Tool: web_search` *cmd.web_search*
|
1950
2014
|
|
1951
2015
|
Allows `web_search` command execution. If enabled, model will be able to search the Web. *Default:* `True`
|
1952
2016
|
|
1953
|
-
- `
|
2017
|
+
- `Tool: web_url_open` *cmd.web_url_open*
|
1954
2018
|
|
1955
2019
|
Allows `web_url_open` command execution. If enabled, model will be able to open specified URL and summarize content. *Default:* `True`
|
1956
2020
|
|
1957
|
-
- `
|
2021
|
+
- `Tool: web_url_raw` *cmd.web_url_raw*
|
1958
2022
|
|
1959
2023
|
Allows `web_url_raw` command execution. If enabled, model will be able to open specified URL and get the raw content. *Default:* `True`
|
1960
2024
|
|
1961
|
-
- `
|
1962
|
-
|
1963
|
-
Allows `web_urls` command execution. If enabled, model will be able to search the Web and get founded URLs list. *Default:* `True`
|
1964
|
-
|
1965
|
-
- `Enable: indexing web and external content` *cmd.web_index*
|
1966
|
-
|
1967
|
-
Allows `web_index` command execution. If enabled, model will be able to index pages and external content using Llama-index (persistent index). *Default:* `True`
|
2025
|
+
- `Tool: web_request` *cmd.web_request*
|
1968
2026
|
|
1969
|
-
|
2027
|
+
Allows `web_request` command execution. If enabled, model will be able to send any HTTP request to specified URL or API endpoint. *Default:* `True`
|
1970
2028
|
|
1971
|
-
|
2029
|
+
- `Tool: web_extract_links` *cmd.web_extract_links*
|
1972
2030
|
|
1973
|
-
|
2031
|
+
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`
|
1974
2032
|
|
1975
|
-
|
2033
|
+
- `Tool: web_extract_images` *cmd.web_extract_images*
|
1976
2034
|
|
1977
|
-
|
2035
|
+
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`
|
1978
2036
|
|
1979
|
-
|
2037
|
+
**Advanced**
|
1980
2038
|
|
1981
2039
|
- `Model used for web page summarize` *summary_model*
|
1982
2040
|
|
1983
|
-
Model used for web page summarize. *Default:* `gpt-
|
2041
|
+
Model used for web page summarize. *Default:* `gpt-4o-mini`
|
1984
2042
|
|
1985
2043
|
- `Summarize prompt` *prompt_summarize*
|
1986
2044
|
|
@@ -1990,7 +2048,25 @@ Prompt used for web search results summarize, use {query} as a placeholder for s
|
|
1990
2048
|
|
1991
2049
|
Prompt used for specified URL page summarize.
|
1992
2050
|
|
1993
|
-
|
2051
|
+
**Indexing**
|
2052
|
+
|
2053
|
+
- `Tool: web_index` *cmd.web_index*
|
2054
|
+
|
2055
|
+
Allows `web_index` command execution. If enabled, model will be able to index pages and external content using LlamaIndex (persistent index). *Default:* `True`
|
2056
|
+
|
2057
|
+
- `Tool: web_index_query` *cmd.web_index_query*
|
2058
|
+
|
2059
|
+
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`
|
2060
|
+
|
2061
|
+
- `Auto-index all used URLs using LlamaIndex` *auto_index*
|
2062
|
+
|
2063
|
+
If enabled, every URL used by the model will be automatically indexed using LlamaIndex (persistent index). *Default:* `False`
|
2064
|
+
|
2065
|
+
- `Index to use` *idx*
|
2066
|
+
|
2067
|
+
ID of index to use for web page indexing (persistent index). *Default:* `base`
|
2068
|
+
|
2069
|
+
## Serial port / USB
|
1994
2070
|
|
1995
2071
|
Provides commands for reading and sending data to USB ports.
|
1996
2072
|
|
@@ -2037,15 +2113,15 @@ Timeout in seconds. *Default:* `1`
|
|
2037
2113
|
|
2038
2114
|
Sleep in seconds after connection *Default:* `2`
|
2039
2115
|
|
2040
|
-
- `
|
2116
|
+
- `Tool: Send text commands to USB port` *cmd.serial_send*
|
2041
2117
|
|
2042
2118
|
Allows `serial_send` command execution. *Default:* `True`
|
2043
2119
|
|
2044
|
-
- `
|
2120
|
+
- `Tool: Send raw bytes to USB port` *cmd.serial_send_bytes*
|
2045
2121
|
|
2046
2122
|
Allows `serial_send_bytes` command execution. *Default:* `True`
|
2047
2123
|
|
2048
|
-
- `
|
2124
|
+
- `Tool: Read data from USB port` *cmd.serial_read*
|
2049
2125
|
|
2050
2126
|
Allows `serial_read` command execution. *Default:* `True`
|
2051
2127
|
|
@@ -2068,7 +2144,7 @@ Examples of use, you can ask e.g. for the following:
|
|
2068
2144
|
|
2069
2145
|
etc.
|
2070
2146
|
|
2071
|
-
|
2147
|
+
You can also use `@` ID tags to automatically use summary of previous contexts in current discussion.
|
2072
2148
|
To use context from previous discussion with specified ID use following syntax in your query:
|
2073
2149
|
|
2074
2150
|
```@123```
|
@@ -2084,31 +2160,31 @@ Where `123` is the ID of previous context (conversation) in database, example of
|
|
2084
2160
|
|
2085
2161
|
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`
|
2086
2162
|
|
2087
|
-
- `
|
2163
|
+
- `Tool: get date range context list` *cmd.get_ctx_list_in_date_range*
|
2088
2164
|
|
2089
2165
|
Allows `get_ctx_list_in_date_range` command execution. If enabled, it allows getting the list of context history (previous conversations). *Default:* `True
|
2090
2166
|
|
2091
|
-
- `
|
2167
|
+
- `Tool: get context content by ID` *cmd.get_ctx_content_by_id*
|
2092
2168
|
|
2093
2169
|
Allows `get_ctx_content_by_id` command execution. If enabled, it allows getting summarized content of context with defined ID. *Default:* `True`
|
2094
2170
|
|
2095
|
-
- `
|
2171
|
+
- `Tool: count contexts in date range` *cmd.count_ctx_in_date*
|
2096
2172
|
|
2097
2173
|
Allows `count_ctx_in_date` command execution. If enabled, it allows counting contexts in date range. *Default:* `True`
|
2098
2174
|
|
2099
|
-
- `
|
2175
|
+
- `Tool: get day note` *cmd.get_day_note*
|
2100
2176
|
|
2101
2177
|
Allows `get_day_note` command execution. If enabled, it allows retrieving day note for specific date. *Default:* `True`
|
2102
2178
|
|
2103
|
-
- `
|
2179
|
+
- `Tool: add day note` *cmd.add_day_note*
|
2104
2180
|
|
2105
2181
|
Allows `add_day_note` command execution. If enabled, it allows adding day note for specific date. *Default:* `True`
|
2106
2182
|
|
2107
|
-
- `
|
2183
|
+
- `Tool: update day note` *cmd.update_day_note*
|
2108
2184
|
|
2109
2185
|
Allows `update_day_note` command execution. If enabled, it allows updating day note for specific date. *Default:* `True`
|
2110
2186
|
|
2111
|
-
- `
|
2187
|
+
- `Tool: remove day note` *cmd.remove_day_note*
|
2112
2188
|
|
2113
2189
|
Allows `remove_day_note` command execution. If enabled, it allows removing day note for specific date. *Default:* `True`
|
2114
2190
|
|
@@ -2166,7 +2242,7 @@ If enabled, then a tray notification will be shown on every run of the job. *Def
|
|
2166
2242
|
|
2167
2243
|
## DALL-E 3: Image Generation (inline)
|
2168
2244
|
|
2169
|
-
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
|
2245
|
+
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.
|
2170
2246
|
|
2171
2247
|
**Options**
|
2172
2248
|
|
@@ -2174,6 +2250,12 @@ The plugin integrates `DALL-E 3` image generation with any chat mode. Simply ena
|
|
2174
2250
|
|
2175
2251
|
The prompt is used to generate a query for the `DALL-E` image generation model, which runs in the background.
|
2176
2252
|
|
2253
|
+
## Experts (inline)
|
2254
|
+
|
2255
|
+
The plugin allows calling experts in any chat mode. This is the inline Experts (co-op) mode.
|
2256
|
+
|
2257
|
+
See the `Work modes -> Experts` section for more details.
|
2258
|
+
|
2177
2259
|
## GPT-4 Vision (inline)
|
2178
2260
|
|
2179
2261
|
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.
|
@@ -2194,13 +2276,56 @@ The prompt used for vision mode. It will append or replace current system prompt
|
|
2194
2276
|
|
2195
2277
|
Replace whole system prompt with vision prompt against appending it to the current prompt. *Default:* `False`
|
2196
2278
|
|
2197
|
-
- `
|
2279
|
+
- `Tool: capturing images from camera` *cmd.camera_capture*
|
2280
|
+
|
2281
|
+
Allows `capture` command execution. If enabled, model will be able to capture images from camera itself. The `+ Tools` option must be enabled. *Default:* `False`
|
2282
|
+
|
2283
|
+
- `Tool: making screenshots` *cmd.make_screenshot*
|
2284
|
+
|
2285
|
+
Allows `screenshot` command execution. If enabled, model will be able to making screenshots itself. The `+ Tools` option must be enabled. *Default:* `False`
|
2286
|
+
|
2287
|
+
## Mailer
|
2288
|
+
|
2289
|
+
Enables the sending, receiving, and reading of emails from the inbox. Currently, only SMTP is supported. More options coming soon.
|
2290
|
+
|
2291
|
+
**Options**
|
2292
|
+
|
2293
|
+
- `From (email)` *from_email*
|
2294
|
+
|
2295
|
+
From (email), e.g. me@domain.com
|
2296
|
+
|
2297
|
+
- `Tool: send_mail` *cmd.send_mail*
|
2298
|
+
|
2299
|
+
Allows `send_mail` command execution. If enabled, model will be able to sending emails.
|
2300
|
+
|
2301
|
+
- `Tool: receive_emails` *cmd.receive_emails*
|
2302
|
+
|
2303
|
+
Allows `receive_emails` command execution. If enabled, model will be able to receive emails from the server.
|
2304
|
+
|
2305
|
+
- `Tool: get_email_body` *cmd.get_email_body*
|
2306
|
+
|
2307
|
+
Allows `get_email_body` command execution. If enabled, model will be able to receive message body from the server.
|
2308
|
+
|
2309
|
+
- `SMTP Host` *smtp_host*
|
2310
|
+
|
2311
|
+
SMTP Host, e.g. smtp.domain.com
|
2312
|
+
|
2313
|
+
- `SMTP Port (Inbox)` *smtp_port_inbox*
|
2314
|
+
|
2315
|
+
SMTP Port, default: 995
|
2316
|
+
|
2317
|
+
- `SMTP Port (Outbox)` *smtp_port_outbox*
|
2318
|
+
|
2319
|
+
SMTP Port, default: 465
|
2320
|
+
|
2321
|
+
- `SMTP User` *smtp_user*
|
2322
|
+
|
2323
|
+
SMTP User, e.g. user@domain.com
|
2198
2324
|
|
2199
|
-
|
2325
|
+
- `SMTP Password` *smtp_password*
|
2200
2326
|
|
2201
|
-
|
2327
|
+
SMTP Password.
|
2202
2328
|
|
2203
|
-
Allows `screenshot` command execution. If enabled, model will be able to making screenshots itself. The `Execute commands` option must be enabled. *Default:* `False`
|
2204
2329
|
|
2205
2330
|
## Real Time
|
2206
2331
|
|
@@ -2237,325 +2362,354 @@ List of extra prompts - prompts that will be appended to system prompt.
|
|
2237
2362
|
All active extra prompts defined on list will be appended to the system prompt in the order they are listed here.
|
2238
2363
|
|
2239
2364
|
|
2365
|
+
## Voice Control (inline)
|
2366
|
+
|
2367
|
+
The plugin provides voice control command execution within a conversation.
|
2368
|
+
|
2369
|
+
See the ``Accessibility`` section for more details.
|
2370
|
+
|
2371
|
+
|
2240
2372
|
# Creating Your Own Plugins
|
2241
2373
|
|
2242
2374
|
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.
|
2243
2375
|
|
2244
2376
|
PyGPT can be extended with:
|
2245
2377
|
|
2246
|
-
-
|
2378
|
+
- custom models
|
2247
2379
|
|
2248
|
-
-
|
2380
|
+
- custom plugins
|
2249
2381
|
|
2250
|
-
-
|
2382
|
+
- custom LLMs wrappers
|
2251
2383
|
|
2252
|
-
-
|
2384
|
+
- custom vector store providers
|
2253
2385
|
|
2254
|
-
-
|
2386
|
+
- custom data loaders
|
2255
2387
|
|
2256
|
-
-
|
2388
|
+
- custom audio input providers
|
2257
2389
|
|
2258
|
-
-
|
2390
|
+
- custom audio output providers
|
2259
2391
|
|
2392
|
+
- custom web search engine providers
|
2260
2393
|
|
2261
|
-
**Examples (tutorial files)**
|
2262
2394
|
|
2263
|
-
See the `
|
2395
|
+
See the section `Extending PyGPT / Adding a custom plugin` for more details.
|
2264
2396
|
|
2265
|
-
|
2397
|
+
# Functions and commands execution
|
2266
2398
|
|
2267
|
-
|
2399
|
+
**Tip** remember to enable the `+ Tools` checkbox to enable execution of tools and commands from plugins.
|
2268
2400
|
|
2269
|
-
|
2401
|
+
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).
|
2270
2402
|
|
2271
|
-
|
2403
|
+
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):
|
2272
2404
|
|
2273
|
-
|
2405
|
+
```~###~{"cmd": "send_email", "params": {"quote": "Why don't skeletons fight each other? They don't have the guts!"}}~###~```
|
2274
2406
|
|
2275
|
-
|
2407
|
+
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.
|
2276
2408
|
|
2277
|
-
|
2409
|
+
**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).
|
2278
2410
|
|
2279
|
-
-
|
2411
|
+

|
2280
2412
|
|
2281
|
-
|
2413
|
+
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.
|
2282
2414
|
|
2283
|
-
|
2415
|
+
However, there is an additional possibility to define your own commands and execute them with the help of GPT.
|
2416
|
+
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:
|
2284
2417
|
|
2285
|
-
-
|
2418
|
+
https://platform.openai.com/docs/guides/function-calling
|
2286
2419
|
|
2287
|
-
|
2420
|
+
https://cookbook.openai.com/examples/how_to_call_functions_with_chat_models
|
2288
2421
|
|
2289
|
-
|
2422
|
+
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.
|
2290
2423
|
|
2291
|
-
|
2424
|
+
You can define functions for modes: `Chat` and `Assistants`.
|
2425
|
+
Note that - in Chat mode, they should be defined in `Presets`, and for Assistants, in the `Assistant` settings.
|
2292
2426
|
|
2293
|
-
|
2427
|
+
**Example of usage:**
|
2294
2428
|
|
2295
|
-
|
2429
|
+
1) Chat
|
2296
2430
|
|
2297
|
-
|
2431
|
+
Create a new Preset, open the Preset edit dialog and add a new function using `+ Function` button with the following content:
|
2298
2432
|
|
2299
|
-
|
2433
|
+
**Name:** `send_email`
|
2300
2434
|
|
2301
|
-
|
2435
|
+
**Description:** `Sends a quote using email`
|
2302
2436
|
|
2303
|
-
|
2437
|
+
**Params (JSON):**
|
2304
2438
|
|
2305
|
-
|
2439
|
+
```json
|
2440
|
+
{
|
2441
|
+
"type": "object",
|
2442
|
+
"properties": {
|
2443
|
+
"quote": {
|
2444
|
+
"type": "string",
|
2445
|
+
"description": "A generated funny quote"
|
2446
|
+
}
|
2447
|
+
},
|
2448
|
+
"required": [
|
2449
|
+
"quote"
|
2450
|
+
]
|
2451
|
+
}
|
2452
|
+
```
|
2306
2453
|
|
2307
|
-
|
2454
|
+
Then, in the `Custom Commands` plugin, create a new command with the same name and the same parameters:
|
2308
2455
|
|
2309
|
-
|
2456
|
+
**Command name:** `send_email`
|
2310
2457
|
|
2311
|
-
|
2458
|
+
**Instruction/prompt:** `send mail` *(don't needed, because it will be called on OpenAI side)*
|
2312
2459
|
|
2313
|
-
|
2460
|
+
**Params list:** `quote`
|
2314
2461
|
|
2315
|
-
|
2462
|
+
**Command to execute:** `echo "OK. Email sent: {quote}"`
|
2316
2463
|
|
2317
|
-
|
2464
|
+
At next, enable the `+ Tools` option and enable the plugin.
|
2318
2465
|
|
2466
|
+
Ask GPT in Chat mode:
|
2319
2467
|
|
2320
|
-
```
|
2321
|
-
# custom_launcher.py
|
2468
|
+
```Create a funny quote and email it```
|
2322
2469
|
|
2323
|
-
|
2324
|
-
from plugins import CustomPlugin, OtherCustomPlugin
|
2325
|
-
from llms import CustomLLM
|
2326
|
-
from vector_stores import CustomVectorStore
|
2470
|
+
In response you will receive prepared command, like this:
|
2327
2471
|
|
2328
|
-
|
2329
|
-
CustomPlugin(),
|
2330
|
-
OtherCustomPlugin(),
|
2331
|
-
]
|
2332
|
-
llms = [
|
2333
|
-
CustomLLM(),
|
2334
|
-
]
|
2335
|
-
vector_stores = [
|
2336
|
-
CustomVectorStore(),
|
2337
|
-
]
|
2472
|
+
```~###~{"cmd": "send_email", "params": {"quote": "Why do we tell actors to 'break a leg?' Because every play has a cast!"}}~###~```
|
2338
2473
|
|
2339
|
-
|
2340
|
-
plugins=plugins,
|
2341
|
-
llms=llms,
|
2342
|
-
vector_stores=vector_stores
|
2343
|
-
)
|
2344
|
-
```
|
2474
|
+
After receiving this, PyGPT will execute the system `echo` command with params given from `params` field and replacing `{quote}` placeholder with `quote` param value.
|
2345
2475
|
|
2346
|
-
|
2476
|
+
As a result, response like this will be sent to the model:
|
2347
2477
|
|
2348
|
-
|
2349
|
-
To do this, create a method named `handle(self, event, *args, **kwargs)` and handle the received events like here:
|
2478
|
+
```[{"request": {"cmd": "send_email"}, "result": "OK. Email sent: Why do we tell actors to 'break a leg?' Because every play has a cast!"}]```
|
2350
2479
|
|
2351
|
-
```python
|
2352
|
-
# custom_plugin.py
|
2353
2480
|
|
2354
|
-
|
2481
|
+
2) Assistant
|
2355
2482
|
|
2483
|
+
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.
|
2356
2484
|
|
2357
|
-
|
2358
|
-
"""
|
2359
|
-
Handle dispatched events
|
2485
|
+
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.
|
2360
2486
|
|
2361
|
-
|
2362
|
-
"""
|
2363
|
-
name = event.name
|
2364
|
-
data = event.data
|
2365
|
-
ctx = event.ctx
|
2487
|
+
# Tools
|
2366
2488
|
|
2367
|
-
|
2368
|
-
self.some_method(data['value'])
|
2369
|
-
elif name == Event.CTX_BEGIN:
|
2370
|
-
self.some_other_method(ctx)
|
2371
|
-
else:
|
2372
|
-
# ...
|
2373
|
-
```
|
2489
|
+
PyGPT features several useful tools, including:
|
2374
2490
|
|
2375
|
-
|
2491
|
+
- Notepad
|
2492
|
+
- Painter
|
2493
|
+
- Calendar
|
2494
|
+
- Indexer
|
2495
|
+
- Media Player
|
2496
|
+
- Image viewer
|
2497
|
+
- Text editor
|
2498
|
+
- Transcribe audio/video files
|
2499
|
+
- Python Code Interpreter
|
2500
|
+
- HTML/JS Canvas (built-in HTML renderer)
|
2376
2501
|
|
2377
|
-
|
2502
|
+

|
2378
2503
|
|
2379
|
-
Syntax: `event name` - triggered on, `event data` *(data type)*:
|
2380
2504
|
|
2381
|
-
|
2505
|
+
## Notepad
|
2382
2506
|
|
2383
|
-
|
2507
|
+
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.
|
2384
2508
|
|
2385
|
-
|
2509
|
+

|
2386
2510
|
|
2387
|
-
|
2511
|
+
## Painter
|
2388
2512
|
|
2389
|
-
|
2513
|
+
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.
|
2390
2514
|
|
2391
|
-
|
2515
|
+

|
2392
2516
|
|
2393
|
-
|
2517
|
+
To capture the screenshot just click on the `Ask with screenshot` option in a tray-icon dropdown:
|
2394
2518
|
|
2395
|
-
|
2519
|
+

|
2396
2520
|
|
2397
|
-
|
2521
|
+
## Calendar
|
2398
2522
|
|
2399
|
-
|
2400
|
-
|
2401
|
-
- `CTX_AFTER` - after the context item is sent, `ctx`
|
2402
|
-
|
2403
|
-
- `CTX_BEFORE` - before the context item is sent, `ctx`
|
2404
|
-
|
2405
|
-
- `CTX_BEGIN` - when context item create, `ctx`
|
2406
|
-
|
2407
|
-
- `CTX_END` - when context item handling is finished, `ctx`
|
2408
|
-
|
2409
|
-
- `CTX_SELECT` - when context is selected on list, `data['value']` *(int, ctx meta ID)*
|
2410
|
-
|
2411
|
-
- `DISABLE` - when the plugin is disabled, `data['value']` *(string, plugin ID)*
|
2412
|
-
|
2413
|
-
- `ENABLE` - when the plugin is enabled, `data['value']` *(string, plugin ID)*
|
2523
|
+
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.
|
2414
2524
|
|
2415
|
-
-
|
2525
|
+

|
2416
2526
|
|
2417
|
-
- `INPUT_BEFORE` - upon receiving input from the textarea, `data['value']` *(string, text to be sent)*
|
2418
2527
|
|
2419
|
-
|
2528
|
+
## Indexer
|
2420
2529
|
|
2421
|
-
- `MODE_SELECT` - on mode select `data['value']` *(string, mode ID)*
|
2422
2530
|
|
2423
|
-
|
2531
|
+
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.
|
2424
2532
|
|
2425
|
-
|
2533
|
+

|
2426
2534
|
|
2427
|
-
|
2535
|
+
## Media Player
|
2428
2536
|
|
2429
|
-
- `PLUGIN_OPTION_GET` - on request for plugin option value `data['name'], data['value']` *(string, any, name of requested option, value)*
|
2430
2537
|
|
2431
|
-
|
2538
|
+
A simple video/audio player that allows you to play video files directly from within the app.
|
2432
2539
|
|
2433
|
-
- `PRE_PROMPT` - before preparing a system prompt, `data['value']` *(string, system prompt)*
|
2434
2540
|
|
2435
|
-
|
2541
|
+
## Image Viewer
|
2436
2542
|
|
2437
|
-
- `UI_ATTACHMENTS` - when the attachment upload elements are rendered, `data['value']` *(bool, show True/False)*
|
2438
2543
|
|
2439
|
-
|
2544
|
+
A simple image browser that lets you preview images directly within the app.
|
2440
2545
|
|
2441
|
-
- `USER_NAME` - when preparing a user's name, `data['value']` *(string, name of the user)*
|
2442
2546
|
|
2443
|
-
|
2547
|
+
## Text Editor
|
2444
2548
|
|
2445
2549
|
|
2446
|
-
|
2550
|
+
A simple text editor that enables you to edit text files directly within the app.
|
2447
2551
|
|
2448
|
-
```
|
2449
|
-
event.stop = True
|
2450
|
-
```
|
2451
2552
|
|
2452
|
-
|
2553
|
+
## Transcribe Audio/Video Files
|
2453
2554
|
|
2454
|
-
**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.
|
2455
2555
|
|
2456
|
-
|
2556
|
+
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.
|
2457
2557
|
|
2458
|
-
```~###~{"cmd": "send_email", "params": {"quote": "Why don't skeletons fight each other? They don't have the guts!"}}~###~```
|
2459
2558
|
|
2460
|
-
|
2559
|
+
## Python Code Interpreter
|
2461
2560
|
|
2462
|
-
**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).
|
2463
2561
|
|
2464
|
-
|
2562
|
+
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.
|
2465
2563
|
|
2466
|
-
|
2564
|
+
## HTML/JS Canvas
|
2467
2565
|
|
2468
|
-
|
2469
|
-
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:
|
2566
|
+
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.
|
2470
2567
|
|
2471
|
-
https://platform.openai.com/docs/guides/function-calling
|
2472
2568
|
|
2473
|
-
|
2569
|
+
# Token usage calculation
|
2474
2570
|
|
2571
|
+
## Input tokens
|
2475
2572
|
|
2476
|
-
|
2573
|
+
The application features a token calculator. It attempts to forecast the number of tokens that
|
2574
|
+
a particular query will consume and displays this estimate in real time. This gives you improved
|
2575
|
+
control over your token usage. The app provides detailed information about the tokens used for the user's prompt,
|
2576
|
+
the system prompt, any additional data, and those used within the context (the memory of previous entries).
|
2477
2577
|
|
2478
|
-
You can
|
2479
|
-
Note that - in Chat mode, they should be defined in `Presets`, and for Assistants, in the `Assistant` settings.
|
2578
|
+
**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.**
|
2480
2579
|
|
2481
|
-
|
2580
|
+

|
2482
2581
|
|
2483
|
-
|
2582
|
+
## Total tokens
|
2484
2583
|
|
2485
|
-
|
2584
|
+
After receiving a response from the model, the application displays the actual total number of tokens used for the query (received from the API).
|
2486
2585
|
|
2487
|
-
|
2586
|
+

|
2488
2587
|
|
2489
|
-
**Description:** `Sends a quote using email`
|
2490
2588
|
|
2491
|
-
|
2589
|
+
# Accessibility
|
2492
2590
|
|
2493
|
-
|
2494
|
-
{
|
2495
|
-
"type": "object",
|
2496
|
-
"properties": {
|
2497
|
-
"quote": {
|
2498
|
-
"type": "string",
|
2499
|
-
"description": "A generated funny quote"
|
2500
|
-
}
|
2501
|
-
},
|
2502
|
-
"required": [
|
2503
|
-
"quote"
|
2504
|
-
]
|
2505
|
-
}
|
2506
|
-
```
|
2591
|
+
Since version `2.2.8`, PyGPT has added beta support for disabled people and voice control. This may be very useful for blind people.
|
2507
2592
|
|
2508
|
-
|
2593
|
+
In the `Config / Accessibility` menu, you can turn on accessibility features such as:
|
2509
2594
|
|
2510
|
-
**Command name:** `send_email`
|
2511
2595
|
|
2512
|
-
|
2596
|
+
- activating voice control
|
2513
2597
|
|
2514
|
-
|
2598
|
+
- translating actions and events on the screen with audio speech
|
2515
2599
|
|
2516
|
-
|
2600
|
+
- setting up keyboard shortcuts for actions.
|
2517
2601
|
|
2518
|
-
At next, enable the `Execute commands` option and enable the plugin.
|
2519
2602
|
|
2520
|
-
|
2603
|
+
**Using voice control**
|
2521
2604
|
|
2522
|
-
|
2605
|
+
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.
|
2523
2606
|
|
2524
|
-
In
|
2607
|
+
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)`:
|
2525
2608
|
|
2526
|
-
|
2609
|
+
```bash
|
2610
|
+
Magic prefix for voice commands
|
2611
|
+
```
|
2527
2612
|
|
2528
|
-
|
2613
|
+
**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.
|
2529
2614
|
|
2530
|
-
As a result, response like this will be sent to the model:
|
2531
2615
|
|
2532
|
-
|
2616
|
+
**Enabling voice control globally**
|
2533
2617
|
|
2534
2618
|
|
2535
|
-
|
2619
|
+
Turn on the voice control option in `Config / Accessibility`:
|
2536
2620
|
|
2537
|
-
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.
|
2538
2621
|
|
2539
|
-
|
2622
|
+
```bash
|
2623
|
+
Enable voice control (using microphone)
|
2624
|
+
```
|
2540
2625
|
|
2541
|
-
|
2626
|
+
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.
|
2627
|
+
|
2628
|
+
|
2629
|
+
Voice command recognition works based on a model, so you don't have to worry about saying things perfectly.
|
2630
|
+
|
2631
|
+
|
2632
|
+
**Here's a list of commands you can ask for by voice:**
|
2633
|
+
|
2634
|
+
- Get the current application status
|
2635
|
+
- Exit the application
|
2636
|
+
- Enable audio output
|
2637
|
+
- Disable audio output
|
2638
|
+
- Enable audio input
|
2639
|
+
- Disable audio input
|
2640
|
+
- Add a memo to the calendar
|
2641
|
+
- Clear memos from calendar
|
2642
|
+
- Read the calendar memos
|
2643
|
+
- Enable the camera
|
2644
|
+
- Disable the camera
|
2645
|
+
- Capture image from camera
|
2646
|
+
- Create a new context
|
2647
|
+
- Go to the previous context
|
2648
|
+
- Go to the next context
|
2649
|
+
- Go to the latest context
|
2650
|
+
- Focus on the input
|
2651
|
+
- Send the input
|
2652
|
+
- Clear the input
|
2653
|
+
- Get current conversation info
|
2654
|
+
- Get available commands list
|
2655
|
+
- Stop executing current action
|
2656
|
+
- Clear the attachments
|
2657
|
+
- Read the last conversation entry
|
2658
|
+
- Read the whole conversation
|
2659
|
+
- Rename current context
|
2660
|
+
- Search for a conversation
|
2661
|
+
- Clear the search results
|
2662
|
+
- Send the message to input
|
2663
|
+
- Append message to current input without sending it
|
2664
|
+
- Switch to chat mode
|
2665
|
+
- Switch to chat with files (llama-index) mode
|
2666
|
+
- Switch to the next mode
|
2667
|
+
- Switch to the previous mode
|
2668
|
+
- Switch to the next model
|
2669
|
+
- Switch to the previous model
|
2670
|
+
- Add note to notepad
|
2671
|
+
- Clear notepad contents
|
2672
|
+
- Read current notepad contents
|
2673
|
+
- Switch to the next preset
|
2674
|
+
- Switch to the previous preset
|
2675
|
+
- Switch to the chat tab
|
2676
|
+
- Switch to the calendar tab
|
2677
|
+
- Switch to the draw (painter) tab
|
2678
|
+
- Switch to the files tab
|
2679
|
+
- Switch to the notepad tab
|
2680
|
+
- Switch to the next tab
|
2681
|
+
- Switch to the previous tab
|
2682
|
+
- Start listening for voice input
|
2683
|
+
- Stop listening for voice input
|
2684
|
+
- Toggle listening for voice input
|
2685
|
+
|
2686
|
+
More commands coming soon.
|
2687
|
+
|
2688
|
+
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.
|
2689
|
+
|
2690
|
+
|
2691
|
+
For convenience, you can enable a short sound to play when voice recording starts and stops. To do this, turn on the option:
|
2692
|
+
|
2693
|
+
|
2694
|
+
```bash
|
2695
|
+
Audio notify microphone listening start/stop
|
2696
|
+
```
|
2542
2697
|
|
2543
|
-
|
2698
|
+
To enable a sound notification when a voice command is recognized and command execution begins, turn on the option:
|
2544
2699
|
|
2545
|
-
The application features a token calculator. It attempts to forecast the number of tokens that
|
2546
|
-
a particular query will consume and displays this estimate in real time. This gives you improved
|
2547
|
-
control over your token usage. The app provides detailed information about the tokens used for the user's prompt,
|
2548
|
-
the system prompt, any additional data, and those used within the context (the memory of previous entries).
|
2549
2700
|
|
2550
|
-
|
2701
|
+
```bash
|
2702
|
+
Audio notify voice command execution
|
2703
|
+
```
|
2551
2704
|
|
2552
|
-
|
2705
|
+
For voice translation of on-screen events and information about completed commands via speech synthesis, you can turn on the option:
|
2553
2706
|
|
2554
|
-
|
2707
|
+
```bash
|
2708
|
+
Use voice synthesis to describe events on the screen.
|
2709
|
+
```
|
2555
2710
|
|
2556
|
-
|
2711
|
+

|
2557
2712
|
|
2558
|
-

|
2559
2713
|
|
2560
2714
|
# Configuration
|
2561
2715
|
|
@@ -2567,23 +2721,47 @@ The following basic options can be modified directly within the application:
|
|
2567
2721
|
Config -> Settings...
|
2568
2722
|
```
|
2569
2723
|
|
2570
|
-

|
2571
2725
|
|
2572
2726
|
**General**
|
2573
2727
|
|
2574
|
-
- `
|
2728
|
+
- `Minimize to tray on exit`: Minimize to tray icon on exit. Tray icon enabled is required for this option to work. Default: False.
|
2729
|
+
|
2730
|
+
- `Render engine`: chat output render engine: `WebEngine / Chromium` - for full HTML/CSS and `Legacy (markdown)` for legacy, simple markdown CSS output. Default: WebEngine / Chromium.
|
2731
|
+
|
2732
|
+
- `OpenGL hardware acceleration`: enables hardware acceleration in `WebEngine / Chromium` renderer. Default: False.
|
2733
|
+
|
2734
|
+
- `Application environment (os.environ)`: Additional environment vars to set on application start.
|
2735
|
+
|
2736
|
+
**API Keys**
|
2737
|
+
|
2738
|
+
- `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.
|
2575
2739
|
|
2576
2740
|
- `OpenAI ORGANIZATION KEY`: The organization's API key, which is optional for use within the application.
|
2577
2741
|
|
2578
2742
|
- `API Endpoint`: OpenAI API endpoint URL, default: https://api.openai.com/v1.
|
2579
2743
|
|
2580
|
-
- `
|
2744
|
+
- `Proxy address`: Proxy address to be used for connection; supports HTTP/SOCKS.
|
2581
2745
|
|
2582
|
-
- `
|
2746
|
+
- `Google API KEY`: Required for the Google API and Gemini models.
|
2747
|
+
|
2748
|
+
- `Anthropic API KEY`: Required for the Anthropic API and Claude models.
|
2749
|
+
|
2750
|
+
- `HuggingFace API KEY`: Required for the HuggingFace API.
|
2751
|
+
|
2752
|
+
- `OpenAI API version`: Azure OpenAI API version, e.g. 2023-07-01-preview
|
2753
|
+
|
2754
|
+
- `Azure OpenAI API endpoint`: Azure OpenAI API endpoint, https://<your-resource-name>.openai.azure.com/
|
2583
2755
|
|
2584
2756
|
**Layout**
|
2585
2757
|
|
2586
|
-
- `
|
2758
|
+
- `Zoom`: Adjusts the zoom in chat window (web render view). `WebEngine / Chromium` render mode only.
|
2759
|
+
|
2760
|
+
- `Style (chat)`: Chat style (Blocks, or ChatGPT-like, or ChatGPT-like Wide. `WebEngine / Chromium` render mode only.
|
2761
|
+
|
2762
|
+
- `Code syntax highlight`: Syntax highlight theme in code blocks. `WebEngine / Chromium` render mode only.
|
2763
|
+
|
2764
|
+
- `Font Size (chat window)`: Adjusts the font size in the chat window (plain-text) and notepads.
|
2587
2765
|
|
2588
2766
|
- `Font Size (input)`: Adjusts the font size in the input window.
|
2589
2767
|
|
@@ -2603,8 +2781,6 @@ Config -> Settings...
|
|
2603
2781
|
|
2604
2782
|
- `Use theme colors in chat window`: Use color theme in chat window, Default: True.
|
2605
2783
|
|
2606
|
-
- `Disable markdown formatting in output`: Enables plain-text display in output window, Default: False.
|
2607
|
-
|
2608
2784
|
**Files and attachments**
|
2609
2785
|
|
2610
2786
|
- `Store attachments in the workdir upload directory`: Enable to store a local copy of uploaded attachments for future use. Default: True
|
@@ -2613,12 +2789,30 @@ Config -> Settings...
|
|
2613
2789
|
|
2614
2790
|
- `Directory for file downloads`: Subdirectory for downloaded files, e.g. in Assistants mode, inside "data". Default: "download"
|
2615
2791
|
|
2792
|
+
- `Verbose mode`: Enabled verbose mode when using attachment as additional context.
|
2793
|
+
|
2794
|
+
- `Model for querying index`: Model to use for preparing query and querying the index when the RAG option is selected.
|
2795
|
+
|
2796
|
+
- `Model for attachment content summary`: Model to use when generating a summary for the content of a file when the Summary option is selected.
|
2797
|
+
|
2798
|
+
- `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.
|
2799
|
+
|
2800
|
+
- `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.
|
2801
|
+
|
2616
2802
|
**Context**
|
2617
2803
|
|
2618
2804
|
- `Context Threshold`: Sets the number of tokens reserved for the model to respond to the next prompt.
|
2619
2805
|
|
2620
2806
|
- `Limit of last contexts on list to show (0 = unlimited)`: Limit of the last contexts on list, default: 0 (unlimited)
|
2621
2807
|
|
2808
|
+
- `Show context groups on top of the context list`: Display groups on top, default: False
|
2809
|
+
|
2810
|
+
- `Show date separators on the context list`: Show date periods, default: True
|
2811
|
+
|
2812
|
+
- `Show date separators in groups on the context list`: Show date periods in groups, default: True
|
2813
|
+
|
2814
|
+
- `Show date separators in pinned on the context list`: Show date periods in pinned items, default: False
|
2815
|
+
|
2622
2816
|
- `Use Context`: Toggles the use of conversation context (memory of previous inputs).
|
2623
2817
|
|
2624
2818
|
- `Store History`: Toggles conversation history store.
|
@@ -2631,12 +2825,14 @@ Config -> Settings...
|
|
2631
2825
|
|
2632
2826
|
- `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.
|
2633
2827
|
|
2634
|
-
- `Show
|
2828
|
+
- `Show LlamaIndex sources`: If enabled, sources utilized will be displayed in the response (if available, it will not work in streamed chat).
|
2635
2829
|
|
2636
|
-
- `
|
2830
|
+
- `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.
|
2637
2831
|
|
2638
2832
|
- `Use extra context output`: If enabled, plain text output (if available) from command results will be displayed alongside the JSON output, Default: True.
|
2639
2833
|
|
2834
|
+
- `Convert lists to paragraphs`: If enabled, lists (ul, ol) will be converted to paragraphs (p), Default: True.
|
2835
|
+
|
2640
2836
|
- `Model used for auto-summary`: Model used for context auto-summary (default: *gpt-3.5-turbo-1106*).
|
2641
2837
|
|
2642
2838
|
**Models**
|
@@ -2657,6 +2853,8 @@ Config -> Settings...
|
|
2657
2853
|
|
2658
2854
|
**Prompts**
|
2659
2855
|
|
2856
|
+
- `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
|
2857
|
+
|
2660
2858
|
- `Command execute: instruction`: Prompt for appending command execution instructions. Placeholders: {schema}, {extra}
|
2661
2859
|
|
2662
2860
|
- `Command execute: extra footer (non-Assistant modes)`: Extra footer to append after commands JSON schema.
|
@@ -2667,9 +2865,17 @@ Config -> Settings...
|
|
2667
2865
|
|
2668
2866
|
- `Context: auto-summary (user message)`: User message for context auto-summary. Placeholders: {input}, {output}
|
2669
2867
|
|
2670
|
-
- `Agent:
|
2868
|
+
- `Agent: evaluation prompt in loop (LlamaIndex)`: Prompt used for evaluating the response in Agents (LlamaIndex) mode.
|
2869
|
+
|
2870
|
+
- `Agent: system instruction (Legacy)`: Prompt to instruct how to handle autonomous mode.
|
2871
|
+
|
2872
|
+
- `Agent: continue (Legacy)`: Prompt sent to automatically continue the conversation.
|
2671
2873
|
|
2672
|
-
- `Agent:
|
2874
|
+
- `Agent: continue (always, more steps) (Legacy)`: Prompt sent to always automatically continue the conversation (more reasoning - "Always continue..." option).
|
2875
|
+
|
2876
|
+
- `Agent: goal update (Legacy)`: Prompt to instruct how to update current goal status.
|
2877
|
+
|
2878
|
+
- `Experts: Master prompt`: Prompt to instruct how to handle experts.
|
2673
2879
|
|
2674
2880
|
- `DALL-E: image generate`: Prompt for generating prompts for DALL-E (if raw-mode is disabled).
|
2675
2881
|
|
@@ -2685,206 +2891,1052 @@ Config -> Settings...
|
|
2685
2891
|
|
2686
2892
|
**Vision**
|
2687
2893
|
|
2894
|
+
- `Vision: Camera Input Device`: Video capture camera index (index of the camera, default: 0).
|
2895
|
+
|
2688
2896
|
- `Vision: Camera capture width (px)`: Video capture resolution (width).
|
2689
2897
|
|
2690
|
-
- `Vision: Camera capture height (px)`: Video capture resolution (height).
|
2898
|
+
- `Vision: Camera capture height (px)`: Video capture resolution (height).
|
2899
|
+
|
2900
|
+
- `Vision: Image capture quality`: Video capture image JPEG quality (%).
|
2901
|
+
|
2902
|
+
**Audio**
|
2903
|
+
|
2904
|
+
- `Audio Input Device`: Selects the audio device for Microphone input.
|
2905
|
+
|
2906
|
+
- `Channels`: Input channels, default: 1
|
2907
|
+
|
2908
|
+
- `Sampling Rate`: Sampling rate, default: 44100
|
2909
|
+
|
2910
|
+
**Indexes (LlamaIndex)**
|
2911
|
+
|
2912
|
+
- `Indexes`: List of created indexes.
|
2913
|
+
|
2914
|
+
- `Vector Store`: Vector store to use (vector database provided by LlamaIndex).
|
2915
|
+
|
2916
|
+
- `Vector Store (**kwargs)`: Keyword arguments for vector store provider (api_key, index_name, etc.).
|
2917
|
+
|
2918
|
+
- `Embeddings provider`: Embeddings provider.
|
2919
|
+
|
2920
|
+
- `Embeddings provider (ENV)`: ENV vars to embeddings provider (API keys, etc.).
|
2921
|
+
|
2922
|
+
- `Embeddings provider (**kwargs)`: Keyword arguments for embeddings provider (model name, etc.).
|
2923
|
+
|
2924
|
+
- `RPM limit for embeddings API calls`: Specify the limit of maximum requests per minute (RPM), 0 = no limit.
|
2925
|
+
|
2926
|
+
- `Recursive directory indexing`: Enables recursive directory indexing, default is False.
|
2927
|
+
|
2928
|
+
- `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.
|
2929
|
+
|
2930
|
+
- `Excluded file extensions`: File extensions to exclude if no data loader for this extension, separated by comma.
|
2931
|
+
|
2932
|
+
- `Force exclude files`: If enabled, the exclusion list will be applied even when the data loader for the extension is active. Default: False.
|
2933
|
+
|
2934
|
+
- `Stop indexing on error`: If enabled, indexing will stop whenever an error occurs Default: True.
|
2935
|
+
|
2936
|
+
- `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.
|
2937
|
+
|
2938
|
+
- `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}
|
2939
|
+
|
2940
|
+
- `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.
|
2941
|
+
|
2942
|
+
- `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.
|
2943
|
+
|
2944
|
+
- `Auto-index DB in real time`: Enables conversation context auto-indexing in defined modes.
|
2945
|
+
|
2946
|
+
- `ID of index for auto-indexing`: Index to use if auto-indexing of conversation context is enabled.
|
2947
|
+
|
2948
|
+
- `Enable auto-index in modes`: List of modes with enabled context auto-index, separated by comma.
|
2949
|
+
|
2950
|
+
- `DB (ALL), DB (UPDATE), FILES (ALL)`: Index the data – batch indexing is available here.
|
2951
|
+
|
2952
|
+
- `Chat mode`: chat mode for use in query engine, default: context
|
2953
|
+
|
2954
|
+
**Agent and experts**
|
2955
|
+
|
2956
|
+
**General**
|
2957
|
+
|
2958
|
+
- `Display a tray notification when the goal is achieved.`: If enabled, a notification will be displayed after goal achieved / finished run.
|
2959
|
+
|
2960
|
+
**LlamaIndex Agents**
|
2961
|
+
|
2962
|
+
- `Max steps (per iteration)` - Max steps is one iteration before goal achieved
|
2963
|
+
|
2964
|
+
- `Max evaluation steps in loop` - Maximum evaluation steps to achieve the final result, set 0 to infinity
|
2965
|
+
|
2966
|
+
- `Append and compare previous evaluation prompt in next evaluation` - If enabled, previous improvement prompt will be checked in next eval in loop, default: False
|
2967
|
+
|
2968
|
+
- `Verbose` - enables verbose mode.
|
2969
|
+
|
2970
|
+
**Legacy**
|
2971
|
+
|
2972
|
+
- `Sub-mode for agents`: Sub-mode to use in Agent mode (chat, completion, langchain, llama_index, etc.). Default: chat.
|
2973
|
+
|
2974
|
+
- `Sub-mode for experts`: Sub-mode to use in Experts mode (chat, completion, langchain, llama_index, etc.). Default: chat.
|
2975
|
+
|
2976
|
+
- `Index to use`: Only if sub-mode is llama_index (Chat with Files), choose the index to use in both Agent and Expert modes.
|
2977
|
+
|
2978
|
+
**Accessibility**
|
2979
|
+
|
2980
|
+
- `Enable voice control (using microphone)`: enables voice control (using microphone and defined commands).
|
2981
|
+
|
2982
|
+
- `Model`: model used for voice command recognition.
|
2983
|
+
|
2984
|
+
- `Use voice synthesis to describe events on the screen.`: enables audio description of on-screen events.
|
2985
|
+
|
2986
|
+
- `Use audio output cache`: If enabled, all static audio outputs will be cached on the disk instead of being generated every time. Default: True.
|
2987
|
+
|
2988
|
+
- `Audio notify microphone listening start/stop`: enables audio "tick" notify when microphone listening started/ended.
|
2989
|
+
|
2990
|
+
- `Audio notify voice command execution`: enables audio "tick" notify when voice command is executed.
|
2991
|
+
|
2992
|
+
- `Control shortcut keys`: configuration for keyboard shortcuts for a specified actions.
|
2993
|
+
|
2994
|
+
- `Blacklist for voice synthesis events describe (ignored events)`: list of muted events for 'Use voice synthesis to describe event' option.
|
2995
|
+
|
2996
|
+
- `Voice control actions blacklist`: Disable actions in voice control; add actions to the blacklist to prevent execution through voice commands.
|
2997
|
+
|
2998
|
+
**Updates**
|
2999
|
+
|
3000
|
+
- `Check for updates on start`: Enables checking for updates on start. Default: True.
|
3001
|
+
|
3002
|
+
- `Check for updates in background`: Enables checking for updates in background (checking every 5 minutes). Default: True.
|
3003
|
+
|
3004
|
+
**Developer**
|
3005
|
+
|
3006
|
+
- `Show debug menu`: Enables debug (developer) menu.
|
3007
|
+
|
3008
|
+
- `Log and debug context`: Enables logging of context input/output.
|
3009
|
+
|
3010
|
+
- `Log and debug events`: Enables logging of event dispatch.
|
3011
|
+
|
3012
|
+
- `Log plugin usage to console`: Enables logging of plugin usage to console.
|
3013
|
+
|
3014
|
+
- `Log DALL-E usage to console`: Enables logging of DALL-E usage to console.
|
3015
|
+
|
3016
|
+
- `Log LlamaIndex usage to console`: Enables logging of LlamaIndex usage to console.
|
3017
|
+
|
3018
|
+
- `Log Assistants usage to console`: Enables logging of Assistants API usage to console.
|
3019
|
+
|
3020
|
+
- `Log level`: toggle log level (ERROR|WARNING|INFO|DEBUG)
|
3021
|
+
|
3022
|
+
|
3023
|
+
## JSON files
|
3024
|
+
|
3025
|
+
The configuration is stored in JSON files for easy manual modification outside of the application.
|
3026
|
+
These configuration files are located in the user's work directory within the following subdirectory:
|
3027
|
+
|
3028
|
+
``` ini
|
3029
|
+
{HOME_DIR}/.config/pygpt-net/
|
3030
|
+
```
|
3031
|
+
|
3032
|
+
## Manual configuration
|
3033
|
+
|
3034
|
+
You can manually edit the configuration files in this directory (this is your work directory):
|
3035
|
+
|
3036
|
+
``` ini
|
3037
|
+
{HOME_DIR}/.config/pygpt-net/
|
3038
|
+
```
|
3039
|
+
|
3040
|
+
- `assistants.json` - stores the list of assistants.
|
3041
|
+
- `attachments.json` - stores the list of current attachments.
|
3042
|
+
- `config.json` - stores the main configuration settings.
|
3043
|
+
- `models.json` - stores models configurations.
|
3044
|
+
- `cache` - a directory for audio cache.
|
3045
|
+
- `capture` - a directory for captured images from camera and screenshots
|
3046
|
+
- `css` - a directory for CSS stylesheets (user override)
|
3047
|
+
- `history` - a directory for context history in `.txt` format.
|
3048
|
+
- `idx` - `LlamaIndex` indexes
|
3049
|
+
- `img` - a directory for images generated with `DALL-E 3` and `DALL-E 2`, saved as `.png` files.
|
3050
|
+
- `locale` - a directory for locales (user override)
|
3051
|
+
- `data` - a directory for data files and files downloaded/generated by GPT.
|
3052
|
+
- `presets` - a directory for presets stored as `.json` files.
|
3053
|
+
- `upload` - a directory for local copies of attachments coming from outside the workdir
|
3054
|
+
- `db.sqlite` - a database with contexts, notepads and indexes data records
|
3055
|
+
- `app.log` - a file with error and debug log
|
3056
|
+
|
3057
|
+
---
|
3058
|
+
|
3059
|
+
## Setting the Working Directory Using Command Line Arguments
|
3060
|
+
|
3061
|
+
To set the current working directory using a command-line argument, use:
|
3062
|
+
|
3063
|
+
```
|
3064
|
+
python3 ./run.py --workdir="/path/to/workdir"
|
3065
|
+
```
|
3066
|
+
or, for the binary version:
|
3067
|
+
|
3068
|
+
```
|
3069
|
+
pygpt.exe --workdir="/path/to/workdir"
|
3070
|
+
```
|
3071
|
+
|
3072
|
+
|
3073
|
+
## Translations / Locale
|
3074
|
+
|
3075
|
+
Locale `.ini` files are located in the app directory:
|
3076
|
+
|
3077
|
+
``` ini
|
3078
|
+
./data/locale
|
3079
|
+
```
|
3080
|
+
|
3081
|
+
This directory is automatically scanned when the application launches. To add a new translation,
|
3082
|
+
create and save the file with the appropriate name, for example:
|
3083
|
+
|
3084
|
+
``` ini
|
3085
|
+
locale.es.ini
|
3086
|
+
```
|
3087
|
+
|
3088
|
+
This will add Spanish as a selectable language in the application's language menu.
|
3089
|
+
|
3090
|
+
**Overwriting CSS and locales with Your Own Files:**
|
3091
|
+
|
3092
|
+
You can also overwrite files in the `locale` and `css` app directories with your own files in the user directory.
|
3093
|
+
This allows you to overwrite language files or CSS styles in a very simple way - by just creating files in your working directory.
|
3094
|
+
|
3095
|
+
|
3096
|
+
``` ini
|
3097
|
+
{HOME_DIR}/.config/pygpt-net/
|
3098
|
+
```
|
3099
|
+
|
3100
|
+
- `locale` - a directory for locales in `.ini` format.
|
3101
|
+
- `css` - a directory for CSS styles in `.css` format.
|
3102
|
+
|
3103
|
+
**Adding Your Own Fonts**
|
3104
|
+
|
3105
|
+
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`.
|
3106
|
+
You can see the list of loaded fonts in `Debug / Config`.
|
3107
|
+
|
3108
|
+
**Example:**
|
3109
|
+
|
3110
|
+
```
|
3111
|
+
%workdir%
|
3112
|
+
|_css
|
3113
|
+
|_data
|
3114
|
+
|_fonts
|
3115
|
+
|_MyFont
|
3116
|
+
|_MyFont-Regular.ttf
|
3117
|
+
|_MyFont-Bold.ttf
|
3118
|
+
|...
|
3119
|
+
```
|
3120
|
+
|
3121
|
+
```css
|
3122
|
+
pre {{
|
3123
|
+
font-family: 'MyFont';
|
3124
|
+
}}
|
3125
|
+
```
|
3126
|
+
|
3127
|
+
## Data Loaders
|
3128
|
+
|
3129
|
+
**Configuring data loaders**
|
3130
|
+
|
3131
|
+
In the `Settings -> LlamaIndex -> Data loaders` section you can define the additional keyword arguments to pass into data loader instance.
|
3132
|
+
|
3133
|
+
In most cases, an internal LlamaIndex loaders are used internally.
|
3134
|
+
You can check these base loaders e.g. here:
|
3135
|
+
|
3136
|
+
File: https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/readers/llama-index-readers-file/llama_index/readers/file
|
3137
|
+
|
3138
|
+
Web: https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/readers/llama-index-readers-web
|
3139
|
+
|
3140
|
+
**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.
|
3141
|
+
|
3142
|
+
Allowed additional keyword arguments for built-in data loaders (files):
|
3143
|
+
|
3144
|
+
**CSV Files** (file_csv)
|
3145
|
+
|
3146
|
+
- `concat_rows` - bool, default: `True`
|
3147
|
+
- `encoding` - str, default: `utf-8`
|
3148
|
+
|
3149
|
+
**HTML Files** (file_html)
|
3150
|
+
|
3151
|
+
- `tag` - str, default: `section`
|
3152
|
+
- `ignore_no_id` - bool, default: `False`
|
3153
|
+
|
3154
|
+
**Image (vision)** (file_image_vision)
|
3155
|
+
|
3156
|
+
This loader can operate in two modes: local model and API.
|
3157
|
+
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.
|
3158
|
+
If the API mode (default) is selected, then the OpenAI API and the standard vision model will be used.
|
3159
|
+
|
3160
|
+
**Note:** Usage of API mode consumes additional tokens in OpenAI API (for `GPT-4 Vision` model)!
|
3161
|
+
|
3162
|
+
Local mode requires `torch`, `transformers`, `sentencepiece` and `Pillow` to be installed and uses the `Salesforce/blip2-opt-2.7b` model to describing images.
|
3163
|
+
|
3164
|
+
- `keep_image` - bool, default: `False`
|
3165
|
+
- `local_prompt` - str, default: `Question: describe what you see in this image. Answer:`
|
3166
|
+
- `api_prompt` - str, default: `Describe what you see in this image` - Prompt to use in API
|
3167
|
+
- `api_model` - str, default: `gpt-4-vision-preview` - Model to use in API
|
3168
|
+
- `api_tokens` - int, default: `1000` - Max output tokens in API
|
3169
|
+
|
3170
|
+
**IPYNB Notebook files** (file_ipynb)
|
3171
|
+
|
3172
|
+
- `parser_config` - dict, default: `None`
|
3173
|
+
- `concatenate` - bool, default: `False`
|
3174
|
+
|
3175
|
+
**Markdown files** (file_md)
|
3176
|
+
|
3177
|
+
- `remove_hyperlinks` - bool, default: `True`
|
3178
|
+
- `remove_images` - bool, default: `True`
|
3179
|
+
|
3180
|
+
**PDF documents** (file_pdf)
|
3181
|
+
|
3182
|
+
- `return_full_document` - bool, default: `False`
|
3183
|
+
|
3184
|
+
**Video/Audio** (file_video_audio)
|
3185
|
+
|
3186
|
+
This loader can operate in two modes: local model and API.
|
3187
|
+
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.
|
3188
|
+
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.
|
3189
|
+
|
3190
|
+
**Note:** Usage of Whisper via API consumes additional tokens in OpenAI API (for `Whisper` model)!
|
3191
|
+
|
3192
|
+
Local mode requires `torch` and `openai-whisper` to be installed and uses the `Whisper` model locally to transcribing video and audio.
|
3193
|
+
|
3194
|
+
- `model_version` - str, default: `base` - Whisper model to use, available models: https://github.com/openai/whisper
|
3195
|
+
|
3196
|
+
**XML files** (file_xml)
|
3197
|
+
|
3198
|
+
- `tree_level_split` - int, default: `0`
|
3199
|
+
|
3200
|
+
Allowed additional keyword arguments for built-in data loaders (Web and external content):
|
3201
|
+
|
3202
|
+
**Bitbucket** (web_bitbucket)
|
3203
|
+
|
3204
|
+
- `username` - str, default: `None`
|
3205
|
+
- `api_key` - str, default: `None`
|
3206
|
+
- `extensions_to_skip` - list, default: `[]`
|
3207
|
+
|
3208
|
+
**ChatGPT Retrieval** (web_chatgpt_retrieval)
|
3209
|
+
|
3210
|
+
- `endpoint_url` - str, default: `None`
|
3211
|
+
- `bearer_token` - str, default: `None`
|
3212
|
+
- `retries` - int, default: `None`
|
3213
|
+
- `batch_size` - int, default: `100`
|
3214
|
+
|
3215
|
+
**Google Calendar** (web_google_calendar)
|
3216
|
+
|
3217
|
+
- `credentials_path` - str, default: `credentials.json`
|
3218
|
+
- `token_path` - str, default: `token.json`
|
3219
|
+
|
3220
|
+
**Google Docs** (web_google_docs)
|
3221
|
+
|
3222
|
+
- `credentials_path` - str, default: `credentials.json`
|
3223
|
+
- `token_path` - str, default: `token.json`
|
3224
|
+
|
3225
|
+
**Google Drive** (web_google_drive)
|
3226
|
+
|
3227
|
+
- `credentials_path` - str, default: `credentials.json`
|
3228
|
+
- `token_path` - str, default: `token.json`
|
3229
|
+
- `pydrive_creds_path` - str, default: `creds.txt`
|
3230
|
+
- `client_config` - dict, default: `{}`
|
3231
|
+
|
3232
|
+
**Google Gmail** (web_google_gmail)
|
3233
|
+
|
3234
|
+
- `credentials_path` - str, default: `credentials.json`
|
3235
|
+
- `token_path` - str, default: `token.json`
|
3236
|
+
- `use_iterative_parser` - bool, default: `False`
|
3237
|
+
- `max_results` - int, default: `10`
|
3238
|
+
- `results_per_page` - int, default: `None`
|
3239
|
+
|
3240
|
+
**Google Keep** (web_google_keep)
|
3241
|
+
|
3242
|
+
- `credentials_path` - str, default: `keep_credentials.json`
|
3243
|
+
|
3244
|
+
**Google Sheets** (web_google_sheets)
|
3245
|
+
|
3246
|
+
- `credentials_path` - str, default: `credentials.json`
|
3247
|
+
- `token_path` - str, default: `token.json`
|
3248
|
+
|
3249
|
+
**GitHub Issues** (web_github_issues)
|
3250
|
+
|
3251
|
+
- `token` - str, default: `None`
|
3252
|
+
- `verbose` - bool, default: `False`
|
3253
|
+
|
3254
|
+
**GitHub Repository** (web_github_repository)
|
3255
|
+
|
3256
|
+
- `token` - str, default: `None`
|
3257
|
+
- `verbose` - bool, default: `False`
|
3258
|
+
- `concurrent_requests` - int, default: `5`
|
3259
|
+
- `timeout` - int, default: `5`
|
3260
|
+
- `retries` - int, default: `0`
|
3261
|
+
- `filter_dirs_include` - list, default: `None`
|
3262
|
+
- `filter_dirs_exclude` - list, default: `None`
|
3263
|
+
- `filter_file_ext_include` - list, default: `None`
|
3264
|
+
- `filter_file_ext_exclude` - list, default: `None`
|
3265
|
+
|
3266
|
+
**Microsoft OneDrive** (web_microsoft_onedrive)
|
3267
|
+
|
3268
|
+
- `client_id` - str, default: `None`
|
3269
|
+
- `client_secret` - str, default: `None`
|
3270
|
+
- `tenant_id` - str, default: `consumers`
|
3271
|
+
|
3272
|
+
**Sitemap (XML)** (web_sitemap)
|
3273
|
+
|
3274
|
+
- `html_to_text` - bool, default: `False`
|
3275
|
+
- `limit` - int, default: `10`
|
3276
|
+
|
3277
|
+
**SQL Database** (web_database)
|
3278
|
+
|
3279
|
+
- `uri` - str, default: `None`
|
3280
|
+
|
3281
|
+
You can provide a single URI in the form of: `{scheme}://{user}:{password}@{host}:{port}/{dbname}`, or you can provide each field manually:
|
3282
|
+
|
3283
|
+
- `scheme` - str, default: `None`
|
3284
|
+
- `host` - str, default: `None`
|
3285
|
+
- `port` - str, default: `None`
|
3286
|
+
- `user` - str, default: `None`
|
3287
|
+
- `password` - str, default: `None`
|
3288
|
+
- `dbname` - str, default: `None`
|
3289
|
+
|
3290
|
+
**Twitter/X posts** (web_twitter)
|
3291
|
+
|
3292
|
+
- `bearer_token` - str, default: `None`
|
3293
|
+
- `num_tweets` - int, default: `100`
|
3294
|
+
|
3295
|
+
## Vector stores
|
3296
|
+
|
3297
|
+
**Available vector stores** (provided by `LlamaIndex`):
|
3298
|
+
|
3299
|
+
```
|
3300
|
+
- ChromaVectorStore
|
3301
|
+
- ElasticsearchStore
|
3302
|
+
- PinecodeVectorStore
|
3303
|
+
- RedisVectorStore
|
3304
|
+
- SimpleVectorStore
|
3305
|
+
```
|
3306
|
+
|
3307
|
+
You can configure selected vector store by providing config options like `api_key`, etc. in `Settings -> LlamaIndex` window.
|
3308
|
+
|
3309
|
+
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:
|
3310
|
+
|
3311
|
+
https://docs.llamaindex.ai/en/stable/api_reference/storage/vector_store.html
|
3312
|
+
|
3313
|
+
Which keyword arguments are passed to providers?
|
3314
|
+
|
3315
|
+
For `ChromaVectorStore` and `SimpleVectorStore` all arguments are set by PyGPT and passed internally (you do not need to configure anything).
|
3316
|
+
|
3317
|
+
For other providers you can provide these arguments:
|
3318
|
+
|
3319
|
+
**ElasticsearchStore**
|
3320
|
+
|
3321
|
+
Keyword arguments for ElasticsearchStore(`**kwargs`):
|
3322
|
+
|
3323
|
+
- `index_name` (default: current index ID, already set, not required)
|
3324
|
+
- any other keyword arguments provided on list
|
3325
|
+
|
3326
|
+
**PinecodeVectorStore**
|
3327
|
+
|
3328
|
+
Keyword arguments for Pinecone(`**kwargs`):
|
3329
|
+
|
3330
|
+
- `api_key`
|
3331
|
+
- index_name (default: current index ID, already set, not required)
|
3332
|
+
|
3333
|
+
**RedisVectorStore**
|
3334
|
+
|
3335
|
+
Keyword arguments for RedisVectorStore(`**kwargs`):
|
3336
|
+
|
3337
|
+
- `index_name` (default: current index ID, already set, not required)
|
3338
|
+
- any other keyword arguments provided on list
|
3339
|
+
|
3340
|
+
You can extend list of available providers by creating custom provider and registering it on app launch.
|
3341
|
+
|
3342
|
+
By default, you are using chat-based mode when using `Chat with Files`.
|
3343
|
+
If you want to only query index (without chat) you can enable `Query index only (without chat)` option.
|
3344
|
+
|
3345
|
+
### Adding custom vector stores and data loaders
|
3346
|
+
|
3347
|
+
You can create a custom vector store provider or data loader for your data and develop a custom launcher for the application.
|
3348
|
+
|
3349
|
+
See the section `Extending PyGPT / Adding a custom Vector Store provider` for more details.
|
3350
|
+
|
3351
|
+
# Updates
|
3352
|
+
|
3353
|
+
### Updating PyGPT
|
3354
|
+
|
3355
|
+
**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.
|
3356
|
+
|
3357
|
+
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.
|
3358
|
+
|
3359
|
+
# Debugging and Logging
|
3360
|
+
|
3361
|
+
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.
|
3362
|
+
|
3363
|
+
**Logging levels**:
|
3364
|
+
|
3365
|
+
By default, all errors and exceptions are logged to the file:
|
3366
|
+
|
3367
|
+
```ini
|
3368
|
+
{HOME_DIR}/.config/pygpt-net/app.log
|
3369
|
+
```
|
3370
|
+
|
3371
|
+
To increase the logging level (`ERROR` level is default), run the application with `--debug` argument:
|
3372
|
+
|
3373
|
+
``` ini
|
3374
|
+
python3 run.py --debug=1
|
3375
|
+
```
|
3376
|
+
|
3377
|
+
or
|
3378
|
+
|
3379
|
+
```ini
|
3380
|
+
python3 run.py --debug=2
|
3381
|
+
```
|
3382
|
+
|
3383
|
+
The value `1` enables the `INFO`logging level.
|
3384
|
+
|
3385
|
+
The value `2` enables the `DEBUG` logging level (most information).
|
3386
|
+
|
3387
|
+
**Compatibility (legacy) mode**
|
3388
|
+
|
3389
|
+
If you have a problems with `WebEngine / Chromium` renderer you can force the legacy mode by launching the app with command line arguments:
|
3390
|
+
|
3391
|
+
``` ini
|
3392
|
+
python3 run.py --legacy=1
|
3393
|
+
```
|
3394
|
+
|
3395
|
+
and to force disable OpenGL hardware acceleration:
|
3396
|
+
|
3397
|
+
``` ini
|
3398
|
+
python3 run.py --disable-gpu=1
|
3399
|
+
```
|
3400
|
+
|
3401
|
+
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:
|
3402
|
+
|
3403
|
+
``` json
|
3404
|
+
"render.engine": "legacy",
|
3405
|
+
"render.open_gl": false,
|
3406
|
+
```
|
3407
|
+
|
3408
|
+
# Extending PyGPT
|
3409
|
+
|
3410
|
+
## Quick start
|
3411
|
+
|
3412
|
+
You can create your own extensions for **PyGPT** at any time.
|
3413
|
+
|
3414
|
+
PyGPT can be extended with:
|
3415
|
+
|
3416
|
+
- custom models
|
3417
|
+
|
3418
|
+
- custom plugins
|
3419
|
+
|
3420
|
+
- custom LLM wrappers
|
3421
|
+
|
3422
|
+
- custom vector store providers
|
3423
|
+
|
3424
|
+
- custom data loaders
|
3425
|
+
|
3426
|
+
- custom audio input providers
|
3427
|
+
|
3428
|
+
- custom audio output providers
|
3429
|
+
|
3430
|
+
- custom web search engine providers
|
3431
|
+
|
3432
|
+
**Examples (tutorial files)**
|
3433
|
+
|
3434
|
+
See the `examples` directory in this repository with examples of custom launcher, plugin, vector store, LLM (LangChain and LlamaIndex) provider and data loader:
|
3435
|
+
|
3436
|
+
- `examples/custom_launcher.py`
|
3437
|
+
|
3438
|
+
- `examples/example_audio_input.py`
|
3439
|
+
|
3440
|
+
- `examples/example_audio_output.py`
|
3441
|
+
|
3442
|
+
- `examples/example_data_loader.py`
|
3443
|
+
|
3444
|
+
- `examples/example_llm.py`
|
3445
|
+
|
3446
|
+
- `examples/example_plugin.py`
|
3447
|
+
|
3448
|
+
- `examples/example_vector_store.py`
|
3449
|
+
|
3450
|
+
- `examples/example_web_search.py`
|
3451
|
+
|
3452
|
+
These example files can be used as a starting point for creating your own extensions for **PyGPT**.
|
3453
|
+
|
3454
|
+
Extending PyGPT with custom plugins, LLMs wrappers and vector stores:
|
3455
|
+
|
3456
|
+
- You can pass custom plugin instances, LLMs wrappers and vector store providers to the launcher.
|
3457
|
+
|
3458
|
+
- This is useful if you want to extend PyGPT with your own plugins, vectors storage and LLMs.
|
3459
|
+
|
3460
|
+
To register custom plugins:
|
3461
|
+
|
3462
|
+
- Pass a list with the plugin instances as `plugins` keyword argument.
|
3463
|
+
|
3464
|
+
To register custom LLMs wrappers:
|
3465
|
+
|
3466
|
+
- Pass a list with the LLMs wrappers instances as `llms` keyword argument.
|
3467
|
+
|
3468
|
+
To register custom vector store providers:
|
3469
|
+
|
3470
|
+
- Pass a list with the vector store provider instances as `vector_stores` keyword argument.
|
3471
|
+
|
3472
|
+
To register custom data loaders:
|
3473
|
+
|
3474
|
+
- Pass a list with the data loader instances as `loaders` keyword argument.
|
3475
|
+
|
3476
|
+
To register custom audio input providers:
|
3477
|
+
|
3478
|
+
- Pass a list with the audio input provider instances as `audio_input` keyword argument.
|
3479
|
+
|
3480
|
+
To register custom audio output providers:
|
3481
|
+
|
3482
|
+
- Pass a list with the audio output provider instances as `audio_output` keyword argument.
|
3483
|
+
|
3484
|
+
To register custom web providers:
|
3485
|
+
|
3486
|
+
- Pass a list with the web provider instances as `web` keyword argument.
|
3487
|
+
|
3488
|
+
## Adding a custom model
|
3489
|
+
|
3490
|
+
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.
|
3491
|
+
|
3492
|
+
Example of models configuration - `%WORKDIR%/models.json`:
|
3493
|
+
|
3494
|
+
```
|
3495
|
+
"gpt-3.5-turbo": {
|
3496
|
+
"id": "gpt-3.5-turbo",
|
3497
|
+
"name": "gpt-3.5-turbo",
|
3498
|
+
"mode": [
|
3499
|
+
"chat",
|
3500
|
+
"assistant",
|
3501
|
+
"langchain",
|
3502
|
+
"llama_index"
|
3503
|
+
],
|
3504
|
+
"langchain": {
|
3505
|
+
"provider": "openai",
|
3506
|
+
"mode": [
|
3507
|
+
"chat"
|
3508
|
+
],
|
3509
|
+
"args": [
|
3510
|
+
{
|
3511
|
+
"name": "model_name",
|
3512
|
+
"value": "gpt-3.5-turbo",
|
3513
|
+
"type": "str"
|
3514
|
+
}
|
3515
|
+
],
|
3516
|
+
"env": [
|
3517
|
+
{
|
3518
|
+
"name": "OPENAI_API_KEY",
|
3519
|
+
"value": "{api_key}"
|
3520
|
+
}
|
3521
|
+
]
|
3522
|
+
},
|
3523
|
+
"llama_index": {
|
3524
|
+
"provider": "openai",
|
3525
|
+
"mode": [
|
3526
|
+
"chat"
|
3527
|
+
],
|
3528
|
+
"args": [
|
3529
|
+
{
|
3530
|
+
"name": "model",
|
3531
|
+
"value": "gpt-3.5-turbo",
|
3532
|
+
"type": "str"
|
3533
|
+
}
|
3534
|
+
],
|
3535
|
+
"env": [
|
3536
|
+
{
|
3537
|
+
"name": "OPENAI_API_KEY",
|
3538
|
+
"value": "{api_key}"
|
3539
|
+
}
|
3540
|
+
]
|
3541
|
+
},
|
3542
|
+
"ctx": 4096,
|
3543
|
+
"tokens": 4096,
|
3544
|
+
"default": false
|
3545
|
+
},
|
3546
|
+
```
|
3547
|
+
|
3548
|
+
There is built-in support for those LLM providers:
|
3549
|
+
|
3550
|
+
```
|
3551
|
+
- `OpenAI` (openai)
|
3552
|
+
- `Azure OpenAI` (azure_openai)
|
3553
|
+
- `Google` (google)
|
3554
|
+
- `HuggingFace API` (huggingface_api)
|
3555
|
+
- `Anthropic` (anthropic)
|
3556
|
+
- `Ollama` (ollama)
|
3557
|
+
```
|
3558
|
+
|
3559
|
+
**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.
|
3560
|
+
|
3561
|
+
## Adding a custom plugin
|
3562
|
+
|
3563
|
+
### Creating Your Own Plugin
|
3564
|
+
|
3565
|
+
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.
|
3566
|
+
|
3567
|
+
**Examples (tutorial files)**
|
3568
|
+
|
3569
|
+
See the example plugin in this `examples` directory:
|
3570
|
+
|
3571
|
+
- `examples/example_plugin.py`
|
3572
|
+
|
3573
|
+
These example file can be used as a starting point for creating your own plugin for **PyGPT**.
|
3574
|
+
|
3575
|
+
To register a custom plugin:
|
3576
|
+
|
3577
|
+
- Create a custom launcher for the app.
|
3578
|
+
|
3579
|
+
- Pass a list with the custom plugin instances as `plugins` keyword argument.
|
3580
|
+
|
3581
|
+
**Example of a custom launcher:**
|
3582
|
+
|
3583
|
+
|
3584
|
+
```python
|
3585
|
+
# custom_launcher.py
|
3586
|
+
|
3587
|
+
from pygpt_net.app import run
|
3588
|
+
from plugins import CustomPlugin, OtherCustomPlugin
|
3589
|
+
from llms import CustomLLM
|
3590
|
+
from vector_stores import CustomVectorStore
|
3591
|
+
|
3592
|
+
plugins = [
|
3593
|
+
CustomPlugin(),
|
3594
|
+
OtherCustomPlugin(),
|
3595
|
+
]
|
3596
|
+
llms = [
|
3597
|
+
CustomLLM(),
|
3598
|
+
]
|
3599
|
+
vector_stores = [
|
3600
|
+
CustomVectorStore(),
|
3601
|
+
]
|
3602
|
+
|
3603
|
+
run(
|
3604
|
+
plugins=plugins,
|
3605
|
+
llms=llms,
|
3606
|
+
vector_stores=vector_stores,
|
3607
|
+
)
|
3608
|
+
```
|
3609
|
+
|
3610
|
+
### Handling events
|
3611
|
+
|
3612
|
+
In the plugin, you can receive and modify dispatched events.
|
3613
|
+
To do this, create a method named `handle(self, event, *args, **kwargs)` and handle the received events like here:
|
3614
|
+
|
3615
|
+
```python
|
3616
|
+
# custom_plugin.py
|
3617
|
+
|
3618
|
+
from pygpt_net.core.events import Event
|
3619
|
+
|
3620
|
+
|
3621
|
+
def handle(self, event: Event, *args, **kwargs):
|
3622
|
+
"""
|
3623
|
+
Handle dispatched events
|
3624
|
+
|
3625
|
+
:param event: event object
|
3626
|
+
"""
|
3627
|
+
name = event.name
|
3628
|
+
data = event.data
|
3629
|
+
ctx = event.ctx
|
3630
|
+
|
3631
|
+
if name == Event.INPUT_BEFORE:
|
3632
|
+
self.some_method(data['value'])
|
3633
|
+
elif name == Event.CTX_BEGIN:
|
3634
|
+
self.some_other_method(ctx)
|
3635
|
+
else:
|
3636
|
+
# ...
|
3637
|
+
```
|
3638
|
+
|
3639
|
+
### List of Events
|
3640
|
+
|
3641
|
+
Event names are defined in `Event` class in `pygpt_net.core.events`.
|
3642
|
+
|
3643
|
+
Syntax: `event name` - triggered on, `event data` *(data type)*:
|
3644
|
+
|
3645
|
+
- `AI_NAME` - when preparing an AI name, `data['value']` *(string, name of the AI assistant)*
|
3646
|
+
|
3647
|
+
- `AGENT_PROMPT` - on agent prompt in eval mode, `data['value']` *(string, prompt)*
|
3648
|
+
|
3649
|
+
- `AUDIO_INPUT_RECORD_START` - start audio input recording
|
3650
|
+
|
3651
|
+
- `AUDIO_INPUT_RECORD_STOP` - stop audio input recording
|
3652
|
+
|
3653
|
+
- `AUDIO_INPUT_RECORD_TOGGLE` - toggle audio input recording
|
3654
|
+
|
3655
|
+
- `AUDIO_INPUT_TRANSCRIBE` - on audio file transcribe, `data['path']` *(string, path to audio file)*
|
3656
|
+
|
3657
|
+
- `AUDIO_INPUT_STOP` - force stop audio input
|
3658
|
+
|
3659
|
+
- `AUDIO_INPUT_TOGGLE` - when speech input is enabled or disabled, `data['value']` *(bool, True/False)*
|
3660
|
+
|
3661
|
+
- `AUDIO_OUTPUT_STOP` - force stop audio output
|
3662
|
+
|
3663
|
+
- `AUDIO_OUTPUT_TOGGLE` - when speech output is enabled or disabled, `data['value']` *(bool, True/False)*
|
3664
|
+
|
3665
|
+
- `AUDIO_READ_TEXT` - on text read using speech synthesis, `data['text']` *(str, text to read)*
|
3666
|
+
|
3667
|
+
- `CMD_EXECUTE` - when a command is executed, `data['commands']` *(list, commands and arguments)*
|
3668
|
+
|
3669
|
+
- `CMD_INLINE` - when an inline command is executed, `data['commands']` *(list, commands and arguments)*
|
3670
|
+
|
3671
|
+
- `CMD_SYNTAX` - when appending syntax for commands, `data['prompt'], data['syntax']` *(string, list, prompt and list with commands usage syntax)*
|
3672
|
+
|
3673
|
+
- `CMD_SYNTAX_INLINE` - when appending syntax for commands (inline mode), `data['prompt'], data['syntax']` *(string, list, prompt and list with commands usage syntax)*
|
3674
|
+
|
3675
|
+
- `CTX_AFTER` - after the context item is sent, `ctx`
|
3676
|
+
|
3677
|
+
- `CTX_BEFORE` - before the context item is sent, `ctx`
|
3678
|
+
|
3679
|
+
- `CTX_BEGIN` - when context item create, `ctx`
|
3680
|
+
|
3681
|
+
- `CTX_END` - when context item handling is finished, `ctx`
|
3682
|
+
|
3683
|
+
- `CTX_SELECT` - when context is selected on list, `data['value']` *(int, ctx meta ID)*
|
3684
|
+
|
3685
|
+
- `DISABLE` - when the plugin is disabled, `data['value']` *(string, plugin ID)*
|
3686
|
+
|
3687
|
+
- `ENABLE` - when the plugin is enabled, `data['value']` *(string, plugin ID)*
|
3688
|
+
|
3689
|
+
- `FORCE_STOP` - on force stop plugins
|
2691
3690
|
|
2692
|
-
- `
|
3691
|
+
- `INPUT_BEFORE` - upon receiving input from the textarea, `data['value']` *(string, text to be sent)*
|
2693
3692
|
|
2694
|
-
- `
|
3693
|
+
- `MODE_BEFORE` - before the mode is selected `data['value'], data['prompt']` *(string, string, mode ID)*
|
2695
3694
|
|
2696
|
-
|
3695
|
+
- `MODE_SELECT` - on mode select `data['value']` *(string, mode ID)*
|
2697
3696
|
|
2698
|
-
- `
|
3697
|
+
- `MODEL_BEFORE` - before the model is selected `data['value']` *(string, model ID)*
|
2699
3698
|
|
2700
|
-
- `
|
3699
|
+
- `MODEL_SELECT` - on model select `data['value']` *(string, model ID)*
|
2701
3700
|
|
2702
|
-
- `
|
3701
|
+
- `PLUGIN_SETTINGS_CHANGED` - on plugin settings update (saving settings)
|
2703
3702
|
|
2704
|
-
- `
|
3703
|
+
- `PLUGIN_OPTION_GET` - on request for plugin option value `data['name'], data['value']` *(string, any, name of requested option, value)*
|
2705
3704
|
|
2706
|
-
- `
|
3705
|
+
- `POST_PROMPT` - after preparing a system prompt, `data['value']` *(string, system prompt)*
|
2707
3706
|
|
2708
|
-
- `
|
3707
|
+
- `POST_PROMPT_ASYNC` - after preparing a system prompt, just before request in async thread, `data['value']` *(string, system prompt)*
|
2709
3708
|
|
2710
|
-
- `
|
3709
|
+
- `POST_PROMPT_END` - after preparing a system prompt, just before request in async thread, at the very end `data['value']` *(string, system prompt)*
|
2711
3710
|
|
2712
|
-
- `
|
3711
|
+
- `PRE_PROMPT` - before preparing a system prompt, `data['value']` *(string, system prompt)*
|
2713
3712
|
|
2714
|
-
- `
|
3713
|
+
- `SYSTEM_PROMPT` - when preparing a system prompt, `data['value']` *(string, system prompt)*
|
2715
3714
|
|
2716
|
-
- `
|
3715
|
+
- `TOOL_OUTPUT_RENDER` - when rendering extra content from tools from plugins, `data['content']` *(string, content)*
|
2717
3716
|
|
2718
|
-
- `
|
3717
|
+
- `UI_ATTACHMENTS` - when the attachment upload elements are rendered, `data['value']` *(bool, show True/False)*
|
2719
3718
|
|
2720
|
-
- `
|
3719
|
+
- `UI_VISION` - when the vision elements are rendered, `data['value']` *(bool, show True/False)*
|
2721
3720
|
|
2722
|
-
- `
|
3721
|
+
- `USER_NAME` - when preparing a user's name, `data['value']` *(string, name of the user)*
|
2723
3722
|
|
2724
|
-
- `
|
3723
|
+
- `USER_SEND` - just before the input text is sent, `data['value']` *(string, input text)*
|
2725
3724
|
|
2726
|
-
- `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.
|
2727
3725
|
|
2728
|
-
|
3726
|
+
You can stop the propagation of a received event at any time by setting `stop` to `True`:
|
2729
3727
|
|
2730
|
-
|
3728
|
+
```
|
3729
|
+
event.stop = True
|
3730
|
+
```
|
2731
3731
|
|
2732
|
-
|
3732
|
+
Events flow can be debugged by enabling the option `Config -> Settings -> Developer -> Log and debug events`.
|
2733
3733
|
|
2734
|
-
|
3734
|
+
## Adding a custom LLM provider
|
2735
3735
|
|
2736
|
-
|
3736
|
+
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`.
|
2737
3737
|
|
2738
|
-
|
3738
|
+
These wrappers are loaded into the application during startup using `launcher.add_llm()` method:
|
2739
3739
|
|
2740
|
-
|
3740
|
+
```python
|
3741
|
+
# app.py
|
2741
3742
|
|
2742
|
-
|
3743
|
+
from pygpt_net.provider.llms.openai import OpenAILLM
|
3744
|
+
from pygpt_net.provider.llms.azure_openai import AzureOpenAILLM
|
3745
|
+
from pygpt_net.provider.llms.anthropic import AnthropicLLM
|
3746
|
+
from pygpt_net.provider.llms.hugging_face import HuggingFaceLLM
|
3747
|
+
from pygpt_net.provider.llms.ollama import OllamaLLM
|
3748
|
+
from pygpt_net.provider.llms.google import GoogleLLM
|
2743
3749
|
|
2744
|
-
**Updates**
|
2745
3750
|
|
2746
|
-
|
3751
|
+
def run(**kwargs):
|
3752
|
+
"""Runs the app."""
|
3753
|
+
# Initialize the app
|
3754
|
+
launcher = Launcher()
|
3755
|
+
launcher.init()
|
2747
3756
|
|
2748
|
-
|
3757
|
+
# Register plugins
|
3758
|
+
...
|
2749
3759
|
|
2750
|
-
|
3760
|
+
# Register langchain and llama-index LLMs wrappers
|
3761
|
+
launcher.add_llm(OpenAILLM())
|
3762
|
+
launcher.add_llm(AzureOpenAILLM())
|
3763
|
+
launcher.add_llm(AnthropicLLM())
|
3764
|
+
launcher.add_llm(HuggingFaceLLM())
|
3765
|
+
launcher.add_llm(OllamaLLM())
|
3766
|
+
launcher.add_llm(GoogleLLM())
|
2751
3767
|
|
2752
|
-
|
3768
|
+
# Launch the app
|
3769
|
+
launcher.run()
|
3770
|
+
```
|
2753
3771
|
|
2754
|
-
|
3772
|
+
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.
|
2755
3773
|
|
2756
|
-
|
3774
|
+
Extending **PyGPT** with custom plugins and LLM wrappers is straightforward:
|
2757
3775
|
|
2758
|
-
-
|
3776
|
+
- Pass instances of custom plugins and LLM wrappers directly to the launcher.
|
2759
3777
|
|
2760
|
-
|
3778
|
+
To register custom LLM wrappers:
|
2761
3779
|
|
2762
|
-
-
|
3780
|
+
- Provide a list of LLM wrapper instances as `llms` keyword argument.
|
2763
3781
|
|
2764
|
-
|
3782
|
+
**Example:**
|
2765
3783
|
|
2766
|
-
- `Log level`: toggle log level (ERROR|WARNING|INFO|DEBUG)
|
2767
3784
|
|
3785
|
+
```python
|
3786
|
+
# launcher.py
|
2768
3787
|
|
2769
|
-
|
3788
|
+
from pygpt_net.app import run
|
3789
|
+
from plugins import CustomPlugin, OtherCustomPlugin
|
3790
|
+
from llms import CustomLLM
|
2770
3791
|
|
2771
|
-
|
2772
|
-
|
3792
|
+
plugins = [
|
3793
|
+
CustomPlugin(),
|
3794
|
+
OtherCustomPlugin(),
|
3795
|
+
]
|
3796
|
+
llms = [
|
3797
|
+
CustomLLM(), # <--- custom LLM provider (wrapper)
|
3798
|
+
]
|
3799
|
+
vector_stores = []
|
2773
3800
|
|
2774
|
-
|
2775
|
-
|
3801
|
+
run(
|
3802
|
+
plugins=plugins,
|
3803
|
+
llms=llms,
|
3804
|
+
vector_stores=vector_stores,
|
3805
|
+
)
|
2776
3806
|
```
|
2777
3807
|
|
2778
|
-
|
2779
|
-
|
2780
|
-
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.
|
3808
|
+
**Examples (tutorial files)**
|
2781
3809
|
|
2782
|
-
|
3810
|
+
See the `examples` directory in this repository with examples of custom launcher, plugin, vector store, LLM (LangChain and LlamaIndex) provider and data loader:
|
2783
3811
|
|
2784
|
-
|
3812
|
+
- `examples/custom_launcher.py`
|
2785
3813
|
|
2786
|
-
|
3814
|
+
- `examples/example_audio_input.py`
|
2787
3815
|
|
3816
|
+
- `examples/example_audio_output.py`
|
2788
3817
|
|
2789
|
-
|
3818
|
+
- `examples/example_data_loader.py`
|
2790
3819
|
|
2791
|
-
|
2792
|
-
{HOME_DIR}/.config/pygpt-net/
|
2793
|
-
```
|
3820
|
+
- `examples/example_llm.py` <-- use it as an example
|
2794
3821
|
|
2795
|
-
- `
|
2796
|
-
- `attachments.json` - stores the list of current attachments.
|
2797
|
-
- `config.json` - stores the main configuration settings.
|
2798
|
-
- `models.json` - stores models configurations.
|
2799
|
-
- `capture` - a directory for captured images from camera and screenshots
|
2800
|
-
- `css` - a directory for CSS stylesheets (user override)
|
2801
|
-
- `history` - a directory for context history in `.txt` format.
|
2802
|
-
- `idx` - `Llama-index` indexes
|
2803
|
-
- `img` - a directory for images generated with `DALL-E 3` and `DALL-E 2`, saved as `.png` files.
|
2804
|
-
- `locale` - a directory for locales (user override)
|
2805
|
-
- `data` - a directory for data files and files downloaded/generated by GPT.
|
2806
|
-
- `presets` - a directory for presets stored as `.json` files.
|
2807
|
-
- `upload` - a directory for local copies of attachments coming from outside the workdir
|
2808
|
-
- `db.sqlite` - a database with contexts, notepads and indexes data records
|
2809
|
-
- `app.log` - a file with error and debug log
|
3822
|
+
- `examples/example_plugin.py`
|
2810
3823
|
|
2811
|
-
|
3824
|
+
- `examples/example_vector_store.py`
|
2812
3825
|
|
2813
|
-
|
3826
|
+
- `examples/example_web_search.py`
|
2814
3827
|
|
2815
|
-
|
3828
|
+
These example files can be used as a starting point for creating your own extensions for **PyGPT**.
|
2816
3829
|
|
2817
|
-
|
2818
|
-
./data/locale
|
2819
|
-
```
|
3830
|
+
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.
|
2820
3831
|
|
2821
|
-
|
2822
|
-
create and save the file with the appropriate name, for example:
|
3832
|
+
Every single LLM provider (wrapper) inherits from `BaseLLM` class and can provide 3 components: provider for LangChain, provider for LlamaIndex, and provider for Embeddings.
|
2823
3833
|
|
2824
|
-
``` ini
|
2825
|
-
locale.es.ini
|
2826
|
-
```
|
2827
3834
|
|
2828
|
-
|
3835
|
+
## Adding a custom vector store provider
|
2829
3836
|
|
2830
|
-
|
3837
|
+
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:
|
2831
3838
|
|
2832
|
-
You can also overwrite files in the `locale` and `css` app directories with your own files in the user directory.
|
2833
|
-
This allows you to overwrite language files or CSS styles in a very simple way - by just creating files in your working directory.
|
2834
3839
|
|
3840
|
+
```python
|
3841
|
+
# app.py
|
2835
3842
|
|
2836
|
-
|
2837
|
-
|
2838
|
-
|
3843
|
+
# vector stores
|
3844
|
+
from pygpt_net.provider.vector_stores.chroma import ChromaProvider
|
3845
|
+
from pygpt_net.provider.vector_stores.elasticsearch import ElasticsearchProvider
|
3846
|
+
from pygpt_net.provider.vector_stores.pinecode import PinecodeProvider
|
3847
|
+
from pygpt_net.provider.vector_stores.redis import RedisProvider
|
3848
|
+
from pygpt_net.provider.vector_stores.simple import SimpleProvider
|
2839
3849
|
|
2840
|
-
|
2841
|
-
|
3850
|
+
def run(**kwargs):
|
3851
|
+
# ...
|
3852
|
+
# register base vector store providers (llama-index)
|
3853
|
+
launcher.add_vector_store(ChromaProvider())
|
3854
|
+
launcher.add_vector_store(ElasticsearchProvider())
|
3855
|
+
launcher.add_vector_store(PinecodeProvider())
|
3856
|
+
launcher.add_vector_store(RedisProvider())
|
3857
|
+
launcher.add_vector_store(SimpleProvider())
|
2842
3858
|
|
3859
|
+
# register custom vector store providers (llama-index)
|
3860
|
+
vector_stores = kwargs.get('vector_stores', None)
|
3861
|
+
if isinstance(vector_stores, list):
|
3862
|
+
for store in vector_stores:
|
3863
|
+
launcher.add_vector_store(store)
|
2843
3864
|
|
2844
|
-
|
3865
|
+
# ...
|
3866
|
+
```
|
2845
3867
|
|
2846
|
-
|
3868
|
+
To register your custom vector store provider just register it by passing provider instance in `vector_stores` keyword argument:
|
2847
3869
|
|
2848
|
-
|
3870
|
+
```python
|
2849
3871
|
|
2850
|
-
|
3872
|
+
# custom_launcher.py
|
2851
3873
|
|
2852
|
-
|
2853
|
-
|
2854
|
-
|
3874
|
+
from pygpt_net.app import run
|
3875
|
+
from plugins import CustomPlugin, OtherCustomPlugin
|
3876
|
+
from llms import CustomLLM
|
3877
|
+
from vector_stores import CustomVectorStore
|
2855
3878
|
|
2856
|
-
|
3879
|
+
plugins = [
|
3880
|
+
CustomPlugin(),
|
3881
|
+
OtherCustomPlugin(),
|
3882
|
+
]
|
3883
|
+
llms = [
|
3884
|
+
CustomLLM(),
|
3885
|
+
]
|
3886
|
+
vector_stores = [
|
3887
|
+
CustomVectorStore(), # <--- custom vector store provider
|
3888
|
+
]
|
2857
3889
|
|
2858
|
-
|
2859
|
-
|
3890
|
+
run(
|
3891
|
+
plugins=plugins,
|
3892
|
+
llms=llms,
|
3893
|
+
vector_stores=vector_stores,
|
3894
|
+
)
|
2860
3895
|
```
|
2861
3896
|
|
2862
|
-
|
2863
|
-
|
2864
|
-
```ini
|
2865
|
-
python3 run.py --debug=2
|
2866
|
-
```
|
3897
|
+
The vector store provider must be an instance of `pygpt_net.provider.vector_stores.base.BaseStore`.
|
3898
|
+
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.
|
2867
3899
|
|
2868
|
-
|
3900
|
+
### Adding a custom data loader
|
2869
3901
|
|
2870
|
-
The value `2` enables the `DEBUG` logging level (most information).
|
2871
3902
|
|
2872
|
-
|
3903
|
+
```python
|
2873
3904
|
|
2874
|
-
|
3905
|
+
# custom_launcher.py
|
2875
3906
|
|
2876
|
-
|
3907
|
+
from pygpt_net.app import run
|
3908
|
+
from plugins import CustomPlugin, OtherCustomPlugin
|
3909
|
+
from llms import CustomLLM
|
3910
|
+
from vector_stores import CustomVectorStore
|
3911
|
+
from loaders import CustomLoader
|
2877
3912
|
|
2878
|
-
|
3913
|
+
plugins = [
|
3914
|
+
CustomPlugin(),
|
3915
|
+
OtherCustomPlugin(),
|
3916
|
+
]
|
3917
|
+
llms = [
|
3918
|
+
CustomLLM(),
|
3919
|
+
]
|
3920
|
+
vector_stores = [
|
3921
|
+
CustomVectorStore(),
|
3922
|
+
]
|
3923
|
+
loaders = [
|
3924
|
+
CustomLoader(), # <---- custom data loader
|
3925
|
+
]
|
2879
3926
|
|
3927
|
+
run(
|
3928
|
+
plugins=plugins,
|
3929
|
+
llms=llms,
|
3930
|
+
vector_stores=vector_stores, # <--- list with custom vector store providers
|
3931
|
+
loaders=loaders # <--- list with custom data loaders
|
3932
|
+
)
|
3933
|
+
```
|
2880
3934
|
|
2881
|
-
|
3935
|
+
The data loader must be an instance of `pygpt_net.provider.loaders.base.BaseLoader`.
|
3936
|
+
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.
|
2882
3937
|
|
2883
|
-
- Enhanced integration with Langchain
|
2884
|
-
- More vector databases support
|
2885
|
-
- Development of autonomous agents
|
2886
3938
|
|
2887
|
-
|
3939
|
+
# DISCLAIMER
|
2888
3940
|
|
2889
3941
|
This application is not officially associated with OpenAI. The author shall not be held liable for any damages
|
2890
3942
|
resulting from the use of this application. It is provided "as is," without any form of warranty.
|
@@ -2900,61 +3952,85 @@ may consume additional tokens that are not displayed in the main window.
|
|
2900
3952
|
|
2901
3953
|
## Recent changes:
|
2902
3954
|
|
2903
|
-
|
3955
|
+
**2.4.48 (2025-01-16)**
|
3956
|
+
|
3957
|
+
- Fix: parsing lists in data loaders configuration.
|
3958
|
+
- Fix: crash on Windows on PySide6 v6.6.0.
|
3959
|
+
- Added Gemini embeddings to LlamaIndex settings.
|
3960
|
+
- LlamaIndex upgraded to 0.12.11.
|
3961
|
+
- Security updates.
|
3962
|
+
|
3963
|
+
**2.4.47 (2025-01-14)**
|
3964
|
+
|
3965
|
+
- Added support for Python 3.12.
|
3966
|
+
- Added a new model to Chat with Files: gemini-2.0-flash-exp.
|
3967
|
+
- PySide6 upgraded to 6.6.0.
|
3968
|
+
|
3969
|
+
**2.4.46 (2024-12-16)**
|
2904
3970
|
|
2905
|
-
- Added
|
3971
|
+
- Added a new tab in Settings: "API Keys", where the API keys configuration for Google and Anthropic models has been relocated.
|
3972
|
+
- Introduced a new mode in "Chat with Files": "Retrieve Only", which allows for retrieving raw documents from the index.
|
3973
|
+
- Fixed a bug related to tool calls in the Gemini provider when using Chat with Files mode.
|
2906
3974
|
|
2907
|
-
|
3975
|
+
**2.4.45 (2024-12-16)**
|
2908
3976
|
|
2909
|
-
-
|
3977
|
+
- Enhanced web data loaders UI.
|
2910
3978
|
|
2911
|
-
|
3979
|
+
**2.4.44 (2024-12-16)**
|
2912
3980
|
|
2913
|
-
-
|
2914
|
-
-
|
3981
|
+
- Enhanced web data loaders.
|
3982
|
+
- Web loaders have been added to attachments, allowing external web content to be attached to context via the "+Web" button in the Attachments tab.
|
3983
|
+
- Improved handling of attachments in groups and added an attachment icon when a group contains attachments.
|
2915
3984
|
|
2916
|
-
|
3985
|
+
**2.4.43 (2024-12-15)**
|
2917
3986
|
|
2918
|
-
-
|
2919
|
-
-
|
3987
|
+
- Fix: Bug on attachment upload.
|
3988
|
+
- Added: Attachments uploaded in groups are now available for all contexts in the group (beta).
|
2920
3989
|
|
2921
|
-
|
3990
|
+
**2.4.42 (2024-12-15)**
|
2922
3991
|
|
2923
|
-
-
|
2924
|
-
- Added
|
2925
|
-
-
|
2926
|
-
-
|
3992
|
+
- Added Mailer plugin, which allows sending and retrieving emails from the server, and reading them. It currently supports only SMTP.
|
3993
|
+
- 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.
|
3994
|
+
- Improved audio output.
|
3995
|
+
- Enhanced visibility of the Video menu.
|
3996
|
+
- Other fixes.
|
2927
3997
|
|
2928
|
-
|
3998
|
+
**2.4.41 (2024-12-14)**
|
2929
3999
|
|
2930
|
-
-
|
2931
|
-
- Added
|
2932
|
-
- Added "Use extra context output" config option in "Settings -> Context".
|
4000
|
+
- Improved switching between columns on a split screen.
|
4001
|
+
- Added visual identification of the active column.
|
2933
4002
|
|
2934
|
-
|
4003
|
+
**2.4.40 (2024-12-13)**
|
2935
4004
|
|
2936
|
-
-
|
2937
|
-
-
|
2938
|
-
-
|
4005
|
+
- Enhanced Split Screen mode, now promoted from beta to stable.
|
4006
|
+
- Python Code Interpreter tool added to the Tabs.
|
4007
|
+
- HTML/JS Canvas tool added to the Tabs.
|
4008
|
+
- Added attachment icon to the context list if context has attachments.
|
4009
|
+
- Improved audio playback.
|
4010
|
+
- Improved web search.
|
4011
|
+
- Added a thumbnail image to web search results.
|
4012
|
+
- Added a new commands to web search: "extract_images" and "extract_links".
|
4013
|
+
- Added the option "Use raw content (without summarization)" to the web search plugin, which provides a more detailed result to the main model.
|
4014
|
+
- Extended the default maximum result characters to 50,000 in the web search plugin.
|
2939
4015
|
|
2940
|
-
|
4016
|
+
**2.4.39 (2024-12-09)**
|
2941
4017
|
|
2942
|
-
-
|
4018
|
+
- 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.
|
2943
4019
|
|
2944
|
-
|
4020
|
+
- Fixed: Language switch.
|
2945
4021
|
|
2946
|
-
|
2947
|
-
- Improved plugin command execution.
|
4022
|
+
**2.4.38 (2024-12-08)**
|
2948
4023
|
|
2949
|
-
|
4024
|
+
- 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...
|
4025
|
+
- Added configuration options for audio input in Settings -> Audio -> Audio Input Device, Channels, and Sampling rate.
|
2950
4026
|
|
2951
|
-
-
|
2952
|
-
- Fixed system prompt replace after mode changed on app start.
|
2953
|
-
- Improved related links rendering in chat output.
|
2954
|
-
- Added RPM limit config option for embeddings API.
|
2955
|
-
- UI improvements.
|
4027
|
+
**2.4.37 (2024-11-30)**
|
2956
4028
|
|
2957
|
-
The
|
4029
|
+
- The `Query only` mode in `Uploaded` tab has been renamed to `RAG`.
|
4030
|
+
- New options have been added under `Settings -> Files and Attachments`:
|
4031
|
+
- `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.
|
4032
|
+
- `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.
|
4033
|
+
- 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.
|
2958
4034
|
|
2959
4035
|
|
2960
4036
|
# Credits and links
|
@@ -2963,8 +4039,12 @@ The full changelog is located in the **[CHANGELOG.md](CHANGELOG.md)** file in th
|
|
2963
4039
|
|
2964
4040
|
**Documentation:** <https://pygpt.readthedocs.io>
|
2965
4041
|
|
4042
|
+
**Support and donate:** <https://pygpt.net/#donate>
|
4043
|
+
|
2966
4044
|
**GitHub:** <https://github.com/szczyglis-dev/py-gpt>
|
2967
4045
|
|
4046
|
+
**Discord:** <https://pygpt.net/discord>
|
4047
|
+
|
2968
4048
|
**Snap Store:** <https://snapcraft.io/pygpt>
|
2969
4049
|
|
2970
4050
|
**PyPI:** <https://pypi.org/project/pygpt-net>
|
@@ -2977,23 +4057,27 @@ The full changelog is located in the **[CHANGELOG.md](CHANGELOG.md)** file in th
|
|
2977
4057
|
|
2978
4058
|
# Special thanks
|
2979
4059
|
|
2980
|
-
GitHub community:
|
4060
|
+
GitHub's community:
|
4061
|
+
|
4062
|
+
- [@BillionShields](https://github.com/BillionShields)
|
4063
|
+
|
4064
|
+
- [@gfsysa](https://github.com/gfsysa)
|
2981
4065
|
|
2982
|
-
-
|
4066
|
+
- [@glinkot](https://github.com/glinkot)
|
2983
4067
|
|
2984
|
-
-
|
4068
|
+
- [@kaneda2004](https://github.com/kaneda2004)
|
2985
4069
|
|
2986
|
-
-
|
4070
|
+
- [@linnflux](https://github.com/linnflux)
|
2987
4071
|
|
2988
|
-
-
|
4072
|
+
- [@moritz-t-w](https://github.com/moritz-t-w)
|
2989
4073
|
|
2990
|
-
-
|
4074
|
+
- [@oleksii-honchar](https://github.com/oleksii-honchar)
|
2991
4075
|
|
2992
|
-
-
|
4076
|
+
- [@yf007](https://github.com/yf007)
|
2993
4077
|
|
2994
4078
|
## Third-party libraries
|
2995
4079
|
|
2996
|
-
Full list of external libraries used in this project is located in the
|
4080
|
+
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.
|
2997
4081
|
|
2998
4082
|
All used SVG icons are from `Material Design Icons` provided by Google:
|
2999
4083
|
|
@@ -3001,4 +4085,12 @@ https://github.com/google/material-design-icons
|
|
3001
4085
|
|
3002
4086
|
https://fonts.google.com/icons
|
3003
4087
|
|
3004
|
-
|
4088
|
+
Monaspace fonts provided by GitHub: https://github.com/githubnext/monaspace
|
4089
|
+
|
4090
|
+
Code of the LlamaIndex offline loaders integrated into app is taken from LlamaHub: https://llamahub.ai
|
4091
|
+
|
4092
|
+
Awesome ChatGPT Prompts (used in templates): https://github.com/f/awesome-chatgpt-prompts/
|
4093
|
+
|
4094
|
+
Code syntax highlight powered by: https://highlightjs.org
|
4095
|
+
|
4096
|
+
LaTeX support by: https://katex.org and https://github.com/mitya57/python-markdown-math
|