Spaces:
Running
Running
import datetime | |
import time | |
import json | |
import uuid | |
import gradio as gr | |
from pathlib import Path | |
from .utils import * | |
from .log_utils import build_logger | |
from constants import IMAGE_DIR, EVALUATE_DIMS | |
from model.model_registry import model_info | |
t2s_logger = build_logger("gradio_web_server_text2shape", "gr_web_text2shape.log") # t2s = image generation, loggers for single model direct chat | |
t2s_multi_logger = build_logger("gradio_web_server_text2shape_multi", "gr_web_text2shape_multi.log") # t2s_multi = image generation multi, loggers for side-by-side and battle | |
i2s_logger = build_logger("gradio_web_server_image2shape", "gr_web_image2shape.log") # i2s = image editing, loggers for single model direct chat | |
i2s_multi_logger = build_logger("gradio_web_server_image2shape_multi", "gr_web_image2shape_multi.log") # i2s_multi = image editing multi, loggers for side-by-side and battle | |
def remove_suffix(name): | |
if name.endswith("-t") or name.endswith("-i"): | |
return name[:-2] | |
else: | |
return name | |
def vote_last_response_t2s(state, dim, vote_type, model_selector, request: gr.Request): | |
with open(get_conv_log_filename(), "a") as fout: | |
data = { | |
"tstamp": round(time.time(), 4), | |
"dim": dim, | |
"type": vote_type, | |
"model": model_selector, | |
"state": state.dict(), | |
"ip": get_ip(request), | |
} | |
fout.write(json.dumps(data) + "\n") | |
append_json_item_on_log_server(data, get_conv_log_filename()) | |
def vote_last_response_t2s_multi(states, dim, vote_type, is_anony: bool, model_selectors, request: gr.Request): | |
with open(get_conv_log_filename(), "a") as fout: | |
data = { | |
"tstamp": round(time.time(), 4), | |
"dim": dim, | |
"type": vote_type, | |
"anony": is_anony, | |
"models": [x for x in model_selectors], | |
"states": [x.dict() for x in states], | |
"ip": get_ip(request), | |
} | |
fout.write(json.dumps(data) + "\n") | |
append_json_item_on_log_server(data, get_conv_log_filename()) | |
# for state in states: | |
# output_file = f'{IMAGE_DIR}/text2shape/{state.conv_id}.png' | |
# with open(output_file, 'w') as f: | |
# state.output.save(f, 'PNG') | |
# save_image_file_on_log_server(output_file) | |
def vote_last_response_i2s(state, dim, vote_type, model_selector, request: gr.Request): | |
with open(get_conv_log_filename(), "a") as fout: | |
data = { | |
"tstamp": round(time.time(), 4), | |
"dim": dim, | |
"type": vote_type, | |
"model": model_selector, | |
"state": state.dict(), | |
"ip": get_ip(request), | |
} | |
fout.write(json.dumps(data) + "\n") | |
append_json_item_on_log_server(data, get_conv_log_filename()) | |
# output_file = f'{IMAGE_DIR}/image2shape/{state.conv_id}.png' | |
# source_file = f'{IMAGE_DIR}/image2shape/{state.conv_id}_source.png' | |
# with open(output_file, 'w') as f: | |
# state.output.save(f, 'PNG') | |
# with open(source_file, 'w') as sf: | |
# state.source_image.save(sf, 'PNG') | |
# save_image_file_on_log_server(output_file) | |
# save_image_file_on_log_server(source_file) | |
def vote_last_response_i2s_multi(states, dim, vote_type, is_anony, model_selectors, request: gr.Request): | |
with open(get_conv_log_filename(), "a") as fout: | |
data = { | |
"tstamp": round(time.time(), 4), | |
"dim": dim, | |
"type": vote_type, | |
"anony": is_anony, | |
"models": [x for x in model_selectors], | |
"states": [x.dict() for x in states], | |
"ip": get_ip(request), | |
} | |
fout.write(json.dumps(data) + "\n") | |
append_json_item_on_log_server(data, get_conv_log_filename()) | |
# for state in states: | |
# output_file = f'{IMAGE_DIR}/image2shape/{state.conv_id}.png' | |
# source_file = f'{IMAGE_DIR}/image2shape/{state.conv_id}_source.png' | |
# with open(output_file, 'w') as f: | |
# state.output.save(f, 'PNG') | |
# with open(source_file, 'w') as sf: | |
# state.source_image.save(sf, 'PNG') | |
# save_image_file_on_log_server(output_file) | |
# save_image_file_on_log_server(source_file) | |
## Text-to-Shape Generation (t2s) Single Model Direct Chat | |
def upvote_last_response_t2s(state, model_selector, dim_md, request: gr.Request): | |
ip = get_ip(request) | |
state.evaluted_dims += 1 | |
t2s_logger.info(f"upvote [{dim_md}]. ip: {ip}") | |
vote_last_response_t2s(state, dim_md, "upvote", model_selector, request) | |
return (state,) + (disable_btn,) * 3 | |
def downvote_last_response_t2s(state, model_selector, dim_md, request: gr.Request): | |
ip = get_ip(request) | |
state.evaluted_dims += 1 | |
t2s_logger.info(f"downvote [{dim_md}]. ip: {ip}") | |
vote_last_response_t2s(state, dim_md, "downvote", model_selector, request) | |
return (state,) + (disable_btn,) * 3 | |
def flag_last_response_t2s(state, model_selector, dim_md, request: gr.Request): | |
ip = get_ip(request) | |
state.evaluted_dims += 1 | |
t2s_logger.info(f"flag [{dim_md}]. ip: {ip}") | |
vote_last_response_t2s(state, dim_md, "flag", model_selector, request) | |
return (state,) + (disable_btn,) * 3 | |
## Text-to-Shape Generation Multi (t2s_multi) Side-by-Side and Battle | |
def leftvote_last_response_t2s_named( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
t2s_multi_logger.info(f"leftvote [{dim_md}] (named). ip: {get_ip(request)}") | |
vote_last_response_t2s_multi( | |
[state0, state1], dim_md, "leftvote", False, [model_selector0, model_selector1], request | |
) | |
return (state0, state1) + (disable_btn,) * 4 | |
def rightvote_last_response_t2s_named( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
t2s_multi_logger.info(f"rightvote [{dim_md}] (named). ip: {get_ip(request)}") | |
vote_last_response_t2s_multi( | |
[state0, state1], dim_md, "rightvote", False, [model_selector0, model_selector1], request | |
) | |
return (state0, state1) + (disable_btn,) * 4 | |
def tievote_last_response_t2s_named( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
t2s_multi_logger.info(f"tievote [{dim_md}] (named). ip: {get_ip(request)}") | |
vote_last_response_t2s_multi( | |
[state0, state1], dim_md, "tievote", False, [model_selector0, model_selector1], request | |
) | |
return (state0, state1) + (disable_btn,) * 4 | |
def bothbad_vote_last_response_t2s_named( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
t2s_multi_logger.info(f"bothbad_vote [{dim_md}] (named). ip: {get_ip(request)}") | |
vote_last_response_t2s_multi( | |
[state0, state1], dim_md, "bothbad_vote", False, [model_selector0, model_selector1], request | |
) | |
return (state0, state1) + (disable_btn,) * 4 | |
def leftvote_last_response_t2s_anony( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
t2s_multi_logger.info(f"leftvote [{dim_md}] (anony). ip: {get_ip(request)}") | |
vote_last_response_t2s_multi( | |
[state0, state1], dim_md, "leftvote", True, [model_selector0, model_selector1], request | |
) | |
# if state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS: | |
# names = (gr.Markdown(f"### Model A: {state0.model_name}", visible=True), gr.Markdown(f"### Model B: {state1.model_name}", visible=True)) | |
# return (state0, state1) + (disable_btn,) * 4 + names | |
# else: | |
# names = (gr.Markdown(f"### Model A: {state0.model_name}", visible=False), gr.Markdown(f"### Model B: {state1.model_name}", visible=False)) | |
# return (state0, state1) + (disable_btn,) * 4 + names | |
is_visible = (state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS) | |
return (state0, state1) \ | |
+ (disable_btn,) * 4 \ | |
+ (gr.Markdown(f"### Model A: {model_info[state0.model_name].simple_name}", visible=is_visible), | |
gr.Markdown(f"### Model B: {model_info[state1.model_name].simple_name}", visible=is_visible)) | |
def rightvote_last_response_t2s_anony( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
t2s_multi_logger.info(f"rightvote [{dim_md}] (anony). ip: {get_ip(request)}") | |
vote_last_response_t2s_multi( | |
[state0, state1], dim_md, "rightvote", True, [model_selector0, model_selector1], request | |
) | |
# if state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS: | |
# names = (gr.Markdown(f"### Model A: {state0.model_name}", visible=True), gr.Markdown(f"### Model B: {state1.model_name}", visible=True)) | |
# return (state0, state1) + (disable_btn,) * 4 + names | |
# else: | |
# return (state0, state1) + (disable_btn,) * 4 + ("", "") | |
is_visible = (state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS) | |
return (state0, state1) \ | |
+ (disable_btn,) * 4 \ | |
+ (gr.Markdown(f"### Model A: {model_info[state0.model_name].simple_name}", visible=is_visible), | |
gr.Markdown(f"### Model B: {model_info[state1.model_name].simple_name}", visible=is_visible)) | |
def tievote_last_response_t2s_anony( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
t2s_multi_logger.info(f"tievote [{dim_md}] (anony). ip: {get_ip(request)}") | |
vote_last_response_t2s_multi( | |
[state0, state1], dim_md, "tievote", True, [model_selector0, model_selector1], request | |
) | |
# if state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS: | |
# names = (gr.Markdown(f"### Model A: {state0.model_name}", visible=True), gr.Markdown(f"### Model B: {state1.model_name}", visible=True)) | |
# return (state0, state1) + (disable_btn,) * 4 + names | |
# else: | |
# return (state0, state1) + (disable_btn,) * 4 + ("", "") | |
is_visible = (state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS) | |
return (state0, state1) \ | |
+ (disable_btn,) * 4 \ | |
+ (gr.Markdown(f"### Model A: {model_info[state0.model_name].simple_name}", visible=is_visible), | |
gr.Markdown(f"### Model B: {model_info[state1.model_name].simple_name}", visible=is_visible)) | |
def bothbad_vote_last_response_t2s_anony( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
t2s_multi_logger.info(f"bothbad_vote [{dim_md}] (anony). ip: {get_ip(request)}") | |
vote_last_response_t2s_multi( | |
[state0, state1], dim_md, "bothbad_vote", True, [model_selector0, model_selector1], request | |
) | |
# if state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS: | |
# names = (gr.Markdown(f"### Model A: {state0.model_name}", visible=True), gr.Markdown(f"### Model B: {state1.model_name}", visible=True)) | |
# return (state0, state1) + (disable_btn,) * 4 + names | |
# else: | |
# return (state0, state1) + (disable_btn,) * 4 + ("", "") | |
is_visible = (state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS) | |
return (state0, state1) \ | |
+ (disable_btn,) * 4 \ | |
+ (gr.Markdown(f"### Model A: {model_info[state0.model_name].simple_name}", visible=is_visible), | |
gr.Markdown(f"### Model B: {model_info[state1.model_name].simple_name}", visible=is_visible)) | |
## Image-to-Shape (i2s) Single Model Direct Chat | |
def upvote_last_response_i2s(state, model_selector, dim_md, request: gr.Request): | |
ip = get_ip(request) | |
state.evaluted_dims += 1 | |
i2s_logger.info(f"upvote [{dim_md}]. ip: {ip}") | |
vote_last_response_i2s(state, dim_md, "upvote", model_selector, request) | |
return (state,) + (disable_btn,) * 3 | |
def downvote_last_response_i2s(state, model_selector, dim_md, request: gr.Request): | |
ip = get_ip(request) | |
state.evaluted_dims += 1 | |
i2s_logger.info(f"downvote [{dim_md}]. ip: {ip}") | |
vote_last_response_i2s(state, dim_md, "downvote", model_selector, request) | |
return (state,) + (disable_btn,) * 3 | |
def flag_last_response_i2s(state, model_selector, dim_md, request: gr.Request): | |
ip = get_ip(request) | |
state.evaluted_dims += 1 | |
i2s_logger.info(f"flag [{dim_md}]. ip: {ip}") | |
vote_last_response_i2s(state, dim_md, "flag", model_selector, request) | |
return (state,) + (disable_btn,) * 3 | |
## Image-to-Shape Multi (i2s_multi) Side-by-Side and Battle | |
def leftvote_last_response_i2s_named( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
i2s_multi_logger.info(f"leftvote [{dim_md}] (named). ip: {get_ip(request)}") | |
vote_last_response_i2s_multi( | |
[state0, state1], dim_md, "leftvote", False, [model_selector0, model_selector1], request | |
) | |
return (state0, state1) + (disable_btn,) * 4 | |
def rightvote_last_response_i2s_named( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
i2s_multi_logger.info(f"rightvote [{dim_md}] (named). ip: {get_ip(request)}") | |
vote_last_response_i2s_multi( | |
[state0, state1], dim_md, "rightvote", False, [model_selector0, model_selector1], request | |
) | |
return (state0, state1) + (disable_btn,) * 4 | |
def tievote_last_response_i2s_named( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
i2s_multi_logger.info(f"tievote [{dim_md}] (named). ip: {get_ip(request)}") | |
vote_last_response_i2s_multi( | |
[state0, state1], dim_md, "tievote", False, [model_selector0, model_selector1], request | |
) | |
return (state0, state1) + (disable_btn,) * 4 | |
def bothbad_vote_last_response_i2s_named( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
i2s_multi_logger.info(f"bothbad_vote [{dim_md}] (named). ip: {get_ip(request)}") | |
vote_last_response_i2s_multi( | |
[state0, state1], dim_md, "bothbad_vote", False, [model_selector0, model_selector1], request | |
) | |
return (state0, state1) + (disable_btn,) * 4 | |
def leftvote_last_response_i2s_anony( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
i2s_multi_logger.info(f"leftvote [{dim_md}] (anony). ip: {get_ip(request)}") | |
vote_last_response_i2s_multi( | |
[state0, state1], dim_md, "leftvote", True, [model_selector0, model_selector1], request | |
) | |
# if state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS: | |
# names = (gr.Markdown(f"### Model A: {state0.model_name}", visible=True), gr.Markdown(f"### Model B: {state1.model_name}", visible=True)) | |
# return (state0, state1) + (disable_btn,) * 4 + names | |
# else: | |
# return (state0, state1) + (disable_btn,) * 4 + ("", "") | |
is_visible = (state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS) | |
return (state0, state1) \ | |
+ (disable_btn,) * 4 \ | |
+ (gr.Markdown(f"### Model A: {model_info[state0.model_name].simple_name}", visible=is_visible), | |
gr.Markdown(f"### Model B: {model_info[state1.model_name].simple_name}", visible=is_visible)) | |
def rightvote_last_response_i2s_anony( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
i2s_multi_logger.info(f"rightvote [{dim_md}] (anony). ip: {get_ip(request)}") | |
vote_last_response_i2s_multi( | |
[state0, state1], dim_md, "rightvote", True, [model_selector0, model_selector1], request | |
) | |
# if state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS: | |
# names = (gr.Markdown(f"### Model A: {state0.model_name}", visible=True), gr.Markdown(f"### Model B: {state1.model_name}", visible=True)) | |
# return (state0, state1) + (disable_btn,) * 4 + names | |
# else: | |
# return (state0, state1) + (disable_btn,) * 4 + ("", "") | |
is_visible = (state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS) | |
return (state0, state1) \ | |
+ (disable_btn,) * 4 \ | |
+ (gr.Markdown(f"### Model A: {model_info[state0.model_name].simple_name}", visible=is_visible), | |
gr.Markdown(f"### Model B: {model_info[state1.model_name].simple_name}", visible=is_visible)) | |
def tievote_last_response_i2s_anony( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
i2s_multi_logger.info(f"tievote [{dim_md}] (anony). ip: {get_ip(request)}") | |
vote_last_response_i2s_multi( | |
[state0, state1], dim_md, "tievote", True, [model_selector0, model_selector1], request | |
) | |
# if state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS: | |
# names = (gr.Markdown(f"### Model A: {state0.model_name}", visible=True), gr.Markdown(f"### Model B: {state1.model_name}", visible=True)) | |
# return (state0, state1) + (disable_btn,) * 4 + names | |
# else: | |
# return (state0, state1) + (disable_btn,) * 4 + ("", "") | |
is_visible = (state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS) | |
return (state0, state1) \ | |
+ (disable_btn,) * 4 \ | |
+ (gr.Markdown(f"### Model A: {model_info[state0.model_name].simple_name}", visible=is_visible), | |
gr.Markdown(f"### Model B: {model_info[state1.model_name].simple_name}", visible=is_visible)) | |
def bothbad_vote_last_response_i2s_anony( | |
state0, state1, model_selector0, model_selector1, dim_md, request: gr.Request | |
): | |
state0.evaluted_dims += 1 | |
state1.evaluted_dims += 1 | |
i2s_multi_logger.info(f"bothbad_vote [{dim_md}] (anony). ip: {get_ip(request)}") | |
vote_last_response_i2s_multi( | |
[state0, state1], dim_md, "bothbad_vote", True, [model_selector0, model_selector1], request | |
) | |
# if state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS: | |
# names = (gr.Markdown(f"### Model A: {state0.model_name}", visible=True), gr.Markdown(f"### Model B: {state1.model_name}", visible=True)) | |
# return (state0, state1) + (disable_btn,) * 4 + names | |
# else: | |
# return (state0, state1) + (disable_btn,) * 4 + ("", "") | |
is_visible = (state0.evaluted_dims == state1.evaluted_dims == EVALUATE_DIMS) | |
return (state0, state1) \ | |
+ (disable_btn,) * 4 \ | |
+ (gr.Markdown(f"### Model A: {model_info[state0.model_name].simple_name}", visible=is_visible), | |
gr.Markdown(f"### Model B: {model_info[state1.model_name].simple_name}", visible=is_visible)) | |
share_js = """ | |
function (a, b, c, d) { | |
const captureElement = document.querySelector('#share-region-named'); | |
html2canvas(captureElement) | |
.then(canvas => { | |
canvas.style.display = 'none' | |
document.body.appendChild(canvas) | |
return canvas | |
}) | |
.then(canvas => { | |
const image = canvas.toDataURL('image/png') | |
const a = document.createElement('a') | |
a.setAttribute('download', 'chatbot-arena.png') | |
a.setAttribute('href', image) | |
a.click() | |
canvas.remove() | |
}); | |
return [a, b, c, d]; | |
} | |
""" | |
def share_click_t2s_multi(state0, state1, model_selector0, model_selector1, request: gr.Request): | |
t2s_multi_logger.info(f"share (anony). ip: {get_ip(request)}") | |
if state0 is not None and state1 is not None: | |
vote_last_response_t2s_multi( | |
[state0, state1], "", "share", True, [model_selector0, model_selector1], request | |
) | |
def share_click_i2s_multi(state0, state1, model_selector0, model_selector1, request: gr.Request): | |
i2s_multi_logger.info(f"share (anony). ip: {get_ip(request)}") | |
if state0 is not None and state1 is not None: | |
vote_last_response_i2s_multi( | |
[state0, state1], "", "share", True, [model_selector0, model_selector1], request | |
) | |