This view is limited to 50 files because it contains too many changes.  See the raw diff here.
Files changed (50) hide show
  1. .gitattributes +0 -1
  2. .gitignore +0 -175
  3. .gitmodules +0 -0
  4. .idea/.gitignore +0 -8
  5. .idea/GenAI-Arena.iml +0 -15
  6. .idea/inspectionProfiles/profiles_settings.xml +0 -6
  7. .idea/modules.xml +0 -8
  8. .idea/vcs.xml +0 -6
  9. README.md +8 -44
  10. app.py +0 -104
  11. arena_elo/LICENSE +0 -21
  12. arena_elo/README.md +0 -46
  13. arena_elo/elo_rating/__init__.py +0 -0
  14. arena_elo/elo_rating/basic_stats.py +0 -227
  15. arena_elo/elo_rating/clean_battle_data.py +0 -378
  16. arena_elo/elo_rating/elo_analysis.py +0 -413
  17. arena_elo/elo_rating/generate_leaderboard.py +0 -68
  18. arena_elo/elo_rating/inspect_conv_rating.py +0 -234
  19. arena_elo/elo_rating/inspect_cost.py +0 -177
  20. arena_elo/elo_rating/inspect_elo_rating_pkl.py +0 -33
  21. arena_elo/elo_rating/upload_battle_data.py +0 -168
  22. arena_elo/elo_rating/utils.py +0 -91
  23. arena_elo/evaluator/convert_to_evaluator_data.py +0 -134
  24. arena_elo/evaluator/rating_analysis.ipynb +0 -321
  25. arena_elo/get_latest_data.sh +0 -17
  26. arena_elo/pyproject.toml +0 -28
  27. arena_elo/requirements.txt +0 -28
  28. arena_elo/results/20240220/elo_results_image_editing.pkl +0 -3
  29. arena_elo/results/20240220/elo_results_t2i_generation.pkl +0 -3
  30. arena_elo/results/20240220/image_editing_leaderboard.csv +0 -8
  31. arena_elo/results/20240220/t2i_generation_leaderboard.csv +0 -7
  32. arena_elo/results/20240315/clean_battle_image_editing.json +0 -794
  33. arena_elo/results/20240315/elo_results_image_editing.pkl +0 -3
  34. arena_elo/results/20240315/image_editing_leaderboard.csv +0 -8
  35. arena_elo/results/20240327/clean_battle_t2i_generation.json +0 -0
  36. arena_elo/results/20240327/elo_results_t2i_generation.pkl +0 -3
  37. arena_elo/results/20240327/t2i_generation_leaderboard.csv +0 -10
  38. arena_elo/results/20240328/clean_battle_image_editing.json +0 -890
  39. arena_elo/results/20240328/elo_results_image_editing.pkl +0 -3
  40. arena_elo/results/20240328/image_editing_leaderboard.csv +0 -8
  41. arena_elo/results/20240330/clean_battle_t2i_generation.json +0 -0
  42. arena_elo/results/20240330/elo_results_t2i_generation.pkl +0 -3
  43. arena_elo/results/20240330/t2i_generation_leaderboard.csv +0 -10
  44. arena_elo/results/20240408/clean_battle_t2i_generation.json +0 -0
  45. arena_elo/results/20240408/elo_results_t2i_generation.pkl +0 -3
  46. arena_elo/results/20240408/t2i_generation_leaderboard.csv +0 -10
  47. arena_elo/results/20240411/clean_battle_image_editing.json +0 -906
  48. arena_elo/results/20240411/clean_battle_t2i_generation.json +0 -0
  49. arena_elo/results/20240411/elo_results_image_editing.pkl +0 -3
  50. arena_elo/results/20240411/elo_results_t2i_generation.pkl +0 -3
.gitattributes CHANGED
@@ -33,4 +33,3 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
- examples/duck.jpg filter=lfs diff=lfs merge=lfs -text
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
.gitignore DELETED
@@ -1,175 +0,0 @@
1
- checkpoints/
2
-
3
- # Byte-compiled / optimized / DLL files
4
- __pycache__/
5
- *.py[cod]
6
- *$py.class
7
- src/
8
- # C extensions
9
- *.so
10
- temp
11
-
12
- # Distribution / packaging
13
- .Python
14
- build/
15
- develop-eggs/
16
- dist/
17
- downloads/
18
- eggs/
19
- .eggs/
20
- lib/
21
- lib64/
22
- parts/
23
- sdist/
24
- var/
25
- wheels/
26
- share/python-wheels/
27
- *.egg-info/
28
- .installed.cfg
29
- *.egg
30
- MANIFEST
31
-
32
- # PyInstaller
33
- # Usually these files are written by a python script from a template
34
- # before PyInstaller builds the exe, so as to inject date/other infos into it.
35
- *.manifest
36
- *.spec
37
-
38
- # Installer logs
39
- pip-log.txt
40
- pip-delete-this-directory.txt
41
-
42
- # Unit test / coverage reports
43
- htmlcov/
44
- .tox/
45
- .nox/
46
- .coverage
47
- .coverage.*
48
- .cache
49
- nosetests.xml
50
- coverage.xml
51
- *.cover
52
- *.py,cover
53
- .hypothesis/
54
- .pytest_cache/
55
- cover/
56
-
57
- # Translations
58
- *.mo
59
- *.pot
60
-
61
- # Django stuff:
62
- *.log
63
- local_settings.py
64
- db.sqlite3
65
- db.sqlite3-journal
66
-
67
- # Flask stuff:
68
- instance/
69
- .webassets-cache
70
-
71
- # Scrapy stuff:
72
- .scrapy
73
-
74
- # Sphinx documentation
75
- docs/_build/
76
-
77
- # PyBuilder
78
- .pybuilder/
79
- target/
80
-
81
- # Jupyter Notebook
82
- .ipynb_checkpoints
83
-
84
- # IPython
85
- profile_default/
86
- ipython_config.py
87
-
88
- # pyenv
89
- # For a library or package, you might want to ignore these files since the code is
90
- # intended to run in multiple environments; otherwise, check them in:
91
- # .python-version
92
-
93
- # pipenv
94
- # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
95
- # However, in case of collaboration, if having platform-specific dependencies or dependencies
96
- # having no cross-platform support, pipenv may install dependencies that don't work, or not
97
- # install all needed dependencies.
98
- #Pipfile.lock
99
-
100
- # poetry
101
- # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
102
- # This is especially recommended for binary packages to ensure reproducibility, and is more
103
- # commonly ignored for libraries.
104
- # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
105
- #poetry.lock
106
-
107
- # pdm
108
- # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
109
- #pdm.lock
110
- # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
111
- # in version control.
112
- # https://pdm.fming.dev/#use-with-ide
113
- .pdm.toml
114
-
115
- # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
116
- __pypackages__/
117
-
118
- # Celery stuff
119
- celerybeat-schedule
120
- celerybeat.pid
121
-
122
- # SageMath parsed files
123
- *.sage.py
124
-
125
- # Environments
126
- .env
127
- .venv
128
- env/
129
- venv/
130
- ENV/
131
- env.bak/
132
- venv.bak/
133
-
134
- # Spyder project settings
135
- .spyderproject
136
- .spyproject
137
-
138
- # Rope project settings
139
- .ropeproject
140
-
141
- # mkdocs documentation
142
- /site
143
-
144
- # mypy
145
- .mypy_cache/
146
- .dmypy.json
147
- dmypy.json
148
-
149
- # Pyre type checker
150
- .pyre/
151
-
152
- # pytype static type analyzer
153
- .pytype/
154
-
155
- # Cython debug symbols
156
- cython_debug/
157
-
158
- # PyCharm
159
- # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
160
- # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
161
- # and can be added to the global gitignore or merged into this file. For a more nuclear
162
- # option (not recommended) you can uncomment the following to ignore the entire idea folder.
163
- #.idea/
164
- /tmp
165
- /logs
166
- /*.json
167
- /*.jpg
168
- /*.ipynb
169
- /GenAI-Arena-hf-logs
170
- /3DGen-Arena-logs*
171
- /tmp*
172
- /arena_elo/results/**/*.jpg
173
- /arena_elo/results/**/*.png
174
- /arena_elo/6_04_log_results
175
- /arena_elo/update_elo_rating_6_04.sh
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
.gitmodules DELETED
File without changes
.idea/.gitignore DELETED
@@ -1,8 +0,0 @@
1
- # Default ignored files
2
- /shelf/
3
- /workspace.xml
4
- # Editor-based HTTP Client requests
5
- /httpRequests/
6
- # Datasource local storage ignored files
7
- /dataSources/
8
- /dataSources.local.xml
 
 
 
 
 
 
 
 
 
.idea/GenAI-Arena.iml DELETED
@@ -1,15 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="PYTHON_MODULE" version="4">
3
- <component name="NewModuleRootManager">
4
- <content url="file://$MODULE_DIR$" />
5
- <orderEntry type="inheritedJdk" />
6
- <orderEntry type="sourceFolder" forTests="false" />
7
- </component>
8
- <component name="PyDocumentationSettings">
9
- <option name="format" value="GOOGLE" />
10
- <option name="myDocStringFormat" value="Google" />
11
- </component>
12
- <component name="TemplatesService">
13
- <option name="TEMPLATE_CONFIGURATION" value="Jinja2" />
14
- </component>
15
- </module>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
.idea/inspectionProfiles/profiles_settings.xml DELETED
@@ -1,6 +0,0 @@
1
- <component name="InspectionProjectProfileManager">
2
- <settings>
3
- <option name="USE_PROJECT_PROFILE" value="false" />
4
- <version value="1.0" />
5
- </settings>
6
- </component>
 
 
 
 
 
 
 
.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/GenAI-Arena.iml" filepath="$PROJECT_DIR$/.idea/GenAI-Arena.iml" />
6
- </modules>
7
- </component>
8
- </project>
 
 
 
 
 
 
 
 
 
.idea/vcs.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="" vcs="Git" />
5
- </component>
6
- </project>
 
 
 
 
 
 
 
README.md CHANGED
@@ -1,47 +1,11 @@
1
  ---
2
- title: GenAI Arena
3
- emoji: 📈
4
- colorFrom: purple
5
- colorTo: pink
6
- sdk: gradio
7
- sdk_version: 4.41.0
8
- python_version: 3.12
9
- app_file: app.py
10
- pinned: true
11
- license: mit
12
- tags:
13
- - arena
14
- - leaderboard
15
- short_description: Realtime Image/Video Gen AI Arena
16
  ---
17
 
18
- ## Installation
19
-
20
- - for cuda 11.8
21
- ```bash
22
- conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
23
- pip3 install -U xformers --index-url https://download.pytorch.org/whl/cu118
24
- pip install -r requirements.txt
25
- ```
26
- - for cuda 12.1
27
- ```bash
28
- conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
29
- pip install -r requirements.txt
30
- ```
31
-
32
- ## Start Hugging Face UI
33
- ```bash
34
- python app.py
35
- ```
36
-
37
- ## Start Log server
38
- ```bash
39
- uvicorn serve.log_server:app --reload --port 22005 --host 0.0.0.0
40
- ```
41
-
42
- ## Update leaderboard
43
- ```bash
44
- cd arena_elo && bash update_leaderboard.sh
45
- ```
46
-
47
- Paper: arxiv.org/abs/2406.04485
 
1
  ---
2
+ title: GenAI-Arena
3
+ emoji: 🚀
4
+ colorFrom: indigo
5
+ colorTo: yellow
6
+ sdk: static
7
+ pinned: false
8
+ header: mini
 
 
 
 
 
 
 
9
  ---
10
 
