Spaces:
Running
Running
File size: 9,657 Bytes
25f01d1 9e62f85 fea0b0c 25f01d1 9e62f85 25f01d1 9e62f85 25f01d1 59f17be 25f01d1 9e62f85 25f01d1 59f17be 25f01d1 59f17be 25f01d1 59f17be 25f01d1 59f17be 25f01d1 9e62f85 25f01d1 59f17be 7cdd6df 59f17be 7cdd6df 9e62f85 25f01d1 59f17be 25f01d1 b11f9e3 7cdd6df fea0b0c b11f9e3 25f01d1 b11f9e3 fea0b0c b11f9e3 7cdd6df 25f01d1 7cdd6df 25f01d1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
import gradio as gr
from utils import process_paper
import os
import logging
import html
from logging_config import setup_logging
from aws_utils import update_leaderboard, get_leaderboard, write_request
from flask import request
import hashlib
import uuid
import json
setup_logging()
paper_dir = 'path_to_temp_storage'
prompt_dir = 'iclr2024'
api_keys = {
'openai_api_key': os.environ.get('openai_api_key'),
'claude_api_key': os.environ.get('anthropic_api_key'),
'gemini_api_key': os.environ.get('google_api_key'),
'commandr_api_key': os.environ.get('cohere_api_key')
}
use_real_api = False
# Function to generate a paper_id using SHA-512 hash
def generate_paper_id(paper_content):
return hashlib.sha512(paper_content).hexdigest()
# Function to get user IP address
def get_user_ip():
return request.remote_addr
def review_papers(pdf_file):
logging.info(f"Received file type: {type(pdf_file)}")
paper_content = pdf_file.read() # Read the content of the uploaded PDF file
if use_real_api:
reviews, selected_models = process_paper(
pdf_file, paper_dir, prompt_dir, api_keys)
processed_reviews = []
for review in reviews:
processed_review = {}
for section in review:
if ':' in section:
key, value = section.split(':', 1)
processed_value = value.strip().replace('\n', '<br>')
processed_review[key.strip()] = html.escape(
processed_value)
processed_reviews.append(processed_review)
reviews = processed_reviews
else:
reviews = [
# Placeholder reviews
]
selected_models = ['model1-placeholder', 'model2-placeholder']
review_texts = []
for review in reviews:
formatted_review = "<div class='review-container'>"
for section, content in review.items():
formatted_review += f"<div class='review-section'><strong>{section}:</strong> <span>{html.unescape(content)}</span></div>"
formatted_review += "</div>"
review_texts.append(formatted_review)
model_a = selected_models[0]
model_b = selected_models[1]
logging.debug(f"Final formatted reviews: {review_texts}")
return review_texts[0], review_texts[1], gr.update(visible=True), gr.update(visible=True), model_a, model_b, paper_content
def handle_vote(vote, model_a, model_b, paper_content):
user_id = get_user_ip() # Get the user IP address as user_id
paper_id = generate_paper_id(paper_content) # Generate paper_id from paper content
# Write the request
write_request(user_id, paper_id, model_a, model_b, vote)
# Update the leaderboard
update_leaderboard(model_a, model_b, vote)
# Fetch the updated leaderboard (optional, if you want to display it immediately)
leaderboard = get_leaderboard()
message = f"<p>Thank you for your vote!</p><p>Model A: {model_a}</p><p>Model B: {model_b}</p>"
return gr.update(value=message, visible=True), gr.update(visible=False), gr.update(visible=False), gr.update(visible=True)
def setup_interface():
logging.debug("Setting up Gradio interface.")
css = """
.review-container {
padding: 10px;
margin-bottom: 20px;
border: 1px solid #ccc;
background-color: #f9f9f9;
}
.review-section {
margin-bottom: 12px;
padding: 8px;
background-color: #ffffff;
border-left: 4px solid #007BFF;
padding-left: 10px;
}
.review-section strong {
color: #333;
font-weight: bold;
display: block;
margin-bottom: 5px;
}
.review-section span, .gr-markdown {
color: #000;
font-size: 14px;
line-height: 1.5;
display: block;
white-space: normal;
opacity: 1;
}
.model-label {
font-size: 18px;
font-weight: bold;
color: #007BFF;
margin-bottom: 10px;
}
.gr-file, .gr-button, .gr-radio {
width: 300px;
margin: auto;
}
.gr-button-small {
width: 150px;
height: 40px;
font-size: 16px;
}
"""
with gr.Blocks(css=css) as demo:
with gr.Tabs():
with gr.TabItem("Reviewer Arena"):
gr.Markdown("## Reviewer Arena")
gr.Markdown("Upload an academic paper to get reviews from two randomly selected LLMs.")
with gr.Row():
file_input = gr.File(label="Upload Academic Paper")
submit_button = gr.Button("Submit!", elem_id="submit-button")
with gr.Row():
with gr.Column():
gr.HTML("<div class='model-label'>Model A</div>")
review1 = gr.Markdown()
with gr.Column():
gr.HTML("<div class='model-label'>Model B</div>")
review2 = gr.Markdown()
vote_options = ["π A is better", "π B is better", "π Tie", "π Both are bad"]
vote = gr.Radio(label="Vote on the best model", choices=vote_options, value="Tie", visible=False)
vote_button = gr.Button("Submit Vote", visible=False)
vote_message = gr.HTML("", visible=False)
another_paper_button = gr.Button("Review another paper", visible=False)
model_identity_message = gr.HTML("", visible=False)
def handle_vote_interface(vote, model_identity_message_a, model_identity_message_b, paper_content):
return handle_vote(vote, model_identity_message_a, model_identity_message_b, paper_content)
submit_button.click(fn=review_papers, inputs=[file_input],
outputs=[review1, review2, vote, vote_button, model_identity_message, model_identity_message])
vote_button.click(fn=handle_vote_interface, inputs=[vote, model_identity_message, model_identity_message],
outputs=[vote_message, vote, vote_button, another_paper_button])
another_paper_button.click(fn=lambda: None, inputs=None, outputs=None, js="() => { location.reload(); }")
with gr.TabItem("Leaderboard"):
gr.Markdown("## Leaderboard")
# Fetch the leaderboard data from the database
leaderboard_data = get_leaderboard()
print(json.dumps(leaderboard_data))
# Create the leaderboard HTML dynamically
leaderboard_html = """
<table style="width:100%; border: 1px solid #444; border-collapse: collapse; font-family: Arial, sans-serif; background-color: #2b2b2b;">
<thead>
<tr style="border: 1px solid #444; padding: 12px; background-color: #1a1a1a;">
<th style="border: 1px solid #444; padding: 12px; color: #ddd;">Rank</th>
<th style="border: 1px solid #444; padding: 12px; color: #ddd;">Model</th>
<th style="border: 1px solid #444; padding: 12px; color: #ddd;">Arena Elo</th>
<th style="border: 1px solid #444; padding: 12px; color: #ddd;">95% CI</th>
<th style="border: 1px solid #444; padding: 12px; color: #ddd;">Votes</th>
<th style="border: 1px solid #444; padding: 12px; color: #ddd;">Organization</th>
<th style="border: 1px solid #444; padding: 12px; color: #ddd;">License</th>
<th style="border: 1px solid #444; padding: 12px; color: #ddd;">Knowledge Cutoff</th>
</tr>
</thead>
<tbody>
"""
# for rank, model in enumerate(leaderboard_data, start=1):
# leaderboard_html += f"""
# <tr style="border: 1px solid #444; padding: 12px;">
# <td style="border: 1px solid #444; padding: 12px; color: #ddd;">{rank}</td>
# <td style="border: 1px solid #444; padding: 12px; color: #ddd;">{model['ModelID']}</td>
# <td style="border: 1px solid #444; padding: 12px; color: #ddd;">{model['EloScore']}</td>
# <td style="border: 1px solid #444; padding: 12px; color: #ddd;">+3/-3</td> <!-- Adjust as needed -->
# <td style="border: 1px solid #444; padding: 12px; color: #ddd;">{model['Votes']}</td>
# <td style="border: 1px solid #444; padding: 12px; color: #ddd;">Organization</td> <!-- Add actual data if available -->
# <td style="border: 1px solid #444; padding: 12px; color: #ddd;">License</td> <!-- Add actual data if available -->
# <td style="border: 1px solid #444; padding: 12px; color: #ddd;">Knowledge Cutoff</td> <!-- Add actual data if available -->
# </tr>
# """
leaderboard_html += """
</tbody>
</table>
"""
gr.HTML(leaderboard_html)
logging.debug("Gradio interface setup complete.")
return demo
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
demo = setup_interface()
demo.launch()
|