3DGen-Arena / serve /gradio_web_t2i_anony.py
ZhangYuhan's picture
add serve
7c1eee1
raw
history blame
8.15 kB
import json
from functools import partial
from .utils import *
from .vote_utils import (
upvote_last_response_t2s as upvote_last_response,
downvote_last_response_t2s as downvote_last_response,
flag_last_response_t2s as flag_last_response,
leftvote_last_response_t2s_multi as leftvote_last_response,
rightvote_last_response_t2s_multi as rightvote_last_response,
tievote_last_response_t2s_multi as tievote_last_response,
bothbad_vote_last_response_t2s_multi as bothbad_vote_last_response,
share_click_t2s_multi as share_click,
share_js
)
from .inference import(
sample_model,
sample_prompt,
generate_t2s,
generate_t2s_multi,
generate_t2s_multi_annoy
)
from .constants import TEXT_PROMPT_PATH
with open(TEXT_PROMPT_PATH, 'r') as f:
prompt_list = json.load(f)
def build_side_by_side_ui_anony(models):
notice_markdown = """
# βš”οΈ GenAI-Arena βš”οΈ : Benchmarking Text-to-3D generative models
## πŸ“œ Rules
- Input prompt to two anonymous models in same area and vote for the better one!
- When the results are ready, click the button below to vote.
- Vote won't be counted if model identity is revealed during conversation.
- Click "Clear" to start a new round.
## πŸ† Arena Elo
Find out who is the πŸ₯‡conditional image generation models! More models are going to be supported.
## πŸ‘‡ Generating now!
"""
model_list = models.get_t2s_models()
gen_func = partial(generate_t2s_multi_annoy, models.inference_parallel, models.render_parallel)
state_0 = gr.State()
state_1 = gr.State()
gr.Markdown(notice_markdown, elem_id="notice_markdown")
with gr.Group(elem_id="share-region-anony"):
with gr.Accordion("πŸ” Expand to see all Arena players", open=False):
model_description_md = get_model_description_md(model_list)
gr.Markdown(model_description_md, elem_id="model_description_markdown")
with gr.Row():
with gr.Column():
normal_left = gr.Image(width=512, label = "Model A", show_copy_button=True)
rgb_left = gr.Image(width=512, label = "Model A", show_copy_button=True)
with gr.Column():
normal_right = gr.Image(width=512, label = "Model B", show_copy_button=True,)
rgb_right = gr.Image(width=512, label = "Model B", show_copy_button=True,)
with gr.Row():
with gr.Column():
model_selector_left =gr.Markdown("", visible=False)
with gr.Column():
model_selector_right = gr.Markdown("", visible=False)
with gr.Row():
slow_warning = gr.Markdown("", elem_id="notice_markdown")
with gr.Row(elem_id="Geometry Quality"):
geo_leftvote_btn = gr.Button(
value="πŸ‘ˆ A is better", visible=False, interactive=False
)
geo_rightvote_btn = gr.Button(
value="πŸ‘‰ B is better", visible=False, interactive=False
)
geo_tie_btn = gr.Button(value="🀝 Tie", visible=False, interactive=False)
geo_bothbad_btn = gr.Button(
value="πŸ‘Ž Both are bad", visible=False, interactive=False
)
with gr.Row(elem_id="Texture Quality"):
text_leftvote_btn = gr.Button(
value="πŸ‘ˆ A is better", visible=False, interactive=False
)
text_rightvote_btn = gr.Button(
value="πŸ‘‰ B is better", visible=False, interactive=False
)
text_tie_btn = gr.Button(value="🀝 Tie", visible=False, interactive=False)
text_bothbad_btn = gr.Button(
value="πŸ‘Ž Both are bad", visible=False, interactive=False
)
with gr.Row(elem_id="Alignment Quality"):
align_leftvote_btn = gr.Button(
value="πŸ‘ˆ A is better", visible=False, interactive=False
)
align_rightvote_btn = gr.Button(
value="πŸ‘‰ B is better", visible=False, interactive=False
)
align_tie_btn = gr.Button(value="🀝 Tie", visible=False, interactive=False)
align_bothbad_btn = gr.Button(
value="πŸ‘Ž Both are bad", visible=False, interactive=False
)
with gr.Row():
textbox = gr.Textbox(
show_label=False,
placeholder="πŸ‘‰ Enter your prompt or Sample a random prompt, and press ENTER",
container=True,
elem_id="input_box",
)
sample_btn = gr.Button(value="🎲 Sample", variant="primary", scale=0)
send_btn = gr.Button(value="πŸ“€ Send", variant="primary", scale=0)
with gr.Row():
clear_btn = gr.Button(value="πŸ—‘οΈ Clear", interactive=False)
regenerate_btn = gr.Button(value="πŸ”„ Regenerate", interactive=False)
share_btn = gr.Button(value="πŸ“· Share")
gr.Markdown(acknowledgment_md, elem_id="ack_markdown")
geo_btn_list = [geo_leftvote_btn, geo_rightvote_btn, geo_tie_btn, geo_bothbad_btn]
text_btn_list = [text_leftvote_btn, text_rightvote_btn, text_tie_btn, text_bothbad_btn]
align_btn_list = [align_leftvote_btn, align_rightvote_btn, align_tie_btn, align_bothbad_btn]
states = [state_0, state_1]
model_selectors = [model_selector_left, model_selector_right]
results = [normal_left, rgb_left, normal_right, rgb_right]
for btn_list in [geo_btn_list, text_btn_list, align_btn_list]:
leftvote_btn, rightvote_btn, tie_btn, bothbad_btn = btn_list
leftvote_btn.click(
leftvote_last_response,
states + model_selectors,
[textbox] + btn_list + model_selectors
)
rightvote_btn.click(
rightvote_last_response,
states + model_selectors,
[textbox] + btn_list + model_selectors
)
tie_btn.click(
tievote_last_response,
states + model_selectors,
[textbox] + btn_list + model_selectors
)
bothbad_btn.click(
bothbad_vote_last_response,
states + model_selectors,
[textbox] + btn_list + model_selectors
)
sample_btn.click(
sample_prompt,
states + model_selectors + [prompt_list],
states + [textbox],
api_name="sample_btn_anony"
)
textbox.submit(
sample_model,
states + [model_list, False],
states + model_selectors
).then(
gen_func,
states + [textbox] + model_selectors + [prompt_list],
states + results + model_selectors,
api_name="submit_btn_anony"
).then(
enable_buttons_side_by_side,
None,
geo_btn_list + text_btn_list + align_btn_list + [regenerate_btn, clear_btn]
)
send_btn.click(
sample_model,
states + [model_list, False],
states + model_selectors
).then(
gen_func,
states + [textbox] + model_selectors + [prompt_list],
states + results + model_selectors,
api_name="send_btn_anony"
).then(
enable_buttons_side_by_side,
None,
geo_btn_list + text_btn_list + align_btn_list + [regenerate_btn, clear_btn]
)
clear_btn.click(
clear_history_side_by_side_anony,
None,
states + [textbox] + results + model_selectors,
api_name="clear_btn_anony"
).then(
disable_buttons_side_by_side,
None,
geo_btn_list + text_btn_list + align_btn_list + [regenerate_btn, clear_btn]
)
regenerate_btn.click(
sample_model,
states + [model_list, False],
states + model_selectors
).then(
gen_func,
states + [textbox] + model_selectors + [prompt_list],
states + results + model_selectors,
api_name="regenerate_btn_anony"
).then(
enable_buttons_side_by_side,
None,
geo_btn_list + text_btn_list + align_btn_list + [regenerate_btn, clear_btn]
)
share_btn.click(
share_click,
states + model_selectors,
[],
js=share_js
)