11
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app.py DELETED
@@ -1,104 +0,0 @@
1
- import gradio as gr
2
- import os
3
- from serve.gradio_web import *
4
- from serve.gradio_web_image_editing import *
5
- from serve.gradio_web_video_generation import *
6
- from serve.leaderboard import build_leaderboard_tab
7
- from model.model_manager import ModelManager
8
- from pathlib import Path
9
- from serve.constants import SERVER_PORT, ROOT_PATH, ELO_RESULTS_DIR
10
-
11
- def build_combine_demo(models, elo_results_file, leaderboard_table_file):
12
-
13
- with gr.Blocks(
14
- title="Play with Open Vision Models",
15
- theme=gr.themes.Default(),
16
- css=block_css,
17
- ) as demo:
18
- with gr.Tabs() as tabs_combine:
19
- with gr.Tab("Image Generation", id=0):
20
- with gr.Tabs() as tabs_ig:
21
- with gr.Tab("Generation Arena (battle)", id=0):
22
- build_side_by_side_ui_anony(models)
23
-
24
- with gr.Tab("Generation Arena (side-by-side)", id=1):
25
- build_side_by_side_ui_named(models)
26
-
27
- with gr.Tab("Generation Playground", id=2): #Direct Chat
28
- build_single_model_ui(models, add_promotion_links=True)
29
- if elo_results_file:
30
- with gr.Tab("Generation Leaderboard", id=3):
31
- build_leaderboard_tab(elo_results_file['t2i_generation'], leaderboard_table_file['t2i_generation'])
32
-
33
- with gr.Tab("Image Edition", id=5):
34
- with gr.Tabs() as tabs_ie:
35
- with gr.Tab("Edition Arena (battle)", id=5):
36
- build_side_by_side_ui_anony_ie(models)
37
-
38
- with gr.Tab("Edition Arena (side-by-side)", id=6):
39
- build_side_by_side_ui_named_ie(models)
40
-
41
- with gr.Tab("Edition Playground", id=7): #Direct Chat
42
- build_single_model_ui_ie(models, add_promotion_links=True)
43
- if elo_results_file:
44
- with gr.Tab("Edition Leaderboard", id=8):
45
- build_leaderboard_tab(elo_results_file['image_editing'], leaderboard_table_file['image_editing'])
46
-
47
- with gr.Tab("Video Generation", id=10):
48
- with gr.Tabs() as tabs_vg:
49
- with gr.Tab("Video Generation Arena (battle)", id=10):
50
- build_side_by_side_ui_anony_vg(models)
51
-
52
- with gr.Tab("Video Generation Arena (side-by-side)", id=11):
53
- build_side_by_side_ui_named_vg(models)
54
-
55
- with gr.Tab("Video Generation Playground", id=12): #Direct Chat
56
- build_single_model_ui_vg(models, add_promotion_links=True)
57
- if elo_results_file and 'video_generation' in elo_results_file:
58
- with gr.Tab("Video Generation Leaderboard", id=13):
59
- build_leaderboard_tab(elo_results_file['video_generation'], leaderboard_table_file['video_generation'])
60
- with gr.Tab("About Us", id=4):
61
- build_about()
62
-
63
- return demo
64
-
65
-
66
- def load_elo_results(elo_results_dir):
67
- from collections import defaultdict
68
- elo_results_file = defaultdict(lambda: None)
69
- leaderboard_table_file = defaultdict(lambda: None)
70
- if elo_results_dir is not None:
71
- elo_results_dir = Path(elo_results_dir)
72
- elo_results_file = {}
73
- leaderboard_table_file = {}
74
- for file in elo_results_dir.glob('elo_results_*.pkl'):
75
- if 't2i_generation' in file.name:
76
- elo_results_file['t2i_generation'] = file
77
- elif 'image_editing' in file.name:
78
- elo_results_file['image_editing'] = file
79
- elif 'video_generation' in file.name:
80
- elo_results_file['video_generation'] = file
81
- else:
82
- raise ValueError(f"Unknown file name: {file.name}")
83
- for file in elo_results_dir.glob('*_leaderboard.csv'):
84
- if 't2i_generation' in file.name:
85
- leaderboard_table_file['t2i_generation'] = file
86
- elif 'image_editing' in file.name:
87
- leaderboard_table_file['image_editing'] = file
88
- elif 'video_generation' in file.name:
89
- leaderboard_table_file['video_generation'] = file
90
- else:
91
- raise ValueError(f"Unknown file name: {file.name}")
92
-
93
- return elo_results_file, leaderboard_table_file
94
-
95
- if __name__ == "__main__":
96
- server_port = int(SERVER_PORT)
97
- root_path = ROOT_PATH
98
- elo_results_dir = ELO_RESULTS_DIR
99
- models = ModelManager(enable_nsfw=False, do_pre_download=True, do_debug_packages=True)
100
- # models = ModelManager(enable_nsfw=False, do_pre_download=False, do_debug_packages=False)
101
-
102
- elo_results_file, leaderboard_table_file = load_elo_results(elo_results_dir)
103
- demo = build_combine_demo(models, elo_results_file, leaderboard_table_file)
104
- demo.queue(max_size=20).launch(server_port=server_port, root_path=ROOT_PATH)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 WildVision-Bench
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/README.md DELETED
@@ -1,46 +0,0 @@
1
- ## Computing the Elo Ratings
2
-
3
-
4
- ```bash
5
- apt-get -y install pkg-config
6
- pip install -r requirements.txt
7
- ```
8
-
9
-
10
- ### to update the leaderboard
11
-
12
- ```bash
13
- export LOGDIR="/path/to/your/logdir"
14
- bash update_elo_rating.sh
15
- ```
16
-
17
- ### to inspect the leaderboard status
18
- ```bash
19
- python -m elo_rating.inspect_elo_rating_pkl
20
- ```
21
-
22
- ### to inspect the collected data status and cost
23
- ```bash
24
- export LOGDIR="/path/to/your/logdir"
25
- python -m elo_rating.inspect_cost
26
- ```
27
-
28
- ### to upload the battle data to hugging face🤗
29
- ```bash
30
- export HUGGINGFACE_TOKEN="your_huggingface_token"
31
- bash get_latest_data.sh
32
- python -m elo_rating.upload_battle_data --repo_id "WildVision/wildvision-bench" --log_dir "./vision-arena-logs/"
33
- ```
34
-
35
- ### to upload the chat data to hugging face🤗
36
- ```bash
37
- export HUGGINGFACE_TOKEN="your_huggingface_token"
38
- bash get_latest_data.sh
39
- python -m elo_rating.upload_chat_data --repo_id "WildVision/wildvision-bench" --log_dir "./vision-arena-logs/"
40
- ```
41
-
42
-
43
- ### to get the collected data
44
- ```bash
45
- python -m
46
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/elo_rating/__init__.py DELETED
File without changes
arena_elo/elo_rating/basic_stats.py DELETED
@@ -1,227 +0,0 @@
1
- import argparse
2
- import code
3
- import datetime
4
- import json
5
- import os
6
- from pytz import timezone
7
- import time
8
-
9
- import pandas as pd # pandas>=2.0.3
10
- import plotly.express as px
11
- import plotly.graph_objects as go
12
- from tqdm import tqdm
13
-
14
- NUM_SERVERS = 1
15
- LOG_ROOT_DIR = os.getenv("LOGDIR", None)
16
- if LOG_ROOT_DIR is None:
17
- raise ValueError("LOGDIR environment variable not set, please set it by `export LOGDIR=...`")
18
-
19
- def get_log_files(max_num_files=None):
20
- log_root = os.path.expanduser(LOG_ROOT_DIR)
21
- filenames = []
22
- if NUM_SERVERS == 1:
23
- for filename in os.listdir(log_root):
24
- if filename.endswith("-conv.json"):
25
- filepath = f"{log_root}/{filename}"
26
- name_tstamp_tuple = (filepath, os.path.getmtime(filepath))
27
- filenames.append(name_tstamp_tuple)
28
- else:
29
- for i in range(NUM_SERVERS):
30
- for filename in os.listdir(f"{log_root}/server{i}"):
31
- if filename.endswith("-conv.json"):
32
- filepath = f"{log_root}/server{i}/{filename}"
33
- name_tstamp_tuple = (filepath, os.path.getmtime(filepath))
34
- filenames.append(name_tstamp_tuple)
35
- # sort by tstamp
36
- filenames = sorted(filenames, key=lambda x: x[1])
37
- filenames = [x[0] for x in filenames]
38
-
39
- max_num_files = max_num_files or len(filenames)
40
- filenames = filenames[-max_num_files:]
41
- return filenames
42
-
43
-
44
- def load_log_files(filename):
45
- data = []
46
- for retry in range(5):
47
- try:
48
- lines = open(filename).readlines()
49
- break
50
- except FileNotFoundError:
51
- time.sleep(2)
52
-
53
- for l in lines:
54
- row = json.loads(l)
55
- data.append(
56
- dict(
57
- type=row["type"],
58
- tstamp=row["tstamp"],
59
- model=row.get("model", ""),
60
- models=row.get("models", ["", ""]),
61
- )
62
- )
63
- return data
64
-
65
-
66
- def load_log_files_parallel(log_files, num_threads=16):
67
- data_all = []
68
- from multiprocessing import Pool
69
-
70
- with Pool(num_threads) as p:
71
- ret_all = list(tqdm(p.imap(load_log_files, log_files), total=len(log_files)))
72
- for ret in ret_all:
73
- data_all.extend(ret)
74
- return data_all
75
-
76
-
77
- def get_anony_vote_df(df):
78
- anony_vote_df = df[
79
- df["type"].isin(["leftvote", "rightvote", "tievote", "bothbad_vote"])
80
- ]
81
- anony_vote_df = anony_vote_df[anony_vote_df["models"].apply(lambda x: x[0] == "")]
82
- return anony_vote_df
83
-
84
-
85
- def merge_counts(series, on, names):
86
- ret = pd.merge(series[0], series[1], on=on)
87
- for i in range(2, len(series)):
88
- ret = pd.merge(ret, series[i], on=on)
89
- ret = ret.reset_index()
90
- old_names = list(ret.columns)[-len(series) :]
91
- rename = {old_name: new_name for old_name, new_name in zip(old_names, names)}
92
- ret = ret.rename(columns=rename)
93
- return ret
94
-
95
-
96
- def report_basic_stats(log_files):
97
- df_all = load_log_files_parallel(log_files)
98
- df_all = pd.DataFrame(df_all)
99
- now_t = df_all["tstamp"].max()
100
- df_1_hour = df_all[df_all["tstamp"] > (now_t - 3600)]
101
- df_1_day = df_all[df_all["tstamp"] > (now_t - 3600 * 24)]
102
- anony_vote_df_all = get_anony_vote_df(df_all)
103
-
104
- # Chat trends
105
- chat_dates = [
106
- datetime.datetime.fromtimestamp(x, tz=timezone("US/Pacific")).strftime(
107
- "%Y-%m-%d"
108
- )
109
- for x in df_all[df_all["type"] == "chat"]["tstamp"]
110
- ]
111
- chat_dates_counts = pd.value_counts(chat_dates)
112
- vote_dates = [
113
- datetime.datetime.fromtimestamp(x, tz=timezone("US/Pacific")).strftime(
114
- "%Y-%m-%d"
115
- )
116
- for x in anony_vote_df_all["tstamp"]
117
- ]
118
- vote_dates_counts = pd.value_counts(vote_dates)
119
- chat_dates_bar = go.Figure(
120
- data=[
121
- go.Bar(
122
- name="Anony. Vote",
123
- x=vote_dates_counts.index,
124
- y=vote_dates_counts,
125
- text=[f"{val:.0f}" for val in vote_dates_counts],
126
- textposition="auto",
127
- ),
128
- go.Bar(
129
- name="Chat",
130
- x=chat_dates_counts.index,
131
- y=chat_dates_counts,
132
- text=[f"{val:.0f}" for val in chat_dates_counts],
133
- textposition="auto",
134
- ),
135
- ]
136
- )
137
- chat_dates_bar.update_layout(
138
- barmode="stack",
139
- xaxis_title="Dates",
140
- yaxis_title="Count",
141
- height=300,
142
- width=1200,
143
- )
144
-
145
- # Model call counts
146
- model_hist_all = df_all[df_all["type"] == "chat"]["model"].value_counts()
147
- model_hist_1_day = df_1_day[df_1_day["type"] == "chat"]["model"].value_counts()
148
- model_hist_1_hour = df_1_hour[df_1_hour["type"] == "chat"]["model"].value_counts()
149
- model_hist = merge_counts(
150
- [model_hist_all, model_hist_1_day, model_hist_1_hour],
151
- on="model",
152
- names=["All", "Last Day", "Last Hour"],
153
- )
154
- model_hist_md = model_hist.to_markdown(index=False, tablefmt="github")
155
-
156
- # Action counts
157
- action_hist_all = df_all["type"].value_counts()
158
- action_hist_1_day = df_1_day["type"].value_counts()
159
- action_hist_1_hour = df_1_hour["type"].value_counts()
160
- action_hist = merge_counts(
161
- [action_hist_all, action_hist_1_day, action_hist_1_hour],
162
- on="type",
163
- names=["All", "Last Day", "Last Hour"],
164
- )
165
- action_hist_md = action_hist.to_markdown(index=False, tablefmt="github")
166
-
167
- # Anony vote counts
168
- anony_vote_hist_all = anony_vote_df_all["type"].value_counts()
169
- anony_vote_df_1_day = get_anony_vote_df(df_1_day)
170
- anony_vote_hist_1_day = anony_vote_df_1_day["type"].value_counts()
171
- # anony_vote_df_1_hour = get_anony_vote_df(df_1_hour)
172
- # anony_vote_hist_1_hour = anony_vote_df_1_hour["type"].value_counts()
173
- anony_vote_hist = merge_counts(
174
- [anony_vote_hist_all, anony_vote_hist_1_day],
175
- on="type",
176
- names=["All", "Last Day"],
177
- )
178
- anony_vote_hist_md = anony_vote_hist.to_markdown(index=False, tablefmt="github")
179
-
180
- # Last 24 hours
181
- chat_1_day = df_1_day[df_1_day["type"] == "chat"]
182
- num_chats_last_24_hours = []
183
- base = df_1_day["tstamp"].min()
184
- for i in range(24, 0, -1):
185
- left = base + (i - 1) * 3600
186
- right = base + i * 3600
187
- num = ((chat_1_day["tstamp"] >= left) & (chat_1_day["tstamp"] < right)).sum()
188
- num_chats_last_24_hours.append(num)
189
- times = [
190
- datetime.datetime.fromtimestamp(
191
- base + i * 3600, tz=timezone("US/Pacific")
192
- ).strftime("%Y-%m-%d %H:%M:%S %Z")
193
- for i in range(24, 0, -1)
194
- ]
195
- last_24_hours_df = pd.DataFrame({"time": times, "value": num_chats_last_24_hours})
196
- last_24_hours_md = last_24_hours_df.to_markdown(index=False, tablefmt="github")
197
-
198
- # Last update datetime
199
- last_updated_tstamp = now_t
200
- last_updated_datetime = datetime.datetime.fromtimestamp(
201
- last_updated_tstamp, tz=timezone("US/Pacific")
202
- ).strftime("%Y-%m-%d %H:%M:%S %Z")
203
-
204
- # code.interact(local=locals())
205
-
206
- return {
207
- "chat_dates_bar": chat_dates_bar,
208
- "model_hist_md": model_hist_md,
209
- "action_hist_md": action_hist_md,
210
- "anony_vote_hist_md": anony_vote_hist_md,
211
- "num_chats_last_24_hours": last_24_hours_md,
212
- "last_updated_datetime": last_updated_datetime,
213
- }
214
-
215
-
216
- if __name__ == "__main__":
217
- parser = argparse.ArgumentParser()
218
- parser.add_argument("--max-num-files", type=int)
219
- args = parser.parse_args()
220
-
221
- log_files = get_log_files(args.max_num_files)
222
- basic_stats = report_basic_stats(log_files)
223
-
224
- print(basic_stats["action_hist_md"] + "\n")
225
- print(basic_stats["model_hist_md"] + "\n")
226
- print(basic_stats["anony_vote_hist_md"] + "\n")
227
- print(basic_stats["num_chats_last_24_hours"] + "\n")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/elo_rating/clean_battle_data.py DELETED
@@ -1,378 +0,0 @@
1
- """
2
- Clean chatbot arena battle log.
3
-
4
- Usage:
5
- python3 clean_battle_data.py --mode conv_release
6
- """
7
- import argparse
8
- import datetime
9
- import json
10
- import os
11
- import sys
12
- from pytz import timezone
13
- import time
14
- import PIL
15
- from PIL import ImageFile
16
- ImageFile.LOAD_TRUNCATED_IMAGES = True
17
-
18
- from tqdm import tqdm
19
-
20
- from .basic_stats import get_log_files, NUM_SERVERS, LOG_ROOT_DIR
21
- from .utils import detect_language, get_time_stamp_from_date, get_model_info
22
-
23
- VOTES = ["tievote", "leftvote", "rightvote", "bothbad_vote"]
24
-
25
- def parse_model_name(model_name):
26
- return NotImplementedError()
27
- return model_source, model_name, model_type
28
-
29
- def remove_html(raw):
30
- if raw.startswith("<h3>"):
31
- return raw[raw.find(": ") + 2 : -len("</h3>\n")]
32
- if raw.startswith("### Model A: ") or raw.startswith("### Model B: "):
33
- return raw[13:]
34
- return raw
35
-
36
-
37
- def to_openai_format(messages):
38
- roles = ["user", "assistant"]
39
- ret = []
40
- for i, x in enumerate(messages):
41
- ret.append({"role": roles[i % 2], "content": x[1]})
42
- return ret
43
-
44
-
45
- def replace_model_name(old_name, tstamp):
46
- replace_dict = {
47
- "PlayGroundV2": "PlayGround V2",
48
- "PlayGroundV2.5": "PlayGround V2.5",
49
- "FluxTimestep": "FLUX1schnell",
50
- "FluxGuidance": "FLUX1dev",
51
- "CogVideoX": "CogVideoX-2B"
52
- }
53
- if old_name in replace_dict:
54
- old_name = replace_dict[old_name]
55
- if "Flux" in old_name:
56
- print(f"Invalid model names: {old_name}")
57
- exit(1)
58
- model_info = get_model_info(old_name)
59
- old_name = model_info.simple_name
60
- return old_name
61
-
62
-
63
- def read_file(filename):
64
- data = []
65
- for retry in range(5):
66
- try:
67
- # lines = open(filename).readlines()
68
- for l in open(filename):
69
- row = json.loads(l)
70
- if row["type"] in VOTES:
71
- data.append(row)
72
- break
73
- except FileNotFoundError:
74
- time.sleep(2)
75
- except json.JSONDecodeError:
76
- print(f"Error in reading {filename}")
77
- print(row)
78
- exit(0)
79
- return data
80
-
81
-
82
- def read_file_parallel(log_files, num_threads=16):
83
- data_all = []
84
- if num_threads == 1:
85
- for log_file in tqdm(log_files, desc="Reading"):
86
- data_all.extend(read_file(log_file))
87
- return data_all
88
- else:
89
- from multiprocessing import Pool
90
-
91
- with Pool(num_threads) as p:
92
- ret_all = list(tqdm(p.imap(read_file, log_files), total=len(log_files)))
93
- for ret in ret_all:
94
- data_all.extend(ret)
95
- return data_all
96
-
97
- def load_image(image_path):
98
- try:
99
- return PIL.Image.open(image_path)
100
- except:
101
- return None
102
-
103
- def clean_battle_data(
104
- log_files, exclude_model_names, ban_ip_list=None, sanitize_ip=False, mode="simple", task_name="image_editing"
105
- ):
106
- data = read_file_parallel(log_files, num_threads=1)
107
-
108
- convert_type = {
109
- "leftvote": "model_a",
110
- "rightvote": "model_b",
111
- "tievote": "tie",
112
- "bothbad_vote": "tie (bothbad)",
113
- }
114
-
115
- all_models = set()
116
- all_ips = dict()
117
- ct_anony = 0
118
- ct_invalid = 0
119
- ct_leaked_identity = 0
120
- ct_banned = 0
121
- battles = []
122
- for row in tqdm(data, desc="Cleaning"):
123
- if row["models"][0] is None or row["models"][1] is None:
124
- print(f"Invalid model names: {row['models']}")
125
- continue
126
-
127
- # Resolve model names
128
- models_public = [remove_html(row["models"][0]), remove_html(row["models"][1])]
129
- if "model_name" in row["states"][0]:
130
- models_hidden = [
131
- row["states"][0]["model_name"],
132
- row["states"][1]["model_name"],
133
- ]
134
- if models_hidden[0] is None:
135
- models_hidden = models_public
136
- else:
137
- models_hidden = models_public
138
-
139
- if (models_public[0] == "" and models_public[1] != "") or (
140
- models_public[1] == "" and models_public[0] != ""
141
- ):
142
- ct_invalid += 1
143
- print(f"Invalid model names: {models_public}")
144
- continue
145
-
146
- if models_public[0] == "" or models_public[0] == "Model A":
147
- anony = True
148
- models = models_hidden
149
- ct_anony += 1
150
- else:
151
- anony = False
152
- models = models_public
153
- if not models_public == models_hidden:
154
- print(f"Model names mismatch: {models_public} vs {models_hidden}")
155
- ct_invalid += 1
156
- continue
157
-
158
- def preprocess_model_name(m):
159
- if m == "Playground v2":
160
- return 'playground_PlayGroundV2_generation'
161
- if m == "Playground v2.5":
162
- return 'playground_PlayGroundV2.5_generation'
163
- return m
164
- models = [preprocess_model_name(m) for m in models]
165
-
166
- # Replace bard with palm
167
- if task_name == "image_editing":
168
- valid = True
169
- for _model in models:
170
- try:
171
- platform, model_name, task = _model.split("_")
172
- except ValueError:
173
- valid = False
174
- break
175
- if not (platform in ["playground", "imagenhub"] and task == "edition"):
176
- valid = False
177
- break
178
- if not valid:
179
- ct_invalid += 1
180
- continue
181
- for i, _model in enumerate(models):
182
- platform, model_name, task = _model.split("_")
183
- models[i] = model_name
184
-
185
- elif task_name == "t2i_generation":
186
- valid = True
187
- for _model in models:
188
- try:
189
- platform, model_name, task = _model.split("_")
190
- except ValueError:
191
- valid = False
192
- break
193
- if not (platform.lower() in ["playground", "imagenhub", 'fal'] and (task == "generation" or task == "text2image")):
194
- valid = False
195
- break
196
- if not valid:
197
- ct_invalid += 1
198
- continue
199
- for i, _model in enumerate(models):
200
- platform, model_name, task = _model.split("_")
201
- models[i] = model_name
202
-
203
- elif task_name == "video_generation":
204
- valid = True
205
- for _model in models:
206
- try:
207
- platform, model_name, task = _model.split("_")
208
- except ValueError:
209
- valid = False
210
- break
211
- if not (platform in ["videogenhub", "fal"] and task == "generation" or task == "text2video"):
212
- valid = False
213
- break
214
- if not valid:
215
- ct_invalid += 1
216
- continue
217
- for i, _model in enumerate(models):
218
- platform, model_name, task = _model.split("_")
219
- models[i] = model_name
220
-
221
- else:
222
- raise ValueError(f"Invalid task_name: {task_name}")
223
-
224
- models = [replace_model_name(m, row["tstamp"]) for m in models]
225
-
226
- # Exclude certain models
227
- if exclude_model_names and any(x in exclude_model_names for x in models):
228
- ct_invalid += 1
229
- continue
230
-
231
- if mode == "conv_release":
232
- # assert the two images are the same
233
- date = datetime.datetime.fromtimestamp(row["tstamp"], tz=timezone("US/Pacific")).strftime("%Y-%m-%d") # 2024-02-29
234
- image_path_format = f"{LOG_ROOT_DIR}/{date}-convinput_images/input_image_"
235
- image_path_0 = image_path_format + str(row["states"][0]["conv_id"]) + ".png"
236
- image_path_1 = image_path_format + str(row["states"][1]["conv_id"]) + ".png"
237
- if not os.path.exists(image_path_0) or not os.path.exists(image_path_1):
238
- print(f"Image not found for {image_path_0} or {image_path_1}")
239
- ct_invalid += 1
240
- continue
241
-
242
- image_0 = load_image(image_path_0)
243
- image_1 = load_image(image_path_1)
244
- if image_0 is None or image_1 is None:
245
- print(f"Image not found for {image_path_0} or {image_path_1}")
246
- ct_invalid += 1
247
- continue
248
- if image_0.tobytes() != image_1.tobytes():
249
- print(f"Image not the same for {image_path_0} and {image_path_1}")
250
- ct_invalid += 1
251
- continue
252
-
253
-
254
- ip = row["ip"]
255
- if ip not in all_ips:
256
- all_ips[ip] = {"ip": ip, "count": 0, "sanitized_id": len(all_ips)}
257
- all_ips[ip]["count"] += 1
258
- if sanitize_ip:
259
- user_id = f"arena_user_{all_ips[ip]['sanitized_id']}"
260
- else:
261
- user_id = f"{all_ips[ip]['ip']}"
262
-
263
- if ban_ip_list is not None and ip in ban_ip_list:
264
- ct_banned += 1
265
- print(f"User {user_id} is banned")
266
- continue
267
- required_keys_each_task = {
268
- "image_editing": ["source_prompt", "target_prompt", "instruct_prompt"],
269
- "t2i_generation": ["prompt"],
270
- "video_generation": ["prompt"]
271
- }
272
-
273
- model_a_inputs = row["states"][0].copy()
274
- # pop conv_id and model_name
275
- model_a_inputs.pop("conv_id")
276
- model_a_inputs.pop("model_name")
277
- model_b_inputs = row["states"][1].copy()
278
- model_b_inputs.pop("conv_id")
279
- model_b_inputs.pop("model_name")
280
- for key in model_a_inputs:
281
- if not (key in model_b_inputs and model_a_inputs[key] == model_b_inputs[key]):
282
- print(f"Inconsistent inputs: {model_a_inputs} vs {model_b_inputs}")
283
- ct_invalid += 1
284
- continue
285
- if mode == "conv_release":
286
- if any(key not in model_a_inputs for key in required_keys_each_task[task_name]):
287
- print(f"Missing required keys: {model_a_inputs}, {required_keys_each_task[task_name]}")
288
- ct_invalid += 1
289
- continue
290
-
291
- inputs = model_a_inputs
292
- # Save the results
293
- battles.append(
294
- dict(
295
- model_a_conv_id=row["states"][0]["conv_id"],
296
- model_b_conv_id=row["states"][1]["conv_id"],
297
- inputs=inputs,
298
- model_a=models[0],
299
- model_b=models[1],
300
- vote_type=row["type"],
301
- winner=convert_type[row["type"]],
302
- judge=f"arena_user_{user_id}",
303
- anony=anony,
304
- tstamp=row["tstamp"],
305
- )
306
- )
307
-
308
- all_models.update(models_hidden)
309
- battles.sort(key=lambda x: x["tstamp"])
310
- last_updated_tstamp = battles[-1]["tstamp"]
311
-
312
- last_updated_datetime = datetime.datetime.fromtimestamp(
313
- last_updated_tstamp, tz=timezone("US/Pacific")
314
- ).strftime("%Y-%m-%d %H:%M:%S %Z")
315
-
316
- print(
317
- f"#votes: {len(data)}, #invalid votes: {ct_invalid}, "
318
- f"#leaked_identity: {ct_leaked_identity} "
319
- f"#banned: {ct_banned} "
320
- )
321
- print(f"#battles: {len(battles)}, #anony: {ct_anony}")
322
- print(f"#models: {len(all_models)}, {all_models}")
323
- print(f"last-updated: {last_updated_datetime}")
324
-
325
- if ban_ip_list is not None:
326
- for ban_ip in ban_ip_list:
327
- if ban_ip in all_ips:
328
- del all_ips[ban_ip]
329
- print("Top 30 IPs:")
330
- print(sorted(all_ips.values(), key=lambda x: x["count"], reverse=True)[:30])
331
- return battles
332
-
333
-
334
- if __name__ == "__main__":
335
- parser = argparse.ArgumentParser()
336
- parser.add_argument("--max-num-files", type=int)
337
- parser.add_argument(
338
- "--mode", type=str, choices=["simple", "conv_release"], default="simple"
339
- )
340
- parser.add_argument("--task_name", type=str, default="image_editing", choices=["image_editing", "t2i_generation", "video_generation"])
341
- parser.add_argument("--exclude-model-names", type=str, nargs="+")
342
- parser.add_argument("--ban-ip-file", type=str)
343
- parser.add_argument("--sanitize-ip", action="store_true", default=False)
344
- args = parser.parse_args()
345
-
346
- log_files = get_log_files(args.max_num_files)
347
- ban_ip_list = json.load(open(args.ban_ip_file)) if args.ban_ip_file else None
348
-
349
- battles = clean_battle_data(
350
- log_files, args.exclude_model_names or [], ban_ip_list, args.sanitize_ip, args.mode, args.task_name
351
- )
352
- last_updated_tstamp = battles[-1]["tstamp"]
353
- cutoff_date = datetime.datetime.fromtimestamp(
354
- last_updated_tstamp, tz=timezone("US/Pacific")
355
- ).strftime("%Y%m%d")
356
-
357
- if args.mode == "simple":
358
- # for x in battles:
359
- # for key in [
360
- # "conversation_a",
361
- # "conversation_b",
362
- # "question_id",
363
- # ]:
364
- # if key in x:
365
- # del x[key]
366
- print("Samples:")
367
- for i in range(min(4, len(battles))):
368
- print(battles[i])
369
- output = f"clean_battle_{args.task_name}_{cutoff_date}.json"
370
- elif args.mode == "conv_release":
371
- output = f"clean_battle_{args.task_name}_conv_{cutoff_date}.json"
372
-
373
- with open(output, "w") as fout:
374
- json.dump(battles, fout, indent=2, ensure_ascii=False)
375
- print(f"Write cleaned data to {output}")
376
-
377
- with open("cut_off_date.txt", "w") as fout:
378
- fout.write(cutoff_date)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/elo_rating/elo_analysis.py DELETED
@@ -1,413 +0,0 @@
1
- import argparse
2
- from collections import defaultdict
3
- import datetime
4
- import json
5
- import math
6
- import pickle
7
- from pytz import timezone
8
-
9
- import numpy as np
10
- import pandas as pd
11
- import plotly.express as px
12
- from tqdm import tqdm
13
-
14
- from .basic_stats import get_log_files
15
- from .clean_battle_data import clean_battle_data
16
- from .utils import get_model_info
17
-
18
- pd.options.display.float_format = "{:.2f}".format
19
-
20
-
21
- def compute_elo(battles, K=4, SCALE=400, BASE=10, INIT_RATING=1000):
22
- rating = defaultdict(lambda: INIT_RATING)
23
-
24
- for rd, model_a, model_b, winner in battles[
25
- ["model_a", "model_b", "winner"]
26
- ].itertuples():
27
- ra = rating[model_a]
28
- rb = rating[model_b]
29
- ea = 1 / (1 + BASE ** ((rb - ra) / SCALE))
30
- eb = 1 / (1 + BASE ** ((ra - rb) / SCALE))
31
- if winner == "model_a":
32
- sa = 1
33
- elif winner == "model_b":
34
- sa = 0
35
- elif winner == "tie" or winner == "tie (bothbad)":
36
- sa = 0.5
37
- else:
38
- raise Exception(f"unexpected vote {winner}")
39
- rating[model_a] += K * (sa - ea)
40
- rating[model_b] += K * (1 - sa - eb)
41
-
42
- return dict(rating)
43
-
44
-
45
- def get_bootstrap_result(battles, func_compute_elo, num_round=1000):
46
- rows = []
47
- for i in tqdm(range(num_round), desc="bootstrap"):
48
- tmp_battles = battles.sample(frac=1.0, replace=True)
49
- rows.append(func_compute_elo(tmp_battles))
50
- df = pd.DataFrame(rows)
51
- return df[df.median().sort_values(ascending=False).index]
52
-
53
-
54
- def compute_elo_mle_with_tie(df, SCALE=400, BASE=10, INIT_RATING=1000):
55
- from sklearn.linear_model import LogisticRegression
56
-
57
- models = pd.concat([df["model_a"], df["model_b"]]).unique()
58
- models = pd.Series(np.arange(len(models)), index=models)
59
-
60
- # duplicate battles
61
- df = pd.concat([df, df], ignore_index=True)
62
- p = len(models.index)
63
- n = df.shape[0]
64
-
65
- X = np.zeros([n, p])
66
- X[np.arange(n), models[df["model_a"]]] = +math.log(BASE)
67
- X[np.arange(n), models[df["model_b"]]] = -math.log(BASE)
68
-
69
- # one A win => two A win
70
- Y = np.zeros(n)
71
- Y[df["winner"] == "model_a"] = 1.0
72
-
73
- # one tie => one A win + one B win
74
- # find tie + tie (both bad) index
75
- tie_idx = (df["winner"] == "tie") | (df["winner"] == "tie (bothbad)")
76
- tie_idx[len(tie_idx) // 2 :] = False
77
- Y[tie_idx] = 1.0
78
-
79
- lr = LogisticRegression(fit_intercept=False)
80
- lr.fit(X, Y)
81
-
82
- elo_scores = SCALE * lr.coef_[0] + INIT_RATING
83
- # calibrate llama-13b to 800 if applicable
84
- if "llama-13b" in models.index:
85
- elo_scores += 800 - elo_scores[models["llama-13b"]]
86
- return pd.Series(elo_scores, index=models.index).sort_values(ascending=False)
87
-
88
-
89
- def get_median_elo_from_bootstrap(bootstrap_df):
90
- median = dict(bootstrap_df.quantile(0.5))
91
- median = {k: int(v + 0.5) for k, v in median.items()}
92
- return median
93
-
94
-
95
- def compute_pairwise_win_fraction(battles, model_order, limit_show_number=None):
96
- # Times each model wins as Model A
97
- a_win_ptbl = pd.pivot_table(
98
- battles[battles["winner"] == "model_a"],
99
- index="model_a",
100
- columns="model_b",
101
- aggfunc="size",
102
- fill_value=0,
103
- )
104
-
105
- # Table counting times each model wins as Model B
106
- b_win_ptbl = pd.pivot_table(
107
- battles[battles["winner"] == "model_b"],
108
- index="model_a",
109
- columns="model_b",
110
- aggfunc="size",
111
- fill_value=0,
112
- )
113
-
114
- # Table counting number of A-B pairs
115
- num_battles_ptbl = pd.pivot_table(
116
- battles, index="model_a", columns="model_b", aggfunc="size", fill_value=0
117
- )
118
-
119
- # Computing the proportion of wins for each model as A and as B
120
- # against all other models
121
- row_beats_col_freq = (a_win_ptbl + b_win_ptbl.T) / (
122
- num_battles_ptbl + num_battles_ptbl.T
123
- )
124
-
125
- if model_order is None:
126
- prop_wins = row_beats_col_freq.mean(axis=1).sort_values(ascending=False)
127
- model_order = list(prop_wins.keys())
128
-
129
- if limit_show_number is not None:
130
- model_order = model_order[:limit_show_number]
131
-
132
- # Arrange ordering according to proprition of wins
133
- row_beats_col = row_beats_col_freq.loc[model_order, model_order]
134
- return row_beats_col
135
-
136
-
137
- def visualize_leaderboard_table(rating):
138
- models = list(rating.keys())
139
- models.sort(key=lambda k: -rating[k])
140
-
141
- emoji_dict = {
142
- 1: "🥇",
143
- 2: "🥈",
144
- 3: "🥉",
145
- }
146
-
147
- md = ""
148
- md += "| Rank | Model | Elo Rating | Description |\n"
149
- md += "| --- | --- | --- | --- |\n"
150
- for i, model in enumerate(models):
151
- rank = i + 1
152
- minfo = get_model_info(model)
153
- emoji = emoji_dict.get(rank, "")
154
- md += f"| {rank} | {emoji} [{model}]({minfo.link}) | {rating[model]:.0f} | {minfo.description} |\n"
155
-
156
- return md
157
-
158
-
159
- def visualize_pairwise_win_fraction(battles, model_order):
160
- row_beats_col = compute_pairwise_win_fraction(battles, model_order)
161
- fig = px.imshow(
162
- row_beats_col,
163
- color_continuous_scale="RdBu",
164
- text_auto=".2f",
165
- height=700,
166
- width=700,
167
- )
168
- fig.update_layout(
169
- xaxis_title="Model B",
170
- yaxis_title="Model A",
171
- xaxis_side="top",
172
- title_y=0.07,
173
- title_x=0.5,
174
- )
175
- fig.update_traces(
176
- hovertemplate="Model A: %{y}<br>Model B: %{x}<br>Fraction of A Wins: %{z}<extra></extra>"
177
- )
178
-
179
- return fig
180
-
181
-
182
- def visualize_battle_count(battles, model_order):
183
- ptbl = pd.pivot_table(
184
- battles, index="model_a", columns="model_b", aggfunc="size", fill_value=0
185
- )
186
- battle_counts = ptbl + ptbl.T
187
- fig = px.imshow(
188
- battle_counts.loc[model_order, model_order],
189
- text_auto=True,
190
- height=700,
191
- width=700,
192
- )
193
- fig.update_layout(
194
- xaxis_title="Model B",
195
- yaxis_title="Model A",
196
- xaxis_side="top",
197
- title_y=0.07,
198
- title_x=0.5,
199
- )
200
- fig.update_traces(
201
- hovertemplate="Model A: %{y}<br>Model B: %{x}<br>Count: %{z}<extra></extra>"
202
- )
203
- return fig
204
-
205
-
206
- def visualize_average_win_rate(battles, limit_show_number):
207
- row_beats_col_freq = compute_pairwise_win_fraction(
208
- battles, None, limit_show_number=limit_show_number
209
- )
210
- fig = px.bar(
211
- row_beats_col_freq.mean(axis=1).sort_values(ascending=False),
212
- text_auto=".2f",
213
- height=500,
214
- width=700,
215
- )
216
- fig.update_layout(
217
- yaxis_title="Average Win Rate", xaxis_title="Model", showlegend=False,
218
- )
219
- fig.update_traces(textfont_size=16)
220
- return fig
221
-
222
-
223
- def visualize_bootstrap_elo_rating(df, df_final, limit_show_number):
224
- bars = (
225
- pd.DataFrame(
226
- dict(
227
- lower=df.quantile(0.025),
228
- rating=df_final,
229
- upper=df.quantile(0.975),
230
- )
231
- )
232
- .reset_index(names="model")
233
- .sort_values("rating", ascending=False)
234
- )
235
- bars = bars[:limit_show_number]
236
- bars["error_y"] = bars["upper"] - bars["rating"]
237
- bars["error_y_minus"] = bars["rating"] - bars["lower"]
238
- bars["rating_rounded"] = np.round(bars["rating"], 2)
239
- fig = px.scatter(
240
- bars,
241
- x="model",
242
- y="rating",
243
- error_y="error_y",
244
- error_y_minus="error_y_minus",
245
- text="rating_rounded",
246
- height=500,
247
- width=700,
248
- )
249
- fig.update_layout(xaxis_title="Model", yaxis_title="Rating")
250
- fig.update_traces(textfont_size=16)
251
- return fig
252
-
253
-
254
- def report_elo_analysis_results(battles_json, rating_system="bt", num_bootstrap=100, anony_only=True):
255
- battles = pd.DataFrame(battles_json)
256
- battles = battles.sort_values(ascending=True, by=["tstamp"])
257
- # Only use anonymous votes
258
- if anony_only:
259
- battles = battles[battles["anony"]].reset_index(drop=True)
260
- battles_no_ties = battles[~battles["winner"].str.contains("tie")]
261
-
262
- # Online update
263
- elo_rating_online = compute_elo(battles)
264
-
265
- if rating_system == "bt":
266
- bootstrap_df = get_bootstrap_result(
267
- battles, compute_elo_mle_with_tie, num_round=num_bootstrap
268
- )
269
- elo_rating_final = compute_elo_mle_with_tie(battles)
270
- elif rating_system == "elo":
271
- bootstrap_df = get_bootstrap_result(
272
- battles, compute_elo, num_round=num_bootstrap
273
- )
274
- elo_rating_median = get_median_elo_from_bootstrap(bootstrap_df)
275
- elo_rating_final = elo_rating_median
276
-
277
- model_order = list(elo_rating_final.keys())
278
- model_order.sort(key=lambda k: -elo_rating_final[k])
279
-
280
- limit_show_number = 25 # limit show number to make plots smaller
281
- model_order = model_order[:limit_show_number]
282
-
283
- # leaderboard_table_df: elo rating, variance, 95% interval, number of battles
284
- leaderboard_table_df = pd.DataFrame(
285
- {
286
- "rating": elo_rating_final,
287
- "variance": bootstrap_df.var(),
288
- "rating_q975": bootstrap_df.quantile(0.975),
289
- "rating_q025": bootstrap_df.quantile(0.025),
290
- "num_battles": battles["model_a"].value_counts()
291
- + battles["model_b"].value_counts(),
292
- }
293
- )
294
-
295
- # Plots
296
- leaderboard_table = visualize_leaderboard_table(elo_rating_final)
297
- win_fraction_heatmap = visualize_pairwise_win_fraction(battles_no_ties, model_order)
298
- battle_count_heatmap = visualize_battle_count(battles_no_ties, model_order)
299
- average_win_rate_bar = visualize_average_win_rate(
300
- battles_no_ties, limit_show_number
301
- )
302
- bootstrap_elo_rating = visualize_bootstrap_elo_rating(
303
- bootstrap_df, elo_rating_final, limit_show_number
304
- )
305
-
306
- last_updated_tstamp = battles["tstamp"].max()
307
- last_updated_datetime = datetime.datetime.fromtimestamp(
308
- last_updated_tstamp, tz=timezone("US/Pacific")
309
- ).strftime("%Y-%m-%d %H:%M:%S %Z")
310
-
311
- return {
312
- "rating_system": rating_system,
313
- "elo_rating_online": elo_rating_online,
314
- "elo_rating_final": elo_rating_final,
315
- "leaderboard_table": leaderboard_table,
316
- "win_fraction_heatmap": win_fraction_heatmap,
317
- "battle_count_heatmap": battle_count_heatmap,
318
- "average_win_rate_bar": average_win_rate_bar,
319
- "bootstrap_elo_rating": bootstrap_elo_rating,
320
- "last_updated_datetime": last_updated_datetime,
321
- "last_updated_tstamp": last_updated_tstamp,
322
- "bootstrap_df": bootstrap_df,
323
- "leaderboard_table_df": leaderboard_table_df,
324
- }
325
-
326
-
327
- def pretty_print_elo_rating(rating):
328
- model_order = list(rating.keys())
329
- model_order.sort(key=lambda k: -rating[k])
330
- for i, model in enumerate(model_order):
331
- print(f"{i+1:2d}, {model:25s}, {rating[model]:.0f}")
332
-
333
-
334
- if __name__ == "__main__":
335
- parser = argparse.ArgumentParser()
336
- parser.add_argument("--clean-battle-file", type=str)
337
- parser.add_argument("--max-num-files", type=int)
338
- parser.add_argument("--num-bootstrap", type=int, default=100)
339
- parser.add_argument(
340
- "--rating-system", type=str, choices=["bt", "elo"], default="bt"
341
- )
342
- parser.add_argument("--exclude-tie", action="store_true", default=False)
343
- parser.add_argument("--min_num_battles_per_model", type=int, default=25)
344
- args = parser.parse_args()
345
-
346
- np.random.seed(42)
347
-
348
- if args.clean_battle_file:
349
- # Read data from a cleaned battle files
350
- battles = pd.read_json(args.clean_battle_file)
351
- else:
352
- # Read data from all log files
353
- log_files = get_log_files(args.max_num_files)
354
- battles = clean_battle_data(log_files)
355
-
356
- if args.min_num_battles_per_model:
357
- num_battles_per_model = defaultdict(int)
358
- # use pd
359
- for _, battle in battles.iterrows():
360
- num_battles_per_model[battle["model_a"]] += 1
361
- num_battles_per_model[battle["model_b"]] += 1
362
- to_remove_models = [
363
- model for model, num_battles in num_battles_per_model.items() if num_battles < args.min_num_battles_per_model
364
- ]
365
- battles_with_enough_battles = battles[
366
- ~battles["model_a"].isin(to_remove_models) & ~battles["model_b"].isin(to_remove_models)
367
- ]
368
- print(f"Remove models with less than {args.min_num_battles_per_model} battles: {to_remove_models}")
369
- print(f"Number of battles: {len(battles)} -> {len(battles_with_enough_battles)}")
370
- battles = battles_with_enough_battles
371
-
372
- anony_results = report_elo_analysis_results(
373
- battles, rating_system=args.rating_system, num_bootstrap=args.num_bootstrap, anony_only=True
374
- )
375
- full_results = report_elo_analysis_results(
376
- battles, rating_system=args.rating_system, num_bootstrap=args.num_bootstrap, anony_only=False
377
- )
378
-
379
-
380
- print("# Online Elo")
381
- pretty_print_elo_rating(anony_results["elo_rating_online"])
382
- print("# Median")
383
- pretty_print_elo_rating(anony_results["elo_rating_final"])
384
- print(f"Annoy last update : {anony_results['last_updated_datetime']}")
385
- print(f"Full last update : {full_results['last_updated_datetime']}")
386
-
387
-
388
- # # save heatmap results in the same directory of the cleaned battle file
389
- win_fraction_heatmap_file = args.clean_battle_file.replace(".json", "_win_fraction_heatmap.jpg")
390
- battle_count_heatmap_file = args.clean_battle_file.replace(".json", "_battle_count_heatmap.jpg")
391
- average_win_rate_bar_file = args.clean_battle_file.replace(".json", "_average_win_rate_bar.jpg")
392
- bootstrap_elo_rating_file = args.clean_battle_file.replace(".json", "_bootstrap_elo_rating.jpg")
393
- anony_results["win_fraction_heatmap"].write_image(win_fraction_heatmap_file)
394
- anony_results["battle_count_heatmap"].write_image(battle_count_heatmap_file)
395
- anony_results["average_win_rate_bar"].write_image(average_win_rate_bar_file)
396
- anony_results["bootstrap_elo_rating"].write_image(bootstrap_elo_rating_file)
397
-
398
-
399
- last_updated_tstamp = full_results["last_updated_tstamp"]
400
- cutoff_date = datetime.datetime.fromtimestamp(
401
- last_updated_tstamp, tz=timezone("US/Pacific")
402
- ).strftime("%Y%m%d")
403
-
404
-
405
- results = {
406
- "anony": anony_results,
407
- "full": full_results,
408
- }
409
- with open(f"elo_results_{cutoff_date}.pkl", "wb") as fout:
410
- pickle.dump(results, fout)
411
-
412
- with open("cut_off_date.txt", "w") as fout:
413
- fout.write(cutoff_date)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/elo_rating/generate_leaderboard.py DELETED
@@ -1,68 +0,0 @@
1
- import fire
2
- import json
3
- import pandas as pd
4
- import pickle
5
- from .utils import get_model_info
6
-
7
- def main(
8
- elo_rating_pkl: str,
9
- output_csv: str
10
- ):
11
- with open(elo_rating_pkl, "rb") as fin:
12
- elo_rating_results = pickle.load(fin)
13
-
14
- anony_elo_rating_results = elo_rating_results["anony"]
15
- full_elo_rating_results = elo_rating_results["full"]
16
- anony_leaderboard_data = anony_elo_rating_results["leaderboard_table_df"]
17
- full_leaderboard_data = full_elo_rating_results["leaderboard_table_df"]
18
-
19
- print(anony_leaderboard_data)
20
- # Model,MT-bench (score),Arena Elo rating,MMLU,License,Link
21
- fields = ["key", "Model", "Arena Elo rating (anony)", "Arena Elo rating (full)", "License", "Organization", "Link"]
22
- # set Organization and license to empty for now
23
- all_models = anony_leaderboard_data.index.tolist()
24
-
25
- model_info = {}
26
- for model in all_models:
27
-
28
- registered_model_info = get_model_info(model)
29
- model_info[model] = {
30
- "key": model,
31
- "Model": model,
32
- "License": registered_model_info.license,
33
- "Organization": registered_model_info.organization,
34
- "Link": registered_model_info.link
35
- }
36
-
37
- if model in anony_leaderboard_data.index:
38
- model_info[model]["Arena Elo rating (anony)"] = anony_leaderboard_data.loc[model, "rating"]
39
- else:
40
- model_info[model]["Arena Elo rating (anony)"] = 0
41
-
42
- if model in full_elo_rating_results["leaderboard_table_df"].index:
43
- model_info[model]["Arena Elo rating (full)"] = full_leaderboard_data.loc[model, "rating"]
44
- else:
45
- model_info[model]["Arena Elo rating (full)"] = 0
46
-
47
- final_model_info = {}
48
- for model in model_info:
49
- if "Model" in model_info[model]:
50
- final_model_info[model] = model_info[model]
51
- model_info = final_model_info
52
-
53
- exclude_keys = ['starting_from']
54
- for key in exclude_keys:
55
- for model in model_info:
56
- if key in model_info[model]:
57
- del model_info[model][key]
58
- df = pd.DataFrame(model_info).T
59
- df = df[fields]
60
- # sort by anony rating
61
- df = df.sort_values(by=["Arena Elo rating (anony)"], ascending=False)
62
- df.to_csv(output_csv, index=False)
63
- print("Leaderboard data saved to", output_csv)
64
- print(df)
65
-
66
-
67
- if __name__ == "__main__":
68
- fire.Fire(main)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/elo_rating/inspect_conv_rating.py DELETED
@@ -1,234 +0,0 @@
1
- import argparse
2
- import code
3
- import datetime
4
- import json
5
- import os
6
- from pytz import timezone
7
- import time
8
-
9
- import pandas as pd
10
- from tqdm import tqdm
11
- import csv
12
-
13
- import base64
14
- from icecream import ic
15
- from openai import OpenAI
16
-
17
- # Function to encode the image
18
- def encode_image(image_path):
19
- with open(image_path, "rb") as image_file:
20
- return base64.b64encode(image_file.read()).decode('utf-8')
21
-
22
- def get_log_files(max_num_files=None):
23
- dates = []
24
- for month in [2, 3]:
25
- for day in range(1, 32):
26
- dates.append(f"2024-{month:02d}-{day:02d}")
27
-
28
- num_servers = 1
29
- filenames = []
30
- for d in dates:
31
- for i in range(num_servers):
32
- # name = os.path.expanduser(f"~/fastchat_logs/server{i}/{d}-conv.json")
33
- name = os.path.expanduser(f"vision-arena-logs/{d}-conv.json")
34
- if os.path.exists(name):
35
- filenames.append(name)
36
- max_num_files = max_num_files or len(filenames)
37
- filenames = filenames[-max_num_files:]
38
- return filenames
39
-
40
-
41
- def pretty_print_conversation(messages):
42
- for role, msg in messages:
43
- print(f"[[{role}]]: {msg}")
44
-
45
-
46
- def get_gpt4v_response(client, img_bs64=None, text_prompt="", use_vision=False):
47
- if use_vision:
48
- response = client.chat.completions.create(
49
- model="gpt-4-vision-preview",
50
- messages=[
51
- {
52
- "role": "user",
53
- "content": [
54
- {"type": "text", "text": text_prompt},
55
- {
56
- "type": "image_url",
57
- "image_url": {
58
- "url": f"data:image/jpeg;base64,{img_bs64}"
59
- }
60
- },
61
- ],
62
- }
63
- ],
64
- max_tokens=100,
65
- )
66
- else:
67
- response = client.chat.completions.create(
68
- model="gpt-4-vision-preview",
69
- messages=[
70
- {
71
- "role": "user",
72
- "content": [
73
- {"type": "text", "text": text_prompt},
74
- ],
75
- }
76
- ],
77
- max_tokens=100,
78
- )
79
- return response.choices[0].message.content
80
-
81
- task_template_map = {
82
- "image_caption": "Give me the semantic alignment score between the given image and the given caption: \"{generated_sentence}\" on a scale of 0-100. Only reply the score value.",
83
- "vqa": "Rate the answer correctness regarding the question within the context of the given image on a scale of 0-100. Only reply the score value.",
84
- "pair_rate_old": "[Instruction]\n\"{instruction}\"\n\n\"{generated_sentence}\"\n\n[System]\nGiven the instruction and the image, please compare the correctness of responses A and B. Reply with \"leftvote\" if you find A better, \"rightvote\" if B is better, \"bothbad_vote\" if both responses are wrong, and \"tievote\" if both responses are equally satisfactory. If you are unable to make a decision, please reply with \"NA\".",
85
- "pair_rate_wexplanation": "[Instruction]\n\"{instruction}\"\n\n\"{generated_sentence}\"[System]\nPlease act as an impartial judge and evaluate the quality of the responses provided by two AI assistants to the user question displayed below. You should choose the assistant that follows the user’s instructions and answers the user’s question better. Your evaluation should consider factors such as the helpfulness, relevance, accuracy, depth, creativity, and level of detail of their responses. Begin your evaluation by comparing the two responses and provide a short explanation. Avoid any positional biases and ensure that the order in which the responses were presented does not influence your decision. Do not allow the length of the responses to influence your evaluation. Do not favor certain names of the assistants. Be as objective as possible. After providing your explanation, output your final verdict by strictly following this format: \"[[A]]\" if assistant A is better, \"[[B]]\" if assistant B is better, and \"[[C]]\" for a tie.",
86
- "pair_rate": "[Instruction]\n\"{instruction}\"\n\n\"{generated_sentence}\"\n\n[System]\nPlease act as an impartial judge and evaluate the quality of the responses provided by two AI assistants to the user question displayed below. You should choose the assistant that follows the user’s instructions and answers the user’s question better. Your evaluation should consider factors such as the helpfulness, relevance, accuracy, depth, creativity, and level of detail of their responses. Begin your evaluation by comparing the two responses and provide a short explanation. Avoid any positional biases and ensure that the order in which the responses were presented does not influence your decision. Do not allow the length of the responses to influence your evaluation. Do not favor certain names of the assistants. Be as objective as possible. Reply with \"leftvote\" if you find assistant A better, \"rightvote\" if assistant B is better, \"bothbad_vote\" if both responses are wrong, and \"tievote\" if both assistants provide equally satisfactory answers. If you are unable to make a decision, please reply with \"NA\"."
87
- }
88
-
89
- def inspect_convs(log_files):
90
- ic(log_files)
91
- data = []
92
- total_vote = 0
93
- correct_vote = 0
94
-
95
- client = OpenAI()
96
- with open('all_pairvote_log_wgpt_prtchatbot.csv', 'w', newline='') as csvfile:
97
- # fieldnames = ['tstamp', 'type', 'model_1', 'model_2', 'template_name_1', 'template_name_2', 'system_message_1', 'system_message_2', 'role_1', 'role_2', 'instruction_1', 'instruction_2', 'message_1', 'message_2', 'offset_1', 'offset_2', 'conv_id_1', 'conv_id_2', 'model_name_1', 'model_name_2', 'ip']
98
- fieldnames = ['tstamp', 'type', 'models', 'states', 'ip', 'gpt_vote']
99
- writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
100
-
101
- # Write the header
102
- writer.writeheader()
103
-
104
- for filename in tqdm(log_files, desc="read files"):
105
- for retry in range(5):
106
- try:
107
- lines = open(filename).readlines()
108
- break
109
- except FileNotFoundError:
110
- time.sleep(2)
111
-
112
- for l in lines:
113
- row = json.loads(l)
114
-
115
- if "states" not in row:
116
- continue
117
- if row["type"] not in ["leftvote", "rightvote", "bothbad_vote", "tievote"]:
118
- continue
119
-
120
- model_names = row["states"][0]["model_name"], row["states"][1]["model_name"]
121
-
122
-
123
- # Iterate through each state and write the relevant information
124
- if not len(row["states"][0]['messages']): continue
125
- # ic(row["states"][0]['messages'][1][1])
126
-
127
- if row["states"][0]['messages'][1][1] is None or row["states"][1]['messages'][1][1] is None or "NETWORK ERROR" in row["states"][0]['messages'][1][1] or "NETWORK ERROR" in row["states"][1]['messages'][1][1]: continue
128
- total_vote += 1
129
- # row = {
130
- # 'tstamp': row['tstamp'],
131
- # 'type': row['type'],
132
- # 'model_1': row['models'][0],
133
- # 'model_2': row['models'][1],
134
- # 'template_name_1': row["states"][0]['template_name'],
135
- # 'system_message_1': row["states"][0]['system_message'],
136
- # 'template_name_2': row["states"][1]['template_name'],
137
- # 'system_message_2': row["states"][1]['system_message'],
138
- # 'role_1': row["states"][0]['roles'],
139
- # 'role_2': row["states"][1]['roles'],
140
- # 'instruction_1': row["states"][0]['messages'][0][1],
141
- # 'instruction_2': row["states"][1]['messages'][0][1],
142
- # 'message_1': row["states"][0]['messages'][1][1],
143
- # 'message_2': row["states"][1]['messages'][1][1],
144
- # 'offset_1': row["states"][0]['offset'],
145
- # 'offset_2': row["states"][1]['offset'],
146
- # 'conv_id_1': row["states"][0]['conv_id'],
147
- # 'conv_id_2': row["states"][1]['conv_id'],
148
- # 'model_name_1': row["states"][0]['model_name'],
149
- # 'model_name_2': row["states"][1]['model_name'],
150
- # 'ip': row['ip']
151
- # }
152
- # writer.writerow(row)
153
- # Convert complex objects to JSON strings
154
- # TODO: check two image are the same
155
- conv_id = row["states"][0]['conv_id']
156
- image_path = os.path.join("/local/home/yujielu/project/Arena-Elo/vision-arena-logs", os.path.basename(filename)[:-5]+"input_images", f"input_image_{conv_id}.png")
157
- if not os.path.exists(image_path):
158
- response = "NA"
159
- ic(image_path)
160
- else:
161
- base64_image = encode_image(image_path)
162
- left_response = row["states"][0]['messages'][1][1]
163
- right_response = row["states"][1]['messages'][1][1]
164
- sep = "-" * 20
165
- instruction = row["states"][0]['messages'][0][1]
166
- generated_sentence = f"[The Start of Assistant A’s Answer]\n{left_response}\n[The End of Assistant A’s Answer]\n\n[The Start of Assistant B’s Answer]\n{right_response}\n[The End of Assistant B’s Answer]"
167
- text_prompt = task_template_map["pair_rate"].format(instruction=instruction, generated_sentence=generated_sentence)
168
- # ic(text_prompt)
169
- try:
170
- response = get_gpt4v_response(client, img_bs64=base64_image, text_prompt=text_prompt, use_vision=True)
171
- except:
172
- ic(">>> skip")
173
- response = "NA"
174
-
175
- # response = get_gpt4v_response(client, img_bs64=base64_image, text_prompt=text_prompt, use_vision=True)
176
- ic(row['type'], response)
177
- if response.strip() not in ["leftvote", "rightvote", "bothbad_vote", "tievote"]:
178
- response = "NA"
179
- # ic(generated_sentence)
180
-
181
- # if row['type'] == "leftvote":
182
- # row['type'] = "A"
183
- # elif row['type'] == "rightvote":
184
- # row['type'] = "B"
185
- # elif row['type'] in ["bothbad_vote", "tievote"]:
186
- # row['type'] = "C"
187
- if row['type'] == response.strip():
188
- correct_vote += 1
189
- row['models'] = json.dumps(row['models'])
190
- row['states'] = json.dumps(row['states'], ensure_ascii=False)
191
- row['gpt_vote'] = response
192
-
193
- # Write the modified row to the CSV file
194
- writer.writerow(row)
195
- # if row["type"] == "leftvote":
196
- # winner, loser = model_names[0], model_names[1]
197
- # winner_conv, loser_conv = row["states"][0], row["states"][1]
198
- # elif row["type"] == "rightvote":
199
- # loser, winner = model_names[0], model_names[1]
200
- # loser_conv, winner_conv = row["states"][0], row["states"][1]
201
-
202
- # if loser == "llava-v1.5-13b" and winner == "llava-v1.5-13b":
203
- # print("=" * 20)
204
- # print(f"Winner: {winner}")
205
- # pretty_print_conversation(winner_conv["messages"])
206
- # print(f"Loser: {loser}")
207
- # pretty_print_conversation(loser_conv["messages"])
208
- # print("=" * 20)
209
- # input()
210
- # if row['type'] == 'bothbad_vote':
211
- # from icecream import ic
212
- # ic(model_names)
213
- # if row["type"] == "bothbad_vote" and "gpt-4-vision-preview" in model_names:
214
- # print("=" * 20)
215
- # print(f"Model A: {model_names[0]}")
216
- # pretty_print_conversation(row["states"][0]["messages"])
217
- # print(f"Model B: {model_names[1]}")
218
- # pretty_print_conversation(row["states"][1]["messages"])
219
- # print("=" * 20)
220
- # input()
221
- # if correct_vote >= 300: break
222
- ic(total_vote, correct_vote)
223
-
224
-
225
- if __name__ == "__main__":
226
- parser = argparse.ArgumentParser()
227
- parser.add_argument("--max-num-files", type=int)
228
- args = parser.parse_args()
229
-
230
- log_files = get_log_files(args.max_num_files)
231
-
232
-
233
-
234
- inspect_convs(log_files)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/elo_rating/inspect_cost.py DELETED
@@ -1,177 +0,0 @@
1
- import fire
2
- import time
3
- import json
4
- from collections import defaultdict
5
- from .basic_stats import get_log_files, NUM_SERVERS, LOG_ROOT_DIR
6
- from .utils import detect_language, get_time_stamp_from_date, get_input_image_path, load_image_from_path
7
- from tqdm import tqdm
8
- VOTES = ["tievote", "leftvote", "rightvote", "bothbad_vote", "chat"]
9
-
10
-
11
- def remove_html(raw):
12
- if raw.startswith("<h3>"):
13
- return raw[raw.find(": ") + 2 : -len("</h3>\n")]
14
- if raw.startswith("### Model A: ") or raw.startswith("### Model B: "):
15
- return raw[13:]
16
- return raw
17
-
18
-
19
- def read_file(filename):
20
- data = []
21
- for retry in range(5):
22
- try:
23
- # lines = open(filename).readlines()
24
- for l in open(filename):
25
- row = json.loads(l)
26
- if row["type"] in VOTES:
27
- data.append(row)
28
- break
29
- except FileNotFoundError:
30
- time.sleep(2)
31
- return data
32
-
33
-
34
- def read_file_parallel(log_files, num_threads=16):
35
- data_all = []
36
- from multiprocessing import Pool
37
-
38
- with Pool(num_threads) as p:
39
- ret_all = list(tqdm(p.imap(read_file, log_files), total=len(log_files)))
40
- for ret in ret_all:
41
- data_all.extend(ret)
42
- return data_all
43
-
44
- def num_tokens(s:str):
45
- if s is None:
46
- return 0
47
- return len(s) / 4
48
-
49
- def main(
50
- ):
51
- log_files = get_log_files()
52
- data = read_file_parallel(log_files)
53
-
54
- all_model_counts = defaultdict(int)
55
- all_model_input_tokens_counts = defaultdict(list)
56
- all_model_output_tokens_counts = defaultdict(list)
57
- all_model_image_sizes = defaultdict(list)
58
- chat_battle_counts = defaultdict(int)
59
- for row in tqdm(data, desc="counting"):
60
- if row['type'] == "chat":
61
- chat_battle_counts["chat"] += 1
62
- all_model_counts[row['model']] += 1
63
- tstamp = row["tstamp"]
64
- conv_id = row["state"]["conv_id"]
65
-
66
- image = load_image_from_path(get_input_image_path(tstamp, conv_id))
67
- if image is None:
68
- image_size = None
69
- else:
70
- image_size = load_image_from_path(get_input_image_path(tstamp, conv_id)).size
71
- all_model_image_sizes[row['model']].append(image_size)
72
- try:
73
- for message in row["state"]["messages"][row["state"]["offset"] :: 2]:
74
- all_model_input_tokens_counts[row['model']].append(num_tokens(message[1]))
75
- for message in row["state"]["messages"][row["state"]["offset"] + 1 :: 2]:
76
- all_model_output_tokens_counts[row['model']].append(num_tokens(message[1]))
77
- except Exception as e:
78
- print(row)
79
- raise e
80
-
81
- else:
82
- chat_battle_counts[row['type']] += 1
83
- if row["models"][0] is None or row["models"][1] is None:
84
- continue
85
-
86
- # Resolve model names
87
- models_public = [remove_html(row["models"][0]), remove_html(row["models"][1])]
88
- if "model_name" in row["states"][0]:
89
- models_hidden = [
90
- row["states"][0]["model_name"],
91
- row["states"][1]["model_name"],
92
- ]
93
- if models_hidden[0] is None:
94
- models_hidden = models_public
95
- else:
96
- models_hidden = models_public
97
-
98
- if (models_public[0] == "" and models_public[1] != "") or (
99
- models_public[1] == "" and models_public[0] != ""
100
- ):
101
- continue
102
-
103
- if models_public[0] == "" or models_public[0] == "Model A":
104
- anony = True
105
- models = models_hidden
106
- else:
107
- anony = False
108
- models = models_public
109
- if not models_public == models_hidden:
110
- continue
111
-
112
- all_model_counts[models[0]] += 1
113
- all_model_counts[models[1]] += 1
114
- tstamp = row["tstamp"]
115
- conv_id1 = row["states"][0]["conv_id"]
116
- conv_id2 = row["states"][1]["conv_id"]
117
-
118
- image1 = load_image_from_path(get_input_image_path(tstamp, conv_id1))
119
- image2 = load_image_from_path(get_input_image_path(tstamp, conv_id2))
120
- all_model_image_sizes[models[0]].append(None if image1 is None else image1.size)
121
- all_model_image_sizes[models[1]].append(None if image2 is None else image2.size)
122
-
123
- for message in row["states"][0]["messages"][row["states"][0]["offset"] :: 2]:
124
- all_model_input_tokens_counts[models[0]].append(num_tokens(message[1]))
125
- for message in row["states"][0]["messages"][row["states"][0]["offset"] + 1 :: 2]:
126
- all_model_output_tokens_counts[models[0]].append(num_tokens(message[1]))
127
- for message in row["states"][1]["messages"][row["states"][1]["offset"] :: 2]:
128
- all_model_input_tokens_counts[models[1]].append(num_tokens(message[1]))
129
- for message in row["states"][1]["messages"][row["states"][1]["offset"] + 1 :: 2]:
130
- all_model_output_tokens_counts[models[1]].append(num_tokens(message[1]))
131
-
132
- print("### Chat battle counts (requests)")
133
- print(json.dumps(chat_battle_counts, indent=4))
134
-
135
- print("### Model counts (requests)")
136
- print(json.dumps(all_model_counts, indent=4))
137
-
138
- print("### Model Avg input tokens counts (tokens)")
139
- average_input_tokens_counts = {}
140
- for model, counts in all_model_input_tokens_counts.items():
141
- average_input_tokens_counts[model] = sum(counts) / len(counts)
142
- print(json.dumps(average_input_tokens_counts, indent=4))
143
-
144
- print("### Model AVg output tokens counts (tokens)")
145
- average_output_tokens_counts = {}
146
- for model, counts in all_model_output_tokens_counts.items():
147
- average_output_tokens_counts[model] = sum(counts) / len(counts)
148
- print(json.dumps(average_output_tokens_counts, indent=4))
149
-
150
- print("### Model Avg image sizes (height, width)")
151
- average_image_sizes = {}
152
- for model, sizes in all_model_image_sizes.items():
153
- avg_height = sum([size[0] for size in sizes if size is not None]) / len(sizes)
154
- avg_width = sum([size[1] for size in sizes if size is not None]) / len(sizes)
155
- average_image_sizes[model] = (avg_height, avg_width)
156
- print(json.dumps(average_image_sizes, indent=4))
157
-
158
- print("### GPT-4V estimated cost (USD)")
159
- gpt_4v_name = "gpt-4-vision-preview"
160
- gpt_4v_cost = {}
161
- gpt_4v_cost['input'] = sum(all_model_input_tokens_counts[gpt_4v_name]) / 1000 * 0.01
162
- gpt_4v_cost['output'] = sum(all_model_output_tokens_counts[gpt_4v_name]) / 1000 * 0.03
163
-
164
- all_image_cost = 0
165
- for size in all_model_image_sizes[gpt_4v_name]:
166
- if size is None:
167
- continue
168
- all_image_tokens = (size[0] // 512 + 1) * (size[1] // 512 + 1) * 170 + 85
169
- all_image_cost += all_image_tokens / 1000 * 0.01
170
- gpt_4v_cost['image'] = all_image_cost
171
- print(json.dumps(gpt_4v_cost, indent=4))
172
-
173
-
174
-
175
-
176
- if __name__ == "__main__":
177
- fire.Fire(main)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/elo_rating/inspect_elo_rating_pkl.py DELETED
@@ -1,33 +0,0 @@
1
- import pickle
2
- import plotly.graph_objects as go
3
-
4
- def output_figure(data, figure_name="battle_count_heatmap", label="annoy"):
5
- fig = data[label][figure_name]
6
- fig.update_layout(
7
- height=700,
8
- width=700,
9
- title={'text': f'{figure_name}', 'x': 0.5, 'y': 0.07},
10
- xaxis_title="Model B",
11
- yaxis_title="Model A",
12
- # coloraxis_colorscale=[[0.0, '#0d0887'], [1.0, '#f0f921']],
13
- margin={'t': 60}
14
- )
15
- fig.write_image(f"{figure_name}.png")
16
-
17
- with open("./results/latest/elo_results.pkl",'rb') as f:
18
- data = pickle.load(f)
19
- print()
20
- df = data["anony"]["leaderboard_table_df"]
21
- # sort by rating
22
- print(data["anony"].keys())
23
-
24
- for figure_name in [ 'win_fraction_heatmap', 'battle_count_heatmap',]:
25
- output_figure(data, figure_name, "anony")
26
-
27
- df = df.sort_values(by=["rating"], ascending=False)
28
- print(df)
29
- df = data["full"]["leaderboard_table_df"]
30
- # sort by rating
31
- df = df.sort_values(by=["rating"], ascending=False)
32
- print(df)
33
- print('done')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/elo_rating/upload_battle_data.py DELETED
@@ -1,168 +0,0 @@
1
- import fire
2
- import json
3
- import os
4
- import datasets
5
- import random
6
- import datetime
7
- from pathlib import Path
8
- from datetime import datetime
9
- from PIL import Image
10
-
11
- datasets.config.DEFAULT_MAX_BATCH_SIZE = 500
12
-
13
- def create_hf_battle_dataset(data_file: str, split="test", task_type="t2i_generation"):
14
- if task_type == "t2i_generation":
15
- features = datasets.Features(
16
- {
17
- "index": datasets.Value("int32"),
18
- "tstamp": datasets.Value("int32"),
19
- "prompt": datasets.Value("string"),
20
- "left_model": datasets.Value("string"),
21
- "left_image": datasets.Image(),
22
- "right_model": datasets.Value("string"),
23
- "right_image": datasets.Image(),
24
- "vote_type": datasets.Value("string"),
25
- "winner": datasets.Value("string"),
26
- "anony": datasets.Value("bool"),
27
- "judge": datasets.Value("string"),
28
- }
29
- )
30
- else:
31
- raise ValueError(f"Task type {task_type} not supported")
32
- hf_dataset = datasets.Dataset.from_list(
33
- data_file,
34
- features=features,
35
- split=split,
36
- )
37
- return hf_dataset
38
-
39
-
40
-
41
-
42
- def load_image(path:str):
43
- try:
44
- return Image.open(path)
45
- except Exception as e:
46
- print(f"Error loading image {path}: {e}")
47
- return None
48
-
49
- def get_date_from_time_stamp(unix_timestamp: int):
50
- # Create a datetime object from the Unix timestamp
51
- dt = datetime.fromtimestamp(unix_timestamp)
52
-
53
- # Convert the datetime object to a string with the desired format
54
- date_str = dt.strftime("%Y-%m-%d")
55
- return date_str
56
-
57
- def load_battle_image(battle, log_dir):
58
- image_path = Path(log_dir) / f"{get_date_from_time_stamp(battle['tstamp'])}-convinput_images" / f"input_image_{battle['question_id']}.png"
59
- return load_image(image_path)
60
-
61
- def find_media_path(conv_id, task_type, log_dir):
62
- media_directory_map = {
63
- "t2i_generation": "images/generation",
64
- "image_edition": "images/edition",
65
- "text2video": "videos/generation"
66
- }
67
- if task_type == "t2i_generation":
68
- media_path = Path(log_dir) / media_directory_map[task_type] / f"{conv_id}.jpg"
69
- else:
70
- raise ValueError(f"Task type {task_type} not supported")
71
- return media_path
72
-
73
-
74
- def main(
75
- task_type='t2i_generation',
76
- # data_file: str = "./results/latest/clean_battle_conv.json",
77
- data_file: str = None,
78
- repo_id: str = "TIGER-Lab/GenAI-Arena-human-eval",
79
- log_dir: str = os.getenv("LOGDIR", "../GenAI-Arena-hf-logs/vote_log"),
80
- config_name='battle',
81
- split='test',
82
- token = os.environ.get("HUGGINGFACE_TOKEN", None),
83
- seed=42,
84
- ):
85
- if data_file is None:
86
- data_file = f"./results/latest/clean_battle_{task_type}.json"
87
- if not os.path.exists(data_file):
88
- raise ValueError(f"Data file {data_file} does not exist")
89
- with open(data_file, "r") as f:
90
- data = json.load(f)
91
-
92
- # add index according to the tsamp
93
- if seed is not None:
94
- random.seed(seed)
95
-
96
-
97
- data = sorted(data, key=lambda x: x['tstamp'])
98
- required_keys_each_task = {
99
- "image_editing": ["source_prompt", "target_prompt", "instruct_prompt"],
100
- "t2i_generation": ["prompt"],
101
- "video_generation": ["prompt"]
102
- }
103
- valid_data = []
104
- for i, battle in enumerate(data):
105
- if any(key not in battle['inputs'] for key in required_keys_each_task[task_type]):
106
- # print(battle['inputs'])
107
- # print(f"Skipping battle {i} due to missing keys")
108
- continue
109
- valid_data.append(battle)
110
- print(f"Total battles: {len(data)}, valid battles: {len(valid_data)}, removed battles: {len(data) - len(valid_data)}")
111
- data = valid_data
112
-
113
- # data = random.sample(data, 50 * 7+2)
114
-
115
- for i, battle in enumerate(data):
116
- battle['index'] = i
117
-
118
-
119
- new_data = []
120
- if task_type == 't2i_generation':
121
- for battle in data:
122
- prompt = battle['inputs']['prompt']
123
- model_a = battle['model_a']
124
- model_b = battle['model_b']
125
- model_a_conv_id = battle['model_a_conv_id']
126
- model_b_conv_id = battle['model_b_conv_id']
127
- tstamp = battle['tstamp']
128
- vote_type = battle['vote_type']
129
- left_image_path = find_media_path(model_a_conv_id, task_type, log_dir)
130
- right_image_path = find_media_path(model_b_conv_id, task_type, log_dir)
131
- left_image = load_image(left_image_path)
132
- right_image = load_image(right_image_path)
133
- if left_image is None or right_image is None:
134
- print(f"Skipping battle {battle['index']} due to missing images")
135
- continue
136
- new_data.append({
137
- "index": battle['index'],
138
- "tstamp": tstamp,
139
- "prompt": prompt,
140
- "left_model": model_a,
141
- "left_image": left_image,
142
- "right_model": model_b,
143
- "right_image": right_image,
144
- "vote_type": vote_type,
145
- "winner": battle['winner'],
146
- "anony": battle['anony'],
147
- "judge": battle['judge'],
148
- })
149
- split = "test"
150
- hf_dataset = create_hf_battle_dataset(new_data, split, task_type)
151
- else:
152
- raise ValueError(f"Task type {task_type} not supported")
153
-
154
- print(hf_dataset)
155
- print(f"Uploading to part {repo_id}:{split}...")
156
- hf_dataset.push_to_hub(
157
- repo_id=repo_id,
158
- config_name=config_name,
159
- split=split,
160
- token=token,
161
- commit_message=f"Add vision-arena {split} dataset",
162
- )
163
-
164
- print("Done!")
165
-
166
-
167
- if __name__ == "__main__":
168
- fire.Fire(main)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/elo_rating/utils.py DELETED
@@ -1,91 +0,0 @@
1
- from datetime import datetime
2
- import pytz
3
- import PIL
4
- import os
5
-
6
- import sys
7
- sys.path.append('../')
8
- from model.model_registry import get_model_info
9
-
10
- def detect_language(text: str) -> str:
11
- """Detect the langauge of a string."""
12
- try:
13
- import polyglot # pip3 install polyglot pyicu pycld2
14
- from polyglot.detect import Detector
15
- from polyglot.detect.base import logger as polyglot_logger
16
- import pycld2
17
- except ImportError as e:
18
- print("Please install the required libraries: polyglot, pycld2: pip3 install polyglot pyicu pycld2")
19
- exit(1)
20
-
21
- polyglot_logger.setLevel("ERROR")
22
-
23
- try:
24
- lang_code = Detector(text).language.name
25
- except (pycld2.error, polyglot.detect.base.UnknownLanguage):
26
- lang_code = "unknown"
27
- return lang_code
28
-
29
-
30
- def get_time_stamp_from_date(date_str:str):
31
- """
32
- Convert a date string to a Unix timestamp
33
- Args:
34
- date_str (str): The input date string in the format 'YYYY-MM-DD-HH:MM-TZ', e.g. '2024-02-10-14:00-PT'
35
- """
36
-
37
- # Convert the date string into a format that Python's datetime can understand
38
- # and specify the correct timezone for PT, which is 'US/Pacific'
39
- date_format = "%Y-%m-%d-%H:%M-%Z"
40
-
41
- # Parse the date string into a datetime object
42
- # Note: PT is not directly recognized by pytz, so we manually map it to 'US/Pacific'
43
- timezone_map = {
44
- "PT": "US/Pacific",
45
- }
46
-
47
- # Extract the timezone abbreviation
48
- tz_abbr = date_str.split("-")[-1]
49
- # Map the abbreviation to a pytz timezone
50
- tz_info = pytz.timezone(timezone_map[tz_abbr])
51
-
52
- # Remove the timezone abbreviation for parsing
53
- date_str_parsed = date_str.rsplit("-", 1)[0]
54
-
55
- # Create a datetime object with the corresponding timezone
56
- dt = datetime.strptime(date_str_parsed, "%Y-%m-%d-%H:%M").replace(tzinfo=tz_info)
57
-
58
- # Convert the datetime object to a Unix timestamp
59
- unix_timestamp = dt.timestamp()
60
- return unix_timestamp
61
-
62
- def get_date_from_time_stamp(unix_timestamp: int):
63
- # Create a datetime object from the Unix timestamp
64
- dt = datetime.fromtimestamp(unix_timestamp)
65
-
66
- # Convert the datetime object to a string with the desired format
67
- date_str = dt.strftime("%Y-%m-%d %H:%M:%S %Z")
68
- return date_str
69
-
70
-
71
- def get_input_image_path(tstamp, conv_id):
72
- # from tstamp to date e.g. 2024-02-10
73
- date_str = datetime.fromtimestamp(tstamp, tz=pytz.timezone("US/Pacific")).strftime("%Y-%m-%d")
74
- LOGDIR = os.getenv("LOGDIR")
75
- return f"{LOGDIR}/{date_str}-convinput_images/input_image_{conv_id}.png"
76
-
77
- def load_image_from_path(image_path):
78
- # Load the image from the specified
79
- # path using the Python Imaging Library (PIL)
80
- try:
81
- image = PIL.Image.open(image_path)
82
- return image
83
- except FileNotFoundError:
84
- print(f"Image not found at path: {image_path}")
85
- return None
86
- except PIL.UnidentifiedImageError:
87
- print(f"Unidentified image format at path: {image_path}")
88
- return None
89
-
90
-
91
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/evaluator/convert_to_evaluator_data.py DELETED
@@ -1,134 +0,0 @@
1
- import argparse
2
- import json
3
- import os
4
- import time
5
- from pytz import timezone
6
- from tqdm import tqdm
7
- import base64
8
- from icecream import ic
9
- from PIL import Image
10
-
11
-
12
- # Function to encode the image
13
- def encode_image(image_path):
14
- with open(image_path, "rb") as image_file:
15
- return base64.b64encode(image_file.read()).decode('utf-8')
16
-
17
- def get_log_files(max_num_files=None):
18
- dates = []
19
- for month in [2, 3]:
20
- for day in range(1, 32):
21
- dates.append(f"2024-{month:02d}-{day:02d}")
22
-
23
- num_servers = 1
24
- filenames = []
25
- for d in dates:
26
- for i in range(num_servers):
27
- # name = os.path.expanduser(f"~/fastchat_logs/server{i}/{d}-conv.json")
28
- name = os.path.expanduser(f"vision-arena-logs/{d}-conv.json")
29
- if os.path.exists(name):
30
- filenames.append(name)
31
- max_num_files = max_num_files or len(filenames)
32
- filenames = filenames[-max_num_files:]
33
- return filenames
34
-
35
-
36
- def pretty_print_conversation(messages):
37
- for role, msg in messages:
38
- print(f"[[{role}]]: {msg}")
39
-
40
- task_template_map = {
41
- "image_caption": "Give me the semantic alignment score between the given image and the given caption: \"{generated_sentence}\" on a scale of 0-100. Only reply the score value.",
42
- "vqa": "Rate the answer correctness regarding the question within the context of the given image on a scale of 0-100. Only reply the score value.",
43
- "pair_rate_old": "[Instruction]\n\"{instruction}\"\n\n\"{generated_sentence}\"\n\n[System]\nGiven the instruction and the image, please compare the correctness of responses A and B. Reply with \"leftvote\" if you find A better, \"rightvote\" if B is better, \"bothbad_vote\" if both responses are wrong, and \"tievote\" if both responses are equally satisfactory. If you are unable to make a decision, please reply with \"NA\".",
44
- "pair_rate_wexplanation": "<image>[Instruction]\n\"{instruction}\"\n\n\"{generated_sentence}\"[System]\nPlease act as an impartial judge and evaluate the quality of the responses provided by two AI assistants to the user question displayed below. You should choose the assistant that follows the user’s instructions and answers the user’s question better. Your evaluation should consider factors such as the helpfulness, relevance, accuracy, depth, creativity, and level of detail of their responses. Begin your evaluation by comparing the two responses and provide a short explanation. Avoid any positional biases and ensure that the order in which the responses were presented does not influence your decision. Do not allow the length of the responses to influence your evaluation. Do not favor certain names of the assistants. Be as objective as possible. After providing your explanation, output your final verdict by strictly following this format: \"[[A]]\" if assistant A is better, \"[[B]]\" if assistant B is better, and \"[[C]]\" for a tie.",
45
- "pair_rate": "<image>[Instruction]\n\"{instruction}\"\n\n\"{generated_sentence}\"\n\n[System]\nPlease act as an impartial judge and evaluate the quality of the responses provided by two AI assistants to the user question displayed below. You should choose the assistant that follows the user’s instructions and answers the user’s question better. Your evaluation should consider factors such as the helpfulness, relevance, accuracy, depth, creativity, and level of detail of their responses. Begin your evaluation by comparing the two responses and provide a short explanation. Avoid any positional biases and ensure that the order in which the responses were presented does not influence your decision. Do not allow the length of the responses to influence your evaluation. Do not favor certain names of the assistants. Be as objective as possible. Reply with \"leftvote\" if you find assistant A better, \"rightvote\" if assistant B is better, \"bothbad_vote\" if both responses are wrong, and \"tievote\" if both assistants provide equally satisfactory answers. If you are unable to make a decision, please reply with \"NA\"."
46
- }
47
-
48
- def inspect_convs(log_files):
49
- json_data = []
50
-
51
- ic(log_files)
52
- total_vote = 0
53
-
54
- for filename in tqdm(log_files, desc="read files"):
55
- for retry in range(5):
56
- try:
57
- lines = open(filename).readlines()
58
- break
59
- except FileNotFoundError:
60
- time.sleep(2)
61
-
62
- for l in lines:
63
- row = json.loads(l)
64
-
65
- if "states" not in row:
66
- continue
67
- if row["type"] not in ["leftvote", "rightvote", "bothbad_vote", "tievote"]:
68
- continue
69
-
70
- model_names = row["states"][0]["model_name"], row["states"][1]["model_name"]
71
-
72
-
73
- # Iterate through each state and write the relevant information
74
- if not len(row["states"][0]['messages']): continue
75
- # ic(row["states"][0]['messages'][1][1])
76
-
77
- if row["states"][0]['messages'][1][1] is None or row["states"][1]['messages'][1][1] is None or "NETWORK ERROR" in row["states"][0]['messages'][1][1] or "NETWORK ERROR" in row["states"][1]['messages'][1][1]: continue
78
- total_vote += 1
79
-
80
- conv_id = row["states"][0]['conv_id']
81
- image_path = os.path.join("/local/home/yujielu/project/Arena-Elo/vision-arena-logs", os.path.basename(filename)[:-5]+"input_images", f"input_image_{conv_id}.png")
82
- if not os.path.exists(image_path) :
83
- continue
84
- try:
85
- image = Image.open(image_path).convert("RGB")
86
- except:
87
- continue
88
-
89
- left_response = row["states"][0]['messages'][1][1]
90
- right_response = row["states"][1]['messages'][1][1]
91
- instruction = row["states"][0]['messages'][0][1]
92
- generated_sentence = f"[The Start of Assistant A’s Answer]\n{left_response}\n[The End of Assistant A’s Answer]\n\n[The Start of Assistant B’s Answer]\n{right_response}\n[The End of Assistant B’s Answer]"
93
- text_prompt = task_template_map["pair_rate"].format(instruction=instruction, generated_sentence=generated_sentence)
94
-
95
- user_input = text_prompt
96
- # Create the conversation structure
97
- conversation = [
98
- {
99
- "from": "human",
100
- "value": user_input
101
- },
102
- {
103
- "from": "gpt",
104
- "value": row["type"]
105
- }
106
- ]
107
-
108
- # Create the JSON object for each row
109
- json_obj = {
110
- "id": conv_id,
111
- "image": image_path,
112
- "conversations": conversation
113
- }
114
-
115
- # Append the JSON object to the list
116
- json_data.append(json_obj)
117
-
118
- # Write the JSON data to a file
119
- with open('output_evaluator_data.json', 'w') as json_file:
120
- json.dump(json_data, json_file, indent=2)
121
-
122
- if __name__ == "__main__":
123
- parser = argparse.ArgumentParser()
124
- parser.add_argument("--max-num-files", type=int)
125
- args = parser.parse_args()
126
-
127
- log_files = get_log_files(args.max_num_files)
128
-
129
-
130
-
131
- inspect_convs(log_files)
132
-
133
-
134
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/evaluator/rating_analysis.ipynb DELETED
@@ -1,321 +0,0 @@
1
- {
2
- "cells": [
3
- {
4
- "cell_type": "code",
5
- "execution_count": 43,
6
- "metadata": {},
7
- "outputs": [
8
- {
9
- "name": "stdout",
10
- "output_type": "stream",
11
- "text": [
12
- "1338\n",
13
- "1044\n"
14
- ]
15
- }
16
- ],
17
- "source": [
18
- "\n",
19
- "import pandas as pd\n",
20
- "import json\n",
21
- "\n",
22
- "# Replace 'your_file_name.csv' with the path to your CSV file\n",
23
- "file_name = 'all_pairvote_log_wgpt.csv'\n",
24
- "\n",
25
- "# Load the CSV file into a DataFrame\n",
26
- "df = pd.read_csv(file_name)\n",
27
- "\n",
28
- "# Define a function to parse JSON data\n",
29
- "def parse_json(data):\n",
30
- " try:\n",
31
- " # Parse the JSON data\n",
32
- " return json.loads(data)\n",
33
- " except ValueError as e:\n",
34
- " # Return None or an empty dictionary if the data cannot be parsed\n",
35
- " return None\n",
36
- "\n",
37
- "# Apply the parse_json function to the 'models' and 'states' columns\n",
38
- "df['models'] = df['models'].apply(parse_json)\n",
39
- "df['states'] = df['states'].apply(parse_json)\n",
40
- "# row[\"states\"][0]['messages'][0][1]\n",
41
- "\n",
42
- "# Now df contains the parsed JSON data in the 'models' and 'states' columns\n",
43
- "# print(df.head())\n",
44
- "print(len(df))\n",
45
- "# filter_vote_df = df[df[\"gpt_vote\"].isin([\"leftvote\", \"rightvote\"])]#, \"tievote\", \"bothbad_vote\"\n",
46
- "# \\#1\n",
47
- "filter_vote_df = df[df[\"gpt_vote\"].isin([\"leftvote\", \"rightvote\", \"tievote\", \"bothbad_vote\"])]\n",
48
- "# \\#2\n",
49
- "# filter_vote_df = df\n",
50
- "filter_vote_df.loc[~filter_vote_df[\"gpt_vote\"].isin([\"leftvote\", \"rightvote\"]), \"gpt_vote\"] = \"tie\"\n",
51
- "filter_vote_df.loc[~filter_vote_df[\"type\"].isin([\"leftvote\", \"rightvote\"]), \"type\"] = \"tie\"\n",
52
- "# \\#3\n",
53
- "#[df[\"gpt_vote\"].isin([\"leftvote\", \"rightvote\"]) & df[\"type\"].isin([\"leftvote\", \"rightvote\"])]\n",
54
- "filtered_df = filter_vote_df[filter_vote_df[\"states\"].apply(lambda x: len(x[0]['messages'][0][1]) > 10)]\n",
55
- "print(len(filtered_df))\n"
56
- ]
57
- },
58
- {
59
- "cell_type": "code",
60
- "execution_count": 44,
61
- "metadata": {},
62
- "outputs": [
63
- {
64
- "name": "stdout",
65
- "output_type": "stream",
66
- "text": [
67
- "Confusion Matrix:\n",
68
- "[[300 61 34]\n",
69
- " [102 269 27]\n",
70
- " [ 99 111 41]]\n",
71
- "\n",
72
- "Accuracy: 0.5842911877394636\n"
73
- ]
74
- }
75
- ],
76
- "source": [
77
- "import warnings\n",
78
- "warnings.filterwarnings('ignore')\n",
79
- "\n",
80
- "from sklearn.metrics import confusion_matrix, accuracy_score\n",
81
- "import pandas as pd\n",
82
- "\n",
83
- "# Assuming df is your DataFrame\n",
84
- "\n",
85
- "# True labels\n",
86
- "y_true = filtered_df[\"type\"]\n",
87
- "\n",
88
- "# Predictions\n",
89
- "y_pred = filtered_df[\"gpt_vote\"]\n",
90
- "\n",
91
- "# Compute the confusion matrix\n",
92
- "# conf_matrix = confusion_matrix(y_true, y_pred, labels=[\"leftvote\", \"rightvote\", \"tievote\", \"bothbad_vote\"])\n",
93
- "conf_matrix = confusion_matrix(y_true, y_pred, labels=[\"leftvote\", \"rightvote\", \"tie\"])\n",
94
- "\n",
95
- "# Compute the accuracy\n",
96
- "accuracy = accuracy_score(y_true, y_pred)\n",
97
- "\n",
98
- "print(\"Confusion Matrix:\")\n",
99
- "print(conf_matrix)\n",
100
- "\n",
101
- "print(\"\\nAccuracy:\", accuracy)\n"
102
- ]
103
- },
104
- {
105
- "cell_type": "code",
106
- "execution_count": 45,
107
- "metadata": {},
108
- "outputs": [
109
- {
110
- "data": {
111
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0YAAAJwCAYAAACtcHEcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB0yUlEQVR4nO3deZyN5f/H8feZfcaYMZaxMwyGkTWJURSKKFshS/YtREQoe4oKaVFpsaRBZUlRUrLLUtYsk2VkaYSxjGEYZq7fH37O12ksc8aMM+N+PR+P83jMXPd9X+dzxrnHec913ddtM8YYAQAAAICFubm6AAAAAABwNYIRAAAAAMsjGAEAAACwPIIRAAAAAMsjGAEAAACwPIIRAAAAAMsjGAEAAACwPIIRAAAAAMsjGAEAAACwPIIRAAAWsWTJElWsWFE+Pj6y2Ww6c+ZMuvY/ffp02Ww2HTx4MF37zcpsNptGjhzp6jIApALBCECafPjhh7LZbHrwwQddXcodu/Zh7vfff7/h9kceeUT33XffXa7q3hQdHa3evXurVKlS8vPzk5+fn8LDw9WrVy9t377dYd+RI0fKZrPZH9f2HTp0qOLi4iTJYfutHitWrLhtbZcvX1Z4eLhsNpvGjx9vb+/Tp49sNpv27dt302NfffVV2Wy2FK/hRlasWKFmzZopX7588vLyUnBwsJ566inNnz//tsfeidjYWLVo0UK+vr6aPHmyZs6cqWzZsmXoc95NISEhstlsqlu37g23f/rpp/b3w83O9VtZt26dRo4cme5hEkDm4eHqAgBkTZGRkQoJCdHGjRu1b98+lShRwtUlIZNbtGiRWrZsKQ8PD7Vp00YVKlSQm5ub9uzZo/nz5+ujjz5SdHS0ihYt6nDcRx99JH9/f8XHx2vp0qV6/fXX9euvv2rt2rWaOXOmw75ffPGFfv755xTtZcqUuW1977//vg4dOpSivU2bNnr//fc1a9YsDR8+/IbHzp49W+XKlVP58uVv+RwjRozQ6NGjVbJkSXXv3l1FixZVbGysfvjhBz399NOKjIxU69atb1trWmzatEnnzp3Ta6+9dtPwcKeee+45Pfvss/L29s6Q/m/Hx8dHy5cv17Fjx5QvXz6HbZGRkfLx8dHFixfT1Pe6des0atQodejQQTly5Ej1cQkJCfLw4OMWkCUYAHDSgQMHjCQzf/58kydPHjNy5MhUHXf58mVz6dKlDK7OedOmTTOSzKZNm264vVatWqZs2bJ3uap7y759+0y2bNlMmTJlzD///JNi++XLl827775rDh06ZG8bMWKEkWROnDjhsG+zZs2MJLNu3boU/fTq1cuk5b+2f//91wQGBprRo0cbSebtt9922F6iRAlTunTpGx67bt06I8mMGzfuls/xzTffGEnmmWeeMYmJiSm2L1myxHz//fdO155aM2bMuOX7PKsrWrSoqVOnjgkICDCTJk1y2Hb48GHj5uZmnn766TT/DN5++20jyURHR99236SkJJOQkOD0cwBwLabSAXBaZGSkgoKC1LBhQz3zzDOKjIxMsc/BgwftU5ImTZqk0NBQeXt7a9euXZKkPXv26JlnnlHOnDnl4+OjKlWq6LvvvnPo49oUt7Vr16p///7KkyePsmXLpqZNm+rEiRMO+y5cuFANGzZUgQIF5O3trdDQUL322mtKSkpK99d/7bVNnz49xbb/Xk9wbTrYX3/9pbZt2yowMFB58uTRsGHDZIzR4cOH1bhxYwUEBChfvnyaMGGCQ3+JiYkaPny47r//fgUGBipbtmx6+OGHtXz58hvWNH78eH3yySf2n/cDDzygTZs23fL1/P7777LZbJoxY0aKbT/99JNsNpsWLVokSTp37pxefPFFhYSEyNvbW8HBwXrssce0efPmWz7HW2+9pfPnz2vatGnKnz9/iu0eHh7q06ePChcufMt+JKl27dqSrk7LSy+DBw9WWFiY2rZte8Ptbdq00Z49e274OmfNmiWbzaZWrVrd8jmGDRumnDlzaurUqfL09EyxvV69enryySft3x8/flydO3dW3rx55ePjowoVKqT4N0rtv/sjjzyi9u3bS5IeeOAB2Ww2dejQQdLVKWjXvr7eI488okceecSh7f3331fZsmXl5+enoKAgValSRbNmzbJvv9k1Rh9++KHKli0rb29vFShQQL169UoxJe3alNVdu3bp0UcflZ+fnwoWLKi33nrrZj/SFHx8fNSsWTOHmqSrI3pBQUGqV69eimO2b9+uDh06qHjx4vLx8VG+fPnUqVMnxcbG2vcZOXKkBg4cKEkqVqyYfUretddps9nUu3dvRUZG2l/nkiVL7Nuu/U5ISEhQ6dKlVbp0aSUkJNj7P3XqlPLnz6+IiIgM+Z0FIHUY2wXgtMjISDVr1kxeXl5q1aqVPvroI23atEkPPPBAin2nTZumixcvqlu3bvL29lbOnDm1c+dO1ahRQwULFtTgwYOVLVs2ff3112rSpInmzZunpk2bOvTxwgsvKCgoSCNGjNDBgwc1adIk9e7dW1999ZV9n+nTp8vf31/9+/eXv7+/fv31Vw0fPlxxcXF6++23U/W6zp49q5MnT6Zov3z5spM/oZRatmypMmXKaNy4cVq8eLHGjBmjnDlzasqUKapdu7befPNNRUZGasCAAXrggQdUs2ZNSVJcXJw+++wztWrVSl27dtW5c+f0+eefq169etq4caMqVqzo8DyzZs3SuXPn1L17d9lsNr311ltq1qyZDhw4cMMP45JUpUoVFS9eXF9//bX9w/M1X331lcMHyh49emju3Lnq3bu3wsPDFRsbqzVr1mj37t2qXLnyTV//okWLVKJEiXS5Jm3//v2SpFy5ct1xX5K0ceNGzZgxQ2vWrJHNZrvhPm3atNGoUaM0a9Ysh9eZlJSkr7/+Wg8//LCKFCly0+fYu3ev9uzZo06dOil79uy3rSkhIUGPPPKI9u3bp969e6tYsWL65ptv1KFDB505c0Z9+/Z12P92/+6vvvqqwsLC9Mknn2j06NEqVqyYQkNDU/kTuurTTz9Vnz599Mwzz6hv3766ePGitm/frg0bNtxy+t/IkSM1atQo1a1bV88//7yioqLsvzPWrl3r8L48ffq06tevr2bNmqlFixaaO3euBg0apHLlyumJJ55IVZ2tW7fW448/rv3799tf46xZs/TMM8/c8Bz4+eefdeDAAXXs2FH58uXTzp079cknn2jnzp1av369bDabmjVrpr/++kuzZ8/WO++8o9y5c0uS8uTJY+/n119/1ddff63evXsrd+7cCgkJSfFcvr6+mjFjhmrUqKFXX31VEydOlCT16tVLZ8+e1fTp0+Xu7p6q1wkgA7h6yApA1vL7778bSebnn382xhiTnJxsChUqZPr27euwX3R0tJFkAgICzPHjxx221alTx5QrV85cvHjR3pacnGwiIiJMyZIl7W3XprjVrVvXJCcn29v79etn3N3dzZkzZ+xtFy5cSFFr9+7djZ+fn8Pz3Mi157nV4/qpdNde27Rp01L0JcmMGDHC/v216WDdunWzt125csUUKlTI2Gw2h+lXp0+fNr6+vqZ9+/YO+/53+uHp06dN3rx5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f3zLDwjFixeXdHVaUHrdS2XFihWKjY3V/Pnz7YsWSOm7atn1rv01/r+rav33r9/pYe7cuSpevLjmz5/v8AH22uhaemrZsqVGjRqlefPmKW/evIqLi9Ozzz6bYr/8+fOrZ8+e6tmzp44fP67KlSvr9ddfv+XF8Q0bNtRnn32mjRs3qmrVqule+620a9dODz30kP37a+/PQ4cO6fTp0ypbtmyKY9544w298cYb2rJli8MCF23atNGSJUv0448/atasWQoICNBTTz112xpKlSqlsLAwLVy4UO++++4NpxVer2jRotq+fbuSk5MdRo2uTQv9772e7kRQUNANb1r6999/28/Xa7Jly6aWLVuqZcuWSkxMVLNmzfT6669ryJAh8vHxueHrkKSoqCiHvhITExUdHZ1h91OSpFatWmnMmDEqU6ZMikVKrjl9+rSWLVumUaNGOdyjau/evSn2Tc8Rne3bt2v06NHq2LGjtm7dqi5dumjHjh0KDAxMt+cA4Dym0gFIlYSEBM2fP19PPvmknnnmmRSP3r1769y5cymW3P6v4OBgPfLII5oyZYpiYmJSbP/vMtypce2vzNf/VTkxMVEffvih032lRkBAgHLnzu1wrYmkDHm+G722DRs26Lfffkv35ypTpozKlSunr776Sl999ZXy58/vEDSTkpJSTC0KDg5WgQIFdOnSpVv2/fLLL8vPz0+dOnXSv//+m2K7syMCzihevLjD1MgaNWpIkvr06aMFCxY4PKZMmSJJ6tChgxYsWJDir/hNmjSRn5+fPvzwQ/34449q1qzZDQPBjYwaNUqxsbHq0qWLrly5kmL70qVL7cuiN2jQQMeOHXOY2njlyhW9//778vf3V61atdL0s7iR0NBQrV+/XomJifa2RYsW6fDhww77Xb98tXR1Olh4eLiMMTddubFu3bry8vLSe++95/Bv/Pnnn+vs2bNq2LBhur2O/+rSpYtGjBiRYgn8693o/JKkSZMmpdg3W7ZsklL+QcRZly9fVocOHVSgQAG9++67mj59uv7991/169fvjvoFcOcYMQKQKt99953OnTunRo0a3XB7tWrVlCdPHkVGRjpcrH8jkydP1kMPPaRy5cqpa9euKl68uP7991/99ttvOnLkiLZt2+ZUbREREQoKClL79u3Vp08f2Ww2zZw5M0M/bHfp0kXjxo1Tly5dVKVKFa1atUp//fVXuj/Pk08+qfnz56tp06Zq2LChoqOj9fHHHys8PPyG1+zcqZYtW2r48OHy8fFR586dHUYrzp07p0KFCumZZ55RhQoV5O/vr19++UWbNm265YdPSSpZsqRmzZqlVq1aKSwsTG3atFGFChVkjFF0dLRmzZolNzc3FSpUKN1f081Urlw5xRLj16bUlS1bVk2aNElxjL+/v5o0aWK/zig10+iuadmypXbs2KHXX39dW7ZsUatWrVS0aFHFxsZqyZIlWrZsmb3fbt26acqUKerQoYP++OMPhYSEaO7cuVq7dq0mTZqU6kUcUqNLly6aO3eu6tevrxYtWmj//v368ssvUyzn/fjjjytfvnyqUaOG8ubNq927d+uDDz5Qw4YNb1pPnjx5NGTIEI0aNUr169dXo0aNFBUVpQ8//FAPPPDATe8blR6KFi3qcE+xGwkICFDNmjX11ltv6fLlyypYsKCWLl16w9Hma9e1vfrqq3r22Wfl6empp556yh6YUmvMmDHaunWrli1bpuzZs6t8+fIaPny4hg4dqmeeeUYNGjRwqj8A6YdgBCBVIiMj5ePjo8cee+yG293c3NSwYUNFRkam+Mvyf4WHh+v333/XqFGjNH36dMXGxio4OFiVKlVymM6SWrly5dKiRYv00ksvaejQoQoKClLbtm1Vp06dm17HdKeGDx+uEydOaO7cufr666/1xBNP6Mcff1RwcHC6Pk+HDh107NgxTZkyRT/99JPCw8P15Zdf6ptvvtGKFSvS9bmkqx/ehw4dqgsXLqQIuH5+furZs6eWLl2q+fPnKzk5WSVKlNCHH36o559//rZ9N27cWDt27NCECRO0dOlSTZ06VTabTUWLFlXDhg3Vo0cPVahQId1fU3pr06aNZs2apfz58zssTJEaY8aMUe3atfXee+/po48+0qlTpxQUFKRq1app4cKF9j88+Pr6asWKFRo8eLBmzJihuLg4hYWFadq0aTe8GeudqFevniZMmKCJEyfqxRdfVJUqVezn0/W6d++uyMhITZw4UfHx8SpUqJD69OmjoUOH3rL/kSNHKk+ePPrggw/Ur18/5cyZU926ddMbb7xx03tr3U2zZs3SCy+8oMmTJ8sYo8cff1w//vijChQo4LDfAw88oNdee00ff/yxlixZouTkZEVHRzsVjDZv3qw33nhDvXv3tq/sKV29wfDC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6Q4AAAAAXMrpYDRv3jzVq1dPvr6+2rx5sy5duiRJOnv2rN544410LxAAAAAAMprTwWjMmDH6+OOP9emnn8rT09PeXqNGDW3evDldiwMAAACAu8HpYBQVFaWaNWumaA8MDNSZM2fSVMTMmTNVo0YNFShQQH///bckadKkSVq4cGGa+gMAAAAAZzgdjPLly6d9+/alaF+zZo2KFy/udAEfffSR+vfvrwYNGujMmTP25b5z5MihSZMmOd0fAAAAADjL6WDUtWtX9e3bVxs2bJDNZtM///yjyMhIDRgwQM8//7zTBbz//vv69NNP9eqrr8rd3d3eXqVKFe3YscPp/gAAAADAWU7fx2jw4MFKTk5WnTp1dOHCBdWsWVPe3t4aMGCAXnjhBacLiI6OVqVKlVK0e3t76/z58073BwAAAADOcioYJSUlae3aterVq5cGDhyoffv2KT4+XuHh4fL3909TAcWKFdPWrVtVtGhRh/YlS5aoTJkyaeoTAAAAAJzhVDByd3fX448/rt27dytHjhwKDw+/4wL69++vXr166eLFizLGaOPGjZo9e7bGjh2rzz777I77BwAAAIDbcXoq3X333acDBw6oWLFi6VJAly5d5Ovrq6FDh+rChQtq3bq1ChQooHfffVfPPvtsujwHAAAAANyKzRhjnDlgyZIlGjJkiF577TXdf//9ypYtm8P2gICANBdz4cIFxcfHKzg4OM19SNLFK3d0OAAAAIB7hE8qh4KcDkZubv9byM5ms9m/NsbIZrPZl9tOrdq1a2v+/PnKkSOHQ3tcXJyaNGmiX3/91an+JIIRAAAAgKtSG4ycnkq3fPlyZw+5pRUrVigxMTFF+8WLF7V69ep0fS4AAAAAuBGng1GtWrVuuu3PP/9MdT/bt2+3f71r1y4dO3bM/n1SUpKWLFmiggULOlseAAAAADjN6al0/3Xu3DnNnj1bn332mf74449UT6Vzc3OzT8W7UQm+vr56//331alTJ6drYiodAAAAACkDp9Jds2rVKn3++eeaN2+eChQooGbNmmny5MmpPj46OlrGGBUvXlwbN25Unjx57Nu8vLwUHBwsd3f3tJYHAAAAAKnmVDA6duyYpk+frs8//1xxcXFq0aKFLl26pG+//dbpexpdu6FrcnKyU8cBAAAAQHpzu/0uVz311FMKCwvT9u3bNWnSJP3zzz96//33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",
112
- "text/plain": [
113
- "<Figure size 1000x700 with 1 Axes>"
114
- ]
115
- },
116
- "metadata": {},
117
- "output_type": "display_data"
118
- }
119
- ],
120
- "source": [
121
- "import seaborn as sns\n",
122
- "import matplotlib.pyplot as plt\n",
123
- "from sklearn.metrics import confusion_matrix\n",
124
- "import pandas as pd\n",
125
- "\n",
126
- "# Assuming df is your DataFrame\n",
127
- "\n",
128
- "# True labels and predictions\n",
129
- "y_true = filtered_df[\"type\"]\n",
130
- "y_pred = filtered_df[\"gpt_vote\"]\n",
131
- "\n",
132
- "# Compute the confusion matrix\n",
133
- "conf_matrix = confusion_matrix(y_true, y_pred, labels=[\"leftvote\", \"rightvote\", \"tievote\", \"bothbad_vote\"])\n",
134
- "\n",
135
- "# Create a pandas DataFrame from the confusion matrix\n",
136
- "conf_matrix_df = pd.DataFrame(conf_matrix, index=[\"leftvote\", \"rightvote\", \"tievote\", \"bothbad_vote\"], columns=[\"leftvote\", \"rightvote\", \"tievote\", \"bothbad_vote\"])\n",
137
- "\n",
138
- "# Plotting the heatmap\n",
139
- "plt.figure(figsize=(10, 7))\n",
140
- "sns.heatmap(conf_matrix_df, annot=True, fmt=\"d\", cmap=\"Blues\", cbar=False)\n",
141
- "plt.title(\"Arena Human vs GPT-4V Confusion Matrix\")\n",
142
- "plt.xlabel(\"GPT-4V Vote\")\n",
143
- "plt.ylabel(\"Arena Human Vote\")\n",
144
- "plt.show()\n"
145
- ]
146
- },
147
- {
148
- "cell_type": "code",
149
- "execution_count": 46,
150
- "metadata": {},
151
- "outputs": [
152
- {
153
- "name": "stdout",
154
- "output_type": "stream",
155
- "text": [
156
- "Accuracy: 0.5842911877394636\n",
157
- "F1 Score (Macro): 0.514392348541452\n",
158
- "F1 Score (Micro): 0.5842911877394636\n",
159
- "F1 Score (Weighted): 0.5536668839130223\n"
160
- ]
161
- }
162
- ],
163
- "source": [
164
- "from sklearn.metrics import accuracy_score, f1_score\n",
165
- "\n",
166
- "# Assuming df is your DataFrame and it contains 'type' as true labels and 'gpt_vote' as predictions\n",
167
- "y_true = filtered_df['type']\n",
168
- "y_pred = filtered_df['gpt_vote']\n",
169
- "\n",
170
- "# Calculate accuracy\n",
171
- "accuracy = accuracy_score(y_true, y_pred)\n",
172
- "print(f'Accuracy: {accuracy}')\n",
173
- "\n",
174
- "# Calculate F1 score, here using 'macro' average to treat all classes equally\n",
175
- "f1 = f1_score(y_true, y_pred, average='macro')\n",
176
- "print(f'F1 Score (Macro): {f1}')\n",
177
- "\n",
178
- "# If you want to calculate F1 score with other averages, for example 'micro' or 'weighted', you can do:\n",
179
- "f1_micro = f1_score(y_true, y_pred, average='micro')\n",
180
- "print(f'F1 Score (Micro): {f1_micro}')\n",
181
- "\n",
182
- "f1_weighted = f1_score(y_true, y_pred, average='weighted')\n",
183
- "print(f'F1 Score (Weighted): {f1_weighted}')"
184
- ]
185
- },
186
- {
187
- "cell_type": "code",
188
- "execution_count": null,
189
- "metadata": {},
190
- "outputs": [],
191
- "source": []
192
- },
193
- {
194
- "cell_type": "code",
195
- "execution_count": 47,
196
- "metadata": {},
197
- "outputs": [
198
- {
199
- "name": "stdout",
200
- "output_type": "stream",
201
- "text": [
202
- "Cohen's Kappa Score: 0.3442144615665177\n"
203
- ]
204
- }
205
- ],
206
- "source": [
207
- "from sklearn.metrics import cohen_kappa_score\n",
208
- "\n",
209
- "# Assuming df is your DataFrame and it contains 'type' as true labels and 'gpt_vote' as predictions\n",
210
- "y_true = filtered_df['type']\n",
211
- "y_pred = filtered_df['gpt_vote']\n",
212
- "\n",
213
- "# Calculate Cohen's Kappa score\n",
214
- "kappa = cohen_kappa_score(y_true, y_pred)\n",
215
- "print(f'Cohen\\'s Kappa Score: {kappa}')\n"
216
- ]
217
- },
218
- {
219
- "cell_type": "code",
220
- "execution_count": 48,
221
- "metadata": {},
222
- "outputs": [
223
- {
224
- "name": "stdout",
225
- "output_type": "stream",
226
- "text": [
227
- "Accuracy Score: 0.5842911877394636\n"
228
- ]
229
- }
230
- ],
231
- "source": [
232
- "from sklearn.metrics import accuracy_score\n",
233
- "accuracy = accuracy_score(y_true, y_pred)\n",
234
- "print(f'Accuracy Score: {accuracy}')\n"
235
- ]
236
- },
237
- {
238
- "cell_type": "code",
239
- "execution_count": 49,
240
- "metadata": {},
241
- "outputs": [
242
- {
243
- "name": "stdout",
244
- "output_type": "stream",
245
- "text": [
246
- "Pearson Correlation Coefficient: 0.2880096104357029\n"
247
- ]
248
- }
249
- ],
250
- "source": [
251
- "import pandas as pd\n",
252
- "\n",
253
- "# Assuming filtered_df is your DataFrame and it contains 'type' and 'gpt_vote' columns\n",
254
- "# Convert 'type' and 'gpt_vote' to categorical codes\n",
255
- "filtered_df['type_int'] = pd.factorize(filtered_df['type'])[0]\n",
256
- "filtered_df['gpt_vote_int'] = pd.factorize(filtered_df['gpt_vote'])[0]\n",
257
- "\n",
258
- "# Now you can calculate Pearson correlation between these new integer columns\n",
259
- "pearson_correlation = filtered_df['type_int'].corr(filtered_df['gpt_vote_int'])\n",
260
- "print(f'Pearson Correlation Coefficient: {pearson_correlation}')\n"
261
- ]
262
- },
263
- {
264
- "cell_type": "code",
265
- "execution_count": null,
266
- "metadata": {},
267
- "outputs": [],
268
- "source": []
269
- },
270
- {
271
- "cell_type": "code",
272
- "execution_count": null,
273
- "metadata": {},
274
- "outputs": [],
275
- "source": []
276
- },
277
- {
278
- "cell_type": "code",
279
- "execution_count": null,
280
- "metadata": {},
281
- "outputs": [],
282
- "source": []
283
- },
284
- {
285
- "cell_type": "code",
286
- "execution_count": null,
287
- "metadata": {},
288
- "outputs": [],
289
- "source": []
290
- },
291
- {
292
- "cell_type": "code",
293
- "execution_count": null,
294
- "metadata": {},
295
- "outputs": [],
296
- "source": []
297
- }
298
- ],
299
- "metadata": {
300
- "kernelspec": {
301
- "display_name": "otask",
302
- "language": "python",
303
- "name": "python3"
304
- },
305
- "language_info": {
306
- "codemirror_mode": {
307
- "name": "ipython",
308
- "version": 3
309
- },
310
- "file_extension": ".py",
311
- "mimetype": "text/x-python",
312
- "name": "python",
313
- "nbconvert_exporter": "python",
314
- "pygments_lexer": "ipython3",
315
- "version": "3.10.13"
316
- },
317
- "orig_nbformat": 4
318
- },
319
- "nbformat": 4,
320
- "nbformat_minor": 2
321
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/get_latest_data.sh DELETED
@@ -1,17 +0,0 @@
1
-
2
- # set LOGDIR to default if not set before
3
- if [ -z "$LOGDIR" ]; then
4
- export LOGDIR="./vision-arena-logs"
5
- fi
6
- mkdir -p results
7
-
8
-
9
- # # for battle data
10
- python -m elo_rating.clean_battle_data --model_infos_file "./model_infos.json" --mode conv_release
11
- battle_cutoff_date=`cat cut_off_date.txt` && rm cut_off_date.txt && echo "Battle data last updated on $battle_cutoff_date"
12
-
13
- mkdir -p ./results/latest
14
- mkdir -p ./results/$battle_cutoff_date && mv ./clean_battle_conv_$battle_cutoff_date.json ./results/$battle_cutoff_date/clean_battle_conv.json
15
- cp ./results/$battle_cutoff_date/clean_battle_conv.json ./results/latest/clean_battle_conv.json
16
-
17
- echo "Battle data last updated on $battle_cutoff_date" >> ./results/latest/latest_updated_date.txt
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/pyproject.toml DELETED
@@ -1,28 +0,0 @@
1
- [build-system]
2
- requires = ["setuptools>=61.0"]
3
- build-backend = "setuptools.build_meta"
4
-
5
- [project]
6
- name = "arena_elo"
7
- version = "0.2.35"
8
- description = "Elo rating system for WildVision Bench Arena"
9
- readme = "README.md"
10
- requires-python = ">=3.9"
11
- classifiers = [
12
- "Programming Language :: Python :: 3",
13
- "License :: OSI Approved :: Apache Software License",
14
- ]
15
- dependencies = [
16
- "numpy", "prompt_toolkit>=3.0.0", "uvicorn","polyglot", "pyicu", "pycld2", "morfessor", "scikit-learn",
17
- "pytz", "tqdm", "pandas", "plotly", "fire", "Pillow"
18
- ]
19
-
20
- [project.urls]
21
- "Homepage" = "https://github.com/WildVision-Bench/Arena-Elo"
22
- "Bug Tracker" = "https://github.com/WildVision-Bench/Arena-Elo/issues"
23
-
24
- [tool.setuptools.packages.find]
25
- exclude = ["assets*", "benchmark*", "docs", "dist*", "playground*", "scripts*", "tests*"]
26
-
27
- [tool.wheel]
28
- exclude = ["assets*", "benchmark*", "docs", "dist*", "playground*", "scripts*", "tests*"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/requirements.txt DELETED
@@ -1,28 +0,0 @@
1
- -e git+https://github.com/WildVision-Bench/Arena-Elo.git@9dc2fa8543a2e9eda3d5bc01c2212fdfcdd4bfb5#egg=arena_elo
2
- click==8.1.7
3
- fire==0.5.0
4
- h11==0.14.0
5
- joblib==1.3.2
6
- Morfessor==2.0.6
7
- numpy==1.26.4
8
- packaging==23.2
9
- pandas==2.2.0
10
- pillow==10.2.0
11
- plotly==5.18.0
12
- polyglot==16.7.4
13
- prompt-toolkit==3.0.43
14
- pycld2==0.41
15
- PyICU==2.12
16
- python-dateutil==2.8.2
17
- pytz==2024.1
18
- scikit-learn==1.4.0
19
- scipy==1.12.0
20
- six==1.16.0
21
- tenacity==8.2.3
22
- termcolor==2.4.0
23
- threadpoolctl==3.2.0
24
- tqdm==4.66.2
25
- typing_extensions==4.9.0
26
- tzdata==2024.1
27
- uvicorn==0.27.1
28
- wcwidth==0.2.13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/results/20240220/elo_results_image_editing.pkl DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:f41023a65a4dc1831a482dfa6098ccd528af9de297a1ea518881d49ce2885f0e
3
- size 57121
 
 
 
 
arena_elo/results/20240220/elo_results_t2i_generation.pkl DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:f383f3920ef3834f6e6ec213691a955992b4ce49ccaf7658c0b35ff72a2219d3
3
- size 54505
 
 
 
 
arena_elo/results/20240220/image_editing_leaderboard.csv DELETED
@@ -1,8 +0,0 @@
1
- key,Model,Arena Elo rating (anony),Arena Elo rating (full),License,Organization,Link
2
- Prompt2prompt,Prompt2prompt,1252.820838097007,1216.6489026518666,Apache-2.0,"Google, Tel Aviv University",https://prompt-to-prompt.github.io
3
- PNP,PNP,1175.6261555831445,1171.3279007979363,-,Weizmann Institute of Science,https://github.com/MichalGeyer/plug-and-play
4
- InstructPix2Pix,InstructPix2Pix,1155.8431458813104,1142.6827834982837,"Copyright 2023 Timothy Brooks, Aleksander Holynski, Alexei A. Efros","University of California, Berkeley",https://www.timothybrooks.com/instruct-pix2pix
5
- MagicBrush,MagicBrush,1051.428411953954,1089.4499296239383,CC-BY-4.0,"The Ohio State University, University of Waterloo",https://osu-nlp-group.github.io/MagicBrush
6
- Pix2PixZero,Pix2PixZero,955.5903260059122,929.2296611307636,MIT License,"Carnegie Mellon University, Adobe Research",https://pix2pixzero.github.io
7
- CycleDiffusion,CycleDiffusion,771.4360186105207,753.4930725653142,X11,Carnegie Mellon University,https://github.com/ChenWu98/cycle-diffusion
8
- SDEdit,SDEdit,637.2551038681513,697.1677497318974,MIT License,Stanford University,https://sde-image-editing.github.io
 
 
 
 
 
 
 
 
 
arena_elo/results/20240220/t2i_generation_leaderboard.csv DELETED
@@ -1,7 +0,0 @@
1
- key,Model,Arena Elo rating (anony),Arena Elo rating (full),License,Organization,Link
2
- PlayGroundV2,PlayGroundV2,1151.1834096302248,1150.901721636401,Playground v2 Community License,Playground,https://huggingface.co/playgroundai/playground-v2-1024px-aesthetic
3
- PixArtAlpha,PixArtAlpha,1078.3583466674136,1069.815012597113,openrail++,PixArt-alpha,https://huggingface.co/PixArt-alpha/PixArt-XL-2-1024-MS
4
- SDXL,SDXL,1027.258044463298,1035.47732509915,openrail++,Stability AI,https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0
5
- SDXLTurbo,SDXLTurbo,972.0904914158416,969.4933207298967,sai-nc-community (other),Stability AI,https://huggingface.co/stabilityai/sdxl-turbo
6
- OpenJourney,OpenJourney,921.3424873878607,906.3184453708288,creativeml-openrail-m,PromptHero,https://huggingface.co/prompthero/openjourney
7
- LCM,LCM,849.7672204353615,868.2154196730218,MIT License,Tsinghua University,https://huggingface.co/SimianLuo/LCM_Dreamshaper_v7
 
 
 
 
 
 
 
 
arena_elo/results/20240315/clean_battle_image_editing.json DELETED
@@ -1,794 +0,0 @@
1
- [
2
- {
3
- "model_a": "CycleDiffusion",
4
- "model_b": "InstructPix2Pix",
5
- "winner": "model_b",
6
- "judge": "arena_user_::1",
7
- "anony": true,
8
- "tstamp": 1707712630.872
9
- },
10
- {
11
- "model_a": "CycleDiffusion",
12
- "model_b": "InstructPix2Pix",
13
- "winner": "model_b",
14
- "judge": "arena_user_::1",
15
- "anony": false,
16
- "tstamp": 1707712699.668
17
- },
18
- {
19
- "model_a": "Pix2PixZero",
20
- "model_b": "MagicBrush",
21
- "winner": "model_a",
22
- "judge": "arena_user_::1",
23
- "anony": true,
24
- "tstamp": 1707712896.0427
25
- },
26
- {
27
- "model_a": "CycleDiffusion",
28
- "model_b": "InstructPix2Pix",
29
- "winner": "model_b",
30
- "judge": "arena_user_::1",
31
- "anony": false,
32
- "tstamp": 1707712929.7061
33
- },
34
- {
35
- "model_a": "CycleDiffusion",
36
- "model_b": "InstructPix2Pix",
37
- "winner": "model_b",
38
- "judge": "arena_user_::1",
39
- "anony": true,
40
- "tstamp": 1707713147.0445
41
- },
42
- {
43
- "model_a": "CycleDiffusion",
44
- "model_b": "PNP",
45
- "winner": "model_b",
46
- "judge": "arena_user_::1",
47
- "anony": true,
48
- "tstamp": 1707713198.9284
49
- },
50
- {
51
- "model_a": "CycleDiffusion",
52
- "model_b": "Prompt2prompt",
53
- "winner": "model_b",
54
- "judge": "arena_user_::1",
55
- "anony": true,
56
- "tstamp": 1707713210.1306
57
- },
58
- {
59
- "model_a": "Prompt2prompt",
60
- "model_b": "SDEdit",
61
- "winner": "model_a",
62
- "judge": "arena_user_::1",
63
- "anony": true,
64
- "tstamp": 1707713747.5115
65
- },
66
- {
67
- "model_a": "PNP",
68
- "model_b": "Pix2PixZero",
69
- "winner": "model_a",
70
- "judge": "arena_user_::1",
71
- "anony": true,
72
- "tstamp": 1707715613.7226
73
- },
74
- {
75
- "model_a": "CycleDiffusion",
76
- "model_b": "MagicBrush",
77
- "winner": "model_b",
78
- "judge": "arena_user_::1",
79
- "anony": true,
80
- "tstamp": 1707765708.2644
81
- },
82
- {
83
- "model_a": "PNP",
84
- "model_b": "CycleDiffusion",
85
- "winner": "model_a",
86
- "judge": "arena_user_::1",
87
- "anony": true,
88
- "tstamp": 1707765861.2742
89
- },
90
- {
91
- "model_a": "PNP",
92
- "model_b": "CycleDiffusion",
93
- "winner": "model_a",
94
- "judge": "arena_user_::1",
95
- "anony": false,
96
- "tstamp": 1707765975.0206
97
- },
98
- {
99
- "model_a": "PNP",
100
- "model_b": "CycleDiffusion",
101
- "winner": "model_a",
102
- "judge": "arena_user_::1",
103
- "anony": true,
104
- "tstamp": 1707768866.9065
105
- },
106
- {
107
- "model_a": "SDEdit",
108
- "model_b": "MagicBrush",
109
- "winner": "model_b",
110
- "judge": "arena_user_::1",
111
- "anony": true,
112
- "tstamp": 1707771673.2989
113
- },
114
- {
115
- "model_a": "SDEdit",
116
- "model_b": "MagicBrush",
117
- "winner": "model_b",
118
- "judge": "arena_user_::1",
119
- "anony": true,
120
- "tstamp": 1707784377.6617
121
- },
122
- {
123
- "model_a": "SDEdit",
124
- "model_b": "MagicBrush",
125
- "winner": "model_b",
126
- "judge": "arena_user_::1",
127
- "anony": true,
128
- "tstamp": 1707784466.8915
129
- },
130
- {
131
- "model_a": "CycleDiffusion",
132
- "model_b": "PNP",
133
- "winner": "model_b",
134
- "judge": "arena_user_::1",
135
- "anony": true,
136
- "tstamp": 1707784983.9581
137
- },
138
- {
139
- "model_a": "MagicBrush",
140
- "model_b": "SDEdit",
141
- "winner": "model_a",
142
- "judge": "arena_user_::1",
143
- "anony": true,
144
- "tstamp": 1707785277.16
145
- },
146
- {
147
- "model_a": "MagicBrush",
148
- "model_b": "SDEdit",
149
- "winner": "model_a",
150
- "judge": "arena_user_::1",
151
- "anony": true,
152
- "tstamp": 1707795299.0619
153
- },
154
- {
155
- "model_a": "MagicBrush",
156
- "model_b": "SDEdit",
157
- "winner": "tie (bothbad)",
158
- "judge": "arena_user_::1",
159
- "anony": true,
160
- "tstamp": 1707795798.752
161
- },
162
- {
163
- "model_a": "SDEdit",
164
- "model_b": "Prompt2prompt",
165
- "winner": "model_b",
166
- "judge": "arena_user_::1",
167
- "anony": false,
168
- "tstamp": 1707796435.7996
169
- },
170
- {
171
- "model_a": "SDEdit",
172
- "model_b": "CycleDiffusion",
173
- "winner": "model_b",
174
- "judge": "arena_user_::1",
175
- "anony": false,
176
- "tstamp": 1707797278.7369
177
- },
178
- {
179
- "model_a": "SDEdit",
180
- "model_b": "CycleDiffusion",
181
- "winner": "model_a",
182
- "judge": "arena_user_::1",
183
- "anony": false,
184
- "tstamp": 1707797279.6004
185
- },
186
- {
187
- "model_a": "SDEdit",
188
- "model_b": "Prompt2prompt",
189
- "winner": "model_b",
190
- "judge": "arena_user_::1",
191
- "anony": true,
192
- "tstamp": 1707805086.9739
193
- },
194
- {
195
- "model_a": "PNP",
196
- "model_b": "SDEdit",
197
- "winner": "model_a",
198
- "judge": "arena_user_::1",
199
- "anony": true,
200
- "tstamp": 1707805220.3253
201
- },
202
- {
203
- "model_a": "InstructPix2Pix",
204
- "model_b": "CycleDiffusion",
205
- "winner": "tie (bothbad)",
206
- "judge": "arena_user_::1",
207
- "anony": true,
208
- "tstamp": 1707805332.6322
209
- },
210
- {
211
- "model_a": "InstructPix2Pix",
212
- "model_b": "Prompt2prompt",
213
- "winner": "model_b",
214
- "judge": "arena_user_::1",
215
- "anony": true,
216
- "tstamp": 1707805476.0509
217
- },
218
- {
219
- "model_a": "InstructPix2Pix",
220
- "model_b": "Prompt2prompt",
221
- "winner": "model_b",
222
- "judge": "arena_user_::1",
223
- "anony": true,
224
- "tstamp": 1707818374.3438
225
- },
226
- {
227
- "model_a": "PNP",
228
- "model_b": "Prompt2prompt",
229
- "winner": "model_b",
230
- "judge": "arena_user_::1",
231
- "anony": true,
232
- "tstamp": 1707834631.9088
233
- },
234
- {
235
- "model_a": "InstructPix2Pix",
236
- "model_b": "SDEdit",
237
- "winner": "model_a",
238
- "judge": "arena_user_::1",
239
- "anony": true,
240
- "tstamp": 1707834954.0147
241
- },
242
- {
243
- "model_a": "Prompt2prompt",
244
- "model_b": "Pix2PixZero",
245
- "winner": "tie (bothbad)",
246
- "judge": "arena_user_::1",
247
- "anony": true,
248
- "tstamp": 1707835366.544
249
- },
250
- {
251
- "model_a": "PNP",
252
- "model_b": "SDEdit",
253
- "winner": "model_a",
254
- "judge": "arena_user_::1",
255
- "anony": true,
256
- "tstamp": 1707835643.6178
257
- },
258
- {
259
- "model_a": "MagicBrush",
260
- "model_b": "InstructPix2Pix",
261
- "winner": "tie (bothbad)",
262
- "judge": "arena_user_::1",
263
- "anony": true,
264
- "tstamp": 1707835789.25
265
- },
266
- {
267
- "model_a": "MagicBrush",
268
- "model_b": "PNP",
269
- "winner": "tie (bothbad)",
270
- "judge": "arena_user_::1",
271
- "anony": true,
272
- "tstamp": 1707836852.671
273
- },
274
- {
275
- "model_a": "MagicBrush",
276
- "model_b": "InstructPix2Pix",
277
- "winner": "model_a",
278
- "judge": "arena_user_::1",
279
- "anony": false,
280
- "tstamp": 1707836952.6082
281
- },
282
- {
283
- "model_a": "CycleDiffusion",
284
- "model_b": "SDEdit",
285
- "winner": "tie (bothbad)",
286
- "judge": "arena_user_::1",
287
- "anony": false,
288
- "tstamp": 1707837020.7148
289
- },
290
- {
291
- "model_a": "InstructPix2Pix",
292
- "model_b": "PNP",
293
- "winner": "model_a",
294
- "judge": "arena_user_::1",
295
- "anony": true,
296
- "tstamp": 1707837226.2259
297
- },
298
- {
299
- "model_a": "Prompt2prompt",
300
- "model_b": "Pix2PixZero",
301
- "winner": "model_a",
302
- "judge": "arena_user_::1",
303
- "anony": true,
304
- "tstamp": 1707838166.1449
305
- },
306
- {
307
- "model_a": "InstructPix2Pix",
308
- "model_b": "MagicBrush",
309
- "winner": "tie (bothbad)",
310
- "judge": "arena_user_::1",
311
- "anony": true,
312
- "tstamp": 1707838405.0013
313
- },
314
- {
315
- "model_a": "MagicBrush",
316
- "model_b": "CycleDiffusion",
317
- "winner": "model_a",
318
- "judge": "arena_user_::1",
319
- "anony": true,
320
- "tstamp": 1707839133.3126
321
- },
322
- {
323
- "model_a": "Prompt2prompt",
324
- "model_b": "InstructPix2Pix",
325
- "winner": "model_a",
326
- "judge": "arena_user_::1",
327
- "anony": true,
328
- "tstamp": 1707839484.6824
329
- },
330
- {
331
- "model_a": "PNP",
332
- "model_b": "InstructPix2Pix",
333
- "winner": "tie (bothbad)",
334
- "judge": "arena_user_::1",
335
- "anony": true,
336
- "tstamp": 1707850104.2499
337
- },
338
- {
339
- "model_a": "InstructPix2Pix",
340
- "model_b": "Pix2PixZero",
341
- "winner": "model_a",
342
- "judge": "arena_user_::1",
343
- "anony": true,
344
- "tstamp": 1707851384.7689
345
- },
346
- {
347
- "model_a": "PNP",
348
- "model_b": "MagicBrush",
349
- "winner": "model_b",
350
- "judge": "arena_user_::1",
351
- "anony": true,
352
- "tstamp": 1707851936.9466
353
- },
354
- {
355
- "model_a": "CycleDiffusion",
356
- "model_b": "MagicBrush",
357
- "winner": "tie (bothbad)",
358
- "judge": "arena_user_::1",
359
- "anony": true,
360
- "tstamp": 1707852836.3291
361
- },
362
- {
363
- "model_a": "CycleDiffusion",
364
- "model_b": "MagicBrush",
365
- "winner": "tie (bothbad)",
366
- "judge": "arena_user_::1",
367
- "anony": false,
368
- "tstamp": 1707852878.673
369
- },
370
- {
371
- "model_a": "Prompt2prompt",
372
- "model_b": "InstructPix2Pix",
373
- "winner": "model_a",
374
- "judge": "arena_user_::1",
375
- "anony": true,
376
- "tstamp": 1707853008.1359
377
- },
378
- {
379
- "model_a": "InstructPix2Pix",
380
- "model_b": "Pix2PixZero",
381
- "winner": "model_a",
382
- "judge": "arena_user_::1",
383
- "anony": false,
384
- "tstamp": 1707856807.6229
385
- },
386
- {
387
- "model_a": "MagicBrush",
388
- "model_b": "Pix2PixZero",
389
- "winner": "tie (bothbad)",
390
- "judge": "arena_user_::1",
391
- "anony": false,
392
- "tstamp": 1707863740.3507
393
- },
394
- {
395
- "model_a": "MagicBrush",
396
- "model_b": "PNP",
397
- "winner": "model_b",
398
- "judge": "arena_user_::1",
399
- "anony": true,
400
- "tstamp": 1707866312.1118
401
- },
402
- {
403
- "model_a": "Pix2PixZero",
404
- "model_b": "Prompt2prompt",
405
- "winner": "model_b",
406
- "judge": "arena_user_::1",
407
- "anony": true,
408
- "tstamp": 1707883083.3533
409
- },
410
- {
411
- "model_a": "Pix2PixZero",
412
- "model_b": "InstructPix2Pix",
413
- "winner": "model_b",
414
- "judge": "arena_user_::1",
415
- "anony": true,
416
- "tstamp": 1707883181.1397
417
- },
418
- {
419
- "model_a": "Pix2PixZero",
420
- "model_b": "Prompt2prompt",
421
- "winner": "model_b",
422
- "judge": "arena_user_::1",
423
- "anony": true,
424
- "tstamp": 1707883187.9173
425
- },
426
- {
427
- "model_a": "PNP",
428
- "model_b": "Prompt2prompt",
429
- "winner": "model_a",
430
- "judge": "arena_user_::1",
431
- "anony": true,
432
- "tstamp": 1707883507.587
433
- },
434
- {
435
- "model_a": "Prompt2prompt",
436
- "model_b": "CycleDiffusion",
437
- "winner": "model_a",
438
- "judge": "arena_user_::1",
439
- "anony": true,
440
- "tstamp": 1707883939.6125
441
- },
442
- {
443
- "model_a": "Prompt2prompt",
444
- "model_b": "MagicBrush",
445
- "winner": "model_b",
446
- "judge": "arena_user_::1",
447
- "anony": true,
448
- "tstamp": 1707892689.4407
449
- },
450
- {
451
- "model_a": "MagicBrush",
452
- "model_b": "InstructPix2Pix",
453
- "winner": "model_b",
454
- "judge": "arena_user_::1",
455
- "anony": true,
456
- "tstamp": 1707908988.749
457
- },
458
- {
459
- "model_a": "Prompt2prompt",
460
- "model_b": "InstructPix2Pix",
461
- "winner": "model_a",
462
- "judge": "arena_user_::1",
463
- "anony": true,
464
- "tstamp": 1707912639.2701
465
- },
466
- {
467
- "model_a": "MagicBrush",
468
- "model_b": "Pix2PixZero",
469
- "winner": "model_a",
470
- "judge": "arena_user_::1",
471
- "anony": false,
472
- "tstamp": 1707917685.9574
473
- },
474
- {
475
- "model_a": "MagicBrush",
476
- "model_b": "InstructPix2Pix",
477
- "winner": "tie (bothbad)",
478
- "judge": "arena_user_::1",
479
- "anony": false,
480
- "tstamp": 1707919429.336
481
- },
482
- {
483
- "model_a": "InstructPix2Pix",
484
- "model_b": "CycleDiffusion",
485
- "winner": "model_a",
486
- "judge": "arena_user_::1",
487
- "anony": true,
488
- "tstamp": 1707932651.9192
489
- },
490
- {
491
- "model_a": "MagicBrush",
492
- "model_b": "InstructPix2Pix",
493
- "winner": "model_a",
494
- "judge": "arena_user_::1",
495
- "anony": true,
496
- "tstamp": 1707932749.3107
497
- },
498
- {
499
- "model_a": "Prompt2prompt",
500
- "model_b": "PNP",
501
- "winner": "model_a",
502
- "judge": "arena_user_::1",
503
- "anony": true,
504
- "tstamp": 1707933208.5797
505
- },
506
- {
507
- "model_a": "MagicBrush",
508
- "model_b": "Pix2PixZero",
509
- "winner": "model_a",
510
- "judge": "arena_user_::1",
511
- "anony": false,
512
- "tstamp": 1707945335.6341
513
- },
514
- {
515
- "model_a": "MagicBrush",
516
- "model_b": "PNP",
517
- "winner": "model_a",
518
- "judge": "arena_user_::1",
519
- "anony": false,
520
- "tstamp": 1708031168.6838
521
- },
522
- {
523
- "model_a": "Pix2PixZero",
524
- "model_b": "PNP",
525
- "winner": "model_b",
526
- "judge": "arena_user_::1",
527
- "anony": false,
528
- "tstamp": 1708038931.5388
529
- },
530
- {
531
- "model_a": "Pix2PixZero",
532
- "model_b": "CycleDiffusion",
533
- "winner": "tie (bothbad)",
534
- "judge": "arena_user_::1",
535
- "anony": true,
536
- "tstamp": 1708057382.78
537
- },
538
- {
539
- "model_a": "PNP",
540
- "model_b": "InstructPix2Pix",
541
- "winner": "model_b",
542
- "judge": "arena_user_::1",
543
- "anony": true,
544
- "tstamp": 1708093689.8237
545
- },
546
- {
547
- "model_a": "MagicBrush",
548
- "model_b": "PNP",
549
- "winner": "model_b",
550
- "judge": "arena_user_::1",
551
- "anony": true,
552
- "tstamp": 1708093910.4683
553
- },
554
- {
555
- "model_a": "Pix2PixZero",
556
- "model_b": "Prompt2prompt",
557
- "winner": "model_b",
558
- "judge": "arena_user_::1",
559
- "anony": false,
560
- "tstamp": 1708095090.8232
561
- },
562
- {
563
- "model_a": "Pix2PixZero",
564
- "model_b": "Prompt2prompt",
565
- "winner": "model_a",
566
- "judge": "arena_user_::1",
567
- "anony": false,
568
- "tstamp": 1708095305.4665
569
- },
570
- {
571
- "model_a": "InstructPix2Pix",
572
- "model_b": "Prompt2prompt",
573
- "winner": "model_b",
574
- "judge": "arena_user_::1",
575
- "anony": true,
576
- "tstamp": 1708140553.1694
577
- },
578
- {
579
- "model_a": "MagicBrush",
580
- "model_b": "Prompt2prompt",
581
- "winner": "model_a",
582
- "judge": "arena_user_::1",
583
- "anony": true,
584
- "tstamp": 1708145512.3656
585
- },
586
- {
587
- "model_a": "Pix2PixZero",
588
- "model_b": "Prompt2prompt",
589
- "winner": "tie (bothbad)",
590
- "judge": "arena_user_::1",
591
- "anony": true,
592
- "tstamp": 1708145724.4127
593
- },
594
- {
595
- "model_a": "Pix2PixZero",
596
- "model_b": "PNP",
597
- "winner": "model_b",
598
- "judge": "arena_user_::1",
599
- "anony": true,
600
- "tstamp": 1708146846.5098
601
- },
602
- {
603
- "model_a": "PNP",
604
- "model_b": "MagicBrush",
605
- "winner": "model_a",
606
- "judge": "arena_user_::1",
607
- "anony": true,
608
- "tstamp": 1708189738.4864
609
- },
610
- {
611
- "model_a": "Prompt2prompt",
612
- "model_b": "InstructPix2Pix",
613
- "winner": "model_b",
614
- "judge": "arena_user_::1",
615
- "anony": true,
616
- "tstamp": 1708235874.9246
617
- },
618
- {
619
- "model_a": "Pix2PixZero",
620
- "model_b": "PNP",
621
- "winner": "model_b",
622
- "judge": "arena_user_::1",
623
- "anony": false,
624
- "tstamp": 1708257619.7115
625
- },
626
- {
627
- "model_a": "MagicBrush",
628
- "model_b": "Pix2PixZero",
629
- "winner": "tie (bothbad)",
630
- "judge": "arena_user_::1",
631
- "anony": true,
632
- "tstamp": 1708341265.7655
633
- },
634
- {
635
- "model_a": "MagicBrush",
636
- "model_b": "InstructPix2Pix",
637
- "winner": "model_b",
638
- "judge": "arena_user_::1",
639
- "anony": true,
640
- "tstamp": 1708350183.3086
641
- },
642
- {
643
- "model_a": "MagicBrush",
644
- "model_b": "Pix2PixZero",
645
- "winner": "tie (bothbad)",
646
- "judge": "arena_user_::1",
647
- "anony": true,
648
- "tstamp": 1708399707.1681
649
- },
650
- {
651
- "model_a": "PNP",
652
- "model_b": "MagicBrush",
653
- "winner": "model_a",
654
- "judge": "arena_user_::1",
655
- "anony": true,
656
- "tstamp": 1708441502.4707
657
- },
658
- {
659
- "model_a": "InstructPix2Pix",
660
- "model_b": "MagicBrush",
661
- "winner": "model_a",
662
- "judge": "arena_user_::1",
663
- "anony": true,
664
- "tstamp": 1708441716.8195
665
- },
666
- {
667
- "model_a": "InstructPix2Pix",
668
- "model_b": "MagicBrush",
669
- "winner": "model_b",
670
- "judge": "arena_user_::1",
671
- "anony": false,
672
- "tstamp": 1708546759.2009
673
- },
674
- {
675
- "model_a": "InstructPix2Pix",
676
- "model_b": "MagicBrush",
677
- "winner": "model_a",
678
- "judge": "arena_user_::1",
679
- "anony": false,
680
- "tstamp": 1708546805.4892
681
- },
682
- {
683
- "model_a": "Pix2PixZero",
684
- "model_b": "CycleDiffusion",
685
- "winner": "tie (bothbad)",
686
- "judge": "arena_user_::1",
687
- "anony": true,
688
- "tstamp": 1708547082.7124
689
- },
690
- {
691
- "model_a": "InstructPix2Pix",
692
- "model_b": "MagicBrush",
693
- "winner": "model_b",
694
- "judge": "arena_user_::1",
695
- "anony": false,
696
- "tstamp": 1708547166.9685
697
- },
698
- {
699
- "model_a": "InstructPix2Pix",
700
- "model_b": "MagicBrush",
701
- "winner": "model_b",
702
- "judge": "arena_user_::1",
703
- "anony": false,
704
- "tstamp": 1708547293.7107
705
- },
706
- {
707
- "model_a": "CycleDiffusion",
708
- "model_b": "PNP",
709
- "winner": "tie (bothbad)",
710
- "judge": "arena_user_::1",
711
- "anony": true,
712
- "tstamp": 1708575046.0529
713
- },
714
- {
715
- "model_a": "CycleDiffusion",
716
- "model_b": "MagicBrush",
717
- "winner": "tie (bothbad)",
718
- "judge": "arena_user_::1",
719
- "anony": true,
720
- "tstamp": 1708615466.9264
721
- },
722
- {
723
- "model_a": "CycleDiffusion",
724
- "model_b": "MagicBrush",
725
- "winner": "model_b",
726
- "judge": "arena_user_::1",
727
- "anony": false,
728
- "tstamp": 1708615516.3341
729
- },
730
- {
731
- "model_a": "InstructPix2Pix",
732
- "model_b": "PNP",
733
- "winner": "model_b",
734
- "judge": "arena_user_::1",
735
- "anony": false,
736
- "tstamp": 1709205399.0098
737
- },
738
- {
739
- "model_a": "InstructPix2Pix",
740
- "model_b": "PNP",
741
- "winner": "model_b",
742
- "judge": "arena_user_::1",
743
- "anony": false,
744
- "tstamp": 1709205767.8923
745
- },
746
- {
747
- "model_a": "PNP",
748
- "model_b": "InstructPix2Pix",
749
- "winner": "model_b",
750
- "judge": "arena_user_::1",
751
- "anony": true,
752
- "tstamp": 1709443700.05
753
- },
754
- {
755
- "model_a": "MagicBrush",
756
- "model_b": "Pix2PixZero",
757
- "winner": "model_a",
758
- "judge": "arena_user_::1",
759
- "anony": true,
760
- "tstamp": 1709702898.9291
761
- },
762
- {
763
- "model_a": "CycleDiffusion",
764
- "model_b": "Prompt2prompt",
765
- "winner": "tie (bothbad)",
766
- "judge": "arena_user_::1",
767
- "anony": true,
768
- "tstamp": 1710091925.1861
769
- },
770
- {
771
- "model_a": "MagicBrush",
772
- "model_b": "InstructPix2Pix",
773
- "winner": "tie (bothbad)",
774
- "judge": "arena_user_::1",
775
- "anony": true,
776
- "tstamp": 1710517781.1525
777
- },
778
- {
779
- "model_a": "MagicBrush",
780
- "model_b": "InstructPix2Pix",
781
- "winner": "tie (bothbad)",
782
- "judge": "arena_user_::1",
783
- "anony": false,
784
- "tstamp": 1710517859.2942
785
- },
786
- {
787
- "model_a": "Pix2PixZero",
788
- "model_b": "CycleDiffusion",
789
- "winner": "tie (bothbad)",
790
- "judge": "arena_user_::1",
791
- "anony": true,
792
- "tstamp": 1710535672.9791
793
- }
794
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/results/20240315/elo_results_image_editing.pkl DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:5cef00c45d392a30913b367825270fcee5fd29e5c830866eef3d07146b3502f3
3
- size 57091
 
 
 
 
arena_elo/results/20240315/image_editing_leaderboard.csv DELETED
@@ -1,8 +0,0 @@
1
- key,Model,Arena Elo rating (anony),Arena Elo rating (full),License,Organization,Link
2
- Prompt2prompt,Prompt2prompt,1227.5508595026165,1182.7966878908553,Apache-2.0,"Google, Tel Aviv University",https://prompt-to-prompt.github.io
3
- InstructPix2Pix,InstructPix2Pix,1160.2057367236093,1104.6020920372373,"Copyright 2023 Timothy Brooks, Aleksander Holynski, Alexei A. Efros","University of California, Berkeley",https://www.timothybrooks.com/instruct-pix2pix
4
- PNP,PNP,1142.693603173293,1163.4165011464634,-,Weizmann Institute of Science,https://github.com/MichalGeyer/plug-and-play
5
- MagicBrush,MagicBrush,1053.1728944865915,1104.2259166081321,CC-BY-4.0,"The Ohio State University, University of Waterloo",https://osu-nlp-group.github.io/MagicBrush
6
- Pix2PixZero,Pix2PixZero,918.6047552604578,899.6573774461386,MIT License,"Carnegie Mellon University, Adobe Research",https://pix2pixzero.github.io
7
- CycleDiffusion,CycleDiffusion,865.0529105743963,820.8487760803515,X11,Carnegie Mellon University,https://github.com/ChenWu98/cycle-diffusion
8
- SDEdit,SDEdit,632.7192402790356,724.4526487908217,MIT License,Stanford University,https://sde-image-editing.github.io
 
 
 
 
 
 
 
 
 
arena_elo/results/20240327/clean_battle_t2i_generation.json DELETED
The diff for this file is too large to render. See raw diff
 
arena_elo/results/20240327/elo_results_t2i_generation.pkl DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:f525abe69feb822d341929b27ef7660ddd5e6ff0491bed8383a8e3d19f0342bd
3
- size 62414
 
 
 
 
arena_elo/results/20240327/t2i_generation_leaderboard.csv DELETED
@@ -1,10 +0,0 @@
1
- key,Model,Arena Elo rating (anony),Arena Elo rating (full),License,Organization,Link
2
- Playground v2.5,Playground v2.5,1226.2872445351936,1246.1685934024742,Playground v2.5 Community License,Playground,https://huggingface.co/playgroundai/playground-v2.5-1024px-aesthetic
3
- StableCascade,StableCascade,1105.3322734027522,1087.9198960927265,stable-cascade-nc-community (other),Stability AI,https://huggingface.co/stabilityai/stable-cascade
4
- Playground v2,Playground v2,1091.4371447234744,1090.676108819673,Playground v2 Community License,Playground,https://huggingface.co/playgroundai/playground-v2-1024px-aesthetic
5
- SDXLLightning,SDXLLightning,1043.235902888147,1045.0529259890538,openrail++,ByteDance,https://huggingface.co/ByteDance/SDXL-Lightning
6
- PixArtAlpha,PixArtAlpha,1020.6412075829058,1006.9966036187151,openrail++,PixArt-alpha,https://huggingface.co/PixArt-alpha/PixArt-XL-2-1024-MS
7
- SDXL,SDXL,964.7626495363717,969.5241392802999,openrail++,Stability AI,https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0
8
- SDXLTurbo,SDXLTurbo,912.2113859675355,914.3805456579931,sai-nc-community (other),Stability AI,https://huggingface.co/stabilityai/sdxl-turbo
9
- OpenJourney,OpenJourney,841.2224045541894,832.2282703082603,creativeml-openrail-m,PromptHero,https://huggingface.co/prompthero/openjourney
10
- LCM,LCM,794.8697868094328,810.2118373597045,MIT License,Tsinghua University,https://huggingface.co/SimianLuo/LCM_Dreamshaper_v7
 
 
 
 
 
 
 
 
 
 
 
arena_elo/results/20240328/clean_battle_image_editing.json DELETED
@@ -1,890 +0,0 @@
1
- [
2
- {
3
- "model_a": "CycleDiffusion",
4
- "model_b": "InstructPix2Pix",
5
- "winner": "model_b",
6
- "judge": "arena_user_::1",
7
- "anony": true,
8
- "tstamp": 1707712630.872
9
- },
10
- {
11
- "model_a": "CycleDiffusion",
12
- "model_b": "InstructPix2Pix",
13
- "winner": "model_b",
14
- "judge": "arena_user_::1",
15
- "anony": false,
16
- "tstamp": 1707712699.668
17
- },
18
- {
19
- "model_a": "Pix2PixZero",
20
- "model_b": "MagicBrush",
21
- "winner": "model_a",
22
- "judge": "arena_user_::1",
23
- "anony": true,
24
- "tstamp": 1707712896.0427
25
- },
26
- {
27
- "model_a": "CycleDiffusion",
28
- "model_b": "InstructPix2Pix",
29
- "winner": "model_b",
30
- "judge": "arena_user_::1",
31
- "anony": false,
32
- "tstamp": 1707712929.7061
33
- },
34
- {
35
- "model_a": "CycleDiffusion",
36
- "model_b": "InstructPix2Pix",
37
- "winner": "model_b",
38
- "judge": "arena_user_::1",
39
- "anony": true,
40
- "tstamp": 1707713147.0445
41
- },
42
- {
43
- "model_a": "CycleDiffusion",
44
- "model_b": "PNP",
45
- "winner": "model_b",
46
- "judge": "arena_user_::1",
47
- "anony": true,
48
- "tstamp": 1707713198.9284
49
- },
50
- {
51
- "model_a": "CycleDiffusion",
52
- "model_b": "Prompt2prompt",
53
- "winner": "model_b",
54
- "judge": "arena_user_::1",
55
- "anony": true,
56
- "tstamp": 1707713210.1306
57
- },
58
- {
59
- "model_a": "Prompt2prompt",
60
- "model_b": "SDEdit",
61
- "winner": "model_a",
62
- "judge": "arena_user_::1",
63
- "anony": true,
64
- "tstamp": 1707713747.5115
65
- },
66
- {
67
- "model_a": "PNP",
68
- "model_b": "Pix2PixZero",
69
- "winner": "model_a",
70
- "judge": "arena_user_::1",
71
- "anony": true,
72
- "tstamp": 1707715613.7226
73
- },
74
- {
75
- "model_a": "CycleDiffusion",
76
- "model_b": "MagicBrush",
77
- "winner": "model_b",
78
- "judge": "arena_user_::1",
79
- "anony": true,
80
- "tstamp": 1707765708.2644
81
- },
82
- {
83
- "model_a": "PNP",
84
- "model_b": "CycleDiffusion",
85
- "winner": "model_a",
86
- "judge": "arena_user_::1",
87
- "anony": true,
88
- "tstamp": 1707765861.2742
89
- },
90
- {
91
- "model_a": "PNP",
92
- "model_b": "CycleDiffusion",
93
- "winner": "model_a",
94
- "judge": "arena_user_::1",
95
- "anony": false,
96
- "tstamp": 1707765975.0206
97
- },
98
- {
99
- "model_a": "PNP",
100
- "model_b": "CycleDiffusion",
101
- "winner": "model_a",
102
- "judge": "arena_user_::1",
103
- "anony": true,
104
- "tstamp": 1707768866.9065
105
- },
106
- {
107
- "model_a": "SDEdit",
108
- "model_b": "MagicBrush",
109
- "winner": "model_b",
110
- "judge": "arena_user_::1",
111
- "anony": true,
112
- "tstamp": 1707771673.2989
113
- },
114
- {
115
- "model_a": "SDEdit",
116
- "model_b": "MagicBrush",
117
- "winner": "model_b",
118
- "judge": "arena_user_::1",
119
- "anony": true,
120
- "tstamp": 1707784377.6617
121
- },
122
- {
123
- "model_a": "SDEdit",
124
- "model_b": "MagicBrush",
125
- "winner": "model_b",
126
- "judge": "arena_user_::1",
127
- "anony": true,
128
- "tstamp": 1707784466.8915
129
- },
130
- {
131
- "model_a": "CycleDiffusion",
132
- "model_b": "PNP",
133
- "winner": "model_b",
134
- "judge": "arena_user_::1",
135
- "anony": true,
136
- "tstamp": 1707784983.9581
137
- },
138
- {
139
- "model_a": "MagicBrush",
140
- "model_b": "SDEdit",
141
- "winner": "model_a",
142
- "judge": "arena_user_::1",
143
- "anony": true,
144
- "tstamp": 1707785277.16
145
- },
146
- {
147
- "model_a": "MagicBrush",
148
- "model_b": "SDEdit",
149
- "winner": "model_a",
150
- "judge": "arena_user_::1",
151
- "anony": true,
152
- "tstamp": 1707795299.0619
153
- },
154
- {
155
- "model_a": "MagicBrush",
156
- "model_b": "SDEdit",
157
- "winner": "tie (bothbad)",
158
- "judge": "arena_user_::1",
159
- "anony": true,
160
- "tstamp": 1707795798.752
161
- },
162
- {
163
- "model_a": "SDEdit",
164
- "model_b": "Prompt2prompt",
165
- "winner": "model_b",
166
- "judge": "arena_user_::1",
167
- "anony": false,
168
- "tstamp": 1707796435.7996
169
- },
170
- {
171
- "model_a": "SDEdit",
172
- "model_b": "CycleDiffusion",
173
- "winner": "model_b",
174
- "judge": "arena_user_::1",
175
- "anony": false,
176
- "tstamp": 1707797278.7369
177
- },
178
- {
179
- "model_a": "SDEdit",
180
- "model_b": "CycleDiffusion",
181
- "winner": "model_a",
182
- "judge": "arena_user_::1",
183
- "anony": false,
184
- "tstamp": 1707797279.6004
185
- },
186
- {
187
- "model_a": "SDEdit",
188
- "model_b": "Prompt2prompt",
189
- "winner": "model_b",
190
- "judge": "arena_user_::1",
191
- "anony": true,
192
- "tstamp": 1707805086.9739
193
- },
194
- {
195
- "model_a": "PNP",
196
- "model_b": "SDEdit",
197
- "winner": "model_a",
198
- "judge": "arena_user_::1",
199
- "anony": true,
200
- "tstamp": 1707805220.3253
201
- },
202
- {
203
- "model_a": "InstructPix2Pix",
204
- "model_b": "CycleDiffusion",
205
- "winner": "tie (bothbad)",
206
- "judge": "arena_user_::1",
207
- "anony": true,
208
- "tstamp": 1707805332.6322
209
- },
210
- {
211
- "model_a": "InstructPix2Pix",
212
- "model_b": "Prompt2prompt",
213
- "winner": "model_b",
214
- "judge": "arena_user_::1",
215
- "anony": true,
216
- "tstamp": 1707805476.0509
217
- },
218
- {
219
- "model_a": "InstructPix2Pix",
220
- "model_b": "Prompt2prompt",
221
- "winner": "model_b",
222
- "judge": "arena_user_::1",
223
- "anony": true,
224
- "tstamp": 1707818374.3438
225
- },
226
- {
227
- "model_a": "PNP",
228
- "model_b": "Prompt2prompt",
229
- "winner": "model_b",
230
- "judge": "arena_user_::1",
231
- "anony": true,
232
- "tstamp": 1707834631.9088
233
- },
234
- {
235
- "model_a": "InstructPix2Pix",
236
- "model_b": "SDEdit",
237
- "winner": "model_a",
238
- "judge": "arena_user_::1",
239
- "anony": true,
240
- "tstamp": 1707834954.0147
241
- },
242
- {
243
- "model_a": "Prompt2prompt",
244
- "model_b": "Pix2PixZero",
245
- "winner": "tie (bothbad)",
246
- "judge": "arena_user_::1",
247
- "anony": true,
248
- "tstamp": 1707835366.544
249
- },
250
- {
251
- "model_a": "PNP",
252
- "model_b": "SDEdit",
253
- "winner": "model_a",
254
- "judge": "arena_user_::1",
255
- "anony": true,
256
- "tstamp": 1707835643.6178
257
- },
258
- {
259
- "model_a": "MagicBrush",
260
- "model_b": "InstructPix2Pix",
261
- "winner": "tie (bothbad)",
262
- "judge": "arena_user_::1",
263
- "anony": true,
264
- "tstamp": 1707835789.25
265
- },
266
- {
267
- "model_a": "MagicBrush",
268
- "model_b": "PNP",
269
- "winner": "tie (bothbad)",
270
- "judge": "arena_user_::1",
271
- "anony": true,
272
- "tstamp": 1707836852.671
273
- },
274
- {
275
- "model_a": "MagicBrush",
276
- "model_b": "InstructPix2Pix",
277
- "winner": "model_a",
278
- "judge": "arena_user_::1",
279
- "anony": false,
280
- "tstamp": 1707836952.6082
281
- },
282
- {
283
- "model_a": "CycleDiffusion",
284
- "model_b": "SDEdit",
285
- "winner": "tie (bothbad)",
286
- "judge": "arena_user_::1",
287
- "anony": false,
288
- "tstamp": 1707837020.7148
289
- },
290
- {
291
- "model_a": "InstructPix2Pix",
292
- "model_b": "PNP",
293
- "winner": "model_a",
294
- "judge": "arena_user_::1",
295
- "anony": true,
296
- "tstamp": 1707837226.2259
297
- },
298
- {
299
- "model_a": "Prompt2prompt",
300
- "model_b": "Pix2PixZero",
301
- "winner": "model_a",
302
- "judge": "arena_user_::1",
303
- "anony": true,
304
- "tstamp": 1707838166.1449
305
- },
306
- {
307
- "model_a": "InstructPix2Pix",
308
- "model_b": "MagicBrush",
309
- "winner": "tie (bothbad)",
310
- "judge": "arena_user_::1",
311
- "anony": true,
312
- "tstamp": 1707838405.0013
313
- },
314
- {
315
- "model_a": "MagicBrush",
316
- "model_b": "CycleDiffusion",
317
- "winner": "model_a",
318
- "judge": "arena_user_::1",
319
- "anony": true,
320
- "tstamp": 1707839133.3126
321
- },
322
- {
323
- "model_a": "Prompt2prompt",
324
- "model_b": "InstructPix2Pix",
325
- "winner": "model_a",
326
- "judge": "arena_user_::1",
327
- "anony": true,
328
- "tstamp": 1707839484.6824
329
- },
330
- {
331
- "model_a": "PNP",
332
- "model_b": "InstructPix2Pix",
333
- "winner": "tie (bothbad)",
334
- "judge": "arena_user_::1",
335
- "anony": true,
336
- "tstamp": 1707850104.2499
337
- },
338
- {
339
- "model_a": "InstructPix2Pix",
340
- "model_b": "Pix2PixZero",
341
- "winner": "model_a",
342
- "judge": "arena_user_::1",
343
- "anony": true,
344
- "tstamp": 1707851384.7689
345
- },
346
- {
347
- "model_a": "PNP",
348
- "model_b": "MagicBrush",
349
- "winner": "model_b",
350
- "judge": "arena_user_::1",
351
- "anony": true,
352
- "tstamp": 1707851936.9466
353
- },
354
- {
355
- "model_a": "CycleDiffusion",
356
- "model_b": "MagicBrush",
357
- "winner": "tie (bothbad)",
358
- "judge": "arena_user_::1",
359
- "anony": true,
360
- "tstamp": 1707852836.3291
361
- },
362
- {
363
- "model_a": "CycleDiffusion",
364
- "model_b": "MagicBrush",
365
- "winner": "tie (bothbad)",
366
- "judge": "arena_user_::1",
367
- "anony": false,
368
- "tstamp": 1707852878.673
369
- },
370
- {
371
- "model_a": "Prompt2prompt",
372
- "model_b": "InstructPix2Pix",
373
- "winner": "model_a",
374
- "judge": "arena_user_::1",
375
- "anony": true,
376
- "tstamp": 1707853008.1359
377
- },
378
- {
379
- "model_a": "InstructPix2Pix",
380
- "model_b": "Pix2PixZero",
381
- "winner": "model_a",
382
- "judge": "arena_user_::1",
383
- "anony": false,
384
- "tstamp": 1707856807.6229
385
- },
386
- {
387
- "model_a": "MagicBrush",
388
- "model_b": "Pix2PixZero",
389
- "winner": "tie (bothbad)",
390
- "judge": "arena_user_::1",
391
- "anony": false,
392
- "tstamp": 1707863740.3507
393
- },
394
- {
395
- "model_a": "MagicBrush",
396
- "model_b": "PNP",
397
- "winner": "model_b",
398
- "judge": "arena_user_::1",
399
- "anony": true,
400
- "tstamp": 1707866312.1118
401
- },
402
- {
403
- "model_a": "Pix2PixZero",
404
- "model_b": "Prompt2prompt",
405
- "winner": "model_b",
406
- "judge": "arena_user_::1",
407
- "anony": true,
408
- "tstamp": 1707883083.3533
409
- },
410
- {
411
- "model_a": "Pix2PixZero",
412
- "model_b": "InstructPix2Pix",
413
- "winner": "model_b",
414
- "judge": "arena_user_::1",
415
- "anony": true,
416
- "tstamp": 1707883181.1397
417
- },
418
- {
419
- "model_a": "Pix2PixZero",
420
- "model_b": "Prompt2prompt",
421
- "winner": "model_b",
422
- "judge": "arena_user_::1",
423
- "anony": true,
424
- "tstamp": 1707883187.9173
425
- },
426
- {
427
- "model_a": "PNP",
428
- "model_b": "Prompt2prompt",
429
- "winner": "model_a",
430
- "judge": "arena_user_::1",
431
- "anony": true,
432
- "tstamp": 1707883507.587
433
- },
434
- {
435
- "model_a": "Prompt2prompt",
436
- "model_b": "CycleDiffusion",
437
- "winner": "model_a",
438
- "judge": "arena_user_::1",
439
- "anony": true,
440
- "tstamp": 1707883939.6125
441
- },
442
- {
443
- "model_a": "Prompt2prompt",
444
- "model_b": "MagicBrush",
445
- "winner": "model_b",
446
- "judge": "arena_user_::1",
447
- "anony": true,
448
- "tstamp": 1707892689.4407
449
- },
450
- {
451
- "model_a": "MagicBrush",
452
- "model_b": "InstructPix2Pix",
453
- "winner": "model_b",
454
- "judge": "arena_user_::1",
455
- "anony": true,
456
- "tstamp": 1707908988.749
457
- },
458
- {
459
- "model_a": "Prompt2prompt",
460
- "model_b": "InstructPix2Pix",
461
- "winner": "model_a",
462
- "judge": "arena_user_::1",
463
- "anony": true,
464
- "tstamp": 1707912639.2701
465
- },
466
- {
467
- "model_a": "MagicBrush",
468
- "model_b": "Pix2PixZero",
469
- "winner": "model_a",
470
- "judge": "arena_user_::1",
471
- "anony": false,
472
- "tstamp": 1707917685.9574
473
- },
474
- {
475
- "model_a": "MagicBrush",
476
- "model_b": "InstructPix2Pix",
477
- "winner": "tie (bothbad)",
478
- "judge": "arena_user_::1",
479
- "anony": false,
480
- "tstamp": 1707919429.336
481
- },
482
- {
483
- "model_a": "InstructPix2Pix",
484
- "model_b": "CycleDiffusion",
485
- "winner": "model_a",
486
- "judge": "arena_user_::1",
487
- "anony": true,
488
- "tstamp": 1707932651.9192
489
- },
490
- {
491
- "model_a": "MagicBrush",
492
- "model_b": "InstructPix2Pix",
493
- "winner": "model_a",
494
- "judge": "arena_user_::1",
495
- "anony": true,
496
- "tstamp": 1707932749.3107
497
- },
498
- {
499
- "model_a": "Prompt2prompt",
500
- "model_b": "PNP",
501
- "winner": "model_a",
502
- "judge": "arena_user_::1",
503
- "anony": true,
504
- "tstamp": 1707933208.5797
505
- },
506
- {
507
- "model_a": "MagicBrush",
508
- "model_b": "Pix2PixZero",
509
- "winner": "model_a",
510
- "judge": "arena_user_::1",
511
- "anony": false,
512
- "tstamp": 1707945335.6341
513
- },
514
- {
515
- "model_a": "MagicBrush",
516
- "model_b": "PNP",
517
- "winner": "model_a",
518
- "judge": "arena_user_::1",
519
- "anony": false,
520
- "tstamp": 1708031168.6838
521
- },
522
- {
523
- "model_a": "Pix2PixZero",
524
- "model_b": "PNP",
525
- "winner": "model_b",
526
- "judge": "arena_user_::1",
527
- "anony": false,
528
- "tstamp": 1708038931.5388
529
- },
530
- {
531
- "model_a": "Pix2PixZero",
532
- "model_b": "CycleDiffusion",
533
- "winner": "tie (bothbad)",
534
- "judge": "arena_user_::1",
535
- "anony": true,
536
- "tstamp": 1708057382.78
537
- },
538
- {
539
- "model_a": "PNP",
540
- "model_b": "InstructPix2Pix",
541
- "winner": "model_b",
542
- "judge": "arena_user_::1",
543
- "anony": true,
544
- "tstamp": 1708093689.8237
545
- },
546
- {
547
- "model_a": "MagicBrush",
548
- "model_b": "PNP",
549
- "winner": "model_b",
550
- "judge": "arena_user_::1",
551
- "anony": true,
552
- "tstamp": 1708093910.4683
553
- },
554
- {
555
- "model_a": "Pix2PixZero",
556
- "model_b": "Prompt2prompt",
557
- "winner": "model_b",
558
- "judge": "arena_user_::1",
559
- "anony": false,
560
- "tstamp": 1708095090.8232
561
- },
562
- {
563
- "model_a": "Pix2PixZero",
564
- "model_b": "Prompt2prompt",
565
- "winner": "model_a",
566
- "judge": "arena_user_::1",
567
- "anony": false,
568
- "tstamp": 1708095305.4665
569
- },
570
- {
571
- "model_a": "InstructPix2Pix",
572
- "model_b": "Prompt2prompt",
573
- "winner": "model_b",
574
- "judge": "arena_user_::1",
575
- "anony": true,
576
- "tstamp": 1708140553.1694
577
- },
578
- {
579
- "model_a": "MagicBrush",
580
- "model_b": "Prompt2prompt",
581
- "winner": "model_a",
582
- "judge": "arena_user_::1",
583
- "anony": true,
584
- "tstamp": 1708145512.3656
585
- },
586
- {
587
- "model_a": "Pix2PixZero",
588
- "model_b": "Prompt2prompt",
589
- "winner": "tie (bothbad)",
590
- "judge": "arena_user_::1",
591
- "anony": true,
592
- "tstamp": 1708145724.4127
593
- },
594
- {
595
- "model_a": "Pix2PixZero",
596
- "model_b": "PNP",
597
- "winner": "model_b",
598
- "judge": "arena_user_::1",
599
- "anony": true,
600
- "tstamp": 1708146846.5098
601
- },
602
- {
603
- "model_a": "PNP",
604
- "model_b": "MagicBrush",
605
- "winner": "model_a",
606
- "judge": "arena_user_::1",
607
- "anony": true,
608
- "tstamp": 1708189738.4864
609
- },
610
- {
611
- "model_a": "Prompt2prompt",
612
- "model_b": "InstructPix2Pix",
613
- "winner": "model_b",
614
- "judge": "arena_user_::1",
615
- "anony": true,
616
- "tstamp": 1708235874.9246
617
- },
618
- {
619
- "model_a": "Pix2PixZero",
620
- "model_b": "PNP",
621
- "winner": "model_b",
622
- "judge": "arena_user_::1",
623
- "anony": false,
624
- "tstamp": 1708257619.7115
625
- },
626
- {
627
- "model_a": "MagicBrush",
628
- "model_b": "Pix2PixZero",
629
- "winner": "tie (bothbad)",
630
- "judge": "arena_user_::1",
631
- "anony": true,
632
- "tstamp": 1708341265.7655
633
- },
634
- {
635
- "model_a": "MagicBrush",
636
- "model_b": "InstructPix2Pix",
637
- "winner": "model_b",
638
- "judge": "arena_user_::1",
639
- "anony": true,
640
- "tstamp": 1708350183.3086
641
- },
642
- {
643
- "model_a": "MagicBrush",
644
- "model_b": "Pix2PixZero",
645
- "winner": "tie (bothbad)",
646
- "judge": "arena_user_::1",
647
- "anony": true,
648
- "tstamp": 1708399707.1681
649
- },
650
- {
651
- "model_a": "PNP",
652
- "model_b": "MagicBrush",
653
- "winner": "model_a",
654
- "judge": "arena_user_::1",
655
- "anony": true,
656
- "tstamp": 1708441502.4707
657
- },
658
- {
659
- "model_a": "InstructPix2Pix",
660
- "model_b": "MagicBrush",
661
- "winner": "model_a",
662
- "judge": "arena_user_::1",
663
- "anony": true,
664
- "tstamp": 1708441716.8195
665
- },
666
- {
667
- "model_a": "InstructPix2Pix",
668
- "model_b": "MagicBrush",
669
- "winner": "model_b",
670
- "judge": "arena_user_::1",
671
- "anony": false,
672
- "tstamp": 1708546759.2009
673
- },
674
- {
675
- "model_a": "InstructPix2Pix",
676
- "model_b": "MagicBrush",
677
- "winner": "model_a",
678
- "judge": "arena_user_::1",
679
- "anony": false,
680
- "tstamp": 1708546805.4892
681
- },
682
- {
683
- "model_a": "Pix2PixZero",
684
- "model_b": "CycleDiffusion",
685
- "winner": "tie (bothbad)",
686
- "judge": "arena_user_::1",
687
- "anony": true,
688
- "tstamp": 1708547082.7124
689
- },
690
- {
691
- "model_a": "InstructPix2Pix",
692
- "model_b": "MagicBrush",
693
- "winner": "model_b",
694
- "judge": "arena_user_::1",
695
- "anony": false,
696
- "tstamp": 1708547166.9685
697
- },
698
- {
699
- "model_a": "InstructPix2Pix",
700
- "model_b": "MagicBrush",
701
- "winner": "model_b",
702
- "judge": "arena_user_::1",
703
- "anony": false,
704
- "tstamp": 1708547293.7107
705
- },
706
- {
707
- "model_a": "CycleDiffusion",
708
- "model_b": "PNP",
709
- "winner": "tie (bothbad)",
710
- "judge": "arena_user_::1",
711
- "anony": true,
712
- "tstamp": 1708575046.0529
713
- },
714
- {
715
- "model_a": "CycleDiffusion",
716
- "model_b": "MagicBrush",
717
- "winner": "tie (bothbad)",
718
- "judge": "arena_user_::1",
719
- "anony": true,
720
- "tstamp": 1708615466.9264
721
- },
722
- {
723
- "model_a": "CycleDiffusion",
724
- "model_b": "MagicBrush",
725
- "winner": "model_b",
726
- "judge": "arena_user_::1",
727
- "anony": false,
728
- "tstamp": 1708615516.3341
729
- },
730
- {
731
- "model_a": "InstructPix2Pix",
732
- "model_b": "PNP",
733
- "winner": "model_b",
734
- "judge": "arena_user_::1",
735
- "anony": false,
736
- "tstamp": 1709205399.0098
737
- },
738
- {
739
- "model_a": "InstructPix2Pix",
740
- "model_b": "PNP",
741
- "winner": "model_b",
742
- "judge": "arena_user_::1",
743
- "anony": false,
744
- "tstamp": 1709205767.8923
745
- },
746
- {
747
- "model_a": "PNP",
748
- "model_b": "InstructPix2Pix",
749
- "winner": "model_b",
750
- "judge": "arena_user_::1",
751
- "anony": true,
752
- "tstamp": 1709443700.05
753
- },
754
- {
755
- "model_a": "MagicBrush",
756
- "model_b": "Pix2PixZero",
757
- "winner": "model_a",
758
- "judge": "arena_user_::1",
759
- "anony": true,
760
- "tstamp": 1709702898.9291
761
- },
762
- {
763
- "model_a": "CycleDiffusion",
764
- "model_b": "Prompt2prompt",
765
- "winner": "tie (bothbad)",
766
- "judge": "arena_user_::1",
767
- "anony": true,
768
- "tstamp": 1710091925.1861
769
- },
770
- {
771
- "model_a": "MagicBrush",
772
- "model_b": "InstructPix2Pix",
773
- "winner": "tie (bothbad)",
774
- "judge": "arena_user_::1",
775
- "anony": true,
776
- "tstamp": 1710517781.1525
777
- },
778
- {
779
- "model_a": "MagicBrush",
780
- "model_b": "InstructPix2Pix",
781
- "winner": "tie (bothbad)",
782
- "judge": "arena_user_::1",
783
- "anony": false,
784
- "tstamp": 1710517859.2942
785
- },
786
- {
787
- "model_a": "Pix2PixZero",
788
- "model_b": "CycleDiffusion",
789
- "winner": "tie (bothbad)",
790
- "judge": "arena_user_::1",
791
- "anony": true,
792
- "tstamp": 1710535672.9791
793
- },
794
- {
795
- "model_a": "CycleDiffusion",
796
- "model_b": "Pix2PixZero",
797
- "winner": "model_b",
798
- "judge": "arena_user_10.16.25.191",
799
- "anony": false,
800
- "tstamp": 1711610477.1213
801
- },
802
- {
803
- "model_a": "CycleDiffusion",
804
- "model_b": "Pix2PixZero",
805
- "winner": "model_b",
806
- "judge": "arena_user_10.16.7.189",
807
- "anony": false,
808
- "tstamp": 1711629129.3894
809
- },
810
- {
811
- "model_a": "InstructPix2Pix",
812
- "model_b": "CycleDiffusion",
813
- "winner": "model_b",
814
- "judge": "arena_user_10.16.7.189",
815
- "anony": false,
816
- "tstamp": 1711629705.2246
817
- },
818
- {
819
- "model_a": "CycleDiffusion",
820
- "model_b": "Pix2PixZero",
821
- "winner": "model_b",
822
- "judge": "arena_user_10.16.25.191",
823
- "anony": false,
824
- "tstamp": 1711630362.5575
825
- },
826
- {
827
- "model_a": "MagicBrush",
828
- "model_b": "SDEdit",
829
- "winner": "model_a",
830
- "judge": "arena_user_127.0.0.1",
831
- "anony": false,
832
- "tstamp": 1711631112.5207
833
- },
834
- {
835
- "model_a": "Pix2PixZero",
836
- "model_b": "Prompt2prompt",
837
- "winner": "model_a",
838
- "judge": "arena_user_10.16.41.118",
839
- "anony": false,
840
- "tstamp": 1711631690.5127
841
- },
842
- {
843
- "model_a": "MagicBrush",
844
- "model_b": "InstructPix2Pix",
845
- "winner": "model_a",
846
- "judge": "arena_user_127.0.0.1",
847
- "anony": false,
848
- "tstamp": 1711633200.2923
849
- },
850
- {
851
- "model_a": "MagicBrush",
852
- "model_b": "InstructPix2Pix",
853
- "winner": "model_a",
854
- "judge": "arena_user_127.0.0.1",
855
- "anony": false,
856
- "tstamp": 1711633594.9922
857
- },
858
- {
859
- "model_a": "MagicBrush",
860
- "model_b": "SDEdit",
861
- "winner": "model_a",
862
- "judge": "arena_user_10.16.7.189",
863
- "anony": false,
864
- "tstamp": 1711635443.3071
865
- },
866
- {
867
- "model_a": "CycleDiffusion",
868
- "model_b": "MagicBrush",
869
- "winner": "model_b",
870
- "judge": "arena_user_10.16.25.191",
871
- "anony": false,
872
- "tstamp": 1711635899.3088
873
- },
874
- {
875
- "model_a": "SDEdit",
876
- "model_b": "MagicBrush",
877
- "winner": "model_b",
878
- "judge": "arena_user_10.16.41.118",
879
- "anony": false,
880
- "tstamp": 1711639015.428
881
- },
882
- {
883
- "model_a": "InstructPix2Pix",
884
- "model_b": "MagicBrush",
885
- "winner": "model_b",
886
- "judge": "arena_user_10.16.7.189",
887
- "anony": false,
888
- "tstamp": 1711646372.1201
889
- }
890
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/results/20240328/elo_results_image_editing.pkl DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:1430e6703dd6fc1e5b8ce06b11bb3a47516763a33edaf99e4c8547da5d9a8516
3
- size 57064
 
 
 
 
arena_elo/results/20240328/image_editing_leaderboard.csv DELETED
@@ -1,8 +0,0 @@
1
- key,Model,Arena Elo rating (anony),Arena Elo rating (full),License,Organization,Link
2
- Prompt2prompt,Prompt2prompt,1227.5508595026165,1158.5510681980204,Apache-2.0,"Google, Tel Aviv University",https://prompt-to-prompt.github.io
3
- InstructPix2Pix,InstructPix2Pix,1160.2057367236093,1071.0628993075604,"Copyright 2023 Timothy Brooks, Aleksander Holynski, Alexei A. Efros","University of California, Berkeley",https://www.timothybrooks.com/instruct-pix2pix
4
- PNP,PNP,1142.693603173293,1165.4957550490212,-,Weizmann Institute of Science,https://github.com/MichalGeyer/plug-and-play
5
- MagicBrush,MagicBrush,1053.1728944865915,1130.5422054860635,CC-BY-4.0,"The Ohio State University, University of Waterloo",https://osu-nlp-group.github.io/MagicBrush
6
- Pix2PixZero,Pix2PixZero,918.6047552604578,960.3217617445996,MIT License,"Carnegie Mellon University, Adobe Research",https://pix2pixzero.github.io
7
- CycleDiffusion,CycleDiffusion,865.0529105743963,813.4794423328381,X11,Carnegie Mellon University,https://github.com/ChenWu98/cycle-diffusion
8
- SDEdit,SDEdit,632.7192402790356,700.546867881897,MIT License,Stanford University,https://sde-image-editing.github.io
 
 
 
 
 
 
 
 
 
arena_elo/results/20240330/clean_battle_t2i_generation.json DELETED
The diff for this file is too large to render. See raw diff
 
arena_elo/results/20240330/elo_results_t2i_generation.pkl DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:e963f9d4b66d29c2f05a3923eff56cebd1f09b07223ac069456e08dc6143cda8
3
- size 66894
 
 
 
 
arena_elo/results/20240330/t2i_generation_leaderboard.csv DELETED
@@ -1,10 +0,0 @@
1
- key,Model,Arena Elo rating (anony),Arena Elo rating (full),License,Organization,Link
2
- Playground v2.5,Playground v2.5,1226.2872445351936,1236.5076527218755,Playground v2.5 Community License,Playground,https://huggingface.co/playgroundai/playground-v2.5-1024px-aesthetic
3
- StableCascade,StableCascade,1105.3322734027522,1062.0980902577003,stable-cascade-nc-community (other),Stability AI,https://huggingface.co/stabilityai/stable-cascade
4
- Playground v2,Playground v2,1091.4371447234744,1087.3576445526567,Playground v2 Community License,Playground,https://huggingface.co/playgroundai/playground-v2-1024px-aesthetic
5
- SDXLLightning,SDXLLightning,1043.235902888147,1019.4526672266176,openrail++,ByteDance,https://huggingface.co/ByteDance/SDXL-Lightning
6
- PixArtAlpha,PixArtAlpha,1020.6412075829058,1001.5090282446616,openrail++,PixArt-alpha,https://huggingface.co/PixArt-alpha/PixArt-XL-2-1024-MS
7
- SDXL,SDXL,964.7626495363717,969.8928133531979,openrail++,Stability AI,https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0
8
- SDXLTurbo,SDXLTurbo,912.2113859675355,914.9478831930971,sai-nc-community (other),Stability AI,https://huggingface.co/stabilityai/sdxl-turbo
9
- OpenJourney,OpenJourney,841.2224045541894,835.4563491411935,creativeml-openrail-m,PromptHero,https://huggingface.co/prompthero/openjourney
10
- LCM,LCM,794.8697868094328,812.962889153237,MIT License,Tsinghua University,https://huggingface.co/SimianLuo/LCM_Dreamshaper_v7
 
 
 
 
 
 
 
 
 
 
 
arena_elo/results/20240408/clean_battle_t2i_generation.json DELETED
The diff for this file is too large to render. See raw diff
 
arena_elo/results/20240408/elo_results_t2i_generation.pkl DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:dd88783d1cf752a0977152f7e16e88b54759173cbb04fb55e9392703ff4819f5
3
- size 66931
 
 
 
 
arena_elo/results/20240408/t2i_generation_leaderboard.csv DELETED
@@ -1,10 +0,0 @@
1
- key,Model,Arena Elo rating (anony),Arena Elo rating (full),License,Organization,Link
2
- Playground v2.5,Playground v2.5,1226.2872445351936,1233.8616648345985,Playground v2.5 Community License,Playground,https://huggingface.co/playgroundai/playground-v2.5-1024px-aesthetic
3
- StableCascade,StableCascade,1105.3322734027522,1031.1844458387527,stable-cascade-nc-community (other),Stability AI,https://huggingface.co/stabilityai/stable-cascade
4
- Playground v2,Playground v2,1091.4371447234744,1093.6921447327898,Playground v2 Community License,Playground,https://huggingface.co/playgroundai/playground-v2-1024px-aesthetic
5
- SDXLLightning,SDXLLightning,1043.235902888147,1004.2360415152086,openrail++,ByteDance,https://huggingface.co/ByteDance/SDXL-Lightning
6
- PixArtAlpha,PixArtAlpha,1020.6412075829058,999.6264863931511,openrail++,PixArt-alpha,https://huggingface.co/PixArt-alpha/PixArt-XL-2-1024-MS
7
- SDXL,SDXL,964.7626495363717,975.3460583905047,openrail++,Stability AI,https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0
8
- SDXLTurbo,SDXLTurbo,912.2113859675355,927.1873122981513,sai-nc-community (other),Stability AI,https://huggingface.co/stabilityai/sdxl-turbo
9
- OpenJourney,OpenJourney,841.2224045541894,848.6657236271969,creativeml-openrail-m,PromptHero,https://huggingface.co/prompthero/openjourney
10
- LCM,LCM,794.8697868094328,828.5108951096241,MIT License,Tsinghua University,https://huggingface.co/SimianLuo/LCM_Dreamshaper_v7
 
 
 
 
 
 
 
 
 
 
 
arena_elo/results/20240411/clean_battle_image_editing.json DELETED
@@ -1,906 +0,0 @@
1
- [
2
- {
3
- "model_a": "CycleDiffusion",
4
- "model_b": "InstructPix2Pix",
5
- "winner": "model_b",
6
- "judge": "arena_user_::1",
7
- "anony": true,
8
- "tstamp": 1707712630.872
9
- },
10
- {
11
- "model_a": "CycleDiffusion",
12
- "model_b": "InstructPix2Pix",
13
- "winner": "model_b",
14
- "judge": "arena_user_::1",
15
- "anony": false,
16
- "tstamp": 1707712699.668
17
- },
18
- {
19
- "model_a": "Pix2PixZero",
20
- "model_b": "MagicBrush",
21
- "winner": "model_a",
22
- "judge": "arena_user_::1",
23
- "anony": true,
24
- "tstamp": 1707712896.0427
25
- },
26
- {
27
- "model_a": "CycleDiffusion",
28
- "model_b": "InstructPix2Pix",
29
- "winner": "model_b",
30
- "judge": "arena_user_::1",
31
- "anony": false,
32
- "tstamp": 1707712929.7061
33
- },
34
- {
35
- "model_a": "CycleDiffusion",
36
- "model_b": "InstructPix2Pix",
37
- "winner": "model_b",
38
- "judge": "arena_user_::1",
39
- "anony": true,
40
- "tstamp": 1707713147.0445
41
- },
42
- {
43
- "model_a": "CycleDiffusion",
44
- "model_b": "PNP",
45
- "winner": "model_b",
46
- "judge": "arena_user_::1",
47
- "anony": true,
48
- "tstamp": 1707713198.9284
49
- },
50
- {
51
- "model_a": "CycleDiffusion",
52
- "model_b": "Prompt2prompt",
53
- "winner": "model_b",
54
- "judge": "arena_user_::1",
55
- "anony": true,
56
- "tstamp": 1707713210.1306
57
- },
58
- {
59
- "model_a": "Prompt2prompt",
60
- "model_b": "SDEdit",
61
- "winner": "model_a",
62
- "judge": "arena_user_::1",
63
- "anony": true,
64
- "tstamp": 1707713747.5115
65
- },
66
- {
67
- "model_a": "PNP",
68
- "model_b": "Pix2PixZero",
69
- "winner": "model_a",
70
- "judge": "arena_user_::1",
71
- "anony": true,
72
- "tstamp": 1707715613.7226
73
- },
74
- {
75
- "model_a": "CycleDiffusion",
76
- "model_b": "MagicBrush",
77
- "winner": "model_b",
78
- "judge": "arena_user_::1",
79
- "anony": true,
80
- "tstamp": 1707765708.2644
81
- },
82
- {
83
- "model_a": "PNP",
84
- "model_b": "CycleDiffusion",
85
- "winner": "model_a",
86
- "judge": "arena_user_::1",
87
- "anony": true,
88
- "tstamp": 1707765861.2742
89
- },
90
- {
91
- "model_a": "PNP",
92
- "model_b": "CycleDiffusion",
93
- "winner": "model_a",
94
- "judge": "arena_user_::1",
95
- "anony": false,
96
- "tstamp": 1707765975.0206
97
- },
98
- {
99
- "model_a": "PNP",
100
- "model_b": "CycleDiffusion",
101
- "winner": "model_a",
102
- "judge": "arena_user_::1",
103
- "anony": true,
104
- "tstamp": 1707768866.9065
105
- },
106
- {
107
- "model_a": "SDEdit",
108
- "model_b": "MagicBrush",
109
- "winner": "model_b",
110
- "judge": "arena_user_::1",
111
- "anony": true,
112
- "tstamp": 1707771673.2989
113
- },
114
- {
115
- "model_a": "SDEdit",
116
- "model_b": "MagicBrush",
117
- "winner": "model_b",
118
- "judge": "arena_user_::1",
119
- "anony": true,
120
- "tstamp": 1707784377.6617
121
- },
122
- {
123
- "model_a": "SDEdit",
124
- "model_b": "MagicBrush",
125
- "winner": "model_b",
126
- "judge": "arena_user_::1",
127
- "anony": true,
128
- "tstamp": 1707784466.8915
129
- },
130
- {
131
- "model_a": "CycleDiffusion",
132
- "model_b": "PNP",
133
- "winner": "model_b",
134
- "judge": "arena_user_::1",
135
- "anony": true,
136
- "tstamp": 1707784983.9581
137
- },
138
- {
139
- "model_a": "MagicBrush",
140
- "model_b": "SDEdit",
141
- "winner": "model_a",
142
- "judge": "arena_user_::1",
143
- "anony": true,
144
- "tstamp": 1707785277.16
145
- },
146
- {
147
- "model_a": "MagicBrush",
148
- "model_b": "SDEdit",
149
- "winner": "model_a",
150
- "judge": "arena_user_::1",
151
- "anony": true,
152
- "tstamp": 1707795299.0619
153
- },
154
- {
155
- "model_a": "MagicBrush",
156
- "model_b": "SDEdit",
157
- "winner": "tie (bothbad)",
158
- "judge": "arena_user_::1",
159
- "anony": true,
160
- "tstamp": 1707795798.752
161
- },
162
- {
163
- "model_a": "SDEdit",
164
- "model_b": "Prompt2prompt",
165
- "winner": "model_b",
166
- "judge": "arena_user_::1",
167
- "anony": false,
168
- "tstamp": 1707796435.7996
169
- },
170
- {
171
- "model_a": "SDEdit",
172
- "model_b": "CycleDiffusion",
173
- "winner": "model_b",
174
- "judge": "arena_user_::1",
175
- "anony": false,
176
- "tstamp": 1707797278.7369
177
- },
178
- {
179
- "model_a": "SDEdit",
180
- "model_b": "CycleDiffusion",
181
- "winner": "model_a",
182
- "judge": "arena_user_::1",
183
- "anony": false,
184
- "tstamp": 1707797279.6004
185
- },
186
- {
187
- "model_a": "SDEdit",
188
- "model_b": "Prompt2prompt",
189
- "winner": "model_b",
190
- "judge": "arena_user_::1",
191
- "anony": true,
192
- "tstamp": 1707805086.9739
193
- },
194
- {
195
- "model_a": "PNP",
196
- "model_b": "SDEdit",
197
- "winner": "model_a",
198
- "judge": "arena_user_::1",
199
- "anony": true,
200
- "tstamp": 1707805220.3253
201
- },
202
- {
203
- "model_a": "InstructPix2Pix",
204
- "model_b": "CycleDiffusion",
205
- "winner": "tie (bothbad)",
206
- "judge": "arena_user_::1",
207
- "anony": true,
208
- "tstamp": 1707805332.6322
209
- },
210
- {
211
- "model_a": "InstructPix2Pix",
212
- "model_b": "Prompt2prompt",
213
- "winner": "model_b",
214
- "judge": "arena_user_::1",
215
- "anony": true,
216
- "tstamp": 1707805476.0509
217
- },
218
- {
219
- "model_a": "InstructPix2Pix",
220
- "model_b": "Prompt2prompt",
221
- "winner": "model_b",
222
- "judge": "arena_user_::1",
223
- "anony": true,
224
- "tstamp": 1707818374.3438
225
- },
226
- {
227
- "model_a": "PNP",
228
- "model_b": "Prompt2prompt",
229
- "winner": "model_b",
230
- "judge": "arena_user_::1",
231
- "anony": true,
232
- "tstamp": 1707834631.9088
233
- },
234
- {
235
- "model_a": "InstructPix2Pix",
236
- "model_b": "SDEdit",
237
- "winner": "model_a",
238
- "judge": "arena_user_::1",
239
- "anony": true,
240
- "tstamp": 1707834954.0147
241
- },
242
- {
243
- "model_a": "Prompt2prompt",
244
- "model_b": "Pix2PixZero",
245
- "winner": "tie (bothbad)",
246
- "judge": "arena_user_::1",
247
- "anony": true,
248
- "tstamp": 1707835366.544
249
- },
250
- {
251
- "model_a": "PNP",
252
- "model_b": "SDEdit",
253
- "winner": "model_a",
254
- "judge": "arena_user_::1",
255
- "anony": true,
256
- "tstamp": 1707835643.6178
257
- },
258
- {
259
- "model_a": "MagicBrush",
260
- "model_b": "InstructPix2Pix",
261
- "winner": "tie (bothbad)",
262
- "judge": "arena_user_::1",
263
- "anony": true,
264
- "tstamp": 1707835789.25
265
- },
266
- {
267
- "model_a": "MagicBrush",
268
- "model_b": "PNP",
269
- "winner": "tie (bothbad)",
270
- "judge": "arena_user_::1",
271
- "anony": true,
272
- "tstamp": 1707836852.671
273
- },
274
- {
275
- "model_a": "MagicBrush",
276
- "model_b": "InstructPix2Pix",
277
- "winner": "model_a",
278
- "judge": "arena_user_::1",
279
- "anony": false,
280
- "tstamp": 1707836952.6082
281
- },
282
- {
283
- "model_a": "CycleDiffusion",
284
- "model_b": "SDEdit",
285
- "winner": "tie (bothbad)",
286
- "judge": "arena_user_::1",
287
- "anony": false,
288
- "tstamp": 1707837020.7148
289
- },
290
- {
291
- "model_a": "InstructPix2Pix",
292
- "model_b": "PNP",
293
- "winner": "model_a",
294
- "judge": "arena_user_::1",
295
- "anony": true,
296
- "tstamp": 1707837226.2259
297
- },
298
- {
299
- "model_a": "Prompt2prompt",
300
- "model_b": "Pix2PixZero",
301
- "winner": "model_a",
302
- "judge": "arena_user_::1",
303
- "anony": true,
304
- "tstamp": 1707838166.1449
305
- },
306
- {
307
- "model_a": "InstructPix2Pix",
308
- "model_b": "MagicBrush",
309
- "winner": "tie (bothbad)",
310
- "judge": "arena_user_::1",
311
- "anony": true,
312
- "tstamp": 1707838405.0013
313
- },
314
- {
315
- "model_a": "MagicBrush",
316
- "model_b": "CycleDiffusion",
317
- "winner": "model_a",
318
- "judge": "arena_user_::1",
319
- "anony": true,
320
- "tstamp": 1707839133.3126
321
- },
322
- {
323
- "model_a": "Prompt2prompt",
324
- "model_b": "InstructPix2Pix",
325
- "winner": "model_a",
326
- "judge": "arena_user_::1",
327
- "anony": true,
328
- "tstamp": 1707839484.6824
329
- },
330
- {
331
- "model_a": "PNP",
332
- "model_b": "InstructPix2Pix",
333
- "winner": "tie (bothbad)",
334
- "judge": "arena_user_::1",
335
- "anony": true,
336
- "tstamp": 1707850104.2499
337
- },
338
- {
339
- "model_a": "InstructPix2Pix",
340
- "model_b": "Pix2PixZero",
341
- "winner": "model_a",
342
- "judge": "arena_user_::1",
343
- "anony": true,
344
- "tstamp": 1707851384.7689
345
- },
346
- {
347
- "model_a": "PNP",
348
- "model_b": "MagicBrush",
349
- "winner": "model_b",
350
- "judge": "arena_user_::1",
351
- "anony": true,
352
- "tstamp": 1707851936.9466
353
- },
354
- {
355
- "model_a": "CycleDiffusion",
356
- "model_b": "MagicBrush",
357
- "winner": "tie (bothbad)",
358
- "judge": "arena_user_::1",
359
- "anony": true,
360
- "tstamp": 1707852836.3291
361
- },
362
- {
363
- "model_a": "CycleDiffusion",
364
- "model_b": "MagicBrush",
365
- "winner": "tie (bothbad)",
366
- "judge": "arena_user_::1",
367
- "anony": false,
368
- "tstamp": 1707852878.673
369
- },
370
- {
371
- "model_a": "Prompt2prompt",
372
- "model_b": "InstructPix2Pix",
373
- "winner": "model_a",
374
- "judge": "arena_user_::1",
375
- "anony": true,
376
- "tstamp": 1707853008.1359
377
- },
378
- {
379
- "model_a": "InstructPix2Pix",
380
- "model_b": "Pix2PixZero",
381
- "winner": "model_a",
382
- "judge": "arena_user_::1",
383
- "anony": false,
384
- "tstamp": 1707856807.6229
385
- },
386
- {
387
- "model_a": "MagicBrush",
388
- "model_b": "Pix2PixZero",
389
- "winner": "tie (bothbad)",
390
- "judge": "arena_user_::1",
391
- "anony": false,
392
- "tstamp": 1707863740.3507
393
- },
394
- {
395
- "model_a": "MagicBrush",
396
- "model_b": "PNP",
397
- "winner": "model_b",
398
- "judge": "arena_user_::1",
399
- "anony": true,
400
- "tstamp": 1707866312.1118
401
- },
402
- {
403
- "model_a": "Pix2PixZero",
404
- "model_b": "Prompt2prompt",
405
- "winner": "model_b",
406
- "judge": "arena_user_::1",
407
- "anony": true,
408
- "tstamp": 1707883083.3533
409
- },
410
- {
411
- "model_a": "Pix2PixZero",
412
- "model_b": "InstructPix2Pix",
413
- "winner": "model_b",
414
- "judge": "arena_user_::1",
415
- "anony": true,
416
- "tstamp": 1707883181.1397
417
- },
418
- {
419
- "model_a": "Pix2PixZero",
420
- "model_b": "Prompt2prompt",
421
- "winner": "model_b",
422
- "judge": "arena_user_::1",
423
- "anony": true,
424
- "tstamp": 1707883187.9173
425
- },
426
- {
427
- "model_a": "PNP",
428
- "model_b": "Prompt2prompt",
429
- "winner": "model_a",
430
- "judge": "arena_user_::1",
431
- "anony": true,
432
- "tstamp": 1707883507.587
433
- },
434
- {
435
- "model_a": "Prompt2prompt",
436
- "model_b": "CycleDiffusion",
437
- "winner": "model_a",
438
- "judge": "arena_user_::1",
439
- "anony": true,
440
- "tstamp": 1707883939.6125
441
- },
442
- {
443
- "model_a": "Prompt2prompt",
444
- "model_b": "MagicBrush",
445
- "winner": "model_b",
446
- "judge": "arena_user_::1",
447
- "anony": true,
448
- "tstamp": 1707892689.4407
449
- },
450
- {
451
- "model_a": "MagicBrush",
452
- "model_b": "InstructPix2Pix",
453
- "winner": "model_b",
454
- "judge": "arena_user_::1",
455
- "anony": true,
456
- "tstamp": 1707908988.749
457
- },
458
- {
459
- "model_a": "Prompt2prompt",
460
- "model_b": "InstructPix2Pix",
461
- "winner": "model_a",
462
- "judge": "arena_user_::1",
463
- "anony": true,
464
- "tstamp": 1707912639.2701
465
- },
466
- {
467
- "model_a": "MagicBrush",
468
- "model_b": "Pix2PixZero",
469
- "winner": "model_a",
470
- "judge": "arena_user_::1",
471
- "anony": false,
472
- "tstamp": 1707917685.9574
473
- },
474
- {
475
- "model_a": "MagicBrush",
476
- "model_b": "InstructPix2Pix",
477
- "winner": "tie (bothbad)",
478
- "judge": "arena_user_::1",
479
- "anony": false,
480
- "tstamp": 1707919429.336
481
- },
482
- {
483
- "model_a": "InstructPix2Pix",
484
- "model_b": "CycleDiffusion",
485
- "winner": "model_a",
486
- "judge": "arena_user_::1",
487
- "anony": true,
488
- "tstamp": 1707932651.9192
489
- },
490
- {
491
- "model_a": "MagicBrush",
492
- "model_b": "InstructPix2Pix",
493
- "winner": "model_a",
494
- "judge": "arena_user_::1",
495
- "anony": true,
496
- "tstamp": 1707932749.3107
497
- },
498
- {
499
- "model_a": "Prompt2prompt",
500
- "model_b": "PNP",
501
- "winner": "model_a",
502
- "judge": "arena_user_::1",
503
- "anony": true,
504
- "tstamp": 1707933208.5797
505
- },
506
- {
507
- "model_a": "MagicBrush",
508
- "model_b": "Pix2PixZero",
509
- "winner": "model_a",
510
- "judge": "arena_user_::1",
511
- "anony": false,
512
- "tstamp": 1707945335.6341
513
- },
514
- {
515
- "model_a": "MagicBrush",
516
- "model_b": "PNP",
517
- "winner": "model_a",
518
- "judge": "arena_user_::1",
519
- "anony": false,
520
- "tstamp": 1708031168.6838
521
- },
522
- {
523
- "model_a": "Pix2PixZero",
524
- "model_b": "PNP",
525
- "winner": "model_b",
526
- "judge": "arena_user_::1",
527
- "anony": false,
528
- "tstamp": 1708038931.5388
529
- },
530
- {
531
- "model_a": "Pix2PixZero",
532
- "model_b": "CycleDiffusion",
533
- "winner": "tie (bothbad)",
534
- "judge": "arena_user_::1",
535
- "anony": true,
536
- "tstamp": 1708057382.78
537
- },
538
- {
539
- "model_a": "PNP",
540
- "model_b": "InstructPix2Pix",
541
- "winner": "model_b",
542
- "judge": "arena_user_::1",
543
- "anony": true,
544
- "tstamp": 1708093689.8237
545
- },
546
- {
547
- "model_a": "MagicBrush",
548
- "model_b": "PNP",
549
- "winner": "model_b",
550
- "judge": "arena_user_::1",
551
- "anony": true,
552
- "tstamp": 1708093910.4683
553
- },
554
- {
555
- "model_a": "Pix2PixZero",
556
- "model_b": "Prompt2prompt",
557
- "winner": "model_b",
558
- "judge": "arena_user_::1",
559
- "anony": false,
560
- "tstamp": 1708095090.8232
561
- },
562
- {
563
- "model_a": "Pix2PixZero",
564
- "model_b": "Prompt2prompt",
565
- "winner": "model_a",
566
- "judge": "arena_user_::1",
567
- "anony": false,
568
- "tstamp": 1708095305.4665
569
- },
570
- {
571
- "model_a": "InstructPix2Pix",
572
- "model_b": "Prompt2prompt",
573
- "winner": "model_b",
574
- "judge": "arena_user_::1",
575
- "anony": true,
576
- "tstamp": 1708140553.1694
577
- },
578
- {
579
- "model_a": "MagicBrush",
580
- "model_b": "Prompt2prompt",
581
- "winner": "model_a",
582
- "judge": "arena_user_::1",
583
- "anony": true,
584
- "tstamp": 1708145512.3656
585
- },
586
- {
587
- "model_a": "Pix2PixZero",
588
- "model_b": "Prompt2prompt",
589
- "winner": "tie (bothbad)",
590
- "judge": "arena_user_::1",
591
- "anony": true,
592
- "tstamp": 1708145724.4127
593
- },
594
- {
595
- "model_a": "Pix2PixZero",
596
- "model_b": "PNP",
597
- "winner": "model_b",
598
- "judge": "arena_user_::1",
599
- "anony": true,
600
- "tstamp": 1708146846.5098
601
- },
602
- {
603
- "model_a": "PNP",
604
- "model_b": "MagicBrush",
605
- "winner": "model_a",
606
- "judge": "arena_user_::1",
607
- "anony": true,
608
- "tstamp": 1708189738.4864
609
- },
610
- {
611
- "model_a": "Prompt2prompt",
612
- "model_b": "InstructPix2Pix",
613
- "winner": "model_b",
614
- "judge": "arena_user_::1",
615
- "anony": true,
616
- "tstamp": 1708235874.9246
617
- },
618
- {
619
- "model_a": "Pix2PixZero",
620
- "model_b": "PNP",
621
- "winner": "model_b",
622
- "judge": "arena_user_::1",
623
- "anony": false,
624
- "tstamp": 1708257619.7115
625
- },
626
- {
627
- "model_a": "MagicBrush",
628
- "model_b": "Pix2PixZero",
629
- "winner": "tie (bothbad)",
630
- "judge": "arena_user_::1",
631
- "anony": true,
632
- "tstamp": 1708341265.7655
633
- },
634
- {
635
- "model_a": "MagicBrush",
636
- "model_b": "InstructPix2Pix",
637
- "winner": "model_b",
638
- "judge": "arena_user_::1",
639
- "anony": true,
640
- "tstamp": 1708350183.3086
641
- },
642
- {
643
- "model_a": "MagicBrush",
644
- "model_b": "Pix2PixZero",
645
- "winner": "tie (bothbad)",
646
- "judge": "arena_user_::1",
647
- "anony": true,
648
- "tstamp": 1708399707.1681
649
- },
650
- {
651
- "model_a": "PNP",
652
- "model_b": "MagicBrush",
653
- "winner": "model_a",
654
- "judge": "arena_user_::1",
655
- "anony": true,
656
- "tstamp": 1708441502.4707
657
- },
658
- {
659
- "model_a": "InstructPix2Pix",
660
- "model_b": "MagicBrush",
661
- "winner": "model_a",
662
- "judge": "arena_user_::1",
663
- "anony": true,
664
- "tstamp": 1708441716.8195
665
- },
666
- {
667
- "model_a": "InstructPix2Pix",
668
- "model_b": "MagicBrush",
669
- "winner": "model_b",
670
- "judge": "arena_user_::1",
671
- "anony": false,
672
- "tstamp": 1708546759.2009
673
- },
674
- {
675
- "model_a": "InstructPix2Pix",
676
- "model_b": "MagicBrush",
677
- "winner": "model_a",
678
- "judge": "arena_user_::1",
679
- "anony": false,
680
- "tstamp": 1708546805.4892
681
- },
682
- {
683
- "model_a": "Pix2PixZero",
684
- "model_b": "CycleDiffusion",
685
- "winner": "tie (bothbad)",
686
- "judge": "arena_user_::1",
687
- "anony": true,
688
- "tstamp": 1708547082.7124
689
- },
690
- {
691
- "model_a": "InstructPix2Pix",
692
- "model_b": "MagicBrush",
693
- "winner": "model_b",
694
- "judge": "arena_user_::1",
695
- "anony": false,
696
- "tstamp": 1708547166.9685
697
- },
698
- {
699
- "model_a": "InstructPix2Pix",
700
- "model_b": "MagicBrush",
701
- "winner": "model_b",
702
- "judge": "arena_user_::1",
703
- "anony": false,
704
- "tstamp": 1708547293.7107
705
- },
706
- {
707
- "model_a": "CycleDiffusion",
708
- "model_b": "PNP",
709
- "winner": "tie (bothbad)",
710
- "judge": "arena_user_::1",
711
- "anony": true,
712
- "tstamp": 1708575046.0529
713
- },
714
- {
715
- "model_a": "CycleDiffusion",
716
- "model_b": "MagicBrush",
717
- "winner": "tie (bothbad)",
718
- "judge": "arena_user_::1",
719
- "anony": true,
720
- "tstamp": 1708615466.9264
721
- },
722
- {
723
- "model_a": "CycleDiffusion",
724
- "model_b": "MagicBrush",
725
- "winner": "model_b",
726
- "judge": "arena_user_::1",
727
- "anony": false,
728
- "tstamp": 1708615516.3341
729
- },
730
- {
731
- "model_a": "InstructPix2Pix",
732
- "model_b": "PNP",
733
- "winner": "model_b",
734
- "judge": "arena_user_::1",
735
- "anony": false,
736
- "tstamp": 1709205399.0098
737
- },
738
- {
739
- "model_a": "InstructPix2Pix",
740
- "model_b": "PNP",
741
- "winner": "model_b",
742
- "judge": "arena_user_::1",
743
- "anony": false,
744
- "tstamp": 1709205767.8923
745
- },
746
- {
747
- "model_a": "PNP",
748
- "model_b": "InstructPix2Pix",
749
- "winner": "model_b",
750
- "judge": "arena_user_::1",
751
- "anony": true,
752
- "tstamp": 1709443700.05
753
- },
754
- {
755
- "model_a": "MagicBrush",
756
- "model_b": "Pix2PixZero",
757
- "winner": "model_a",
758
- "judge": "arena_user_::1",
759
- "anony": true,
760
- "tstamp": 1709702898.9291
761
- },
762
- {
763
- "model_a": "CycleDiffusion",
764
- "model_b": "Prompt2prompt",
765
- "winner": "tie (bothbad)",
766
- "judge": "arena_user_::1",
767
- "anony": true,
768
- "tstamp": 1710091925.1861
769
- },
770
- {
771
- "model_a": "MagicBrush",
772
- "model_b": "InstructPix2Pix",
773
- "winner": "tie (bothbad)",
774
- "judge": "arena_user_::1",
775
- "anony": true,
776
- "tstamp": 1710517781.1525
777
- },
778
- {
779
- "model_a": "MagicBrush",
780
- "model_b": "InstructPix2Pix",
781
- "winner": "tie (bothbad)",
782
- "judge": "arena_user_::1",
783
- "anony": false,
784
- "tstamp": 1710517859.2942
785
- },
786
- {
787
- "model_a": "Pix2PixZero",
788
- "model_b": "CycleDiffusion",
789
- "winner": "tie (bothbad)",
790
- "judge": "arena_user_::1",
791
- "anony": true,
792
- "tstamp": 1710535672.9791
793
- },
794
- {
795
- "model_a": "CycleDiffusion",
796
- "model_b": "Pix2PixZero",
797
- "winner": "model_b",
798
- "judge": "arena_user_10.16.25.191",
799
- "anony": true,
800
- "tstamp": 1711610477.1213
801
- },
802
- {
803
- "model_a": "CycleDiffusion",
804
- "model_b": "Pix2PixZero",
805
- "winner": "model_b",
806
- "judge": "arena_user_10.16.7.189",
807
- "anony": true,
808
- "tstamp": 1711629129.3894
809
- },
810
- {
811
- "model_a": "InstructPix2Pix",
812
- "model_b": "CycleDiffusion",
813
- "winner": "model_b",
814
- "judge": "arena_user_10.16.7.189",
815
- "anony": true,
816
- "tstamp": 1711629705.2246
817
- },
818
- {
819
- "model_a": "CycleDiffusion",
820
- "model_b": "Pix2PixZero",
821
- "winner": "model_b",
822
- "judge": "arena_user_10.16.25.191",
823
- "anony": true,
824
- "tstamp": 1711630362.5575
825
- },
826
- {
827
- "model_a": "MagicBrush",
828
- "model_b": "SDEdit",
829
- "winner": "model_a",
830
- "judge": "arena_user_127.0.0.1",
831
- "anony": true,
832
- "tstamp": 1711631112.5207
833
- },
834
- {
835
- "model_a": "Pix2PixZero",
836
- "model_b": "Prompt2prompt",
837
- "winner": "model_a",
838
- "judge": "arena_user_10.16.41.118",
839
- "anony": true,
840
- "tstamp": 1711631690.5127
841
- },
842
- {
843
- "model_a": "MagicBrush",
844
- "model_b": "InstructPix2Pix",
845
- "winner": "model_a",
846
- "judge": "arena_user_127.0.0.1",
847
- "anony": true,
848
- "tstamp": 1711633200.2923
849
- },
850
- {
851
- "model_a": "MagicBrush",
852
- "model_b": "InstructPix2Pix",
853
- "winner": "model_a",
854
- "judge": "arena_user_127.0.0.1",
855
- "anony": true,
856
- "tstamp": 1711633594.9922
857
- },
858
- {
859
- "model_a": "MagicBrush",
860
- "model_b": "SDEdit",
861
- "winner": "model_a",
862
- "judge": "arena_user_10.16.7.189",
863
- "anony": true,
864
- "tstamp": 1711635443.3071
865
- },
866
- {
867
- "model_a": "CycleDiffusion",
868
- "model_b": "MagicBrush",
869
- "winner": "model_b",
870
- "judge": "arena_user_10.16.25.191",
871
- "anony": true,
872
- "tstamp": 1711635899.3088
873
- },
874
- {
875
- "model_a": "SDEdit",
876
- "model_b": "MagicBrush",
877
- "winner": "model_b",
878
- "judge": "arena_user_10.16.41.118",
879
- "anony": true,
880
- "tstamp": 1711639015.428
881
- },
882
- {
883
- "model_a": "InstructPix2Pix",
884
- "model_b": "MagicBrush",
885
- "winner": "model_b",
886
- "judge": "arena_user_10.16.7.189",
887
- "anony": true,
888
- "tstamp": 1711646372.1201
889
- },
890
- {
891
- "model_a": "Pix2PixZero",
892
- "model_b": "Prompt2prompt",
893
- "winner": "model_b",
894
- "judge": "arena_user_10.16.17.217",
895
- "anony": true,
896
- "tstamp": 1712873850.0636
897
- },
898
- {
899
- "model_a": "MagicBrush",
900
- "model_b": "SDEdit",
901
- "winner": "tie (bothbad)",
902
- "judge": "arena_user_10.16.25.191",
903
- "anony": true,
904
- "tstamp": 1712876598.7667
905
- }
906
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
arena_elo/results/20240411/clean_battle_t2i_generation.json DELETED
The diff for this file is too large to render. See raw diff
 
arena_elo/results/20240411/elo_results_image_editing.pkl DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:d66a54af51d2ecf89f461dbb4e15090d084638596952d3541ce369798a525ff3
3
- size 57096
 
 
 
 
arena_elo/results/20240411/elo_results_t2i_generation.pkl DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:caf98f560387fa9d6b8c233e9915807adad62315cfdd6d4a5e7c9fda30140eb8
3
- size 62422