namkuner commited on
Commit
1135cf8
·
1 Parent(s): d28def9
.gitattributes CHANGED
@@ -33,3 +33,4 @@ 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
 
 
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
+ *.wav filter=lfs diff=lfs merge=lfs -text
.idea/.gitignore ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
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/inspectionProfiles/Project_Default.xml ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <profile version="1.0">
3
+ <option name="myName" value="Project Default" />
4
+ <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
5
+ <option name="ignoredPackages">
6
+ <value>
7
+ <list size="105">
8
+ <item index="0" class="java.lang.String" itemvalue="monotonic-align" />
9
+ <item index="1" class="java.lang.String" itemvalue="typing" />
10
+ <item index="2" class="java.lang.String" itemvalue="g2pk" />
11
+ <item index="3" class="java.lang.String" itemvalue="typing-extensions" />
12
+ <item index="4" class="java.lang.String" itemvalue="absl-py" />
13
+ <item index="5" class="java.lang.String" itemvalue="numba" />
14
+ <item index="6" class="java.lang.String" itemvalue="protobuf" />
15
+ <item index="7" class="java.lang.String" itemvalue="torchmetrics" />
16
+ <item index="8" class="java.lang.String" itemvalue="threadpoolctl" />
17
+ <item index="9" class="java.lang.String" itemvalue="docstring_parser" />
18
+ <item index="10" class="java.lang.String" itemvalue="huggingface-hub" />
19
+ <item index="11" class="java.lang.String" itemvalue="scikit-learn" />
20
+ <item index="12" class="java.lang.String" itemvalue="nvidia-cuda-cupti-cu12" />
21
+ <item index="13" class="java.lang.String" itemvalue="nvidia-cufft-cu12" />
22
+ <item index="14" class="java.lang.String" itemvalue="executing" />
23
+ <item index="15" class="java.lang.String" itemvalue="fsspec" />
24
+ <item index="16" class="java.lang.String" itemvalue="nvidia-cusolver-cu12" />
25
+ <item index="17" class="java.lang.String" itemvalue="torch-audiomentations" />
26
+ <item index="18" class="java.lang.String" itemvalue="nvidia-curand-cu12" />
27
+ <item index="19" class="java.lang.String" itemvalue="filelock" />
28
+ <item index="20" class="java.lang.String" itemvalue="Pygments" />
29
+ <item index="21" class="java.lang.String" itemvalue="safetensors" />
30
+ <item index="22" class="java.lang.String" itemvalue="certifi" />
31
+ <item index="23" class="java.lang.String" itemvalue="semver" />
32
+ <item index="24" class="java.lang.String" itemvalue="accelerate" />
33
+ <item index="25" class="java.lang.String" itemvalue="lxml" />
34
+ <item index="26" class="java.lang.String" itemvalue="nvidia-cuda-runtime-cu12" />
35
+ <item index="27" class="java.lang.String" itemvalue="speechbrain" />
36
+ <item index="28" class="java.lang.String" itemvalue="pyparsing" />
37
+ <item index="29" class="java.lang.String" itemvalue="torchaudio" />
38
+ <item index="30" class="java.lang.String" itemvalue="optuna" />
39
+ <item index="31" class="java.lang.String" itemvalue="tokenizers" />
40
+ <item index="32" class="java.lang.String" itemvalue="nvidia-cuda-nvrtc-cu12" />
41
+ <item index="33" class="java.lang.String" itemvalue="transformers" />
42
+ <item index="34" class="java.lang.String" itemvalue="triton" />
43
+ <item index="35" class="java.lang.String" itemvalue="rdflib" />
44
+ <item index="36" class="java.lang.String" itemvalue="aiohappyeyeballs" />
45
+ <item index="37" class="java.lang.String" itemvalue="kiwisolver" />
46
+ <item index="38" class="java.lang.String" itemvalue="pytorch-metric-learning" />
47
+ <item index="39" class="java.lang.String" itemvalue="pexpect" />
48
+ <item index="40" class="java.lang.String" itemvalue="click" />
49
+ <item index="41" class="java.lang.String" itemvalue="attrs" />
50
+ <item index="42" class="java.lang.String" itemvalue="psutil" />
51
+ <item index="43" class="java.lang.String" itemvalue="bibtexparser" />
52
+ <item index="44" class="java.lang.String" itemvalue="fonttools" />
53
+ <item index="45" class="java.lang.String" itemvalue="pytorch-lightning" />
54
+ <item index="46" class="java.lang.String" itemvalue="nvidia-cublas-cu12" />
55
+ <item index="47" class="java.lang.String" itemvalue="tensorboard" />
56
+ <item index="48" class="java.lang.String" itemvalue="asttokens" />
57
+ <item index="49" class="java.lang.String" itemvalue="nvidia-nvtx-cu12" />
58
+ <item index="50" class="java.lang.String" itemvalue="propcache" />
59
+ <item index="51" class="java.lang.String" itemvalue="matplotlib" />
60
+ <item index="52" class="java.lang.String" itemvalue="charset-normalizer" />
61
+ <item index="53" class="java.lang.String" itemvalue="librosa" />
62
+ <item index="54" class="java.lang.String" itemvalue="ffmpy" />
63
+ <item index="55" class="java.lang.String" itemvalue="Mako" />
64
+ <item index="56" class="java.lang.String" itemvalue="referencing" />
65
+ <item index="57" class="java.lang.String" itemvalue="decorator" />
66
+ <item index="58" class="java.lang.String" itemvalue="a-unet" />
67
+ <item index="59" class="java.lang.String" itemvalue="alembic" />
68
+ <item index="60" class="java.lang.String" itemvalue="networkx" />
69
+ <item index="61" class="java.lang.String" itemvalue="nvidia-nvjitlink-cu12" />
70
+ <item index="62" class="java.lang.String" itemvalue="ptyprocess" />
71
+ <item index="63" class="java.lang.String" itemvalue="SQLAlchemy" />
72
+ <item index="64" class="java.lang.String" itemvalue="nvidia-cusparse-cu12" />
73
+ <item index="65" class="java.lang.String" itemvalue="llvmlite" />
74
+ <item index="66" class="java.lang.String" itemvalue="numpy" />
75
+ <item index="67" class="java.lang.String" itemvalue="Jinja2" />
76
+ <item index="68" class="java.lang.String" itemvalue="nvidia-nccl-cu12" />
77
+ <item index="69" class="java.lang.String" itemvalue="segments" />
78
+ <item index="70" class="java.lang.String" itemvalue="clldutils" />
79
+ <item index="71" class="java.lang.String" itemvalue="rpds-py" />
80
+ <item index="72" class="java.lang.String" itemvalue="lightning-utilities" />
81
+ <item index="73" class="java.lang.String" itemvalue="pyannote.database" />
82
+ <item index="74" class="java.lang.String" itemvalue="urllib3" />
83
+ <item index="75" class="java.lang.String" itemvalue="scipy" />
84
+ <item index="76" class="java.lang.String" itemvalue="six" />
85
+ <item index="77" class="java.lang.String" itemvalue="typer" />
86
+ <item index="78" class="java.lang.String" itemvalue="importlib_resources" />
87
+ <item index="79" class="java.lang.String" itemvalue="markdown2" />
88
+ <item index="80" class="java.lang.String" itemvalue="prompt_toolkit" />
89
+ <item index="81" class="java.lang.String" itemvalue="ruamel.yaml" />
90
+ <item index="82" class="java.lang.String" itemvalue="tzdata" />
91
+ <item index="83" class="java.lang.String" itemvalue="ipython" />
92
+ <item index="84" class="java.lang.String" itemvalue="rich" />
93
+ <item index="85" class="java.lang.String" itemvalue="nvidia-cudnn-cu12" />
94
+ <item index="86" class="java.lang.String" itemvalue="torch" />
95
+ <item index="87" class="java.lang.String" itemvalue="dlinfo" />
96
+ <item index="88" class="java.lang.String" itemvalue="termcolor" />
97
+ <item index="89" class="java.lang.String" itemvalue="data-science-types" />
98
+ <item index="90" class="java.lang.String" itemvalue="soundfile" />
99
+ <item index="91" class="java.lang.String" itemvalue="babel" />
100
+ <item index="92" class="java.lang.String" itemvalue="aiohttp" />
101
+ <item index="93" class="java.lang.String" itemvalue="grpcio" />
102
+ <item index="94" class="java.lang.String" itemvalue="yarl" />
103
+ <item index="95" class="java.lang.String" itemvalue="pytz" />
104
+ <item index="96" class="java.lang.String" itemvalue="einops" />
105
+ <item index="97" class="java.lang.String" itemvalue="aiosignal" />
106
+ <item index="98" class="java.lang.String" itemvalue="pylatexenc" />
107
+ <item index="99" class="java.lang.String" itemvalue="argbind" />
108
+ <item index="100" class="java.lang.String" itemvalue="fire" />
109
+ <item index="101" class="java.lang.String" itemvalue="randomname" />
110
+ <item index="102" class="java.lang.String" itemvalue="torch-stoi" />
111
+ <item index="103" class="java.lang.String" itemvalue="pystoi" />
112
+ <item index="104" class="java.lang.String" itemvalue="flatten-dict" />
113
+ </list>
114
+ </value>
115
+ </option>
116
+ </inspection_tool>
117
+ </profile>
118
+ </component>
.idea/inspectionProfiles/profiles_settings.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <settings>
3
+ <option name="USE_PROJECT_PROFILE" value="false" />
4
+ <version value="1.0" />
5
+ </settings>
6
+ </component>
.idea/misc.xml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Black">
4
+ <option name="sdkName" value="Python 3.11 (TTSBenchmarkTrivita)" />
5
+ </component>
6
+ <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (TTSBenchmarkTrivita)" project-jdk-type="Python SDK" />
7
+ </project>
.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
app.py ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ import os
4
+ import random
5
+
6
+ FEEDBACK_FILE = "arena_feedback.csv"
7
+
8
+ # Nếu chưa có file thì tạo
9
+ if not os.path.exists(FEEDBACK_FILE):
10
+ df = pd.DataFrame(columns=["text_id", "model_A", "model_B", "choice"])
11
+ df.to_csv(FEEDBACK_FILE, index=False)
12
+
13
+ # Danh sách mẫu: 2 câu × 5 model
14
+ samples = {
15
+ 1: {
16
+ "text": "Although the weather forecast predicted heavy rain throughout the entire week, we decided to continue our outdoor project, bringing along waterproof equipment, extra clothes, and sufficient food supplies to stay safe.",
17
+ "audios": {
18
+ "F5 TTS": "compare_audio/f5_tts_1.wav",
19
+ "Fish Speech": "compare_audio/fish_speech_1.wav",
20
+ "GPT SoVITS": "compare_audio/gpt-soVITs_1.wav",
21
+ "Index TTS": "compare_audio/index_tts_1.wav",
22
+ "Open Voice": "compare_audio/openvoice_1.wav",
23
+ "Orpheus": "compare_audio/orpheus_1.wav",
24
+ "Spark TTS": "compare_audio/spark_tts_1.wav",
25
+ "StyleTTS2": "compare_audio/styletts2_1.wav",
26
+ "Vibe Voice": "compare_audio/vibe_voice_1.wav",
27
+ },
28
+ },
29
+ 2: {
30
+ "text": "Because the team members collaborated effectively, shared their knowledge openly, and supported each other during stressful moments, the complicated project was completed successfully ahead of schedule and impressed the clients greatly.",
31
+ "audios": {
32
+ "F5 TTS": "compare_audio/f5_tts_2.wav",
33
+ "Fish Speech": "compare_audio/fish_speech_2.wav",
34
+ "GPT SoVITS": "compare_audio/gpt-soVITs_2.wav",
35
+ "Index TTS": "compare_audio/index_tts_2.wav",
36
+ "Open Voice": "compare_audio/openvoice_2.wav",
37
+ "Orpheus": "compare_audio/orpheus_2.wav",
38
+ "Spark TTS": "compare_audio/spark_tts_2.wav",
39
+ "StyleTTS2": "compare_audio/styletts2_2.wav",
40
+ "Vibe Voice": "compare_audio/vibe_voice_2.wav",
41
+ },
42
+ },
43
+ }
44
+
45
+
46
+ def random_pair():
47
+ # Random chọn câu
48
+ text_id = random.choice(list(samples.keys()))
49
+ text = samples[text_id]["text"]
50
+
51
+ # Random chọn 2 model khác nhau
52
+ model_names = list(samples[text_id]["audios"].keys())
53
+ model_A, model_B = random.sample(model_names, 2)
54
+
55
+ audio_A = samples[text_id]["audios"][model_A]
56
+ audio_B = samples[text_id]["audios"][model_B]
57
+
58
+ return text, audio_A, audio_B, text_id, model_A, model_B
59
+
60
+
61
+ def save_choice(text_id, model_A, model_B, choice):
62
+ df = pd.read_csv(FEEDBACK_FILE)
63
+ df = pd.concat(
64
+ [df, pd.DataFrame([{
65
+ "text_id": text_id,
66
+ "model_A": model_A,
67
+ "model_B": model_B,
68
+ "choice": choice
69
+ }])],
70
+ ignore_index=True,
71
+ )
72
+ df.to_csv(FEEDBACK_FILE, index=False)
73
+
74
+ # Load random cặp mới
75
+ text, audio_A, audio_B, new_text_id, new_model_A, new_model_B = random_pair()
76
+ return (
77
+ f"✅ Đã lưu lựa chọn: {choice} (Câu {text_id}, {model_A} vs {model_B})",
78
+ text,
79
+ audio_A,
80
+ audio_B,
81
+ new_text_id,
82
+ new_model_A,
83
+ new_model_B,
84
+ )
85
+
86
+
87
+ with gr.Blocks() as demo:
88
+ gr.Markdown("## 🎧 Arena TTS Evaluation. Nghe 2 mẫu, chọn cái bạn thấy hay hơn.")
89
+
90
+ text_display = gr.Textbox(label="Câu gốc", interactive=False)
91
+ audio_A = gr.Audio(label="Mẫu A", type="filepath")
92
+ audio_B = gr.Audio(label="Mẫu B", type="filepath")
93
+
94
+ hidden_text_id = gr.Number(visible=False)
95
+ hidden_model_A = gr.Textbox(visible=False)
96
+ hidden_model_B = gr.Textbox(visible=False)
97
+
98
+ with gr.Row():
99
+ btn_A = gr.Button("Chọn A")
100
+ btn_B = gr.Button("Chọn B")
101
+
102
+ output_msg = gr.Label()
103
+
104
+ btn_A.click(
105
+ fn=lambda tid, ma, mb: save_choice(tid, ma, mb, "A"),
106
+ inputs=[hidden_text_id, hidden_model_A, hidden_model_B],
107
+ outputs=[output_msg, text_display, audio_A, audio_B, hidden_text_id, hidden_model_A, hidden_model_B],
108
+ )
109
+ btn_B.click(
110
+ fn=lambda tid, ma, mb: save_choice(tid, ma, mb, "B"),
111
+ inputs=[hidden_text_id, hidden_model_A, hidden_model_B],
112
+ outputs=[output_msg, text_display, audio_A, audio_B, hidden_text_id, hidden_model_A, hidden_model_B],
113
+ )
114
+
115
+ # Load random pair khi khởi động
116
+ demo.load(random_pair, None, [text_display, audio_A, audio_B, hidden_text_id, hidden_model_A, hidden_model_B])
117
+
118
+ if __name__ == "__main__":
119
+ demo.launch()
arena_feedback.csv ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ text_id,choice,model_A,model_B
2
+ 2.0,A,Fish Speech,GPT SoVITS
3
+ 1.0,B,Spark TTS,Vibe Voice
4
+ 1.0,B,Vibe Voice,F5 TTS
5
+ 2.0,B,GPT SoVITS,Spark TTS
6
+ 2.0,A,StyleTTS2,Spark TTS
7
+ 1.0,A,Fish Speech,Index TTS
8
+ 2.0,B,F5 TTS,Vibe Voice
compare_audio/1_male.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4baed8faa47f3c111bafc5ad89d284f2ecf8053065c4c769f57eddae32eed2b5
3
+ size 421966
compare_audio/2_female.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:34776ece150b5950f6d71dcd49972ac60bb3fad4a513a52b308d67e56c02d94f
3
+ size 417870
compare_audio/f5_tts_1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:500001dd24555ed3cfedf5ac23a254286b8e14f9f589bc6a1c81c3742b91c8ed
3
+ size 628268
compare_audio/f5_tts_2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5dbfdaa44ea0e7bda0d81c51104959b916d029575145d6496d7d6a85cb6e3aef
3
+ size 590892
compare_audio/fish_speech_1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2bc3b80fdbbbc86cc294d21370134c684e8c3c09c1cb095f636a6a28d5ba9864
3
+ size 1003564
compare_audio/fish_speech_2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bfbcf419fcd7eb87adb2c1260aaee6a45d6cbf79b91d29caf0ddb2e736b76e95
3
+ size 991276
compare_audio/gpt-soVITs_1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c3ec5145f3cfbaad6c87be28c1fd61e7395e35288bf9eb211cbe2315a93784cc
3
+ size 848684
compare_audio/gpt-soVITs_2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0b10bb6f2d1649375c691107be7746db40cccac636c53f8deeb13b0ad09e7bb0
3
+ size 812844
compare_audio/index_tts_1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c9acd4b278923af455dd4512615d618dada99b2d4116ac0078bbec3085bf9629
3
+ size 567886
compare_audio/index_tts_2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:56a2ef45a68327d150a936b390a389e13f94e871c11248a24e8175640ff1c2e7
3
+ size 507982
compare_audio/openvoice_1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0002fc6ee8bc53b6b565a4a1e72badb3f5ffa0c81f7e283ff9756d8585b5789e
3
+ size 505900
compare_audio/openvoice_2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5ceca072da6274c4e8567bd686070e2d4fb8b9a42f75d07d51fbda397618eba1
3
+ size 544300
compare_audio/orpheus_1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4ae638d1fa04e90a871c48c382e734c043f53938e1b4eb37a75ec727b4f3d5fc
3
+ size 573484
compare_audio/orpheus_2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9b1a0dfd5dab26d7503634b696a8caea785977f2a865bdc43fcef1d8b529352f
3
+ size 655404
compare_audio/spark_tts_1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:358610009945e57b75483d3162d0975474fe6bee2179d3f6ee9cc58f7fb90f66
3
+ size 448684
compare_audio/spark_tts_2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:98bd16ba58fef47b7ef79605a33bfd24cd60bc13ce19cc1c260edb90c33d3732
3
+ size 378924
compare_audio/styletts2_1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ce46e7f97b8ae36e0582a4e887e0bdfd7aecf445b8b3c2b00ba3d9d824919a6f
3
+ size 707844
compare_audio/styletts2_2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3f3fbab6748edfeb6814f1d1e96b79ef176bb9086c46f9164d0d93258df37ec3
3
+ size 668244
compare_audio/vibe_voice_1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f923da09f2d7fb346596259c50b96fa25449a104c15a9db6a58864ba6476d0d5
3
+ size 531244
compare_audio/vibe_voice_2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:818aa85416582fe8a10daef7f8a59ecde80efd3f06a0c74662a2288ad67978eb
3
+ size 659244
feedback.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ audio_file,rating,comment
2
+ Mẫu 1,1,hơi tệ
score.py ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+
3
+ import pandas as pd
4
+ FEEDBACK_FILE = "arena_feedback.csv"
5
+
6
+ def compute_arena_scores(feedback_file=FEEDBACK_FILE):
7
+ if not os.path.exists(feedback_file):
8
+ return "⚠️ Chưa có dữ liệu đánh giá!"
9
+
10
+ df = pd.read_csv(feedback_file)
11
+ if df.empty:
12
+ return "⚠️ File rỗng, chưa có lượt vote nào!"
13
+
14
+ results = {}
15
+
16
+ for _, row in df.iterrows():
17
+ mA, mB, choice = row["model_A"], row["model_B"], row["choice"]
18
+
19
+ # Khởi tạo nếu chưa có
20
+ for m in [mA, mB]:
21
+ if m not in results:
22
+ results[m] = {"win": 0, "loss": 0}
23
+
24
+ if choice == "A":
25
+ results[mA]["win"] += 1
26
+ results[mB]["loss"] += 1
27
+ elif choice == "B":
28
+ results[mB]["win"] += 1
29
+ results[mA]["loss"] += 1
30
+
31
+ # Tính Arena Score
32
+ scores = {}
33
+ for model, wl in results.items():
34
+ total = wl["win"] + wl["loss"]
35
+ score = wl["win"] / total if total > 0 else 0
36
+ scores[model] = {
37
+ "wins": wl["win"],
38
+ "losses": wl["loss"],
39
+ "arena_score": round(score, 3),
40
+ }
41
+
42
+ return pd.DataFrame(scores).T.sort_values("arena_score", ascending=False)
43
+
44
+ if __name__ == "__main__":
45
+ scores_df = compute_arena_scores()
46
+ print(scores_df)