Spaces:
Running
on
Zero
Running
on
Zero
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: [email protected] (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 <a href="https://github.com/lm-sys/FastChat" target="_blank">FastChat</a>, <a href="https://github.com/TIGER-AI-Lab/ImagenHub" target="_blank">ImagenHub</a> and <a href="https://github.com/TIGER-AI-Lab/VideoGenHub" target="_blank">VideoGenHub</a>. | |
""" | |
gr.Markdown(about_markdown, elem_id="about_markdown") | |
acknowledgment_md = """ | |
### Acknowledgment | |
<div class="image-container"> | |
<p> Our codebase is built upon <a href="https://github.com/lm-sys/FastChat" target="_blank">FastChat</a>, <a href="https://github.com/TIGER-AI-Lab/ImagenHub" target="_blank">ImagenHub</a> and <a href="https://github.com/TIGER-AI-Lab/VideoGenHub" target="_blank">VideoGenHub</a>.</p> | |
</div> | |
""" | |
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%;} | |
} | |
""" | |
def enable_buttons_side_by_side(): | |
return tuple(gr.update(visible=True, interactive=True) for i in range(6)) | |
def disable_buttons_side_by_side(): | |
return tuple(gr.update(visible=i>=4, interactive=False) for i in range(6)) | |
def enable_buttons(): | |
return tuple(gr.update(interactive=True) for _ in range(5)) | |
def disable_buttons(): | |
return tuple(gr.update(interactive=False) for _ in range(5)) | |
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.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): | |
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): | |
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): | |
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): | |
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 |