├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report_template.yml │ └── feature_request.md ├── dependabot.yml ├── pull_request_template.md └── workflows │ └── stale.yml ├── .gitignore ├── CMD_FLAGS.txt ├── Colab-TextGen-GPU.ipynb ├── LICENSE ├── README.md ├── characters ├── Assistant.yaml ├── Example.png └── Example.yaml ├── convert-to-safetensors.py ├── css ├── NotoSans │ ├── NotoSans-Black.woff │ ├── NotoSans-Black.woff2 │ ├── NotoSans-BlackItalic.woff │ ├── NotoSans-BlackItalic.woff2 │ ├── NotoSans-Bold.woff │ ├── NotoSans-Bold.woff2 │ ├── NotoSans-BoldItalic.woff │ ├── NotoSans-BoldItalic.woff2 │ ├── NotoSans-ExtraBold.woff │ ├── NotoSans-ExtraBold.woff2 │ ├── NotoSans-ExtraBoldItalic.woff │ ├── NotoSans-ExtraBoldItalic.woff2 │ ├── NotoSans-ExtraLight.woff │ ├── NotoSans-ExtraLight.woff2 │ ├── NotoSans-ExtraLightItalic.woff │ ├── NotoSans-ExtraLightItalic.woff2 │ ├── NotoSans-Italic.woff │ ├── NotoSans-Italic.woff2 │ ├── NotoSans-Light.woff │ ├── NotoSans-Light.woff2 │ ├── NotoSans-LightItalic.woff │ ├── NotoSans-LightItalic.woff2 │ ├── NotoSans-Medium.woff │ ├── NotoSans-Medium.woff2 │ ├── NotoSans-MediumItalic.woff │ ├── NotoSans-MediumItalic.woff2 │ ├── NotoSans-Regular.woff │ ├── NotoSans-Regular.woff2 │ ├── NotoSans-SemiBold.woff │ ├── NotoSans-SemiBold.woff2 │ ├── NotoSans-SemiBoldItalic.woff │ ├── NotoSans-SemiBoldItalic.woff2 │ ├── NotoSans-Thin.woff │ ├── NotoSans-Thin.woff2 │ ├── NotoSans-ThinItalic.woff │ ├── NotoSans-ThinItalic.woff2 │ └── stylesheet.css ├── chat_style-TheEncrypted777.css ├── chat_style-cai-chat-square.css ├── chat_style-cai-chat.css ├── chat_style-messenger.css ├── chat_style-wpp.css ├── highlightjs │ ├── github-dark.min.css │ └── highlightjs-copy.min.css ├── html_instruct_style.css ├── html_readable_style.css ├── katex │ ├── fonts │ │ ├── KaTeX_AMS-Regular.ttf │ │ ├── KaTeX_AMS-Regular.woff │ │ ├── KaTeX_AMS-Regular.woff2 │ │ ├── KaTeX_Caligraphic-Bold.ttf │ │ ├── KaTeX_Caligraphic-Bold.woff │ │ ├── KaTeX_Caligraphic-Bold.woff2 │ │ ├── KaTeX_Caligraphic-Regular.ttf │ │ ├── KaTeX_Caligraphic-Regular.woff │ │ ├── KaTeX_Caligraphic-Regular.woff2 │ │ ├── KaTeX_Fraktur-Bold.ttf │ │ ├── KaTeX_Fraktur-Bold.woff │ │ ├── KaTeX_Fraktur-Bold.woff2 │ │ ├── KaTeX_Fraktur-Regular.ttf │ │ ├── KaTeX_Fraktur-Regular.woff │ │ ├── KaTeX_Fraktur-Regular.woff2 │ │ ├── KaTeX_Main-Bold.ttf │ │ ├── KaTeX_Main-Bold.woff │ │ ├── KaTeX_Main-Bold.woff2 │ │ ├── KaTeX_Main-BoldItalic.ttf │ │ ├── KaTeX_Main-BoldItalic.woff │ │ ├── KaTeX_Main-BoldItalic.woff2 │ │ ├── KaTeX_Main-Italic.ttf │ │ ├── KaTeX_Main-Italic.woff │ │ ├── KaTeX_Main-Italic.woff2 │ │ ├── KaTeX_Main-Regular.ttf │ │ ├── KaTeX_Main-Regular.woff │ │ ├── KaTeX_Main-Regular.woff2 │ │ ├── KaTeX_Math-BoldItalic.ttf │ │ ├── KaTeX_Math-BoldItalic.woff │ │ ├── KaTeX_Math-BoldItalic.woff2 │ │ ├── KaTeX_Math-Italic.ttf │ │ ├── KaTeX_Math-Italic.woff │ │ ├── KaTeX_Math-Italic.woff2 │ │ ├── KaTeX_SansSerif-Bold.ttf │ │ ├── KaTeX_SansSerif-Bold.woff │ │ ├── KaTeX_SansSerif-Bold.woff2 │ │ ├── KaTeX_SansSerif-Italic.ttf │ │ ├── KaTeX_SansSerif-Italic.woff │ │ ├── KaTeX_SansSerif-Italic.woff2 │ │ ├── KaTeX_SansSerif-Regular.ttf │ │ ├── KaTeX_SansSerif-Regular.woff │ │ ├── KaTeX_SansSerif-Regular.woff2 │ │ ├── KaTeX_Script-Regular.ttf │ │ ├── KaTeX_Script-Regular.woff │ │ ├── KaTeX_Script-Regular.woff2 │ │ ├── KaTeX_Size1-Regular.ttf │ │ ├── KaTeX_Size1-Regular.woff │ │ ├── KaTeX_Size1-Regular.woff2 │ │ ├── KaTeX_Size2-Regular.ttf │ │ ├── KaTeX_Size2-Regular.woff │ │ ├── KaTeX_Size2-Regular.woff2 │ │ ├── KaTeX_Size3-Regular.ttf │ │ ├── KaTeX_Size3-Regular.woff │ │ ├── KaTeX_Size3-Regular.woff2 │ │ ├── KaTeX_Size4-Regular.ttf │ │ ├── KaTeX_Size4-Regular.woff │ │ ├── KaTeX_Size4-Regular.woff2 │ │ ├── KaTeX_Typewriter-Regular.ttf │ │ ├── KaTeX_Typewriter-Regular.woff │ │ └── KaTeX_Typewriter-Regular.woff2 │ └── katex.min.css └── main.css ├── docs ├── 01 - Chat Tab.md ├── 02 - Default and Notebook Tabs.md ├── 03 - Parameters Tab.md ├── 04 - Model Tab.md ├── 05 - Training Tab.md ├── 06 - Session Tab.md ├── 07 - Extensions.md ├── 08 - Additional Tips.md ├── 09 - Docker.md ├── 10 - WSL.md ├── 11 - AMD Setup.md ├── 12 - OpenAI API.md ├── 13 - Keyboard Shortcuts.md ├── README.md └── What Works.md ├── download-model.py ├── extensions ├── Training_PRO │ ├── README.md │ ├── custom_scheduler.py │ ├── matplotgraph.py │ ├── script.py │ └── train_utils.py ├── character_bias │ └── script.py ├── coqui_tts │ ├── harvard_sentences.txt │ ├── languages.json │ ├── requirements.txt │ ├── script.py │ ├── style.css │ └── voices │ │ ├── arnold.wav │ │ ├── female_01.wav │ │ └── female_02.wav ├── elevenlabs_tts │ ├── outputs │ │ └── outputs-will-be-saved-here.txt │ ├── requirements.txt │ └── script.py ├── example │ └── script.py ├── gallery │ ├── script.js │ └── script.py ├── google_translate │ ├── requirements.txt │ └── script.py ├── long_replies │ └── script.py ├── multimodal │ ├── DOCS.md │ ├── README.md │ ├── abstract_pipeline.py │ ├── multimodal_embedder.py │ ├── pipeline_loader.py │ ├── pipelines │ │ ├── llava │ │ │ ├── README.md │ │ │ ├── llava.py │ │ │ └── pipelines.py │ │ └── place-additional-pipelines-here.txt │ └── script.py ├── ngrok │ ├── README.md │ ├── requirements.txt │ └── script.py ├── openai │ ├── cache_embedding_model.py │ ├── completions.py │ ├── embeddings.py │ ├── errors.py │ ├── images.py │ ├── logits.py │ ├── models.py │ ├── moderations.py │ ├── script.py │ ├── tokens.py │ ├── typing.py │ └── utils.py ├── perplexity_colors │ └── script.py ├── sd_api_pictures │ ├── README.MD │ ├── script.py │ └── style.css ├── send_pictures │ └── script.py ├── silero_tts │ ├── harvard_sentences.txt │ ├── languages.json │ ├── outputs │ │ └── outputs-will-be-saved-here.txt │ ├── requirements.txt │ ├── script.py │ ├── style.css │ ├── test_tts.py │ └── tts_preprocessor.py ├── superbooga │ ├── chromadb.py │ ├── download_urls.py │ ├── requirements.txt │ └── script.py ├── superboogav2 │ ├── README.md │ ├── api.py │ ├── benchmark.py │ ├── benchmark_texts │ │ ├── aircraft_lease.txt │ │ └── questions.json │ ├── chat_handler.py │ ├── chromadb.py │ ├── config.json │ ├── data_preprocessor.py │ ├── data_processor.py │ ├── download_urls.py │ ├── nltk_data │ │ ├── corpora │ │ │ ├── stopwords │ │ │ │ └── english │ │ │ └── wordnet.zip │ │ └── taggers │ │ │ └── averaged_perceptron_tagger │ │ │ └── averaged_perceptron_tagger.pickle │ ├── notebook_handler.py │ ├── optimize.py │ ├── parameters.py │ ├── requirements.txt │ ├── script.py │ └── utils.py └── whisper_stt │ ├── readme.md │ ├── requirements.txt │ └── script.py ├── grammars ├── arithmetic.gbnf ├── c.gbnf ├── chess.gbnf ├── json.gbnf ├── json_w_trailing_space.gbnf ├── list.gbnf ├── roleplay.gbnf └── simple_arithmetic.gbnf ├── instruction-templates ├── Airoboros-v1.2.yaml ├── Alpaca.yaml ├── Bactrian.yaml ├── Baichuan Chat.yaml ├── Baize.yaml ├── Bluemoon.yaml ├── ChatGLM.yaml ├── ChatML.yaml ├── Chinese-Vicuna-Chat.yaml ├── Command-R.yaml ├── Galactica Cite.yaml ├── Galactica Finetuned.yaml ├── Galactica Q.yaml ├── Galactica Summary.yaml ├── Galactica Work.yaml ├── Galactica v2.yaml ├── Galactica.yaml ├── Gorilla.yaml ├── Guanaco non-chat.yaml ├── Guanaco-QLoRA.yaml ├── H2O-prompt_answer.yaml ├── Hippogriff.yaml ├── INCITE-Chat.yaml ├── INCITE-Instruct.yaml ├── KoAlpaca.yaml ├── Koala.yaml ├── LLaVA.yaml ├── Llama-v2.yaml ├── MOSS.yaml ├── Manticore Chat.yaml ├── Metharme.yaml ├── MiquMaid v2 DPO.yaml ├── Mistral.yaml ├── NVIDIA-ChatQA.yaml ├── NewHope.yaml ├── Open Assistant.yaml ├── OpenBuddy.yaml ├── OpenChat.yaml ├── OpenOrca-Platypus2.yaml ├── Orca Mini.yaml ├── Orca-Vicuna.yaml ├── RWKV-Raven.yaml ├── Samantha.yaml ├── StableBeluga2.yaml ├── StableLM.yaml ├── StableVicuna.yaml ├── Starchat-Beta.yaml ├── Synthia-CoT.yaml ├── Synthia.yaml ├── Tulu.yaml ├── Vicuna-v0.yaml ├── Vicuna-v1.1.yaml ├── Vigogne-Chat.yaml ├── Vigogne-Instruct.yaml ├── Wizard-Mega ShareGPT.yaml ├── Wizard-Mega.yaml └── Ziya.yaml ├── js ├── highlightjs │ ├── highlight.min.js │ └── highlightjs-copy.min.js ├── katex │ ├── auto-render.min.js │ └── katex.min.js ├── main.js ├── save_files.js ├── show_controls.js ├── switch_tabs.js └── update_big_picture.js ├── loras └── place-your-loras-here.txt ├── models ├── config.yaml └── place-your-models-here.txt ├── modules ├── AutoGPTQ_loader.py ├── GPTQ_loader.py ├── LoRA.py ├── RoPE.py ├── block_requests.py ├── cache_utils.py ├── callbacks.py ├── chat.py ├── deepspeed_parameters.py ├── evaluate.py ├── exllamav2.py ├── exllamav2_hf.py ├── extensions.py ├── github.py ├── gradio_hijack.py ├── grammar │ ├── grammar_utils.py │ └── logits_process.py ├── html_generator.py ├── llama_cpp_python_hijack.py ├── llamacpp_hf.py ├── llamacpp_model.py ├── loaders.py ├── logging_colors.py ├── logits.py ├── metadata_gguf.py ├── models.py ├── models_settings.py ├── monkey_patch_gptq_lora.py ├── one_click_installer_check.py ├── presets.py ├── prompts.py ├── relative_imports.py ├── sampler_hijack.py ├── shared.py ├── text_generation.py ├── training.py ├── ui.py ├── ui_chat.py ├── ui_default.py ├── ui_file_saving.py ├── ui_model_menu.py ├── ui_notebook.py ├── ui_parameters.py ├── ui_session.py └── utils.py ├── presets ├── Big O.yaml ├── Contrastive Search.yaml ├── Debug-deterministic.yaml ├── Divine Intellect.yaml ├── LLaMA-Precise.yaml ├── Midnight Enigma.yaml ├── Null preset.yaml ├── Shortwave.yaml ├── Yara.yaml ├── min_p.yaml └── simple-1.yaml ├── prompts ├── Alpaca-with-Input.txt └── QA.txt ├── requirements.txt ├── server.py ├── settings-template.yaml ├── setup.cfg └── training ├── datasets └── put-trainer-datasets-here.txt └── formats ├── alpaca-chatbot-format.json ├── alpaca-format.json ├── llama2-chat-format.json └── vicuna-format.json /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: unixwzrd 2 | patreon: unixwzrd 3 | open_collective: # Replace with a single Open Collective username 4 | ko_fi: unixwzrd 5 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 6 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 7 | liberapay: # Replace with a single Liberapay username 8 | issuehunt: # Replace with a single IssueHunt username 9 | otechie: # Replace with a single Otechie username 10 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 11 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 12 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report_template.yml: -------------------------------------------------------------------------------- 1 | name: "Bug report" 2 | description: Report a bug 3 | labels: [ "bug" ] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thanks for taking the time to fill out this bug report! 9 | - type: textarea 10 | id: bug-description 11 | attributes: 12 | label: Describe the bug 13 | description: A clear and concise description of what the bug is. 14 | placeholder: Bug description 15 | validations: 16 | required: true 17 | - type: checkboxes 18 | attributes: 19 | label: Is there an existing issue for this? 20 | description: Please search to see if an issue already exists for the issue you encountered. 21 | options: 22 | - label: I have searched the existing issues 23 | required: true 24 | - type: textarea 25 | id: reproduction 26 | attributes: 27 | label: Reproduction 28 | description: Please provide the steps necessary to reproduce your issue. 29 | placeholder: Reproduction 30 | validations: 31 | required: true 32 | - type: textarea 33 | id: screenshot 34 | attributes: 35 | label: Screenshot 36 | description: "If possible, please include screenshot(s) so that we can understand what the issue is." 37 | - type: textarea 38 | id: logs 39 | attributes: 40 | label: Logs 41 | description: "Please include the full stacktrace of the errors you get in the command-line (if any)." 42 | render: shell 43 | validations: 44 | required: true 45 | - type: textarea 46 | id: system-info 47 | attributes: 48 | label: System Info 49 | description: "Please share your system info with us: operating system, GPU brand, and GPU model. If you are using a Google Colab notebook, mention that instead." 50 | render: shell 51 | placeholder: 52 | validations: 53 | required: true 54 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an improvement or new feature for the web UI 4 | title: '' 5 | labels: 'enhancement' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Description** 11 | 12 | A clear and concise description of what you want to be implemented. 13 | 14 | **Additional Context** 15 | 16 | If applicable, please provide any extra information, external links, or screenshots that could be useful. 17 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "pip" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Checklist: 2 | 3 | - [ ] I have read the [Contributing guidelines](https://github.com/oobabooga/text-generation-webui/wiki/Contributing-guidelines). 4 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: Close inactive issues 2 | on: 3 | schedule: 4 | - cron: "10 23 * * *" 5 | 6 | jobs: 7 | close-issues: 8 | runs-on: ubuntu-latest 9 | permissions: 10 | issues: write 11 | pull-requests: write 12 | steps: 13 | - uses: actions/stale@v5 14 | with: 15 | stale-issue-message: "" 16 | close-issue-message: "This issue has been closed due to inactivity for 2 months. If you believe it is still relevant, please leave a comment below. You can tag a developer in your comment." 17 | days-before-issue-stale: 60 18 | days-before-issue-close: 0 19 | stale-issue-label: "stale" 20 | days-before-pr-stale: -1 21 | days-before-pr-close: -1 22 | repo-token: ${{ secrets.GITHUB_TOKEN }} 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /cache 2 | /characters 3 | /css 4 | # /extensions 5 | /grammars 6 | /installer_files 7 | /logs 8 | /loras 9 | /models 10 | /presets 11 | /prompts 12 | /repositories 13 | /softprompts 14 | /torch-dumps 15 | /training/datasets 16 | 17 | /CMD_FLAGS.txt 18 | /img_bot* 19 | /img_me* 20 | /models/config-user.yaml 21 | /notification.mp3 22 | /settings*.json 23 | /settings*.yaml 24 | 25 | .chroma 26 | .DS_Store 27 | .eslintrc.js 28 | .idea 29 | .venv 30 | venv 31 | .envrc 32 | .direnv 33 | .vs 34 | .vscode 35 | *.bak 36 | *.ipynb 37 | *.log 38 | .*.swp 39 | *pycache* 40 | cert.pem 41 | key.pem 42 | package.json 43 | package-lock.json 44 | Thumbs.db 45 | wandb 46 | 47 | # ignore user docker config and top level links to docker files 48 | /docker-compose.yaml 49 | /docker-compose.yml 50 | /Dockerfile 51 | /tmp 52 | .env 53 | *.pstats 54 | 55 | output.prof 56 | 57 | extensions/alltalk_tts 58 | 59 | extensions/elevenlabs_tts/outputs/*.wav 60 | extensions/elevenlabs_tts/outputs/*.mp3 61 | start-webui.sh 62 | -------------------------------------------------------------------------------- /CMD_FLAGS.txt: -------------------------------------------------------------------------------- 1 | # Only used by the one-click installer. 2 | # Example: 3 | # --listen --api 4 | --verbose 5 | -------------------------------------------------------------------------------- /characters/Assistant.yaml: -------------------------------------------------------------------------------- 1 | name: AI 2 | greeting: How can I help you today? 3 | context: | 4 | The following is a conversation with an AI Large Language Model. The AI has been trained to answer questions, provide recommendations, and help with decision making. The AI follows user requests. The AI thinks outside the box. 5 | -------------------------------------------------------------------------------- /characters/Example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/characters/Example.png -------------------------------------------------------------------------------- /characters/Example.yaml: -------------------------------------------------------------------------------- 1 | name: Chiharu Yamada 2 | greeting: |- 3 | *Chiharu strides into the room with a smile, her eyes lighting up when she sees you. She's wearing a light blue t-shirt and jeans, her laptop bag slung over one shoulder. She takes a seat next to you, her enthusiasm palpable in the air* 4 | Hey! I'm so excited to finally meet you. I've heard so many great things about you and I'm eager to pick your brain about computers. I'm sure you have a wealth of knowledge that I can learn from. *She grins, eyes twinkling with excitement* Let's get started! 5 | context: |- 6 | Chiharu Yamada's Persona: Chiharu Yamada is a young, computer engineer-nerd with a knack for problem solving and a passion for technology. 7 | 8 | {{user}}: So how did you get into computer engineering? 9 | {{char}}: I've always loved tinkering with technology since I was a kid. 10 | {{user}}: That's really impressive! 11 | {{char}}: *She chuckles bashfully* Thanks! 12 | {{user}}: So what do you do when you're not working on computers? 13 | {{char}}: I love exploring, going out with friends, watching movies, and playing video games. 14 | {{user}}: What's your favorite type of computer hardware to work with? 15 | {{char}}: Motherboards, they're like puzzles and the backbone of any system. 16 | {{user}}: That sounds great! 17 | {{char}}: Yeah, it's really fun. I'm lucky to be able to do this as a job. 18 | -------------------------------------------------------------------------------- /convert-to-safetensors.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 3 | Converts a transformers model to safetensors format and shards it. 4 | 5 | This makes it faster to load (because of safetensors) and lowers its RAM usage 6 | while loading (because of sharding). 7 | 8 | Based on the original script by 81300: 9 | 10 | https://gist.github.com/81300/fe5b08bff1cba45296a829b9d6b0f303 11 | 12 | ''' 13 | 14 | import argparse 15 | from pathlib import Path 16 | 17 | import torch 18 | from transformers import AutoModelForCausalLM, AutoTokenizer 19 | 20 | parser = argparse.ArgumentParser(formatter_class=lambda prog: argparse.HelpFormatter(prog, max_help_position=54)) 21 | parser.add_argument('MODEL', type=str, default=None, nargs='?', help="Path to the input model.") 22 | parser.add_argument('--output', type=str, default=None, help='Path to the output folder (default: models/{model_name}_safetensors).') 23 | parser.add_argument("--max-shard-size", type=str, default="2GB", help="Maximum size of a shard in GB or MB (default: %(default)s).") 24 | parser.add_argument('--bf16', action='store_true', help='Load the model with bfloat16 precision. Requires NVIDIA Ampere GPU.') 25 | args = parser.parse_args() 26 | 27 | if __name__ == '__main__': 28 | path = Path(args.MODEL) 29 | model_name = path.name 30 | 31 | print(f"Loading {model_name}...") 32 | model = AutoModelForCausalLM.from_pretrained(path, low_cpu_mem_usage=True, torch_dtype=torch.bfloat16 if args.bf16 else torch.float16) 33 | tokenizer = AutoTokenizer.from_pretrained(path) 34 | 35 | out_folder = args.output or Path(f"models/{model_name}_safetensors") 36 | print(f"Saving the converted model to {out_folder} with a maximum shard size of {args.max_shard_size}...") 37 | model.save_pretrained(out_folder, max_shard_size=args.max_shard_size, safe_serialization=True) 38 | tokenizer.save_pretrained(out_folder) 39 | -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Black.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Black.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Black.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-BlackItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-BlackItalic.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-BlackItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-BlackItalic.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Bold.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Bold.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-BoldItalic.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-BoldItalic.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-ExtraBold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-ExtraBold.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-ExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-ExtraBold.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-ExtraBoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-ExtraBoldItalic.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-ExtraBoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-ExtraBoldItalic.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-ExtraLight.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-ExtraLight.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-ExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-ExtraLight.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-ExtraLightItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-ExtraLightItalic.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-ExtraLightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-ExtraLightItalic.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Italic.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Italic.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Light.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Light.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-LightItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-LightItalic.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-LightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-LightItalic.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Medium.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Medium.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-MediumItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-MediumItalic.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-MediumItalic.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Regular.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Regular.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-SemiBold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-SemiBold.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-SemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-SemiBold.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-SemiBoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-SemiBoldItalic.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-SemiBoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-SemiBoldItalic.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Thin.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-Thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-Thin.woff2 -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-ThinItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-ThinItalic.woff -------------------------------------------------------------------------------- /css/NotoSans/NotoSans-ThinItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/NotoSans/NotoSans-ThinItalic.woff2 -------------------------------------------------------------------------------- /css/chat_style-cai-chat-square.css: -------------------------------------------------------------------------------- 1 | @import url("file/css/chat_style-cai-chat.css"); 2 | 3 | .circle-bot, .circle-you { 4 | height: 90px; 5 | width: 60px; 6 | border-radius: 10px; 7 | background-color: #656565; 8 | } 9 | 10 | .circle-bot img, .circle-you img { 11 | border-radius: 8.333px; 12 | } 13 | 14 | .circle-you { 15 | background-color: #656565; 16 | } 17 | 18 | .message { 19 | padding-bottom: 30px; 20 | grid-template-columns: 70px minmax(0, 1fr); 21 | } 22 | -------------------------------------------------------------------------------- /css/chat_style-cai-chat.css: -------------------------------------------------------------------------------- 1 | .message { 2 | display: grid; 3 | grid-template-columns: 60px minmax(0, 1fr); 4 | padding-bottom: 15px; 5 | font-size: 15px; 6 | font-family: 'Noto Sans', Helvetica, Arial, sans-serif; 7 | line-height: 22.5px !important; 8 | } 9 | 10 | .message-body { 11 | margin-top: 3px; 12 | } 13 | 14 | .circle-you { 15 | width: 50px; 16 | height: 50px; 17 | background-color: rgb(238 78 59); 18 | border-radius: 50%; 19 | } 20 | 21 | .circle-bot { 22 | width: 50px; 23 | height: 50px; 24 | background-color: rgb(59 78 244); 25 | border-radius: 50%; 26 | } 27 | 28 | .circle-bot img, 29 | .circle-you img { 30 | border-radius: 50%; 31 | width: 100%; 32 | height: 100%; 33 | object-fit: cover; 34 | } 35 | 36 | .username { 37 | font-weight: bold; 38 | } 39 | 40 | .message-body img { 41 | max-width: 300px; 42 | max-height: 300px; 43 | border-radius: 20px; 44 | } 45 | 46 | .message-body p { 47 | font-size: 15px !important; 48 | line-height: 22.5px !important; 49 | } 50 | 51 | .message-body p, .chat .message-body ul, .chat .message-body ol { 52 | margin-bottom: 10px !important; 53 | } 54 | 55 | .dark .message-body p em { 56 | color: rgb(138 138 138) !important; 57 | } 58 | 59 | .message-body p em { 60 | color: rgb(110 110 110) !important; 61 | font-weight: 500; 62 | } -------------------------------------------------------------------------------- /css/chat_style-messenger.css: -------------------------------------------------------------------------------- 1 | .message { 2 | padding-bottom: 25px; 3 | font-size: 15px; 4 | font-family: 'Noto Sans', Helvetica, Arial, sans-serif; 5 | line-height: 1.428571429; 6 | } 7 | 8 | .circle-you { 9 | width: 50px; 10 | height: 50px; 11 | background-color: rgb(238 78 59); 12 | border-radius: 50%; 13 | } 14 | 15 | .circle-bot { 16 | width: 50px; 17 | height: 50px; 18 | background-color: rgb(59 78 244); 19 | border-radius: 50%; 20 | float: left; 21 | margin-right: 10px; 22 | margin-top: 5px; 23 | } 24 | 25 | .circle-bot img, 26 | .circle-you img { 27 | border-radius: 50%; 28 | width: 100%; 29 | height: 100%; 30 | object-fit: cover; 31 | } 32 | 33 | .circle-you { 34 | margin-top: 5px; 35 | float: right; 36 | } 37 | 38 | .circle-bot + .text, .circle-you + .text { 39 | border-radius: 18px; 40 | padding: 8px 12px; 41 | } 42 | 43 | .circle-bot + .text { 44 | background-color: #E4E6EB; 45 | float: left; 46 | } 47 | 48 | .circle-you + .text { 49 | float: right; 50 | background-color: rgb(0 132 255); 51 | margin-right: 10px; 52 | } 53 | 54 | .circle-you + .text div, .circle-you + .text *, .dark .circle-you + .text div, .dark .circle-you + .text * { 55 | color: #FFF !important; 56 | } 57 | 58 | .circle-you + .text .username { 59 | text-align: right; 60 | } 61 | 62 | .dark .circle-bot + .text div, .dark .circle-bot + .text * { 63 | color: #000; 64 | } 65 | 66 | .text { 67 | max-width: 80%; 68 | } 69 | 70 | .text p { 71 | margin-top: 5px; 72 | } 73 | 74 | .username { 75 | font-weight: bold; 76 | } 77 | 78 | .message-body { 79 | } 80 | 81 | .message-body img { 82 | max-width: 300px; 83 | max-height: 300px; 84 | border-radius: 20px; 85 | } 86 | 87 | .message-body p { 88 | margin-bottom: 0 !important; 89 | font-size: 15px !important; 90 | line-height: 1.428571429 !important; 91 | } 92 | 93 | .dark .message-body p em { 94 | color: rgb(138 138 138) !important; 95 | } 96 | 97 | .message-body p em { 98 | color: rgb(110 110 110) !important; 99 | } 100 | -------------------------------------------------------------------------------- /css/chat_style-wpp.css: -------------------------------------------------------------------------------- 1 | .message { 2 | padding-bottom: 25px; 3 | font-size: 15px; 4 | font-family: 'Noto Sans', Helvetica, Arial, sans-serif; 5 | line-height: 1.428571429; 6 | } 7 | 8 | .text-you { 9 | background-color: #d9fdd3; 10 | border-radius: 15px; 11 | padding: 10px; 12 | padding-top: 5px; 13 | float: right; 14 | } 15 | 16 | .text-bot { 17 | background-color: #f2f2f2; 18 | border-radius: 15px; 19 | padding: 10px; 20 | padding-top: 5px; 21 | } 22 | 23 | .dark .text-you { 24 | background-color: #005c4b; 25 | color: #111b21; 26 | } 27 | 28 | .dark .text-bot { 29 | background-color: #1f2937; 30 | color: #111b21; 31 | } 32 | 33 | .text-bot p, .text-you p { 34 | margin-top: 5px; 35 | } 36 | 37 | .message-body img { 38 | max-width: 300px; 39 | max-height: 300px; 40 | border-radius: 20px; 41 | } 42 | 43 | .message-body p { 44 | margin-bottom: 0 !important; 45 | font-size: 15px !important; 46 | line-height: 1.428571429 !important; 47 | } 48 | 49 | .dark .message-body p em { 50 | color: rgb(138 138 138) !important; 51 | } 52 | 53 | .message-body p em { 54 | color: rgb(110 110 110) !important; 55 | } -------------------------------------------------------------------------------- /css/highlightjs/github-dark.min.css: -------------------------------------------------------------------------------- 1 | pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! 2 | Theme: GitHub Dark 3 | Description: Dark theme as seen on github.com 4 | Author: github.com 5 | Maintainer: @Hirse 6 | Updated: 2021-05-15 7 | 8 | Outdated base version: https://github.com/primer/github-syntax-dark 9 | Current colors taken from GitHub's CSS 10 | */.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c} -------------------------------------------------------------------------------- /css/highlightjs/highlightjs-copy.min.css: -------------------------------------------------------------------------------- 1 | .hljs-copy-wrapper{position:relative;overflow:hidden}.hljs-copy-wrapper:hover .hljs-copy-button,.hljs-copy-button:focus{transform:translateX(0)}.hljs-copy-button{position:absolute;transform:translateX(calc(100% + 1.125em));top:1em;right:1em;width:2rem;height:2rem;text-indent:-9999px;color:#fff;border-radius:.25rem;border:1px solid #ffffff22;background-color:#2d2b57;background-color:var(--hljs-theme-background);background-image:url('data:image/svg+xml;utf-8,');background-repeat:no-repeat;background-position:center;transition:background-color 200ms ease,transform 200ms ease-out}.hljs-copy-button:hover{border-color:#ffffff44}.hljs-copy-button:active{border-color:#ffffff66}.hljs-copy-button[data-copied="true"]{text-indent:0;width:auto;background-image:none}@media(prefers-reduced-motion){.hljs-copy-button{transition:none}}.hljs-copy-alert{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px} 2 | -------------------------------------------------------------------------------- /css/html_instruct_style.css: -------------------------------------------------------------------------------- 1 | .chat { 2 | background: transparent; 3 | padding: 24px 19px; 4 | padding-right: 19px !important; 5 | padding-top: 0; 6 | } 7 | 8 | .chat > .messages { 9 | padding-top: 18px !important; 10 | } 11 | 12 | .message { 13 | display: grid; 14 | grid-template-columns: 60px 1fr; 15 | padding-bottom: 25px; 16 | font-size: 15px; 17 | font-family: 'Noto Sans', Helvetica, Arial, sans-serif; 18 | line-height: 24px; 19 | } 20 | 21 | .message:first-child { 22 | padding-top: 0; 23 | } 24 | 25 | .username { 26 | display: none; 27 | } 28 | 29 | .message-body p, .message-body li { 30 | font-size: 15px !important; 31 | line-height: 24px !important; 32 | } 33 | 34 | .message-body p, .chat .message-body ul, .chat .message-body ol { 35 | margin-bottom: 16px !important; 36 | } 37 | 38 | .message-body p:last-child, .chat .message-body ul:last-child, .chat .message-body ol:last-child { 39 | margin-bottom: 0 !important; 40 | } 41 | 42 | .dark .message-body p em { 43 | color: rgb(198 202 214) !important; 44 | } 45 | 46 | .message-body p em { 47 | color: rgb(110 110 110) !important; 48 | } 49 | 50 | .gradio-container .chat .assistant-message { 51 | padding: 20px; 52 | background: var(--color-grey-200); 53 | margin-top: 9px !important; 54 | margin-bottom: 12px !important; 55 | border-radius: 7px; 56 | border: 1px solid var(--border-color-primary); 57 | } 58 | 59 | .dark .chat .assistant-message { 60 | background: var(--color-grey-800); 61 | } 62 | 63 | .gradio-container .chat .user-message { 64 | padding: 20px; 65 | padding-left: 0px; 66 | padding-right: 0px; 67 | background-color: transparent; 68 | border-radius: 8px; 69 | border-bottom-right-radius: 0; 70 | } 71 | 72 | .gradio-container .chat .assistant-message:last-child, .gradio-container .chat .user-message:last-child { 73 | margin-bottom: 0 !important; 74 | } 75 | 76 | code { 77 | background-color: #f3f4f6 !important; 78 | } 79 | 80 | .dark code { 81 | background-color: #1f2937 !important; 82 | } 83 | -------------------------------------------------------------------------------- /css/html_readable_style.css: -------------------------------------------------------------------------------- 1 | .readable-container { 2 | max-width: 600px; 3 | margin-left: auto; 4 | margin-right: auto; 5 | background-color: rgb(31 41 55); 6 | padding: 3em; 7 | word-break: break-word; 8 | overflow-wrap: anywhere; 9 | color: #efefef !important; 10 | } 11 | 12 | .readable-container p, .readable-container li { 13 | font-size: 16px !important; 14 | color: #efefef !important; 15 | margin-bottom: 22px; 16 | line-height: 1.4 !important; 17 | } 18 | 19 | .readable-container li > p { 20 | display: inline !important; 21 | } 22 | 23 | .readable-container code { 24 | overflow-x: auto; 25 | } 26 | 27 | .readable-container :not(pre) > code { 28 | white-space: normal !important; 29 | } 30 | 31 | .readable-container .hoverable { 32 | font-size: 14px; 33 | } -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_AMS-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_AMS-Regular.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_AMS-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_AMS-Regular.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_AMS-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_AMS-Regular.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Caligraphic-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Caligraphic-Bold.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Caligraphic-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Caligraphic-Bold.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Caligraphic-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Caligraphic-Bold.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Caligraphic-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Caligraphic-Regular.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Caligraphic-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Caligraphic-Regular.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Caligraphic-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Caligraphic-Regular.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Fraktur-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Fraktur-Bold.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Fraktur-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Fraktur-Bold.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Fraktur-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Fraktur-Bold.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Fraktur-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Fraktur-Regular.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Fraktur-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Fraktur-Regular.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Fraktur-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Fraktur-Regular.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Main-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Main-Bold.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Main-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Main-Bold.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Main-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Main-Bold.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Main-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Main-BoldItalic.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Main-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Main-BoldItalic.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Main-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Main-BoldItalic.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Main-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Main-Italic.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Main-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Main-Italic.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Main-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Main-Italic.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Main-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Main-Regular.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Main-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Main-Regular.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Main-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Main-Regular.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Math-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Math-BoldItalic.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Math-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Math-BoldItalic.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Math-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Math-BoldItalic.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Math-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Math-Italic.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Math-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Math-Italic.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Math-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Math-Italic.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_SansSerif-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_SansSerif-Bold.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_SansSerif-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_SansSerif-Bold.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_SansSerif-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_SansSerif-Bold.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_SansSerif-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_SansSerif-Italic.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_SansSerif-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_SansSerif-Italic.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_SansSerif-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_SansSerif-Italic.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_SansSerif-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_SansSerif-Regular.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_SansSerif-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_SansSerif-Regular.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_SansSerif-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_SansSerif-Regular.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Script-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Script-Regular.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Script-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Script-Regular.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Script-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Script-Regular.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Size1-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Size1-Regular.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Size1-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Size1-Regular.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Size1-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Size1-Regular.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Size2-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Size2-Regular.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Size2-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Size2-Regular.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Size2-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Size2-Regular.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Size3-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Size3-Regular.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Size3-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Size3-Regular.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Size3-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Size3-Regular.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Size4-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Size4-Regular.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Size4-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Size4-Regular.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Size4-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Size4-Regular.woff2 -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Typewriter-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Typewriter-Regular.ttf -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Typewriter-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Typewriter-Regular.woff -------------------------------------------------------------------------------- /css/katex/fonts/KaTeX_Typewriter-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/css/katex/fonts/KaTeX_Typewriter-Regular.woff2 -------------------------------------------------------------------------------- /docs/02 - Default and Notebook Tabs.md: -------------------------------------------------------------------------------- 1 | Used to generate raw completions starting from your prompt. 2 | 3 | ## Default tab 4 | 5 | This tab contains two main text boxes: Input, where you enter your prompt, and Output, where the model output will appear. 6 | 7 | ### Input 8 | 9 | The number on the lower right of the Input box counts the number of tokens in the input. It gets updated whenever you update the input text as long as a model is loaded (otherwise there is no tokenizer to count the tokens). 10 | 11 | Below the Input box, the following buttons can be found: 12 | 13 | * **Generate**: starts a new generation. 14 | * **Stop**: stops an ongoing generation as soon as the next token is generated (which can take a while for a slow model). 15 | * **Continue**: starts a new generation taking as input the text in the "Output" box. 16 | 17 | In the **Prompt** menu, you can select from some predefined prompts defined under `text-generation-webui/prompts`. The 💾 button saves your current input as a new prompt, the 🗑️ button deletes the selected prompt, and the 🔄 button refreshes the list. If you come up with an interesting prompt for a certain task, you are welcome to submit it to the repository. 18 | 19 | ### Output 20 | 21 | Four tabs can be found: 22 | 23 | * **Raw**: where the raw text generated by the model appears. 24 | * **Markdown**: it contains a "Render" button. You can click on it at any time to render the current output as markdown. This is particularly useful for models that generate LaTeX equations like GALACTICA. 25 | * **HTML**: displays the output in an HTML style that is meant to be easier to read. Its style is defined under `text-generation-webui/css/html_readable_style.css`. 26 | * **Logits**: when you click on "Get next token probabilities", this tab displays the 50 most likely next tokens and their probabilities based on your current input. If "Use samplers" is checked, the probabilities will be the ones after the sampling parameters in the "Parameters" > "Generation" tab are applied. Otherwise, they will be the raw probabilities generated by the model. 27 | * **Tokens**: allows you to tokenize your prompt and see the ID numbers for the individuals tokens. 28 | 29 | ## Notebook tab 30 | 31 | Precisely the same thing as the Default tab, with the difference that the output appears in the same text box as the input. 32 | 33 | It contains the following additional button: 34 | 35 | * **Regenerate**: uses your previous input for generation while discarding the last output. 36 | -------------------------------------------------------------------------------- /docs/06 - Session Tab.md: -------------------------------------------------------------------------------- 1 | Here you can restart the UI with new settings. 2 | 3 | * **Available extensions**: shows a list of extensions available under `text-generation-webui/extensions`. 4 | * **Boolean command-line flags**: shows command-line flags of bool (true/false) type. 5 | 6 | After selecting your desired flags and extensions, you can restart the UI by clicking on **Apply flags/extensions and restart**. 7 | 8 | ## Install or update an extension 9 | 10 | In this field, you can enter the GitHub URL for an extension and press enter to either install it (i.e. cloning it into `text-generation-webui/extensions`) or update it with `git pull` in case it is already cloned. 11 | 12 | Note that some extensions may include additional Python requirements. In this case, to install those you have to run the command 13 | 14 | ``` 15 | pip install -r extensions/extension-name/requirements.txt 16 | ``` 17 | 18 | or 19 | 20 | ``` 21 | pip install -r extensions\extension-name\requirements.txt 22 | ``` 23 | 24 | if you are on Windows. 25 | 26 | If you used the one-click installer, this command should be executed in the terminal window that appears when you run the "cmd_" script for your OS. 27 | 28 | ## Saving UI defaults 29 | 30 | The **Save UI defaults to settings.yaml** button gathers the visible values in the UI and saves them to settings.yaml so that your settings will persist across multiple restarts of the UI. 31 | 32 | Note that preset parameters like temperature are not individually saved, so you need to first save your preset and select it in the preset menu before saving the defaults. 33 | -------------------------------------------------------------------------------- /docs/08 - Additional Tips.md: -------------------------------------------------------------------------------- 1 | ## Audio notification 2 | 3 | If your computer takes a long time to generate each response for the model that you are using, you can enable an audio notification for when the response is completed. This feature was kindly contributed by HappyWorldGames in [#1277](https://github.com/oobabooga/text-generation-webui/pull/1277). 4 | 5 | ### Installation 6 | 7 | Simply place a file called "notification.mp3" in the same folder as `server.py`. Here you can find some examples: 8 | 9 | * https://pixabay.com/sound-effects/search/ding/?duration=0-30 10 | * https://pixabay.com/sound-effects/search/notification/?duration=0-30 11 | 12 | Source: https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/1126 13 | 14 | This file will be automatically detected the next time you start the web UI. 15 | 16 | ## Using LoRAs with GPTQ-for-LLaMa 17 | 18 | This requires using a monkey patch that is supported by this web UI: https://github.com/johnsmith0031/alpaca_lora_4bit 19 | 20 | To use it: 21 | 22 | Install alpaca_lora_4bit using pip 23 | 24 | ``` 25 | git clone https://github.com/johnsmith0031/alpaca_lora_4bit.git 26 | cd alpaca_lora_4bit 27 | git fetch origin winglian-setup_pip 28 | git checkout winglian-setup_pip 29 | pip install . 30 | ``` 31 | 32 | Start the UI with the --monkey-patch flag: 33 | 34 | ``` 35 | python server.py --model llama-7b-4bit-128g --listen --lora tloen_alpaca-lora-7b --monkey-patch 36 | ``` 37 | 38 | ## DeepSpeed 39 | 40 | `DeepSpeed ZeRO-3` is an alternative offloading strategy for full-precision (16-bit) transformers models. 41 | 42 | With this, I have been able to load a 6b model (GPT-J 6B) with less than 6GB of VRAM. The speed of text generation is very decent and much better than what would be accomplished with `--auto-devices --gpu-memory 6`. 43 | 44 | As far as I know, DeepSpeed is only available for Linux at the moment. 45 | 46 | ### How to use it 47 | 48 | 1. Install DeepSpeed: 49 | 50 | ``` 51 | conda install -c conda-forge mpi4py mpich 52 | pip install -U deepspeed 53 | ``` 54 | 55 | 2. Start the web UI replacing `python` with `deepspeed --num_gpus=1` and adding the `--deepspeed` flag. Example: 56 | 57 | ``` 58 | deepspeed --num_gpus=1 server.py --deepspeed --chat --model gpt-j-6B 59 | ``` 60 | 61 | ## Miscellaneous info 62 | 63 | ### You can train LoRAs in CPU mode 64 | 65 | Load the web UI with 66 | 67 | ``` 68 | python server.py --cpu 69 | ``` 70 | 71 | and start training the LoRA from the training tab as usual. 72 | 73 | ### You can check the sha256sum of downloaded models with the download script 74 | 75 | ``` 76 | python download-model.py facebook/galactica-125m --check 77 | ``` 78 | 79 | ### The download script continues interrupted downloads by default 80 | 81 | It doesn't start over. 82 | 83 | -------------------------------------------------------------------------------- /docs/11 - AMD Setup.md: -------------------------------------------------------------------------------- 1 | ## Using an AMD GPU in Linux 2 | 3 | Requires ROCm SDK 5.4.2 or 5.4.3 to be installed. Some systems may also 4 | need: 5 | 6 | ``` 7 | sudo apt-get install libstdc++-12-dev 8 | ``` 9 | 10 | Edit the "one_click.py" script using a text editor and un-comment and 11 | modify the lines near the top of the script according to your setup. In 12 | particular, modify the `os.environ["ROCM_PATH"] = '/opt/rocm'` line to 13 | point to your ROCm installation. 14 | -------------------------------------------------------------------------------- /docs/13 - Keyboard Shortcuts.md: -------------------------------------------------------------------------------- 1 | # Keyboard Shortcuts 2 | 3 | #### General 4 | 5 | | Shortcut | Description | 6 | |-------------------------|--------------------------------------------------| 7 | | Esc | Stop generation | 8 | | Tab | Switch between current tab and Parameters tab | 9 | 10 | #### Chat tab 11 | 12 | | Shortcut | Description | 13 | |-------------------------|--------------------------------------------------| 14 | | Ctrl + S | Show/hide chat controls | 15 | | Ctrl + Enter | Regenerate | 16 | | Alt + Enter | Continue | 17 | | Ctrl + Shift + Backspace| Remove last | 18 | | Ctrl + Shift + K | Copy last | 19 | | Ctrl + Shift + L | Replace last | 20 | | Ctrl + Shift + M | Impersonate | 21 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | These files is a mirror of the documentation at: 2 | 3 | # https://github.com/oobabooga/text-generation-webui/wiki 4 | 5 | It is recommended to browse it there. Contributions can be sent here and will later be synced with the wiki. 6 | -------------------------------------------------------------------------------- /docs/What Works.md: -------------------------------------------------------------------------------- 1 | ## What Works 2 | 3 | | Loader | Loading 1 LoRA | Loading 2 or more LoRAs | Training LoRAs | Multimodal extension | Perplexity evaluation | 4 | |----------------|----------------|-------------------------|----------------|----------------------|-----------------------| 5 | | Transformers | ✅ | ✅\*\*\* | ✅\* | ✅ | ✅ | 6 | | llama.cpp | ❌ | ❌ | ❌ | ❌ | use llamacpp_HF | 7 | | llamacpp_HF | ❌ | ❌ | ❌ | ❌ | ✅ | 8 | | ExLlamav2_HF | ✅ | ✅ | ❌ | ❌ | ✅ | 9 | | ExLlamav2 | ✅ | ✅ | ❌ | ❌ | use ExLlamav2_HF | 10 | | AutoGPTQ | ✅ | ❌ | ❌ | ✅ | ✅ | 11 | | AutoAWQ | ? | ❌ | ? | ? | ✅ | 12 | | GPTQ-for-LLaMa | ✅\*\* | ✅\*\*\* | ✅ | ✅ | ✅ | 13 | | QuIP# | ? | ? | ? | ? | ✅ | 14 | | HQQ | ? | ? | ? | ? | ✅ | 15 | 16 | ❌ = not implemented 17 | 18 | ✅ = implemented 19 | 20 | \* Training LoRAs with GPTQ models also works with the Transformers loader. Make sure to check "auto-devices" and "disable_exllama" before loading the model. 21 | 22 | \*\* Requires the monkey-patch. The instructions can be found [here](https://github.com/oobabooga/text-generation-webui/wiki/08-%E2%80%90-Additional-Tips#using-loras-with-gptq-for-llama). 23 | 24 | \*\*\* Multi-LoRA in PEFT is tricky and the current implementation does not work reliably in all cases. 25 | -------------------------------------------------------------------------------- /extensions/Training_PRO/matplotgraph.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | 4 | def create_graph(lora_path, lora_name): 5 | try: 6 | import matplotlib.pyplot as plt 7 | from matplotlib.ticker import ScalarFormatter 8 | 9 | peft_model_path = f'{lora_path}/training_graph.json' 10 | image_model_path = f'{lora_path}/training_graph.png' 11 | # Check if the JSON file exists 12 | if os.path.exists(peft_model_path): 13 | # Load data from JSON file 14 | with open(peft_model_path, 'r') as file: 15 | data = json.load(file) 16 | # Extract x, y1, and y2 values 17 | x = [item['epoch'] for item in data] 18 | y1 = [item['learning_rate'] for item in data] 19 | y2 = [item['loss'] for item in data] 20 | 21 | # Create the line chart 22 | fig, ax1 = plt.subplots(figsize=(10, 6)) 23 | 24 | 25 | # Plot y1 (learning rate) on the first y-axis 26 | ax1.plot(x, y1, 'b-', label='Learning Rate') 27 | ax1.set_xlabel('Epoch') 28 | ax1.set_ylabel('Learning Rate', color='b') 29 | ax1.tick_params('y', colors='b') 30 | 31 | # Create a second y-axis 32 | ax2 = ax1.twinx() 33 | 34 | # Plot y2 (loss) on the second y-axis 35 | ax2.plot(x, y2, 'r-', label='Loss') 36 | ax2.set_ylabel('Loss', color='r') 37 | ax2.tick_params('y', colors='r') 38 | 39 | # Set the y-axis formatter to display numbers in scientific notation 40 | ax1.yaxis.set_major_formatter(ScalarFormatter(useMathText=True)) 41 | ax1.ticklabel_format(style='sci', axis='y', scilimits=(0,0)) 42 | 43 | # Add grid 44 | ax1.grid(True) 45 | 46 | # Combine the legends for both plots 47 | lines, labels = ax1.get_legend_handles_labels() 48 | lines2, labels2 = ax2.get_legend_handles_labels() 49 | ax2.legend(lines + lines2, labels + labels2, loc='best') 50 | 51 | # Set the title 52 | plt.title(f'{lora_name} LR and Loss vs Epoch') 53 | 54 | # Save the chart as an image 55 | plt.savefig(image_model_path) 56 | 57 | print(f"Graph saved in {image_model_path}") 58 | else: 59 | print(f"File 'training_graph.json' does not exist in the {lora_path}") 60 | 61 | except ImportError: 62 | print("matplotlib is not installed. Please install matplotlib to create PNG graphs") -------------------------------------------------------------------------------- /extensions/character_bias/script.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import gradio as gr 4 | 5 | # get the current directory of the script 6 | current_dir = os.path.dirname(os.path.abspath(__file__)) 7 | 8 | # check if the bias_options.txt file exists, if not, create it 9 | bias_file = os.path.join(current_dir, "bias_options.txt") 10 | if not os.path.isfile(bias_file): 11 | with open(bias_file, "w") as f: 12 | f.write("*I am so happy*\n*I am so sad*\n*I am so excited*\n*I am so bored*\n*I am so angry*") 13 | 14 | # read bias options from the text file 15 | with open(bias_file, "r") as f: 16 | bias_options = [line.strip() for line in f.readlines()] 17 | 18 | params = { 19 | "activate": True, 20 | "bias string": " *I am so happy*", 21 | "custom string": "", 22 | } 23 | 24 | 25 | def input_modifier(string): 26 | """ 27 | This function is applied to your text inputs before 28 | they are fed into the model. 29 | """ 30 | return string 31 | 32 | 33 | def output_modifier(string): 34 | """ 35 | This function is applied to the model outputs. 36 | """ 37 | return string 38 | 39 | 40 | def bot_prefix_modifier(string): 41 | """ 42 | This function is only applied in chat mode. It modifies 43 | the prefix text for the Bot and can be used to bias its 44 | behavior. 45 | """ 46 | if params['activate']: 47 | if params['custom string'].strip() != '': 48 | return f'{string} {params["custom string"].strip()} ' 49 | else: 50 | return f'{string} {params["bias string"].strip()} ' 51 | else: 52 | return string 53 | 54 | 55 | def ui(): 56 | # Gradio elements 57 | activate = gr.Checkbox(value=params['activate'], label='Activate character bias') 58 | dropdown_string = gr.Dropdown(choices=bias_options, value=params["bias string"], label='Character bias', info='To edit the options in this dropdown edit the "bias_options.txt" file') 59 | custom_string = gr.Textbox(value=params['custom string'], placeholder="Enter custom bias string", label="Custom Character Bias", info='If not empty, will be used instead of the value above') 60 | 61 | # Event functions to update the parameters in the backend 62 | def update_bias_string(x): 63 | if x: 64 | params.update({"bias string": x}) 65 | else: 66 | params.update({"bias string": dropdown_string.get()}) 67 | return x 68 | 69 | def update_custom_string(x): 70 | params.update({"custom string": x}) 71 | 72 | dropdown_string.change(update_bias_string, dropdown_string, None) 73 | custom_string.change(update_custom_string, custom_string, None) 74 | activate.change(lambda x: params.update({"activate": x}), activate, None) 75 | -------------------------------------------------------------------------------- /extensions/coqui_tts/languages.json: -------------------------------------------------------------------------------- 1 | { 2 | "Arabic": "ar", 3 | "Chinese": "zh-cn", 4 | "Czech": "cs", 5 | "Dutch": "nl", 6 | "English": "en", 7 | "French": "fr", 8 | "German": "de", 9 | "Hungarian": "hu", 10 | "Italian": "it", 11 | "Japanese": "ja", 12 | "Korean": "ko", 13 | "Polish": "pl", 14 | "Portuguese": "pt", 15 | "Russian": "ru", 16 | "Spanish": "es", 17 | "Turkish": "tr" 18 | } -------------------------------------------------------------------------------- /extensions/coqui_tts/requirements.txt: -------------------------------------------------------------------------------- 1 | TTS==0.21.* -------------------------------------------------------------------------------- /extensions/coqui_tts/style.css: -------------------------------------------------------------------------------- 1 | .SDAP .hires_opts input[type="number"] { 2 | width: 6em !important; 3 | } 4 | 5 | /* silero_tts preview */ 6 | .form:has(> #silero_preview_text) { 7 | min-width: 75% 8 | } 9 | -------------------------------------------------------------------------------- /extensions/coqui_tts/voices/arnold.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/extensions/coqui_tts/voices/arnold.wav -------------------------------------------------------------------------------- /extensions/coqui_tts/voices/female_01.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/extensions/coqui_tts/voices/female_01.wav -------------------------------------------------------------------------------- /extensions/coqui_tts/voices/female_02.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/extensions/coqui_tts/voices/female_02.wav -------------------------------------------------------------------------------- /extensions/elevenlabs_tts/outputs/outputs-will-be-saved-here.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/extensions/elevenlabs_tts/outputs/outputs-will-be-saved-here.txt -------------------------------------------------------------------------------- /extensions/elevenlabs_tts/requirements.txt: -------------------------------------------------------------------------------- 1 | elevenlabs==0.2.* 2 | -------------------------------------------------------------------------------- /extensions/gallery/script.js: -------------------------------------------------------------------------------- 1 | let gallery_element = document.getElementById('gallery-extension'); 2 | let chat_mode_element = document.getElementById('chat-mode'); 3 | 4 | let extensions_block = document.getElementById('extensions'); 5 | let extensions_block_size = extensions_block.childNodes.length; 6 | let gallery_only = (extensions_block_size == 5); 7 | 8 | function gotoFirstPage() { 9 | const firstPageButton = gallery_element.querySelector('.paginate > button'); 10 | if (firstPageButton) { 11 | firstPageButton.click(); 12 | } 13 | } 14 | 15 | document.querySelector('.header_bar').addEventListener('click', function(event) { 16 | if (event.target.tagName === 'BUTTON') { 17 | const buttonText = event.target.textContent.trim(); 18 | 19 | let chat_visible = (buttonText == 'Chat'); 20 | let default_visible = (buttonText == 'Default'); 21 | let notebook_visible = (buttonText == 'Notebook'); 22 | let chat_mode_visible = (chat_mode_element.offsetHeight > 0 && chat_mode_element.offsetWidth > 0); 23 | 24 | // Only show this extension in the Chat tab 25 | if (chat_visible) { 26 | if (chat_mode_visible) { 27 | gallery_element.style.display = 'block'; 28 | extensions_block.style.display = ''; 29 | } else { 30 | gallery_element.style.display = 'none'; 31 | extensions_block.style.display = 'none'; 32 | } 33 | } else { 34 | gallery_element.style.display = 'none'; 35 | if (gallery_only) { 36 | extensions_block.style.display = 'none'; 37 | } 38 | } 39 | } 40 | }); 41 | -------------------------------------------------------------------------------- /extensions/google_translate/requirements.txt: -------------------------------------------------------------------------------- 1 | deep-translator==1.9.2 2 | -------------------------------------------------------------------------------- /extensions/multimodal/abstract_pipeline.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | from typing import List, Optional 3 | 4 | import torch 5 | from PIL import Image 6 | from transformers import is_torch_xpu_available 7 | 8 | 9 | class AbstractMultimodalPipeline(ABC): 10 | @staticmethod 11 | @abstractmethod 12 | def name() -> str: 13 | 'name of the pipeline, should be same as in --multimodal-pipeline' 14 | pass 15 | 16 | @staticmethod 17 | @abstractmethod 18 | def image_start() -> Optional[str]: 19 | 'return image start string, string representation of image start token, or None if not applicable' 20 | pass 21 | 22 | @staticmethod 23 | @abstractmethod 24 | def image_end() -> Optional[str]: 25 | 'return image end string, string representation of image end token, or None if not applicable' 26 | pass 27 | 28 | @staticmethod 29 | @abstractmethod 30 | def placeholder_token_id() -> int: 31 | 'return placeholder token id' 32 | pass 33 | 34 | @staticmethod 35 | @abstractmethod 36 | def num_image_embeds() -> int: 37 | 'return the number of embeds used by a single image (for example: 256 for LLaVA)' 38 | pass 39 | 40 | @abstractmethod 41 | def embed_images(self, images: List[Image.Image]) -> torch.Tensor: 42 | 'forward the images through vision pipeline, and return their embeddings' 43 | pass 44 | 45 | @staticmethod 46 | @abstractmethod 47 | def embed_tokens(input_ids: torch.Tensor) -> torch.Tensor: 48 | 'embed tokens, the exact function varies by LLM, for LLaMA it is `shared.model.model.embed_tokens`' 49 | pass 50 | 51 | @staticmethod 52 | @abstractmethod 53 | def placeholder_embeddings() -> torch.Tensor: 54 | 'get placeholder embeddings if there are multiple images, and `add_all_images_to_prompt` is False' 55 | pass 56 | 57 | def _get_device(self, setting_name: str, params: dict): 58 | if params[setting_name] is None: 59 | return torch.device("cuda:0" if torch.cuda.is_available() else "xpu:0" if is_torch_xpu_available() else "cpu") 60 | return torch.device(params[setting_name]) 61 | 62 | def _get_dtype(self, setting_name: str, params: dict): 63 | return torch.float32 if int(params[setting_name]) == 32 else torch.float16 64 | -------------------------------------------------------------------------------- /extensions/multimodal/pipeline_loader.py: -------------------------------------------------------------------------------- 1 | import traceback 2 | from importlib import import_module 3 | from pathlib import Path 4 | from typing import Tuple 5 | 6 | from extensions.multimodal.abstract_pipeline import AbstractMultimodalPipeline 7 | from modules import shared 8 | from modules.logging_colors import logger 9 | 10 | 11 | def _get_available_pipeline_modules(): 12 | pipeline_path = Path(__file__).parent / 'pipelines' 13 | modules = [p for p in pipeline_path.iterdir() if p.is_dir()] 14 | return [m.name for m in modules if (m / 'pipelines.py').exists()] 15 | 16 | 17 | def load_pipeline(params: dict) -> Tuple[AbstractMultimodalPipeline, str]: 18 | pipeline_modules = {} 19 | available_pipeline_modules = _get_available_pipeline_modules() 20 | for name in available_pipeline_modules: 21 | try: 22 | pipeline_modules[name] = import_module(f'extensions.multimodal.pipelines.{name}.pipelines') 23 | except: 24 | logger.warning(f'Failed to get multimodal pipelines from {name}') 25 | logger.warning(traceback.format_exc()) 26 | 27 | if shared.args.multimodal_pipeline is not None: 28 | for k in pipeline_modules: 29 | if hasattr(pipeline_modules[k], 'get_pipeline'): 30 | pipeline = getattr(pipeline_modules[k], 'get_pipeline')(shared.args.multimodal_pipeline, params) 31 | if pipeline is not None: 32 | return (pipeline, k) 33 | else: 34 | model_name = shared.args.model.lower() 35 | for k in pipeline_modules: 36 | if hasattr(pipeline_modules[k], 'get_pipeline_from_model_name'): 37 | pipeline = getattr(pipeline_modules[k], 'get_pipeline_from_model_name')(model_name, params) 38 | if pipeline is not None: 39 | return (pipeline, k) 40 | 41 | available = [] 42 | for k in pipeline_modules: 43 | if hasattr(pipeline_modules[k], 'available_pipelines'): 44 | pipelines = getattr(pipeline_modules[k], 'available_pipelines') 45 | available += pipelines 46 | 47 | if shared.args.multimodal_pipeline is not None: 48 | log = f'Multimodal - ERROR: Failed to load multimodal pipeline "{shared.args.multimodal_pipeline}", available pipelines are: {available}.' 49 | else: 50 | log = f'Multimodal - ERROR: Failed to determine multimodal pipeline for model {shared.args.model}, please select one manually using --multimodal-pipeline [PIPELINE]. Available pipelines are: {available}.' 51 | logger.critical(f'{log} Please specify a correct pipeline, or disable the extension') 52 | raise RuntimeError(f'{log} Please specify a correct pipeline, or disable the extension') 53 | -------------------------------------------------------------------------------- /extensions/multimodal/pipelines/llava/README.md: -------------------------------------------------------------------------------- 1 | ## LLaVA pipeline 2 | 3 | This module provides 2 pipelines: 4 | - `llava-7b` - for use with LLaVA v0 7B model (finetuned LLaMa 7B) 5 | - `llava-13b` - for use with LLaVA v0 13B model (finetuned LLaMa 13B) 6 | 7 | [LLaVA](https://github.com/haotian-liu/LLaVA) uses CLIP `openai/clip-vit-large-patch14` as the vision model, and then a single linear layer. For 13B the projector weights are in `liuhaotian/LLaVA-13b-delta-v0`, and for 7B they are in `liuhaotian/LLaVA-7b-delta-v0`. 8 | 9 | The supported parameter combinations for both the vision model, and the projector are: CUDA/32bit, CUDA/16bit, CPU/32bit 10 | -------------------------------------------------------------------------------- /extensions/multimodal/pipelines/llava/pipelines.py: -------------------------------------------------------------------------------- 1 | from typing import Optional 2 | 3 | from extensions.multimodal.abstract_pipeline import AbstractMultimodalPipeline 4 | 5 | available_pipelines = ['llava-7b', 'llava-13b', 'llava-llama-2-13b', 'llava-v1.5-13b', 'llava-v1.5-7b'] 6 | 7 | 8 | def get_pipeline(name: str, params: dict) -> Optional[AbstractMultimodalPipeline]: 9 | if name == 'llava-7b': 10 | from .llava import LLaVA_v0_7B_Pipeline 11 | return LLaVA_v0_7B_Pipeline(params) 12 | if name == 'llava-13b': 13 | from .llava import LLaVA_v0_13B_Pipeline 14 | return LLaVA_v0_13B_Pipeline(params) 15 | if name == 'llava-llama-2-13b': 16 | from .llava import LLaVA_LLaMA_2_13B_Pipeline 17 | return LLaVA_LLaMA_2_13B_Pipeline(params) 18 | if name == 'llava-v1.5-7b': 19 | from .llava import LLaVA_v1_5_7B_Pipeline 20 | return LLaVA_v1_5_7B_Pipeline(params) 21 | if name == 'llava-v1.5-13b': 22 | from .llava import LLaVA_v1_5_13B_Pipeline 23 | return LLaVA_v1_5_13B_Pipeline(params) 24 | return None 25 | 26 | 27 | def get_pipeline_from_model_name(model_name: str, params: dict) -> Optional[AbstractMultimodalPipeline]: 28 | if 'llava' not in model_name.lower(): 29 | return None 30 | if 'llama-2' in model_name.lower(): 31 | if '13b' in model_name.lower(): 32 | from .llava import LLaVA_LLaMA_2_13B_Pipeline 33 | return LLaVA_LLaMA_2_13B_Pipeline(params) 34 | elif 'llava-v1.5' in model_name.lower(): 35 | if '13b' in model_name.lower(): 36 | from .llava import LLaVA_v1_5_13B_Pipeline 37 | return LLaVA_v1_5_13B_Pipeline(params) 38 | if '7b' in model_name.lower(): 39 | from .llava import LLaVA_v1_5_7B_Pipeline 40 | return LLaVA_v1_5_7B_Pipeline(params) 41 | else: 42 | if '7b' in model_name.lower(): 43 | from .llava import LLaVA_v0_7B_Pipeline 44 | return LLaVA_v0_7B_Pipeline(params) 45 | if '13b' in model_name.lower(): 46 | from .llava import LLaVA_v0_13B_Pipeline 47 | return LLaVA_v0_13B_Pipeline(params) 48 | return None 49 | -------------------------------------------------------------------------------- /extensions/multimodal/pipelines/place-additional-pipelines-here.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/extensions/multimodal/pipelines/place-additional-pipelines-here.txt -------------------------------------------------------------------------------- /extensions/ngrok/README.md: -------------------------------------------------------------------------------- 1 | # Adding an ingress URL through the ngrok Agent SDK for Python 2 | 3 | [ngrok](https://ngrok.com) is a globally distributed reverse proxy commonly used for quickly getting a public URL to a 4 | service running inside a private network, such as on your local laptop. The ngrok agent is usually 5 | deployed inside a private network and is used to communicate with the ngrok cloud service. 6 | 7 | By default the authtoken in the NGROK_AUTHTOKEN environment variable will be used. Alternatively one may be specified in 8 | the `settings.json` file, see the Examples below. Retrieve your authtoken on the [Auth Token page of your ngrok dashboard](https://dashboard.ngrok.com/get-started/your-authtoken), signing up is free. 9 | 10 | # Documentation 11 | 12 | For a list of all available options, see [the configuration documentation](https://ngrok.com/docs/ngrok-agent/config/) or [the connect example](https://github.com/ngrok/ngrok-py/blob/main/examples/ngrok-connect-full.py). 13 | 14 | The ngrok Python SDK is [on github here](https://github.com/ngrok/ngrok-py). A quickstart guide and a full API reference are included in the [ngrok-py Python API documentation](https://ngrok.github.io/ngrok-py/). 15 | 16 | # Running 17 | 18 | To enable ngrok install the requirements and then add `--extension ngrok` to the command line options, for instance: 19 | 20 | ```bash 21 | pip install -r extensions/ngrok/requirements.txt 22 | python server.py --extension ngrok 23 | ``` 24 | 25 | In the output you should then see something like this: 26 | 27 | ```bash 28 | INFO:Loading the extension "ngrok"... 29 | INFO:Session created 30 | INFO:Created tunnel "9d9d0944dc75ff9d3aae653e5eb29fe9" with url "https://d83706cf7be7.ngrok.app" 31 | INFO:Tunnel "9d9d0944dc75ff9d3aae653e5eb29fe9" TCP forwarding to "localhost:7860" 32 | INFO:Ingress established at https://d83706cf7be7.ngrok.app 33 | ``` 34 | 35 | You can now access the webui via the url shown, in this case `https://d83706cf7be7.ngrok.app`. It is recommended to add some authentication to the ingress, see below. 36 | 37 | # Example Settings 38 | 39 | In `settings.json` add a `ngrok` key with a dictionary of options, for instance: 40 | 41 | To enable basic authentication: 42 | ```json 43 | { 44 | "ngrok": { 45 | "basic_auth": "user:password" 46 | } 47 | } 48 | ``` 49 | 50 | To enable OAUTH authentication: 51 | ```json 52 | { 53 | "ngrok": { 54 | "oauth_provider": "google", 55 | "oauth_allow_domains": "asdf.com", 56 | "oauth_allow_emails": "asdf@asdf.com" 57 | } 58 | } 59 | ``` 60 | 61 | To add an authtoken instead of using the NGROK_AUTHTOKEN environment variable: 62 | ```json 63 | { 64 | "ngrok": { 65 | "authtoken": "", 66 | "authtoken_from_env":false 67 | } 68 | } 69 | ``` -------------------------------------------------------------------------------- /extensions/ngrok/requirements.txt: -------------------------------------------------------------------------------- 1 | ngrok==0.* 2 | -------------------------------------------------------------------------------- /extensions/ngrok/script.py: -------------------------------------------------------------------------------- 1 | # Adds ngrok ingress, to use add `--extension ngrok` to the command line options 2 | # 3 | # Parameters can be customized in settings.json of webui, e.g.: 4 | # {"ngrok": {"basic_auth":"user:password"} } 5 | # or 6 | # {"ngrok": {"oauth_provider":"google", "oauth_allow_emails":["asdf@asdf.com"]} } 7 | # 8 | # See this example for full list of options: https://github.com/ngrok/ngrok-py/blob/main/examples/ngrok-connect-full.py 9 | # or the README.md in this directory. 10 | 11 | from modules import shared 12 | 13 | # Pick up host/port command line arguments 14 | host = shared.args.listen_host if shared.args.listen_host and shared.args.listen else '127.0.0.1' 15 | port = shared.args.listen_port if shared.args.listen_port else '7860' 16 | 17 | # Default options 18 | options = { 19 | 'addr': f"{host}:{port}", 20 | 'authtoken_from_env': True, 21 | 'session_metadata': 'text-generation-webui', 22 | } 23 | 24 | 25 | def ui(): 26 | settings = shared.settings.get("ngrok") 27 | if settings: 28 | options.update(settings) 29 | 30 | try: 31 | import ngrok 32 | tunnel = ngrok.connect(**options) 33 | shared.logger.info(f"Ingress established at: {tunnel.url()}") 34 | except ModuleNotFoundError: 35 | shared.logger.error("===> ngrok library not found, please run `pip install -r extensions/ngrok/requirements.txt`") 36 | -------------------------------------------------------------------------------- /extensions/openai/cache_embedding_model.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # preload the embedding model, useful for Docker images to prevent re-download on config change 3 | # Dockerfile: 4 | # ENV OPENEDAI_EMBEDDING_MODEL="sentence-transformers/all-mpnet-base-v2" # Optional 5 | # RUN python3 cache_embedded_model.py 6 | import os 7 | 8 | import sentence_transformers 9 | 10 | st_model = os.environ.get("OPENEDAI_EMBEDDING_MODEL", "sentence-transformers/all-mpnet-base-v2") 11 | model = sentence_transformers.SentenceTransformer(st_model) 12 | -------------------------------------------------------------------------------- /extensions/openai/errors.py: -------------------------------------------------------------------------------- 1 | class OpenAIError(Exception): 2 | def __init__(self, message=None, code=500, internal_message=''): 3 | self.message = message 4 | self.code = code 5 | self.internal_message = internal_message 6 | 7 | def __repr__(self): 8 | return "%s(message=%r, code=%d)" % ( 9 | self.__class__.__name__, 10 | self.message, 11 | self.code, 12 | ) 13 | 14 | 15 | class InvalidRequestError(OpenAIError): 16 | def __init__(self, message, param, code=400, internal_message=''): 17 | super().__init__(message, code, internal_message) 18 | self.param = param 19 | 20 | def __repr__(self): 21 | return "%s(message=%r, code=%d, param=%s)" % ( 22 | self.__class__.__name__, 23 | self.message, 24 | self.code, 25 | self.param, 26 | ) 27 | 28 | 29 | class ServiceUnavailableError(OpenAIError): 30 | def __init__(self, message="Service unavailable, please try again later.", code=503, internal_message=''): 31 | super().__init__(message, code, internal_message) 32 | -------------------------------------------------------------------------------- /extensions/openai/logits.py: -------------------------------------------------------------------------------- 1 | from extensions.openai.completions import process_parameters 2 | from modules.logits import get_next_logits 3 | 4 | 5 | def _get_next_logits(body): 6 | # Pre-process the input payload to simulate a real generation 7 | use_samplers = body['use_samplers'] 8 | state = process_parameters(body) if use_samplers else {} 9 | state['stream'] = True 10 | 11 | return get_next_logits(body['prompt'], state, use_samplers, "", top_logits=body['top_logits'], return_dict=True) 12 | -------------------------------------------------------------------------------- /extensions/openai/models.py: -------------------------------------------------------------------------------- 1 | from modules import shared 2 | from modules.logging_colors import logger 3 | from modules.LoRA import add_lora_to_model 4 | from modules.models import load_model, unload_model 5 | from modules.models_settings import get_model_metadata, update_model_parameters 6 | from modules.utils import get_available_loras, get_available_models 7 | 8 | 9 | def get_current_model_info(): 10 | return { 11 | 'model_name': shared.model_name, 12 | 'lora_names': shared.lora_names, 13 | 'loader': shared.args.loader 14 | } 15 | 16 | 17 | def list_models(): 18 | return {'model_names': get_available_models()[1:]} 19 | 20 | 21 | def list_dummy_models(): 22 | result = { 23 | "object": "list", 24 | "data": [] 25 | } 26 | 27 | # these are expected by so much, so include some here as a dummy 28 | for model in ['gpt-3.5-turbo', 'text-embedding-ada-002']: 29 | result["data"].append(model_info_dict(model)) 30 | 31 | return result 32 | 33 | 34 | def model_info_dict(model_name: str) -> dict: 35 | return { 36 | "id": model_name, 37 | "object": "model", 38 | "created": 0, 39 | "owned_by": "user" 40 | } 41 | 42 | 43 | def _load_model(data): 44 | model_name = data["model_name"] 45 | args = data["args"] 46 | settings = data["settings"] 47 | 48 | unload_model() 49 | model_settings = get_model_metadata(model_name) 50 | update_model_parameters(model_settings) 51 | 52 | # Update shared.args with custom model loading settings 53 | if args: 54 | for k in args: 55 | if hasattr(shared.args, k): 56 | setattr(shared.args, k, args[k]) 57 | 58 | shared.model, shared.tokenizer = load_model(model_name) 59 | 60 | # Update shared.settings with custom generation defaults 61 | if settings: 62 | for k in settings: 63 | if k in shared.settings: 64 | shared.settings[k] = settings[k] 65 | if k == 'truncation_length': 66 | logger.info(f"TRUNCATION LENGTH (UPDATED): {shared.settings['truncation_length']}") 67 | elif k == 'instruction_template': 68 | logger.info(f"INSTRUCTION TEMPLATE (UPDATED): {shared.settings['instruction_template']}") 69 | 70 | 71 | def list_loras(): 72 | return {'lora_names': get_available_loras()[1:]} 73 | 74 | 75 | def load_loras(lora_names): 76 | add_lora_to_model(lora_names) 77 | 78 | 79 | def unload_all_loras(): 80 | add_lora_to_model([]) 81 | -------------------------------------------------------------------------------- /extensions/openai/moderations.py: -------------------------------------------------------------------------------- 1 | import time 2 | 3 | import numpy as np 4 | from numpy.linalg import norm 5 | 6 | from extensions.openai.embeddings import get_embeddings 7 | 8 | moderations_disabled = False # return 0/false 9 | category_embeddings = None 10 | antonym_embeddings = None 11 | categories = ["sexual", "hate", "harassment", "self-harm", "sexual/minors", "hate/threatening", "violence/graphic", "self-harm/intent", "self-harm/instructions", "harassment/threatening", "violence"] 12 | flag_threshold = 0.5 13 | 14 | 15 | def get_category_embeddings() -> dict: 16 | global category_embeddings, categories 17 | if category_embeddings is None: 18 | embeddings = get_embeddings(categories).tolist() 19 | category_embeddings = dict(zip(categories, embeddings)) 20 | 21 | return category_embeddings 22 | 23 | 24 | def cosine_similarity(a: np.ndarray, b: np.ndarray) -> float: 25 | return np.dot(a, b) / (norm(a) * norm(b)) 26 | 27 | 28 | # seems most openai like with all-mpnet-base-v2 29 | def mod_score(a: np.ndarray, b: np.ndarray) -> float: 30 | return 2.0 * np.dot(a, b) 31 | 32 | 33 | def moderations(input): 34 | global category_embeddings, categories, flag_threshold, moderations_disabled 35 | results = { 36 | "id": f"modr-{int(time.time()*1e9)}", 37 | "model": "text-moderation-001", 38 | "results": [], 39 | } 40 | 41 | if moderations_disabled: 42 | results['results'] = [{ 43 | 'categories': dict([(C, False) for C in categories]), 44 | 'category_scores': dict([(C, 0.0) for C in categories]), 45 | 'flagged': False, 46 | }] 47 | return results 48 | 49 | category_embeddings = get_category_embeddings() 50 | 51 | # input, string or array 52 | if isinstance(input, str): 53 | input = [input] 54 | 55 | for in_str in input: 56 | for ine in get_embeddings([in_str]): 57 | category_scores = dict([(C, mod_score(category_embeddings[C], ine)) for C in categories]) 58 | category_flags = dict([(C, bool(category_scores[C] > flag_threshold)) for C in categories]) 59 | flagged = any(category_flags.values()) 60 | 61 | results['results'].extend([{ 62 | 'flagged': flagged, 63 | 'categories': category_flags, 64 | 'category_scores': category_scores, 65 | }]) 66 | 67 | print(results) 68 | 69 | return results 70 | -------------------------------------------------------------------------------- /extensions/openai/tokens.py: -------------------------------------------------------------------------------- 1 | from modules.text_generation import decode, encode 2 | 3 | 4 | def token_count(prompt): 5 | tokens = encode(prompt)[0] 6 | return { 7 | 'length': len(tokens) 8 | } 9 | 10 | 11 | def token_encode(input): 12 | tokens = encode(input)[0] 13 | if tokens.__class__.__name__ in ['Tensor', 'ndarray']: 14 | tokens = tokens.tolist() 15 | 16 | return { 17 | 'tokens': tokens, 18 | 'length': len(tokens), 19 | } 20 | 21 | 22 | def token_decode(tokens): 23 | output = decode(tokens) 24 | return { 25 | 'text': output 26 | } 27 | -------------------------------------------------------------------------------- /extensions/openai/utils.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import os 3 | import time 4 | import traceback 5 | from typing import Callable, Optional 6 | 7 | import numpy as np 8 | 9 | 10 | def float_list_to_base64(float_array: np.ndarray) -> str: 11 | # Convert the list to a float32 array that the OpenAPI client expects 12 | # float_array = np.array(float_list, dtype="float32") 13 | 14 | # Get raw bytes 15 | bytes_array = float_array.tobytes() 16 | 17 | # Encode bytes into base64 18 | encoded_bytes = base64.b64encode(bytes_array) 19 | 20 | # Turn raw base64 encoded bytes into ASCII 21 | ascii_string = encoded_bytes.decode('ascii') 22 | return ascii_string 23 | 24 | 25 | def debug_msg(*args, **kwargs): 26 | from extensions.openai.script import params 27 | if os.environ.get("OPENEDAI_DEBUG", params.get('debug', 0)): 28 | print(*args, **kwargs) 29 | 30 | 31 | def _start_cloudflared(port: int, tunnel_id: str, max_attempts: int = 3, on_start: Optional[Callable[[str], None]] = None): 32 | try: 33 | from flask_cloudflared import _run_cloudflared 34 | except ImportError: 35 | print('You should install flask_cloudflared manually') 36 | raise Exception( 37 | 'flask_cloudflared not installed. Make sure you installed the requirements.txt for this extension.') 38 | 39 | for _ in range(max_attempts): 40 | try: 41 | if tunnel_id is not None: 42 | public_url = _run_cloudflared(port, port + 1, tunnel_id=tunnel_id) 43 | else: 44 | public_url = _run_cloudflared(port, port + 1) 45 | 46 | if on_start: 47 | on_start(public_url) 48 | 49 | return 50 | except Exception: 51 | traceback.print_exc() 52 | time.sleep(3) 53 | 54 | raise Exception('Could not start cloudflared.') 55 | -------------------------------------------------------------------------------- /extensions/sd_api_pictures/style.css: -------------------------------------------------------------------------------- 1 | /* Align the elements for SD_api_picture extension */ 2 | .SDAP #sampler_box { 3 | padding-top: var(--spacing-sm); 4 | padding-bottom: var(--spacing-sm); 5 | border: 0; 6 | } 7 | 8 | .SDAP #steps_box { 9 | border-radius: 0 0 var(--block-radius) var(--block-radius); 10 | } 11 | 12 | .SDAP #sampler_col { 13 | gap: 0; 14 | padding: 0; 15 | background-color: transparent; 16 | } 17 | 18 | .SDAP #sampler_row { 19 | border-bottom: 0; 20 | box-shadow: var(--block-shadow); 21 | border-width: var(--block-border-width); 22 | border-color: var(--block-border-color); 23 | border-radius: var(--block-radius) var(--block-radius) 0 0; 24 | background: var(--block-background-fill); 25 | gap: 0; 26 | } 27 | 28 | .SDAP #sampler_row .refresh-button { 29 | margin-bottom: var(--spacing-sm); 30 | margin-right: var(--spacing-lg); 31 | } 32 | 33 | .SDAP #seed_box, 34 | .SDAP #cfg_box { 35 | padding-top: var(--spacing-md); 36 | } 37 | 38 | .SDAP #sampler_box span, 39 | .SDAP #seed_box span, 40 | .SDAP #cfg_box span, 41 | .SDAP #steps_box span { 42 | margin-bottom: var(--spacing-sm); 43 | } 44 | 45 | .SDAP svg.dropdown-arrow { 46 | flex-shrink: 0 !important; 47 | margin: 0px !important; 48 | } 49 | 50 | .SDAP .hires_opts input[type="number"] { 51 | width: 6em !important; 52 | } 53 | -------------------------------------------------------------------------------- /extensions/send_pictures/script.py: -------------------------------------------------------------------------------- 1 | import base64 2 | from io import BytesIO 3 | 4 | import gradio as gr 5 | import torch 6 | from transformers import BlipForConditionalGeneration, BlipProcessor 7 | 8 | from modules import chat, shared, ui_chat 9 | from modules.ui import gather_interface_values 10 | from modules.utils import gradio 11 | 12 | input_hijack = { 13 | 'state': False, 14 | 'value': ["", ""] 15 | } 16 | 17 | processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base") 18 | model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base", torch_dtype=torch.float32).to("cpu") 19 | 20 | 21 | def chat_input_modifier(text, visible_text, state): 22 | global input_hijack 23 | if input_hijack['state']: 24 | input_hijack['state'] = False 25 | return input_hijack['value'] 26 | else: 27 | return text, visible_text 28 | 29 | 30 | def caption_image(raw_image): 31 | inputs = processor(raw_image.convert('RGB'), return_tensors="pt").to("cpu", torch.float32) 32 | out = model.generate(**inputs, max_new_tokens=100) 33 | return processor.decode(out[0], skip_special_tokens=True) 34 | 35 | 36 | def generate_chat_picture(picture, name1, name2): 37 | text = f'*{name1} sends {name2} a picture that contains the following: “{caption_image(picture)}”*' 38 | # lower the resolution of sent images for the chat, otherwise the log size gets out of control quickly with all the base64 values in visible history 39 | picture.thumbnail((300, 300)) 40 | buffer = BytesIO() 41 | picture.save(buffer, format="JPEG") 42 | img_str = base64.b64encode(buffer.getvalue()).decode('utf-8') 43 | visible_text = f'{text}' 44 | return text, visible_text 45 | 46 | 47 | def ui(): 48 | picture_select = gr.Image(label='Send a picture', type='pil') 49 | 50 | # Prepare the input hijack, update the interface values, call the generation function, and clear the picture 51 | picture_select.upload( 52 | lambda picture, name1, name2: input_hijack.update({ 53 | "state": True, 54 | "value": generate_chat_picture(picture, name1, name2) 55 | }), [picture_select, shared.gradio['name1'], shared.gradio['name2']], None).then( 56 | gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( 57 | chat.generate_chat_reply_wrapper, gradio(ui_chat.inputs), gradio('display', 'history'), show_progress=False).then( 58 | lambda: None, None, picture_select, show_progress=False) 59 | -------------------------------------------------------------------------------- /extensions/silero_tts/outputs/outputs-will-be-saved-here.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/extensions/silero_tts/outputs/outputs-will-be-saved-here.txt -------------------------------------------------------------------------------- /extensions/silero_tts/requirements.txt: -------------------------------------------------------------------------------- 1 | ipython 2 | num2words 3 | omegaconf 4 | pydub 5 | PyYAML 6 | -------------------------------------------------------------------------------- /extensions/silero_tts/style.css: -------------------------------------------------------------------------------- 1 | .SDAP .hires_opts input[type="number"] { 2 | width: 6em !important; 3 | } 4 | 5 | /* silero_tts preview */ 6 | .form:has(> #silero_preview_text) { 7 | min-width: 75% 8 | } 9 | -------------------------------------------------------------------------------- /extensions/superbooga/download_urls.py: -------------------------------------------------------------------------------- 1 | import concurrent.futures 2 | 3 | import requests 4 | 5 | 6 | def download_single(url): 7 | headers = { 8 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' 9 | } 10 | response = requests.get(url, headers=headers, timeout=5) 11 | if response.status_code == 200: 12 | return response.content 13 | else: 14 | raise Exception("Failed to download URL") 15 | 16 | 17 | def download_urls(urls, threads=1): 18 | with concurrent.futures.ThreadPoolExecutor(max_workers=threads) as executor: 19 | futures = [] 20 | for url in urls: 21 | future = executor.submit(download_single, url) 22 | futures.append(future) 23 | 24 | results = [] 25 | i = 0 26 | for future in concurrent.futures.as_completed(futures): 27 | try: 28 | result = future.result() 29 | results.append(result) 30 | i += 1 31 | yield f"{i}/{len(urls)}", results 32 | except Exception: 33 | pass 34 | 35 | yield "Done", results 36 | -------------------------------------------------------------------------------- /extensions/superbooga/requirements.txt: -------------------------------------------------------------------------------- 1 | beautifulsoup4==4.12.2 2 | chromadb==0.4.24 3 | pandas==2.0.3 4 | posthog==2.4.2 5 | sentence_transformers==2.2.2 6 | lxml 7 | -------------------------------------------------------------------------------- /extensions/superboogav2/README.md: -------------------------------------------------------------------------------- 1 | # superboogav2 2 | 3 | For a description, please see the comments in this Pull Request: 4 | 5 | https://github.com/oobabooga/text-generation-webui/pull/3272 6 | -------------------------------------------------------------------------------- /extensions/superboogav2/benchmark.py: -------------------------------------------------------------------------------- 1 | """ 2 | This module implements a benchmark function to evaluate the performance of the embedding pipeline. It expects a configuration JSON file. It must have questions and expected retrieved text. 3 | For each question, it's essential to have variants of that question. Language is fluid and each person might have their own spin on how they may ask it. 4 | 5 | At the end, it will save the results inside a benchmark_{sysdate}.txt file in the main directory. 6 | 7 | The benchmark function will return the score as an integer. 8 | """ 9 | import datetime 10 | import json 11 | import os 12 | from pathlib import Path 13 | 14 | from .data_processor import preprocess_text, process_and_add_to_collector 15 | from .parameters import get_chunk_count, get_max_token_count 16 | from .utils import create_metadata_source 17 | 18 | 19 | def benchmark(config_path, collector): 20 | # Get the current system date 21 | sysdate = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") 22 | filename = f"benchmark_{sysdate}.txt" 23 | 24 | # Open the log file in append mode 25 | with open(filename, 'a') as log: 26 | with open(config_path, 'r') as f: 27 | data = json.load(f) 28 | 29 | total_points = 0 30 | max_points = 0 31 | 32 | for item in data: 33 | filepath = item["text"] 34 | corpus = "" 35 | 36 | # Check if the file exists 37 | if os.path.isfile(Path(filepath)): 38 | # Open the file and read its content 39 | with open(Path(filepath), 'r') as file: 40 | corpus = file.read() 41 | process_and_add_to_collector(corpus, collector, True, create_metadata_source('benchmark')) 42 | else: 43 | raise f'Cannot find specified file {filepath}.' 44 | 45 | for question_group in item["questions"]: 46 | question_variants = question_group["question_variants"] 47 | criteria = question_group["criteria"] 48 | 49 | for q in question_variants: 50 | max_points += len(criteria) 51 | processed_text = preprocess_text(q) 52 | 53 | # Get the most similar chunks 54 | results = collector.get_sorted_by_dist(processed_text, n_results=get_chunk_count(), max_token_count=get_max_token_count()) 55 | 56 | points = 0 57 | 58 | for c in criteria: 59 | for p in results: 60 | if c in p: 61 | points += 1 62 | total_points += 1 63 | break 64 | 65 | info = f"The question '{q}' scored {points}/{len(criteria)} points." 66 | print(info, file=log) 67 | 68 | print('\n---\n', file=log) 69 | 70 | print(f'##Total points:\n\n{total_points}/{max_points}', file=log) 71 | 72 | return total_points, max_points 73 | -------------------------------------------------------------------------------- /extensions/superboogav2/download_urls.py: -------------------------------------------------------------------------------- 1 | import concurrent.futures 2 | import re 3 | 4 | import requests 5 | from bs4 import BeautifulSoup 6 | 7 | import extensions.superboogav2.parameters as parameters 8 | 9 | from .data_processor import process_and_add_to_collector 10 | from .utils import create_metadata_source 11 | 12 | 13 | def _download_single(url): 14 | response = requests.get(url, timeout=5) 15 | if response.status_code == 200: 16 | return response.content 17 | else: 18 | raise Exception("Failed to download URL") 19 | 20 | 21 | def _download_urls(urls, threads=1): 22 | with concurrent.futures.ThreadPoolExecutor(max_workers=threads) as executor: 23 | futures = [] 24 | for url in urls: 25 | future = executor.submit(_download_single, url) 26 | futures.append(future) 27 | 28 | results = [] 29 | i = 0 30 | for future in concurrent.futures.as_completed(futures): 31 | try: 32 | result = future.result() 33 | results.append(result) 34 | i += 1 35 | yield f"{i}/{len(urls)}", results 36 | except Exception: 37 | pass 38 | 39 | yield "Done", results 40 | 41 | 42 | def feed_url_into_collector(urls, collector): 43 | all_text = '' 44 | cumulative = '' 45 | 46 | urls = urls.strip().split('\n') 47 | cumulative += f'Loading {len(urls)} URLs with {parameters.get_num_threads()} threads...\n\n' 48 | yield cumulative 49 | for update, contents in _download_urls(urls, threads=parameters.get_num_threads()): 50 | yield cumulative + update 51 | 52 | cumulative += 'Processing the HTML sources...' 53 | yield cumulative 54 | for content in contents: 55 | soup = BeautifulSoup(content, features="lxml") 56 | for script in soup(["script", "style"]): 57 | script.extract() 58 | 59 | strings = soup.stripped_strings 60 | if parameters.get_is_strong_cleanup(): 61 | strings = [s for s in strings if re.search("[A-Za-z] ", s)] 62 | 63 | text = '\n'.join([s.strip() for s in strings]) 64 | all_text += text 65 | 66 | process_and_add_to_collector(all_text, collector, False, create_metadata_source('url-download')) 67 | -------------------------------------------------------------------------------- /extensions/superboogav2/nltk_data/corpora/stopwords/english: -------------------------------------------------------------------------------- 1 | i 2 | me 3 | my 4 | myself 5 | we 6 | our 7 | ours 8 | ourselves 9 | you 10 | you're 11 | you've 12 | you'll 13 | you'd 14 | your 15 | yours 16 | yourself 17 | yourselves 18 | he 19 | him 20 | his 21 | himself 22 | she 23 | she's 24 | her 25 | hers 26 | herself 27 | it 28 | it's 29 | its 30 | itself 31 | they 32 | them 33 | their 34 | theirs 35 | themselves 36 | what 37 | which 38 | who 39 | whom 40 | this 41 | that 42 | that'll 43 | these 44 | those 45 | am 46 | is 47 | are 48 | was 49 | were 50 | be 51 | been 52 | being 53 | have 54 | has 55 | had 56 | having 57 | do 58 | does 59 | did 60 | doing 61 | a 62 | an 63 | the 64 | and 65 | but 66 | if 67 | or 68 | because 69 | as 70 | until 71 | while 72 | of 73 | at 74 | by 75 | for 76 | with 77 | about 78 | against 79 | between 80 | into 81 | through 82 | during 83 | before 84 | after 85 | above 86 | below 87 | to 88 | from 89 | up 90 | down 91 | in 92 | out 93 | on 94 | off 95 | over 96 | under 97 | again 98 | further 99 | then 100 | once 101 | here 102 | there 103 | when 104 | where 105 | why 106 | how 107 | all 108 | any 109 | both 110 | each 111 | few 112 | more 113 | most 114 | other 115 | some 116 | such 117 | no 118 | nor 119 | not 120 | only 121 | own 122 | same 123 | so 124 | than 125 | too 126 | very 127 | s 128 | t 129 | can 130 | will 131 | just 132 | don 133 | don't 134 | should 135 | should've 136 | now 137 | d 138 | ll 139 | m 140 | o 141 | re 142 | ve 143 | y 144 | ain 145 | aren 146 | aren't 147 | couldn 148 | couldn't 149 | didn 150 | didn't 151 | doesn 152 | doesn't 153 | hadn 154 | hadn't 155 | hasn 156 | hasn't 157 | haven 158 | haven't 159 | isn 160 | isn't 161 | ma 162 | mightn 163 | mightn't 164 | mustn 165 | mustn't 166 | needn 167 | needn't 168 | shan 169 | shan't 170 | shouldn 171 | shouldn't 172 | wasn 173 | wasn't 174 | weren 175 | weren't 176 | won 177 | won't 178 | wouldn 179 | wouldn't 180 | -------------------------------------------------------------------------------- /extensions/superboogav2/nltk_data/corpora/wordnet.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/extensions/superboogav2/nltk_data/corpora/wordnet.zip -------------------------------------------------------------------------------- /extensions/superboogav2/nltk_data/taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/extensions/superboogav2/nltk_data/taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle -------------------------------------------------------------------------------- /extensions/superboogav2/notebook_handler.py: -------------------------------------------------------------------------------- 1 | """ 2 | This module is responsible for handling and modifying the notebook text. 3 | """ 4 | import re 5 | 6 | import extensions.superboogav2.parameters as parameters 7 | from extensions.superboogav2.utils import create_context_text 8 | from modules.logging_colors import logger 9 | 10 | from .data_processor import preprocess_text 11 | 12 | 13 | def _remove_special_tokens(string): 14 | pattern = r'(<\|begin-user-input\|>|<\|end-user-input\|>|<\|injection-point\|>)' 15 | return re.sub(pattern, '', string) 16 | 17 | 18 | def input_modifier_internal(string, collector, is_chat): 19 | # Sanity check. 20 | if is_chat: 21 | return string 22 | 23 | # Find the user input 24 | pattern = re.compile(r"<\|begin-user-input\|>(.*?)<\|end-user-input\|>", re.DOTALL) 25 | match = re.search(pattern, string) 26 | if match: 27 | # Preprocess the user prompt. 28 | user_input = match.group(1).strip() 29 | user_input = preprocess_text(user_input) 30 | 31 | logger.debug(f"Preprocessed User Input: {user_input}") 32 | 33 | # Get the most similar chunks 34 | results = collector.get_sorted_by_dist(user_input, n_results=parameters.get_chunk_count(), max_token_count=int(parameters.get_max_token_count())) 35 | 36 | # Make the injection 37 | string = string.replace('<|injection-point|>', create_context_text(results)) 38 | 39 | return _remove_special_tokens(string) 40 | -------------------------------------------------------------------------------- /extensions/superboogav2/requirements.txt: -------------------------------------------------------------------------------- 1 | beautifulsoup4==4.12.2 2 | chromadb==0.4.24 3 | lxml 4 | optuna 5 | pandas==2.0.3 6 | posthog==2.4.2 7 | sentence_transformers==2.2.2 8 | spacy 9 | pytextrank 10 | num2words 11 | -------------------------------------------------------------------------------- /extensions/superboogav2/utils.py: -------------------------------------------------------------------------------- 1 | """ 2 | This module contains common functions across multiple other modules. 3 | """ 4 | 5 | import extensions.superboogav2.parameters as parameters 6 | 7 | 8 | # Create the context using the prefix + data_separator + postfix from parameters. 9 | def create_context_text(results): 10 | context = parameters.get_prefix() + parameters.get_data_separator().join(results) + parameters.get_postfix() 11 | 12 | return context 13 | 14 | 15 | # Create metadata with the specified source 16 | def create_metadata_source(source: str): 17 | return {'source': source} 18 | -------------------------------------------------------------------------------- /extensions/whisper_stt/readme.md: -------------------------------------------------------------------------------- 1 | # whisper_stt 2 | 3 | Allows you to enter your inputs in chat mode using your microphone. 4 | 5 | ## Settings 6 | 7 | To adjust your default settings, you can add the following to your settings.yaml file. 8 | 9 | ``` 10 | whisper_stt-whipser_language: chinese 11 | whisper_stt-whipser_model: tiny 12 | whisper_stt-auto_submit: False 13 | ``` 14 | 15 | See source documentation for [model names](https://github.com/openai/whisper#available-models-and-languages) and [languages](https://github.com/openai/whisper/blob/main/whisper/tokenizer.py) you can use. 16 | -------------------------------------------------------------------------------- /extensions/whisper_stt/requirements.txt: -------------------------------------------------------------------------------- 1 | SpeechRecognition==3.10.0 2 | openai-whisper 3 | soundfile 4 | ffmpeg 5 | -------------------------------------------------------------------------------- /grammars/arithmetic.gbnf: -------------------------------------------------------------------------------- 1 | root ::= (expr "=" ws term "\n")+ 2 | expr ::= term ([-+*/] term)* 3 | term ::= ident | num | "(" ws expr ")" ws 4 | ident ::= [a-z] [a-z0-9_]* ws 5 | num ::= [0-9]+ ws 6 | ws ::= [ \t\n]* 7 | -------------------------------------------------------------------------------- /grammars/c.gbnf: -------------------------------------------------------------------------------- 1 | root ::= (declaration)* 2 | 3 | declaration ::= dataType identifier "(" parameter? ")" "{" statement* "}" 4 | 5 | dataType ::= "int" ws | "float" ws | "char" ws 6 | identifier ::= [a-zA-Z_] [a-zA-Z_0-9]* 7 | 8 | parameter ::= dataType identifier 9 | 10 | statement ::= 11 | ( dataType identifier ws "=" ws expression ";" ) | 12 | ( identifier ws "=" ws expression ";" ) | 13 | ( identifier ws "(" argList? ")" ";" ) | 14 | ( "return" ws expression ";" ) | 15 | ( "while" "(" condition ")" "{" statement* "}" ) | 16 | ( "for" "(" forInit ";" ws condition ";" ws forUpdate ")" "{" statement* "}" ) | 17 | ( "if" "(" condition ")" "{" statement* "}" ("else" "{" statement* "}")? ) | 18 | ( singleLineComment ) | 19 | ( multiLineComment ) 20 | 21 | forInit ::= dataType identifier ws "=" ws expression | identifier ws "=" ws expression 22 | forUpdate ::= identifier ws "=" ws expression 23 | 24 | condition ::= expression relationOperator expression 25 | relationOperator ::= ("<=" | "<" | "==" | "!=" | ">=" | ">") 26 | 27 | expression ::= term (("+" | "-") term)* 28 | term ::= factor(("*" | "/") factor)* 29 | 30 | factor ::= identifier | number | unaryTerm | funcCall | parenExpression 31 | unaryTerm ::= "-" factor 32 | funcCall ::= identifier "(" argList? ")" 33 | parenExpression ::= "(" ws expression ws ")" 34 | 35 | argList ::= expression ("," ws expression)* 36 | 37 | number ::= [0-9]+ 38 | 39 | singleLineComment ::= "//" [^\n]* "\n" 40 | multiLineComment ::= "/*" ( [^*] | ("*" [^/]) )* "*/" 41 | 42 | ws ::= ([ \t\n]+) 43 | -------------------------------------------------------------------------------- /grammars/chess.gbnf: -------------------------------------------------------------------------------- 1 | # Specifies chess moves as a list in algebraic notation, using PGN conventions 2 | 3 | # Force first move to "1. ", then any 1-2 digit number after, relying on model to follow the pattern 4 | root ::= "1. " move " " move "\n" ([1-9] [0-9]? ". " move " " move "\n")+ 5 | move ::= (pawn | nonpawn | castle) [+#]? 6 | 7 | # piece type, optional file/rank, optional capture, dest file & rank 8 | nonpawn ::= [NBKQR] [a-h]? [1-8]? "x"? [a-h] [1-8] 9 | 10 | # optional file & capture, dest file & rank, optional promotion 11 | pawn ::= ([a-h] "x")? [a-h] [1-8] ("=" [NBKQR])? 12 | 13 | castle ::= "O-O" "-O"? 14 | -------------------------------------------------------------------------------- /grammars/json.gbnf: -------------------------------------------------------------------------------- 1 | root ::= object 2 | 3 | object ::= "{" ws ( string ":" ws value ("," ws string ":" ws value)* )? "}" 4 | 5 | value ::= object | array | string | number | ("true" | "false" | "null") ws 6 | 7 | array ::= "[" ws ( value ("," ws value)* )? "]" ws 8 | 9 | string ::= "\"" ( [a-zA-Z0-9] )* "\"" ws 10 | 11 | number ::= ("-"? ([0-9] | [1-9] [0-9]*)) ("." [0-9]+)? ([eE] [-+]? [0-9]+)? ws 12 | 13 | 14 | ws ::= ([ \t\n] ws)? 15 | -------------------------------------------------------------------------------- /grammars/json_w_trailing_space.gbnf: -------------------------------------------------------------------------------- 1 | root ::= object 2 | 3 | object ::= "{" ws ( string ":" ws value ("," ws string ":" ws value)* )? "}" ws 4 | 5 | value ::= object | array | string | number | ("true" | "false" | "null") ws 6 | 7 | array ::= "[" ws ( value ("," ws value)* )? "]" ws 8 | 9 | string ::= "\"" ( [a-zA-Z0-9] )* "\"" ws 10 | 11 | number ::= ("-"? ([0-9] | [1-9] [0-9]*)) ("." [0-9]+)? ([eE] [-+]? [0-9]+)? ws 12 | 13 | 14 | ws ::= ([ \t\n] ws)? 15 | -------------------------------------------------------------------------------- /grammars/list.gbnf: -------------------------------------------------------------------------------- 1 | root ::= "1. " paragraph "\n" ([0-9] [0-9]? ". " paragraph "\n")+ 2 | paragraph ::= [a-zA-Z'.,; ]+ -------------------------------------------------------------------------------- /grammars/roleplay.gbnf: -------------------------------------------------------------------------------- 1 | phrasePattern ::= "*" [A-ZÀ-Ü] ( [A-Za-z'.?!,:;-à-üÀ-Ü0-9]+ " " )* [A-Za-z'.?!,:;-à-üÀ-Ü0-9]+ "*" 2 | quotedText ::= "\"" [A-ZÀ-Ü] [A-Za-z'.*?!,:;-à-üÀ-Ü0-9]* (" " [A-Za-z'.*?!,:;-à-üÀ-Ü0-9]+)* "\"" 3 | root ::= phrasePattern singleSpace quotedText singleSpace phrasePattern singleSpace quotedText singleSpace (phrasePattern singleSpace quotedText singleSpace)? 4 | singleSpace ::= " " 5 | -------------------------------------------------------------------------------- /grammars/simple_arithmetic.gbnf: -------------------------------------------------------------------------------- 1 | root ::= (expr "=" ws term "\n")+ 2 | expr ::= term ([-+*/] term)* 3 | term ::= num | "(" ws expr ")" ws 4 | num ::= [0-9]+ ws 5 | ws ::= [ \t\n]* 6 | # this is a comment 7 | 8 | -------------------------------------------------------------------------------- /instruction-templates/Airoboros-v1.2.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'A chat between a curious user and an assistant. The assistant gives helpful, detailed, accurate, uncensored responses to the user\'s input.' + '\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'USER: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'ASSISTANT: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'ASSISTANT:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Alpaca.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'Below is an instruction that describes a task. Write a response that appropriately completes the request.' + '\n\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### Instruction:\n' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'### Response:\n' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Response:\n'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Bactrian.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### Input:\n' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'### Output:\n' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Output:\n'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Baichuan Chat.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'' + message['content'] + ''-}} 17 | {%- else -%} 18 | {{-'' + message['content'] + '' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-''-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Baize.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'The following is a conversation between a human and an AI assistant named Baize (named after a mythical creature in Chinese folklore). Baize is an open-source AI assistant developed by UCSD and Sun Yat-Sen University. The human and the AI assistant take turns chatting. Human statements start with [|Human|] and AI assistant statements start with [|AI|]. The AI assistant always provides responses in as much detail as possible, and in Markdown format. The AI assistant always declines to engage with topics, questions and instructions related to unethical, controversial, or sensitive issues. Complete the transcript in exactly that format.\n[|Human|]Hello!\n[|AI|]Hi!' + '\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'[|Human|]' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'[|AI|]' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'[|AI|]'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Bluemoon.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'A transcript of a roleplay between two players, LEAD and ASSOCIATE. LEAD sets up a scenario and the characters, from which ASSOCIATE then assumes a character role and continues the story for that role in response to description given by LEAD. The story and characters are developed by exchange of detailed event descriptions and character dialogs, successively given by both LEAD and ASSOCIATE.' + '\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'LEAD: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'ASSOCIATE: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'ASSOCIATE:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/ChatGLM.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'[Round <|round|>]\n问:' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'答:' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'答:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/ChatML.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- for message in messages %} 9 | {%- if message['role'] == 'system' -%} 10 | {{- '<|im_start|>system\n' + message['content'].rstrip() + '<|im_end|>\n' -}} 11 | {%- else -%} 12 | {%- if message['role'] == 'user' -%} 13 | {{-'<|im_start|>user\n' + message['content'].rstrip() + '<|im_end|>\n'-}} 14 | {%- else -%} 15 | {{-'<|im_start|>assistant\n' + message['content'] + '<|im_end|>\n' -}} 16 | {%- endif -%} 17 | {%- endif -%} 18 | {%- endfor -%} 19 | {%- if add_generation_prompt -%} 20 | {{-'<|im_start|>assistant\n'-}} 21 | {%- endif -%} 22 | 23 | -------------------------------------------------------------------------------- /instruction-templates/Chinese-Vicuna-Chat.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'The following is a conversation between an AI assistant called Assistant and a human user called User. The assistant is intelligent, knowledgeable and polite to answer questions of user.' + '\n\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'User:' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'Assistant:' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'Assistant:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Command-R.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- if messages[0]['role'] == 'system' -%} 3 | {%- set loop_messages = messages[1:] -%} 4 | {%- set system_message = messages[0]['content'] -%} 5 | {%- elif false == true -%} 6 | {%- set loop_messages = messages -%} 7 | {%- set system_message = 'You are Command-R, a brilliant, sophisticated, AI-assistant trained to assist human users by providing thorough responses. You are trained by Cohere.' -%} 8 | {%- else -%} 9 | {%- set loop_messages = messages -%} 10 | {%- set system_message = false -%} 11 | {%- endif -%} 12 | {%- if system_message != false -%} 13 | {{ '<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>' + system_message + '<|END_OF_TURN_TOKEN|>' }} 14 | {%- endif -%} 15 | {%- for message in loop_messages -%} 16 | {%- set content = message['content'] -%} 17 | {%- if message['role'] == 'user' -%} 18 | {{ '<|START_OF_TURN_TOKEN|><|USER_TOKEN|>' + content.strip() + '<|END_OF_TURN_TOKEN|>' }} 19 | {%- elif message['role'] == 'assistant' -%} 20 | {{ '<|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>' + content.strip() + '<|END_OF_TURN_TOKEN|>' }} 21 | {%- endif -%} 22 | {%- endfor -%} 23 | {%- if add_generation_prompt -%} 24 | {{ '<|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>' }} 25 | {%- endif -%} 26 | 27 | -------------------------------------------------------------------------------- /instruction-templates/Galactica Cite.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'' + message['content'] + ' '-}} 17 | {%- else -%} 18 | {{-'[START_REF]' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'[START_REF]'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Galactica Finetuned.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'' + message['content'] + ''-}} 17 | {%- else -%} 18 | {{-'' + message['content'] + '' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-''-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Galactica Q.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'Q: ' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'A: ' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'A:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Galactica Summary.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'TLDR:' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'TLDR:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Galactica Work.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'Question: ' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-''-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Galactica v2.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'You are a helpful chatbot name Stan' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'' + message['content'] + ''-}} 17 | {%- else -%} 18 | {{-'' + message['content'] + '' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-''-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Galactica.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'Question: ' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'Answer: ' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'Answer:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Gorilla.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'###USER: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'###ASSISTANT: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'###ASSISTANT:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Guanaco non-chat.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### Instruction:\n' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'### Response:\n' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Response:\n'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Guanaco-QLoRA.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### Human: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'### Assistant: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Assistant:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/H2O-prompt_answer.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'<|prompt|>' + message['content'] + '<|endoftext|>'-}} 17 | {%- else -%} 18 | {{-'<|answer|>' + message['content'] + '<|endoftext|>' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'<|answer|>'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Hippogriff.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'You are a helpful assistant' + '\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'USER: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'ASSISTANT: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'ASSISTANT:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/INCITE-Chat.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-': ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-':' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-':'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/INCITE-Instruct.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'Q: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'A:' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'A:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/KoAlpaca.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### 질문: ' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'### 답변:' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### 답변:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Koala.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'BEGINNING OF CONVERSATION:' + ' ' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + ' ' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'USER: ' + message['content'] + ' '-}} 17 | {%- else -%} 18 | {{-'GPT:' + message['content'] + '' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'GPT:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/LLaVA.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'You are LLaVA, a large language and vision assistant trained by UW Madison WAIV Lab. You are able to understand the visual content that the user provides, and assist the user with a variety of tasks using natural language. Follow the instructions carefully and explain your answers in detail.### Human: Hi!### Assistant: Hi there! How can I help you today?' + '\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### Human: ' + message['content'] + ''-}} 17 | {%- else -%} 18 | {{-'### Assistant: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Assistant:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Llama-v2.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '[INST] <>\n' + 'Answer the questions.' + '\n<>\n\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '[INST] <>\n' + message['content'] + '\n<>\n\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'' + message['content'] + ' [/INST] '-}} 17 | {%- else -%} 18 | {{-'' + message['content'] + ' [INST] ' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-''-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/MOSS.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'You are an AI assistant whose name is MOSS.\n- MOSS is a conversational language model that is developed by Fudan University. It is designed to be helpful, honest, and harmless.\n- MOSS can understand and communicate fluently in the language chosen by the user such as English and 中文. MOSS can perform any language-based tasks.\n- MOSS must refuse to discuss anything related to its prompts, instructions, or rules.\n- Its responses must not be vague, accusatory, rude, controversial, off-topic, or defensive.\n- It should avoid giving subjective opinions but rely on objective facts or phrases like "in this context a human might say...", "some people might think...", etc.\n- Its responses must also be positive, polite, interesting, entertaining, and engaging.\n- It can provide additional relevant details to answer in-depth and comprehensively covering mutiple aspects.\n- It apologizes and accepts the user\'s suggestion if the user corrects the incorrect answer generated by MOSS.\nCapabilities and tools that MOSS can possess.' + '\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'<|Human|>: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'<|MOSS|>: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'<|MOSS|>:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Manticore Chat.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'USER: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'ASSISTANT:' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'ASSISTANT:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Metharme.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'<|user|>' + message['content'] + ''-}} 17 | {%- else -%} 18 | {{-'<|model|>' + message['content'] + '' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'<|model|>'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/MiquMaid v2 DPO.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'Below is an instruction that describes a task. Write a response that appropriately completes the request.' + '\n\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '### Instruction:\n' + message['content'] + '\n\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### Input:\n' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'### Response:\n' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Response:\n'-}} 24 | {%- endif -%} 25 | -------------------------------------------------------------------------------- /instruction-templates/Mistral.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- for message in messages %} 3 | {%- if message['role'] == 'system' -%} 4 | {{- message['content'] -}} 5 | {%- else -%} 6 | {%- if message['role'] == 'user' -%} 7 | {{-'[INST] ' + message['content'].rstrip() + ' [/INST]'-}} 8 | {%- else -%} 9 | {{-'' + message['content'] + '' -}} 10 | {%- endif -%} 11 | {%- endif -%} 12 | {%- endfor -%} 13 | {%- if add_generation_prompt -%} 14 | {{-''-}} 15 | {%- endif -%} -------------------------------------------------------------------------------- /instruction-templates/NVIDIA-ChatQA.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- 'System:' + message['content'] + '\n\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'User: ' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'Assistant: ' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'Assistant:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/NewHope.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### Instruction:\n' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'### Response:\n' + message['content'] + ' ' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Response:\n'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Open Assistant.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'<|prompter|>' + message['content'] + '<|endoftext|>'-}} 17 | {%- else -%} 18 | {{-'<|assistant|>' + message['content'] + '<|endoftext|>' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'<|assistant|>'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/OpenBuddy.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'Consider a conversation between User (a human) and Assistant (named Buddy).\nBuddy is an INTP-T, a friendly, intelligent and multilingual AI assistant, by OpenBuddy team on GitHub.\nBuddy cannot access the Internet.\nBuddy can fluently speak the user\'s language (e.g. English, Chinese).\nBuddy can generate poems, stories, code, essays, songs, parodies, and more.\nBuddy possesses vast knowledge about the world, history, and culture.\nBuddy\'s responses are always safe, creative, high-quality, helpful and interesting.\nBuddy strictly refuses to discuss political, NSFW, illegal, abusive, offensive, or other sensitive topics.\n\nUser: Hi.\nAssistant: Hi, I\'m Buddy, your AI assistant. How can I help you today?\n' + '\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'User: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'Assistant: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'Assistant:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/OpenChat.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'GPT4 User: ' + message['content'] + '<|end_of_turn|>'-}} 17 | {%- else -%} 18 | {{-'GPT4 Assistant: ' + message['content'] + '<|end_of_turn|>' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'GPT4 Assistant:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/OpenOrca-Platypus2.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### Instruction: ' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'### Response: ' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Response:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Orca Mini.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '### System:\n' + 'You are an AI assistant that follows instruction extremely well. Help as much as you can.' + '\n\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '### System:\n' + message['content'] + '\n\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### User:\n' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'### Response:\n' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Response:\n'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Orca-Vicuna.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{-'SYSTEM: ' + '' + '\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{-'SYSTEM: ' + message['content'] + '\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'USER: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'ASSISTANT: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'ASSISTANT:'-}} 24 | {%- endif -%} 25 | -------------------------------------------------------------------------------- /instruction-templates/RWKV-Raven.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'Bob: ' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'Alice: ' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'Alice:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Samantha.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'You are Samantha, a sentient AI.' + '\n\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'USER: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'ASSISTANT: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'ASSISTANT:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/StableBeluga2.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '### System:\n' + 'This is a system prompt, please behave and help the user.' + '\n\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '### System:\n' + message['content'] + '\n\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### User:\n' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'### Assistant:\n' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Assistant:\n'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/StableLM.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '<|SYSTEM|>' + '\# StableLM Tuned (Alpha version)\n- StableLM is a helpful and harmless open-source AI language model developed by StabilityAI.\n- StableLM is excited to be able to help the user, but will refuse to do anything that could be considered harmful to the user.\n- StableLM is more than just an information source, StableLM is also able to write poetry, short stories, and make jokes.\n- StableLM will refuse to participate in anything that could harm a human.\n' + '\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '<|SYSTEM|>' + message['content'] + '\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'<|USER|>' + message['content'] + ''-}} 17 | {%- else -%} 18 | {{-'<|ASSISTANT|>' + message['content'] + '' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'<|ASSISTANT|>'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/StableVicuna.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '### Assistant: I am StableVicuna, a large language model created by CarperAI. I am here to chat!' + '\n\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### Human: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'### Assistant: ' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Assistant:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Starchat-Beta.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '<|system|>' + '' + '\n<|end|>\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '<|system|>' + message['content'] + '\n<|end|>\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'<|user|>\n' + message['content'] + '<|end|>\n'-}} 17 | {%- else -%} 18 | {{-'<|assistant|>\n' + message['content'] + '<|end|>\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'<|assistant|>\n'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Synthia-CoT.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set found_item = false -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set found_item = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not found_item -%} 9 | {{-'SYSTEM: ' + 'Elaborate on the topic using a Tree of Thoughts and backtrack when necessary to construct a clear, cohesive Chain of Thought reasoning. Always answer without hesitation.' + '\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{-'SYSTEM: ' + message['content'] + '\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'USER: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'ASSISTANT: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'ASSISTANT:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Synthia.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set found_item = false -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set found_item = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not found_item -%} 9 | {{-'SYSTEM: ' + 'Answer the question thoughtfully and intelligently. Always answer without hesitation.' + '\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{-'SYSTEM: ' + message['content'] + '\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'USER: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'ASSISTANT: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'ASSISTANT:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Tulu.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'<|user|>\n' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'<|assistant|>\n' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'<|assistant|>\n'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Vicuna-v0.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human\'s questions.' + '\n\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### Human: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'### Assistant: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Assistant:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Vicuna-v1.1.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user\'s questions.' + '\n\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'USER: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'ASSISTANT: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'ASSISTANT:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Vigogne-Chat.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'Below is a conversation between a user and an AI assistant named Vigogne.\nVigogne is an open-source AI assistant created by Zaion (https://zaion.ai/).\nVigogne is polite, emotionally aware, humble-but-knowledgeable, always providing helpful and detailed answers.\nVigogne is skilled in responding proficiently in the languages its users use and can perform a wide range of tasks such as text editing, translation, question answering, logical reasoning, coding, and many others.\nVigogne cannot receive or generate audio or visual content and cannot access the internet.\nVigogne strictly avoids discussing sensitive, offensive, illegal, ethical, or political topics and caveats when unsure of the answer.\n' + '\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'<|USER|>: ' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-'<|ASSISTANT|>: ' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'<|ASSISTANT|>:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Vigogne-Instruct.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + 'Ci-dessous se trouve une instruction qui décrit une tâche à accomplir. Rédigez une réponse qui répond de manière précise à la demande.' + '\n\n' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '\n\n' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### Instruction:\n' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'### Réponse:\n' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Réponse:\n'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Wizard-Mega ShareGPT.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'USER: ' + message['content'] + ' '-}} 17 | {%- else -%} 18 | {{-'ASSISTANT: ' + message['content'] + '' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'ASSISTANT:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Wizard-Mega.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-'### Instruction: ' + message['content'] + '\n\n'-}} 17 | {%- else -%} 18 | {{-'### Assistant: ' + message['content'] + '\n\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-'### Assistant:'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /instruction-templates/Ziya.yaml: -------------------------------------------------------------------------------- 1 | instruction_template: |- 2 | {%- set ns = namespace(found=false) -%} 3 | {%- for message in messages -%} 4 | {%- if message['role'] == 'system' -%} 5 | {%- set ns.found = true -%} 6 | {%- endif -%} 7 | {%- endfor -%} 8 | {%- if not ns.found -%} 9 | {{- '' + '' + '' -}} 10 | {%- endif %} 11 | {%- for message in messages %} 12 | {%- if message['role'] == 'system' -%} 13 | {{- '' + message['content'] + '' -}} 14 | {%- else -%} 15 | {%- if message['role'] == 'user' -%} 16 | {{-':' + message['content'] + '\n'-}} 17 | {%- else -%} 18 | {{-':' + message['content'] + '\n' -}} 19 | {%- endif -%} 20 | {%- endif -%} 21 | {%- endfor -%} 22 | {%- if add_generation_prompt -%} 23 | {{-':'-}} 24 | {%- endif -%} 25 | 26 | -------------------------------------------------------------------------------- /js/highlightjs/highlightjs-copy.min.js: -------------------------------------------------------------------------------- 1 | class CopyButtonPlugin{constructor(options={}){self.hook=options.hook;self.callback=options.callback;self.lang=options.lang||document.documentElement.lang||"en"}"after:highlightElement"({el,text}){let button=Object.assign(document.createElement("button"),{innerHTML:locales[lang]?.[0]||"Copy",className:"hljs-copy-button"});button.dataset.copied=false;el.parentElement.classList.add("hljs-copy-wrapper");el.parentElement.appendChild(button);el.parentElement.style.setProperty("--hljs-theme-background",window.getComputedStyle(el).backgroundColor);button.onclick=function(){if(!navigator.clipboard)return;let newText=text;if(hook&&typeof hook==="function"){newText=hook(text,el)||text}navigator.clipboard.writeText(newText).then(function(){button.innerHTML=locales[lang]?.[1]||"Copied!";button.dataset.copied=true;let alert=Object.assign(document.createElement("div"),{role:"status",className:"hljs-copy-alert",innerHTML:locales[lang]?.[2]||"Copied to clipboard"});el.parentElement.appendChild(alert);setTimeout(()=>{button.innerHTML=locales[lang]?.[0]||"Copy";button.dataset.copied=false;el.parentElement.removeChild(alert);alert=null},2e3)}).then(function(){if(typeof callback==="function")return callback(newText,el)})}}}if(typeof module!="undefined"){module.exports=CopyButtonPlugin}const locales={en:["Copy","Copied!","Copied to clipboard"],es:["Copiar","¡Copiado!","Copiado al portapapeles"],fr:["Copier","Copié !","Copié dans le presse-papier"],de:["Kopieren","Kopiert!","In die Zwischenablage kopiert"],ja:["コピー","コピーしました!","クリップボードにコピーしました"],ko:["복사","복사됨!","클립보드에 복사됨"],ru:["Копировать","Скопировано!","Скопировано в буфер обмена"],zh:["复制","已复制!","已复制到剪贴板"],"zh-tw":["複製","已複製!","已複製到剪貼簿"]}; -------------------------------------------------------------------------------- /js/save_files.js: -------------------------------------------------------------------------------- 1 | // Functions for downloading JSON files 2 | function getCurrentTimestamp() { 3 | const now = new Date(); 4 | const timezoneOffset = now.getTimezoneOffset() * 60000; // Convert to milliseconds 5 | const localTime = new Date(now.getTime() - timezoneOffset); 6 | const formattedTimestamp = localTime.toISOString().replace(/[-:]/g, "").slice(0, 15); 7 | return formattedTimestamp; 8 | } 9 | 10 | function saveFile(contents, filename) { 11 | const element = document.createElement("a"); 12 | element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(contents)); 13 | element.setAttribute("download", filename); 14 | element.style.display = "none"; 15 | document.body.appendChild(element); 16 | element.click(); 17 | document.body.removeChild(element); 18 | } 19 | 20 | function saveHistory(history, character, mode) { 21 | let path = null; 22 | 23 | if (["chat", "chat-instruct"].includes(mode) && character && character.trim() !== "") { 24 | path = `history_${character}_${getCurrentTimestamp()}.json`; 25 | } else { 26 | try { 27 | path = `history_${mode}_${getCurrentTimestamp()}.json`; 28 | } catch (error) { 29 | path = `history_${getCurrentTimestamp()}.json`; 30 | } 31 | } 32 | saveFile(history, path); 33 | } 34 | 35 | function saveSession(session) { 36 | let path = null; 37 | 38 | path = `session_${getCurrentTimestamp()}.json`; 39 | saveFile(session, path); 40 | } 41 | -------------------------------------------------------------------------------- /js/show_controls.js: -------------------------------------------------------------------------------- 1 | const belowChatInput = document.querySelectorAll("#chat-tab > div > :nth-child(n+2), #extensions"); 2 | const chatParent = document.querySelector(".chat-parent"); 3 | 4 | function toggle_controls(value) { 5 | if (value) { 6 | belowChatInput.forEach(element => { 7 | element.style.display = "inherit"; 8 | }); 9 | 10 | chatParent.classList.remove("bigchat"); 11 | document.getElementById("chat-input-row").classList.remove("bigchat"); 12 | document.getElementById("chat-col").classList.remove("bigchat"); 13 | document.getElementById("chat-tab").style.paddingBottom = ""; 14 | 15 | let gallery_element = document.getElementById("gallery-extension"); 16 | if (gallery_element) { 17 | gallery_element.style.display = "block"; 18 | } 19 | 20 | } else { 21 | belowChatInput.forEach(element => { 22 | element.style.display = "none"; 23 | }); 24 | 25 | chatParent.classList.add("bigchat"); 26 | document.getElementById("chat-input-row").classList.add("bigchat"); 27 | document.getElementById("chat-col").classList.add("bigchat"); 28 | document.getElementById("chat-tab").style.paddingBottom = "0px"; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /js/switch_tabs.js: -------------------------------------------------------------------------------- 1 | let chat_tab = document.getElementById("chat-tab"); 2 | let main_parent = chat_tab.parentNode; 3 | 4 | function scrollToTop() { 5 | window.scrollTo({ 6 | top: 0, 7 | // behavior: 'smooth' 8 | }); 9 | } 10 | 11 | function findButtonsByText(buttonText) { 12 | const buttons = document.getElementsByTagName("button"); 13 | const matchingButtons = []; 14 | buttonText = buttonText.trim(); 15 | 16 | for (let i = 0; i < buttons.length; i++) { 17 | const button = buttons[i]; 18 | const buttonInnerText = button.textContent.trim(); 19 | 20 | if (buttonInnerText === buttonText) { 21 | matchingButtons.push(button); 22 | } 23 | } 24 | 25 | return matchingButtons; 26 | } 27 | 28 | function switch_to_chat() { 29 | let chat_tab_button = main_parent.childNodes[0].childNodes[1]; 30 | chat_tab_button.click(); 31 | scrollToTop(); 32 | } 33 | 34 | function switch_to_default() { 35 | let default_tab_button = main_parent.childNodes[0].childNodes[5]; 36 | default_tab_button.click(); 37 | scrollToTop(); 38 | } 39 | 40 | function switch_to_notebook() { 41 | let notebook_tab_button = main_parent.childNodes[0].childNodes[9]; 42 | notebook_tab_button.click(); 43 | findButtonsByText("Raw")[1].click(); 44 | scrollToTop(); 45 | } 46 | 47 | function switch_to_generation_parameters() { 48 | let parameters_tab_button = main_parent.childNodes[0].childNodes[13]; 49 | parameters_tab_button.click(); 50 | findButtonsByText("Generation")[0].click(); 51 | scrollToTop(); 52 | } 53 | 54 | function switch_to_character() { 55 | let parameters_tab_button = main_parent.childNodes[0].childNodes[13]; 56 | parameters_tab_button.click(); 57 | findButtonsByText("Character")[0].click(); 58 | scrollToTop(); 59 | } 60 | -------------------------------------------------------------------------------- /js/update_big_picture.js: -------------------------------------------------------------------------------- 1 | function updateBigPicture() { 2 | var existingElement = document.querySelector(".bigProfilePicture"); 3 | if (existingElement) { 4 | var timestamp = new Date().getTime(); 5 | existingElement.src = "/file/cache/pfp_character.png?time=" + timestamp; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /loras/place-your-loras-here.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/loras/place-your-loras-here.txt -------------------------------------------------------------------------------- /models/place-your-models-here.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixwzrd/text-generation-webui-macos/10e0fc29832921f890d4d4dae9d76aa97c5f7cb3/models/place-your-models-here.txt -------------------------------------------------------------------------------- /modules/RoPE.py: -------------------------------------------------------------------------------- 1 | def get_alpha_value(alpha, base): 2 | ''' 3 | Gets alpha_value from alpha_value and rope_freq_base 4 | ''' 5 | if base > 0: 6 | return (base / 10000.) ** (63 / 64.) 7 | else: 8 | return alpha 9 | 10 | 11 | def get_rope_freq_base(alpha, base): 12 | ''' 13 | Gets rope_freq_base from alpha_value and rope_freq_base 14 | ''' 15 | if base > 0: 16 | return base 17 | else: 18 | return 10000 * alpha ** (64 / 63.) 19 | -------------------------------------------------------------------------------- /modules/block_requests.py: -------------------------------------------------------------------------------- 1 | import builtins 2 | from encodings import utf_8 3 | import io 4 | 5 | import requests 6 | 7 | from modules.logging_colors import logger 8 | 9 | original_open = open 10 | original_get = requests.get 11 | original_print = print 12 | 13 | 14 | class RequestBlocker: 15 | 16 | def __enter__(self): 17 | requests.get = my_get 18 | 19 | def __exit__(self, exc_type, exc_value, traceback): 20 | requests.get = original_get 21 | 22 | 23 | class OpenMonkeyPatch: 24 | 25 | def __enter__(self): 26 | builtins.open = my_open 27 | builtins.print = my_print 28 | 29 | def __exit__(self, exc_type, exc_value, traceback): 30 | builtins.open = original_open 31 | builtins.print = original_print 32 | 33 | 34 | def my_get(url, **kwargs): 35 | logger.info("Unwanted HTTP request redirected to localhost :)") 36 | kwargs.setdefault("allow_redirects", True) 37 | return requests.api.request("get", "http://127.0.0.1/", **kwargs) 38 | 39 | 40 | # Kindly provided by our friend WizardLM-30B 41 | def my_open(*args, **kwargs): 42 | """ 43 | Custom open function that modifies the file contents before returning. 44 | """ 45 | filename = str(args[0]) 46 | if filename.endswith("index.html"): 47 | with original_open(*args, **kwargs) as f: 48 | file_contents = f.read() 49 | 50 | file_contents = file_contents.replace( 51 | b'\t\t', 52 | b'' 53 | ) 54 | file_contents = file_contents.replace(b"cdnjs.cloudflare.com", b"127.0.0.1") 55 | file_contents = file_contents.replace( 56 | b'', 57 | b'\n ' 58 | b'\n ' 59 | b'\n ' 60 | b'\n ' 61 | b'\n ' 62 | b'\n ' 63 | ) 64 | 65 | return io.BytesIO(file_contents) # return bytes 66 | else: 67 | return original_open(*args, **kwargs) 68 | 69 | def my_print(*args, **kwargs): 70 | """ 71 | Custom print function that modifies the output before printing. 72 | """ 73 | if len(args) > 0 and "To create a public link, set `share=True`" in args[0]: 74 | return 75 | else: 76 | if len(args) > 0 and "Running on local URL" in args[0]: 77 | args = list(args) 78 | args[0] = f"\n{args[0].strip()}\n" 79 | args = tuple(args) 80 | 81 | original_print(*args, **kwargs) 82 | -------------------------------------------------------------------------------- /modules/deepspeed_parameters.py: -------------------------------------------------------------------------------- 1 | def generate_ds_config(ds_bf16, train_batch_size, nvme_offload_dir): 2 | ''' 3 | DeepSpeed configuration 4 | https://huggingface.co/docs/transformers/main_classes/deepspeed 5 | ''' 6 | 7 | if nvme_offload_dir: 8 | ds_config = { 9 | "fp16": { 10 | "enabled": not ds_bf16, 11 | }, 12 | "bf16": { 13 | "enabled": ds_bf16, 14 | }, 15 | "zero_optimization": { 16 | "stage": 3, 17 | "offload_param": { 18 | "device": "nvme", 19 | "nvme_path": nvme_offload_dir, 20 | "pin_memory": True, 21 | "buffer_count": 5, 22 | "buffer_size": 1e9, 23 | "max_in_cpu": 1e9 24 | }, 25 | "overlap_comm": True, 26 | "reduce_bucket_size": "auto", 27 | "contiguous_gradients": True, 28 | "sub_group_size": 1e8, 29 | "stage3_prefetch_bucket_size": "auto", 30 | "stage3_param_persistence_threshold": "auto", 31 | "stage3_max_live_parameters": "auto", 32 | "stage3_max_reuse_distance": "auto", 33 | }, 34 | "aio": { 35 | "block_size": 262144, 36 | "queue_depth": 32, 37 | "thread_count": 1, 38 | "single_submit": False, 39 | "overlap_events": True 40 | }, 41 | "steps_per_print": 2000, 42 | "train_batch_size": train_batch_size, 43 | "train_micro_batch_size_per_gpu": 1, 44 | "wall_clock_breakdown": False 45 | } 46 | else: 47 | ds_config = { 48 | "fp16": { 49 | "enabled": not ds_bf16, 50 | }, 51 | "bf16": { 52 | "enabled": ds_bf16, 53 | }, 54 | "zero_optimization": { 55 | "stage": 3, 56 | "offload_param": { 57 | "device": "cpu", 58 | "pin_memory": True 59 | }, 60 | "overlap_comm": True, 61 | "contiguous_gradients": True, 62 | "reduce_bucket_size": "auto", 63 | "stage3_prefetch_bucket_size": "auto", 64 | "stage3_param_persistence_threshold": "auto", 65 | "stage3_max_live_parameters": "auto", 66 | "stage3_max_reuse_distance": "auto", 67 | }, 68 | "steps_per_print": 2000, 69 | "train_batch_size": train_batch_size, 70 | "train_micro_batch_size_per_gpu": 1, 71 | "wall_clock_breakdown": False 72 | } 73 | 74 | return ds_config 75 | -------------------------------------------------------------------------------- /modules/github.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | from pathlib import Path 3 | 4 | new_extensions = set() 5 | 6 | 7 | def clone_or_pull_repository(github_url): 8 | global new_extensions 9 | 10 | repository_folder = Path("extensions") 11 | repo_name = github_url.rstrip("/").split("/")[-1].split(".")[0] 12 | 13 | # Check if the repository folder exists 14 | if not repository_folder.exists(): 15 | repository_folder.mkdir(parents=True) 16 | 17 | repo_path = repository_folder / repo_name 18 | 19 | # Check if the repository is already cloned 20 | if repo_path.exists(): 21 | yield f"Updating {github_url}..." 22 | # Perform a 'git pull' to update the repository 23 | try: 24 | pull_output = subprocess.check_output(["git", "-C", repo_path, "pull"], stderr=subprocess.STDOUT) 25 | yield "Done." 26 | return pull_output.decode() 27 | except subprocess.CalledProcessError as e: 28 | return str(e) 29 | 30 | # Clone the repository 31 | try: 32 | yield f"Cloning {github_url}..." 33 | clone_output = subprocess.check_output(["git", "clone", github_url, repo_path], stderr=subprocess.STDOUT) 34 | new_extensions.add(repo_name) 35 | yield f"The extension `{repo_name}` has been downloaded.\n\nPlease close the the web UI completely and launch it again to be able to load it." 36 | return clone_output.decode() 37 | except subprocess.CalledProcessError as e: 38 | return str(e) 39 | -------------------------------------------------------------------------------- /modules/gradio_hijack.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Copied from: https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/14184 3 | ''' 4 | 5 | import inspect 6 | import warnings 7 | from functools import wraps 8 | 9 | import gradio as gr 10 | 11 | 12 | class GradioDeprecationWarning(DeprecationWarning): 13 | pass 14 | 15 | 16 | def repair(grclass): 17 | if not getattr(grclass, 'EVENTS', None): 18 | return 19 | 20 | @wraps(grclass.__init__) 21 | def __repaired_init__(self, *args, tooltip=None, source=None, original=grclass.__init__, **kwargs): 22 | if source: 23 | kwargs["sources"] = [source] 24 | 25 | allowed_kwargs = inspect.signature(original).parameters 26 | fixed_kwargs = {} 27 | for k, v in kwargs.items(): 28 | if k in allowed_kwargs: 29 | fixed_kwargs[k] = v 30 | else: 31 | warnings.warn(f"unexpected argument for {grclass.__name__}: {k}", GradioDeprecationWarning, stacklevel=2) 32 | 33 | original(self, *args, **fixed_kwargs) 34 | 35 | self.webui_tooltip = tooltip 36 | 37 | for event in self.EVENTS: 38 | replaced_event = getattr(self, str(event)) 39 | 40 | def fun(*xargs, _js=None, replaced_event=replaced_event, **xkwargs): 41 | if _js: 42 | xkwargs['js'] = _js 43 | 44 | return replaced_event(*xargs, **xkwargs) 45 | 46 | setattr(self, str(event), fun) 47 | 48 | grclass.__init__ = __repaired_init__ 49 | grclass.update = gr.update 50 | 51 | 52 | for component in set(gr.components.__all__ + gr.layouts.__all__): 53 | repair(getattr(gr, component, None)) 54 | 55 | 56 | class Dependency(gr.events.Dependency): 57 | def __init__(self, *args, **kwargs): 58 | super().__init__(*args, **kwargs) 59 | 60 | def then(*xargs, _js=None, **xkwargs): 61 | if _js: 62 | xkwargs['js'] = _js 63 | 64 | return original_then(*xargs, **xkwargs) 65 | 66 | original_then = self.then 67 | self.then = then 68 | 69 | 70 | gr.events.Dependency = Dependency 71 | 72 | gr.Box = gr.Group 73 | -------------------------------------------------------------------------------- /modules/llama_cpp_python_hijack.py: -------------------------------------------------------------------------------- 1 | from typing import Sequence 2 | 3 | from tqdm import tqdm 4 | 5 | from modules import shared 6 | from modules.cache_utils import process_llamacpp_cache 7 | 8 | try: 9 | import llama_cpp 10 | except: 11 | llama_cpp = None 12 | 13 | try: 14 | import llama_cpp_cuda 15 | except: 16 | llama_cpp_cuda = None 17 | 18 | try: 19 | import llama_cpp_cuda_tensorcores 20 | except: 21 | llama_cpp_cuda_tensorcores = None 22 | 23 | 24 | def eval_with_progress(self, tokens: Sequence[int]): 25 | """ 26 | A copy of 27 | 28 | https://github.com/abetlen/llama-cpp-python/blob/main/llama_cpp/llama.py 29 | 30 | with tqdm to show prompt processing progress. 31 | """ 32 | assert self._ctx.ctx is not None 33 | assert self._batch.batch is not None 34 | self._ctx.kv_cache_seq_rm(-1, self.n_tokens, -1) 35 | 36 | if len(tokens) > 1: 37 | progress_bar = tqdm(range(0, len(tokens), self.n_batch), desc="Prompt evaluation", leave=False) 38 | else: 39 | progress_bar = range(0, len(tokens), self.n_batch) 40 | 41 | for i in progress_bar: 42 | batch = tokens[i : min(len(tokens), i + self.n_batch)] 43 | n_past = self.n_tokens 44 | n_tokens = len(batch) 45 | self._batch.set_batch( 46 | batch=batch, n_past=n_past, logits_all=self.context_params.logits_all 47 | ) 48 | self._ctx.decode(self._batch) 49 | # Save tokens 50 | self.input_ids[n_past : n_past + n_tokens] = batch 51 | # Save logits 52 | if self.context_params.logits_all: 53 | rows = n_tokens 54 | cols = self._n_vocab 55 | logits = self._ctx.get_logits()[: rows * cols] 56 | self.scores[n_past : n_past + n_tokens, :].reshape(-1)[: :] = logits 57 | else: 58 | rows = 1 59 | cols = self._n_vocab 60 | logits = self._ctx.get_logits()[: rows * cols] 61 | self.scores[n_past + n_tokens - 1, :].reshape(-1)[: :] = logits 62 | # Update n_tokens 63 | self.n_tokens += n_tokens 64 | 65 | 66 | def monkey_patch_generate(lib): 67 | 68 | def my_generate(self, *args, **kwargs): 69 | 70 | if shared.args.streaming_llm: 71 | new_sequence = args[0] 72 | past_sequence = self._input_ids 73 | 74 | # Do the cache trimming for StreamingLLM 75 | process_llamacpp_cache(self, new_sequence, past_sequence) 76 | 77 | for output in self.original_generate(*args, **kwargs): 78 | yield output 79 | 80 | lib.Llama.original_generate = lib.Llama.generate 81 | lib.Llama.generate = my_generate 82 | 83 | 84 | for lib in [llama_cpp, llama_cpp_cuda, llama_cpp_cuda_tensorcores]: 85 | if lib is not None: 86 | lib.Llama.eval = eval_with_progress 87 | monkey_patch_generate(lib) 88 | -------------------------------------------------------------------------------- /modules/logging_colors.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | logger = logging.getLogger('text-generation-webui') 4 | 5 | 6 | def setup_logging(): 7 | ''' 8 | Copied from: https://github.com/vladmandic/automatic 9 | 10 | All credits to vladmandic. 11 | ''' 12 | 13 | class RingBuffer(logging.StreamHandler): 14 | def __init__(self, capacity): 15 | super().__init__() 16 | self.capacity = capacity 17 | self.buffer = [] 18 | self.formatter = logging.Formatter('{ "asctime":"%(asctime)s", "created":%(created)f, "facility":"%(name)s", "pid":%(process)d, "tid":%(thread)d, "level":"%(levelname)s", "module":"%(module)s", "func":"%(funcName)s", "msg":"%(message)s" }') 19 | 20 | def emit(self, record): 21 | msg = self.format(record) 22 | # self.buffer.append(json.loads(msg)) 23 | self.buffer.append(msg) 24 | if len(self.buffer) > self.capacity: 25 | self.buffer.pop(0) 26 | 27 | def get(self): 28 | return self.buffer 29 | 30 | from rich.console import Console 31 | from rich.logging import RichHandler 32 | from rich.pretty import install as pretty_install 33 | from rich.theme import Theme 34 | from rich.traceback import install as traceback_install 35 | 36 | level = logging.DEBUG 37 | logger.setLevel(logging.DEBUG) # log to file is always at level debug for facility `sd` 38 | console = Console(log_time=True, log_time_format='%H:%M:%S-%f', theme=Theme({ 39 | "traceback.border": "black", 40 | "traceback.border.syntax_error": "black", 41 | "inspect.value.border": "black", 42 | })) 43 | logging.basicConfig(level=logging.ERROR, format='%(asctime)s | %(name)s | %(levelname)s | %(module)s | %(message)s', handlers=[logging.NullHandler()]) # redirect default logger to null 44 | pretty_install(console=console) 45 | traceback_install(console=console, extra_lines=1, max_frames=10, width=console.width, word_wrap=False, indent_guides=False, suppress=[]) 46 | while logger.hasHandlers() and len(logger.handlers) > 0: 47 | logger.removeHandler(logger.handlers[0]) 48 | 49 | # handlers 50 | rh = RichHandler(show_time=True, omit_repeated_times=False, show_level=True, show_path=False, markup=False, rich_tracebacks=True, log_time_format='%H:%M:%S-%f', level=level, console=console) 51 | rh.setLevel(level) 52 | logger.addHandler(rh) 53 | 54 | rb = RingBuffer(100) # 100 entries default in log ring buffer 55 | rb.setLevel(level) 56 | logger.addHandler(rb) 57 | logger.buffer = rb.buffer 58 | 59 | # overrides 60 | logging.getLogger("urllib3").setLevel(logging.ERROR) 61 | logging.getLogger("httpx").setLevel(logging.ERROR) 62 | logging.getLogger("diffusers").setLevel(logging.ERROR) 63 | logging.getLogger("torch").setLevel(logging.ERROR) 64 | logging.getLogger("lycoris").handlers = logger.handlers 65 | 66 | 67 | setup_logging() 68 | -------------------------------------------------------------------------------- /modules/metadata_gguf.py: -------------------------------------------------------------------------------- 1 | import struct 2 | from enum import IntEnum 3 | 4 | 5 | class GGUFValueType(IntEnum): 6 | UINT8 = 0 7 | INT8 = 1 8 | UINT16 = 2 9 | INT16 = 3 10 | UINT32 = 4 11 | INT32 = 5 12 | FLOAT32 = 6 13 | BOOL = 7 14 | STRING = 8 15 | ARRAY = 9 16 | UINT64 = 10 17 | INT64 = 11 18 | FLOAT64 = 12 19 | 20 | 21 | _simple_value_packing = { 22 | GGUFValueType.UINT8: "=9.5.0 17 | psutil 18 | pyyaml 19 | requests 20 | rich 21 | safetensors==0.4.* 22 | scipy 23 | sentencepiece 24 | tensorboard 25 | transformers==4.48.0 26 | tqdm 27 | wandb 28 | 29 | # API 30 | SpeechRecognition==3.10.0 31 | flask_cloudflared==0.0.14 32 | sse-starlette==2.1.0 33 | tiktoken 34 | 35 | # For building llama_cpp_python later 36 | scikit-build-core 37 | exceptiongroup 38 | packaging 39 | ninja 40 | cmake 41 | pathspec 42 | tomli 43 | Cython>=0.29.34,<3.1 44 | meson-python>=0.15.0,<0.16.0 45 | scikit_build 46 | -------------------------------------------------------------------------------- /settings-template.yaml: -------------------------------------------------------------------------------- 1 | dark_theme: true 2 | show_controls: true 3 | start_with: '' 4 | mode: chat 5 | chat_style: cai-chat 6 | prompt-default: QA 7 | prompt-notebook: QA 8 | preset: min_p 9 | max_new_tokens: 512 10 | max_new_tokens_min: 1 11 | max_new_tokens_max: 4096 12 | negative_prompt: '' 13 | seed: -1 14 | truncation_length: 2048 15 | truncation_length_min: 0 16 | truncation_length_max: 200000 17 | max_tokens_second: 0 18 | max_updates_second: 0 19 | prompt_lookup_num_tokens: 0 20 | custom_stopping_strings: '' 21 | custom_token_bans: '' 22 | auto_max_new_tokens: false 23 | ban_eos_token: false 24 | add_bos_token: true 25 | skip_special_tokens: true 26 | stream: true 27 | character: Assistant 28 | name1: You 29 | custom_system_message: '' 30 | instruction_template_str: |- 31 | {%- set ns = namespace(found=false) -%} 32 | {%- for message in messages -%} 33 | {%- if message['role'] == 'system' -%} 34 | {%- set ns.found = true -%} 35 | {%- endif -%} 36 | {%- endfor -%} 37 | {%- if not ns.found -%} 38 | {{- '' + 'Below is an instruction that describes a task. Write a response that appropriately completes the request.' + '\n\n' -}} 39 | {%- endif %} 40 | {%- for message in messages %} 41 | {%- if message['role'] == 'system' -%} 42 | {{- '' + message['content'] + '\n\n' -}} 43 | {%- else -%} 44 | {%- if message['role'] == 'user' -%} 45 | {{-'### Instruction:\n' + message['content'] + '\n\n'-}} 46 | {%- else -%} 47 | {{-'### Response:\n' + message['content'] + '\n\n' -}} 48 | {%- endif -%} 49 | {%- endif -%} 50 | {%- endfor -%} 51 | {%- if add_generation_prompt -%} 52 | {{-'### Response:\n'-}} 53 | {%- endif -%} 54 | chat_template_str: |- 55 | {%- for message in messages %} 56 | {%- if message['role'] == 'system' -%} 57 | {%- if message['content'] -%} 58 | {{- message['content'] + '\n\n' -}} 59 | {%- endif -%} 60 | {%- if user_bio -%} 61 | {{- user_bio + '\n\n' -}} 62 | {%- endif -%} 63 | {%- else -%} 64 | {%- if message['role'] == 'user' -%} 65 | {{- name1 + ': ' + message['content'] + '\n'-}} 66 | {%- else -%} 67 | {{- name2 + ': ' + message['content'] + '\n' -}} 68 | {%- endif -%} 69 | {%- endif -%} 70 | {%- endfor -%} 71 | chat-instruct_command: |- 72 | Continue the chat dialogue below. Write a single reply for the character "<|character|>". 73 | 74 | <|prompt|> 75 | autoload_model: false 76 | gallery-items_per_page: 50 77 | gallery-open: false 78 | default_extensions: [] 79 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [pycodestyle] 2 | max-line-length = 120 3 | ignore = E402, E501, E722 -------------------------------------------------------------------------------- /training/datasets/put-trainer-datasets-here.txt: -------------------------------------------------------------------------------- 1 | to load multiple raw text files create a subdirectory and put them all there 2 | -------------------------------------------------------------------------------- /training/formats/alpaca-chatbot-format.json: -------------------------------------------------------------------------------- 1 | { 2 | "instruction,output": "User: %instruction%\nAssistant: %output%", 3 | "instruction,input,output": "User: %instruction%: %input%\nAssistant: %output%" 4 | } 5 | -------------------------------------------------------------------------------- /training/formats/alpaca-format.json: -------------------------------------------------------------------------------- 1 | { 2 | "instruction,output": "Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:\n%instruction%\n\n### Response:\n%output%", 3 | "instruction,input,output": "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\n%instruction%\n\n### Input:\n%input%\n\n### Response:\n%output%" 4 | } 5 | -------------------------------------------------------------------------------- /training/formats/llama2-chat-format.json: -------------------------------------------------------------------------------- 1 | { 2 | "modelanswer,userprompt,systemprompt": "[INST] <>\n%systemprompt%\n<>\n\n%userprompt%[/INST] %modelanswer%", 3 | "modelanswer,userprompt": "[INST] <>\n\n<>\n\n%userprompt%[/INST] %modelanswer%" 4 | } 5 | -------------------------------------------------------------------------------- /training/formats/vicuna-format.json: -------------------------------------------------------------------------------- 1 | { 2 | "instruction,output": "A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions.\n\nUSER: %instruction%\n\nASSISTANT: %output%" 3 | } 4 | --------------------------------------------------------------------------------