☰', elem_id='gr-hover')
with gr.Column(scale=10, elem_id='chat-input-container'):
shared.gradio['textbox'] = gr.MultimodalTextbox(label='', placeholder='Send a message', file_types=['text', '.pdf', 'image'], file_count="multiple", elem_id='chat-input', elem_classes=['add_scrollbar'])
@@ -82,7 +81,7 @@ def create_ui():
gr.HTML("")
shared.gradio['reasoning_effort'] = gr.Dropdown(value=shared.settings['reasoning_effort'], choices=['low', 'medium', 'high'], label='Reasoning effort', info='Used by GPT-OSS.')
- shared.gradio['enable_thinking'] = gr.Checkbox(value=shared.settings['enable_thinking'], label='Enable thinking', info='For models with thinking support.')
+ shared.gradio['enable_thinking'] = gr.Checkbox(value=shared.settings['enable_thinking'], label='Enable thinking', info='Used by Seed-OSS and pre-2507 Qwen3.')
gr.HTML("")
@@ -92,24 +91,6 @@ def create_ui():
gr.HTML("")
- from modules.tool_use import get_available_tools
- shared.gradio['selected_tools'] = gr.CheckboxGroup(choices=get_available_tools(), value=shared.settings.get('selected_tools', []), label='Tools', info='Functions the model can call during generation.', elem_id='tools-group')
- shared.gradio['tools_refresh'] = gr.Button('Refresh list', elem_id='tools-refresh-btn', visible=False)
- shared.gradio['tools_refresh'].click(fn=lambda: gr.update(choices=get_available_tools()), inputs=[], outputs=[shared.gradio['selected_tools']])
-
- def sync_web_tools(selected):
- if 'web_search' in selected and 'fetch_webpage' not in selected and 'fetch_webpage' in get_available_tools():
- selected.append('fetch_webpage')
-
- return gr.update(value=selected)
-
- shared.gradio['selected_tools'].change(fn=sync_web_tools, inputs=[shared.gradio['selected_tools']], outputs=[shared.gradio['selected_tools']], show_progress=False)
-
- with gr.Accordion('MCP servers', open=False):
- shared.gradio['mcp_servers'] = gr.Textbox(value=shared.settings.get('mcp_servers', ''), lines=3, max_lines=3, label='', info='One url per line. For headers, write url,Header: value,Header2: value2', elem_classes=['add_scrollbar'])
-
- gr.HTML("")
-
with gr.Row():
shared.gradio['mode'] = gr.Radio(choices=['instruct', 'chat-instruct', 'chat'], value=None, label='Mode', info='In instruct and chat-instruct modes, the template under Parameters > Instruction template is used.', elem_id='chat-mode')
@@ -294,10 +275,6 @@ def create_event_handlers():
ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then(
chat.handle_start_new_chat_click, gradio('interface_state'), gradio('history', 'display', 'unique_id'), show_progress=False)
- shared.gradio['Start incognito chat'].click(
- ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then(
- chat.handle_start_incognito_chat_click, gradio('interface_state'), gradio('history', 'display', 'unique_id'), show_progress=False)
-
shared.gradio['delete_chat-confirm'].click(
ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then(
chat.handle_delete_chat_confirm_click, gradio('interface_state'), gradio('history', 'display', 'unique_id'), show_progress=False)
@@ -353,13 +330,13 @@ def create_event_handlers():
shared.gradio['load_template'].click(chat.handle_load_template_click, gradio('instruction_template'), gradio('instruction_template_str', 'instruction_template'), show_progress=False)
shared.gradio['save_template'].click(
ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then(
- chat.handle_save_template_click, gradio('instruction_template_str'), gradio('save_filename', 'save_root', 'save_contents', 'save_root_state', 'file_saver'), show_progress=False)
+ chat.handle_save_template_click, gradio('instruction_template_str'), gradio('save_filename', 'save_root', 'save_contents', 'file_saver'), show_progress=False)
shared.gradio['restore_character'].click(
ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then(
chat.restore_character_for_ui, gradio('interface_state'), gradio('interface_state', 'name2', 'context', 'greeting', 'character_picture'), show_progress=False)
- shared.gradio['delete_template'].click(chat.handle_delete_template_click, gradio('instruction_template'), gradio('delete_filename', 'delete_root', 'delete_root_state', 'file_deleter'), show_progress=False)
+ shared.gradio['delete_template'].click(chat.handle_delete_template_click, gradio('instruction_template'), gradio('delete_filename', 'delete_root', 'file_deleter'), show_progress=False)
shared.gradio['save_chat_history'].click(
lambda x: json.dumps(x, indent=4), gradio('history'), gradio('temporary_text')).then(
None, gradio('temporary_text', 'character_menu', 'mode'), None, js=f'(hist, char, mode) => {{{ui.save_files_js}; saveHistory(hist, char, mode)}}')
diff --git a/modules/ui_default.py b/modules/ui_default.py
index 48cb2fc2..2c367cca 100644
--- a/modules/ui_default.py
+++ b/modules/ui_default.py
@@ -10,7 +10,7 @@ from modules.text_generation import (
stop_everything_event
)
from modules.ui_notebook import store_notebook_state_and_debounce
-from modules.utils import gradio, sanitize_filename
+from modules.utils import gradio
inputs = ('textbox-default', 'interface_state')
outputs = ('output_textbox', 'html-default')
@@ -167,7 +167,6 @@ def handle_new_prompt():
def handle_delete_prompt_confirm_default(prompt_name):
- prompt_name = sanitize_filename(prompt_name)
available_prompts = utils.get_available_prompts()
current_index = available_prompts.index(prompt_name) if prompt_name in available_prompts else 0
@@ -200,8 +199,6 @@ def handle_rename_prompt_click_default(current_name):
def handle_rename_prompt_confirm_default(new_name, current_name):
- new_name = sanitize_filename(new_name)
- current_name = sanitize_filename(current_name)
old_path = shared.user_data_dir / "logs" / "notebook" / f"{current_name}.txt"
new_path = shared.user_data_dir / "logs" / "notebook" / f"{new_name}.txt"
diff --git a/modules/ui_file_saving.py b/modules/ui_file_saving.py
index e5018700..3ed256f8 100644
--- a/modules/ui_file_saving.py
+++ b/modules/ui_file_saving.py
@@ -1,19 +1,14 @@
+import traceback
+
import gradio as gr
from modules import chat, presets, shared, ui, utils
-from modules.logging_colors import logger
from modules.utils import gradio, sanitize_filename
def create_ui():
mu = shared.args.multi_user
- # Server-side per-session root paths for the generic file saver/deleter.
- # Set by the handler that opens the dialog, read by the confirm handler.
- # Using gr.State so they are session-scoped and safe for multi-user.
- shared.gradio['save_root_state'] = gr.State(None)
- shared.gradio['delete_root_state'] = gr.State(None)
-
# Text file saver
with gr.Group(visible=False, elem_classes='file-saver') as shared.gradio['file_saver']:
shared.gradio['save_filename'] = gr.Textbox(lines=1, label='File name')
@@ -71,13 +66,13 @@ def create_event_handlers():
ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then(
handle_save_preset_click, gradio('interface_state'), gradio('save_preset_contents', 'save_preset_filename', 'preset_saver'), show_progress=False)
- shared.gradio['delete_preset'].click(handle_delete_preset_click, gradio('preset_menu'), gradio('delete_filename', 'delete_root', 'delete_root_state', 'file_deleter'), show_progress=False)
- shared.gradio['save_grammar'].click(handle_save_grammar_click, gradio('grammar_string'), gradio('save_contents', 'save_filename', 'save_root', 'save_root_state', 'file_saver'), show_progress=False)
- shared.gradio['delete_grammar'].click(handle_delete_grammar_click, gradio('grammar_file'), gradio('delete_filename', 'delete_root', 'delete_root_state', 'file_deleter'), show_progress=False)
+ shared.gradio['delete_preset'].click(handle_delete_preset_click, gradio('preset_menu'), gradio('delete_filename', 'delete_root', 'file_deleter'), show_progress=False)
+ shared.gradio['save_grammar'].click(handle_save_grammar_click, gradio('grammar_string'), gradio('save_contents', 'save_filename', 'save_root', 'file_saver'), show_progress=False)
+ shared.gradio['delete_grammar'].click(handle_delete_grammar_click, gradio('grammar_file'), gradio('delete_filename', 'delete_root', 'file_deleter'), show_progress=False)
shared.gradio['save_preset_confirm'].click(handle_save_preset_confirm_click, gradio('save_preset_filename', 'save_preset_contents'), gradio('preset_menu', 'preset_saver'), show_progress=False)
- shared.gradio['save_confirm'].click(handle_save_confirm_click, gradio('save_root_state', 'save_filename', 'save_contents'), gradio('save_root_state', 'file_saver'), show_progress=False)
- shared.gradio['delete_confirm'].click(handle_delete_confirm_click, gradio('delete_root_state', 'delete_filename'), gradio('delete_root_state', 'file_deleter'), show_progress=False)
+ shared.gradio['save_confirm'].click(handle_save_confirm_click, gradio('save_root', 'save_filename', 'save_contents'), gradio('file_saver'), show_progress=False)
+ shared.gradio['delete_confirm'].click(handle_delete_confirm_click, gradio('delete_root', 'delete_filename'), gradio('file_deleter'), show_progress=False)
shared.gradio['save_character_confirm'].click(handle_save_character_confirm_click, gradio('name2', 'greeting', 'context', 'character_picture', 'save_character_filename'), gradio('character_menu', 'character_saver'), show_progress=False)
shared.gradio['delete_character_confirm'].click(handle_delete_character_confirm_click, gradio('character_menu'), gradio('character_menu', 'character_deleter'), show_progress=False)
@@ -102,7 +97,7 @@ def handle_save_preset_confirm_click(filename, contents):
output = gr.update(choices=available_presets, value=filename)
except Exception:
output = gr.update()
- logger.exception("Failed to save preset")
+ traceback.print_exc()
return [
output,
@@ -110,30 +105,24 @@ def handle_save_preset_confirm_click(filename, contents):
]
-def handle_save_confirm_click(root_state, filename, contents):
+def handle_save_confirm_click(root, filename, contents):
try:
- if root_state is None:
- return None, gr.update(visible=False)
-
filename = sanitize_filename(filename)
- utils.save_file(root_state + filename, contents)
+ utils.save_file(root + filename, contents)
except Exception:
- logger.exception("Failed to save file")
+ traceback.print_exc()
- return None, gr.update(visible=False)
+ return gr.update(visible=False)
-def handle_delete_confirm_click(root_state, filename):
+def handle_delete_confirm_click(root, filename):
try:
- if root_state is None:
- return None, gr.update(visible=False)
-
filename = sanitize_filename(filename)
- utils.delete_file(root_state + filename)
+ utils.delete_file(root + filename)
except Exception:
- logger.exception("Failed to delete file")
+ traceback.print_exc()
- return None, gr.update(visible=False)
+ return gr.update(visible=False)
def handle_save_character_confirm_click(name2, greeting, context, character_picture, filename):
@@ -143,7 +132,7 @@ def handle_save_character_confirm_click(name2, greeting, context, character_pict
output = gr.update(choices=available_characters, value=filename)
except Exception:
output = gr.update()
- logger.exception("Failed to save character")
+ traceback.print_exc()
return [
output,
@@ -158,7 +147,7 @@ def handle_delete_character_confirm_click(character):
output = chat.update_character_menu_after_deletion(index)
except Exception:
output = gr.update()
- logger.exception("Failed to delete character")
+ traceback.print_exc()
return [
output,
@@ -176,32 +165,26 @@ def handle_save_preset_click(state):
def handle_delete_preset_click(preset):
- root = str(shared.user_data_dir / "presets") + "/"
return [
f"{preset}.yaml",
- root,
- root,
+ str(shared.user_data_dir / "presets") + "/",
gr.update(visible=True)
]
def handle_save_grammar_click(grammar_string):
- root = str(shared.user_data_dir / "grammars") + "/"
return [
grammar_string,
"My Fancy Grammar.gbnf",
- root,
- root,
+ str(shared.user_data_dir / "grammars") + "/",
gr.update(visible=True)
]
def handle_delete_grammar_click(grammar_file):
- root = str(shared.user_data_dir / "grammars") + "/"
return [
grammar_file,
- root,
- root,
+ str(shared.user_data_dir / "grammars") + "/",
gr.update(visible=True)
]
@@ -213,7 +196,7 @@ def handle_save_user_confirm_click(name1, user_bio, your_picture, filename):
output = gr.update(choices=available_users, value=filename)
except Exception:
output = gr.update()
- logger.exception("Failed to save user")
+ traceback.print_exc()
return [
output,
@@ -228,7 +211,7 @@ def handle_delete_user_confirm_click(user):
output = chat.update_user_menu_after_deletion(index)
except Exception:
output = gr.update()
- logger.exception("Failed to delete user")
+ traceback.print_exc()
return [
output,
diff --git a/modules/ui_image_generation.py b/modules/ui_image_generation.py
index 727aa7b1..e9df9bd3 100644
--- a/modules/ui_image_generation.py
+++ b/modules/ui_image_generation.py
@@ -728,8 +728,6 @@ def generate_prompt_variation(state):
variation = variation.rsplit("", 1)[1]
elif "<|start|>assistant<|channel|>final<|message|>" in variation:
variation = variation.rsplit("<|start|>assistant<|channel|>final<|message|>", 1)[1]
- elif "<|channel|>final<|message|>" in variation:
- variation = variation.rsplit("<|channel|>final<|message|>", 1)[1]
elif "" in variation:
variation = variation.rsplit("", 1)[1]
@@ -798,9 +796,6 @@ def generate(state, save_images=True):
if seed == -1:
seed = random.randint(0, 2**32 - 1)
- # Store resolved seed back so callers (e.g. API) can access it
- state['image_seed_resolved'] = seed
-
device = get_device()
if device is None:
device = "cpu"
@@ -919,8 +914,9 @@ def generate(state, save_images=True):
yield all_images, progress_bar_html()
clear_torch_cache()
- except Exception:
- logger.exception("Image generation failed")
+ except Exception as e:
+ logger.error(f"Image generation failed: {e}")
+ traceback.print_exc()
yield [], progress_bar_html()
clear_torch_cache()
diff --git a/modules/ui_model_menu.py b/modules/ui_model_menu.py
index 9c8306f5..7e91f1ce 100644
--- a/modules/ui_model_menu.py
+++ b/modules/ui_model_menu.py
@@ -42,18 +42,16 @@ def create_ui():
with gr.Row():
with gr.Column():
shared.gradio['gpu_layers'] = gr.Slider(label="gpu-layers", minimum=-1, maximum=get_initial_gpu_layers_max(), step=1, value=shared.args.gpu_layers, info='Number of layers to offload to the GPU. -1 = auto.')
- shared.gradio['ctx_size'] = gr.Slider(label='ctx-size', minimum=0, maximum=1048576, step=1024, value=shared.args.ctx_size, info='Context length. 0 = auto for llama.cpp (requires gpu-layers=-1), 8192 for other loaders. Common values: 4096, 8192, 16384, 32768, 65536, 131072.')
+ shared.gradio['ctx_size'] = gr.Slider(label='ctx-size', minimum=0, maximum=131072, step=256, value=shared.args.ctx_size, info='Context length. llama.cpp: 0 = auto if gpu-layers is also -1. Common values: 4096, 8192, 16384, 32768, 65536, 131072.')
shared.gradio['gpu_split'] = gr.Textbox(label='gpu-split', info='Comma-separated list of VRAM (in GB) to use per GPU. Example: 20,7,7')
shared.gradio['attn_implementation'] = gr.Dropdown(label="attn-implementation", choices=['sdpa', 'eager', 'flash_attention_2'], value=shared.args.attn_implementation, info='Attention implementation.')
shared.gradio['cache_type'] = gr.Dropdown(label="cache-type", choices=['fp16', 'q8_0', 'q4_0', 'fp8', 'q8', 'q7', 'q6', 'q5', 'q4', 'q3', 'q2'], value=shared.args.cache_type, allow_custom_value=True, info='Valid options: llama.cpp - fp16, q8_0, q4_0; ExLlamaV3 - fp16, q2 to q8. For ExLlamaV3, you can type custom combinations for separate k/v bits (e.g. q4_q8).')
- shared.gradio['fit_target'] = gr.Textbox(label='fit-target', value=shared.args.fit_target, info='Target VRAM margin per device for auto GPU layers (MiB). Comma-separated list for multiple devices.')
+ shared.gradio['fit_target'] = gr.Textbox(label='fit-target', value=shared.args.fit_target, info='Target VRAM margin per device for auto GPU layers (MiB). Comma-separated list for multiple devices. Default: 1024.')
shared.gradio['tp_backend'] = gr.Dropdown(label="tp-backend", choices=['native', 'nccl'], value=shared.args.tp_backend, info='The backend for tensor parallelism.')
with gr.Column():
shared.gradio['vram_info'] = gr.HTML(value=get_initial_vram_info())
- if not shared.args.portable:
- shared.gradio['ik'] = gr.Checkbox(label="ik", value=shared.args.ik, info='Use ik_llama.cpp instead of upstream llama.cpp.')
-
+ shared.gradio['cpu_moe'] = gr.Checkbox(label="cpu-moe", value=shared.args.cpu_moe, info='Move the experts to the CPU. Saves VRAM on MoE models.')
shared.gradio['streaming_llm'] = gr.Checkbox(label="streaming-llm", value=shared.args.streaming_llm, info='Activate StreamingLLM to avoid re-evaluating the entire prompt when old messages are removed.')
shared.gradio['load_in_8bit'] = gr.Checkbox(label="load-in-8bit", value=shared.args.load_in_8bit)
shared.gradio['load_in_4bit'] = gr.Checkbox(label="load-in-4bit", value=shared.args.load_in_4bit)
@@ -66,13 +64,13 @@ def create_ui():
)
# Multimodal
- with gr.Accordion("Multimodal (vision)", open=False) as shared.gradio['mmproj_accordion']:
+ with gr.Accordion("Multimodal (vision)", open=False, elem_classes='tgw-accordion') as shared.gradio['mmproj_accordion']:
with gr.Row():
shared.gradio['mmproj'] = gr.Dropdown(label="mmproj file", choices=utils.get_available_mmproj(), value=lambda: shared.args.mmproj or 'None', elem_classes='slim-dropdown', info=f'Select a file that matches your model. Must be placed in {shared.user_data_dir}/mmproj/', interactive=not mu)
ui.create_refresh_button(shared.gradio['mmproj'], lambda: None, lambda: {'choices': utils.get_available_mmproj()}, 'refresh-button', interactive=not mu)
# Speculative decoding
- with gr.Accordion("Speculative decoding", open=False) as shared.gradio['speculative_decoding_accordion']:
+ with gr.Accordion("Speculative decoding", open=False, elem_classes='tgw-accordion') as shared.gradio['speculative_decoding_accordion']:
shared.gradio['draft_max'] = gr.Number(label="draft-max", precision=0, step=1, value=shared.args.draft_max, info='Maximum number of tokens to draft for speculative decoding. Recommended: 4 for draft model, 64 for n-gram.')
gr.Markdown('#### Draft model')
@@ -91,7 +89,7 @@ def create_ui():
shared.gradio['spec_ngram_min_hits'] = gr.Number(label="spec-ngram-min-hits", precision=0, step=1, value=shared.args.spec_ngram_min_hits, info='Minimum n-gram hits for ngram-map speculative decoding.', visible=shared.args.spec_type != 'none')
gr.Markdown("## Other options")
- with gr.Accordion("See more options", open=False):
+ with gr.Accordion("See more options", open=False, elem_classes='tgw-accordion'):
with gr.Row():
with gr.Column():
shared.gradio['parallel'] = gr.Slider(label="parallel", minimum=1, step=1, maximum=64, value=shared.args.parallel, info='Number of parallel request slots for the API. The context size is divided equally among slots. For example, to have 4 slots with 8192 context each, set ctx_size to 32768.')
@@ -100,17 +98,19 @@ def create_ui():
shared.gradio['batch_size'] = gr.Slider(label="batch_size", minimum=1, maximum=4096, step=1, value=shared.args.batch_size)
shared.gradio['ubatch_size'] = gr.Slider(label="ubatch_size", minimum=1, maximum=4096, step=1, value=shared.args.ubatch_size)
shared.gradio['tensor_split'] = gr.Textbox(label='tensor_split', info='List of proportions to split the model across multiple GPUs. Example: 60,40')
- shared.gradio['extra_flags'] = gr.Textbox(label='extra-flags', info='Extra flags to pass to llama-server. Example: --jinja --rpc 192.168.1.100:50052', value=shared.args.extra_flags)
+ shared.gradio['extra_flags'] = gr.Textbox(label='extra-flags', info='Additional flags to pass to llama-server. Format: "flag1=value1,flag2,flag3=value3". Example: "override-tensor=exps=CPU"', value=shared.args.extra_flags)
shared.gradio['cpu_memory'] = gr.Number(label="Maximum CPU memory in GiB. Use this for CPU offloading.", value=shared.args.cpu_memory)
+ shared.gradio['alpha_value'] = gr.Number(label='alpha_value', value=shared.args.alpha_value, precision=2, info='Positional embeddings alpha factor for NTK RoPE scaling. Recommended values (NTKv1): 1.75 for 1.5x context, 2.5 for 2x context. Use either this or compress_pos_emb, not both.')
+ shared.gradio['rope_freq_base'] = gr.Number(label='rope_freq_base', value=shared.args.rope_freq_base, precision=0, info='Positional embeddings frequency base for NTK RoPE scaling. Related to alpha_value by rope_freq_base = 10000 * alpha_value ^ (64 / 63). 0 = from model.')
+ shared.gradio['compress_pos_emb'] = gr.Number(label='compress_pos_emb', value=shared.args.compress_pos_emb, precision=2, info='Positional embeddings compression factor. Should be set to (context length) / (model\'s original context length). Equal to 1/rope_freq_scale.')
shared.gradio['compute_dtype'] = gr.Dropdown(label="compute_dtype", choices=["bfloat16", "float16", "float32"], value=shared.args.compute_dtype, info='Used by load-in-4bit.')
shared.gradio['quant_type'] = gr.Dropdown(label="quant_type", choices=["nf4", "fp4"], value=shared.args.quant_type, info='Used by load-in-4bit.')
with gr.Column():
shared.gradio['cpu'] = gr.Checkbox(label="cpu", value=shared.args.cpu, info='Use PyTorch in CPU mode.')
shared.gradio['disk'] = gr.Checkbox(label="disk", value=shared.args.disk)
- shared.gradio['cpu_moe'] = gr.Checkbox(label="cpu-moe", value=shared.args.cpu_moe, info='Move the experts to the CPU. Saves VRAM on MoE models.')
shared.gradio['row_split'] = gr.Checkbox(label="row_split", value=shared.args.row_split, info='Split the model by rows across GPUs. This may improve multi-gpu performance.')
- shared.gradio['no_kv_offload'] = gr.Checkbox(label="no_kv_offload", value=shared.args.no_kv_offload, info='Do not offload the K, Q, V to the GPU. This saves VRAM but reduces performance.')
+ shared.gradio['no_kv_offload'] = gr.Checkbox(label="no_kv_offload", value=shared.args.no_kv_offload, info='Do not offload the K, Q, V to the GPU. This saves VRAM but reduces the performance.')
shared.gradio['no_mmap'] = gr.Checkbox(label="no-mmap", value=shared.args.no_mmap)
shared.gradio['mlock'] = gr.Checkbox(label="mlock", value=shared.args.mlock)
shared.gradio['numa'] = gr.Checkbox(label="numa", value=shared.args.numa, info='NUMA support can help on some systems with non-uniform memory access.')
@@ -137,7 +137,7 @@ def create_ui():
ui.create_refresh_button(shared.gradio['customized_template'], lambda: None, lambda: {'choices': utils.get_available_instruction_templates()}, 'refresh-button', interactive=not mu)
shared.gradio['customized_template_submit'] = gr.Button("Submit", variant="primary", interactive=not mu)
- gr.Markdown("This allows you to set a customized template for the model currently selected in the \"Model loader\" menu. Whenever the model gets loaded, this template will be used in place of the template specified in the model's metadata, which sometimes is wrong.")
+ gr.Markdown("This allows you to set a customized template for the model currently selected in the \"Model loader\" menu. Whenever the model gets loaded, this template will be used in place of the template specified in the model's medatada, which sometimes is wrong.")
with gr.Row():
shared.gradio['model_status'] = gr.Markdown('No model is loaded' if shared.model_name == 'None' else 'Ready')
@@ -225,14 +225,16 @@ def load_model_wrapper(selected_model, loader, autoload=False):
else:
yield f"Failed to load `{selected_model}`."
except Exception:
- logger.exception('Failed to load the model.')
- yield traceback.format_exc().replace('\n', '\n\n')
+ exc = traceback.format_exc()
+ logger.error('Failed to load the model.')
+ print(exc)
+ yield exc.replace('\n', '\n\n')
def load_lora_wrapper(selected_loras):
yield ("Applying the following LoRAs to {}:\n\n{}".format(shared.model_name, '\n'.join(selected_loras)))
add_lora_to_model(selected_loras)
- yield ("Successfully applied the LoRAs")
+ yield ("Successfuly applied the LoRAs")
def download_model_wrapper(repo_id, specific_file, progress=gr.Progress(), return_links=False, check=False):
@@ -386,11 +388,7 @@ def download_model_wrapper(repo_id, specific_file, progress=gr.Progress(), retur
def update_truncation_length(current_length, state):
if 'loader' in state:
if state['loader'].lower().startswith('exllama') or state['loader'] == 'llama.cpp':
- if state['ctx_size'] > 0:
- return state['ctx_size']
-
- # ctx_size == 0 means auto: use the actual value from the server
- return shared.settings['truncation_length']
+ return state['ctx_size']
return current_length
diff --git a/modules/ui_notebook.py b/modules/ui_notebook.py
index 88f00ac5..f550e646 100644
--- a/modules/ui_notebook.py
+++ b/modules/ui_notebook.py
@@ -11,7 +11,7 @@ from modules.text_generation import (
get_token_ids,
stop_everything_event
)
-from modules.utils import gradio, sanitize_filename
+from modules.utils import gradio
_notebook_file_lock = threading.Lock()
_notebook_auto_save_timer = None
@@ -202,7 +202,6 @@ def handle_new_prompt():
def handle_delete_prompt_confirm_notebook(prompt_name):
- prompt_name = sanitize_filename(prompt_name)
available_prompts = utils.get_available_prompts()
current_index = available_prompts.index(prompt_name) if prompt_name in available_prompts else 0
@@ -234,8 +233,6 @@ def handle_rename_prompt_click_notebook(current_name):
def handle_rename_prompt_confirm_notebook(new_name, current_name):
- new_name = sanitize_filename(new_name)
- current_name = sanitize_filename(current_name)
old_path = shared.user_data_dir / "logs" / "notebook" / f"{current_name}.txt"
new_path = shared.user_data_dir / "logs" / "notebook" / f"{new_name}.txt"
@@ -252,7 +249,6 @@ def handle_rename_prompt_confirm_notebook(new_name, current_name):
def autosave_prompt(text, prompt_name):
"""Automatically save the text to the selected prompt file"""
- prompt_name = sanitize_filename(prompt_name)
if prompt_name and text.strip():
prompt_path = shared.user_data_dir / "logs" / "notebook" / f"{prompt_name}.txt"
prompt_path.parent.mkdir(parents=True, exist_ok=True)
diff --git a/modules/ui_parameters.py b/modules/ui_parameters.py
index 5411b294..e5eb9210 100644
--- a/modules/ui_parameters.py
+++ b/modules/ui_parameters.py
@@ -37,10 +37,10 @@ def create_ui():
shared.gradio['dynamic_temperature'] = gr.Checkbox(value=shared.settings['dynamic_temperature'], label='dynamic_temperature')
gr.Markdown('## Curve cutoff')
- shared.gradio['top_p'] = gr.Slider(0.0, 1.0, value=shared.settings['top_p'], step=0.01, label='top_p')
- shared.gradio['top_k'] = gr.Slider(0, 200, value=shared.settings['top_k'], step=1, label='top_k')
shared.gradio['min_p'] = gr.Slider(0.0, 1.0, value=shared.settings['min_p'], step=0.01, label='min_p')
shared.gradio['top_n_sigma'] = gr.Slider(0.0, 5.0, value=shared.settings['top_n_sigma'], step=0.01, label='top_n_sigma')
+ shared.gradio['top_p'] = gr.Slider(0.0, 1.0, value=shared.settings['top_p'], step=0.01, label='top_p')
+ shared.gradio['top_k'] = gr.Slider(0, 200, value=shared.settings['top_k'], step=1, label='top_k')
shared.gradio['typical_p'] = gr.Slider(0.0, 1.0, value=shared.settings['typical_p'], step=0.01, label='typical_p')
shared.gradio['xtc_threshold'] = gr.Slider(0, 0.5, value=shared.settings['xtc_threshold'], step=0.01, label='xtc_threshold', info='If 2 or more tokens have probability above this threshold, consider removing all but the last one.')
shared.gradio['xtc_probability'] = gr.Slider(0, 1, value=shared.settings['xtc_probability'], step=0.01, label='xtc_probability', info='Probability that the removal will actually happen. 0 disables the sampler. 1 makes it always happen.')
@@ -73,7 +73,7 @@ def create_ui():
gr.Markdown('## Other options')
shared.gradio['do_sample'] = gr.Checkbox(value=shared.settings['do_sample'], label='do_sample')
shared.gradio['temperature_last'] = gr.Checkbox(value=shared.settings['temperature_last'], label='temperature_last', info='Moves temperature/dynamic temperature/quadratic sampling to the end of the sampler stack, ignoring their positions in "Sampler priority".')
- shared.gradio['sampler_priority'] = gr.DragDrop(value=shared.settings['sampler_priority'], label='Sampler priority', info='Parameter names separated by new lines or commas.', elem_classes=['add_scrollbar'])
+ shared.gradio['sampler_priority'] = gr.Textbox(value=shared.settings['sampler_priority'], lines=10, label='Sampler priority', info='Parameter names separated by new lines or commas.', elem_classes=['add_scrollbar'])
shared.gradio['dry_sequence_breakers'] = gr.Textbox(value=shared.settings['dry_sequence_breakers'], label='dry_sequence_breakers', info='Tokens across which sequence matching is not continued. Specified as a comma-separated list of quoted strings.')
with gr.Column():
diff --git a/modules/ui_session.py b/modules/ui_session.py
index 3f2c8a7b..e1807dea 100644
--- a/modules/ui_session.py
+++ b/modules/ui_session.py
@@ -17,7 +17,7 @@ def create_ui():
with gr.Column():
gr.Markdown("## Extensions & flags")
- shared.gradio['save_settings'] = gr.Button(f'Save extensions settings to {shared.user_data_dir}/settings.yaml', interactive=not mu)
+ shared.gradio['save_settings'] = gr.Button(f'Save extensions settings to {shared.user_data_dir}/settings.yaml', elem_classes='refresh-button', interactive=not mu)
shared.gradio['reset_interface'] = gr.Button("Apply flags/extensions and restart", interactive=not mu)
with gr.Row():
with gr.Column():
@@ -30,7 +30,7 @@ def create_ui():
if not mu:
shared.gradio['save_settings'].click(
ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then(
- handle_save_settings, gradio('interface_state', 'preset_menu', 'extensions_menu', 'show_controls', 'theme_state'), gradio('save_contents', 'save_filename', 'save_root', 'save_root_state', 'file_saver'), show_progress=False)
+ handle_save_settings, gradio('interface_state', 'preset_menu', 'extensions_menu', 'show_controls', 'theme_state'), gradio('save_contents', 'save_filename', 'save_root', 'file_saver'), show_progress=False)
shared.gradio['toggle_dark_mode'].click(
lambda x: 'dark' if x == 'light' else 'light', gradio('theme_state'), gradio('theme_state')).then(
@@ -51,12 +51,10 @@ def create_ui():
def handle_save_settings(state, preset, extensions, show_controls, theme):
contents = ui.save_settings(state, preset, extensions, show_controls, theme, manual_save=True)
- root = str(shared.user_data_dir) + "/"
return [
contents,
"settings.yaml",
- root,
- root,
+ str(shared.user_data_dir) + "/",
gr.update(visible=True)
]
@@ -95,6 +93,8 @@ def set_interface_arguments(extensions, bool_active):
setattr(shared.args, k, False)
for k in bool_active:
setattr(shared.args, k, True)
+ if k == 'api':
+ shared.add_extension('openai', last=True)
shared.need_restart = True
diff --git a/modules/utils.py b/modules/utils.py
index c4acf714..a14f8b8f 100644
--- a/modules/utils.py
+++ b/modules/utils.py
@@ -47,10 +47,6 @@ def save_file(fname, contents):
logger.error(f'Invalid file path: \"{fname}\"')
return
- if Path(abs_path_str).suffix.lower() not in ('.yaml', '.yml', '.json', '.txt', '.gbnf'):
- logger.error(f'Refusing to save file with disallowed extension: \"{fname}\"')
- return
-
with open(abs_path_str, 'w', encoding='utf-8') as f:
f.write(contents)
@@ -81,6 +77,14 @@ def atoi(text):
return int(text) if text.isdigit() else text.lower()
+# Replace multiple string pairs in a string
+def replace_all(text, dic):
+ for i, j in dic.items():
+ text = text.replace(i, j)
+
+ return text
+
+
def natural_keys(text):
return [atoi(c) for c in re.split(r'(\d+)', text)]
@@ -105,9 +109,6 @@ def resolve_model_path(model_name_or_path, image_model=False):
before the default models directory.
"""
- if model_name_or_path is None:
- raise FileNotFoundError("No model specified.")
-
path_candidate = Path(model_name_or_path)
if path_candidate.exists():
return path_candidate
diff --git a/modules/web_search.py b/modules/web_search.py
index 2902c7c0..597af4b2 100644
--- a/modules/web_search.py
+++ b/modules/web_search.py
@@ -1,12 +1,11 @@
import concurrent.futures
import html
-import ipaddress
import random
import re
-import socket
+import urllib.request
from concurrent.futures import as_completed
from datetime import datetime
-from urllib.parse import parse_qs, quote_plus, urljoin, urlparse
+from urllib.parse import quote_plus
import requests
@@ -14,60 +13,34 @@ from modules import shared
from modules.logging_colors import logger
-def _validate_url(url):
- """Validate that a URL is safe to fetch (not targeting private/internal networks)."""
- parsed = urlparse(url)
- if parsed.scheme not in ('http', 'https'):
- raise ValueError(f"Unsupported URL scheme: {parsed.scheme}")
-
- hostname = parsed.hostname
- if not hostname:
- raise ValueError("No hostname in URL")
-
- # Resolve hostname and check all returned addresses
- try:
- for family, _, _, _, sockaddr in socket.getaddrinfo(hostname, None):
- ip = ipaddress.ip_address(sockaddr[0])
- if not ip.is_global:
- raise ValueError(f"Access to non-public address {ip} is blocked")
- except socket.gaierror:
- raise ValueError(f"Could not resolve hostname: {hostname}")
-
-
def get_current_timestamp():
"""Returns the current time in 24-hour format"""
return datetime.now().strftime('%b %d, %Y %H:%M')
-def download_web_page(url, timeout=10, include_links=False):
+def download_web_page(url, timeout=10):
"""
- Download a web page and extract its main content as Markdown text.
+ Download a web page and convert its HTML content to structured Markdown text.
"""
- import trafilatura
+ import html2text
try:
- _validate_url(url)
headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36'
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
- max_redirects = 5
- for _ in range(max_redirects):
- response = requests.get(url, headers=headers, timeout=timeout, allow_redirects=False)
- if response.is_redirect and 'Location' in response.headers:
- url = urljoin(url, response.headers['Location'])
- _validate_url(url)
- else:
- break
+ response = requests.get(url, headers=headers, timeout=timeout)
+ response.raise_for_status() # Raise an exception for bad status codes
- response.raise_for_status()
+ # Initialize the HTML to Markdown converter
+ h = html2text.HTML2Text()
+ h.body_width = 0
+ h.ignore_images = True
+ h.ignore_links = True
- result = trafilatura.extract(
- response.text,
- include_links=include_links,
- output_format='markdown',
- url=url
- )
- return result or ""
+ # Convert the HTML to Markdown
+ markdown_text = h.handle(response.text)
+
+ return markdown_text
except requests.exceptions.RequestException as e:
logger.error(f"Error downloading {url}: {e}")
return ""
@@ -76,51 +49,35 @@ def download_web_page(url, timeout=10, include_links=False):
return ""
-def perform_web_search(query, num_pages=3, max_workers=5, timeout=10, fetch_content=True):
- """Perform web search and return results, optionally with page content"""
+def perform_web_search(query, num_pages=3, max_workers=5, timeout=10):
+ """Perform web search and return results with content"""
try:
search_url = f"https://html.duckduckgo.com/html/?q={quote_plus(query)}"
agents = [
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
]
- response = requests.get(search_url, headers={'User-Agent': random.choice(agents)}, timeout=timeout)
- response.raise_for_status()
- response_text = response.text
+ response_text = ""
+ req = urllib.request.Request(search_url, headers={'User-Agent': random.choice(agents)})
+ with urllib.request.urlopen(req, timeout=timeout) as response:
+ response_text = response.read().decode('utf-8')
- # Extract results - title and URL come from the same
element
- result_links = re.findall(r']*class="[^"]*result__a[^"]*"[^>]*>(.*?)', response_text, re.DOTALL)
- result_tags = re.findall(r'
]*class="[^"]*result__a[^"]*"[^>]*)>', response_text, re.DOTALL)
+ # Extract results with regex
+ titles = re.findall(r']*class="[^"]*result__a[^"]*"[^>]*>(.*?)', response_text, re.DOTALL)
+ urls = re.findall(r'
]*class="[^"]*result__url[^"]*"[^>]*>(.*?)', response_text, re.DOTALL)
# Prepare download tasks
download_tasks = []
- for i, (tag_attrs, raw_title) in enumerate(zip(result_tags, result_links)):
- if num_pages is not None and i >= num_pages:
- break
- # Extract href and resolve the actual URL from DuckDuckGo's redirect link
- href_match = re.search(r'href="([^"]*)"', tag_attrs)
- if not href_match:
- continue
- uddg = parse_qs(urlparse(html.unescape(href_match.group(1))).query).get('uddg', [''])[0]
- if not uddg:
- continue
- title = html.unescape(re.sub(r'<[^>]+>', '', raw_title).strip())
- download_tasks.append((uddg, title, len(download_tasks)))
+ for i in range(min(len(titles), len(urls), num_pages)):
+ url = f"https://{urls[i].strip()}"
+ title = re.sub(r'<[^>]+>', '', titles[i]).strip()
+ title = html.unescape(title)
+ download_tasks.append((url, title, i))
search_results = [None] * len(download_tasks) # Pre-allocate to maintain order
- if not fetch_content:
- for url, title, index in download_tasks:
- search_results[index] = {
- 'title': title,
- 'url': url,
- 'content': ''
- }
-
- return search_results
-
# Download pages in parallel
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
# Submit all download tasks
diff --git a/one_click.py b/one_click.py
index 68998734..efb07134 100644
--- a/one_click.py
+++ b/one_click.py
@@ -91,7 +91,7 @@ def get_gpu_choice():
"What is your GPU?",
{
'A': 'NVIDIA',
- 'B': 'AMD - Linux only, ROCm 7.2',
+ 'B': 'AMD - Linux/macOS only, requires ROCm 6.4',
'C': 'Apple M Series',
'D': 'Intel Arc (beta)',
'N': 'CPU mode'
@@ -111,17 +111,18 @@ def get_gpu_choice():
def get_pytorch_install_command(gpu_choice):
"""Get PyTorch installation command based on GPU choice"""
base_cmd = f"python -m pip install torch=={TORCH_VERSION} "
- pypi_fallback = " --extra-index-url https://pypi.org/simple/"
if gpu_choice == "NVIDIA_CUDA128":
- return base_cmd + "--index-url https://download.pytorch.org/whl/cu128" + pypi_fallback
+ return base_cmd + "--index-url https://download.pytorch.org/whl/cu128"
elif gpu_choice == "AMD":
- py_tag = f"cp{PYTHON_VERSION.replace('.', '')}"
- return f"python -m pip install https://repo.radeon.com/rocm/manylinux/rocm-rel-7.2/torch-{TORCH_VERSION}%2Brocm7.2.0.lw.git7e1940d4-{py_tag}-{py_tag}-linux_x86_64.whl --find-links https://repo.radeon.com/rocm/manylinux/rocm-rel-7.2/"
+ return base_cmd + "--index-url https://download.pytorch.org/whl/rocm6.4"
elif gpu_choice in ["APPLE", "NONE"]:
- return base_cmd + "--index-url https://download.pytorch.org/whl/cpu" + pypi_fallback
+ return base_cmd + "--index-url https://download.pytorch.org/whl/cpu"
elif gpu_choice == "INTEL":
- return base_cmd + "--index-url https://download.pytorch.org/whl/xpu"
+ if is_linux():
+ return "python -m pip install torch==2.1.0a0 intel-extension-for-pytorch==2.1.10+xpu --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/"
+ else:
+ return "python -m pip install torch==2.1.0a0 intel-extension-for-pytorch==2.1.10 --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/"
else:
return base_cmd
@@ -129,17 +130,16 @@ def get_pytorch_install_command(gpu_choice):
def get_pytorch_update_command(gpu_choice):
"""Get PyTorch update command based on GPU choice"""
base_cmd = f"python -m pip install --upgrade torch=={TORCH_VERSION} "
- pypi_fallback = " --extra-index-url https://pypi.org/simple/"
if gpu_choice == "NVIDIA_CUDA128":
- return f"{base_cmd}--index-url https://download.pytorch.org/whl/cu128" + pypi_fallback
+ return f"{base_cmd} --index-url https://download.pytorch.org/whl/cu128"
elif gpu_choice == "AMD":
- py_tag = f"cp{PYTHON_VERSION.replace('.', '')}"
- return f"python -m pip install --upgrade https://repo.radeon.com/rocm/manylinux/rocm-rel-7.2/torch-{TORCH_VERSION}%2Brocm7.2.0.lw.git7e1940d4-{py_tag}-{py_tag}-linux_x86_64.whl --find-links https://repo.radeon.com/rocm/manylinux/rocm-rel-7.2/"
+ return f"{base_cmd} --index-url https://download.pytorch.org/whl/rocm6.4"
elif gpu_choice in ["APPLE", "NONE"]:
- return f"{base_cmd}--index-url https://download.pytorch.org/whl/cpu" + pypi_fallback
+ return f"{base_cmd} --index-url https://download.pytorch.org/whl/cpu"
elif gpu_choice == "INTEL":
- return f"{base_cmd}--index-url https://download.pytorch.org/whl/xpu"
+ intel_extension = "intel-extension-for-pytorch==2.1.10+xpu" if is_linux() else "intel-extension-for-pytorch==2.1.10"
+ return f"{base_cmd} {intel_extension} --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/"
else:
return base_cmd
@@ -194,8 +194,6 @@ def run_cmd(cmd, assert_success=False, environment=False, capture_output=False,
if environment:
if is_windows():
conda_bat_path = os.path.join(script_dir, "installer_files", "conda", "condabin", "conda.bat")
- python_path = os.path.join(conda_env_path, "python.exe")
- cmd = cmd.replace("python ", f'"{python_path}" ')
cmd = f'"{conda_bat_path}" activate "{conda_env_path}" >nul && {cmd}'
else:
conda_sh_path = os.path.join(script_dir, "installer_files", "conda", "etc", "profile.d", "conda.sh")
@@ -270,7 +268,7 @@ def update_pytorch_and_python():
def clean_outdated_pytorch_cuda_dependencies():
- patterns = ["cu121", "cu122", "rocm6", "torch2.4", "torch2.6", "torch2.7", "torchvision", "torchaudio"]
+ patterns = ["cu121", "cu122", "torch2.4", "torch2.6", "torch2.7", "torchvision", "torchaudio"]
result = run_cmd("python -m pip list --format=freeze", capture_output=True, environment=True)
matching_packages = []
@@ -316,6 +314,13 @@ def install_webui():
install_pytorch = get_pytorch_install_command(gpu_choice)
run_cmd(f"conda install -y ninja git && {install_pytorch}", assert_success=True, environment=True)
+ if gpu_choice == "INTEL":
+ # Install oneAPI dependencies via conda
+ print_big_message("Installing Intel oneAPI runtime libraries.")
+ run_cmd("conda install -y -c https://software.repos.intel.com/python/conda/ -c conda-forge dpcpp-cpp-rt=2024.0 mkl-dpcpp=2024.0", environment=True)
+ # Install libuv required by Intel-patched torch
+ run_cmd("conda install -y libuv", environment=True)
+
# Install the webui requirements
update_requirements(initial_installation=True, pull=False)
@@ -358,10 +363,8 @@ def update_requirements(initial_installation=False, pull=True):
current_commit = get_current_commit()
wheels_changed = not os.path.exists(state_file)
- installed_wheels = set()
if not wheels_changed:
state = load_state()
- installed_wheels = set(state.get('installed_wheels', []))
if 'wheels_changed' in state or state.get('last_installed_commit') != current_commit:
wheels_changed = True
@@ -426,17 +429,9 @@ def update_requirements(initial_installation=False, pull=True):
# Prepare the requirements file
textgen_requirements = open(requirements_file).read().splitlines()
- all_whl_lines = [line.strip() for line in textgen_requirements if '.whl' in line]
- if not initial_installation:
- if installed_wheels:
- # Per-wheel comparison: only re-download wheels that changed
- textgen_requirements = [
- line for line in textgen_requirements
- if '.whl' not in line or line.strip() not in installed_wheels
- ]
- elif not wheels_changed:
- textgen_requirements = [line for line in textgen_requirements if '.whl' not in line]
+ if not initial_installation and not wheels_changed:
+ textgen_requirements = [line for line in textgen_requirements if '.whl' not in line]
with open('temp_requirements.txt', 'w') as file:
file.write('\n'.join(textgen_requirements))
@@ -455,7 +450,6 @@ def update_requirements(initial_installation=False, pull=True):
# Save state after successful installation
state = load_state()
state['last_installed_commit'] = current_commit
- state['installed_wheels'] = all_whl_lines
state.pop('wheels_changed', None)
save_state(state)
diff --git a/requirements/full/requirements.txt b/requirements/full/requirements.txt
index ed5841b8..eaf34fa8 100644
--- a/requirements/full/requirements.txt
+++ b/requirements/full/requirements.txt
@@ -1,21 +1,21 @@
-accelerate==1.13.*
+accelerate==1.12.*
audioop-lts<1.0; python_version >= "3.13"
bitsandbytes==0.49.*
datasets
-diffusers==0.37.*
+diffusers==0.36.*
einops
fastapi==0.112.4
flash-linear-attention==0.4.*
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pandas
peft==0.18.*
Pillow>=9.5.0
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
@@ -25,15 +25,14 @@ scipy
sentencepiece
tensorboard
torchao==0.15.*
-trafilatura==2.0.0
-transformers==5.5.*
+transformers==5.3.*
triton-windows==3.5.1.post24; platform_system == "Windows"
tqdm
wandb
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
@@ -41,11 +40,9 @@ sse-starlette==1.6.5
tiktoken
# CUDA wheels
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+cu124-py3-none-win_amd64.whl; platform_system == "Windows"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+cu124-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/ik_llama_cpp_binaries-0.110.0+cu124-py3-none-win_amd64.whl; platform_system == "Windows"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/ik_llama_cpp_binaries-0.110.0+cu124-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
-https://github.com/turboderp-org/exllamav3/releases/download/v0.0.28/exllamav3-0.0.28+cu128.torch2.9.0-cp313-cp313-win_amd64.whl; platform_system == "Windows" and python_version == "3.13"
-https://github.com/turboderp-org/exllamav3/releases/download/v0.0.28/exllamav3-0.0.28+cu128.torch2.9.0-cp313-cp313-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.13"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+cu124-py3-none-win_amd64.whl; platform_system == "Windows"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+cu124-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
+https://github.com/turboderp-org/exllamav3/releases/download/v0.0.23/exllamav3-0.0.23+cu128.torch2.9.0-cp313-cp313-win_amd64.whl; platform_system == "Windows" and python_version == "3.13"
+https://github.com/turboderp-org/exllamav3/releases/download/v0.0.23/exllamav3-0.0.23+cu128.torch2.9.0-cp313-cp313-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.13"
https://github.com/kingbri1/flash-attention/releases/download/v2.8.3/flash_attn-2.8.3+cu128torch2.9.0cxx11abiFALSE-cp313-cp313-win_amd64.whl; platform_system == "Windows" and python_version == "3.13"
https://github.com/kingbri1/flash-attention/releases/download/v2.8.3/flash_attn-2.8.3+cu128torch2.9.0cxx11abiFALSE-cp313-cp313-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.13"
diff --git a/requirements/full/requirements_amd.txt b/requirements/full/requirements_amd.txt
index fe6ce28c..3211f251 100644
--- a/requirements/full/requirements_amd.txt
+++ b/requirements/full/requirements_amd.txt
@@ -1,19 +1,19 @@
-accelerate==1.13.*
+accelerate==1.12.*
audioop-lts<1.0; python_version >= "3.13"
datasets
-diffusers==0.37.*
+diffusers==0.36.*
einops
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pandas
peft==0.18.*
Pillow>=9.5.0
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
@@ -23,14 +23,13 @@ scipy
sentencepiece
tensorboard
torchao==0.15.*
-transformers==5.5.*
+transformers==5.3.*
tqdm
-trafilatura==2.0.0
wandb
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
@@ -38,5 +37,5 @@ sse-starlette==1.6.5
tiktoken
# AMD wheels
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+rocm7.2-py3-none-win_amd64.whl; platform_system == "Windows"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+rocm7.2-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+rocm6.4-py3-none-win_amd64.whl; platform_system == "Windows"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+rocm6.4-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
diff --git a/requirements/full/requirements_apple_intel.txt b/requirements/full/requirements_apple_intel.txt
index 09c01a61..8d452114 100644
--- a/requirements/full/requirements_apple_intel.txt
+++ b/requirements/full/requirements_apple_intel.txt
@@ -1,19 +1,19 @@
-accelerate==1.13.*
+accelerate==1.12.*
audioop-lts<1.0; python_version >= "3.13"
datasets
-diffusers==0.37.*
+diffusers==0.36.*
einops
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pandas
peft==0.18.*
Pillow>=9.5.0
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
@@ -23,14 +23,13 @@ scipy
sentencepiece
tensorboard
torchao==0.15.*
-transformers==5.5.*
+transformers==5.3.*
tqdm
-trafilatura==2.0.0
wandb
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
@@ -38,4 +37,4 @@ sse-starlette==1.6.5
tiktoken
# Mac wheels
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0-py3-none-macosx_13_0_x86_64.whl; platform_system == "Darwin"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0-py3-none-macosx_13_0_x86_64.whl; platform_system == "Darwin"
diff --git a/requirements/full/requirements_apple_silicon.txt b/requirements/full/requirements_apple_silicon.txt
index 42210407..525ceed5 100644
--- a/requirements/full/requirements_apple_silicon.txt
+++ b/requirements/full/requirements_apple_silicon.txt
@@ -1,19 +1,19 @@
-accelerate==1.13.*
+accelerate==1.12.*
audioop-lts<1.0; python_version >= "3.13"
datasets
-diffusers==0.37.*
+diffusers==0.36.*
einops
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pandas
peft==0.18.*
Pillow>=9.5.0
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
@@ -23,14 +23,13 @@ scipy
sentencepiece
tensorboard
torchao==0.15.*
-transformers==5.5.*
+transformers==5.3.*
tqdm
-trafilatura==2.0.0
wandb
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
@@ -38,4 +37,4 @@ sse-starlette==1.6.5
tiktoken
# Mac wheels
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0-py3-none-macosx_13_0_arm64.whl; platform_system == "Darwin"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0-py3-none-macosx_13_0_arm64.whl; platform_system == "Darwin"
diff --git a/requirements/full/requirements_cpu_only.txt b/requirements/full/requirements_cpu_only.txt
index 5cd7ae7d..86b65a97 100644
--- a/requirements/full/requirements_cpu_only.txt
+++ b/requirements/full/requirements_cpu_only.txt
@@ -1,19 +1,19 @@
-accelerate==1.13.*
+accelerate==1.12.*
audioop-lts<1.0; python_version >= "3.13"
datasets
-diffusers==0.37.*
+diffusers==0.36.*
einops
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pandas
peft==0.18.*
Pillow>=9.5.0
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
@@ -23,14 +23,13 @@ scipy
sentencepiece
tensorboard
torchao==0.15.*
-transformers==5.5.*
+transformers==5.3.*
tqdm
-trafilatura==2.0.0
wandb
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
@@ -38,7 +37,5 @@ sse-starlette==1.6.5
tiktoken
# llama.cpp (CPU only)
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+cpu-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+cpu-py3-none-win_amd64.whl; platform_system == "Windows"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/ik_llama_cpp_binaries-0.110.0+cpu-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/ik_llama_cpp_binaries-0.110.0+cpu-py3-none-win_amd64.whl; platform_system == "Windows"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+cpu-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+cpu-py3-none-win_amd64.whl; platform_system == "Windows"
diff --git a/requirements/full/requirements_nowheels.txt b/requirements/full/requirements_nowheels.txt
index 19ac5183..0a924d31 100644
--- a/requirements/full/requirements_nowheels.txt
+++ b/requirements/full/requirements_nowheels.txt
@@ -1,19 +1,19 @@
-accelerate==1.13.*
+accelerate==1.12.*
audioop-lts<1.0; python_version >= "3.13"
datasets
-diffusers==0.37.*
+diffusers==0.36.*
einops
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pandas
peft==0.18.*
Pillow>=9.5.0
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
@@ -23,14 +23,13 @@ scipy
sentencepiece
tensorboard
torchao==0.15.*
-transformers==5.5.*
+transformers==5.3.*
tqdm
-trafilatura==2.0.0
wandb
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
diff --git a/requirements/portable/requirements.txt b/requirements/portable/requirements.txt
index 807ff079..61c9ef73 100644
--- a/requirements/portable/requirements.txt
+++ b/requirements/portable/requirements.txt
@@ -1,22 +1,21 @@
audioop-lts<1.0; python_version >= "3.13"
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
rich
-trafilatura==2.0.0
tqdm
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
@@ -24,5 +23,5 @@ sse-starlette==1.6.5
tiktoken
# CUDA wheels
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+cu124-py3-none-win_amd64.whl; platform_system == "Windows"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+cu124-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+cu124-py3-none-win_amd64.whl; platform_system == "Windows"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+cu124-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
diff --git a/requirements/portable/requirements_amd.txt b/requirements/portable/requirements_amd.txt
index 55fe79ea..3d0785a3 100644
--- a/requirements/portable/requirements_amd.txt
+++ b/requirements/portable/requirements_amd.txt
@@ -1,22 +1,21 @@
audioop-lts<1.0; python_version >= "3.13"
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
rich
-trafilatura==2.0.0
tqdm
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
@@ -24,5 +23,5 @@ sse-starlette==1.6.5
tiktoken
# AMD wheels
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+rocm7.2-py3-none-win_amd64.whl; platform_system == "Windows"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+rocm7.2-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+rocm6.4-py3-none-win_amd64.whl; platform_system == "Windows"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+rocm6.4-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
diff --git a/requirements/portable/requirements_apple_intel.txt b/requirements/portable/requirements_apple_intel.txt
index 6d4a63f7..6805e209 100644
--- a/requirements/portable/requirements_apple_intel.txt
+++ b/requirements/portable/requirements_apple_intel.txt
@@ -1,22 +1,21 @@
audioop-lts<1.0; python_version >= "3.13"
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
rich
-trafilatura==2.0.0
tqdm
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
@@ -24,4 +23,4 @@ sse-starlette==1.6.5
tiktoken
# Mac wheels
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0-py3-none-macosx_13_0_x86_64.whl; platform_system == "Darwin"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0-py3-none-macosx_13_0_x86_64.whl; platform_system == "Darwin"
diff --git a/requirements/portable/requirements_apple_silicon.txt b/requirements/portable/requirements_apple_silicon.txt
index aebb7c5b..5a8ed87b 100644
--- a/requirements/portable/requirements_apple_silicon.txt
+++ b/requirements/portable/requirements_apple_silicon.txt
@@ -1,22 +1,21 @@
audioop-lts<1.0; python_version >= "3.13"
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
rich
-trafilatura==2.0.0
tqdm
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
@@ -24,4 +23,4 @@ sse-starlette==1.6.5
tiktoken
# Mac wheels
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0-py3-none-macosx_13_0_arm64.whl; platform_system == "Darwin"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0-py3-none-macosx_13_0_arm64.whl; platform_system == "Darwin"
diff --git a/requirements/portable/requirements_cpu_only.txt b/requirements/portable/requirements_cpu_only.txt
index d7e2b051..fafa23cf 100644
--- a/requirements/portable/requirements_cpu_only.txt
+++ b/requirements/portable/requirements_cpu_only.txt
@@ -1,22 +1,21 @@
audioop-lts<1.0; python_version >= "3.13"
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
rich
-trafilatura==2.0.0
tqdm
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
@@ -24,5 +23,5 @@ sse-starlette==1.6.5
tiktoken
# llama.cpp (CPU only)
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+cpu-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+cpu-py3-none-win_amd64.whl; platform_system == "Windows"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+cpu-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+cpu-py3-none-win_amd64.whl; platform_system == "Windows"
diff --git a/requirements/portable/requirements_cuda131.txt b/requirements/portable/requirements_cuda131.txt
index 42a9a16f..3ef59f97 100644
--- a/requirements/portable/requirements_cuda131.txt
+++ b/requirements/portable/requirements_cuda131.txt
@@ -1,22 +1,21 @@
audioop-lts<1.0; python_version >= "3.13"
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
rich
-trafilatura==2.0.0
tqdm
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
@@ -24,5 +23,5 @@ sse-starlette==1.6.5
tiktoken
# CUDA wheels
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+cu131-py3-none-win_amd64.whl; platform_system == "Windows"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+cu131-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+cu131-py3-none-win_amd64.whl; platform_system == "Windows"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+cu131-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
diff --git a/requirements/portable/requirements_ik.txt b/requirements/portable/requirements_ik.txt
deleted file mode 100644
index c3fdb5e8..00000000
--- a/requirements/portable/requirements_ik.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-audioop-lts<1.0; python_version >= "3.13"
-fastapi==0.112.4
-huggingface-hub==1.5.*
-jinja2==3.1.6
-markdown
-mcp==1.27.0
-numpy==2.2.*
-pydantic==2.11.0
-pymupdf==1.27.*
-python-docx==1.1.2
-pyyaml
-requests
-rich
-trafilatura==2.0.0
-tqdm
-
-# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
-
-# API
-flask_cloudflared==0.0.15
-sse-starlette==1.6.5
-tiktoken
-
-# CUDA wheels
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/ik_llama_cpp_binaries-0.110.0+cu124-py3-none-win_amd64.whl; platform_system == "Windows"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/ik_llama_cpp_binaries-0.110.0+cu124-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
diff --git a/requirements/portable/requirements_ik_cpu_only.txt b/requirements/portable/requirements_ik_cpu_only.txt
deleted file mode 100644
index ea3ba601..00000000
--- a/requirements/portable/requirements_ik_cpu_only.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-audioop-lts<1.0; python_version >= "3.13"
-fastapi==0.112.4
-huggingface-hub==1.5.*
-jinja2==3.1.6
-markdown
-mcp==1.27.0
-numpy==2.2.*
-pydantic==2.11.0
-pymupdf==1.27.*
-python-docx==1.1.2
-pyyaml
-requests
-rich
-trafilatura==2.0.0
-tqdm
-
-# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
-
-# API
-flask_cloudflared==0.0.15
-sse-starlette==1.6.5
-tiktoken
-
-# ik_llama.cpp (CPU only)
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/ik_llama_cpp_binaries-0.110.0+cpu-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/ik_llama_cpp_binaries-0.110.0+cpu-py3-none-win_amd64.whl; platform_system == "Windows"
diff --git a/requirements/portable/requirements_ik_cuda131.txt b/requirements/portable/requirements_ik_cuda131.txt
deleted file mode 100644
index 7530375d..00000000
--- a/requirements/portable/requirements_ik_cuda131.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-audioop-lts<1.0; python_version >= "3.13"
-fastapi==0.112.4
-huggingface-hub==1.5.*
-jinja2==3.1.6
-markdown
-mcp==1.27.0
-numpy==2.2.*
-pydantic==2.11.0
-pymupdf==1.27.*
-python-docx==1.1.2
-pyyaml
-requests
-rich
-trafilatura==2.0.0
-tqdm
-
-# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
-
-# API
-flask_cloudflared==0.0.15
-sse-starlette==1.6.5
-tiktoken
-
-# CUDA wheels
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/ik_llama_cpp_binaries-0.110.0+cu131-py3-none-win_amd64.whl; platform_system == "Windows"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/ik_llama_cpp_binaries-0.110.0+cu131-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
diff --git a/requirements/portable/requirements_nowheels.txt b/requirements/portable/requirements_nowheels.txt
index cafe3cee..c2fc33eb 100644
--- a/requirements/portable/requirements_nowheels.txt
+++ b/requirements/portable/requirements_nowheels.txt
@@ -1,22 +1,21 @@
audioop-lts<1.0; python_version >= "3.13"
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
rich
-trafilatura==2.0.0
tqdm
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
diff --git a/requirements/portable/requirements_vulkan.txt b/requirements/portable/requirements_vulkan.txt
index 3b8b0573..6039357d 100644
--- a/requirements/portable/requirements_vulkan.txt
+++ b/requirements/portable/requirements_vulkan.txt
@@ -1,22 +1,21 @@
audioop-lts<1.0; python_version >= "3.13"
fastapi==0.112.4
+html2text==2025.4.15
huggingface-hub==1.5.*
jinja2==3.1.6
markdown
-mcp==1.27.0
numpy==2.2.*
pydantic==2.11.0
-pymupdf==1.27.*
+pymupdf==1.27.1
python-docx==1.1.2
pyyaml
requests
rich
-trafilatura==2.0.0
tqdm
# Gradio
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio-4.37.2+custom.19-py3-none-any.whl
-https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.19/gradio_client-1.0.2+custom.19-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio-4.37.2+custom.9-py3-none-any.whl
+https://github.com/oobabooga/gradio/releases/download/4.37.2-custom.9/gradio_client-1.0.2+custom.9-py3-none-any.whl
# API
flask_cloudflared==0.0.15
@@ -24,5 +23,5 @@ sse-starlette==1.6.5
tiktoken
# Vulkan wheels
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+vulkan-py3-none-win_amd64.whl; platform_system == "Windows"
-https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.110.0/llama_cpp_binaries-0.110.0+vulkan-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+vulkan-py3-none-win_amd64.whl; platform_system == "Windows"
+https://github.com/oobabooga/llama-cpp-binaries/releases/download/v0.87.0/llama_cpp_binaries-0.87.0+vulkan-py3-none-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64"
diff --git a/server.py b/server.py
index 88936ca6..ff2d1db2 100644
--- a/server.py
+++ b/server.py
@@ -1,41 +1,70 @@
import os
-import signal
-import sys
-import time
+import shutil
import warnings
-from functools import partial
from pathlib import Path
-from threading import Lock, Thread
-import yaml
-
-from modules import shared, utils
+from modules import shared, ui # ui must be imported early to avoid circular imports
from modules.image_models import load_image_model
from modules.logging_colors import logger
from modules.prompts import load_prompt
-import modules.extensions as extensions_module
-from modules.LoRA import add_lora_to_model
-from modules.models import load_model, unload_model_if_idle
-from modules.models_settings import (
- get_model_metadata,
- update_model_parameters
-)
-from modules.shared import do_cmd_flags_warnings
+# Set up Gradio temp directory path
+gradio_temp_path = shared.user_data_dir / 'cache' / 'gradio'
+shutil.rmtree(gradio_temp_path, ignore_errors=True)
+gradio_temp_path.mkdir(parents=True, exist_ok=True)
-os.environ['BITSANDBYTES_NOWELCOME'] = '1'
+# Set environment variables
+os.environ.update({
+ 'GRADIO_ANALYTICS_ENABLED': 'False',
+ 'BITSANDBYTES_NOWELCOME': '1',
+ 'GRADIO_TEMP_DIR': str(gradio_temp_path)
+})
warnings.filterwarnings('ignore', category=UserWarning, message='TypedStorage is deprecated')
warnings.filterwarnings('ignore', category=UserWarning, message='Using the update method is deprecated')
warnings.filterwarnings('ignore', category=UserWarning, message='Field "model_name" has conflict')
+warnings.filterwarnings('ignore', category=UserWarning, message='The value passed into gr.Dropdown()')
warnings.filterwarnings('ignore', category=UserWarning, message='Field "model_names" has conflict')
+import gradio as gr
+
+import os
+import signal
+import sys
+import time
+from functools import partial
+from threading import Lock, Thread
+
+import yaml
+
+import modules.extensions as extensions_module
+from modules import (
+ training,
+ ui,
+ ui_chat,
+ ui_default,
+ ui_file_saving,
+ ui_image_generation,
+ ui_model_menu,
+ ui_notebook,
+ ui_parameters,
+ ui_session,
+ utils
+)
+from modules.chat import generate_pfp_cache
+from modules.extensions import apply_extensions
+from modules.LoRA import add_lora_to_model
+from modules.models import load_model, unload_model_if_idle
+from modules.models_settings import (
+ get_fallback_settings,
+ get_model_metadata,
+ update_model_parameters
+)
+from modules.shared import do_cmd_flags_warnings
+from modules.utils import gradio
+
def signal_handler(sig, frame):
- # On second Ctrl+C, force an immediate exit
- signal.signal(signal.SIGINT, signal.SIG_DFL)
- signal.signal(signal.SIGTERM, signal.SIG_DFL)
-
logger.info("Received Ctrl+C. Shutting down Text Generation Web UI gracefully.")
# Explicitly stop LlamaServer to avoid __del__ cleanup issues during shutdown
@@ -54,37 +83,6 @@ signal.signal(signal.SIGTERM, signal_handler)
def create_interface():
- import shutil
-
- import gradio as gr
-
- from modules import (
- training,
- ui,
- ui_chat,
- ui_default,
- ui_file_saving,
- ui_image_generation,
- ui_model_menu,
- ui_notebook,
- ui_parameters,
- ui_session,
- )
- from modules.chat import generate_pfp_cache
- from modules.extensions import apply_extensions
- from modules.utils import gradio
-
- warnings.filterwarnings('ignore', category=UserWarning, message='The value passed into gr.Dropdown()')
-
- # Set up Gradio temp directory path
- gradio_temp_path = shared.user_data_dir / 'cache' / 'gradio'
- shutil.rmtree(gradio_temp_path, ignore_errors=True)
- gradio_temp_path.mkdir(parents=True, exist_ok=True)
- os.environ.update({
- 'GRADIO_ANALYTICS_ENABLED': 'False',
- 'GRADIO_TEMP_DIR': str(gradio_temp_path)
- })
-
title = 'Text Generation Web UI'
# Password authentication
@@ -105,11 +103,6 @@ def create_interface():
if shared.args.extensions is not None and len(shared.args.extensions) > 0:
extensions_module.load_extensions()
- # Start the API server if enabled
- if shared.args.api or shared.args.public_api:
- from modules.api.script import setup as api_setup
- api_setup()
-
# Force some events to be triggered on page load
shared.persistent_interface_state.update({
'mode': shared.settings['mode'],
@@ -222,10 +215,6 @@ def create_interface():
shared.gradio['interface'].load(partial(ui.apply_interface_values, {}, use_persistent=True), None, gradio(ui.list_interface_input_elements()), show_progress=False)
- # Sync theme_state with the actual client-side theme so that
- # autosave always writes the correct dark_theme value.
- shared.gradio['interface'].load(None, None, gradio('theme_state'), js='() => document.body.classList.contains("dark") ? "dark" : "light"')
-
extensions_module.create_extensions_tabs() # Extensions tabs
extensions_module.create_extensions_block() # Extensions block
@@ -270,24 +259,17 @@ if __name__ == "__main__":
# Apply CLI overrides for image model settings (CLI flags take precedence over saved settings)
shared.apply_image_model_cli_overrides()
+ # Fallback settings for models
+ shared.model_config['.*'] = get_fallback_settings()
+ shared.model_config.move_to_end('.*', last=False) # Move to the beginning
+
# Activate the extensions listed on settings.yaml
extensions_module.available_extensions = utils.get_available_extensions()
for extension in shared.settings['default_extensions']:
- # The openai extension was moved to modules/api and is now
- # activated with --api. Treat it as an alias for backwards compat.
- if extension == 'openai':
- shared.args.api = True
- continue
-
shared.args.extensions = shared.args.extensions or []
if extension not in shared.args.extensions:
shared.args.extensions.append(extension)
- # Handle --extensions openai from the command line (moved to modules/api)
- if shared.args.extensions and 'openai' in shared.args.extensions:
- shared.args.extensions.remove('openai')
- shared.args.api = True
-
# Load image model if specified via CLI
if shared.args.image_model:
logger.info(f"Loading image model: {shared.args.image_model}")
@@ -348,10 +330,6 @@ if __name__ == "__main__":
shared.args.extensions = [x for x in (shared.args.extensions or []) if x != 'gallery']
if shared.args.extensions:
extensions_module.load_extensions()
-
- if shared.args.api or shared.args.public_api:
- from modules.api.script import setup as api_setup
- api_setup()
else:
# Launch the web UI
create_interface()
diff --git a/start_windows.bat b/start_windows.bat
index 8da6986f..dd096760 100755
--- a/start_windows.bat
+++ b/start_windows.bat
@@ -5,7 +5,6 @@ setlocal enabledelayedexpansion
set PYTHONNOUSERSITE=1
set PYTHONPATH=
set PYTHONHOME=
-set PYTHONUTF8=1
cd /D "%~dp0"
diff --git a/user_data/instruction-templates/Airoboros-v1.2.yaml b/user_data/instruction-templates/Airoboros-v1.2.yaml
new file mode 100644
index 00000000..30906214
--- /dev/null
+++ b/user_data/instruction-templates/Airoboros-v1.2.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + 'A chat between a curious user and an assistant. The assistant gives helpful, detailed, accurate, uncensored responses to the user\'s input.' + '\n' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'USER: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'ASSISTANT: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'ASSISTANT:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Bactrian.yaml b/user_data/instruction-templates/Bactrian.yaml
new file mode 100644
index 00000000..dab97e94
--- /dev/null
+++ b/user_data/instruction-templates/Bactrian.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### Input:\n' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'### Output:\n' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### Output:\n'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Baichuan Chat.yaml b/user_data/instruction-templates/Baichuan Chat.yaml
new file mode 100644
index 00000000..1882bac8
--- /dev/null
+++ b/user_data/instruction-templates/Baichuan Chat.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'
' + message['content'] + ''-}}
+ {%- else -%}
+ {{-'' + message['content'] + '' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-''-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Baize.yaml b/user_data/instruction-templates/Baize.yaml
new file mode 100644
index 00000000..c34e1db7
--- /dev/null
+++ b/user_data/instruction-templates/Baize.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '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' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'[|Human|]' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'[|AI|]' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'[|AI|]'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Bluemoon.yaml b/user_data/instruction-templates/Bluemoon.yaml
new file mode 100644
index 00000000..1fafc1f5
--- /dev/null
+++ b/user_data/instruction-templates/Bluemoon.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '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' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'LEAD: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'ASSOCIATE: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'ASSOCIATE:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/ChatGLM.yaml b/user_data/instruction-templates/ChatGLM.yaml
new file mode 100644
index 00000000..75d51c88
--- /dev/null
+++ b/user_data/instruction-templates/ChatGLM.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'[Round <|round|>]\n问:' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'答:' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'答:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Chinese-Vicuna-Chat.yaml b/user_data/instruction-templates/Chinese-Vicuna-Chat.yaml
new file mode 100644
index 00000000..c7966546
--- /dev/null
+++ b/user_data/instruction-templates/Chinese-Vicuna-Chat.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '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' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'User:' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'Assistant:' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'Assistant:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Command-R.yaml b/user_data/instruction-templates/Command-R.yaml
new file mode 100644
index 00000000..f8bb8a08
--- /dev/null
+++ b/user_data/instruction-templates/Command-R.yaml
@@ -0,0 +1,26 @@
+instruction_template: |-
+ {%- if messages[0]['role'] == 'system' -%}
+ {%- set loop_messages = messages[1:] -%}
+ {%- set system_message = messages[0]['content'] -%}
+ {%- elif false == true -%}
+ {%- set loop_messages = messages -%}
+ {%- 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.' -%}
+ {%- else -%}
+ {%- set loop_messages = messages -%}
+ {%- set system_message = false -%}
+ {%- endif -%}
+ {%- if system_message != false -%}
+ {{ '<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>' + system_message + '<|END_OF_TURN_TOKEN|>' }}
+ {%- endif -%}
+ {%- for message in loop_messages -%}
+ {%- set content = message['content'] -%}
+ {%- if message['role'] == 'user' -%}
+ {{ '<|START_OF_TURN_TOKEN|><|USER_TOKEN|>' + content.strip() + '<|END_OF_TURN_TOKEN|>' }}
+ {%- elif message['role'] == 'assistant' -%}
+ {{ '<|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>' + content.strip() + '<|END_OF_TURN_TOKEN|>' }}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{ '<|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>' }}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Galactica Cite.yaml b/user_data/instruction-templates/Galactica Cite.yaml
new file mode 100644
index 00000000..9f555349
--- /dev/null
+++ b/user_data/instruction-templates/Galactica Cite.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'' + message['content'] + ' '-}}
+ {%- else -%}
+ {{-'[START_REF]' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'[START_REF]'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Galactica Finetuned.yaml b/user_data/instruction-templates/Galactica Finetuned.yaml
new file mode 100644
index 00000000..e0a66bc1
--- /dev/null
+++ b/user_data/instruction-templates/Galactica Finetuned.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'' + message['content'] + ''-}}
+ {%- else -%}
+ {{-'' + message['content'] + '' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-''-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Galactica Q.yaml b/user_data/instruction-templates/Galactica Q.yaml
new file mode 100644
index 00000000..63319006
--- /dev/null
+++ b/user_data/instruction-templates/Galactica Q.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'Q: ' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'A: ' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'A:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Galactica Summary.yaml b/user_data/instruction-templates/Galactica Summary.yaml
new file mode 100644
index 00000000..e249f268
--- /dev/null
+++ b/user_data/instruction-templates/Galactica Summary.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'TLDR:' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'TLDR:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Galactica Work.yaml b/user_data/instruction-templates/Galactica Work.yaml
new file mode 100644
index 00000000..a14c28bb
--- /dev/null
+++ b/user_data/instruction-templates/Galactica Work.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'Question: ' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-''-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Galactica v2.yaml b/user_data/instruction-templates/Galactica v2.yaml
new file mode 100644
index 00000000..b1d8f4e5
--- /dev/null
+++ b/user_data/instruction-templates/Galactica v2.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + 'You are a helpful chatbot name Stan' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'' + message['content'] + ''-}}
+ {%- else -%}
+ {{-'' + message['content'] + '' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-''-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Galactica.yaml b/user_data/instruction-templates/Galactica.yaml
new file mode 100644
index 00000000..58c70220
--- /dev/null
+++ b/user_data/instruction-templates/Galactica.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'Question: ' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'Answer: ' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'Answer:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Gorilla.yaml b/user_data/instruction-templates/Gorilla.yaml
new file mode 100644
index 00000000..f1d643f7
--- /dev/null
+++ b/user_data/instruction-templates/Gorilla.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'###USER: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'###ASSISTANT: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'###ASSISTANT:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Guanaco non-chat.yaml b/user_data/instruction-templates/Guanaco non-chat.yaml
new file mode 100644
index 00000000..aa398be4
--- /dev/null
+++ b/user_data/instruction-templates/Guanaco non-chat.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### Instruction:\n' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'### Response:\n' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### Response:\n'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Guanaco-QLoRA.yaml b/user_data/instruction-templates/Guanaco-QLoRA.yaml
new file mode 100644
index 00000000..2c77de78
--- /dev/null
+++ b/user_data/instruction-templates/Guanaco-QLoRA.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### Human: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'### Assistant: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### Assistant:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/H2O-prompt_answer.yaml b/user_data/instruction-templates/H2O-prompt_answer.yaml
new file mode 100644
index 00000000..d895d8e1
--- /dev/null
+++ b/user_data/instruction-templates/H2O-prompt_answer.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'<|prompt|>' + message['content'] + '<|endoftext|>'-}}
+ {%- else -%}
+ {{-'<|answer|>' + message['content'] + '<|endoftext|>' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'<|answer|>'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Hippogriff.yaml b/user_data/instruction-templates/Hippogriff.yaml
new file mode 100644
index 00000000..2ee9d926
--- /dev/null
+++ b/user_data/instruction-templates/Hippogriff.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + 'You are a helpful assistant' + '\n' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'USER: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'ASSISTANT: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'ASSISTANT:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/INCITE-Chat.yaml b/user_data/instruction-templates/INCITE-Chat.yaml
new file mode 100644
index 00000000..63c513cc
--- /dev/null
+++ b/user_data/instruction-templates/INCITE-Chat.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-': ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-':' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-':'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/INCITE-Instruct.yaml b/user_data/instruction-templates/INCITE-Instruct.yaml
new file mode 100644
index 00000000..cf6f8cac
--- /dev/null
+++ b/user_data/instruction-templates/INCITE-Instruct.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'Q: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'A:' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'A:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/KoAlpaca.yaml b/user_data/instruction-templates/KoAlpaca.yaml
new file mode 100644
index 00000000..de96b155
--- /dev/null
+++ b/user_data/instruction-templates/KoAlpaca.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### 질문: ' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'### 답변:' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### 답변:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Koala.yaml b/user_data/instruction-templates/Koala.yaml
new file mode 100644
index 00000000..cd5cfa94
--- /dev/null
+++ b/user_data/instruction-templates/Koala.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + 'BEGINNING OF CONVERSATION:' + ' ' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + ' ' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'USER: ' + message['content'] + ' '-}}
+ {%- else -%}
+ {{-'GPT:' + message['content'] + '' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'GPT:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/LLaVA.yaml b/user_data/instruction-templates/LLaVA.yaml
new file mode 100644
index 00000000..d66645cc
--- /dev/null
+++ b/user_data/instruction-templates/LLaVA.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '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' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### Human: ' + message['content'] + ''-}}
+ {%- else -%}
+ {{-'### Assistant: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### Assistant:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Llama-v2.yaml b/user_data/instruction-templates/Llama-v2.yaml
new file mode 100644
index 00000000..b92be973
--- /dev/null
+++ b/user_data/instruction-templates/Llama-v2.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '[INST] <>\n' + 'Answer the questions.' + '\n<>\n\n' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '[INST] <>\n' + message['content'] + '\n<>\n\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'' + message['content'] + ' [/INST] '-}}
+ {%- else -%}
+ {{-'' + message['content'] + ' [INST] ' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-''-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/MOSS.yaml b/user_data/instruction-templates/MOSS.yaml
new file mode 100644
index 00000000..b001d3e1
--- /dev/null
+++ b/user_data/instruction-templates/MOSS.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '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' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'<|Human|>: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'<|MOSS|>: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'<|MOSS|>:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Manticore Chat.yaml b/user_data/instruction-templates/Manticore Chat.yaml
new file mode 100644
index 00000000..abc063c0
--- /dev/null
+++ b/user_data/instruction-templates/Manticore Chat.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'USER: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'ASSISTANT:' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'ASSISTANT:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Metharme.yaml b/user_data/instruction-templates/Metharme.yaml
new file mode 100644
index 00000000..3f7099ac
--- /dev/null
+++ b/user_data/instruction-templates/Metharme.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'<|user|>' + message['content'] + ''-}}
+ {%- else -%}
+ {{-'<|model|>' + message['content'] + '' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'<|model|>'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/NVIDIA-ChatQA.yaml b/user_data/instruction-templates/NVIDIA-ChatQA.yaml
new file mode 100644
index 00000000..85a6266b
--- /dev/null
+++ b/user_data/instruction-templates/NVIDIA-ChatQA.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- 'System:' + message['content'] + '\n\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'User: ' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'Assistant: ' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'Assistant:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/NewHope.yaml b/user_data/instruction-templates/NewHope.yaml
new file mode 100644
index 00000000..4783798b
--- /dev/null
+++ b/user_data/instruction-templates/NewHope.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### Instruction:\n' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'### Response:\n' + message['content'] + ' ' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### Response:\n'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/OpenBuddy.yaml b/user_data/instruction-templates/OpenBuddy.yaml
new file mode 100644
index 00000000..c4b80ceb
--- /dev/null
+++ b/user_data/instruction-templates/OpenBuddy.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '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' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'User: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'Assistant: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'Assistant:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/OpenChat.yaml b/user_data/instruction-templates/OpenChat.yaml
new file mode 100644
index 00000000..adef9b47
--- /dev/null
+++ b/user_data/instruction-templates/OpenChat.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'GPT4 User: ' + message['content'] + '<|end_of_turn|>'-}}
+ {%- else -%}
+ {{-'GPT4 Assistant: ' + message['content'] + '<|end_of_turn|>' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'GPT4 Assistant:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/OpenOrca-Platypus2.yaml b/user_data/instruction-templates/OpenOrca-Platypus2.yaml
new file mode 100644
index 00000000..a5eeef92
--- /dev/null
+++ b/user_data/instruction-templates/OpenOrca-Platypus2.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### Instruction: ' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'### Response: ' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### Response:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Orca Mini.yaml b/user_data/instruction-templates/Orca Mini.yaml
new file mode 100644
index 00000000..f671642a
--- /dev/null
+++ b/user_data/instruction-templates/Orca Mini.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '### System:\n' + 'You are an AI assistant that follows instruction extremely well. Help as much as you can.' + '\n\n' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '### System:\n' + message['content'] + '\n\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### User:\n' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'### Response:\n' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### Response:\n'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Orca-Vicuna.yaml b/user_data/instruction-templates/Orca-Vicuna.yaml
new file mode 100644
index 00000000..dad787d1
--- /dev/null
+++ b/user_data/instruction-templates/Orca-Vicuna.yaml
@@ -0,0 +1,24 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{-'SYSTEM: ' + '' + '\n' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{-'SYSTEM: ' + message['content'] + '\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'USER: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'ASSISTANT: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'ASSISTANT:'-}}
+ {%- endif -%}
diff --git a/user_data/instruction-templates/RWKV-Raven.yaml b/user_data/instruction-templates/RWKV-Raven.yaml
new file mode 100644
index 00000000..df1e59e9
--- /dev/null
+++ b/user_data/instruction-templates/RWKV-Raven.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'Bob: ' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'Alice: ' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'Alice:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/RWKV-World.yaml b/user_data/instruction-templates/RWKV-World.yaml
new file mode 100644
index 00000000..bf65511b
--- /dev/null
+++ b/user_data/instruction-templates/RWKV-World.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'User: ' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'Assistant: ' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'Assistant:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Samantha.yaml b/user_data/instruction-templates/Samantha.yaml
new file mode 100644
index 00000000..930b0fc8
--- /dev/null
+++ b/user_data/instruction-templates/Samantha.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + 'You are Samantha, a sentient AI.' + '\n\n' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'USER: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'ASSISTANT: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'ASSISTANT:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/StableBeluga2.yaml b/user_data/instruction-templates/StableBeluga2.yaml
new file mode 100644
index 00000000..d7d74319
--- /dev/null
+++ b/user_data/instruction-templates/StableBeluga2.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '### System:\n' + 'This is a system prompt, please behave and help the user.' + '\n\n' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '### System:\n' + message['content'] + '\n\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### User:\n' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'### Assistant:\n' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### Assistant:\n'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/StableLM.yaml b/user_data/instruction-templates/StableLM.yaml
new file mode 100644
index 00000000..7c80ca06
--- /dev/null
+++ b/user_data/instruction-templates/StableLM.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '<|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' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '<|SYSTEM|>' + message['content'] + '\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'<|USER|>' + message['content'] + ''-}}
+ {%- else -%}
+ {{-'<|ASSISTANT|>' + message['content'] + '' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'<|ASSISTANT|>'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/StableVicuna.yaml b/user_data/instruction-templates/StableVicuna.yaml
new file mode 100644
index 00000000..35c15846
--- /dev/null
+++ b/user_data/instruction-templates/StableVicuna.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '### Assistant: I am StableVicuna, a large language model created by CarperAI. I am here to chat!' + '\n\n' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### Human: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'### Assistant: ' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### Assistant:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Starchat-Beta.yaml b/user_data/instruction-templates/Starchat-Beta.yaml
new file mode 100644
index 00000000..a96b0f28
--- /dev/null
+++ b/user_data/instruction-templates/Starchat-Beta.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '<|system|>' + '' + '\n<|end|>\n' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '<|system|>' + message['content'] + '\n<|end|>\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'<|user|>\n' + message['content'] + '<|end|>\n'-}}
+ {%- else -%}
+ {{-'<|assistant|>\n' + message['content'] + '<|end|>\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'<|assistant|>\n'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Synthia-CoT.yaml b/user_data/instruction-templates/Synthia-CoT.yaml
new file mode 100644
index 00000000..5670be77
--- /dev/null
+++ b/user_data/instruction-templates/Synthia-CoT.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set found_item = false -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set found_item = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not found_item -%}
+ {{-'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' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{-'SYSTEM: ' + message['content'] + '\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'USER: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'ASSISTANT: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'ASSISTANT:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Synthia.yaml b/user_data/instruction-templates/Synthia.yaml
new file mode 100644
index 00000000..5cecabea
--- /dev/null
+++ b/user_data/instruction-templates/Synthia.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set found_item = false -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set found_item = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not found_item -%}
+ {{-'SYSTEM: ' + 'Answer the question thoughtfully and intelligently. Always answer without hesitation.' + '\n' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{-'SYSTEM: ' + message['content'] + '\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'USER: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'ASSISTANT: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'ASSISTANT:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Tulu.yaml b/user_data/instruction-templates/Tulu.yaml
new file mode 100644
index 00000000..f60c9e41
--- /dev/null
+++ b/user_data/instruction-templates/Tulu.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'<|user|>\n' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'<|assistant|>\n' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'<|assistant|>\n'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Vicuna-v0.yaml b/user_data/instruction-templates/Vicuna-v0.yaml
new file mode 100644
index 00000000..d3e3f001
--- /dev/null
+++ b/user_data/instruction-templates/Vicuna-v0.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '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' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### Human: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'### Assistant: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### Assistant:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Vigogne-Chat.yaml b/user_data/instruction-templates/Vigogne-Chat.yaml
new file mode 100644
index 00000000..11ba5113
--- /dev/null
+++ b/user_data/instruction-templates/Vigogne-Chat.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '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' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'<|USER|>: ' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-'<|ASSISTANT|>: ' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'<|ASSISTANT|>:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Vigogne-Instruct.yaml b/user_data/instruction-templates/Vigogne-Instruct.yaml
new file mode 100644
index 00000000..cd7b6aa8
--- /dev/null
+++ b/user_data/instruction-templates/Vigogne-Instruct.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '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' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '\n\n' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### Instruction:\n' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'### Réponse:\n' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### Réponse:\n'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Wizard-Mega ShareGPT.yaml b/user_data/instruction-templates/Wizard-Mega ShareGPT.yaml
new file mode 100644
index 00000000..16a3ff7b
--- /dev/null
+++ b/user_data/instruction-templates/Wizard-Mega ShareGPT.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'USER: ' + message['content'] + ' '-}}
+ {%- else -%}
+ {{-'ASSISTANT: ' + message['content'] + '' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'ASSISTANT:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Wizard-Mega.yaml b/user_data/instruction-templates/Wizard-Mega.yaml
new file mode 100644
index 00000000..f3ca6990
--- /dev/null
+++ b/user_data/instruction-templates/Wizard-Mega.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-'### Instruction: ' + message['content'] + '\n\n'-}}
+ {%- else -%}
+ {{-'### Assistant: ' + message['content'] + '\n\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-'### Assistant:'-}}
+ {%- endif -%}
+
diff --git a/user_data/instruction-templates/Ziya.yaml b/user_data/instruction-templates/Ziya.yaml
new file mode 100644
index 00000000..45aa9c30
--- /dev/null
+++ b/user_data/instruction-templates/Ziya.yaml
@@ -0,0 +1,25 @@
+instruction_template: |-
+ {%- set ns = namespace(found=false) -%}
+ {%- for message in messages -%}
+ {%- if message['role'] == 'system' -%}
+ {%- set ns.found = true -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if not ns.found -%}
+ {{- '' + '' + '' -}}
+ {%- endif %}
+ {%- for message in messages %}
+ {%- if message['role'] == 'system' -%}
+ {{- '' + message['content'] + '' -}}
+ {%- else -%}
+ {%- if message['role'] == 'user' -%}
+ {{-':' + message['content'] + '\n'-}}
+ {%- else -%}
+ {{-':' + message['content'] + '\n' -}}
+ {%- endif -%}
+ {%- endif -%}
+ {%- endfor -%}
+ {%- if add_generation_prompt -%}
+ {{-':'-}}
+ {%- endif -%}
+
diff --git a/user_data/models/config.yaml b/user_data/models/config.yaml
new file mode 100644
index 00000000..038ebcf1
--- /dev/null
+++ b/user_data/models/config.yaml
@@ -0,0 +1,203 @@
+.*(llama|alpac|vicuna|guanaco|koala|llava|wizardlm|metharme|pygmalion-7b|pygmalion-2|mythalion|wizard-mega|openbuddy|vigogne|h2ogpt-research|manticore):
+ model_type: 'llama'
+.*(opt-|opt_|opt1|opt3|optfor|galactica|galpaca|pygmalion-350m):
+ model_type: 'opt'
+.*(gpt-j|gptj|gpt4all-j|malion-6b|pygway|pygmalion-6b|dolly-v1):
+ model_type: 'gptj'
+.*(gpt-neox|koalpaca-polyglot|polyglot.*koalpaca|polyglot-ko|polyglot_ko|pythia|stablelm|incite|dolly-v2|polycoder|h2ogpt-oig|h2ogpt-oasst1|h2ogpt-gm):
+ model_type: 'gptneox'
+.*bloom:
+ model_type: 'bloom'
+.*gpt2:
+ model_type: 'gpt2'
+.*falcon:
+ model_type: 'falcon'
+.*mpt:
+ model_type: 'mpt'
+.*(starcoder|starchat):
+ model_type: 'starcoder'
+.*dolly-v2:
+ model_type: 'dollyv2'
+.*replit:
+ model_type: 'replit'
+.*(oasst|openassistant-|stablelm-7b-sft-v7-epoch-3):
+ instruction_template: 'Open Assistant'
+ skip_special_tokens: false
+(?!.*galactica)(?!.*reward).*openassistant:
+ instruction_template: 'Open Assistant'
+ skip_special_tokens: false
+.*galactica:
+ skip_special_tokens: false
+.*dolly-v[0-9]-[0-9]*b:
+ instruction_template: 'Alpaca'
+ skip_special_tokens: false
+.*alpaca-native-4bit:
+ instruction_template: 'Alpaca'
+.*llava:
+ instruction_template: 'LLaVA'
+.*llava.*1.5:
+ instruction_template: 'Vicuna-v1.1'
+.*wizard.*mega:
+ instruction_template: 'Wizard-Mega'
+.*starchat-beta:
+ instruction_template: 'Starchat-Beta'
+(?!.*v0)(?!.*1.1)(?!.*1_1)(?!.*stable)(?!.*chinese).*vicuna:
+ instruction_template: 'Vicuna-v0'
+.*vicuna.*v0:
+ instruction_template: 'Vicuna-v0'
+.*vicuna.*(1.1|1_1|1.3|1_3):
+ instruction_template: 'Vicuna-v1.1'
+.*vicuna.*(1.5|1_5):
+ instruction_template: 'Vicuna-v1.1'
+.*stable.*vicuna:
+ instruction_template: 'StableVicuna'
+(?!.*chat).*chinese-vicuna:
+ instruction_template: 'Alpaca'
+.*chinese-vicuna.*chat:
+ instruction_template: 'Chinese-Vicuna-Chat'
+.*alpaca:
+ instruction_template: 'Alpaca'
+.*koala:
+ instruction_template: 'Koala'
+.*chatglm:
+ instruction_template: 'ChatGLM'
+.*(metharme|pygmalion|mythalion):
+ instruction_template: 'Metharme'
+.*raven:
+ instruction_template: 'RWKV-Raven'
+.*moss-moon.*sft:
+ instruction_template: 'MOSS'
+.*stablelm-tuned:
+ instruction_template: 'StableLM'
+.*galactica.*finetuned:
+ instruction_template: 'Galactica Finetuned'
+.*galactica.*-v2:
+ instruction_template: 'Galactica v2'
+(?!.*finetuned)(?!.*-v2).*galactica:
+ instruction_template: 'Galactica'
+.*guanaco:
+ instruction_template: 'Guanaco non-chat'
+.*baize:
+ instruction_template: 'Baize'
+.*mpt-.*instruct:
+ instruction_template: 'Alpaca'
+.*mpt-.*chat:
+ instruction_template: 'ChatML'
+(?!.*-flan-)(?!.*-t5-).*lamini-:
+ instruction_template: 'Alpaca'
+.*incite.*chat:
+ instruction_template: 'INCITE-Chat'
+.*incite.*instruct:
+ instruction_template: 'INCITE-Instruct'
+.*ziya-:
+ instruction_template: 'Ziya'
+.*koalpaca:
+ instruction_template: 'KoAlpaca'
+.*openbuddy:
+ instruction_template: 'OpenBuddy'
+(?!.*chat).*vigogne:
+ instruction_template: 'Vigogne-Instruct'
+.*vigogne.*chat:
+ instruction_template: 'Vigogne-Chat'
+.*(llama-deus|supercot|llama-natural-instructions|open-llama-0.3t-7b-instruct-dolly-hhrlhf|open-llama-0.3t-7b-open-instruct):
+ instruction_template: 'Alpaca'
+.*bactrian:
+ instruction_template: 'Bactrian'
+.*(h2ogpt-oig-|h2ogpt-oasst1-|h2ogpt-research-oasst1-):
+ instruction_template: 'INCITE-Chat'
+.*h2ogpt-gm-:
+ instruction_template: 'H2O-prompt_answer'
+.*manticore:
+ instruction_template: 'Manticore Chat'
+.*bluemoonrp-(30|13)b:
+ instruction_template: 'Bluemoon'
+.*Nous-Hermes-13b:
+ instruction_template: 'Alpaca'
+.*airoboros:
+ instruction_template: 'Vicuna-v1.1'
+.*airoboros.*1.2:
+ instruction_template: 'Airoboros-v1.2'
+.*alpa(cino|sta):
+ instruction_template: 'Alpaca'
+.*hippogriff:
+ instruction_template: 'Hippogriff'
+.*lazarus:
+ instruction_template: 'Alpaca'
+.*guanaco-.*(7|13|33|65)b:
+ instruction_template: 'Vicuna-v0'
+.*hypermantis:
+ instruction_template: 'Alpaca'
+.*open-llama-.*-open-instruct:
+ instruction_template: 'Alpaca'
+.*starcoder-gpteacher-code-instruct:
+ instruction_template: 'Alpaca'
+.*tulu:
+ instruction_template: 'Tulu'
+.*chronos:
+ instruction_template: 'Alpaca'
+.*samantha:
+ instruction_template: 'Samantha'
+.*wizardcoder:
+ instruction_template: 'Alpaca'
+.*minotaur:
+ instruction_template: 'Manticore Chat'
+.*orca_mini:
+ instruction_template: 'Orca Mini'
+.*(platypus|gplatty|superplatty):
+ instruction_template: 'Alpaca'
+.*(openorca-platypus2):
+ instruction_template: 'OpenOrca-Platypus2'
+.*longchat:
+ instruction_template: 'Vicuna-v1.1'
+.*vicuna-33b:
+ instruction_template: 'Vicuna-v1.1'
+.*redmond-hermes-coder:
+ instruction_template: 'Alpaca'
+.*wizardcoder-15b:
+ instruction_template: 'Alpaca'
+.*wizardlm:
+ instruction_template: 'Vicuna-v1.1'
+.*godzilla:
+ instruction_template: 'Alpaca'
+.*llama(-?)(2|v2).*chat:
+ instruction_template: 'Llama-v2'
+.*newhope:
+ instruction_template: 'NewHope'
+.*stablebeluga2:
+ instruction_template: 'StableBeluga2'
+.*openchat:
+ instruction_template: 'OpenChat'
+.*codellama.*instruct:
+ instruction_template: 'Llama-v2'
+.*(mistral|mixtral).*instruct:
+ instruction_template: 'Mistral'
+.*mistral.*openorca:
+ instruction_template: 'ChatML'
+.*(WizardCoder-Python-34B-V1.0|Phind-CodeLlama-34B-v2|CodeBooga-34B-v0.1):
+ instruction_template: 'Alpaca'
+.*orca-2-(13|7)b:
+ instruction_template: 'ChatML'
+.*openhermes.*mistral:
+ instruction_template: 'ChatML'
+.*Yi-34B-Chat:
+ instruction_template: 'ChatML'
+(dolphin).*:
+ instruction_template: 'ChatML'
+.*synthia:
+ instruction_template: 'Synthia'
+.*(hercules|hyperion):
+ instruction_template: 'ChatML'
+.*command-r:
+ instruction_template: 'Command-R'
+.*xwin-lm-70b-v0.1:
+ instruction_template: 'Vicuna-v1.1'
+.*platypus-yi-34b:
+ instruction_template: 'Vicuna-v1.1'
+.*CausalLM-RP-34B:
+ instruction_template: 'ChatML'
+34b-beta:
+ instruction_template: 'ChatML'
+.*airoboros-3_1-yi-34b-200k:
+ instruction_template: 'Llama-v2'
+.*chatqa:
+ instruction_template: 'NVIDIA-ChatQA'
diff --git a/user_data/presets/Instruct.yaml b/user_data/presets/Instruct.yaml
new file mode 100644
index 00000000..142fcd82
--- /dev/null
+++ b/user_data/presets/Instruct.yaml
@@ -0,0 +1 @@
+min_p: 0.2
diff --git a/user_data/presets/Qwen3 - No Thinking.yaml b/user_data/presets/Qwen3 - No Thinking.yaml
new file mode 100644
index 00000000..b1c1e03c
--- /dev/null
+++ b/user_data/presets/Qwen3 - No Thinking.yaml
@@ -0,0 +1,3 @@
+temperature: 0.7
+top_p: 0.8
+top_k: 20
diff --git a/user_data/presets/Qwen3 - Thinking.yaml b/user_data/presets/Qwen3 - Thinking.yaml
new file mode 100644
index 00000000..cb2942f9
--- /dev/null
+++ b/user_data/presets/Qwen3 - Thinking.yaml
@@ -0,0 +1,3 @@
+temperature: 0.6
+top_p: 0.95
+top_k: 20
diff --git a/user_data/presets/Top-P.yaml b/user_data/presets/Top-P.yaml
deleted file mode 100644
index f39e148f..00000000
--- a/user_data/presets/Top-P.yaml
+++ /dev/null
@@ -1 +0,0 @@
-top_p: 0.95
diff --git a/user_data/presets/min_p.yaml b/user_data/presets/min_p.yaml
new file mode 100644
index 00000000..b8ebc95f
--- /dev/null
+++ b/user_data/presets/min_p.yaml
@@ -0,0 +1 @@
+min_p: 0.05
diff --git a/user_data/tools/calculate.py b/user_data/tools/calculate.py
deleted file mode 100644
index 94f74c41..00000000
--- a/user_data/tools/calculate.py
+++ /dev/null
@@ -1,52 +0,0 @@
-import ast
-import operator
-
-OPERATORS = {
- ast.Add: operator.add,
- ast.Sub: operator.sub,
- ast.Mult: operator.mul,
- ast.Div: operator.truediv,
- ast.Pow: operator.pow,
- ast.Mod: operator.mod,
- ast.USub: operator.neg,
-}
-
-
-def _eval(node):
- if isinstance(node, ast.Constant) and isinstance(node.value, (int, float)):
- return node.value
- elif isinstance(node, ast.BinOp) and type(node.op) in OPERATORS:
- left = _eval(node.left)
- right = _eval(node.right)
- if isinstance(node.op, ast.Pow) and isinstance(right, (int, float)) and abs(right) > 10000:
- raise ValueError("Exponent too large (max 10000)")
- return OPERATORS[type(node.op)](left, right)
- elif isinstance(node, ast.UnaryOp) and type(node.op) in OPERATORS:
- return OPERATORS[type(node.op)](_eval(node.operand))
- raise ValueError(f"Unsupported expression")
-
-
-tool = {
- "type": "function",
- "function": {
- "name": "calculate",
- "description": "Evaluate a math expression. Supports +, -, *, /, **, %.",
- "parameters": {
- "type": "object",
- "properties": {
- "expression": {"type": "string", "description": "The math expression to evaluate (e.g. '2 * (3 + 4)')."},
- },
- "required": ["expression"]
- }
- }
-}
-
-
-def execute(arguments):
- expr = arguments.get("expression", "")
- try:
- tree = ast.parse(expr, mode='eval')
- result = _eval(tree.body)
- return {"expression": expr, "result": result}
- except Exception as e:
- return {"error": str(e)}
diff --git a/user_data/tools/fetch_webpage.py b/user_data/tools/fetch_webpage.py
deleted file mode 100644
index ca3e7331..00000000
--- a/user_data/tools/fetch_webpage.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from modules.web_search import download_web_page, truncate_content_by_tokens
-
-tool = {
- "type": "function",
- "function": {
- "name": "fetch_webpage",
- "description": "Fetch and read the contents of a web page given its URL. Returns the page content as plain text.",
- "parameters": {
- "type": "object",
- "properties": {
- "url": {"type": "string", "description": "The URL of the web page to fetch."},
- "max_tokens": {"type": "integer", "description": "Maximum number of tokens in the returned content (default: 2048)."},
- },
- "required": ["url"]
- }
- }
-}
-
-
-def execute(arguments):
- url = arguments.get("url", "")
- max_tokens = arguments.get("max_tokens", 2048)
- if not url:
- return {"error": "No URL provided."}
-
- content = download_web_page(url, include_links=True)
- if not content or not content.strip():
- return {"error": f"Failed to fetch content from {url}"}
-
- return {"url": url, "content": truncate_content_by_tokens(content, max_tokens=max_tokens)}
diff --git a/user_data/tools/get_datetime.py b/user_data/tools/get_datetime.py
deleted file mode 100644
index f0a92777..00000000
--- a/user_data/tools/get_datetime.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from datetime import datetime
-
-tool = {
- "type": "function",
- "function": {
- "name": "get_datetime",
- "description": "Get the current date and time.",
- "parameters": {
- "type": "object",
- "properties": {},
- }
- }
-}
-
-
-def execute(arguments):
- now = datetime.now()
- return {"date": now.strftime("%Y-%m-%d"), "time": now.strftime("%I:%M %p")}
diff --git a/user_data/tools/roll_dice.py b/user_data/tools/roll_dice.py
deleted file mode 100644
index 4af38ddc..00000000
--- a/user_data/tools/roll_dice.py
+++ /dev/null
@@ -1,23 +0,0 @@
-import random
-
-tool = {
- "type": "function",
- "function": {
- "name": "roll_dice",
- "description": "Roll one or more dice with the specified number of sides.",
- "parameters": {
- "type": "object",
- "properties": {
- "count": {"type": "integer", "description": "Number of dice to roll.", "default": 1},
- "sides": {"type": "integer", "description": "Number of sides per die.", "default": 20},
- },
- }
- }
-}
-
-
-def execute(arguments):
- count = max(1, min(arguments.get("count", 1), 1000))
- sides = max(2, min(arguments.get("sides", 20), 1000))
- rolls = [random.randint(1, sides) for _ in range(count)]
- return {"rolls": rolls, "total": sum(rolls)}
diff --git a/user_data/tools/web_search.py b/user_data/tools/web_search.py
deleted file mode 100644
index 6c2b0f0b..00000000
--- a/user_data/tools/web_search.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from modules.web_search import perform_web_search
-
-tool = {
- "type": "function",
- "function": {
- "name": "web_search",
- "description": "Search the web using DuckDuckGo and return a list of result titles and URLs. Use fetch_webpage to read the contents of a specific result.",
- "parameters": {
- "type": "object",
- "properties": {
- "query": {"type": "string", "description": "The search query."},
- },
- "required": ["query"]
- }
- }
-}
-
-
-def execute(arguments):
- query = arguments.get("query", "")
- results = perform_web_search(query, num_pages=None, fetch_content=False)
- output = []
- for r in results:
- if r:
- output.append({"title": r["title"], "url": r["url"]})
-
- return output if output else [{"error": "No results found."}]