stefan-it's picture
feat: add new additional inputs, including changing of hopefully better default generation parameters
63907b4 verified
import spaces
import gradio as gr
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
def load_model():
model_id = "stefan-it/nanochat-german-v1"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=False)
model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=False, dtype=torch.bfloat16).to(device)
model.eval()
return tokenizer, model
tokenizer, model = load_model()
@spaces.GPU
def generate(prompt, history, max_new_tokens, temperature, top_p, repetition_penalty, no_repeat_ngram_size):
if len(history) > 0:
messages = history + [
{"role": "user", "content": prompt},
]
else:
messages = [
{"role": "user", "content": prompt},
]
print(history)
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_tensors="pt",
return_dict=True,
).to(device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=max_new_tokens,
temperature=temperature,
top_p=top_p,
repetition_penalty=repetition_penalty,
no_repeat_ngram_size=no_repeat_ngram_size,
)
generated_tokens = outputs[0, inputs.input_ids.shape[1]:]
output = tokenizer.decode(generated_tokens, skip_special_tokens=True)
return output
demo = gr.ChatInterface(fn=generate,
type="messages",
title="German nanochat v1",
additional_inputs=[
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
gr.Slider(minimum=0.1, maximum=4.0, value=0.8, step=0.1, label="Temperature"),
gr.Slider(minimum=0.1, maximum=1.0, value=0.9, step=0.05, label="Top-p"),
gr.Slider(minimum=1.0, maximum=2.0, value=1.2, step=0.1, label="Repetition penalty"),
gr.Slider(minimum=0, maximum=5, value=3, step=1, label="No repeat of ngrams"),
])
demo.launch()