Spaces:
Running
Running
import gradio as gr | |
from transformers import AutoModelForCausalLM, AutoTokenizer | |
import torch | |
# Define a dictionary of model names and their corresponding Hugging Face model IDs | |
models = { | |
"GPT-Neo-125M": "EleutherAI/gpt-neo-125M", | |
"GPT-J-6B": "EleutherAI/gpt-j-6B", | |
"GPT-NeoX-20B": "EleutherAI/gpt-neox-20b", | |
"GPT-3.5-Turbo": "gpt2", # Placeholder for illustrative purposes | |
} | |
# Initialize tokenizers and models | |
tokenizers = {} | |
models_loaded = {} | |
for model_name, model_id in models.items(): | |
tokenizers[model_name] = AutoTokenizer.from_pretrained(model_id) | |
models_loaded[model_name] = AutoModelForCausalLM.from_pretrained(model_id) | |
def chat(model_name, user_input, history=[]): | |
tokenizer = tokenizers[model_name] | |
model = models_loaded[model_name] | |
# Encode the input | |
input_ids = tokenizer.encode(user_input + tokenizer.eos_token, return_tensors="pt") | |
# Generate a response | |
with torch.no_grad(): | |
output = model.generate(input_ids, max_length=150, pad_token_id=tokenizer.eos_token_id) | |
response = tokenizer.decode(output[0], skip_special_tokens=True) | |
# Clean up the response to remove the user input part | |
response = response[len(user_input):].strip() | |
# Append to chat history | |
history.append((user_input, response)) | |
return history, history | |
# Define the Gradio interface | |
with gr.Blocks() as demo: | |
gr.Markdown("## Chat with Different Models") | |
model_choice = gr.Dropdown(list(models.keys()), label="Choose a Model") | |
chatbot = gr.Chatbot(label="Chat") | |
message = gr.Textbox(label="Message") | |
submit = gr.Button("Submit") | |
submit.click(chat, inputs=[model_choice, message, chatbot], outputs=[chatbot, chatbot]) | |
message.submit(chat, inputs=[model_choice, message, chatbot], outputs=[chatbot, chatbot]) | |
# Launch the demo | |
demo.launch() |