gameapp / app.py
abhillubillu's picture
Update app.py
5a80d05 verified
raw
history blame
5.33 kB
import gradio as gr
import os
import spaces
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
from threading import Thread
TITLE = ''
DESCRIPTION = ''
LICENSE = """
<p>Built with Llama</p>
"""
PLACEHOLDER = """
<div style="padding: 30px; text-align: center; display: flex; flex-direction: column; align-items: center;">
<h1 style="font-size: 28px; margin-bottom: 2px; opacity: 0.85;">Gameapp</h1>
<p style="font-size: 18px; margin-bottom: 2px; opacity: 0.75;">Ask me anything...</p>
</div>
"""
css = """
h1 {
text-align: center;
display: block;
display: flex;
align-items: center;
justify-content: center;
}
.gradio-container {
border: 1px solid #ddd;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
.gradio-chatbot .input-container {
border-top: 1px solid #ddd;
padding-top: 10px;
}
.gradio-chatbot .input-container textarea {
border: 1px solid #ddd;
border-radius: 5px;
padding: 10px;
width: 100%;
box-sizing: border-box;
resize: none;
height: 50px;
}
.gradio-chatbot .message {
border-radius: 10px;
padding: 10px;
margin: 10px 0;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
.gradio-chatbot .message.user {
background-color: #f5f5f5;
}
.gradio-chatbot .message.assistant {
background-color: #e6f7ff;
}
"""
model_id = "abhillubillu/gameapp_model"
hf_token = os.getenv("HF_API_TOKEN")
# Load the tokenizer and model
tokenizer = AutoTokenizer.from_pretrained(model_id, token=hf_token)
model = AutoModelForCausalLM.from_pretrained(model_id, token=hf_token, device_map="auto")
# Ensure eos_token_id is set
eos_token_id = tokenizer.eos_token_id
if eos_token_id is None:
eos_token_id = tokenizer.pad_token_id
terminators = [
eos_token_id,
tokenizer.convert_tokens_to_ids("")
]
MAX_INPUT_TOKEN_LENGTH = 4096
# Gradio inference function
@spaces.GPU(duration=120)
def chat_llama3_1_8b(message: str,
history: list,
temperature: float,
max_new_tokens: int
) -> str:
"""
Generate a streaming response using the llama3-8b model.
Args:
message (str): The input message.
history (list): The conversation history used by ChatInterface.
temperature (float): The temperature for generating the response.
max_new_tokens (int): The maximum number of new tokens to generate.
Returns:
str: The generated response.
"""
conversation = []
for user, assistant in history:
conversation.extend([{"role": "user", "content": user}, {"role": "assistant", "content": assistant}])
conversation.append({"role": "user", "content": message})
input_ids = tokenizer.apply_chat_template(conversation, return_tensors="pt")
if input_ids.shape[1] > MAX_INPUT_TOKEN_LENGTH:
input_ids = input_ids[:, -MAX_INPUT_TOKEN_LENGTH:]
gr.Warning(f"Trimmed input from conversation as it was longer than {MAX_INPUT_TOKEN_LENGTH} tokens.")
input_ids = input_ids.to(model.device)
streamer = TextIteratorStreamer(tokenizer, timeout=10.0, skip_prompt=True, skip_special_tokens=True)
generate_kwargs = dict(
input_ids= input_ids,
streamer=streamer,
max_new_tokens=max_new_tokens,
do_sample=temperature != 0, # This will enforce greedy generation (do_sample=False) when the temperature is passed 0, avoiding the crash.
temperature=temperature,
eos_token_id=terminators,
)
t = Thread(target=model.generate, kwargs=generate_kwargs)
t.start()
outputs = []
for text in streamer:
outputs.append(text)
yield "".join(outputs)
# Gradio block
chatbot = gr.Chatbot(height=450, placeholder=PLACEHOLDER, label='Gradio ChatInterface')
with gr.Blocks(fill_height=True, css=css) as demo:
gr.Markdown(TITLE)
gr.Markdown(DESCRIPTION)
gr.ChatInterface(
fn=chat_llama3_1_8b,
chatbot=chatbot,
fill_height=True,
examples_per_page=3,
additional_inputs_accordion=gr.Accordion(label="⚙️ Parameters", open=False, render=False),
additional_inputs=[
gr.Slider(minimum=0,
maximum=1,
step=0.1,
value=0.95,
label="Temperature",
render=False),
gr.Slider(minimum=128,
maximum=4096,
step=1,
value=512,
label="Max new tokens",
render=False ),
],
examples=[
["There's a llama in my garden 😱 What should I do?"],
["What is the best way to open a can of worms?"],
["The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1. "],
['How to setup a human base on Mars? Give short answer.'],
['Explain theory of relativity to me like I’m 8 years old.'],
['What is 9,000 * 9,000?'],
['Write a pun-filled happy birthday message to my friend Alex.'],
['Justify why a penguin might make a good king of the jungle.']
],
cache_examples=False,
)
gr.Markdown(LICENSE)
if __name__ == "__main__":
demo.launch()