Sampler-Arena / app.py
rwitz's picture
Update app.py
5c13efa
raw
history blame
2.48 kB
import gradio as gr
import requests
import os
import json
from elo import update_elo_ratings # Custom function for ELO ratings
# Load the chatbot URLs and their respective model names from a JSON file
with open('chatbot_urls.json', 'r') as file:
chatbots = json.load(file)
# Load existing ELO ratings or initialize them
def read_elo_ratings():
try:
with open('elo_ratings.json', 'r') as file:
return json.load(file)
except FileNotFoundError:
return {model: 1200 for model in chatbots.keys()}
# Update ELO ratings in a file
def write_elo_ratings(elo_ratings):
with open('elo_ratings.json', 'w') as file:
json.dump(elo_ratings, file, indent=4)
elo_ratings = read_elo_ratings()
def get_bot_response(url, prompt):
payload = {
"input": {
"prompt": prompt,
"sampling_params": {
"max_new_tokens": 16,
"temperature": 0.7,
}
}
}
headers = {
"accept": "application/json",
"content-type": "application/json",
"authorization": os.environ.get("RUNPOD_TOKEN")
}
response = requests.post(url, json=payload, headers=headers)
return response.json()
def chat_with_bots(user_input):
bot1_url = chatbots[list(chatbots.keys())[0]]
bot2_url = chatbots[list(chatbots.keys())[1]]
bot1_response = get_bot_response(bot1_url, user_input)
bot2_response = get_bot_response(bot2_url, user_input)
return bot1_response, bot2_response
def update_ratings(bot_index):
global elo_ratings
bot_names = list(chatbots.keys())
winner = bot_names[bot_index]
loser = bot_names[1 - bot_index]
elo_ratings = update_elo_ratings(elo_ratings, winner, loser)
write_elo_ratings(elo_ratings)
return f"Bot 1 is {bot_names[0]} with ELO {elo_ratings[bot_names[0]]}\nBot 2 is {bot_names[1]} with ELO {elo_ratings[bot_names[1]]}"
# Gradio Interface
iface = gr.Interface(
fn=chat_with_bots,
inputs=[
gr.inputs.Textbox(label="Your message")
],
outputs=[
gr.outputs.Textbox(label="Bot 1 Response"),
gr.outputs.Textbox(label="Bot 2 Response")
],
live=True
)
iface.add_component(gr.inputs.Radio(["Bot 1", "Bot 2"], label="Vote for the Best Response"), "vote")
iface.add_component(gr.outputs.Textbox(label="Voting Result"), "vote_result")
iface.update(value=update_ratings, component_name="vote", outputs=["vote_result"])
iface.launch()