pygpt-net 2.6.39__py3-none-any.whl → 2.6.41__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pygpt_net/CHANGELOG.txt +8 -0
- pygpt_net/__init__.py +3 -3
- pygpt_net/app.py +6 -1
- pygpt_net/controller/access/access.py +0 -0
- pygpt_net/controller/agent/__init__.py +0 -0
- pygpt_net/controller/agent/agent.py +0 -0
- pygpt_net/controller/agent/common.py +0 -0
- pygpt_net/controller/agent/experts.py +0 -0
- pygpt_net/controller/agent/legacy.py +0 -0
- pygpt_net/controller/agent/llama.py +0 -0
- pygpt_net/controller/assistant/__init__.py +0 -0
- pygpt_net/controller/assistant/assistant.py +0 -0
- pygpt_net/controller/assistant/batch.py +0 -0
- pygpt_net/controller/assistant/files.py +0 -0
- pygpt_net/controller/assistant/threads.py +0 -0
- pygpt_net/controller/attachment/__init__.py +0 -0
- pygpt_net/controller/attachment/attachment.py +0 -0
- pygpt_net/controller/audio/__init__.py +0 -0
- pygpt_net/controller/audio/audio.py +0 -0
- pygpt_net/controller/audio/ui.py +0 -0
- pygpt_net/controller/calendar/__init__.py +0 -0
- pygpt_net/controller/calendar/calendar.py +0 -0
- pygpt_net/controller/calendar/note.py +0 -0
- pygpt_net/controller/camera/__init__.py +0 -0
- pygpt_net/controller/camera/camera.py +0 -0
- pygpt_net/controller/chat/audio.py +0 -0
- pygpt_net/controller/chat/chat.py +0 -0
- pygpt_net/controller/chat/command.py +0 -0
- pygpt_net/controller/chat/common.py +0 -0
- pygpt_net/controller/chat/files.py +0 -0
- pygpt_net/controller/chat/handler/__init__.py +0 -0
- pygpt_net/controller/chat/handler/anthropic_stream.py +0 -0
- pygpt_net/controller/chat/handler/google_stream.py +0 -0
- pygpt_net/controller/chat/handler/langchain_stream.py +0 -0
- pygpt_net/controller/chat/handler/llamaindex_stream.py +0 -0
- pygpt_net/controller/chat/handler/openai_stream.py +0 -0
- pygpt_net/controller/chat/handler/utils.py +0 -0
- pygpt_net/controller/chat/handler/worker.py +13 -17
- pygpt_net/controller/chat/handler/xai_stream.py +0 -0
- pygpt_net/controller/chat/image.py +7 -1
- pygpt_net/controller/chat/render.py +25 -8
- pygpt_net/controller/chat/response.py +3 -4
- pygpt_net/controller/chat/stream.py +40 -7
- pygpt_net/controller/chat/text.py +0 -0
- pygpt_net/controller/chat/vision.py +0 -0
- pygpt_net/controller/command/__init__.py +0 -0
- pygpt_net/controller/command/command.py +0 -0
- pygpt_net/controller/config/__init__.py +0 -0
- pygpt_net/controller/config/config.py +0 -0
- pygpt_net/controller/config/field/__init__.py +0 -0
- pygpt_net/controller/config/field/checkbox_list.py +0 -0
- pygpt_net/controller/config/field/cmd.py +0 -0
- pygpt_net/controller/config/field/combo.py +0 -0
- pygpt_net/controller/config/field/dictionary.py +0 -0
- pygpt_net/controller/config/field/input.py +0 -0
- pygpt_net/controller/config/field/slider.py +0 -0
- pygpt_net/controller/config/field/textarea.py +0 -0
- pygpt_net/controller/config/placeholder.py +0 -0
- pygpt_net/controller/ctx/common.py +0 -0
- pygpt_net/controller/ctx/summarizer.py +0 -0
- pygpt_net/controller/debug/__init__.py +0 -0
- pygpt_net/controller/debug/debug.py +19 -0
- pygpt_net/controller/dialogs/__init__.py +0 -0
- pygpt_net/controller/dialogs/debug.py +0 -0
- pygpt_net/controller/dialogs/dialogs.py +0 -0
- pygpt_net/controller/files/__init__.py +0 -0
- pygpt_net/controller/files/files.py +0 -0
- pygpt_net/controller/finder/__init__.py +0 -0
- pygpt_net/controller/finder/finder.py +0 -0
- pygpt_net/controller/idx/common.py +0 -0
- pygpt_net/controller/idx/idx.py +0 -0
- pygpt_net/controller/idx/settings.py +0 -0
- pygpt_net/controller/kernel/kernel.py +0 -0
- pygpt_net/controller/kernel/stack.py +0 -0
- pygpt_net/controller/lang/__init__.py +0 -0
- pygpt_net/controller/lang/custom.py +0 -0
- pygpt_net/controller/lang/lang.py +0 -0
- pygpt_net/controller/lang/mapping.py +0 -0
- pygpt_net/controller/lang/plugins.py +0 -0
- pygpt_net/controller/lang/settings.py +0 -0
- pygpt_net/controller/launcher/__init__.py +0 -0
- pygpt_net/controller/launcher/launcher.py +0 -0
- pygpt_net/controller/layout/__init__.py +0 -0
- pygpt_net/controller/layout/layout.py +0 -0
- pygpt_net/controller/media/__init__.py +0 -0
- pygpt_net/controller/media/media.py +0 -0
- pygpt_net/controller/mode/__init__.py +0 -0
- pygpt_net/controller/mode/mode.py +0 -0
- pygpt_net/controller/model/__init__.py +0 -0
- pygpt_net/controller/notepad/__init__.py +0 -0
- pygpt_net/controller/painter/__init__.py +0 -0
- pygpt_net/controller/painter/common.py +0 -0
- pygpt_net/controller/painter/painter.py +0 -0
- pygpt_net/controller/plugins/presets.py +0 -0
- pygpt_net/controller/presets/experts.py +0 -0
- pygpt_net/controller/presets/presets.py +0 -0
- pygpt_net/controller/realtime/__init__.py +0 -0
- pygpt_net/controller/realtime/manager.py +0 -0
- pygpt_net/controller/realtime/realtime.py +0 -0
- pygpt_net/controller/settings/__init__.py +0 -0
- pygpt_net/controller/settings/profile.py +0 -0
- pygpt_net/controller/settings/settings.py +0 -0
- pygpt_net/controller/theme/menu.py +0 -0
- pygpt_net/controller/theme/nodes.py +0 -0
- pygpt_net/controller/theme/theme.py +0 -0
- pygpt_net/controller/tools/__init__.py +0 -0
- pygpt_net/controller/tools/tools.py +0 -0
- pygpt_net/controller/ui/__init__.py +0 -0
- pygpt_net/controller/ui/mode.py +0 -0
- pygpt_net/controller/ui/tabs.py +0 -0
- pygpt_net/controller/ui/ui.py +0 -0
- pygpt_net/controller/ui/vision.py +0 -0
- pygpt_net/core/__init__.py +0 -0
- pygpt_net/core/access/access.py +0 -0
- pygpt_net/core/access/helpers.py +0 -0
- pygpt_net/core/agents/__init__.py +0 -0
- pygpt_net/core/agents/agents.py +0 -0
- pygpt_net/core/agents/bridge.py +0 -0
- pygpt_net/core/agents/legacy.py +0 -0
- pygpt_net/core/agents/observer/__init__.py +0 -0
- pygpt_net/core/agents/provider.py +0 -0
- pygpt_net/core/agents/runners/__init__.py +0 -0
- pygpt_net/core/agents/runners/base.py +0 -0
- pygpt_net/core/agents/runners/helpers.py +0 -0
- pygpt_net/core/agents/runners/llama_assistant.py +0 -0
- pygpt_net/core/agents/runners/llama_plan.py +0 -0
- pygpt_net/core/agents/runners/llama_steps.py +0 -0
- pygpt_net/core/agents/runners/llama_workflow.py +0 -0
- pygpt_net/core/agents/runners/loop.py +0 -0
- pygpt_net/core/agents/runners/openai_workflow.py +0 -0
- pygpt_net/core/agents/tools.py +0 -0
- pygpt_net/core/assistants/__init__.py +0 -0
- pygpt_net/core/assistants/assistants.py +0 -0
- pygpt_net/core/assistants/files.py +0 -0
- pygpt_net/core/assistants/store.py +0 -0
- pygpt_net/core/attachments/__init__.py +0 -0
- pygpt_net/core/attachments/attachments.py +0 -0
- pygpt_net/core/attachments/worker.py +0 -0
- pygpt_net/core/audio/audio.py +0 -0
- pygpt_net/core/audio/backend/__init__.py +0 -0
- pygpt_net/core/audio/backend/native/__init__.py +0 -0
- pygpt_net/core/audio/backend/native/player.py +0 -0
- pygpt_net/core/audio/backend/native/realtime.py +0 -0
- pygpt_net/core/audio/backend/pyaudio/__init__.py +0 -0
- pygpt_net/core/audio/backend/pyaudio/playback.py +0 -0
- pygpt_net/core/audio/backend/pyaudio/pyaudio.py +0 -0
- pygpt_net/core/audio/backend/pyaudio/realtime.py +0 -0
- pygpt_net/core/audio/backend/pygame/__init__.py +0 -0
- pygpt_net/core/audio/backend/pygame/pygame.py +0 -0
- pygpt_net/core/audio/backend/shared/__init__.py +0 -0
- pygpt_net/core/audio/backend/shared/conversions.py +0 -0
- pygpt_net/core/audio/backend/shared/envelope.py +0 -0
- pygpt_net/core/audio/backend/shared/player.py +0 -0
- pygpt_net/core/audio/backend/shared/rt.py +0 -0
- pygpt_net/core/audio/context.py +0 -0
- pygpt_net/core/audio/output.py +0 -0
- pygpt_net/core/audio/whisper.py +0 -0
- pygpt_net/core/bridge/bridge.py +0 -0
- pygpt_net/core/bridge/worker.py +0 -0
- pygpt_net/core/calendar/__init__.py +0 -0
- pygpt_net/core/calendar/calendar.py +0 -0
- pygpt_net/core/camera/__init__.py +0 -0
- pygpt_net/core/camera/camera.py +0 -0
- pygpt_net/core/camera/worker.py +0 -0
- pygpt_net/core/chain/__init__.py +0 -0
- pygpt_net/core/chain/chain.py +0 -0
- pygpt_net/core/chain/chat.py +0 -0
- pygpt_net/core/chain/completion.py +0 -0
- pygpt_net/core/command/command.py +0 -0
- pygpt_net/core/ctx/bag.py +0 -0
- pygpt_net/core/ctx/container.py +0 -0
- pygpt_net/core/ctx/ctx.py +0 -0
- pygpt_net/core/ctx/idx.py +0 -0
- pygpt_net/core/ctx/output.py +0 -0
- pygpt_net/core/ctx/reply.py +0 -0
- pygpt_net/core/db/__init__.py +0 -0
- pygpt_net/core/db/database.py +0 -0
- pygpt_net/core/db/viewer.py +0 -0
- pygpt_net/core/debug/agent.py +0 -0
- pygpt_net/core/debug/console/__init__.py +0 -0
- pygpt_net/core/debug/console/console.py +8 -0
- pygpt_net/core/debug/db.py +0 -0
- pygpt_net/core/debug/debug.py +0 -0
- pygpt_net/core/debug/events.py +0 -0
- pygpt_net/core/debug/indexes.py +0 -0
- pygpt_net/core/debug/kernel.py +0 -0
- pygpt_net/core/debug/tabs.py +0 -0
- pygpt_net/core/dispatcher/__init__.py +0 -0
- pygpt_net/core/dispatcher/dispatcher.py +0 -0
- pygpt_net/core/docker/__init__.py +0 -0
- pygpt_net/core/docker/builder.py +0 -0
- pygpt_net/core/docker/docker.py +0 -0
- pygpt_net/core/events/__init__.py +0 -0
- pygpt_net/core/events/app.py +0 -0
- pygpt_net/core/events/base.py +0 -0
- pygpt_net/core/events/control.py +0 -0
- pygpt_net/core/events/event.py +0 -0
- pygpt_net/core/events/kernel.py +0 -0
- pygpt_net/core/events/realtime.py +0 -0
- pygpt_net/core/experts/__init__.py +0 -0
- pygpt_net/core/experts/worker.py +0 -0
- pygpt_net/core/filesystem/actions.py +0 -0
- pygpt_net/core/filesystem/editor.py +0 -0
- pygpt_net/core/filesystem/filesystem.py +2 -2
- pygpt_net/core/filesystem/opener.py +0 -0
- pygpt_net/core/filesystem/packer.py +0 -0
- pygpt_net/core/filesystem/parser.py +0 -0
- pygpt_net/core/filesystem/types.py +0 -0
- pygpt_net/core/filesystem/url.py +0 -0
- pygpt_net/core/history/__init__.py +0 -0
- pygpt_net/core/history/history.py +0 -0
- pygpt_net/core/idx/context.py +0 -0
- pygpt_net/core/idx/idx.py +0 -0
- pygpt_net/core/idx/metadata.py +0 -0
- pygpt_net/core/idx/response.py +0 -0
- pygpt_net/core/idx/types/__init__.py +0 -0
- pygpt_net/core/idx/types/ctx.py +0 -0
- pygpt_net/core/idx/types/external.py +0 -0
- pygpt_net/core/idx/types/files.py +0 -0
- pygpt_net/core/idx/ui/__init__.py +0 -0
- pygpt_net/core/idx/ui/loaders.py +0 -0
- pygpt_net/core/image/__init__.py +0 -0
- pygpt_net/core/image/image.py +0 -0
- pygpt_net/core/info/__init__.py +0 -0
- pygpt_net/core/info/info.py +0 -0
- pygpt_net/core/installer/__init__.py +0 -0
- pygpt_net/core/installer/installer.py +0 -0
- pygpt_net/core/llm/__init__.py +0 -0
- pygpt_net/core/llm/llm.py +0 -0
- pygpt_net/core/locale/__init__.py +0 -0
- pygpt_net/core/locale/locale.py +0 -0
- pygpt_net/core/models/__init__.py +0 -0
- pygpt_net/core/models/models.py +0 -0
- pygpt_net/core/models/ollama.py +0 -0
- pygpt_net/core/modes/__init__.py +0 -0
- pygpt_net/core/modes/modes.py +0 -0
- pygpt_net/core/notepad/__init__.py +0 -0
- pygpt_net/core/notepad/notepad.py +0 -0
- pygpt_net/core/platforms/__init__.py +0 -0
- pygpt_net/core/platforms/platforms.py +0 -0
- pygpt_net/core/plugins/__init__.py +0 -0
- pygpt_net/core/plugins/plugins.py +0 -0
- pygpt_net/core/presets/__init__.py +0 -0
- pygpt_net/core/profile/__init__.py +0 -0
- pygpt_net/core/profile/profile.py +0 -0
- pygpt_net/core/prompt/__init__.py +0 -0
- pygpt_net/core/prompt/base/__init__.py +0 -0
- pygpt_net/core/prompt/base/gpt.py +0 -0
- pygpt_net/core/prompt/custom.py +0 -0
- pygpt_net/core/prompt/prompt.py +0 -0
- pygpt_net/core/prompt/template.py +0 -0
- pygpt_net/core/realtime/__init__.py +0 -0
- pygpt_net/core/realtime/options.py +0 -0
- pygpt_net/core/realtime/shared/__init__.py +0 -0
- pygpt_net/core/realtime/shared/audio.py +0 -0
- pygpt_net/core/realtime/shared/loop.py +0 -0
- pygpt_net/core/realtime/shared/session.py +0 -0
- pygpt_net/core/realtime/shared/text.py +0 -0
- pygpt_net/core/realtime/shared/tools.py +0 -0
- pygpt_net/core/realtime/shared/turn.py +0 -0
- pygpt_net/core/realtime/shared/types.py +0 -0
- pygpt_net/core/realtime/worker.py +0 -0
- pygpt_net/core/render/__init__.py +0 -0
- pygpt_net/core/render/base.py +5 -1
- pygpt_net/core/render/markdown/body.py +0 -0
- pygpt_net/core/render/markdown/helpers.py +0 -0
- pygpt_net/core/render/markdown/pid.py +0 -0
- pygpt_net/core/render/plain/__init__.py +0 -0
- pygpt_net/core/render/plain/body.py +0 -0
- pygpt_net/core/render/plain/helpers.py +0 -0
- pygpt_net/core/render/plain/pid.py +0 -0
- pygpt_net/core/render/plain/renderer.py +17 -4
- pygpt_net/core/render/web/body.py +78 -1161
- pygpt_net/core/render/web/debug.py +217 -0
- pygpt_net/core/render/web/helpers.py +44 -12
- pygpt_net/core/render/web/pid.py +4 -1
- pygpt_net/core/render/web/renderer.py +600 -343
- pygpt_net/core/render/web/syntax_highlight.py +0 -0
- pygpt_net/core/settings/__init__.py +0 -0
- pygpt_net/core/settings/settings.py +0 -0
- pygpt_net/core/tabs/tab.py +0 -0
- pygpt_net/core/tabs/tabs.py +0 -0
- pygpt_net/core/text/__init__.py +0 -0
- pygpt_net/core/text/text.py +0 -0
- pygpt_net/core/text/utils.py +2 -1
- pygpt_net/core/text/web_finder.py +0 -0
- pygpt_net/core/tokens/__init__.py +0 -0
- pygpt_net/core/tokens/tokens.py +0 -0
- pygpt_net/core/types/__init__.py +0 -0
- pygpt_net/core/types/agent.py +0 -0
- pygpt_net/core/types/base.py +0 -0
- pygpt_net/core/types/console.py +0 -0
- pygpt_net/core/types/image.py +0 -0
- pygpt_net/core/types/mode.py +0 -0
- pygpt_net/core/types/model.py +0 -0
- pygpt_net/core/types/multimodal.py +0 -0
- pygpt_net/core/types/tools.py +0 -0
- pygpt_net/core/updater/__init__.py +0 -0
- pygpt_net/core/video/__init__.py +0 -0
- pygpt_net/core/video/video.py +0 -0
- pygpt_net/core/vision/__init__.py +0 -0
- pygpt_net/core/vision/analyzer.py +0 -0
- pygpt_net/core/vision/vision.py +0 -0
- pygpt_net/core/web/__init__.py +0 -0
- pygpt_net/core/web/helpers.py +0 -0
- pygpt_net/core/web/web.py +0 -0
- pygpt_net/core/worker/__init__.py +0 -0
- pygpt_net/core/worker/worker.py +0 -0
- pygpt_net/css.qrc +1 -1
- pygpt_net/css_rc.py +0 -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 +9 -8
- pygpt_net/data/config/models.json +3 -3
- pygpt_net/data/config/modes.json +0 -0
- pygpt_net/data/config/presets/agent_code_act.json +0 -0
- pygpt_net/data/config/presets/agent_openai.json +0 -0
- pygpt_net/data/config/presets/agent_openai_assistant.json +0 -0
- pygpt_net/data/config/presets/agent_openai_b2b.json +0 -0
- pygpt_net/data/config/presets/agent_openai_coder.json +0 -0
- pygpt_net/data/config/presets/agent_openai_evolve.json +0 -0
- pygpt_net/data/config/presets/agent_openai_expert.json +0 -0
- pygpt_net/data/config/presets/agent_openai_planner.json +0 -0
- pygpt_net/data/config/presets/agent_openai_researcher.json +0 -0
- pygpt_net/data/config/presets/agent_openai_simple.json +0 -0
- pygpt_net/data/config/presets/agent_openai_supervisor.json +0 -0
- pygpt_net/data/config/presets/agent_openai_writer.json +0 -0
- pygpt_net/data/config/presets/agent_planner.json +0 -0
- pygpt_net/data/config/presets/agent_react.json +0 -0
- pygpt_net/data/config/presets/agent_supervisor.json +0 -0
- pygpt_net/data/config/presets/current.agent.json +0 -0
- pygpt_net/data/config/presets/current.agent_llama.json +0 -0
- pygpt_net/data/config/presets/current.agent_openai.json +0 -0
- pygpt_net/data/config/presets/current.audio.json +0 -0
- pygpt_net/data/config/presets/current.computer.json +0 -0
- pygpt_net/data/config/presets/current.expert.json +0 -0
- pygpt_net/data/config/presets/current.llama_index.json +0 -0
- pygpt_net/data/config/presets/current.research.json +0 -0
- pygpt_net/data/config/presets/joke_agent.json +0 -0
- pygpt_net/data/config/presets/joke_expert.json +0 -0
- pygpt_net/data/config/settings.json +15 -3
- pygpt_net/data/config/settings_section.json +0 -0
- pygpt_net/data/css/web-blocks.css +35 -5
- pygpt_net/data/css/web-blocks.dark.css +3 -0
- pygpt_net/data/css/web-blocks.darkest.css +3 -0
- pygpt_net/data/css/web-chatgpt.css +35 -5
- pygpt_net/data/css/web-chatgpt.dark.css +3 -0
- pygpt_net/data/css/web-chatgpt.darkest.css +3 -0
- pygpt_net/data/css/web-chatgpt_wide.css +35 -5
- pygpt_net/data/css/web-chatgpt_wide.dark.css +3 -0
- pygpt_net/data/css/web-chatgpt_wide.darkest.css +3 -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/icon_tray_busy.ico +0 -0
- pygpt_net/data/icon_tray_error.ico +0 -0
- pygpt_net/data/icon_tray_idle.ico +0 -0
- pygpt_net/data/icons/abc.svg +0 -0
- pygpt_net/data/icons/accessibility.svg +0 -0
- pygpt_net/data/icons/add.svg +0 -0
- pygpt_net/data/icons/add_circle.svg +0 -0
- pygpt_net/data/icons/add_folder.svg +0 -0
- pygpt_net/data/icons/add_library.svg +0 -0
- pygpt_net/data/icons/alarm.svg +0 -0
- pygpt_net/data/icons/apps.svg +0 -0
- pygpt_net/data/icons/asterisk.svg +0 -0
- pygpt_net/data/icons/attachment.svg +0 -0
- pygpt_net/data/icons/attachments.svg +0 -0
- pygpt_net/data/icons/back.svg +0 -0
- pygpt_net/data/icons/backspace.svg +0 -0
- pygpt_net/data/icons/block.svg +0 -0
- pygpt_net/data/icons/bookmark.svg +0 -0
- pygpt_net/data/icons/brush.svg +0 -0
- pygpt_net/data/icons/build.svg +0 -0
- pygpt_net/data/icons/calendar.svg +0 -0
- pygpt_net/data/icons/camera.svg +0 -0
- pygpt_net/data/icons/chat/audio.png +0 -0
- pygpt_net/data/icons/chat/collapse.png +0 -0
- pygpt_net/data/icons/chat/copy.png +0 -0
- pygpt_net/data/icons/chat/delete.png +0 -0
- pygpt_net/data/icons/chat/edit.png +0 -0
- pygpt_net/data/icons/chat/join.png +0 -0
- pygpt_net/data/icons/chat/preview.png +0 -0
- pygpt_net/data/icons/chat/reload.png +0 -0
- pygpt_net/data/icons/chat/run.png +0 -0
- pygpt_net/data/icons/chat.svg +0 -0
- pygpt_net/data/icons/check.svg +0 -0
- pygpt_net/data/icons/check_circle.svg +0 -0
- pygpt_net/data/icons/checklist.svg +0 -0
- pygpt_net/data/icons/circle.svg +0 -0
- pygpt_net/data/icons/clear.svg +0 -0
- pygpt_net/data/icons/clock.svg +0 -0
- pygpt_net/data/icons/close.svg +0 -0
- pygpt_net/data/icons/close_circle.svg +0 -0
- pygpt_net/data/icons/code.svg +0 -0
- pygpt_net/data/icons/collapse.svg +0 -0
- pygpt_net/data/icons/computer.svg +0 -0
- pygpt_net/data/icons/copy.svg +0 -0
- pygpt_net/data/icons/crop.svg +0 -0
- pygpt_net/data/icons/cut.svg +0 -0
- pygpt_net/data/icons/db.svg +0 -0
- pygpt_net/data/icons/delete.svg +0 -0
- pygpt_net/data/icons/done.svg +0 -0
- pygpt_net/data/icons/download.svg +0 -0
- pygpt_net/data/icons/draft.svg +0 -0
- pygpt_net/data/icons/drag.svg +0 -0
- pygpt_net/data/icons/edit.svg +0 -0
- pygpt_net/data/icons/emergency.svg +0 -0
- pygpt_net/data/icons/equalizer.svg +0 -0
- pygpt_net/data/icons/error.svg +0 -0
- pygpt_net/data/icons/event_available.svg +0 -0
- pygpt_net/data/icons/expand.svg +0 -0
- pygpt_net/data/icons/fast_forward.svg +0 -0
- pygpt_net/data/icons/fast_rewind.svg +0 -0
- pygpt_net/data/icons/favorite.svg +0 -0
- pygpt_net/data/icons/folder.svg +0 -0
- pygpt_net/data/icons/folder_filled.svg +0 -0
- pygpt_net/data/icons/forward.svg +0 -0
- pygpt_net/data/icons/full.svg +0 -0
- pygpt_net/data/icons/fullscreen.svg +0 -0
- pygpt_net/data/icons/grid.svg +0 -0
- pygpt_net/data/icons/hearing.svg +0 -0
- pygpt_net/data/icons/help.svg +0 -0
- pygpt_net/data/icons/history.svg +0 -0
- pygpt_net/data/icons/home.svg +0 -0
- pygpt_net/data/icons/home_filled.svg +0 -0
- pygpt_net/data/icons/image.svg +0 -0
- pygpt_net/data/icons/info.svg +0 -0
- pygpt_net/data/icons/input.svg +0 -0
- pygpt_net/data/icons/key.svg +0 -0
- pygpt_net/data/icons/keyboard.svg +0 -0
- pygpt_net/data/icons/language.svg +0 -0
- pygpt_net/data/icons/list.svg +0 -0
- pygpt_net/data/icons/lock.svg +0 -0
- pygpt_net/data/icons/logout.svg +0 -0
- pygpt_net/data/icons/map.svg +0 -0
- pygpt_net/data/icons/memory.svg +0 -0
- pygpt_net/data/icons/menu.svg +0 -0
- pygpt_net/data/icons/mic.svg +0 -0
- pygpt_net/data/icons/mic_off.svg +0 -0
- pygpt_net/data/icons/more_horizontal.svg +0 -0
- pygpt_net/data/icons/mute.svg +0 -0
- pygpt_net/data/icons/open_tab.svg +0 -0
- pygpt_net/data/icons/palette.svg +0 -0
- pygpt_net/data/icons/paste.svg +0 -0
- pygpt_net/data/icons/pause.svg +0 -0
- pygpt_net/data/icons/pause_circle.svg +0 -0
- pygpt_net/data/icons/photos.svg +0 -0
- pygpt_net/data/icons/pin.svg +0 -0
- pygpt_net/data/icons/play.svg +0 -0
- pygpt_net/data/icons/play_pause.svg +0 -0
- pygpt_net/data/icons/playlist_add.svg +0 -0
- pygpt_net/data/icons/power.svg +0 -0
- pygpt_net/data/icons/print.svg +0 -0
- pygpt_net/data/icons/public_filled.svg +0 -0
- pygpt_net/data/icons/redo.svg +0 -0
- pygpt_net/data/icons/reload.svg +0 -0
- pygpt_net/data/icons/repeat.svg +0 -0
- pygpt_net/data/icons/replay.svg +0 -0
- pygpt_net/data/icons/resize.svg +0 -0
- pygpt_net/data/icons/robot.svg +0 -0
- pygpt_net/data/icons/router.svg +0 -0
- pygpt_net/data/icons/save.svg +0 -0
- pygpt_net/data/icons/schedule.svg +0 -0
- pygpt_net/data/icons/screenshot.svg +0 -0
- pygpt_net/data/icons/search.svg +0 -0
- pygpt_net/data/icons/security.svg +0 -0
- pygpt_net/data/icons/sensors.svg +0 -0
- pygpt_net/data/icons/settings.svg +0 -0
- pygpt_net/data/icons/settings_filled.svg +0 -0
- pygpt_net/data/icons/share.svg +0 -0
- pygpt_net/data/icons/shedule.svg +0 -0
- pygpt_net/data/icons/sort.svg +0 -0
- pygpt_net/data/icons/split_screen.svg +0 -0
- pygpt_net/data/icons/stack.svg +0 -0
- pygpt_net/data/icons/stacks.svg +0 -0
- pygpt_net/data/icons/star.svg +0 -0
- pygpt_net/data/icons/stop.svg +0 -0
- pygpt_net/data/icons/stop_circle.svg +0 -0
- pygpt_net/data/icons/sync.svg +0 -0
- pygpt_net/data/icons/tag.svg +0 -0
- pygpt_net/data/icons/task.svg +0 -0
- pygpt_net/data/icons/terminal.svg +0 -0
- pygpt_net/data/icons/text.svg +0 -0
- pygpt_net/data/icons/textfile.svg +0 -0
- pygpt_net/data/icons/timer.svg +0 -0
- pygpt_net/data/icons/today.svg +0 -0
- pygpt_net/data/icons/tune.svg +0 -0
- pygpt_net/data/icons/undo.svg +0 -0
- pygpt_net/data/icons/update.svg +0 -0
- pygpt_net/data/icons/updater.svg +0 -0
- pygpt_net/data/icons/upload.svg +0 -0
- pygpt_net/data/icons/video.svg +0 -0
- pygpt_net/data/icons/view.svg +0 -0
- pygpt_net/data/icons/voice.svg +0 -0
- pygpt_net/data/icons/volume.svg +0 -0
- pygpt_net/data/icons/warning.svg +0 -0
- pygpt_net/data/icons/webcam.svg +0 -0
- pygpt_net/data/icons/webcam_off.svg +0 -0
- pygpt_net/data/icons/width.svg +0 -0
- pygpt_net/data/icons/window.svg +0 -0
- pygpt_net/data/icons/work.svg +0 -0
- pygpt_net/data/icons/zoom_in.svg +0 -0
- pygpt_net/data/icons/zoom_out.svg +0 -0
- pygpt_net/data/js/app.js +4348 -0
- pygpt_net/data/js/highlight/DIGESTS.md +0 -0
- pygpt_net/data/js/highlight/LICENSE +0 -0
- pygpt_net/data/js/highlight/README.md +0 -0
- pygpt_net/data/js/highlight/es/core.js +0 -0
- pygpt_net/data/js/highlight/es/core.min.js +0 -0
- pygpt_net/data/js/highlight/es/highlight.js +0 -0
- pygpt_net/data/js/highlight/es/highlight.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/1c.js +0 -0
- pygpt_net/data/js/highlight/es/languages/1c.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/abnf.js +0 -0
- pygpt_net/data/js/highlight/es/languages/abnf.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/accesslog.js +0 -0
- pygpt_net/data/js/highlight/es/languages/accesslog.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/actionscript.js +0 -0
- pygpt_net/data/js/highlight/es/languages/actionscript.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ada.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ada.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/angelscript.js +0 -0
- pygpt_net/data/js/highlight/es/languages/angelscript.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/apache.js +0 -0
- pygpt_net/data/js/highlight/es/languages/apache.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/applescript.js +0 -0
- pygpt_net/data/js/highlight/es/languages/applescript.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/arcade.js +0 -0
- pygpt_net/data/js/highlight/es/languages/arcade.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/arduino.js +0 -0
- pygpt_net/data/js/highlight/es/languages/arduino.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/armasm.js +0 -0
- pygpt_net/data/js/highlight/es/languages/armasm.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/asciidoc.js +0 -0
- pygpt_net/data/js/highlight/es/languages/asciidoc.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/aspectj.js +0 -0
- pygpt_net/data/js/highlight/es/languages/aspectj.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/autohotkey.js +0 -0
- pygpt_net/data/js/highlight/es/languages/autohotkey.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/autoit.js +0 -0
- pygpt_net/data/js/highlight/es/languages/autoit.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/avrasm.js +0 -0
- pygpt_net/data/js/highlight/es/languages/avrasm.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/awk.js +0 -0
- pygpt_net/data/js/highlight/es/languages/awk.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/axapta.js +0 -0
- pygpt_net/data/js/highlight/es/languages/axapta.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/bash.js +0 -0
- pygpt_net/data/js/highlight/es/languages/bash.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/basic.js +0 -0
- pygpt_net/data/js/highlight/es/languages/basic.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/bnf.js +0 -0
- pygpt_net/data/js/highlight/es/languages/bnf.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/brainfuck.js +0 -0
- pygpt_net/data/js/highlight/es/languages/brainfuck.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/c.js +0 -0
- pygpt_net/data/js/highlight/es/languages/c.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/cal.js +0 -0
- pygpt_net/data/js/highlight/es/languages/cal.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/capnproto.js +0 -0
- pygpt_net/data/js/highlight/es/languages/capnproto.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ceylon.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ceylon.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/clean.js +0 -0
- pygpt_net/data/js/highlight/es/languages/clean.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/clojure-repl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/clojure-repl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/clojure.js +0 -0
- pygpt_net/data/js/highlight/es/languages/clojure.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/cmake.js +0 -0
- pygpt_net/data/js/highlight/es/languages/cmake.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/coffeescript.js +0 -0
- pygpt_net/data/js/highlight/es/languages/coffeescript.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/coq.js +0 -0
- pygpt_net/data/js/highlight/es/languages/coq.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/cos.js +0 -0
- pygpt_net/data/js/highlight/es/languages/cos.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/cpp.js +0 -0
- pygpt_net/data/js/highlight/es/languages/cpp.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/crmsh.js +0 -0
- pygpt_net/data/js/highlight/es/languages/crmsh.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/crystal.js +0 -0
- pygpt_net/data/js/highlight/es/languages/crystal.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/csharp.js +0 -0
- pygpt_net/data/js/highlight/es/languages/csharp.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/csp.js +0 -0
- pygpt_net/data/js/highlight/es/languages/csp.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/css.js +0 -0
- pygpt_net/data/js/highlight/es/languages/css.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/d.js +0 -0
- pygpt_net/data/js/highlight/es/languages/d.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dart.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dart.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/delphi.js +0 -0
- pygpt_net/data/js/highlight/es/languages/delphi.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/diff.js +0 -0
- pygpt_net/data/js/highlight/es/languages/diff.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/django.js +0 -0
- pygpt_net/data/js/highlight/es/languages/django.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dns.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dns.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dockerfile.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dockerfile.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dos.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dos.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dsconfig.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dsconfig.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dts.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dts.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dust.js +0 -0
- pygpt_net/data/js/highlight/es/languages/dust.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ebnf.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ebnf.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/elixir.js +0 -0
- pygpt_net/data/js/highlight/es/languages/elixir.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/elm.js +0 -0
- pygpt_net/data/js/highlight/es/languages/elm.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/erb.js +0 -0
- pygpt_net/data/js/highlight/es/languages/erb.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/erlang-repl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/erlang-repl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/erlang.js +0 -0
- pygpt_net/data/js/highlight/es/languages/erlang.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/excel.js +0 -0
- pygpt_net/data/js/highlight/es/languages/excel.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/fix.js +0 -0
- pygpt_net/data/js/highlight/es/languages/fix.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/flix.js +0 -0
- pygpt_net/data/js/highlight/es/languages/flix.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/fortran.js +0 -0
- pygpt_net/data/js/highlight/es/languages/fortran.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/fsharp.js +0 -0
- pygpt_net/data/js/highlight/es/languages/fsharp.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/gams.js +0 -0
- pygpt_net/data/js/highlight/es/languages/gams.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/gauss.js +0 -0
- pygpt_net/data/js/highlight/es/languages/gauss.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/gcode.js +0 -0
- pygpt_net/data/js/highlight/es/languages/gcode.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/gherkin.js +0 -0
- pygpt_net/data/js/highlight/es/languages/gherkin.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/glsl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/glsl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/gml.js +0 -0
- pygpt_net/data/js/highlight/es/languages/gml.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/go.js +0 -0
- pygpt_net/data/js/highlight/es/languages/go.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/golo.js +0 -0
- pygpt_net/data/js/highlight/es/languages/golo.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/gradle.js +0 -0
- pygpt_net/data/js/highlight/es/languages/gradle.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/graphql.js +0 -0
- pygpt_net/data/js/highlight/es/languages/graphql.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/groovy.js +0 -0
- pygpt_net/data/js/highlight/es/languages/groovy.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/haml.js +0 -0
- pygpt_net/data/js/highlight/es/languages/haml.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/handlebars.js +0 -0
- pygpt_net/data/js/highlight/es/languages/handlebars.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/haskell.js +0 -0
- pygpt_net/data/js/highlight/es/languages/haskell.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/haxe.js +0 -0
- pygpt_net/data/js/highlight/es/languages/haxe.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/hsp.js +0 -0
- pygpt_net/data/js/highlight/es/languages/hsp.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/http.js +0 -0
- pygpt_net/data/js/highlight/es/languages/http.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/hy.js +0 -0
- pygpt_net/data/js/highlight/es/languages/hy.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/inform7.js +0 -0
- pygpt_net/data/js/highlight/es/languages/inform7.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ini.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ini.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/irpf90.js +0 -0
- pygpt_net/data/js/highlight/es/languages/irpf90.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/isbl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/isbl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/java.js +0 -0
- pygpt_net/data/js/highlight/es/languages/java.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/javascript.js +0 -0
- pygpt_net/data/js/highlight/es/languages/javascript.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/jboss-cli.js +0 -0
- pygpt_net/data/js/highlight/es/languages/jboss-cli.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/json.js +0 -0
- pygpt_net/data/js/highlight/es/languages/json.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/julia-repl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/julia-repl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/julia.js +0 -0
- pygpt_net/data/js/highlight/es/languages/julia.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/kotlin.js +0 -0
- pygpt_net/data/js/highlight/es/languages/kotlin.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/lasso.js +0 -0
- pygpt_net/data/js/highlight/es/languages/lasso.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/latex.js +0 -0
- pygpt_net/data/js/highlight/es/languages/latex.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ldif.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ldif.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/leaf.js +0 -0
- pygpt_net/data/js/highlight/es/languages/leaf.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/less.js +0 -0
- pygpt_net/data/js/highlight/es/languages/less.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/lisp.js +0 -0
- pygpt_net/data/js/highlight/es/languages/lisp.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/livecodeserver.js +0 -0
- pygpt_net/data/js/highlight/es/languages/livecodeserver.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/livescript.js +0 -0
- pygpt_net/data/js/highlight/es/languages/livescript.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/llvm.js +0 -0
- pygpt_net/data/js/highlight/es/languages/llvm.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/lsl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/lsl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/lua.js +0 -0
- pygpt_net/data/js/highlight/es/languages/lua.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/makefile.js +0 -0
- pygpt_net/data/js/highlight/es/languages/makefile.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/markdown.js +0 -0
- pygpt_net/data/js/highlight/es/languages/markdown.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/mathematica.js +0 -0
- pygpt_net/data/js/highlight/es/languages/mathematica.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/matlab.js +0 -0
- pygpt_net/data/js/highlight/es/languages/matlab.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/maxima.js +0 -0
- pygpt_net/data/js/highlight/es/languages/maxima.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/mel.js +0 -0
- pygpt_net/data/js/highlight/es/languages/mel.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/mercury.js +0 -0
- pygpt_net/data/js/highlight/es/languages/mercury.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/mipsasm.js +0 -0
- pygpt_net/data/js/highlight/es/languages/mipsasm.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/mizar.js +0 -0
- pygpt_net/data/js/highlight/es/languages/mizar.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/mojolicious.js +0 -0
- pygpt_net/data/js/highlight/es/languages/mojolicious.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/monkey.js +0 -0
- pygpt_net/data/js/highlight/es/languages/monkey.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/moonscript.js +0 -0
- pygpt_net/data/js/highlight/es/languages/moonscript.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/n1ql.js +0 -0
- pygpt_net/data/js/highlight/es/languages/n1ql.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/nestedtext.js +0 -0
- pygpt_net/data/js/highlight/es/languages/nestedtext.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/nginx.js +0 -0
- pygpt_net/data/js/highlight/es/languages/nginx.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/nim.js +0 -0
- pygpt_net/data/js/highlight/es/languages/nim.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/nix.js +0 -0
- pygpt_net/data/js/highlight/es/languages/nix.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/node-repl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/node-repl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/nsis.js +0 -0
- pygpt_net/data/js/highlight/es/languages/nsis.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/objectivec.js +0 -0
- pygpt_net/data/js/highlight/es/languages/objectivec.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ocaml.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ocaml.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/openscad.js +0 -0
- pygpt_net/data/js/highlight/es/languages/openscad.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/oxygene.js +0 -0
- pygpt_net/data/js/highlight/es/languages/oxygene.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/parser3.js +0 -0
- pygpt_net/data/js/highlight/es/languages/parser3.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/perl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/perl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/pf.js +0 -0
- pygpt_net/data/js/highlight/es/languages/pf.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/pgsql.js +0 -0
- pygpt_net/data/js/highlight/es/languages/pgsql.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/php-template.js +0 -0
- pygpt_net/data/js/highlight/es/languages/php-template.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/php.js +0 -0
- pygpt_net/data/js/highlight/es/languages/php.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/plaintext.js +0 -0
- pygpt_net/data/js/highlight/es/languages/plaintext.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/pony.js +0 -0
- pygpt_net/data/js/highlight/es/languages/pony.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/powershell.js +0 -0
- pygpt_net/data/js/highlight/es/languages/powershell.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/processing.js +0 -0
- pygpt_net/data/js/highlight/es/languages/processing.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/profile.js +0 -0
- pygpt_net/data/js/highlight/es/languages/profile.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/prolog.js +0 -0
- pygpt_net/data/js/highlight/es/languages/prolog.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/properties.js +0 -0
- pygpt_net/data/js/highlight/es/languages/properties.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/protobuf.js +0 -0
- pygpt_net/data/js/highlight/es/languages/protobuf.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/puppet.js +0 -0
- pygpt_net/data/js/highlight/es/languages/puppet.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/purebasic.js +0 -0
- pygpt_net/data/js/highlight/es/languages/purebasic.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/python-repl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/python-repl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/python.js +0 -0
- pygpt_net/data/js/highlight/es/languages/python.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/q.js +0 -0
- pygpt_net/data/js/highlight/es/languages/q.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/qml.js +0 -0
- pygpt_net/data/js/highlight/es/languages/qml.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/r.js +0 -0
- pygpt_net/data/js/highlight/es/languages/r.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/reasonml.js +0 -0
- pygpt_net/data/js/highlight/es/languages/reasonml.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/rib.js +0 -0
- pygpt_net/data/js/highlight/es/languages/rib.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/roboconf.js +0 -0
- pygpt_net/data/js/highlight/es/languages/roboconf.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/routeros.js +0 -0
- pygpt_net/data/js/highlight/es/languages/routeros.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/rsl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/rsl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ruby.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ruby.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ruleslanguage.js +0 -0
- pygpt_net/data/js/highlight/es/languages/ruleslanguage.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/rust.js +0 -0
- pygpt_net/data/js/highlight/es/languages/rust.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/sas.js +0 -0
- pygpt_net/data/js/highlight/es/languages/sas.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/scala.js +0 -0
- pygpt_net/data/js/highlight/es/languages/scala.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/scheme.js +0 -0
- pygpt_net/data/js/highlight/es/languages/scheme.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/scilab.js +0 -0
- pygpt_net/data/js/highlight/es/languages/scilab.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/scss.js +0 -0
- pygpt_net/data/js/highlight/es/languages/scss.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/shell.js +0 -0
- pygpt_net/data/js/highlight/es/languages/shell.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/smali.js +0 -0
- pygpt_net/data/js/highlight/es/languages/smali.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/smalltalk.js +0 -0
- pygpt_net/data/js/highlight/es/languages/smalltalk.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/sml.js +0 -0
- pygpt_net/data/js/highlight/es/languages/sml.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/sqf.js +0 -0
- pygpt_net/data/js/highlight/es/languages/sqf.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/sql.js +0 -0
- pygpt_net/data/js/highlight/es/languages/sql.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/stan.js +0 -0
- pygpt_net/data/js/highlight/es/languages/stan.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/stata.js +0 -0
- pygpt_net/data/js/highlight/es/languages/stata.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/step21.js +0 -0
- pygpt_net/data/js/highlight/es/languages/step21.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/stylus.js +0 -0
- pygpt_net/data/js/highlight/es/languages/stylus.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/subunit.js +0 -0
- pygpt_net/data/js/highlight/es/languages/subunit.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/swift.js +0 -0
- pygpt_net/data/js/highlight/es/languages/swift.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/taggerscript.js +0 -0
- pygpt_net/data/js/highlight/es/languages/taggerscript.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/tap.js +0 -0
- pygpt_net/data/js/highlight/es/languages/tap.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/tcl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/tcl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/thrift.js +0 -0
- pygpt_net/data/js/highlight/es/languages/thrift.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/tp.js +0 -0
- pygpt_net/data/js/highlight/es/languages/tp.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/twig.js +0 -0
- pygpt_net/data/js/highlight/es/languages/twig.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/typescript.js +0 -0
- pygpt_net/data/js/highlight/es/languages/typescript.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/vala.js +0 -0
- pygpt_net/data/js/highlight/es/languages/vala.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/vbnet.js +0 -0
- pygpt_net/data/js/highlight/es/languages/vbnet.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/vbscript-html.js +0 -0
- pygpt_net/data/js/highlight/es/languages/vbscript-html.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/vbscript.js +0 -0
- pygpt_net/data/js/highlight/es/languages/vbscript.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/verilog.js +0 -0
- pygpt_net/data/js/highlight/es/languages/verilog.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/vhdl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/vhdl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/vim.js +0 -0
- pygpt_net/data/js/highlight/es/languages/vim.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/wasm.js +0 -0
- pygpt_net/data/js/highlight/es/languages/wasm.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/wren.js +0 -0
- pygpt_net/data/js/highlight/es/languages/wren.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/x86asm.js +0 -0
- pygpt_net/data/js/highlight/es/languages/x86asm.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/xl.js +0 -0
- pygpt_net/data/js/highlight/es/languages/xl.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/xml.js +0 -0
- pygpt_net/data/js/highlight/es/languages/xml.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/xquery.js +0 -0
- pygpt_net/data/js/highlight/es/languages/xquery.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/yaml.js +0 -0
- pygpt_net/data/js/highlight/es/languages/yaml.min.js +0 -0
- pygpt_net/data/js/highlight/es/languages/zephir.js +0 -0
- pygpt_net/data/js/highlight/es/languages/zephir.min.js +0 -0
- pygpt_net/data/js/highlight/es/package.json +0 -0
- pygpt_net/data/js/highlight/highlight.js +0 -0
- pygpt_net/data/js/highlight/highlight.min.js +0 -0
- pygpt_net/data/js/highlight/languages/1c.js +0 -0
- pygpt_net/data/js/highlight/languages/1c.min.js +0 -0
- pygpt_net/data/js/highlight/languages/abnf.js +0 -0
- pygpt_net/data/js/highlight/languages/abnf.min.js +0 -0
- pygpt_net/data/js/highlight/languages/accesslog.js +0 -0
- pygpt_net/data/js/highlight/languages/accesslog.min.js +0 -0
- pygpt_net/data/js/highlight/languages/actionscript.js +0 -0
- pygpt_net/data/js/highlight/languages/actionscript.min.js +0 -0
- pygpt_net/data/js/highlight/languages/ada.js +0 -0
- pygpt_net/data/js/highlight/languages/ada.min.js +0 -0
- pygpt_net/data/js/highlight/languages/angelscript.js +0 -0
- pygpt_net/data/js/highlight/languages/angelscript.min.js +0 -0
- pygpt_net/data/js/highlight/languages/apache.js +0 -0
- pygpt_net/data/js/highlight/languages/apache.min.js +0 -0
- pygpt_net/data/js/highlight/languages/applescript.js +0 -0
- pygpt_net/data/js/highlight/languages/applescript.min.js +0 -0
- pygpt_net/data/js/highlight/languages/arcade.js +0 -0
- pygpt_net/data/js/highlight/languages/arcade.min.js +0 -0
- pygpt_net/data/js/highlight/languages/arduino.js +0 -0
- pygpt_net/data/js/highlight/languages/arduino.min.js +0 -0
- pygpt_net/data/js/highlight/languages/armasm.js +0 -0
- pygpt_net/data/js/highlight/languages/armasm.min.js +0 -0
- pygpt_net/data/js/highlight/languages/asciidoc.js +0 -0
- pygpt_net/data/js/highlight/languages/asciidoc.min.js +0 -0
- pygpt_net/data/js/highlight/languages/aspectj.js +0 -0
- pygpt_net/data/js/highlight/languages/aspectj.min.js +0 -0
- pygpt_net/data/js/highlight/languages/autohotkey.js +0 -0
- pygpt_net/data/js/highlight/languages/autohotkey.min.js +0 -0
- pygpt_net/data/js/highlight/languages/autoit.js +0 -0
- pygpt_net/data/js/highlight/languages/autoit.min.js +0 -0
- pygpt_net/data/js/highlight/languages/avrasm.js +0 -0
- pygpt_net/data/js/highlight/languages/avrasm.min.js +0 -0
- pygpt_net/data/js/highlight/languages/awk.js +0 -0
- pygpt_net/data/js/highlight/languages/awk.min.js +0 -0
- pygpt_net/data/js/highlight/languages/axapta.js +0 -0
- pygpt_net/data/js/highlight/languages/axapta.min.js +0 -0
- pygpt_net/data/js/highlight/languages/bash.js +0 -0
- pygpt_net/data/js/highlight/languages/bash.min.js +0 -0
- pygpt_net/data/js/highlight/languages/basic.js +0 -0
- pygpt_net/data/js/highlight/languages/basic.min.js +0 -0
- pygpt_net/data/js/highlight/languages/bnf.js +0 -0
- pygpt_net/data/js/highlight/languages/bnf.min.js +0 -0
- pygpt_net/data/js/highlight/languages/brainfuck.js +0 -0
- pygpt_net/data/js/highlight/languages/brainfuck.min.js +0 -0
- pygpt_net/data/js/highlight/languages/c.js +0 -0
- pygpt_net/data/js/highlight/languages/c.min.js +0 -0
- pygpt_net/data/js/highlight/languages/cal.js +0 -0
- pygpt_net/data/js/highlight/languages/cal.min.js +0 -0
- pygpt_net/data/js/highlight/languages/capnproto.js +0 -0
- pygpt_net/data/js/highlight/languages/capnproto.min.js +0 -0
- pygpt_net/data/js/highlight/languages/ceylon.js +0 -0
- pygpt_net/data/js/highlight/languages/ceylon.min.js +0 -0
- pygpt_net/data/js/highlight/languages/clean.js +0 -0
- pygpt_net/data/js/highlight/languages/clean.min.js +0 -0
- pygpt_net/data/js/highlight/languages/clojure-repl.js +0 -0
- pygpt_net/data/js/highlight/languages/clojure-repl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/clojure.js +0 -0
- pygpt_net/data/js/highlight/languages/clojure.min.js +0 -0
- pygpt_net/data/js/highlight/languages/cmake.js +0 -0
- pygpt_net/data/js/highlight/languages/cmake.min.js +0 -0
- pygpt_net/data/js/highlight/languages/coffeescript.js +0 -0
- pygpt_net/data/js/highlight/languages/coffeescript.min.js +0 -0
- pygpt_net/data/js/highlight/languages/coq.js +0 -0
- pygpt_net/data/js/highlight/languages/coq.min.js +0 -0
- pygpt_net/data/js/highlight/languages/cos.js +0 -0
- pygpt_net/data/js/highlight/languages/cos.min.js +0 -0
- pygpt_net/data/js/highlight/languages/cpp.js +0 -0
- pygpt_net/data/js/highlight/languages/cpp.min.js +0 -0
- pygpt_net/data/js/highlight/languages/crmsh.js +0 -0
- pygpt_net/data/js/highlight/languages/crmsh.min.js +0 -0
- pygpt_net/data/js/highlight/languages/crystal.js +0 -0
- pygpt_net/data/js/highlight/languages/crystal.min.js +0 -0
- pygpt_net/data/js/highlight/languages/csharp.js +0 -0
- pygpt_net/data/js/highlight/languages/csharp.min.js +0 -0
- pygpt_net/data/js/highlight/languages/csp.js +0 -0
- pygpt_net/data/js/highlight/languages/csp.min.js +0 -0
- pygpt_net/data/js/highlight/languages/css.js +0 -0
- pygpt_net/data/js/highlight/languages/css.min.js +0 -0
- pygpt_net/data/js/highlight/languages/d.js +0 -0
- pygpt_net/data/js/highlight/languages/d.min.js +0 -0
- pygpt_net/data/js/highlight/languages/dart.js +0 -0
- pygpt_net/data/js/highlight/languages/dart.min.js +0 -0
- pygpt_net/data/js/highlight/languages/delphi.js +0 -0
- pygpt_net/data/js/highlight/languages/delphi.min.js +0 -0
- pygpt_net/data/js/highlight/languages/diff.js +0 -0
- pygpt_net/data/js/highlight/languages/diff.min.js +0 -0
- pygpt_net/data/js/highlight/languages/django.js +0 -0
- pygpt_net/data/js/highlight/languages/django.min.js +0 -0
- pygpt_net/data/js/highlight/languages/dns.js +0 -0
- pygpt_net/data/js/highlight/languages/dns.min.js +0 -0
- pygpt_net/data/js/highlight/languages/dockerfile.js +0 -0
- pygpt_net/data/js/highlight/languages/dockerfile.min.js +0 -0
- pygpt_net/data/js/highlight/languages/dos.js +0 -0
- pygpt_net/data/js/highlight/languages/dos.min.js +0 -0
- pygpt_net/data/js/highlight/languages/dsconfig.js +0 -0
- pygpt_net/data/js/highlight/languages/dsconfig.min.js +0 -0
- pygpt_net/data/js/highlight/languages/dts.js +0 -0
- pygpt_net/data/js/highlight/languages/dts.min.js +0 -0
- pygpt_net/data/js/highlight/languages/dust.js +0 -0
- pygpt_net/data/js/highlight/languages/dust.min.js +0 -0
- pygpt_net/data/js/highlight/languages/ebnf.js +0 -0
- pygpt_net/data/js/highlight/languages/ebnf.min.js +0 -0
- pygpt_net/data/js/highlight/languages/elixir.js +0 -0
- pygpt_net/data/js/highlight/languages/elixir.min.js +0 -0
- pygpt_net/data/js/highlight/languages/elm.js +0 -0
- pygpt_net/data/js/highlight/languages/elm.min.js +0 -0
- pygpt_net/data/js/highlight/languages/erb.js +0 -0
- pygpt_net/data/js/highlight/languages/erb.min.js +0 -0
- pygpt_net/data/js/highlight/languages/erlang-repl.js +0 -0
- pygpt_net/data/js/highlight/languages/erlang-repl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/erlang.js +0 -0
- pygpt_net/data/js/highlight/languages/erlang.min.js +0 -0
- pygpt_net/data/js/highlight/languages/excel.js +0 -0
- pygpt_net/data/js/highlight/languages/excel.min.js +0 -0
- pygpt_net/data/js/highlight/languages/fix.js +0 -0
- pygpt_net/data/js/highlight/languages/fix.min.js +0 -0
- pygpt_net/data/js/highlight/languages/flix.js +0 -0
- pygpt_net/data/js/highlight/languages/flix.min.js +0 -0
- pygpt_net/data/js/highlight/languages/fortran.js +0 -0
- pygpt_net/data/js/highlight/languages/fortran.min.js +0 -0
- pygpt_net/data/js/highlight/languages/fsharp.js +0 -0
- pygpt_net/data/js/highlight/languages/fsharp.min.js +0 -0
- pygpt_net/data/js/highlight/languages/gams.js +0 -0
- pygpt_net/data/js/highlight/languages/gams.min.js +0 -0
- pygpt_net/data/js/highlight/languages/gauss.js +0 -0
- pygpt_net/data/js/highlight/languages/gauss.min.js +0 -0
- pygpt_net/data/js/highlight/languages/gcode.js +0 -0
- pygpt_net/data/js/highlight/languages/gcode.min.js +0 -0
- pygpt_net/data/js/highlight/languages/gherkin.js +0 -0
- pygpt_net/data/js/highlight/languages/gherkin.min.js +0 -0
- pygpt_net/data/js/highlight/languages/glsl.js +0 -0
- pygpt_net/data/js/highlight/languages/glsl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/gml.js +0 -0
- pygpt_net/data/js/highlight/languages/gml.min.js +0 -0
- pygpt_net/data/js/highlight/languages/go.js +0 -0
- pygpt_net/data/js/highlight/languages/go.min.js +0 -0
- pygpt_net/data/js/highlight/languages/golo.js +0 -0
- pygpt_net/data/js/highlight/languages/golo.min.js +0 -0
- pygpt_net/data/js/highlight/languages/gradle.js +0 -0
- pygpt_net/data/js/highlight/languages/gradle.min.js +0 -0
- pygpt_net/data/js/highlight/languages/graphql.js +0 -0
- pygpt_net/data/js/highlight/languages/graphql.min.js +0 -0
- pygpt_net/data/js/highlight/languages/groovy.js +0 -0
- pygpt_net/data/js/highlight/languages/groovy.min.js +0 -0
- pygpt_net/data/js/highlight/languages/haml.js +0 -0
- pygpt_net/data/js/highlight/languages/haml.min.js +0 -0
- pygpt_net/data/js/highlight/languages/handlebars.js +0 -0
- pygpt_net/data/js/highlight/languages/handlebars.min.js +0 -0
- pygpt_net/data/js/highlight/languages/haskell.js +0 -0
- pygpt_net/data/js/highlight/languages/haskell.min.js +0 -0
- pygpt_net/data/js/highlight/languages/haxe.js +0 -0
- pygpt_net/data/js/highlight/languages/haxe.min.js +0 -0
- pygpt_net/data/js/highlight/languages/hsp.js +0 -0
- pygpt_net/data/js/highlight/languages/hsp.min.js +0 -0
- pygpt_net/data/js/highlight/languages/http.js +0 -0
- pygpt_net/data/js/highlight/languages/http.min.js +0 -0
- pygpt_net/data/js/highlight/languages/hy.js +0 -0
- pygpt_net/data/js/highlight/languages/hy.min.js +0 -0
- pygpt_net/data/js/highlight/languages/inform7.js +0 -0
- pygpt_net/data/js/highlight/languages/inform7.min.js +0 -0
- pygpt_net/data/js/highlight/languages/ini.js +0 -0
- pygpt_net/data/js/highlight/languages/ini.min.js +0 -0
- pygpt_net/data/js/highlight/languages/irpf90.js +0 -0
- pygpt_net/data/js/highlight/languages/irpf90.min.js +0 -0
- pygpt_net/data/js/highlight/languages/isbl.js +0 -0
- pygpt_net/data/js/highlight/languages/isbl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/java.js +0 -0
- pygpt_net/data/js/highlight/languages/java.min.js +0 -0
- pygpt_net/data/js/highlight/languages/javascript.js +0 -0
- pygpt_net/data/js/highlight/languages/javascript.min.js +0 -0
- pygpt_net/data/js/highlight/languages/jboss-cli.js +0 -0
- pygpt_net/data/js/highlight/languages/jboss-cli.min.js +0 -0
- pygpt_net/data/js/highlight/languages/json.js +0 -0
- pygpt_net/data/js/highlight/languages/json.min.js +0 -0
- pygpt_net/data/js/highlight/languages/julia-repl.js +0 -0
- pygpt_net/data/js/highlight/languages/julia-repl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/julia.js +0 -0
- pygpt_net/data/js/highlight/languages/julia.min.js +0 -0
- pygpt_net/data/js/highlight/languages/kotlin.js +0 -0
- pygpt_net/data/js/highlight/languages/kotlin.min.js +0 -0
- pygpt_net/data/js/highlight/languages/lasso.js +0 -0
- pygpt_net/data/js/highlight/languages/lasso.min.js +0 -0
- pygpt_net/data/js/highlight/languages/latex.js +0 -0
- pygpt_net/data/js/highlight/languages/latex.min.js +0 -0
- pygpt_net/data/js/highlight/languages/ldif.js +0 -0
- pygpt_net/data/js/highlight/languages/ldif.min.js +0 -0
- pygpt_net/data/js/highlight/languages/leaf.js +0 -0
- pygpt_net/data/js/highlight/languages/leaf.min.js +0 -0
- pygpt_net/data/js/highlight/languages/less.js +0 -0
- pygpt_net/data/js/highlight/languages/less.min.js +0 -0
- pygpt_net/data/js/highlight/languages/lisp.js +0 -0
- pygpt_net/data/js/highlight/languages/lisp.min.js +0 -0
- pygpt_net/data/js/highlight/languages/livecodeserver.js +0 -0
- pygpt_net/data/js/highlight/languages/livecodeserver.min.js +0 -0
- pygpt_net/data/js/highlight/languages/livescript.js +0 -0
- pygpt_net/data/js/highlight/languages/livescript.min.js +0 -0
- pygpt_net/data/js/highlight/languages/llvm.js +0 -0
- pygpt_net/data/js/highlight/languages/llvm.min.js +0 -0
- pygpt_net/data/js/highlight/languages/lsl.js +0 -0
- pygpt_net/data/js/highlight/languages/lsl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/lua.js +0 -0
- pygpt_net/data/js/highlight/languages/lua.min.js +0 -0
- pygpt_net/data/js/highlight/languages/makefile.js +0 -0
- pygpt_net/data/js/highlight/languages/makefile.min.js +0 -0
- pygpt_net/data/js/highlight/languages/markdown.js +0 -0
- pygpt_net/data/js/highlight/languages/markdown.min.js +0 -0
- pygpt_net/data/js/highlight/languages/mathematica.js +0 -0
- pygpt_net/data/js/highlight/languages/mathematica.min.js +0 -0
- pygpt_net/data/js/highlight/languages/matlab.js +0 -0
- pygpt_net/data/js/highlight/languages/matlab.min.js +0 -0
- pygpt_net/data/js/highlight/languages/maxima.js +0 -0
- pygpt_net/data/js/highlight/languages/maxima.min.js +0 -0
- pygpt_net/data/js/highlight/languages/mel.js +0 -0
- pygpt_net/data/js/highlight/languages/mel.min.js +0 -0
- pygpt_net/data/js/highlight/languages/mercury.js +0 -0
- pygpt_net/data/js/highlight/languages/mercury.min.js +0 -0
- pygpt_net/data/js/highlight/languages/mipsasm.js +0 -0
- pygpt_net/data/js/highlight/languages/mipsasm.min.js +0 -0
- pygpt_net/data/js/highlight/languages/mizar.js +0 -0
- pygpt_net/data/js/highlight/languages/mizar.min.js +0 -0
- pygpt_net/data/js/highlight/languages/mojolicious.js +0 -0
- pygpt_net/data/js/highlight/languages/mojolicious.min.js +0 -0
- pygpt_net/data/js/highlight/languages/monkey.js +0 -0
- pygpt_net/data/js/highlight/languages/monkey.min.js +0 -0
- pygpt_net/data/js/highlight/languages/moonscript.js +0 -0
- pygpt_net/data/js/highlight/languages/moonscript.min.js +0 -0
- pygpt_net/data/js/highlight/languages/n1ql.js +0 -0
- pygpt_net/data/js/highlight/languages/n1ql.min.js +0 -0
- pygpt_net/data/js/highlight/languages/nestedtext.js +0 -0
- pygpt_net/data/js/highlight/languages/nestedtext.min.js +0 -0
- pygpt_net/data/js/highlight/languages/nginx.js +0 -0
- pygpt_net/data/js/highlight/languages/nginx.min.js +0 -0
- pygpt_net/data/js/highlight/languages/nim.js +0 -0
- pygpt_net/data/js/highlight/languages/nim.min.js +0 -0
- pygpt_net/data/js/highlight/languages/nix.js +0 -0
- pygpt_net/data/js/highlight/languages/nix.min.js +0 -0
- pygpt_net/data/js/highlight/languages/node-repl.js +0 -0
- pygpt_net/data/js/highlight/languages/node-repl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/nsis.js +0 -0
- pygpt_net/data/js/highlight/languages/nsis.min.js +0 -0
- pygpt_net/data/js/highlight/languages/objectivec.js +0 -0
- pygpt_net/data/js/highlight/languages/objectivec.min.js +0 -0
- pygpt_net/data/js/highlight/languages/ocaml.js +0 -0
- pygpt_net/data/js/highlight/languages/ocaml.min.js +0 -0
- pygpt_net/data/js/highlight/languages/openscad.js +0 -0
- pygpt_net/data/js/highlight/languages/openscad.min.js +0 -0
- pygpt_net/data/js/highlight/languages/oxygene.js +0 -0
- pygpt_net/data/js/highlight/languages/oxygene.min.js +0 -0
- pygpt_net/data/js/highlight/languages/parser3.js +0 -0
- pygpt_net/data/js/highlight/languages/parser3.min.js +0 -0
- pygpt_net/data/js/highlight/languages/perl.js +0 -0
- pygpt_net/data/js/highlight/languages/perl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/pf.js +0 -0
- pygpt_net/data/js/highlight/languages/pf.min.js +0 -0
- pygpt_net/data/js/highlight/languages/pgsql.js +0 -0
- pygpt_net/data/js/highlight/languages/pgsql.min.js +0 -0
- pygpt_net/data/js/highlight/languages/php-template.js +0 -0
- pygpt_net/data/js/highlight/languages/php-template.min.js +0 -0
- pygpt_net/data/js/highlight/languages/php.js +0 -0
- pygpt_net/data/js/highlight/languages/php.min.js +0 -0
- pygpt_net/data/js/highlight/languages/plaintext.js +0 -0
- pygpt_net/data/js/highlight/languages/plaintext.min.js +0 -0
- pygpt_net/data/js/highlight/languages/pony.js +0 -0
- pygpt_net/data/js/highlight/languages/pony.min.js +0 -0
- pygpt_net/data/js/highlight/languages/powershell.js +0 -0
- pygpt_net/data/js/highlight/languages/powershell.min.js +0 -0
- pygpt_net/data/js/highlight/languages/processing.js +0 -0
- pygpt_net/data/js/highlight/languages/processing.min.js +0 -0
- pygpt_net/data/js/highlight/languages/profile.js +0 -0
- pygpt_net/data/js/highlight/languages/profile.min.js +0 -0
- pygpt_net/data/js/highlight/languages/prolog.js +0 -0
- pygpt_net/data/js/highlight/languages/prolog.min.js +0 -0
- pygpt_net/data/js/highlight/languages/properties.js +0 -0
- pygpt_net/data/js/highlight/languages/properties.min.js +0 -0
- pygpt_net/data/js/highlight/languages/protobuf.js +0 -0
- pygpt_net/data/js/highlight/languages/protobuf.min.js +0 -0
- pygpt_net/data/js/highlight/languages/puppet.js +0 -0
- pygpt_net/data/js/highlight/languages/puppet.min.js +0 -0
- pygpt_net/data/js/highlight/languages/purebasic.js +0 -0
- pygpt_net/data/js/highlight/languages/purebasic.min.js +0 -0
- pygpt_net/data/js/highlight/languages/python-repl.js +0 -0
- pygpt_net/data/js/highlight/languages/python-repl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/python.js +0 -0
- pygpt_net/data/js/highlight/languages/python.min.js +0 -0
- pygpt_net/data/js/highlight/languages/q.js +0 -0
- pygpt_net/data/js/highlight/languages/q.min.js +0 -0
- pygpt_net/data/js/highlight/languages/qml.js +0 -0
- pygpt_net/data/js/highlight/languages/qml.min.js +0 -0
- pygpt_net/data/js/highlight/languages/r.js +0 -0
- pygpt_net/data/js/highlight/languages/r.min.js +0 -0
- pygpt_net/data/js/highlight/languages/reasonml.js +0 -0
- pygpt_net/data/js/highlight/languages/reasonml.min.js +0 -0
- pygpt_net/data/js/highlight/languages/rib.js +0 -0
- pygpt_net/data/js/highlight/languages/rib.min.js +0 -0
- pygpt_net/data/js/highlight/languages/roboconf.js +0 -0
- pygpt_net/data/js/highlight/languages/roboconf.min.js +0 -0
- pygpt_net/data/js/highlight/languages/routeros.js +0 -0
- pygpt_net/data/js/highlight/languages/routeros.min.js +0 -0
- pygpt_net/data/js/highlight/languages/rsl.js +0 -0
- pygpt_net/data/js/highlight/languages/rsl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/ruby.js +0 -0
- pygpt_net/data/js/highlight/languages/ruby.min.js +0 -0
- pygpt_net/data/js/highlight/languages/ruleslanguage.js +0 -0
- pygpt_net/data/js/highlight/languages/ruleslanguage.min.js +0 -0
- pygpt_net/data/js/highlight/languages/rust.js +0 -0
- pygpt_net/data/js/highlight/languages/rust.min.js +0 -0
- pygpt_net/data/js/highlight/languages/sas.js +0 -0
- pygpt_net/data/js/highlight/languages/sas.min.js +0 -0
- pygpt_net/data/js/highlight/languages/scala.js +0 -0
- pygpt_net/data/js/highlight/languages/scala.min.js +0 -0
- pygpt_net/data/js/highlight/languages/scheme.js +0 -0
- pygpt_net/data/js/highlight/languages/scheme.min.js +0 -0
- pygpt_net/data/js/highlight/languages/scilab.js +0 -0
- pygpt_net/data/js/highlight/languages/scilab.min.js +0 -0
- pygpt_net/data/js/highlight/languages/scss.js +0 -0
- pygpt_net/data/js/highlight/languages/scss.min.js +0 -0
- pygpt_net/data/js/highlight/languages/shell.js +0 -0
- pygpt_net/data/js/highlight/languages/shell.min.js +0 -0
- pygpt_net/data/js/highlight/languages/smali.js +0 -0
- pygpt_net/data/js/highlight/languages/smali.min.js +0 -0
- pygpt_net/data/js/highlight/languages/smalltalk.js +0 -0
- pygpt_net/data/js/highlight/languages/smalltalk.min.js +0 -0
- pygpt_net/data/js/highlight/languages/sml.js +0 -0
- pygpt_net/data/js/highlight/languages/sml.min.js +0 -0
- pygpt_net/data/js/highlight/languages/sqf.js +0 -0
- pygpt_net/data/js/highlight/languages/sqf.min.js +0 -0
- pygpt_net/data/js/highlight/languages/sql.js +0 -0
- pygpt_net/data/js/highlight/languages/sql.min.js +0 -0
- pygpt_net/data/js/highlight/languages/stan.js +0 -0
- pygpt_net/data/js/highlight/languages/stan.min.js +0 -0
- pygpt_net/data/js/highlight/languages/stata.js +0 -0
- pygpt_net/data/js/highlight/languages/stata.min.js +0 -0
- pygpt_net/data/js/highlight/languages/step21.js +0 -0
- pygpt_net/data/js/highlight/languages/step21.min.js +0 -0
- pygpt_net/data/js/highlight/languages/stylus.js +0 -0
- pygpt_net/data/js/highlight/languages/stylus.min.js +0 -0
- pygpt_net/data/js/highlight/languages/subunit.js +0 -0
- pygpt_net/data/js/highlight/languages/subunit.min.js +0 -0
- pygpt_net/data/js/highlight/languages/swift.js +0 -0
- pygpt_net/data/js/highlight/languages/swift.min.js +0 -0
- pygpt_net/data/js/highlight/languages/taggerscript.js +0 -0
- pygpt_net/data/js/highlight/languages/taggerscript.min.js +0 -0
- pygpt_net/data/js/highlight/languages/tap.js +0 -0
- pygpt_net/data/js/highlight/languages/tap.min.js +0 -0
- pygpt_net/data/js/highlight/languages/tcl.js +0 -0
- pygpt_net/data/js/highlight/languages/tcl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/thrift.js +0 -0
- pygpt_net/data/js/highlight/languages/thrift.min.js +0 -0
- pygpt_net/data/js/highlight/languages/tp.js +0 -0
- pygpt_net/data/js/highlight/languages/tp.min.js +0 -0
- pygpt_net/data/js/highlight/languages/twig.js +0 -0
- pygpt_net/data/js/highlight/languages/twig.min.js +0 -0
- pygpt_net/data/js/highlight/languages/typescript.js +0 -0
- pygpt_net/data/js/highlight/languages/typescript.min.js +0 -0
- pygpt_net/data/js/highlight/languages/vala.js +0 -0
- pygpt_net/data/js/highlight/languages/vala.min.js +0 -0
- pygpt_net/data/js/highlight/languages/vbnet.js +0 -0
- pygpt_net/data/js/highlight/languages/vbnet.min.js +0 -0
- pygpt_net/data/js/highlight/languages/vbscript-html.js +0 -0
- pygpt_net/data/js/highlight/languages/vbscript-html.min.js +0 -0
- pygpt_net/data/js/highlight/languages/vbscript.js +0 -0
- pygpt_net/data/js/highlight/languages/vbscript.min.js +0 -0
- pygpt_net/data/js/highlight/languages/verilog.js +0 -0
- pygpt_net/data/js/highlight/languages/verilog.min.js +0 -0
- pygpt_net/data/js/highlight/languages/vhdl.js +0 -0
- pygpt_net/data/js/highlight/languages/vhdl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/vim.js +0 -0
- pygpt_net/data/js/highlight/languages/vim.min.js +0 -0
- pygpt_net/data/js/highlight/languages/wasm.js +0 -0
- pygpt_net/data/js/highlight/languages/wasm.min.js +0 -0
- pygpt_net/data/js/highlight/languages/wren.js +0 -0
- pygpt_net/data/js/highlight/languages/wren.min.js +0 -0
- pygpt_net/data/js/highlight/languages/x86asm.js +0 -0
- pygpt_net/data/js/highlight/languages/x86asm.min.js +0 -0
- pygpt_net/data/js/highlight/languages/xl.js +0 -0
- pygpt_net/data/js/highlight/languages/xl.min.js +0 -0
- pygpt_net/data/js/highlight/languages/xml.js +0 -0
- pygpt_net/data/js/highlight/languages/xml.min.js +0 -0
- pygpt_net/data/js/highlight/languages/xquery.js +0 -0
- pygpt_net/data/js/highlight/languages/xquery.min.js +0 -0
- pygpt_net/data/js/highlight/languages/yaml.js +0 -0
- pygpt_net/data/js/highlight/languages/yaml.min.js +0 -0
- pygpt_net/data/js/highlight/languages/zephir.js +0 -0
- pygpt_net/data/js/highlight/languages/zephir.min.js +0 -0
- pygpt_net/data/js/highlight/package.json +0 -0
- pygpt_net/data/js/highlight/styles/1c-light.css +0 -0
- pygpt_net/data/js/highlight/styles/1c-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/a11y-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/a11y-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/a11y-light.css +0 -0
- pygpt_net/data/js/highlight/styles/a11y-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/agate.css +0 -0
- pygpt_net/data/js/highlight/styles/agate.min.css +0 -0
- pygpt_net/data/js/highlight/styles/an-old-hope.css +0 -0
- pygpt_net/data/js/highlight/styles/an-old-hope.min.css +0 -0
- pygpt_net/data/js/highlight/styles/androidstudio.css +0 -0
- pygpt_net/data/js/highlight/styles/androidstudio.min.css +0 -0
- pygpt_net/data/js/highlight/styles/arduino-light.css +0 -0
- pygpt_net/data/js/highlight/styles/arduino-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/arta.css +0 -0
- pygpt_net/data/js/highlight/styles/arta.min.css +0 -0
- pygpt_net/data/js/highlight/styles/ascetic.css +0 -0
- pygpt_net/data/js/highlight/styles/ascetic.min.css +0 -0
- pygpt_net/data/js/highlight/styles/atom-one-dark-reasonable.css +0 -0
- pygpt_net/data/js/highlight/styles/atom-one-dark-reasonable.min.css +0 -0
- pygpt_net/data/js/highlight/styles/atom-one-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/atom-one-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/atom-one-light.css +0 -0
- pygpt_net/data/js/highlight/styles/atom-one-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/brown-paper.css +0 -0
- pygpt_net/data/js/highlight/styles/brown-paper.min.css +0 -0
- pygpt_net/data/js/highlight/styles/brown-papersq.png +0 -0
- pygpt_net/data/js/highlight/styles/codepen-embed.css +0 -0
- pygpt_net/data/js/highlight/styles/codepen-embed.min.css +0 -0
- pygpt_net/data/js/highlight/styles/codeschool.css +0 -0
- pygpt_net/data/js/highlight/styles/codeschool.min.css +0 -0
- pygpt_net/data/js/highlight/styles/color-brewer.css +0 -0
- pygpt_net/data/js/highlight/styles/color-brewer.min.css +0 -0
- pygpt_net/data/js/highlight/styles/darcula.css +0 -0
- pygpt_net/data/js/highlight/styles/darcula.min.css +0 -0
- pygpt_net/data/js/highlight/styles/dark.css +0 -0
- pygpt_net/data/js/highlight/styles/dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/default-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/default-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/default-light.css +0 -0
- pygpt_net/data/js/highlight/styles/default-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/default.css +0 -0
- pygpt_net/data/js/highlight/styles/default.min.css +0 -0
- pygpt_net/data/js/highlight/styles/devibeans.css +0 -0
- pygpt_net/data/js/highlight/styles/devibeans.min.css +0 -0
- pygpt_net/data/js/highlight/styles/docco.css +0 -0
- pygpt_net/data/js/highlight/styles/docco.min.css +0 -0
- pygpt_net/data/js/highlight/styles/far.css +0 -0
- pygpt_net/data/js/highlight/styles/far.min.css +0 -0
- pygpt_net/data/js/highlight/styles/felipec.css +0 -0
- pygpt_net/data/js/highlight/styles/felipec.min.css +0 -0
- pygpt_net/data/js/highlight/styles/foundation.css +0 -0
- pygpt_net/data/js/highlight/styles/foundation.min.css +0 -0
- pygpt_net/data/js/highlight/styles/github-dark-dimmed.css +0 -0
- pygpt_net/data/js/highlight/styles/github-dark-dimmed.min.css +0 -0
- pygpt_net/data/js/highlight/styles/github-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/github-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/github.css +0 -0
- pygpt_net/data/js/highlight/styles/github.min.css +0 -0
- pygpt_net/data/js/highlight/styles/gml.css +0 -0
- pygpt_net/data/js/highlight/styles/gml.min.css +0 -0
- pygpt_net/data/js/highlight/styles/googlecode.css +0 -0
- pygpt_net/data/js/highlight/styles/googlecode.min.css +0 -0
- pygpt_net/data/js/highlight/styles/gradient-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/gradient-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/gradient-light.css +0 -0
- pygpt_net/data/js/highlight/styles/gradient-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/grayscale.css +0 -0
- pygpt_net/data/js/highlight/styles/grayscale.min.css +0 -0
- pygpt_net/data/js/highlight/styles/hybrid.css +0 -0
- pygpt_net/data/js/highlight/styles/hybrid.min.css +0 -0
- pygpt_net/data/js/highlight/styles/idea.css +0 -0
- pygpt_net/data/js/highlight/styles/idea.min.css +0 -0
- pygpt_net/data/js/highlight/styles/intellij-light.css +0 -0
- pygpt_net/data/js/highlight/styles/intellij-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/ir-black.css +0 -0
- pygpt_net/data/js/highlight/styles/ir-black.min.css +0 -0
- pygpt_net/data/js/highlight/styles/isbl-editor-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/isbl-editor-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/isbl-editor-light.css +0 -0
- pygpt_net/data/js/highlight/styles/isbl-editor-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/kimbie-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/kimbie-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/kimbie-light.css +0 -0
- pygpt_net/data/js/highlight/styles/kimbie-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/lightfair.css +0 -0
- pygpt_net/data/js/highlight/styles/lightfair.min.css +0 -0
- pygpt_net/data/js/highlight/styles/lioshi.css +0 -0
- pygpt_net/data/js/highlight/styles/lioshi.min.css +0 -0
- pygpt_net/data/js/highlight/styles/magula.css +0 -0
- pygpt_net/data/js/highlight/styles/magula.min.css +0 -0
- pygpt_net/data/js/highlight/styles/material-darker.css +0 -0
- pygpt_net/data/js/highlight/styles/material-darker.min.css +0 -0
- pygpt_net/data/js/highlight/styles/material-lighter.css +0 -0
- pygpt_net/data/js/highlight/styles/material-lighter.min.css +0 -0
- pygpt_net/data/js/highlight/styles/material-palenight.css +0 -0
- pygpt_net/data/js/highlight/styles/material-palenight.min.css +0 -0
- pygpt_net/data/js/highlight/styles/material-vivid.css +0 -0
- pygpt_net/data/js/highlight/styles/material-vivid.min.css +0 -0
- pygpt_net/data/js/highlight/styles/material.css +0 -0
- pygpt_net/data/js/highlight/styles/material.min.css +0 -0
- pygpt_net/data/js/highlight/styles/mono-blue.css +0 -0
- pygpt_net/data/js/highlight/styles/mono-blue.min.css +0 -0
- pygpt_net/data/js/highlight/styles/monokai-sublime.css +0 -0
- pygpt_net/data/js/highlight/styles/monokai-sublime.min.css +0 -0
- pygpt_net/data/js/highlight/styles/monokai.css +0 -0
- pygpt_net/data/js/highlight/styles/monokai.min.css +0 -0
- pygpt_net/data/js/highlight/styles/night-owl.css +0 -0
- pygpt_net/data/js/highlight/styles/night-owl.min.css +0 -0
- pygpt_net/data/js/highlight/styles/nnfx-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/nnfx-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/nnfx-light.css +0 -0
- pygpt_net/data/js/highlight/styles/nnfx-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/nord.css +0 -0
- pygpt_net/data/js/highlight/styles/nord.min.css +0 -0
- pygpt_net/data/js/highlight/styles/obsidian.css +0 -0
- pygpt_net/data/js/highlight/styles/obsidian.min.css +0 -0
- pygpt_net/data/js/highlight/styles/panda-syntax-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/panda-syntax-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/panda-syntax-light.css +0 -0
- pygpt_net/data/js/highlight/styles/panda-syntax-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/paraiso-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/paraiso-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/paraiso-light.css +0 -0
- pygpt_net/data/js/highlight/styles/paraiso-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/pojoaque.css +0 -0
- pygpt_net/data/js/highlight/styles/pojoaque.jpg +0 -0
- pygpt_net/data/js/highlight/styles/pojoaque.min.css +0 -0
- pygpt_net/data/js/highlight/styles/purebasic.css +0 -0
- pygpt_net/data/js/highlight/styles/purebasic.min.css +0 -0
- pygpt_net/data/js/highlight/styles/qtcreator-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/qtcreator-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/qtcreator-light.css +0 -0
- pygpt_net/data/js/highlight/styles/qtcreator-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/rainbow.css +0 -0
- pygpt_net/data/js/highlight/styles/rainbow.min.css +0 -0
- pygpt_net/data/js/highlight/styles/routeros.css +0 -0
- pygpt_net/data/js/highlight/styles/routeros.min.css +0 -0
- pygpt_net/data/js/highlight/styles/school-book.css +0 -0
- pygpt_net/data/js/highlight/styles/school-book.min.css +0 -0
- pygpt_net/data/js/highlight/styles/shades-of-purple.css +0 -0
- pygpt_net/data/js/highlight/styles/shades-of-purple.min.css +0 -0
- pygpt_net/data/js/highlight/styles/srcery.css +0 -0
- pygpt_net/data/js/highlight/styles/srcery.min.css +0 -0
- pygpt_net/data/js/highlight/styles/stackoverflow-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/stackoverflow-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/stackoverflow-light.css +0 -0
- pygpt_net/data/js/highlight/styles/stackoverflow-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/sunburst.css +0 -0
- pygpt_net/data/js/highlight/styles/sunburst.min.css +0 -0
- pygpt_net/data/js/highlight/styles/tokyo-night-dark.css +0 -0
- pygpt_net/data/js/highlight/styles/tokyo-night-dark.min.css +0 -0
- pygpt_net/data/js/highlight/styles/tokyo-night-light.css +0 -0
- pygpt_net/data/js/highlight/styles/tokyo-night-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/tomorrow-night-blue.css +0 -0
- pygpt_net/data/js/highlight/styles/tomorrow-night-blue.min.css +0 -0
- pygpt_net/data/js/highlight/styles/tomorrow-night-bright.css +0 -0
- pygpt_net/data/js/highlight/styles/tomorrow-night-bright.min.css +0 -0
- pygpt_net/data/js/highlight/styles/vs.css +0 -0
- pygpt_net/data/js/highlight/styles/vs.min.css +0 -0
- pygpt_net/data/js/highlight/styles/vs2015.css +0 -0
- pygpt_net/data/js/highlight/styles/vs2015.min.css +0 -0
- pygpt_net/data/js/highlight/styles/windows-10-light.css +0 -0
- pygpt_net/data/js/highlight/styles/windows-10-light.min.css +0 -0
- pygpt_net/data/js/highlight/styles/windows-10.css +0 -0
- pygpt_net/data/js/highlight/styles/windows-10.min.css +0 -0
- pygpt_net/data/js/highlight/styles/xcode.css +0 -0
- pygpt_net/data/js/highlight/styles/xcode.min.css +0 -0
- pygpt_net/data/js/highlight/styles/xt256.css +0 -0
- pygpt_net/data/js/highlight/styles/xt256.min.css +0 -0
- pygpt_net/data/js/katex/auto-render.min.js +0 -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 +0 -0
- pygpt_net/data/js/katex/katex.min.js +0 -0
- pygpt_net/data/js/markdown-it/markdown-it-katex.min.js +8 -0
- pygpt_net/data/js/markdown-it/markdown-it.min.js +2 -0
- pygpt_net/data/languages.csv +0 -0
- pygpt_net/data/locale/locale.de.ini +0 -0
- pygpt_net/data/locale/locale.en.ini +4 -0
- pygpt_net/data/locale/locale.es.ini +0 -0
- pygpt_net/data/locale/locale.fr.ini +0 -0
- pygpt_net/data/locale/locale.it.ini +0 -0
- pygpt_net/data/locale/locale.pl.ini +0 -0
- pygpt_net/data/locale/locale.uk.ini +0 -0
- pygpt_net/data/locale/locale.zh.ini +0 -0
- pygpt_net/data/locale/plugin.agent.de.ini +0 -0
- pygpt_net/data/locale/plugin.agent.en.ini +0 -0
- pygpt_net/data/locale/plugin.agent.es.ini +0 -0
- pygpt_net/data/locale/plugin.agent.fr.ini +0 -0
- pygpt_net/data/locale/plugin.agent.it.ini +0 -0
- pygpt_net/data/locale/plugin.agent.pl.ini +0 -0
- pygpt_net/data/locale/plugin.agent.uk.ini +0 -0
- pygpt_net/data/locale/plugin.agent.zh.ini +0 -0
- pygpt_net/data/locale/plugin.audio_input.de.ini +0 -0
- pygpt_net/data/locale/plugin.audio_input.en.ini +0 -0
- pygpt_net/data/locale/plugin.audio_input.es.ini +0 -0
- pygpt_net/data/locale/plugin.audio_input.fr.ini +0 -0
- pygpt_net/data/locale/plugin.audio_input.it.ini +0 -0
- pygpt_net/data/locale/plugin.audio_input.pl.ini +0 -0
- pygpt_net/data/locale/plugin.audio_input.uk.ini +0 -0
- pygpt_net/data/locale/plugin.audio_input.zh.ini +0 -0
- pygpt_net/data/locale/plugin.audio_output.de.ini +0 -0
- pygpt_net/data/locale/plugin.audio_output.en.ini +0 -0
- pygpt_net/data/locale/plugin.audio_output.es.ini +0 -0
- pygpt_net/data/locale/plugin.audio_output.fr.ini +0 -0
- pygpt_net/data/locale/plugin.audio_output.it.ini +0 -0
- pygpt_net/data/locale/plugin.audio_output.pl.ini +0 -0
- pygpt_net/data/locale/plugin.audio_output.uk.ini +0 -0
- pygpt_net/data/locale/plugin.audio_output.zh.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_api.de.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_api.en.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_api.es.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_api.fr.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_api.it.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_api.pl.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_api.uk.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_api.zh.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.de.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.en.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.es.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.fr.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.it.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.pl.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.uk.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_code_interpreter.zh.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_custom.de.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_custom.en.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_custom.es.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_custom.fr.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_custom.it.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_custom.pl.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_custom.uk.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_custom.zh.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_files.de.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_files.en.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_files.es.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_files.fr.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_files.it.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_files.pl.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_files.uk.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_files.zh.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_history.de.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_history.en.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_history.es.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_history.fr.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_history.it.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_history.pl.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_history.uk.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_history.zh.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.de.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.en.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.es.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.fr.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.it.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.pl.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.uk.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_mouse_control.zh.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_serial.de.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_serial.en.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_serial.es.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_serial.fr.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_serial.it.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_serial.pl.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_serial.uk.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_serial.zh.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_system.de.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_system.en.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_system.es.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_system.fr.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_system.it.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_system.pl.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_system.uk.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_system.zh.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_web.de.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_web.en.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_web.es.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_web.fr.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_web.it.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_web.pl.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_web.uk.ini +0 -0
- pygpt_net/data/locale/plugin.cmd_web.zh.ini +0 -0
- pygpt_net/data/locale/plugin.crontab.de.ini +0 -0
- pygpt_net/data/locale/plugin.crontab.en.ini +0 -0
- pygpt_net/data/locale/plugin.crontab.es.ini +0 -0
- pygpt_net/data/locale/plugin.crontab.fr.ini +0 -0
- pygpt_net/data/locale/plugin.crontab.it.ini +0 -0
- pygpt_net/data/locale/plugin.crontab.pl.ini +0 -0
- pygpt_net/data/locale/plugin.crontab.uk.ini +0 -0
- pygpt_net/data/locale/plugin.crontab.zh.ini +0 -0
- pygpt_net/data/locale/plugin.experts.de.ini +0 -0
- pygpt_net/data/locale/plugin.experts.en.ini +0 -0
- pygpt_net/data/locale/plugin.experts.es.ini +0 -0
- pygpt_net/data/locale/plugin.experts.fr.ini +0 -0
- pygpt_net/data/locale/plugin.experts.it.ini +0 -0
- pygpt_net/data/locale/plugin.experts.pl.ini +0 -0
- pygpt_net/data/locale/plugin.experts.uk.ini +0 -0
- pygpt_net/data/locale/plugin.experts.zh.ini +0 -0
- pygpt_net/data/locale/plugin.extra_prompt.de.ini +0 -0
- pygpt_net/data/locale/plugin.extra_prompt.en.ini +0 -0
- pygpt_net/data/locale/plugin.extra_prompt.es.ini +0 -0
- pygpt_net/data/locale/plugin.extra_prompt.fr.ini +0 -0
- pygpt_net/data/locale/plugin.extra_prompt.it.ini +0 -0
- pygpt_net/data/locale/plugin.extra_prompt.pl.ini +0 -0
- pygpt_net/data/locale/plugin.extra_prompt.uk.ini +0 -0
- pygpt_net/data/locale/plugin.extra_prompt.zh.ini +0 -0
- pygpt_net/data/locale/plugin.idx_llama_index.de.ini +0 -0
- pygpt_net/data/locale/plugin.idx_llama_index.en.ini +0 -0
- pygpt_net/data/locale/plugin.idx_llama_index.es.ini +0 -0
- pygpt_net/data/locale/plugin.idx_llama_index.fr.ini +0 -0
- pygpt_net/data/locale/plugin.idx_llama_index.it.ini +0 -0
- pygpt_net/data/locale/plugin.idx_llama_index.pl.ini +0 -0
- pygpt_net/data/locale/plugin.idx_llama_index.uk.ini +0 -0
- pygpt_net/data/locale/plugin.idx_llama_index.zh.ini +0 -0
- pygpt_net/data/locale/plugin.mailer.en.ini +0 -0
- pygpt_net/data/locale/plugin.openai_dalle.de.ini +0 -0
- pygpt_net/data/locale/plugin.openai_dalle.en.ini +0 -0
- pygpt_net/data/locale/plugin.openai_dalle.es.ini +0 -0
- pygpt_net/data/locale/plugin.openai_dalle.fr.ini +0 -0
- pygpt_net/data/locale/plugin.openai_dalle.it.ini +0 -0
- pygpt_net/data/locale/plugin.openai_dalle.pl.ini +0 -0
- pygpt_net/data/locale/plugin.openai_dalle.uk.ini +0 -0
- pygpt_net/data/locale/plugin.openai_dalle.zh.ini +0 -0
- pygpt_net/data/locale/plugin.openai_vision.de.ini +0 -0
- pygpt_net/data/locale/plugin.openai_vision.en.ini +0 -0
- pygpt_net/data/locale/plugin.openai_vision.es.ini +0 -0
- pygpt_net/data/locale/plugin.openai_vision.fr.ini +0 -0
- pygpt_net/data/locale/plugin.openai_vision.it.ini +0 -0
- pygpt_net/data/locale/plugin.openai_vision.pl.ini +0 -0
- pygpt_net/data/locale/plugin.openai_vision.uk.ini +0 -0
- pygpt_net/data/locale/plugin.openai_vision.zh.ini +0 -0
- pygpt_net/data/locale/plugin.real_time.de.ini +0 -0
- pygpt_net/data/locale/plugin.real_time.en.ini +0 -0
- pygpt_net/data/locale/plugin.real_time.es.ini +0 -0
- pygpt_net/data/locale/plugin.real_time.fr.ini +0 -0
- pygpt_net/data/locale/plugin.real_time.it.ini +0 -0
- pygpt_net/data/locale/plugin.real_time.pl.ini +0 -0
- pygpt_net/data/locale/plugin.real_time.uk.ini +0 -0
- pygpt_net/data/locale/plugin.real_time.zh.ini +0 -0
- pygpt_net/data/locale/plugin.voice_control.de.ini +0 -0
- pygpt_net/data/locale/plugin.voice_control.en.ini +0 -0
- pygpt_net/data/locale/plugin.voice_control.es.ini +0 -0
- pygpt_net/data/locale/plugin.voice_control.fr.ini +0 -0
- pygpt_net/data/locale/plugin.voice_control.it.ini +0 -0
- pygpt_net/data/locale/plugin.voice_control.pl.ini +0 -0
- pygpt_net/data/locale/plugin.voice_control.uk.ini +0 -0
- pygpt_net/data/locale/plugin.voice_control.zh.ini +0 -0
- pygpt_net/data/prompts.csv +0 -0
- pygpt_net/fonts.qrc +60 -60
- pygpt_net/fonts_rc.py +0 -0
- pygpt_net/icons.qrc +138 -138
- pygpt_net/icons_rc.py +0 -0
- pygpt_net/js.qrc +6 -4
- pygpt_net/js_rc.py +10890 -26621
- pygpt_net/migrations/Version20231227152900.py +0 -0
- pygpt_net/migrations/Version20231230095000.py +0 -0
- pygpt_net/migrations/Version20231231230000.py +0 -0
- pygpt_net/migrations/Version20240106060000.py +0 -0
- pygpt_net/migrations/Version20240107060000.py +0 -0
- pygpt_net/migrations/Version20240222160000.py +0 -0
- pygpt_net/migrations/Version20240223050000.py +0 -0
- pygpt_net/migrations/Version20240303190000.py +0 -0
- pygpt_net/migrations/Version20240408180000.py +0 -0
- pygpt_net/migrations/Version20240426050000.py +0 -0
- pygpt_net/migrations/Version20240501030000.py +0 -0
- pygpt_net/migrations/Version20241122130000.py +0 -0
- pygpt_net/migrations/Version20241126170000.py +0 -0
- pygpt_net/migrations/Version20241215110000.py +0 -0
- pygpt_net/migrations/__init__.py +0 -0
- pygpt_net/migrations/base.py +0 -0
- pygpt_net/plugin/agent/config.py +0 -0
- pygpt_net/plugin/agent/plugin.py +0 -0
- pygpt_net/plugin/audio_input/config.py +0 -0
- pygpt_net/plugin/audio_input/plugin.py +0 -0
- pygpt_net/plugin/audio_output/config.py +0 -0
- pygpt_net/plugin/audio_output/plugin.py +0 -0
- pygpt_net/plugin/audio_output/worker.py +0 -0
- pygpt_net/plugin/base/__init__.py +0 -0
- pygpt_net/plugin/base/config.py +0 -0
- pygpt_net/plugin/base/signals.py +0 -0
- pygpt_net/plugin/base/worker.py +0 -0
- pygpt_net/plugin/bitbucket/config.py +0 -0
- pygpt_net/plugin/bitbucket/plugin.py +0 -0
- pygpt_net/plugin/cmd_api/config.py +0 -0
- pygpt_net/plugin/cmd_api/plugin.py +0 -0
- pygpt_net/plugin/cmd_api/worker.py +0 -0
- pygpt_net/plugin/cmd_custom/config.py +0 -0
- pygpt_net/plugin/cmd_custom/plugin.py +0 -0
- pygpt_net/plugin/cmd_custom/worker.py +0 -0
- pygpt_net/plugin/cmd_files/config.py +0 -0
- pygpt_net/plugin/cmd_files/output.py +0 -0
- pygpt_net/plugin/cmd_files/plugin.py +0 -0
- pygpt_net/plugin/cmd_history/config.py +0 -0
- pygpt_net/plugin/cmd_history/plugin.py +0 -0
- pygpt_net/plugin/cmd_history/worker.py +0 -0
- pygpt_net/plugin/cmd_mouse_control/plugin.py +0 -0
- pygpt_net/plugin/cmd_mouse_control/worker.py +0 -0
- pygpt_net/plugin/cmd_serial/config.py +0 -0
- pygpt_net/plugin/cmd_serial/plugin.py +0 -0
- pygpt_net/plugin/cmd_serial/worker.py +0 -0
- pygpt_net/plugin/cmd_system/config.py +0 -0
- pygpt_net/plugin/cmd_system/docker.py +0 -0
- pygpt_net/plugin/cmd_system/output.py +0 -0
- pygpt_net/plugin/cmd_system/plugin.py +0 -0
- pygpt_net/plugin/cmd_web/config.py +0 -0
- pygpt_net/plugin/cmd_web/plugin.py +0 -0
- pygpt_net/plugin/cmd_web/worker.py +0 -0
- pygpt_net/plugin/crontab/config.py +0 -0
- pygpt_net/plugin/crontab/plugin.py +0 -0
- pygpt_net/plugin/experts/config.py +0 -0
- pygpt_net/plugin/experts/plugin.py +0 -0
- pygpt_net/plugin/extra_prompt/config.py +0 -0
- pygpt_net/plugin/extra_prompt/plugin.py +0 -0
- pygpt_net/plugin/facebook/config.py +0 -0
- pygpt_net/plugin/facebook/plugin.py +0 -0
- pygpt_net/plugin/github/config.py +0 -0
- pygpt_net/plugin/github/plugin.py +0 -0
- pygpt_net/plugin/google/plugin.py +0 -0
- pygpt_net/plugin/idx_llama_index/config.py +0 -0
- pygpt_net/plugin/idx_llama_index/plugin.py +0 -0
- pygpt_net/plugin/idx_llama_index/worker.py +0 -0
- pygpt_net/plugin/mailer/plugin.py +0 -0
- pygpt_net/plugin/openai_dalle/config.py +0 -0
- pygpt_net/plugin/openai_dalle/plugin.py +0 -0
- pygpt_net/plugin/openai_vision/config.py +0 -0
- pygpt_net/plugin/openai_vision/plugin.py +0 -0
- pygpt_net/plugin/real_time/config.py +0 -0
- pygpt_net/plugin/real_time/plugin.py +0 -0
- pygpt_net/plugin/server/config.py +0 -0
- pygpt_net/plugin/server/plugin.py +0 -0
- pygpt_net/plugin/slack/config.py +0 -0
- pygpt_net/plugin/slack/plugin.py +0 -0
- pygpt_net/plugin/telegram/config.py +0 -0
- pygpt_net/plugin/telegram/plugin.py +0 -0
- pygpt_net/plugin/tuya/config.py +0 -0
- pygpt_net/plugin/tuya/plugin.py +0 -0
- pygpt_net/plugin/twitter/config.py +0 -0
- pygpt_net/plugin/twitter/plugin.py +0 -0
- pygpt_net/plugin/voice_control/config.py +0 -0
- pygpt_net/plugin/voice_control/plugin.py +0 -0
- pygpt_net/plugin/wikipedia/config.py +0 -0
- pygpt_net/plugin/wikipedia/plugin.py +0 -0
- pygpt_net/provider/__init__.py +0 -0
- pygpt_net/provider/agents/__init__.py +0 -0
- pygpt_net/provider/agents/base.py +0 -0
- pygpt_net/provider/agents/llama_index/__init__.py +0 -0
- pygpt_net/provider/agents/llama_index/codeact_workflow.py +0 -0
- pygpt_net/provider/agents/llama_index/legacy/__init__.py +0 -0
- pygpt_net/provider/agents/llama_index/legacy/openai.py +0 -0
- pygpt_net/provider/agents/llama_index/legacy/openai_assistant.py +0 -0
- pygpt_net/provider/agents/llama_index/legacy/planner.py +0 -0
- pygpt_net/provider/agents/llama_index/legacy/react.py +0 -0
- pygpt_net/provider/agents/llama_index/openai_workflow.py +0 -0
- pygpt_net/provider/agents/llama_index/react_workflow.py +0 -0
- pygpt_net/provider/agents/llama_index/supervisor_workflow.py +0 -0
- pygpt_net/provider/agents/llama_index/workflow/__init__.py +0 -0
- pygpt_net/provider/agents/llama_index/workflow/codeact.py +0 -0
- pygpt_net/provider/agents/llama_index/workflow/events.py +0 -0
- pygpt_net/provider/agents/llama_index/workflow/planner.py +0 -0
- pygpt_net/provider/agents/llama_index/workflow/supervisor.py +0 -0
- pygpt_net/provider/agents/openai/__init__.py +0 -0
- pygpt_net/provider/agents/openai/agent.py +0 -0
- pygpt_net/provider/agents/openai/agent_planner.py +0 -0
- pygpt_net/provider/agents/openai/agent_with_experts.py +0 -0
- pygpt_net/provider/agents/openai/agent_with_experts_feedback.py +0 -0
- pygpt_net/provider/agents/openai/agent_with_feedback.py +0 -0
- pygpt_net/provider/agents/openai/supervisor.py +0 -0
- pygpt_net/provider/api/__init__.py +0 -0
- pygpt_net/provider/api/anthropic/audio.py +0 -0
- pygpt_net/provider/api/anthropic/chat.py +0 -0
- pygpt_net/provider/api/anthropic/image.py +0 -0
- pygpt_net/provider/api/anthropic/tools.py +0 -0
- pygpt_net/provider/api/anthropic/vision.py +0 -0
- pygpt_net/provider/api/fake/__init__.py +0 -0
- pygpt_net/provider/api/fake/generator.py +244 -0
- pygpt_net/provider/api/google/__init__.py +0 -0
- pygpt_net/provider/api/google/audio.py +0 -0
- pygpt_net/provider/api/google/chat.py +0 -0
- pygpt_net/provider/api/google/image.py +0 -0
- pygpt_net/provider/api/google/realtime/__init__.py +0 -0
- pygpt_net/provider/api/google/tools.py +0 -0
- pygpt_net/provider/api/google/video.py +0 -0
- pygpt_net/provider/api/google/vision.py +0 -0
- pygpt_net/provider/api/openai/__init__.py +31 -18
- pygpt_net/provider/api/openai/agents/__init__.py +0 -0
- pygpt_net/provider/api/openai/agents/client.py +0 -0
- pygpt_net/provider/api/openai/agents/computer.py +0 -0
- pygpt_net/provider/api/openai/agents/experts.py +0 -0
- pygpt_net/provider/api/openai/agents/remote_tools.py +0 -0
- pygpt_net/provider/api/openai/agents/utils.py +0 -0
- pygpt_net/provider/api/openai/assistants.py +0 -0
- pygpt_net/provider/api/openai/audio.py +0 -0
- pygpt_net/provider/api/openai/completion.py +0 -0
- pygpt_net/provider/api/openai/computer.py +0 -0
- pygpt_net/provider/api/openai/container.py +0 -0
- pygpt_net/provider/api/openai/image.py +0 -0
- pygpt_net/provider/api/openai/realtime/__init__.py +0 -0
- pygpt_net/provider/api/openai/remote_tools.py +0 -0
- pygpt_net/provider/api/openai/responses.py +3 -1
- pygpt_net/provider/api/openai/store.py +0 -0
- pygpt_net/provider/api/openai/tools.py +0 -0
- pygpt_net/provider/api/openai/utils.py +0 -0
- pygpt_net/provider/api/openai/vision.py +0 -0
- pygpt_net/provider/api/openai/worker/__init__.py +0 -0
- pygpt_net/provider/api/openai/worker/assistants.py +0 -0
- pygpt_net/provider/api/openai/worker/importer.py +0 -0
- pygpt_net/provider/api/x_ai/__init__.py +0 -0
- pygpt_net/provider/api/x_ai/audio.py +0 -0
- pygpt_net/provider/api/x_ai/chat.py +0 -0
- pygpt_net/provider/api/x_ai/image.py +0 -0
- pygpt_net/provider/api/x_ai/remote.py +0 -0
- pygpt_net/provider/api/x_ai/tools.py +0 -0
- pygpt_net/provider/api/x_ai/vision.py +0 -0
- pygpt_net/provider/audio_input/__init__.py +0 -0
- pygpt_net/provider/audio_input/base.py +0 -0
- pygpt_net/provider/audio_input/bing_speech_recognition.py +0 -0
- pygpt_net/provider/audio_input/google_cloud_speech_recognition.py +0 -0
- pygpt_net/provider/audio_input/google_genai.py +0 -0
- pygpt_net/provider/audio_input/google_speech_recognition.py +0 -0
- pygpt_net/provider/audio_input/openai_whisper.py +0 -0
- pygpt_net/provider/audio_input/openai_whisper_local.py +0 -0
- pygpt_net/provider/audio_output/__init__.py +0 -0
- pygpt_net/provider/audio_output/base.py +0 -0
- pygpt_net/provider/audio_output/eleven_labs.py +0 -0
- pygpt_net/provider/audio_output/google_genai_tts.py +0 -0
- pygpt_net/provider/audio_output/google_tts.py +0 -0
- pygpt_net/provider/audio_output/ms_azure_tts.py +0 -0
- pygpt_net/provider/audio_output/openai_tts.py +0 -0
- pygpt_net/provider/core/__init__.py +0 -0
- pygpt_net/provider/core/assistant/__init__.py +0 -0
- pygpt_net/provider/core/assistant/base.py +0 -0
- pygpt_net/provider/core/assistant/json_file.py +0 -0
- pygpt_net/provider/core/assistant_file/__init__.py +0 -0
- pygpt_net/provider/core/assistant_file/base.py +0 -0
- pygpt_net/provider/core/assistant_file/db_sqlite/__init__.py +0 -0
- pygpt_net/provider/core/assistant_file/db_sqlite/patch.py +0 -0
- pygpt_net/provider/core/assistant_file/db_sqlite/provider.py +0 -0
- pygpt_net/provider/core/assistant_file/db_sqlite/storage.py +0 -0
- pygpt_net/provider/core/assistant_file/db_sqlite/utils.py +0 -0
- pygpt_net/provider/core/assistant_store/__init__.py +0 -0
- pygpt_net/provider/core/assistant_store/base.py +0 -0
- pygpt_net/provider/core/assistant_store/db_sqlite/__init__.py +0 -0
- pygpt_net/provider/core/assistant_store/db_sqlite/patch.py +0 -0
- pygpt_net/provider/core/assistant_store/db_sqlite/provider.py +0 -0
- pygpt_net/provider/core/assistant_store/db_sqlite/storage.py +0 -0
- pygpt_net/provider/core/assistant_store/db_sqlite/utils.py +0 -0
- pygpt_net/provider/core/assistant_store/json_file.py +0 -0
- pygpt_net/provider/core/attachment/__init__.py +0 -0
- pygpt_net/provider/core/attachment/base.py +0 -0
- pygpt_net/provider/core/attachment/json_file.py +0 -0
- pygpt_net/provider/core/calendar/__init__.py +0 -0
- pygpt_net/provider/core/calendar/base.py +0 -0
- pygpt_net/provider/core/calendar/db_sqlite/__init__.py +0 -0
- pygpt_net/provider/core/calendar/db_sqlite/patch.py +0 -0
- pygpt_net/provider/core/calendar/db_sqlite/provider.py +0 -0
- pygpt_net/provider/core/calendar/db_sqlite/storage.py +0 -0
- pygpt_net/provider/core/config/__init__.py +0 -0
- pygpt_net/provider/core/config/base.py +0 -0
- pygpt_net/provider/core/config/patch.py +21 -1
- pygpt_net/provider/core/ctx/__init__.py +0 -0
- pygpt_net/provider/core/ctx/base.py +0 -0
- pygpt_net/provider/core/ctx/db_sqlite/__init__.py +0 -0
- pygpt_net/provider/core/ctx/db_sqlite/provider.py +0 -0
- pygpt_net/provider/core/ctx/db_sqlite/storage.py +0 -0
- pygpt_net/provider/core/ctx/db_sqlite/utils.py +0 -0
- pygpt_net/provider/core/ctx/json_file.py +0 -0
- pygpt_net/provider/core/history/__init__.py +0 -0
- pygpt_net/provider/core/history/base.py +0 -0
- pygpt_net/provider/core/history/patch.py +0 -0
- pygpt_net/provider/core/history/txt_file.py +0 -0
- pygpt_net/provider/core/index/__init__.py +0 -0
- pygpt_net/provider/core/index/base.py +0 -0
- pygpt_net/provider/core/index/db_sqlite/__init__.py +0 -0
- pygpt_net/provider/core/index/db_sqlite/patch.py +0 -0
- pygpt_net/provider/core/index/db_sqlite/provider.py +0 -0
- pygpt_net/provider/core/index/db_sqlite/storage.py +0 -0
- pygpt_net/provider/core/index/db_sqlite/utils.py +0 -0
- pygpt_net/provider/core/index/json_file.py +0 -0
- pygpt_net/provider/core/index/patch.py +0 -0
- pygpt_net/provider/core/mode/__init__.py +0 -0
- pygpt_net/provider/core/mode/base.py +0 -0
- pygpt_net/provider/core/mode/json_file.py +0 -0
- pygpt_net/provider/core/mode/patch.py +0 -0
- pygpt_net/provider/core/model/__init__.py +0 -0
- pygpt_net/provider/core/model/base.py +0 -0
- pygpt_net/provider/core/notepad/__init__.py +0 -0
- pygpt_net/provider/core/notepad/base.py +0 -0
- pygpt_net/provider/core/notepad/db_sqlite/__init__.py +0 -0
- pygpt_net/provider/core/notepad/db_sqlite/patch.py +0 -0
- pygpt_net/provider/core/notepad/db_sqlite/provider.py +0 -0
- pygpt_net/provider/core/notepad/db_sqlite/storage.py +0 -0
- pygpt_net/provider/core/notepad/json_file.py +0 -0
- pygpt_net/provider/core/plugin_preset/__init__.py +0 -0
- pygpt_net/provider/core/plugin_preset/base.py +0 -0
- pygpt_net/provider/core/preset/patch.py +0 -0
- pygpt_net/provider/core/prompt/__init__.py +0 -0
- pygpt_net/provider/core/prompt/base.py +0 -0
- pygpt_net/provider/core/prompt/json_file.py +0 -0
- pygpt_net/provider/llms/base.py +0 -0
- pygpt_net/provider/llms/deepseek_api.py +0 -0
- pygpt_net/provider/llms/google.py +0 -0
- pygpt_net/provider/llms/hugging_face_api.py +0 -0
- pygpt_net/provider/llms/hugging_face_router.py +0 -0
- pygpt_net/provider/llms/llama_index/__init__.py +0 -0
- pygpt_net/provider/llms/llama_index/openai/__init__.py +0 -0
- pygpt_net/provider/llms/llama_index/openai/base.py +0 -0
- pygpt_net/provider/llms/llama_index/openai/py.typed +0 -0
- pygpt_net/provider/llms/llama_index/openai/responses.py +0 -0
- pygpt_net/provider/llms/llama_index/openai/utils.py +0 -0
- pygpt_net/provider/llms/llama_index/x_ai/__init__.py +0 -0
- pygpt_net/provider/llms/llama_index/x_ai/embedding.py +0 -0
- pygpt_net/provider/llms/local.py +0 -0
- pygpt_net/provider/llms/mistral.py +0 -0
- pygpt_net/provider/llms/ollama_custom.py +0 -0
- pygpt_net/provider/llms/open_router.py +0 -0
- pygpt_net/provider/llms/perplexity.py +0 -0
- pygpt_net/provider/llms/x_ai.py +0 -0
- pygpt_net/provider/loaders/__init__.py +0 -0
- pygpt_net/provider/loaders/base.py +0 -0
- pygpt_net/provider/loaders/file_csv.py +0 -0
- pygpt_net/provider/loaders/file_docx.py +0 -0
- pygpt_net/provider/loaders/file_epub.py +0 -0
- pygpt_net/provider/loaders/file_excel.py +0 -0
- pygpt_net/provider/loaders/file_html.py +0 -0
- pygpt_net/provider/loaders/file_image_vision.py +0 -0
- pygpt_net/provider/loaders/file_ipynb.py +0 -0
- pygpt_net/provider/loaders/file_json.py +0 -0
- pygpt_net/provider/loaders/file_markdown.py +0 -0
- pygpt_net/provider/loaders/file_pdf.py +0 -0
- pygpt_net/provider/loaders/file_video_audio.py +0 -0
- pygpt_net/provider/loaders/file_xml.py +0 -0
- pygpt_net/provider/loaders/hub/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/bitbucket/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/bitbucket/repo.py +0 -0
- pygpt_net/provider/loaders/hub/chatgpt_retrieval/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/chatgpt_retrieval/base.py +0 -0
- pygpt_net/provider/loaders/hub/database/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/database/base.py +0 -0
- pygpt_net/provider/loaders/hub/github/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/github/issues.py +0 -0
- pygpt_net/provider/loaders/hub/github/repo.py +0 -0
- pygpt_net/provider/loaders/hub/google/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/google/calendar.py +0 -0
- pygpt_net/provider/loaders/hub/google/docs.py +0 -0
- pygpt_net/provider/loaders/hub/google/gmail.py +0 -0
- pygpt_net/provider/loaders/hub/google/keep.py +0 -0
- pygpt_net/provider/loaders/hub/google/sheets.py +0 -0
- pygpt_net/provider/loaders/hub/image_vision/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/image_vision/base.py +0 -0
- pygpt_net/provider/loaders/hub/json/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/json/base.py +0 -0
- pygpt_net/provider/loaders/hub/pandas_excel/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/pandas_excel/base.py +0 -0
- pygpt_net/provider/loaders/hub/simple_csv/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/simple_csv/base.py +0 -0
- pygpt_net/provider/loaders/hub/video_audio/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/video_audio/base.py +0 -0
- pygpt_net/provider/loaders/hub/web_page/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/web_page/base.py +0 -0
- pygpt_net/provider/loaders/hub/yt/__init__.py +0 -0
- pygpt_net/provider/loaders/hub/yt/base.py +0 -0
- pygpt_net/provider/loaders/hub/yt/utils.py +0 -0
- pygpt_net/provider/loaders/web_bitbucket.py +0 -0
- pygpt_net/provider/loaders/web_chatgpt_retrieval.py +0 -0
- pygpt_net/provider/loaders/web_database.py +0 -0
- pygpt_net/provider/loaders/web_github_issues.py +0 -0
- pygpt_net/provider/loaders/web_github_repo.py +0 -0
- pygpt_net/provider/loaders/web_google_calendar.py +0 -0
- pygpt_net/provider/loaders/web_google_docs.py +0 -0
- pygpt_net/provider/loaders/web_google_drive.py +0 -0
- pygpt_net/provider/loaders/web_google_gmail.py +0 -0
- pygpt_net/provider/loaders/web_google_keep.py +0 -0
- pygpt_net/provider/loaders/web_google_sheets.py +0 -0
- pygpt_net/provider/loaders/web_microsoft_onedrive.py +0 -0
- pygpt_net/provider/loaders/web_page.py +0 -0
- pygpt_net/provider/loaders/web_rss.py +0 -0
- pygpt_net/provider/loaders/web_sitemap.py +0 -0
- pygpt_net/provider/loaders/web_twitter.py +0 -0
- pygpt_net/provider/loaders/web_yt.py +0 -0
- pygpt_net/provider/vector_stores/ctx_attachment.py +0 -0
- pygpt_net/provider/web/__init__.py +0 -0
- pygpt_net/provider/web/base.py +0 -0
- pygpt_net/provider/web/duckduck_search.py +0 -0
- pygpt_net/provider/web/google_custom_search.py +0 -0
- pygpt_net/provider/web/microsoft_bing.py +0 -0
- pygpt_net/tools/__init__.py +0 -0
- pygpt_net/tools/audio_transcriber/tool.py +0 -0
- pygpt_net/tools/audio_transcriber/ui/__init__.py +0 -0
- pygpt_net/tools/audio_transcriber/ui/dialogs.py +0 -0
- pygpt_net/tools/base.py +0 -0
- pygpt_net/tools/code_interpreter/body.py +0 -0
- pygpt_net/tools/code_interpreter/ui/__init__.py +0 -0
- pygpt_net/tools/code_interpreter/ui/dialogs.py +0 -0
- pygpt_net/tools/code_interpreter/ui/html.py +0 -0
- pygpt_net/tools/code_interpreter/ui/widgets.py +0 -0
- pygpt_net/tools/html_canvas/tool.py +0 -0
- pygpt_net/tools/html_canvas/ui/__init__.py +0 -0
- pygpt_net/tools/html_canvas/ui/dialogs.py +0 -0
- pygpt_net/tools/html_canvas/ui/widgets.py +0 -0
- pygpt_net/tools/image_viewer/tool.py +0 -0
- pygpt_net/tools/image_viewer/ui/__init__.py +0 -0
- pygpt_net/tools/image_viewer/ui/dialogs.py +0 -0
- pygpt_net/tools/indexer/tool.py +0 -0
- pygpt_net/tools/indexer/ui/__init__.py +0 -0
- pygpt_net/tools/indexer/ui/browse.py +0 -0
- pygpt_net/tools/indexer/ui/ctx.py +0 -0
- pygpt_net/tools/indexer/ui/dialogs.py +0 -0
- pygpt_net/tools/indexer/ui/files.py +0 -0
- pygpt_net/tools/indexer/ui/web.py +0 -0
- pygpt_net/tools/indexer/ui/widgets.py +0 -0
- pygpt_net/tools/media_player/tool.py +0 -0
- pygpt_net/tools/media_player/ui/__init__.py +0 -0
- pygpt_net/tools/media_player/ui/dialogs.py +0 -0
- pygpt_net/tools/media_player/ui/widgets.py +0 -0
- pygpt_net/tools/text_editor/__init__.py +0 -0
- pygpt_net/tools/text_editor/tool.py +0 -0
- pygpt_net/tools/text_editor/ui/__init__.py +0 -0
- pygpt_net/tools/text_editor/ui/dialogs.py +0 -0
- pygpt_net/tools/text_editor/ui/widgets.py +0 -0
- pygpt_net/ui/base/__init__.py +0 -0
- pygpt_net/ui/base/flow_layout.py +0 -0
- pygpt_net/ui/dialog/assistant_store.py +0 -0
- pygpt_net/ui/dialog/create.py +0 -0
- pygpt_net/ui/dialog/db.py +0 -0
- pygpt_net/ui/dialog/dictionary.py +0 -0
- pygpt_net/ui/dialog/find.py +0 -0
- pygpt_net/ui/dialog/models_importer.py +0 -0
- pygpt_net/ui/dialog/preset_plugins.py +0 -0
- pygpt_net/ui/dialog/profile.py +0 -0
- pygpt_net/ui/dialog/snap.py +0 -0
- pygpt_net/ui/dialog/url.py +0 -0
- pygpt_net/ui/dialog/workdir.py +0 -0
- pygpt_net/ui/layout/chat/attachments_ctx.py +0 -0
- pygpt_net/ui/layout/chat/calendar.py +0 -0
- pygpt_net/ui/layout/chat/chat.py +0 -0
- pygpt_net/ui/layout/chat/explorer.py +0 -0
- pygpt_net/ui/layout/chat/painter.py +0 -0
- pygpt_net/ui/layout/ctx/ctx.py +0 -0
- pygpt_net/ui/layout/toolbox/agent.py +0 -0
- pygpt_net/ui/layout/toolbox/agent_llama.py +0 -0
- pygpt_net/ui/layout/toolbox/audio.py +0 -0
- pygpt_net/ui/layout/toolbox/computer_env.py +0 -0
- pygpt_net/ui/layout/toolbox/indexes.py +0 -0
- pygpt_net/ui/layout/toolbox/raw.py +0 -0
- pygpt_net/ui/layout/toolbox/split.py +0 -0
- pygpt_net/ui/layout/toolbox/toolbox.py +0 -0
- pygpt_net/ui/layout/toolbox/video.py +0 -0
- pygpt_net/ui/menu/__init__.py +0 -0
- pygpt_net/ui/menu/audio.py +0 -0
- pygpt_net/ui/menu/config.py +0 -0
- pygpt_net/ui/menu/debug.py +4 -1
- pygpt_net/ui/menu/file.py +0 -0
- pygpt_net/ui/menu/lang.py +0 -0
- pygpt_net/ui/menu/menu.py +0 -0
- pygpt_net/ui/menu/plugins.py +0 -0
- pygpt_net/ui/menu/tools.py +0 -0
- pygpt_net/ui/menu/video.py +0 -0
- pygpt_net/ui/tray.py +0 -0
- pygpt_net/ui/widget/anims/loader.py +0 -0
- pygpt_net/ui/widget/anims/toggles.py +0 -0
- pygpt_net/ui/widget/audio/bar.py +0 -0
- pygpt_net/ui/widget/calendar/__init__.py +0 -0
- pygpt_net/ui/widget/calendar/select.py +0 -0
- pygpt_net/ui/widget/dialog/applog.py +0 -0
- pygpt_net/ui/widget/dialog/assistant_store.py +0 -0
- pygpt_net/ui/widget/dialog/audio.py +0 -0
- pygpt_net/ui/widget/dialog/create.py +0 -0
- pygpt_net/ui/widget/dialog/db.py +0 -0
- pygpt_net/ui/widget/dialog/find.py +0 -0
- pygpt_net/ui/widget/dialog/license.py +0 -0
- pygpt_net/ui/widget/dialog/model.py +0 -0
- pygpt_net/ui/widget/dialog/model_importer.py +0 -0
- pygpt_net/ui/widget/dialog/preset_plugins.py +0 -0
- pygpt_net/ui/widget/dialog/profile.py +0 -0
- pygpt_net/ui/widget/dialog/snap.py +0 -0
- pygpt_net/ui/widget/dialog/url.py +0 -0
- pygpt_net/ui/widget/dialog/workdir.py +0 -0
- pygpt_net/ui/widget/draw/painter.py +0 -0
- pygpt_net/ui/widget/element/button.py +0 -0
- pygpt_net/ui/widget/element/checkbox.py +0 -0
- pygpt_net/ui/widget/lists/assistant_store.py +0 -0
- pygpt_net/ui/widget/lists/attachment_ctx.py +0 -0
- pygpt_net/ui/widget/lists/base_combo.py +0 -0
- pygpt_net/ui/widget/lists/base_list_combo.py +0 -0
- pygpt_net/ui/widget/lists/db.py +0 -0
- pygpt_net/ui/widget/lists/debug.py +0 -0
- pygpt_net/ui/widget/lists/experts.py +0 -0
- pygpt_net/ui/widget/lists/index.py +0 -0
- pygpt_net/ui/widget/lists/index_combo.py +0 -0
- pygpt_net/ui/widget/lists/llama_mode_combo.py +0 -0
- pygpt_net/ui/widget/lists/mode_combo.py +0 -0
- pygpt_net/ui/widget/lists/model_combo.py +0 -0
- pygpt_net/ui/widget/lists/model_editor.py +0 -0
- pygpt_net/ui/widget/lists/model_importer.py +0 -0
- pygpt_net/ui/widget/lists/preset_plugins.py +0 -0
- pygpt_net/ui/widget/lists/profile.py +0 -0
- pygpt_net/ui/widget/lists/settings.py +0 -0
- pygpt_net/ui/widget/option/checkbox_list.py +0 -0
- pygpt_net/ui/widget/option/cmd.py +0 -0
- pygpt_net/ui/widget/option/combo.py +0 -0
- pygpt_net/ui/widget/option/prompt.py +0 -0
- pygpt_net/ui/widget/option/toggle.py +0 -0
- pygpt_net/ui/widget/option/toggle_label.py +0 -0
- pygpt_net/ui/widget/tabs/Input.py +0 -0
- pygpt_net/ui/widget/tabs/__init__.py +0 -0
- pygpt_net/ui/widget/tabs/body.py +0 -0
- pygpt_net/ui/widget/tabs/layout.py +0 -0
- pygpt_net/ui/widget/tabs/output.py +0 -0
- pygpt_net/ui/widget/textarea/calendar_note.py +0 -0
- pygpt_net/ui/widget/textarea/console.py +0 -0
- pygpt_net/ui/widget/textarea/create.py +0 -0
- pygpt_net/ui/widget/textarea/editor.py +0 -0
- pygpt_net/ui/widget/textarea/find.py +0 -0
- pygpt_net/ui/widget/textarea/html.py +0 -0
- pygpt_net/ui/widget/textarea/url.py +0 -0
- pygpt_net/ui/widget/textarea/web.py +84 -154
- pygpt_net/utils.py +17 -0
- {pygpt_net-2.6.39.dist-info → pygpt_net-2.6.41.dist-info}/METADATA +12 -2
- {pygpt_net-2.6.39.dist-info → pygpt_net-2.6.41.dist-info}/RECORD +53 -47
- {pygpt_net-2.6.39.dist-info → pygpt_net-2.6.41.dist-info}/LICENSE +0 -0
- {pygpt_net-2.6.39.dist-info → pygpt_net-2.6.41.dist-info}/WHEEL +0 -0
- {pygpt_net-2.6.39.dist-info → pygpt_net-2.6.41.dist-info}/entry_points.txt +0 -0
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
|
7
7
|
# MIT License #
|
|
8
8
|
# Created By : Marcin Szczygliński #
|
|
9
|
-
# Updated Date: 2025.09.
|
|
9
|
+
# Updated Date: 2025.09.11 08:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
|
+
import gc
|
|
12
13
|
import json
|
|
13
14
|
import os
|
|
14
15
|
import re
|
|
15
|
-
import
|
|
16
|
+
import html as _html
|
|
16
17
|
from dataclasses import dataclass, field
|
|
17
18
|
|
|
18
19
|
from datetime import datetime
|
|
@@ -20,14 +21,19 @@ from typing import Optional, List, Any
|
|
|
20
21
|
from time import monotonic
|
|
21
22
|
from io import StringIO
|
|
22
23
|
|
|
24
|
+
from PySide6.QtCore import QTimer, QUrl
|
|
25
|
+
from PySide6.QtWebEngineCore import QWebEnginePage
|
|
26
|
+
|
|
23
27
|
from pygpt_net.core.render.base import BaseRenderer
|
|
24
28
|
from pygpt_net.core.text.utils import has_unclosed_code_tag
|
|
25
29
|
from pygpt_net.item.ctx import CtxItem, CtxMeta
|
|
26
30
|
from pygpt_net.ui.widget.textarea.input import ChatInput
|
|
27
|
-
from pygpt_net.
|
|
31
|
+
from pygpt_net.ui.widget.textarea.web import ChatWebOutput
|
|
32
|
+
from pygpt_net.utils import trans, sizeof_fmt
|
|
28
33
|
from pygpt_net.core.tabs.tab import Tab
|
|
29
34
|
|
|
30
35
|
from .body import Body
|
|
36
|
+
from .debug import malloc_trim_linux, parse_bytes, mem_used_bytes
|
|
31
37
|
from .helpers import Helpers
|
|
32
38
|
from .parser import Parser
|
|
33
39
|
from .pid import PidData
|
|
@@ -39,17 +45,10 @@ class Renderer(BaseRenderer):
|
|
|
39
45
|
|
|
40
46
|
NODE_INPUT = 0
|
|
41
47
|
NODE_OUTPUT = 1
|
|
42
|
-
ENDINGS_CODE = (
|
|
43
|
-
"</code></pre></div>",
|
|
44
|
-
"</code></pre></div><br/>",
|
|
45
|
-
"</code></pre></div><br>"
|
|
46
|
-
)
|
|
47
|
-
ENDINGS_LIST = (
|
|
48
|
-
"</ul>",
|
|
49
|
-
"</ol>",
|
|
50
|
-
"</li>"
|
|
51
|
-
)
|
|
52
48
|
RE_AMP_LT_GT = re.compile(r'&(lt|gt);')
|
|
49
|
+
RE_MD_STRUCTURAL = re.compile(
|
|
50
|
+
r'(?m)(^|\n)\s*(?:#{1,6}\s|[-*+]\s|\d+\.\s|>\s|\|[^|\n]+\|[^|\n]*\|)'
|
|
51
|
+
)
|
|
53
52
|
|
|
54
53
|
@dataclass(slots=True)
|
|
55
54
|
class _AppendBuffer:
|
|
@@ -111,13 +110,52 @@ class Renderer(BaseRenderer):
|
|
|
111
110
|
self._icon_sync = os.path.join(app_path, "data", "icons", "sync.svg")
|
|
112
111
|
self._file_prefix = 'file:///' if self.window and self.window.core.platforms.is_windows() else 'file://'
|
|
113
112
|
|
|
114
|
-
|
|
115
|
-
self.
|
|
113
|
+
# Bridge readiness for node append/replace path
|
|
114
|
+
self._bridge_ready: dict[int, bool] = {}
|
|
115
|
+
self._pending_nodes: dict[int, list[tuple[bool, str]]] = {} # (replace, payload)
|
|
116
|
+
self._pending_timer: dict[int, QTimer] = {}
|
|
117
|
+
|
|
118
|
+
def _cfg(name: str, default: int) -> int:
|
|
119
|
+
try:
|
|
120
|
+
return int(self.window.core.config.get(name, default) if self.window else default)
|
|
121
|
+
except Exception:
|
|
122
|
+
return default
|
|
123
|
+
|
|
124
|
+
# ------------------------------------------------------------------
|
|
125
|
+
# Python-side micro-batching for streaming
|
|
126
|
+
# ------------------------------------------------------------------
|
|
127
|
+
# render.stream.interval_ms (int, default 100)
|
|
128
|
+
# render.stream.max_bytes (int, default 8192)
|
|
129
|
+
# render.stream.emergency_bytes (int, default 524288)
|
|
130
|
+
|
|
131
|
+
self._stream_interval_ms: int = _cfg('render.stream.interval_ms', 30) # ~100ms pacing
|
|
132
|
+
self._stream_max_bytes: int = _cfg('render.stream.max_bytes', 8 * 1024) # idle flush threshold
|
|
133
|
+
self._stream_emergency_bytes: int = _cfg('render.stream.emergency_bytes', 512 * 1024) # backstop
|
|
134
|
+
|
|
135
|
+
# Per-PID streaming state
|
|
136
|
+
self._stream_acc: dict[int, Renderer._AppendBuffer] = {}
|
|
137
|
+
self._stream_timer: dict[int, QTimer] = {}
|
|
138
|
+
self._stream_header: dict[int, str] = {}
|
|
139
|
+
self._stream_last_flush: dict[int, float] = {}
|
|
140
|
+
|
|
141
|
+
# Pid-related cached methods
|
|
142
|
+
self._get_pid = None
|
|
143
|
+
self._get_output_node_by_meta = None
|
|
144
|
+
self._get_output_node_by_pid = None
|
|
145
|
+
if (self.window and hasattr(self.window, "core")
|
|
146
|
+
and hasattr(self.window.core, "ctx")
|
|
147
|
+
and hasattr(self.window.core.ctx, "output")):
|
|
148
|
+
self._get_pid = self.window.core.ctx.output.get_pid
|
|
149
|
+
self._get_output_node_by_meta = self.window.core.ctx.output.get_current
|
|
150
|
+
self._get_output_node_by_pid = self.window.core.ctx.output.get_by_pid
|
|
151
|
+
|
|
152
|
+
# store last memory cleanup time
|
|
153
|
+
self._last_memory_cleanup = None
|
|
154
|
+
self._min_memory_cleanup_interval = 30 # seconds
|
|
155
|
+
self._min_memory_cleanup_bytes = 2147483648 # 2GB, TODO: init at startup based on system RAM
|
|
116
156
|
|
|
117
157
|
def prepare(self):
|
|
118
|
-
"""
|
|
119
|
-
Prepare renderer
|
|
120
|
-
"""
|
|
158
|
+
"""Prepare renderer"""
|
|
121
159
|
self.pids = {}
|
|
122
160
|
|
|
123
161
|
def on_load(self, meta: CtxMeta = None):
|
|
@@ -129,7 +167,6 @@ class Renderer(BaseRenderer):
|
|
|
129
167
|
node = self.get_output_node(meta)
|
|
130
168
|
node.set_meta(meta)
|
|
131
169
|
self.reset(meta)
|
|
132
|
-
self.parser.reset()
|
|
133
170
|
try:
|
|
134
171
|
node.page().runJavaScript("if (typeof window.prepare !== 'undefined') prepare();")
|
|
135
172
|
except Exception:
|
|
@@ -152,6 +189,12 @@ class Renderer(BaseRenderer):
|
|
|
152
189
|
if pid is None or pid not in self.pids:
|
|
153
190
|
return
|
|
154
191
|
|
|
192
|
+
node = self.get_output_node_by_pid(pid)
|
|
193
|
+
if node:
|
|
194
|
+
if pid not in self._bridge_ready:
|
|
195
|
+
self._bridge_ready[pid] = False
|
|
196
|
+
self._pending_nodes.setdefault(pid, [])
|
|
197
|
+
|
|
155
198
|
self.pids[pid].loaded = True
|
|
156
199
|
if self.pids[pid].html != "" and not self.pids[pid].use_buffer:
|
|
157
200
|
self.clear_chunks_input(pid)
|
|
@@ -160,19 +203,23 @@ class Renderer(BaseRenderer):
|
|
|
160
203
|
self.append(pid, self.pids[pid].html, flush=True)
|
|
161
204
|
self.pids[pid].html = ""
|
|
162
205
|
|
|
163
|
-
def get_pid(self, meta: CtxMeta):
|
|
206
|
+
def get_pid(self, meta: CtxMeta) -> Optional[int]:
|
|
164
207
|
"""
|
|
165
208
|
Get PID for context meta
|
|
166
209
|
|
|
167
|
-
:param meta: context
|
|
210
|
+
:param meta: context meta
|
|
211
|
+
:return: PID or None
|
|
168
212
|
"""
|
|
169
|
-
|
|
213
|
+
if self._get_pid is None:
|
|
214
|
+
self._get_pid = self.window.core.ctx.output.get_pid
|
|
215
|
+
return self._get_pid(meta)
|
|
170
216
|
|
|
171
|
-
def get_or_create_pid(self, meta: CtxMeta):
|
|
217
|
+
def get_or_create_pid(self, meta: CtxMeta) -> Optional[int]:
|
|
172
218
|
"""
|
|
173
219
|
Get PID for context meta and create PID data (if not exists)
|
|
174
220
|
|
|
175
|
-
:param meta: context
|
|
221
|
+
:param meta: context meta
|
|
222
|
+
:return: PID or None
|
|
176
223
|
"""
|
|
177
224
|
if meta is not None:
|
|
178
225
|
pid = self.get_pid(meta)
|
|
@@ -194,11 +241,12 @@ class Renderer(BaseRenderer):
|
|
|
194
241
|
if pid is not None:
|
|
195
242
|
self.pids[pid] = PidData(pid, meta)
|
|
196
243
|
|
|
197
|
-
def get_pid_data(self, pid: int):
|
|
244
|
+
def get_pid_data(self, pid: int) -> Optional[PidData]:
|
|
198
245
|
"""
|
|
199
246
|
Get PID data for given PID
|
|
200
247
|
|
|
201
248
|
:param pid: PID
|
|
249
|
+
:return: PidData or None
|
|
202
250
|
"""
|
|
203
251
|
if pid in self.pids:
|
|
204
252
|
return self.pids[pid]
|
|
@@ -311,6 +359,9 @@ class Renderer(BaseRenderer):
|
|
|
311
359
|
self.reload()
|
|
312
360
|
self.pids[pid].clear()
|
|
313
361
|
|
|
362
|
+
# memory cleanup if needed
|
|
363
|
+
self.auto_cleanup(meta)
|
|
364
|
+
|
|
314
365
|
def end_extra(
|
|
315
366
|
self,
|
|
316
367
|
meta: CtxMeta,
|
|
@@ -337,12 +388,26 @@ class Renderer(BaseRenderer):
|
|
|
337
388
|
:param meta: context meta
|
|
338
389
|
:param ctx: context item
|
|
339
390
|
"""
|
|
391
|
+
pid = self.get_or_create_pid(meta)
|
|
392
|
+
if pid is not None:
|
|
393
|
+
pctx = self.pids[pid]
|
|
394
|
+
pctx.clear()
|
|
395
|
+
self._stream_reset(pid)
|
|
340
396
|
self.prev_chunk_replace = False
|
|
341
397
|
try:
|
|
342
|
-
self.get_output_node(meta).page().runJavaScript(
|
|
398
|
+
self.get_output_node(meta).page().runJavaScript(
|
|
399
|
+
"if (typeof window.beginStream !== 'undefined') beginStream();"
|
|
400
|
+
)
|
|
343
401
|
except Exception:
|
|
344
402
|
pass
|
|
345
403
|
|
|
404
|
+
# cache name header once per stream (used by JS to show avatar/name)
|
|
405
|
+
try:
|
|
406
|
+
self.pids[pid].header = self.get_name_header(ctx, stream=True)
|
|
407
|
+
except Exception:
|
|
408
|
+
self.pids[pid].header = ""
|
|
409
|
+
self.update_names(meta, ctx)
|
|
410
|
+
|
|
346
411
|
def stream_end(
|
|
347
412
|
self,
|
|
348
413
|
meta: CtxMeta,
|
|
@@ -359,20 +424,64 @@ class Renderer(BaseRenderer):
|
|
|
359
424
|
if pid is None:
|
|
360
425
|
return
|
|
361
426
|
|
|
362
|
-
|
|
363
|
-
self.
|
|
427
|
+
# Flush any pending micro-batch before we close the stream
|
|
428
|
+
self._stream_flush(pid, force=True)
|
|
364
429
|
if self.window.controller.agent.legacy.enabled():
|
|
365
430
|
if self.pids[pid].item is not None:
|
|
366
431
|
self.append_context_item(meta, self.pids[pid].item)
|
|
367
432
|
self.pids[pid].item = None
|
|
368
433
|
self.pids[pid].clear()
|
|
369
434
|
try:
|
|
370
|
-
self.get_output_node(meta).page().runJavaScript("endStream();")
|
|
435
|
+
self.get_output_node(meta).page().runJavaScript("if (typeof window.endStream !== 'undefined') endStream();")
|
|
371
436
|
except Exception:
|
|
372
437
|
pass
|
|
438
|
+
self._stream_reset(pid) # clean after end
|
|
439
|
+
|
|
440
|
+
# memory cleanup if needed
|
|
441
|
+
self.auto_cleanup(meta)
|
|
373
442
|
|
|
374
|
-
|
|
375
|
-
|
|
443
|
+
def auto_cleanup(self, meta: CtxMeta):
|
|
444
|
+
"""
|
|
445
|
+
Automatic cleanup after context is done
|
|
446
|
+
|
|
447
|
+
:param meta: context meta
|
|
448
|
+
"""
|
|
449
|
+
# if memory limit reached - destroy old page view
|
|
450
|
+
try:
|
|
451
|
+
limit_bytes = parse_bytes(self.window.core.config.get('render.memory.limit', 0))
|
|
452
|
+
except Exception as e:
|
|
453
|
+
self.window.core.debug.log("[Renderer] auto-cleanup:", e)
|
|
454
|
+
limit_bytes = 0
|
|
455
|
+
#if limit_bytes <= 0 or limit_bytes < self._min_memory_cleanup_bytes:
|
|
456
|
+
if limit_bytes <= 0:
|
|
457
|
+
self.auto_cleanup_soft(meta)
|
|
458
|
+
return
|
|
459
|
+
used = mem_used_bytes()
|
|
460
|
+
if used >= limit_bytes:
|
|
461
|
+
now = datetime.now()
|
|
462
|
+
if self._last_memory_cleanup is not None:
|
|
463
|
+
delta = (now - self._last_memory_cleanup).total_seconds()
|
|
464
|
+
if delta < self._min_memory_cleanup_interval:
|
|
465
|
+
return
|
|
466
|
+
try:
|
|
467
|
+
self._last_memory_cleanup = now
|
|
468
|
+
self.fresh(meta, force=True)
|
|
469
|
+
print(f"[Renderer] Memory auto-cleanup done, reached limit: {sizeof_fmt(used)} / {sizeof_fmt(limit_bytes)}")
|
|
470
|
+
except Exception as e:
|
|
471
|
+
self.window.core.debug.log(e)
|
|
472
|
+
else:
|
|
473
|
+
self.auto_cleanup_soft(meta)
|
|
474
|
+
|
|
475
|
+
def auto_cleanup_soft(self, meta: CtxMeta = None):
|
|
476
|
+
"""
|
|
477
|
+
Automatic soft cleanup (try to trim memory)
|
|
478
|
+
|
|
479
|
+
:param meta: context meta
|
|
480
|
+
"""
|
|
481
|
+
try:
|
|
482
|
+
malloc_trim_linux()
|
|
483
|
+
except Exception:
|
|
484
|
+
pass
|
|
376
485
|
|
|
377
486
|
def append_context(
|
|
378
487
|
self,
|
|
@@ -445,7 +554,6 @@ class Renderer(BaseRenderer):
|
|
|
445
554
|
self.pids[pid].html,
|
|
446
555
|
flush=True,
|
|
447
556
|
)
|
|
448
|
-
self.parser.reset()
|
|
449
557
|
|
|
450
558
|
def append_context_all(
|
|
451
559
|
self,
|
|
@@ -544,7 +652,6 @@ class Renderer(BaseRenderer):
|
|
|
544
652
|
flush=True,
|
|
545
653
|
replace=True,
|
|
546
654
|
)
|
|
547
|
-
self.parser.reset()
|
|
548
655
|
|
|
549
656
|
def prepare_input(
|
|
550
657
|
self, meta: CtxMeta,
|
|
@@ -612,6 +719,7 @@ class Renderer(BaseRenderer):
|
|
|
612
719
|
if self.is_stream() and not append:
|
|
613
720
|
content = self.prepare_node(meta, ctx, text, self.NODE_INPUT)
|
|
614
721
|
self.append_chunk_input(meta, ctx, content, begin=False)
|
|
722
|
+
text = None
|
|
615
723
|
return
|
|
616
724
|
self.append_node(
|
|
617
725
|
meta=meta,
|
|
@@ -619,6 +727,7 @@ class Renderer(BaseRenderer):
|
|
|
619
727
|
html=text,
|
|
620
728
|
type=self.NODE_INPUT,
|
|
621
729
|
)
|
|
730
|
+
text = None # free reference
|
|
622
731
|
|
|
623
732
|
def prepare_output(
|
|
624
733
|
self,
|
|
@@ -692,7 +801,10 @@ class Renderer(BaseRenderer):
|
|
|
692
801
|
begin: bool = False
|
|
693
802
|
):
|
|
694
803
|
"""
|
|
695
|
-
Append
|
|
804
|
+
Append streamed Markdown chunk to JS with micro-batching.
|
|
805
|
+
- No Python-side parsing
|
|
806
|
+
- No Python-side full buffer retention
|
|
807
|
+
- Minimal signal rate thanks to micro-batching (per PID)
|
|
696
808
|
|
|
697
809
|
:param meta: context meta
|
|
698
810
|
:param ctx: context item
|
|
@@ -700,124 +812,32 @@ class Renderer(BaseRenderer):
|
|
|
700
812
|
:param begin: if it is the beginning of the text
|
|
701
813
|
"""
|
|
702
814
|
pid = self.get_or_create_pid(meta)
|
|
703
|
-
|
|
704
|
-
pctx.item = ctx
|
|
705
|
-
|
|
706
|
-
if not text_chunk:
|
|
707
|
-
if begin:
|
|
708
|
-
pctx.clear()
|
|
709
|
-
self._throttle_emit(pid, force=True)
|
|
710
|
-
self._throttle_reset(pid)
|
|
815
|
+
if pid is None:
|
|
711
816
|
return
|
|
712
817
|
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
pctx.header = self.get_name_header(ctx, stream=True)
|
|
716
|
-
self.update_names(meta, ctx)
|
|
717
|
-
|
|
718
|
-
name_header_str = pctx.header
|
|
719
|
-
text_chunk = text_chunk if isinstance(text_chunk, str) else str(text_chunk)
|
|
720
|
-
# Escape angle brackets only if present to avoid unnecessary allocations
|
|
721
|
-
if ('<' in text_chunk) or ('>' in text_chunk):
|
|
722
|
-
text_chunk = text_chunk.translate({ord('<'): '<', ord('>'): '>'})
|
|
723
|
-
|
|
724
|
-
if begin:
|
|
725
|
-
if self.is_debug():
|
|
726
|
-
debug = self.append_debug(ctx, pid, "stream")
|
|
727
|
-
if debug:
|
|
728
|
-
text_chunk = debug + text_chunk
|
|
729
|
-
self._throttle_emit(pid, force=True)
|
|
730
|
-
self._throttle_reset(pid)
|
|
731
|
-
pctx.clear()
|
|
732
|
-
pctx.is_cmd = False
|
|
733
|
-
self.clear_chunks_output(pid)
|
|
734
|
-
self.prev_chunk_replace = False
|
|
735
|
-
|
|
736
|
-
# Append to the logical buffer (owned by pid)
|
|
737
|
-
pctx.append_buffer(text_chunk)
|
|
738
|
-
buffer = pctx.buffer
|
|
739
|
-
|
|
740
|
-
# Cheap detection of open code fence without full parse
|
|
741
|
-
open_code = has_unclosed_code_tag(buffer)
|
|
742
|
-
|
|
743
|
-
# Newline/flow state
|
|
744
|
-
is_n = "\n" in text_chunk
|
|
745
|
-
is_newline = is_n or buffer.endswith("\n") or open_code
|
|
746
|
-
force_replace = self.prev_chunk_newline
|
|
747
|
-
self.prev_chunk_newline = bool(is_n)
|
|
748
|
-
|
|
749
|
-
replace = False
|
|
750
|
-
if is_newline or force_replace:
|
|
751
|
-
replace = True
|
|
752
|
-
# Do not replace for an open code block unless a newline arrived
|
|
753
|
-
if open_code and not is_n:
|
|
754
|
-
replace = False
|
|
755
|
-
|
|
756
|
-
thr = self._throttle_get(pid)
|
|
757
|
-
html = None
|
|
758
|
-
|
|
759
|
-
# Only parse when required:
|
|
760
|
-
# - a replace is needed now, or
|
|
761
|
-
# - a replace is pending in the throttle and must be refreshed, or
|
|
762
|
-
# - rarely: we must detect list termination without a newline
|
|
763
|
-
need_parse_for_pending_replace = (thr["op"] == 1)
|
|
764
|
-
need_parse_for_list = False
|
|
765
|
-
|
|
766
|
-
if not replace:
|
|
767
|
-
# Very rare case: list closing without newline. Check on a short tail only.
|
|
768
|
-
# This keeps behavior intact while avoiding full-buffer parse on every chunk.
|
|
769
|
-
tail = buffer[-4096:]
|
|
770
|
-
if tail:
|
|
771
|
-
tail_to_parse = f"{tail}\n```" if open_code else tail
|
|
772
|
-
tail_html = self.parser.parse(tail_to_parse)
|
|
773
|
-
need_parse_for_list = tail_html.endswith(self.ENDINGS_LIST)
|
|
774
|
-
# Tail string is short and will be collected promptly
|
|
775
|
-
del tail_html
|
|
776
|
-
if need_parse_for_list:
|
|
777
|
-
replace = True
|
|
778
|
-
|
|
779
|
-
if replace or need_parse_for_pending_replace:
|
|
780
|
-
buffer_to_parse = f"{buffer}\n```" if open_code else buffer
|
|
781
|
-
html = self.parser.parse(buffer_to_parse)
|
|
782
|
-
# Help the GC by breaking the reference as soon as possible
|
|
783
|
-
del buffer_to_parse
|
|
784
|
-
|
|
785
|
-
is_code_block = open_code
|
|
786
|
-
|
|
787
|
-
# Adjust output chunk formatting based on block type
|
|
788
|
-
if not is_code_block:
|
|
789
|
-
if is_n:
|
|
790
|
-
# Convert text newlines to <br/> in non-code context
|
|
791
|
-
text_chunk = text_chunk.replace("\n", "<br/>")
|
|
792
|
-
else:
|
|
793
|
-
# When previous operation replaced content and this chunk closes the fence,
|
|
794
|
-
# prepend a newline so the final code block renders correctly.
|
|
795
|
-
if self.prev_chunk_replace and (is_code_block and not has_unclosed_code_tag(text_chunk)):
|
|
796
|
-
text_chunk = "\n" + text_chunk
|
|
797
|
-
|
|
798
|
-
# Update replace flag for next iteration AFTER formatting decisions
|
|
799
|
-
self.prev_chunk_replace = replace
|
|
818
|
+
pctx = self.pids[pid]
|
|
819
|
+
pctx.item = ctx
|
|
800
820
|
|
|
801
821
|
if begin:
|
|
822
|
+
# Reset stream area and loader on the JS side
|
|
802
823
|
try:
|
|
803
|
-
self.get_output_node(meta).page().runJavaScript(
|
|
824
|
+
self.get_output_node(meta).page().runJavaScript(
|
|
825
|
+
"if (typeof window.beginStream !== 'undefined') beginStream(true);"
|
|
826
|
+
)
|
|
804
827
|
except Exception:
|
|
805
828
|
pass
|
|
829
|
+
# Prepare name header for this stream (avatar/name)
|
|
830
|
+
pctx.header = self.get_name_header(ctx, stream=True)
|
|
831
|
+
self._stream_reset(pid)
|
|
832
|
+
self.update_names(meta, ctx)
|
|
806
833
|
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
pid=pid,
|
|
810
|
-
name=name_header_str or "",
|
|
811
|
-
html=html if html is not None else "",
|
|
812
|
-
text_chunk=text_chunk,
|
|
813
|
-
replace=replace,
|
|
814
|
-
is_code_block=is_code_block,
|
|
815
|
-
)
|
|
816
|
-
# Explicitly drop local ref to large html string as early as possible
|
|
817
|
-
html = None
|
|
834
|
+
if not text_chunk:
|
|
835
|
+
return
|
|
818
836
|
|
|
819
|
-
#
|
|
820
|
-
self.
|
|
837
|
+
# Push chunk into per-PID micro-batch buffer (will be flushed by a QTimer)
|
|
838
|
+
self._stream_push(pid, pctx.header or "", str(text_chunk))
|
|
839
|
+
# self.get_output_node(meta).page().bridge.chunk.emit(pctx.header or "", str(text_chunk))
|
|
840
|
+
text_chunk = None # release ref
|
|
821
841
|
|
|
822
842
|
def next_chunk(
|
|
823
843
|
self,
|
|
@@ -831,8 +851,8 @@ class Renderer(BaseRenderer):
|
|
|
831
851
|
:param ctx: context item
|
|
832
852
|
"""
|
|
833
853
|
pid = self.get_or_create_pid(meta)
|
|
834
|
-
|
|
835
|
-
self.
|
|
854
|
+
# Ensure all pending chunks are delivered before switching message
|
|
855
|
+
self._stream_flush(pid, force=True)
|
|
836
856
|
self.pids[pid].item = ctx
|
|
837
857
|
self.pids[pid].buffer = ""
|
|
838
858
|
self.update_names(meta, ctx)
|
|
@@ -840,10 +860,15 @@ class Renderer(BaseRenderer):
|
|
|
840
860
|
self.prev_chunk_newline = False
|
|
841
861
|
try:
|
|
842
862
|
self.get_output_node(meta).page().runJavaScript(
|
|
843
|
-
"nextStream();"
|
|
863
|
+
"if (typeof window.nextStream !== 'undefined') nextStream();"
|
|
844
864
|
)
|
|
845
865
|
except Exception:
|
|
846
866
|
pass
|
|
867
|
+
# Reset micro-batch header for the next message
|
|
868
|
+
try:
|
|
869
|
+
self.pids[pid].header = self.get_name_header(ctx, stream=True)
|
|
870
|
+
except Exception:
|
|
871
|
+
self.pids[pid].header = ""
|
|
847
872
|
|
|
848
873
|
def append_chunk_input(
|
|
849
874
|
self,
|
|
@@ -860,23 +885,19 @@ class Renderer(BaseRenderer):
|
|
|
860
885
|
:param text_chunk: text chunk
|
|
861
886
|
:param begin: if it is the beginning of the text
|
|
862
887
|
"""
|
|
863
|
-
if
|
|
888
|
+
if not text_chunk:
|
|
864
889
|
return
|
|
865
890
|
if ctx.hidden:
|
|
866
891
|
return
|
|
867
|
-
|
|
868
|
-
pid = self.get_or_create_pid(meta)
|
|
869
|
-
self.clear_chunks_input(pid)
|
|
870
892
|
try:
|
|
871
|
-
self.get_output_node(meta).page().
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
)
|
|
876
|
-
)});"""
|
|
893
|
+
self.get_output_node(meta).page().bridge.nodeInput.emit(
|
|
894
|
+
self.sanitize_html(
|
|
895
|
+
text_chunk
|
|
896
|
+
)
|
|
877
897
|
)
|
|
878
898
|
except Exception:
|
|
879
899
|
pass
|
|
900
|
+
text_chunk = None # free reference
|
|
880
901
|
|
|
881
902
|
def append_live(
|
|
882
903
|
self,
|
|
@@ -912,15 +933,13 @@ class Renderer(BaseRenderer):
|
|
|
912
933
|
self.pids[pid].is_cmd = False
|
|
913
934
|
self.clear_live(meta, ctx)
|
|
914
935
|
self.pids[pid].append_live_buffer(raw_chunk)
|
|
936
|
+
raw_chunk = None # free reference
|
|
915
937
|
|
|
916
|
-
to_append = self.pids[pid].live_buffer
|
|
917
|
-
if has_unclosed_code_tag(self.pids[pid].live_buffer):
|
|
918
|
-
to_append += "\n```"
|
|
919
938
|
try:
|
|
920
939
|
self.get_output_node(meta).page().runJavaScript(
|
|
921
940
|
f"""replaceLive({self.to_json(
|
|
922
941
|
self.sanitize_html(
|
|
923
|
-
self.
|
|
942
|
+
self.pids[pid].live_buffer
|
|
924
943
|
)
|
|
925
944
|
)});"""
|
|
926
945
|
)
|
|
@@ -937,12 +956,10 @@ class Renderer(BaseRenderer):
|
|
|
937
956
|
if meta is None:
|
|
938
957
|
return
|
|
939
958
|
pid = self.get_or_create_pid(meta)
|
|
940
|
-
if not self.pids[pid].loaded:
|
|
941
|
-
js = "var element = document.getElementById('_append_live_');if (element) { element.replaceChildren(); }"
|
|
942
|
-
else:
|
|
943
|
-
js = "clearLive();"
|
|
944
959
|
try:
|
|
945
|
-
self.get_output_node_by_pid(pid).page().runJavaScript(
|
|
960
|
+
self.get_output_node_by_pid(pid).page().runJavaScript(
|
|
961
|
+
"if (typeof window.clearLive !== 'undefined') clearLive();"
|
|
962
|
+
)
|
|
946
963
|
except Exception:
|
|
947
964
|
pass
|
|
948
965
|
|
|
@@ -1004,6 +1021,7 @@ class Renderer(BaseRenderer):
|
|
|
1004
1021
|
else:
|
|
1005
1022
|
if not flush:
|
|
1006
1023
|
self.pids[pid].append_html(html)
|
|
1024
|
+
html = None # free reference
|
|
1007
1025
|
|
|
1008
1026
|
def append_context_item(
|
|
1009
1027
|
self,
|
|
@@ -1043,7 +1061,7 @@ class Renderer(BaseRenderer):
|
|
|
1043
1061
|
"""
|
|
1044
1062
|
Append extra data (images, files, etc.) to output
|
|
1045
1063
|
|
|
1046
|
-
:param meta:
|
|
1064
|
+
:param meta: Context meta
|
|
1047
1065
|
:param ctx: context item
|
|
1048
1066
|
:param footer: True if it is a footer
|
|
1049
1067
|
:param render: True if render, False if only return HTML
|
|
@@ -1183,12 +1201,11 @@ class Renderer(BaseRenderer):
|
|
|
1183
1201
|
:param pid: context PID
|
|
1184
1202
|
:param clear_nodes: True if clear nodes
|
|
1185
1203
|
"""
|
|
1186
|
-
self.parser.reset()
|
|
1187
1204
|
self.pids[pid].item = None
|
|
1188
1205
|
self.pids[pid].html = ""
|
|
1189
1206
|
if clear_nodes:
|
|
1190
1207
|
self.clear_nodes(pid)
|
|
1191
|
-
|
|
1208
|
+
self.clear_chunks(pid)
|
|
1192
1209
|
self.pids[pid].images_appended = []
|
|
1193
1210
|
self.pids[pid].urls_appended = []
|
|
1194
1211
|
self.pids[pid].files_appended = []
|
|
@@ -1197,7 +1214,7 @@ class Renderer(BaseRenderer):
|
|
|
1197
1214
|
node.reset_current_content()
|
|
1198
1215
|
self.reset_names_by_pid(pid)
|
|
1199
1216
|
self.prev_chunk_replace = False
|
|
1200
|
-
self.
|
|
1217
|
+
self._stream_reset(pid) # NEW
|
|
1201
1218
|
|
|
1202
1219
|
def clear_input(self):
|
|
1203
1220
|
"""Clear input"""
|
|
@@ -1237,12 +1254,10 @@ class Renderer(BaseRenderer):
|
|
|
1237
1254
|
"""
|
|
1238
1255
|
if pid is None:
|
|
1239
1256
|
return
|
|
1240
|
-
if not self.pids[pid].loaded:
|
|
1241
|
-
js = "var element = document.getElementById('_append_input_');if (element) { element.replaceChildren(); }"
|
|
1242
|
-
else:
|
|
1243
|
-
js = "clearInput();"
|
|
1244
1257
|
try:
|
|
1245
|
-
self.get_output_node_by_pid(pid).page().runJavaScript(
|
|
1258
|
+
self.get_output_node_by_pid(pid).page().runJavaScript(
|
|
1259
|
+
"if (typeof window.clearInput !== 'undefined') clearInput();"
|
|
1260
|
+
)
|
|
1246
1261
|
except Exception:
|
|
1247
1262
|
pass
|
|
1248
1263
|
|
|
@@ -1256,15 +1271,13 @@ class Renderer(BaseRenderer):
|
|
|
1256
1271
|
:pid: context PID
|
|
1257
1272
|
"""
|
|
1258
1273
|
self.prev_chunk_replace = False
|
|
1259
|
-
if not self.pids[pid].loaded:
|
|
1260
|
-
js = "var element = document.getElementById('_append_output_');if (element) { element.replaceChildren(); }"
|
|
1261
|
-
else:
|
|
1262
|
-
js = "clearOutput();"
|
|
1263
1274
|
try:
|
|
1264
|
-
self.get_output_node_by_pid(pid).page().runJavaScript(
|
|
1275
|
+
self.get_output_node_by_pid(pid).page().runJavaScript(
|
|
1276
|
+
"if (typeof window.clearOutput !== 'undefined') clearOutput();"
|
|
1277
|
+
)
|
|
1265
1278
|
except Exception:
|
|
1266
1279
|
pass
|
|
1267
|
-
self.
|
|
1280
|
+
self._stream_reset(pid) # NEW
|
|
1268
1281
|
|
|
1269
1282
|
def clear_nodes(
|
|
1270
1283
|
self,
|
|
@@ -1275,12 +1288,10 @@ class Renderer(BaseRenderer):
|
|
|
1275
1288
|
|
|
1276
1289
|
:pid: context PID
|
|
1277
1290
|
"""
|
|
1278
|
-
if not self.pids[pid].loaded:
|
|
1279
|
-
js = "var element = document.getElementById('_nodes_');if (element) { element.replaceChildren(); }"
|
|
1280
|
-
else:
|
|
1281
|
-
js = "clearNodes();"
|
|
1282
1291
|
try:
|
|
1283
|
-
self.get_output_node_by_pid(pid).page().runJavaScript(
|
|
1292
|
+
self.get_output_node_by_pid(pid).page().runJavaScript(
|
|
1293
|
+
"if (typeof window.clearNodes !== 'undefined') clearNodes();"
|
|
1294
|
+
)
|
|
1284
1295
|
except Exception:
|
|
1285
1296
|
pass
|
|
1286
1297
|
|
|
@@ -1376,33 +1387,40 @@ class Renderer(BaseRenderer):
|
|
|
1376
1387
|
next_ctx: Optional[CtxItem] = None
|
|
1377
1388
|
) -> str:
|
|
1378
1389
|
"""
|
|
1379
|
-
Prepare output node
|
|
1390
|
+
Prepare output node wrapper; content stays as raw Markdown in HTML (md-block-markdown=1).
|
|
1391
|
+
JS (markdown-it) will render it and decorate code blocks.
|
|
1392
|
+
Backward compatible with previous JS pipeline and public API.
|
|
1380
1393
|
|
|
1381
|
-
:param meta:
|
|
1394
|
+
:param meta: context meta
|
|
1382
1395
|
:param ctx: CtxItem instance
|
|
1383
|
-
:param html:
|
|
1396
|
+
:param html: raw markdown text (pre/post formatted)
|
|
1384
1397
|
:param prev_ctx: previous context item
|
|
1385
1398
|
:param next_ctx: next context item
|
|
1386
1399
|
:return: prepared HTML
|
|
1387
1400
|
"""
|
|
1388
1401
|
is_cmd = (
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1402
|
+
next_ctx is not None and
|
|
1403
|
+
next_ctx.internal and
|
|
1404
|
+
(len(ctx.cmds) > 0 or (ctx.extra_ctx is not None and len(ctx.extra_ctx) > 0))
|
|
1392
1405
|
)
|
|
1406
|
+
|
|
1393
1407
|
pid = self.get_or_create_pid(meta)
|
|
1394
1408
|
msg_id = f"msg-bot-{ctx.id}" if ctx is not None else ""
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1409
|
+
|
|
1410
|
+
# raw Markdown (no Python-side HTML rendering); keep existing pre/post formatting hooks
|
|
1411
|
+
md_src = self.helpers.pre_format_text(html)
|
|
1412
|
+
md_text = self.helpers.post_format_text(md_src)
|
|
1413
|
+
|
|
1414
|
+
# Escape Markdown for safe inclusion as textContent (browser will decode entities back to chars)
|
|
1415
|
+
# This ensures no HTML is parsed before markdown-it processes the content on the JS side.
|
|
1416
|
+
md_text_escaped = _html.escape(md_text, quote=False)
|
|
1417
|
+
|
|
1418
|
+
# extras/footer
|
|
1399
1419
|
extra = self.append_extra(meta, ctx, footer=True, render=False)
|
|
1400
1420
|
footer = self.body.prepare_action_icons(ctx)
|
|
1401
1421
|
|
|
1402
1422
|
tool_output = ""
|
|
1403
|
-
spinner = ""
|
|
1404
1423
|
output_class = "display:none"
|
|
1405
|
-
|
|
1406
1424
|
if is_cmd:
|
|
1407
1425
|
if ctx.results is not None and len(ctx.results) > 0 \
|
|
1408
1426
|
and isinstance(ctx.extra, dict) and "agent_step" in ctx.extra:
|
|
@@ -1411,28 +1429,31 @@ class Renderer(BaseRenderer):
|
|
|
1411
1429
|
else:
|
|
1412
1430
|
tool_output = self.helpers.format_cmd_text(str(next_ctx.input), indent=True)
|
|
1413
1431
|
output_class = ""
|
|
1414
|
-
|
|
1415
1432
|
elif ctx.results is not None and len(ctx.results) > 0 \
|
|
1416
1433
|
and isinstance(ctx.extra, dict) and "agent_step" in ctx.extra:
|
|
1417
1434
|
tool_output = self.helpers.format_cmd_text(str(ctx.input), indent=True)
|
|
1418
|
-
else:
|
|
1419
|
-
out = (getattr(ctx, "output", "") or "")
|
|
1420
|
-
cmds = getattr(ctx, "cmds", ())
|
|
1421
|
-
if next_ctx is None and (
|
|
1422
|
-
cmds
|
|
1423
|
-
or out.startswith(('<tool>{"cmd"', '<tool>{"cmd"'))
|
|
1424
|
-
or out.rstrip().endswith(('}</tool>', '}</tool>'))
|
|
1425
|
-
):
|
|
1426
|
-
spinner_class = ""
|
|
1427
|
-
spinner = ""
|
|
1428
|
-
# spinner_class = "" if ctx.live else "display:none"
|
|
1429
|
-
# spinner = f"<span class=\"spinner\" style=\"{spinner_class}\"><img src=\"{self._file_prefix}{self._icon_sync}\" width=\"30\" height=\"30\" class=\"loading\"></span>"
|
|
1430
1435
|
|
|
1431
1436
|
tool_extra = self.body.prepare_tool_extra(ctx)
|
|
1432
1437
|
debug = self.append_debug(ctx, pid, "output") if self.is_debug() else ""
|
|
1433
1438
|
name_header = self.get_name_header(ctx)
|
|
1434
1439
|
|
|
1435
|
-
|
|
1440
|
+
# Native Markdown block: JS runtime will pick [md-block-markdown] and render via markdown-it.
|
|
1441
|
+
return (
|
|
1442
|
+
f"<div class='msg-box msg-bot' id='{msg_id}'>"
|
|
1443
|
+
f"{name_header}"
|
|
1444
|
+
f"<div class='msg'>"
|
|
1445
|
+
f"<div class='md-block' md-block-markdown='1'>{md_text_escaped}</div>"
|
|
1446
|
+
f"<div class='msg-tool-extra'>{tool_extra}</div>"
|
|
1447
|
+
f"<div class='tool-output' style='{output_class}'>"
|
|
1448
|
+
f"<span class='toggle-cmd-output' onclick='toggleToolOutput({ctx.id});' "
|
|
1449
|
+
f"title='{trans('action.cmd.expand')}' role='button'>"
|
|
1450
|
+
f"<img src='{self._file_prefix}{self._icon_expand}' width='25' height='25' valign='middle'></span>"
|
|
1451
|
+
f"<div class='content' style='display:none'>{tool_output}</div>"
|
|
1452
|
+
f"</div>"
|
|
1453
|
+
f"<div class='msg-extra'>{extra}</div>"
|
|
1454
|
+
f"{footer}{debug}"
|
|
1455
|
+
f"</div></div>"
|
|
1456
|
+
)
|
|
1436
1457
|
|
|
1437
1458
|
def get_name_header(self, ctx: CtxItem, stream: bool = False) -> str:
|
|
1438
1459
|
"""
|
|
@@ -1473,31 +1494,48 @@ class Renderer(BaseRenderer):
|
|
|
1473
1494
|
else:
|
|
1474
1495
|
return f"<div class=\"name-header name-bot\">{avatar_html}{output_name}</div>"
|
|
1475
1496
|
|
|
1476
|
-
def flush_output(
|
|
1477
|
-
self,
|
|
1478
|
-
pid: Optional[int],
|
|
1479
|
-
html: str,
|
|
1480
|
-
replace: bool = False
|
|
1481
|
-
):
|
|
1497
|
+
def flush_output(self, pid: int, html: str, replace: bool = False):
|
|
1482
1498
|
"""
|
|
1483
|
-
|
|
1499
|
+
Send content via QWebChannel when ready; otherwise queue with a safe fallback.
|
|
1484
1500
|
|
|
1485
1501
|
:param pid: context PID
|
|
1486
1502
|
:param html: HTML code
|
|
1487
1503
|
:param replace: True if replace current content
|
|
1488
1504
|
"""
|
|
1505
|
+
if pid is None:
|
|
1506
|
+
return
|
|
1507
|
+
node = self.get_output_node_by_pid(pid)
|
|
1508
|
+
if node is None:
|
|
1509
|
+
return
|
|
1489
1510
|
try:
|
|
1490
|
-
if
|
|
1491
|
-
self.
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1511
|
+
if pid not in self._bridge_ready:
|
|
1512
|
+
self._bridge_ready[pid] = False
|
|
1513
|
+
self._pending_nodes.setdefault(pid, [])
|
|
1514
|
+
if self._bridge_ready.get(pid, False):
|
|
1515
|
+
br = getattr(node.page(), "bridge", None)
|
|
1516
|
+
if br is not None:
|
|
1517
|
+
if replace and hasattr(br, "nodeReplace"):
|
|
1518
|
+
self.clear_nodes(pid)
|
|
1519
|
+
br.nodeReplace.emit(html)
|
|
1520
|
+
return
|
|
1521
|
+
if not replace and hasattr(br, "node"):
|
|
1522
|
+
br.node.emit(html)
|
|
1523
|
+
return
|
|
1524
|
+
# Not ready yet -> queue
|
|
1525
|
+
self._queue_node(pid, html, replace)
|
|
1498
1526
|
except Exception:
|
|
1499
|
-
|
|
1500
|
-
|
|
1527
|
+
# JS fallback
|
|
1528
|
+
try:
|
|
1529
|
+
if replace:
|
|
1530
|
+
node.page().runJavaScript(
|
|
1531
|
+
f"if (typeof window.replaceNodes !== 'undefined') replaceNodes({self.to_json(html)});"
|
|
1532
|
+
)
|
|
1533
|
+
else:
|
|
1534
|
+
node.page().runJavaScript(
|
|
1535
|
+
f"if (typeof window.appendNode !== 'undefined') appendNode({self.to_json(html)});"
|
|
1536
|
+
)
|
|
1537
|
+
except Exception:
|
|
1538
|
+
pass
|
|
1501
1539
|
|
|
1502
1540
|
def reload(self):
|
|
1503
1541
|
"""Reload output, called externally only on theme change to redraw content"""
|
|
@@ -1523,45 +1561,107 @@ class Renderer(BaseRenderer):
|
|
|
1523
1561
|
|
|
1524
1562
|
def fresh(
|
|
1525
1563
|
self,
|
|
1526
|
-
meta: Optional[CtxMeta] = None
|
|
1564
|
+
meta: Optional[CtxMeta] = None,
|
|
1565
|
+
force: bool = False
|
|
1527
1566
|
):
|
|
1528
1567
|
"""
|
|
1529
|
-
Reset page
|
|
1568
|
+
Reset page / unload old renderer from memory
|
|
1530
1569
|
|
|
1531
1570
|
:param meta: context meta
|
|
1571
|
+
:param force: True if force recycle even if not loaded
|
|
1532
1572
|
"""
|
|
1573
|
+
plain = self.window.core.config.get('render.plain')
|
|
1574
|
+
if plain:
|
|
1575
|
+
return # plain text mode, no need to recycle
|
|
1576
|
+
|
|
1533
1577
|
pid = self.get_or_create_pid(meta)
|
|
1534
1578
|
if pid is None:
|
|
1535
1579
|
return
|
|
1536
1580
|
node = self.get_output_node_by_pid(pid)
|
|
1537
1581
|
if node is not None:
|
|
1538
|
-
|
|
1582
|
+
t = self._pending_timer.pop(pid, None)
|
|
1583
|
+
if t:
|
|
1584
|
+
try:
|
|
1585
|
+
t.stop()
|
|
1586
|
+
except Exception:
|
|
1587
|
+
pass
|
|
1588
|
+
self._bridge_ready[pid] = False
|
|
1589
|
+
self._pending_nodes[pid] = []
|
|
1590
|
+
node.hide()
|
|
1591
|
+
p = node.page()
|
|
1592
|
+
p.triggerAction(QWebEnginePage.Stop)
|
|
1593
|
+
p.setUrl(QUrl("about:blank"))
|
|
1594
|
+
p.history().clear()
|
|
1595
|
+
p.setLifecycleState(QWebEnginePage.LifecycleState.Discarded)
|
|
1596
|
+
self._stream_reset(pid)
|
|
1597
|
+
self.pids[pid].clear(all=True)
|
|
1598
|
+
self.pids[pid].loaded = False
|
|
1599
|
+
self.recycle(node, meta)
|
|
1600
|
+
self.flush(pid)
|
|
1601
|
+
|
|
1602
|
+
def recycle(
|
|
1603
|
+
self,
|
|
1604
|
+
node: ChatWebOutput,
|
|
1605
|
+
meta: Optional[CtxMeta] = None
|
|
1606
|
+
):
|
|
1607
|
+
"""
|
|
1608
|
+
Recycle renderer to free memory and avoid leaks
|
|
1539
1609
|
|
|
1540
|
-
|
|
1610
|
+
Swaps out the old QWebEngineView with a fresh instance.
|
|
1611
|
+
|
|
1612
|
+
:param node: output node
|
|
1613
|
+
:param meta: context meta
|
|
1614
|
+
"""
|
|
1615
|
+
tab = node.get_tab()
|
|
1616
|
+
layout = tab.child.layout() # layout of TabBody
|
|
1617
|
+
layout.removeWidget(node)
|
|
1618
|
+
self.window.ui.nodes['output'].pop(tab.pid, None)
|
|
1619
|
+
tab.child.delete_refs()
|
|
1620
|
+
|
|
1621
|
+
node.on_delete() # destroy old node
|
|
1622
|
+
|
|
1623
|
+
view = ChatWebOutput(self.window)
|
|
1624
|
+
view.set_tab(tab)
|
|
1625
|
+
view.set_meta(meta)
|
|
1626
|
+
view.signals.save_as.connect(self.window.controller.chat.render.handle_save_as)
|
|
1627
|
+
view.signals.audio_read.connect(self.window.controller.chat.render.handle_audio_read)
|
|
1628
|
+
|
|
1629
|
+
layout.addWidget(view)
|
|
1630
|
+
view.setVisible(True)
|
|
1631
|
+
self.window.ui.nodes['output'][tab.pid] = view
|
|
1632
|
+
try:
|
|
1633
|
+
gc.collect()
|
|
1634
|
+
except Exception:
|
|
1635
|
+
pass
|
|
1636
|
+
self.auto_cleanup_soft(meta) # trim memory in Linux
|
|
1541
1637
|
|
|
1542
1638
|
def get_output_node(
|
|
1543
1639
|
self,
|
|
1544
1640
|
meta: Optional[CtxMeta] = None
|
|
1545
|
-
):
|
|
1641
|
+
) -> Optional[ChatWebOutput]:
|
|
1546
1642
|
"""
|
|
1547
1643
|
Get output node
|
|
1548
1644
|
|
|
1549
1645
|
:param meta: context meta
|
|
1550
1646
|
:return: output node
|
|
1551
1647
|
"""
|
|
1552
|
-
|
|
1648
|
+
if self._get_output_node_by_meta is None:
|
|
1649
|
+
self._get_output_node_by_meta = self.window.core.ctx.output.get_output_node_by_meta
|
|
1650
|
+
return self._get_output_node_by_meta(meta)
|
|
1553
1651
|
|
|
1554
1652
|
def get_output_node_by_pid(
|
|
1555
1653
|
self,
|
|
1556
1654
|
pid: Optional[int]
|
|
1557
|
-
):
|
|
1655
|
+
) -> Optional[ChatWebOutput]:
|
|
1558
1656
|
"""
|
|
1559
1657
|
Get output node by PID
|
|
1560
1658
|
|
|
1561
1659
|
:param pid: context pid
|
|
1562
1660
|
:return: output node
|
|
1563
1661
|
"""
|
|
1564
|
-
|
|
1662
|
+
if self._get_output_node_by_pid is None:
|
|
1663
|
+
self._get_output_node_by_pid = self.window.core.ctx.output.get_output_node_by_pid
|
|
1664
|
+
return self._get_output_node_by_pid(pid)
|
|
1565
1665
|
|
|
1566
1666
|
def get_input_node(self) -> ChatInput:
|
|
1567
1667
|
"""
|
|
@@ -1718,7 +1818,7 @@ class Renderer(BaseRenderer):
|
|
|
1718
1818
|
self.clear_chunks(pid)
|
|
1719
1819
|
self.clear_nodes(pid)
|
|
1720
1820
|
self.pids[pid].html = ""
|
|
1721
|
-
self.
|
|
1821
|
+
self._stream_reset(pid)
|
|
1722
1822
|
|
|
1723
1823
|
def scroll_to_bottom(self):
|
|
1724
1824
|
"""Scroll to bottom"""
|
|
@@ -1859,9 +1959,9 @@ class Renderer(BaseRenderer):
|
|
|
1859
1959
|
:param html: HTML string to sanitize
|
|
1860
1960
|
:return: sanitized HTML string
|
|
1861
1961
|
"""
|
|
1962
|
+
return html
|
|
1862
1963
|
if not html:
|
|
1863
1964
|
return ""
|
|
1864
|
-
# Fast path: avoid regex work and extra allocations when not needed
|
|
1865
1965
|
if '&' not in html:
|
|
1866
1966
|
return html
|
|
1867
1967
|
return self.RE_AMP_LT_GT.sub(r'&\1;', html)
|
|
@@ -1892,6 +1992,24 @@ class Renderer(BaseRenderer):
|
|
|
1892
1992
|
"""
|
|
1893
1993
|
return self.window.core.config.get("debug.render", False)
|
|
1894
1994
|
|
|
1995
|
+
def js_stream_queue_len(self, pid: int):
|
|
1996
|
+
"""
|
|
1997
|
+
Ask the JS side how many items are currently queued for streaming (streamQ.length).
|
|
1998
|
+
|
|
1999
|
+
:param pid: context PID
|
|
2000
|
+
"""
|
|
2001
|
+
node = self.get_output_node_by_pid(pid)
|
|
2002
|
+
if node is None:
|
|
2003
|
+
print(f"PID {pid}: node not found")
|
|
2004
|
+
return
|
|
2005
|
+
try:
|
|
2006
|
+
node.page().runJavaScript(
|
|
2007
|
+
"typeof streamQ !== 'undefined' ? streamQ.length : -1",
|
|
2008
|
+
lambda val: print(f"PID {pid} streamQ.length =", val)
|
|
2009
|
+
)
|
|
2010
|
+
except Exception:
|
|
2011
|
+
pass
|
|
2012
|
+
|
|
1895
2013
|
def remove_pid(self, pid: int):
|
|
1896
2014
|
"""
|
|
1897
2015
|
Remove PID from renderer
|
|
@@ -1900,139 +2018,278 @@ class Renderer(BaseRenderer):
|
|
|
1900
2018
|
"""
|
|
1901
2019
|
if pid in self.pids:
|
|
1902
2020
|
del self.pids[pid]
|
|
1903
|
-
|
|
2021
|
+
# Clean micro-batch resources
|
|
2022
|
+
self._stream_reset(pid)
|
|
2023
|
+
t = self._stream_timer.pop(pid, None)
|
|
2024
|
+
if t:
|
|
2025
|
+
try:
|
|
2026
|
+
t.stop()
|
|
2027
|
+
except Exception:
|
|
2028
|
+
pass
|
|
2029
|
+
self._stream_acc.pop(pid, None)
|
|
2030
|
+
self._stream_header.pop(pid, None)
|
|
2031
|
+
self._stream_last_flush.pop(pid, None)
|
|
1904
2032
|
|
|
1905
|
-
def
|
|
2033
|
+
def on_js_ready(self, pid: int) -> None:
|
|
1906
2034
|
"""
|
|
1907
|
-
|
|
2035
|
+
On JS ready - called from JS side via QWebChannel when bridge is ready.
|
|
1908
2036
|
|
|
1909
2037
|
:param pid: context PID
|
|
1910
|
-
:return: throttle state dictionary
|
|
1911
2038
|
"""
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
"name": "",
|
|
1918
|
-
"replace_html": "",
|
|
1919
|
-
"append": Renderer._AppendBuffer(),
|
|
1920
|
-
"code": False,
|
|
1921
|
-
}
|
|
1922
|
-
self._thr[pid] = thr
|
|
1923
|
-
return thr
|
|
2039
|
+
if pid not in self._bridge_ready:
|
|
2040
|
+
self._bridge_ready[pid] = False
|
|
2041
|
+
self._pending_nodes.setdefault(pid, [])
|
|
2042
|
+
self._bridge_ready[pid] = True
|
|
2043
|
+
self._drain_pending_nodes(pid)
|
|
1924
2044
|
|
|
1925
|
-
def
|
|
2045
|
+
def _drain_pending_nodes(self, pid: int):
|
|
1926
2046
|
"""
|
|
1927
|
-
|
|
2047
|
+
Drain any pending nodes queued while bridge was not ready.
|
|
1928
2048
|
|
|
1929
2049
|
:param pid: context PID
|
|
1930
2050
|
"""
|
|
1931
|
-
|
|
2051
|
+
node = self.get_output_node_by_pid(pid)
|
|
2052
|
+
if node is None:
|
|
1932
2053
|
return
|
|
1933
|
-
|
|
1934
|
-
if
|
|
2054
|
+
br = getattr(node.page(), "bridge", None)
|
|
2055
|
+
if br is None:
|
|
1935
2056
|
return
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
2057
|
+
q = self._pending_nodes.get(pid, [])
|
|
2058
|
+
while q:
|
|
2059
|
+
replace, payload = q.pop(0)
|
|
2060
|
+
try:
|
|
2061
|
+
if replace and hasattr(br, "nodeReplace"):
|
|
2062
|
+
self.clear_nodes(pid)
|
|
2063
|
+
br.nodeReplace.emit(payload)
|
|
2064
|
+
elif not replace and hasattr(br, "node"):
|
|
2065
|
+
br.node.emit(payload)
|
|
2066
|
+
except Exception:
|
|
2067
|
+
# If something goes wrong, stop draining to avoid dropping further items.
|
|
2068
|
+
break
|
|
2069
|
+
# stop/clear fallback timer if any
|
|
2070
|
+
t = self._pending_timer.pop(pid, None)
|
|
2071
|
+
if t:
|
|
2072
|
+
try:
|
|
2073
|
+
t.stop()
|
|
2074
|
+
except Exception:
|
|
2075
|
+
pass
|
|
2076
|
+
|
|
2077
|
+
def _queue_node(self, pid: int, payload: str, replace: bool):
|
|
1952
2078
|
"""
|
|
1953
|
-
Queue
|
|
2079
|
+
Queue node payload for later delivery when bridge is ready, with a safe fallback.
|
|
1954
2080
|
|
|
1955
2081
|
:param pid: context PID
|
|
1956
|
-
:param
|
|
1957
|
-
:param
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
if replace:
|
|
1967
|
-
thr["op"] = 1
|
|
1968
|
-
thr["replace_html"] = html
|
|
1969
|
-
# Drop previous append items aggressively when a replace snapshot is available
|
|
1970
|
-
thr["append"].clear()
|
|
1971
|
-
thr["code"] = bool(is_code_block)
|
|
1972
|
-
else:
|
|
1973
|
-
if thr["op"] == 1:
|
|
1974
|
-
# Refresh the pending replace with the latest HTML snapshot
|
|
1975
|
-
thr["replace_html"] = html
|
|
1976
|
-
thr["code"] = bool(is_code_block)
|
|
1977
|
-
return
|
|
1978
|
-
thr["op"] = 2
|
|
1979
|
-
thr["append"].append(text_chunk)
|
|
1980
|
-
thr["code"] = bool(is_code_block)
|
|
2082
|
+
:param payload: sanitized HTML payload
|
|
2083
|
+
:param replace: True if replace current content
|
|
2084
|
+
"""
|
|
2085
|
+
q = self._pending_nodes.setdefault(pid, [])
|
|
2086
|
+
q.append((replace, payload))
|
|
2087
|
+
if pid not in self._pending_timer:
|
|
2088
|
+
t = QTimer(self.window)
|
|
2089
|
+
t.setSingleShot(True)
|
|
2090
|
+
t.setInterval(1200) # ms
|
|
1981
2091
|
|
|
1982
|
-
|
|
2092
|
+
def on_timeout(pid=pid):
|
|
2093
|
+
# Still not ready? Fallback: flush queued via runJavaScript once.
|
|
2094
|
+
node = self.get_output_node_by_pid(pid)
|
|
2095
|
+
if node:
|
|
2096
|
+
while self._pending_nodes.get(pid):
|
|
2097
|
+
rep, pl = self._pending_nodes[pid].pop(0)
|
|
2098
|
+
try:
|
|
2099
|
+
if rep:
|
|
2100
|
+
node.page().runJavaScript(
|
|
2101
|
+
f"if (typeof window.replaceNodes !== 'undefined') "
|
|
2102
|
+
f"replaceNodes({self.to_json(pl)});"
|
|
2103
|
+
)
|
|
2104
|
+
else:
|
|
2105
|
+
node.page().runJavaScript(
|
|
2106
|
+
f"if (typeof window.appendNode !== 'undefined') "
|
|
2107
|
+
f"appendNode({self.to_json(pl)});"
|
|
2108
|
+
)
|
|
2109
|
+
except Exception:
|
|
2110
|
+
pass
|
|
2111
|
+
self._pending_timer.pop(pid, None)
|
|
2112
|
+
|
|
2113
|
+
t.timeout.connect(on_timeout)
|
|
2114
|
+
self._pending_timer[pid] = t
|
|
2115
|
+
t.start()
|
|
2116
|
+
|
|
2117
|
+
# ------------------------- Micro-batching -------------------------
|
|
2118
|
+
|
|
2119
|
+
def _stream_get(self, pid: int) -> tuple[_AppendBuffer, QTimer]:
|
|
2120
|
+
"""
|
|
2121
|
+
Get or create per-PID append buffer and timer for micro-batching.
|
|
2122
|
+
Timer is single-shot and (re)started only when there is pending data.
|
|
2123
|
+
|
|
2124
|
+
:param pid: context PID
|
|
2125
|
+
:return: (buffer, timer) tuple
|
|
1983
2126
|
"""
|
|
1984
|
-
|
|
2127
|
+
buf = self._stream_acc.get(pid)
|
|
2128
|
+
if buf is None:
|
|
2129
|
+
buf = Renderer._AppendBuffer()
|
|
2130
|
+
self._stream_acc[pid] = buf
|
|
2131
|
+
|
|
2132
|
+
t = self._stream_timer.get(pid)
|
|
2133
|
+
if t is None:
|
|
2134
|
+
t = QTimer(self.window)
|
|
2135
|
+
t.setSingleShot(True)
|
|
2136
|
+
t.setInterval(self._stream_interval_ms)
|
|
2137
|
+
|
|
2138
|
+
def on_timeout(pid=pid):
|
|
2139
|
+
# Flush pending batch and, if more data arrives later, timer will be restarted by _stream_push()
|
|
2140
|
+
self._stream_flush(pid, force=False)
|
|
2141
|
+
|
|
2142
|
+
t.timeout.connect(on_timeout)
|
|
2143
|
+
self._stream_timer[pid] = t
|
|
2144
|
+
|
|
2145
|
+
return buf, t
|
|
2146
|
+
|
|
2147
|
+
def _stream_reset(self, pid: Optional[int]):
|
|
2148
|
+
"""
|
|
2149
|
+
Reset micro-batch resources for a PID. Safe to call frequently.
|
|
2150
|
+
|
|
2151
|
+
Clear buffer, stop timer, clear header and last-flush timestamp.
|
|
2152
|
+
|
|
2153
|
+
:param pid: context PID
|
|
2154
|
+
"""
|
|
2155
|
+
if pid is None:
|
|
2156
|
+
return
|
|
2157
|
+
buf = self._stream_acc.get(pid)
|
|
2158
|
+
if buf:
|
|
2159
|
+
buf.clear()
|
|
2160
|
+
t = self._stream_timer.get(pid)
|
|
2161
|
+
if t and t.isActive():
|
|
2162
|
+
try:
|
|
2163
|
+
t.stop()
|
|
2164
|
+
except Exception:
|
|
2165
|
+
pass
|
|
2166
|
+
self._stream_header[pid] = ""
|
|
2167
|
+
self._stream_last_flush[pid] = 0.0
|
|
2168
|
+
|
|
2169
|
+
def _stream_push(self, pid: int, header: str, chunk: str):
|
|
2170
|
+
"""
|
|
2171
|
+
Append chunk to per-PID buffer. Start the micro-batch timer if it's not running.
|
|
2172
|
+
If accumulated size crosses thresholds, flush immediately.
|
|
2173
|
+
|
|
2174
|
+
:param pid: context PID
|
|
2175
|
+
:param header: header/name for this stream (only used if first chunk)
|
|
2176
|
+
:param chunk: chunk of text to append
|
|
2177
|
+
"""
|
|
2178
|
+
if not chunk:
|
|
2179
|
+
return
|
|
2180
|
+
|
|
2181
|
+
buf, timer = self._stream_get(pid)
|
|
2182
|
+
# Remember last known header for this PID
|
|
2183
|
+
if header and not self._stream_header.get(pid):
|
|
2184
|
+
self._stream_header[pid] = header
|
|
2185
|
+
|
|
2186
|
+
# Append chunk cheaply
|
|
2187
|
+
buf.append(chunk)
|
|
2188
|
+
|
|
2189
|
+
# Emergency backstop: if buffer is getting too large, flush now
|
|
2190
|
+
pending_size = getattr(buf, "_size", 0)
|
|
2191
|
+
if pending_size >= self._stream_emergency_bytes:
|
|
2192
|
+
self._stream_flush(pid, force=True)
|
|
2193
|
+
return
|
|
2194
|
+
|
|
2195
|
+
# Size-based early flush for responsiveness
|
|
2196
|
+
if pending_size >= self._stream_max_bytes:
|
|
2197
|
+
self._stream_flush(pid, force=True)
|
|
2198
|
+
return
|
|
2199
|
+
|
|
2200
|
+
# Start timer if not active to flush at ~frame rate
|
|
2201
|
+
if not timer.isActive():
|
|
2202
|
+
try:
|
|
2203
|
+
timer.start()
|
|
2204
|
+
except Exception:
|
|
2205
|
+
# As a fallback, if timer cannot start, flush synchronously
|
|
2206
|
+
self._stream_flush(pid, force=True)
|
|
2207
|
+
|
|
2208
|
+
def _stream_flush(self, pid: int, force: bool = False):
|
|
2209
|
+
"""
|
|
2210
|
+
Flush buffered chunks for a PID via QWebChannel (bridge.chunk.emit(name, chunk)).
|
|
2211
|
+
If the bridge is not available, fall back to runJavaScript appendStream(name, chunk).
|
|
2212
|
+
|
|
2213
|
+
If no data is pending, do nothing. Stop the timer if running.
|
|
1985
2214
|
|
|
1986
2215
|
:param pid: context PID
|
|
1987
|
-
:param force:
|
|
2216
|
+
:param force: True to force flush ignoring interval
|
|
1988
2217
|
"""
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
2218
|
+
buf = self._stream_acc.get(pid)
|
|
2219
|
+
if buf is None or buf.is_empty():
|
|
2220
|
+
# Nothing to send; stop timer if any
|
|
2221
|
+
t = self._stream_timer.get(pid)
|
|
2222
|
+
if t and t.isActive():
|
|
2223
|
+
try:
|
|
2224
|
+
t.stop()
|
|
2225
|
+
except Exception:
|
|
2226
|
+
pass
|
|
1992
2227
|
return
|
|
1993
2228
|
|
|
1994
2229
|
node = self.get_output_node_by_pid(pid)
|
|
1995
2230
|
if node is None:
|
|
2231
|
+
# Drop buffer if node is gone to avoid leaks
|
|
2232
|
+
buf.clear()
|
|
1996
2233
|
return
|
|
1997
2234
|
|
|
2235
|
+
# Stop timer for this flush; next push will re-arm it
|
|
2236
|
+
t = self._stream_timer.get(pid)
|
|
2237
|
+
if t and t.isActive():
|
|
2238
|
+
try:
|
|
2239
|
+
t.stop()
|
|
2240
|
+
except Exception:
|
|
2241
|
+
pass
|
|
2242
|
+
|
|
2243
|
+
# Gather and clear the pending data in one allocation
|
|
2244
|
+
data = buf.get_and_clear()
|
|
2245
|
+
name = self._stream_header.get(pid, "") or ""
|
|
2246
|
+
|
|
1998
2247
|
try:
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
bool(thr["code"]),
|
|
2248
|
+
br = getattr(node.page(), "bridge", None)
|
|
2249
|
+
if br is not None and hasattr(br, "chunk"):
|
|
2250
|
+
# Send as raw text; JS runtime handles buffering/rendering
|
|
2251
|
+
br.chunk.emit(name, data)
|
|
2252
|
+
else:
|
|
2253
|
+
# Fallback path if bridge not yet connected on this page
|
|
2254
|
+
node.page().runJavaScript(
|
|
2255
|
+
f"if (typeof window.appendStream !== 'undefined') appendStream({self.to_json(name)},{self.to_json(data)});"
|
|
2008
2256
|
)
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
append_str = thr["append"].get_and_clear()
|
|
2015
|
-
node.page().bridge.chunk.emit(
|
|
2016
|
-
thr["name"],
|
|
2017
|
-
"",
|
|
2018
|
-
self.sanitize_html(append_str),
|
|
2019
|
-
False,
|
|
2020
|
-
bool(thr["code"]),
|
|
2021
|
-
)
|
|
2022
|
-
thr["last"] = now
|
|
2023
|
-
|
|
2024
|
-
self._throttle_reset(pid)
|
|
2025
|
-
|
|
2026
|
-
elif thr["op"] == 2 and not thr["append"].is_empty():
|
|
2027
|
-
append_str = thr["append"].get_and_clear()
|
|
2028
|
-
node.page().bridge.chunk.emit(
|
|
2029
|
-
thr["name"],
|
|
2030
|
-
"",
|
|
2031
|
-
self.sanitize_html(append_str),
|
|
2032
|
-
False,
|
|
2033
|
-
bool(thr["code"]),
|
|
2257
|
+
except Exception:
|
|
2258
|
+
# If something goes wrong, attempt a JS fallback once
|
|
2259
|
+
try:
|
|
2260
|
+
node.page().runJavaScript(
|
|
2261
|
+
f"if (typeof window.appendStream !== 'undefined') appendStream({self.to_json(name)},{self.to_json(data)});"
|
|
2034
2262
|
)
|
|
2035
|
-
|
|
2036
|
-
|
|
2263
|
+
except Exception:
|
|
2264
|
+
pass
|
|
2265
|
+
|
|
2266
|
+
# Opportunistic memory release on Linux for very large flushes
|
|
2267
|
+
try:
|
|
2268
|
+
if len(data) >= (256 * 1024):
|
|
2269
|
+
self.auto_cleanup_soft()
|
|
2270
|
+
except Exception:
|
|
2271
|
+
pass
|
|
2272
|
+
|
|
2273
|
+
# Explicitly drop reference to large string so GC/malloc_trim can reclaim sooner
|
|
2274
|
+
del data
|
|
2275
|
+
|
|
2276
|
+
self._stream_last_flush[pid] = monotonic()
|
|
2277
|
+
|
|
2278
|
+
def eval_js(self, script: str):
|
|
2279
|
+
"""
|
|
2280
|
+
Evaluate arbitrary JS in the output node context.
|
|
2281
|
+
|
|
2282
|
+
:param script: JS code to run
|
|
2283
|
+
"""
|
|
2284
|
+
current = self.window.core.ctx.get_current()
|
|
2285
|
+
meta = self.window.core.ctx.get_meta_by_id(current)
|
|
2286
|
+
node = self.get_output_node(meta)
|
|
2287
|
+
if node is None:
|
|
2288
|
+
return
|
|
2289
|
+
def callback(val):
|
|
2290
|
+
self.window.core.debug.console.log(f"[JS] {val}")
|
|
2291
|
+
print(f"[JS] {val}")
|
|
2292
|
+
try:
|
|
2293
|
+
node.page().runJavaScript(script, callback)
|
|
2037
2294
|
except Exception:
|
|
2038
2295
|
pass
|