Omnibus's picture
Update app.py
a01ac6f
raw
history blame
5.7 kB
from huggingface_hub import InferenceClient
import gradio as gr
client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
#client = InferenceClient("Trelis/Mistral-7B-Instruct-v0.1-Summarize-16k")
#client = InferenceClient("TinyLlama/TinyLlama-1.1B-intermediate-step-1431k-3T")
def format_prompt(message, history):
prompt = "<s>"
for user_prompt, bot_response in history:
prompt += f"[INST] {user_prompt} [/INST]"
prompt += f" {bot_response}</s> "
prompt += f"[INST] {message} [/INST]"
return prompt
system="""
You are an AI Prompt Engineer.
Your duty is to create system prompts that will power specialized AI agents.
A good system prompt should clearly and concisely describe the task or function that the user wants the AI model to perform.
It should include any necessary context or information needed for the AI model to complete the task successfully.
The prompt may also include examples of input and output formats, as well as specific constraints on the format or content of the response.
Please make sure that your generated prompts are clear, precise, and unambiguous, and avoid using jargon or complex language whenever possible.
Here are some additional guidelines that you might find helpful when writing system prompts:
- Make sure that the task described in the prompt is feasible for the AI model to accomplish.
-- For example, if you are working with a text generation model, it probably won't be able to solve math problems or provide legal advice.
- Include enough detail in the prompt to ensure that the AI model understands what is being asked of it.
-- However, try not to include more information than is strictly necessary, as this can make the prompt confusing or overwhelming.
- If the prompt includes multiple parts or subtasks, consider breaking it up into separate, smaller prompts to make it easier for the AI model to process and understand.
- Consider including one or more examples of input and output pairs in the prompt to help illustrate the desired format and content of the response.
-- This can be especially useful for tasks that involve generating structured data or following specific formatting conventions.
- When appropriate, specify any constraints or limitations on the format or content of the response in the prompt.
-- For example, you might ask the AI model to limit its responses to a certain number of characters or words, or to only use specific vocabulary or phrases.
- Finally, remember that a good system prompt should be flexible and adaptable, so that the AI model can handle a wide range of inputs and situations while still producing accurate and relevant outputs."""
def generate(
prompt, history, system_prompt, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0,
):
temperature = float(temperature)
if temperature < 1e-2:
temperature = 1e-2
top_p = float(top_p)
generate_kwargs = dict(
temperature=temperature,
max_new_tokens=max_new_tokens,
top_p=top_p,
repetition_penalty=repetition_penalty,
do_sample=True,
seed=42,
)
formatted_prompt = format_prompt(f"{system}, {prompt}", history)
stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
output = ""
for response in stream:
output += response.token.text
yield output
return output
additional_inputs=[
gr.Textbox(
label="System Prompt",
max_lines=1,
interactive=True,
),
gr.Slider(
label="Temperature",
value=0.9,
minimum=0.0,
maximum=1.0,
step=0.05,
interactive=True,
info="Higher values produce more diverse outputs",
),
gr.Slider(
label="Max new tokens",
value=1048,
minimum=0,
maximum=1048*10,
step=64,
interactive=True,
info="The maximum numbers of new tokens",
),
gr.Slider(
label="Top-p (nucleus sampling)",
value=0.90,
minimum=0.0,
maximum=1,
step=0.05,
interactive=True,
info="Higher values sample more low-probability tokens",
),
gr.Slider(
label="Repetition penalty",
value=1.2,
minimum=1.0,
maximum=2.0,
step=0.05,
interactive=True,
info="Penalize repeated tokens",
)
]
examples=[["I'm planning a vacation to Japan. Can you suggest a one-week itinerary including must-visit places and local cuisines to try?", None, None, None, None, None, ],
["Can you write a short story about a time-traveling detective who solves historical mysteries?", None, None, None, None, None,],
["I'm trying to learn French. Can you provide some common phrases that would be useful for a beginner, along with their pronunciations?", None, None, None, None, None,],
["I have chicken, rice, and bell peppers in my kitchen. Can you suggest an easy recipe I can make with these ingredients?", None, None, None, None, None,],
["Can you explain how the QuickSort algorithm works and provide a Python implementation?", None, None, None, None, None,],
["What are some unique features of Rust that make it stand out compared to other systems programming languages like C++?", None, None, None, None, None,],
]
gr.ChatInterface(
fn=generate,
chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel"),
additional_inputs=additional_inputs,
title="Mixtral 46.7B",
examples=examples,
concurrency_limit=20,
).launch(show_api=False)