|
import gradio as gr |
|
import json |
|
import os |
|
import random |
|
import matplotlib.pyplot as plt |
|
|
|
|
|
with open("./results/gradio_results.json", "r", encoding='utf-8') as file: |
|
gradio_transcriptions = json.load(file) |
|
|
|
with open("./results/openai_results.json", "r", encoding='utf-8') as file: |
|
openai_transcriptions = json.load(file) |
|
|
|
audio_files_directory = "./chunks" |
|
|
|
def get_random_audio_and_transcriptions(): |
|
random_choice = random.choice(os.listdir(audio_files_directory)) |
|
audio_path = os.path.join(audio_files_directory, random_choice) |
|
base_name = os.path.splitext(random_choice)[0] |
|
gradio_transcription = next((t for t in gradio_transcriptions if t['chunk'].startswith(base_name)), {'text': ''})['text'] |
|
openai_transcription = next((t for t in openai_transcriptions if t['chunk'].startswith(base_name)), {'text': ''})['text'] |
|
return audio_path, gradio_transcription, openai_transcription |
|
|
|
def handle_vote(vote, audio_path, gradio_transcription, openai_transcription): |
|
votes_file = "./results/votes.json" |
|
|
|
|
|
vote = vote.lower() |
|
|
|
if os.path.exists(votes_file): |
|
with open(votes_file, "r", encoding='utf-8') as file: |
|
votes = json.load(file) |
|
else: |
|
votes = {} |
|
|
|
key = os.path.basename(audio_path) |
|
if key not in votes: |
|
votes[key] = {"seamlessm4t": 0, "whisper": 0, "tie": 0, "out of context": 0, "innapropriate": 0} |
|
|
|
if vote in votes[key]: |
|
votes[key][vote] += 1 |
|
else: |
|
print(f"Invalid vote option: {vote}. Valid options are 'gradio', 'openai', and 'tie'.") |
|
|
|
with open(votes_file, "w", encoding='utf-8') as file: |
|
json.dump(votes, file, indent=4) |
|
|
|
def calculate_vote_totals(): |
|
votes_file = "./results/votes.json" |
|
if os.path.exists(votes_file): |
|
with open(votes_file, "r", encoding='utf-8') as file: |
|
votes_data = json.load(file) |
|
else: |
|
print("No votes have been recorded yet.") |
|
return None |
|
|
|
|
|
totals = {"seamlessm4t": 0, "whisper": 0, "tie": 0,"out of context": 0, "innapropriate": 0} |
|
|
|
|
|
for _, vote_counts in votes_data.items(): |
|
for key in totals: |
|
totals[key] += vote_counts.get(key, 0) |
|
|
|
return totals |
|
|
|
def show_results(): |
|
totals = calculate_vote_totals() |
|
if totals: |
|
|
|
labels = list(["SeamlessM4T", "Whisper", "Tie", "Out of context", "Innapropriate"]) |
|
values = list(totals.values()) |
|
|
|
plt.figure(figsize=(8, 6)) |
|
plt.bar(labels, values, color=['cornflowerblue', 'lavender', 'green', 'red', 'yellow']) |
|
plt.xlabel('Models') |
|
plt.ylabel('Votes') |
|
plt.title('Vote Distribution') |
|
plt.xticks(labels) |
|
plt.ylim(0, max(values) + 1) |
|
|
|
return plt |
|
else: |
|
|
|
plt.figure(figsize=(8, 6)) |
|
return plt |
|
|
|
def display_votes(): |
|
votes_file = "./results/votes.json" |
|
if os.path.exists(votes_file): |
|
with open(votes_file, "r", encoding='utf-8') as file: |
|
votes = json.load(file) |
|
formatted_votes = json.dumps(votes, indent=4) |
|
else: |
|
formatted_votes = "No votes file found." |
|
return formatted_votes |
|
|
|
def setup_interface(): |
|
with gr.Blocks() as demo: |
|
vote_options = gr.Radio(choices=["SeamlessM4T", "Whisper", "Tie", "Out of context", "Innapropriate"], label="Vote") |
|
submit_button = gr.Button("Submit Vote") |
|
gradio_transcription = gr.Textbox(label="SeamlessM4T-V2-large Transcription", interactive=False) |
|
openai_transcription = gr.Textbox(label="OpenAI Whisper Transcription", interactive=False) |
|
audio_player = gr.Audio(label="Listen to the Audio", interactive=False) |
|
|
|
def submit_vote(vote): |
|
audio_path, gr_transcription, oa_transcription = get_random_audio_and_transcriptions() |
|
if vote: |
|
handle_vote(vote, audio_path, gr_transcription, oa_transcription) |
|
|
|
return gr_transcription, oa_transcription, audio_path |
|
|
|
submit_button.click(submit_vote, inputs=[vote_options], outputs=[gradio_transcription, openai_transcription, audio_player]) |
|
show_results_button = gr.Button("Show Results") |
|
results_plot = gr.Plot() |
|
|
|
show_votes_button = gr.Button("Show Votes") |
|
votes_display = gr.Textbox(label="Votes", placeholder="Click the button to load votes...", lines=20, interactive=False) |
|
|
|
show_votes_button.click( |
|
fn=display_votes, |
|
inputs=[], |
|
outputs=votes_display |
|
) |
|
show_results_button.click(show_results, inputs=[], outputs=results_plot) |
|
|
|
initial_data = get_random_audio_and_transcriptions() |
|
gradio_transcription.value = initial_data[1] |
|
openai_transcription.value = initial_data[2] |
|
audio_player.value = initial_data[0] |
|
|
|
return demo |
|
|
|
demo = setup_interface() |
|
demo.launch() |
|
|