diff --git a/frontend/app.py b/frontend/app.py
index fb4d95f..205ba37 100644
--- a/frontend/app.py
+++ b/frontend/app.py
@@ -1,4 +1,5 @@
import json
+from functools import partial
from typing import List, Tuple, Dict, Iterator, Union
import gradio as gr
@@ -30,13 +31,7 @@
"watermark": False,
"decoder_input_details": False,
}
-# taken from https://huggingface.co/upstage/SOLAR-0-70b-16bit
-DEFAULT_TEMPLATE = {
- "prompt": "{system_prompt}{history}### Assistant: ",
- "system_prompt": "### System: {system_prior}\n",
- "user_prompt": "### User: {user_message}\n",
- "bot_prompt": "### Assistant: {bot_message}\n",
-}
+DEFAULT_TEMPLATE = "upstage/SOLAR-0-70b-16bit"
def get_info(endpoint: str) -> str:
@@ -52,18 +47,21 @@ def assemble_prompt(
# assemble the system prompt
system_prompt = template["system_prompt"].format(system_prior=system_prior)
- # assemble the history
+ # assemble the user prompt from the last history entry
+ user_prompt = template['user_prompt'].format(user_message=history[-1][0])
+
+ # assemble the remaining history
history_str = ""
- for user_message, bot_message in history:
- if user_message:
- history_str += template['user_prompt'].format(user_message=user_message)
- if bot_message:
- history_str += template['bot_prompt'].format(bot_message=bot_message)
+ for user_message, bot_message in history[:-1]:
+ user_prompt = template['user_prompt'].format(user_message=user_message)
+ bot_prompt = template['bot_prompt'].format(bot_message=bot_message)
+ history_str = template['history'].format(history=history_str, user_prompt=user_prompt, bot_prompt=bot_prompt)
# create the final prompt
prompt = template["prompt"].format(
system_prompt=system_prompt,
history=history_str,
+ user_prompt=user_prompt,
)
return prompt
@@ -105,18 +103,31 @@ def bot(
yield history, json.dumps(log, indent=2)
+def update_template_and_system_prior(template_key, template_str, system_prior, templates):
+ if template_key is None:
+ return template_str, system_prior
+ new_template_data = templates[template_key]
+ new_template_str = json.dumps(new_template_data["template"], indent=2)
+ return new_template_str, new_template_data["system_prior"]
+
+
def start():
- # taken from https://www.gradio.app/guides/creating-a-custom-chatbot-with-blocks
+ # load templates from json file
+ templates = json.load(open("templates.json"))
# endpoint with info
endpoint = gr.Textbox(lines=1, label="Address", value=DEFAULT_API_ENDPOINT)
endpoint_info = gr.JSON(label="Endpoint info")
# chatbot with parameters, prefixes, and system prompt
parameters_str = gr.Code(label="Parameters", language="json", lines=10, value=json.dumps(DEFAULT_PARAMS, indent=2))
template_str = gr.Code(
- label="Template (required keys: prompt, system_prompt, user_prompt, bot_prompt)",
+ label="Template (required keys: prompt, system_prompt, history, user_prompt, bot_prompt)",
language="json",
lines=6,
- value=json.dumps(DEFAULT_TEMPLATE, indent=2),
+ value=json.dumps(templates[DEFAULT_TEMPLATE]["template"], indent=2),
+ )
+ select_template = gr.Dropdown(
+ label="Load Template and System Prior (overwrites existing values)",
+ choices=list(templates),
)
system_prior = gr.Textbox(lines=5, label="System Prior", value="You are a helpful assistant.")
chatbot = gr.Chatbot(label="Chat", show_copy_button=True)
@@ -163,6 +174,13 @@ def start():
with gr.Group():
template_str.render()
system_prior.render()
+ select_template.render()
+ select_template.change(
+ partial(update_template_and_system_prior, templates=templates),
+ inputs=[select_template, template_str, system_prior],
+ outputs=[template_str, system_prior],
+ queue=False,
+ )
demo.queue()
demo.launch()
diff --git a/frontend/templates.json b/frontend/templates.json
new file mode 100644
index 0000000..4f3aec8
--- /dev/null
+++ b/frontend/templates.json
@@ -0,0 +1,35 @@
+{
+ "upstage/SOLAR-0-70b-16bit": {
+ "description": "Based on information from https://huggingface.co/upstage/SOLAR-0-70b-16bit",
+ "template": {
+ "prompt": "{system_prompt}\n{history}\n{user_prompt}\n### Assistant:\n",
+ "system_prompt": "### System:\n{system_prior}\n",
+ "history": "{history}\n{user_prompt}\n{bot_prompt}",
+ "user_prompt": "### User:\n{user_message}\n",
+ "bot_prompt": "### Assistant:\n{bot_message}\n"
+ },
+ "system_prior": "You are a helpful assistant."
+ },
+ "llama-2": {
+ "description": "Based on information from https://huggingface.co/blog/llama2#how-to-prompt-llama-2",
+ "template": {
+ "prompt": "{system_prompt}\n\n{history}{user_prompt}",
+ "system_prompt": "[INST] <> \n{system_prior}\n<>",
+ "history": "{history} {user_prompt} {bot_prompt}",
+ "user_prompt": "{user_message} [/INST]",
+ "bot_prompt": "{bot_message} [INST]"
+ },
+ "system_prior": "You are a helpful assistant."
+ },
+ "jphme/em_german_leo_mistral": {
+ "description": "Based on information from https://huggingface.co/jphme/em_german_leo_mistral",
+ "template": {
+ "prompt": "{system_prompt} {history} {user_prompt} ASSISTANT: ",
+ "system_prompt": "{system_prior}",
+ "history": "{history} {user_prompt} {bot_prompt}",
+ "user_prompt": "USER: {user_message}",
+ "bot_prompt": "ASSISTANT: {bot_message}"
+ },
+ "system_prior": "Du bist ein hilfreicher Assistent."
+ }
+}