import os import json import datetime import requests import numpy as np import gradio as gr from pathlib import Path from model.model_registry import * from .constants import LOGDIR, LOG_SERVER_ADDR, APPEND_JSON, SAVE_IMAGE, SAVE_VIDEO, SAVE_LOG from typing import Union enable_btn = gr.update(interactive=True, visible=True) disable_btn = gr.update(interactive=False) invisible_btn = gr.update(interactive=False, visible=False) no_change_btn = gr.update(value="No Change", interactive=True, visible=True) def build_about(): about_markdown = f""" # About Us This is a project from TIGER Lab at University of Waterloo. ## Contributors: [Tianle Li](https://scholar.google.com/citations?user=g213g7YAAAAJ&hl=en), [Dongfu Jiang](https://jdf-prog.github.io/), [Yuansheng Ni](https://yuanshengni.github.io/), [Max Ku](https://kuwingfung.github.io/), [Shizhuo Sun](), [Richard Fan](https://www.linkedin.com/in/richard-fan2020/). ## Contact: Email: t29li@uwaterloo.ca (Tianle Li) ## Advisors [Wenhu Chen](https://wenhuchen.github.io/) ## Sponsorship We are keep looking for sponsorship to support the arena project for the long term. Please contact us if you are interested in supporting this project. ## Acknowledgment Our codebase is built upon FastChat, ImagenHub and VideoGenHub. """ gr.Markdown(about_markdown, elem_id="about_markdown") acknowledgment_md = """ ### Acknowledgment

Our codebase is built upon FastChat, ImagenHub and VideoGenHub.

""" color = "rgb(49, 139, 190)" block_css = """ #notice_markdown { font-size: 110% } #notice_markdown th { display: none; } #notice_markdown td { padding-top: 6px; padding-bottom: 6px; } #model_description_markdown { font-size: 110% } #leaderboard_markdown { font-size: 110% } #leaderboard_markdown td { padding-top: 6px; padding-bottom: 6px; } #leaderboard_dataframe td { line-height: 0.1em; } #about_markdown { font-size: 110% } #ack_markdown { font-size: 110% } #input_box textarea { } footer { display:none !important } .image-about img { margin: 0 30px; margin-top: 30px; height: 60px; max-height: 100%; width: auto; float: left; .input-image, .image-preview { margin: 0 30px; height: 30px; max-height: 100%; width: auto; max-width: 30%;} } .custom-button { border-radius: 8px; } #btncolor1 {background: rgb(49, 139, 190);} #btncolor2 {background: rgb(109, 116, 187);} #btncolor3 {background: rgb(159, 84, 152);} #btncolor4 {background: rgb(174, 68, 125);} """ # .custom-button { # padding: 10px 15px; # text-align: center; # text-decoration: none; # display: inline-block; # font-size: 16px; # cursor: pointer; # border-radius: 8px; # } # { # background-color: green; /* 背景颜色 */ # color: white; /* 文字颜色 */ # border: none; /* 无边框 */ # padding: 10px 20px; /* 内边距 */ # text-align: center; /* 文本居中 */ # text-decoration: none; /* 无下划线 */ # display: inline-block; /* 行内块 */ # font-size: 16px; /* 字体大小 */ # margin: 4px 2px; /* 外边距 */ # cursor: pointer; /* 鼠标指针 */ # border-radius: 5px; /* 圆角边框 */ # } # .custom-button:hover { # background-color: darkgreen; /* 悬停时的背景颜色 */ # } def enable_vote_buttons(): return tuple(gr.update(visible=True, interactive=i<=4) for i in range(6)) def disable_vote_buttons(): return tuple(gr.update(visible=False, interactive=False) for i in range(6)) def enable_vote_mode_buttons(mode): print(mode) if mode == "Best": return (gr.update(visible=True, interactive=True),) * 6 + \ (gr.update(visible=False, interactive=False),) * 16 + \ (gr.update(visible=True, interactive=False),) * 2 + \ (gr.update(visible=True, interactive=True),) elif mode == "Rank": return (gr.update(visible=False, interactive=False),) * 6 + \ (gr.update(visible=True, interactive=True),) * 16 + \ (gr.update(visible=True, interactive=True),) * 3 def disable_vote_mode_buttons(): return tuple(gr.update(visible=False, interactive=False) for _ in range(25)) def enable_order_buttons(): return tuple(gr.update(interactive=True) for _ in range(4)) def disable_order_buttons(): return (gr.update(interactive=False), gr.update(interactive=False), gr.update(interactive=True), gr.update(interactive=False)) def clear_history(): return None, "", None def clear_history_side_by_side(): return None, None, "", None, None def clear_history_side_by_side_anony(): return None, None, None, None, gr.update(visible=True, interactive=True, value=""), gr.update(visible=True, interactive=True, value=""), None, None, None, None, \ gr.Markdown("", visible=False), gr.Markdown("", visible=False), gr.Markdown("", visible=False), gr.Markdown("", visible=False) def clear_history_ie(): return None, "", "", "", None, None def clear_history_side_by_side_ie(): return None, None, "", "", "", None, None, None def clear_history_side_by_side_ie_anony(): return None, None, "", "", "", None, None, None, gr.Markdown("", visible=False), gr.Markdown("", visible=False) def get_ip(request: gr.Request): if request: if "cf-connecting-ip" in request.headers: ip = request.headers["cf-connecting-ip"] or request.client.host else: ip = request.client.host else: ip = None return ip def get_conv_log_filename(): t = datetime.datetime.now() name = os.path.join(LOGDIR, f"{t.year}-{t.month:02d}-{t.day:02d}-conv.json") return name def save_image_file_on_log_server(image_file:str): return 1 image_file = Path(image_file).absolute().relative_to(os.getcwd()) image_file = str(image_file) # Open the image file in binary mode url = f"{LOG_SERVER_ADDR}/{SAVE_IMAGE}" with open(image_file, 'rb') as f: # Make the POST request, sending the image file and the image path response = requests.post(url, files={'image': f}, data={'image_path': image_file}) return response def save_video_file_on_log_server(video_file:str): return 1 video_file = Path(video_file).absolute().relative_to(os.getcwd()) video_file = str(video_file) # Open the video file in binary mode url = f"{LOG_SERVER_ADDR}/{SAVE_VIDEO}" with open(video_file, 'rb') as f: # Make the POST request, sending the video file and the video path response = requests.post(url, files={'video': f}, data={'video_path': video_file}) return response def append_json_item_on_log_server(json_item: Union[dict, str], log_file: str): return 1 if isinstance(json_item, dict): json_item = json.dumps(json_item) log_file = Path(log_file).absolute().relative_to(os.getcwd()) log_file = str(log_file) url = f"{LOG_SERVER_ADDR}/{APPEND_JSON}" # Make the POST request, sending the JSON string and the log file name response = requests.post(url, data={'json_str': json_item, 'file_name': log_file}) return response def save_log_str_on_log_server(log_str: str, log_file: str): return 1 log_file = Path(log_file).absolute().relative_to(os.getcwd()) log_file = str(log_file) url = f"{LOG_SERVER_ADDR}/{SAVE_LOG}" # Make the POST request, sending the log message and the log file name response = requests.post(url, data={'message': log_str, 'log_path': log_file}) return response