Spaces:
Sleeping
Sleeping
import os | |
os.system("pip install pymongo") | |
import gradio as gr | |
import pandas as pd | |
import random | |
from collections import defaultdict | |
import json | |
import os | |
import sys | |
from database import save_response | |
css = """ | |
.rtl{ | |
text-align: right; | |
} | |
.selectize-dropdown, .selectize-input { | |
direction: rtl !important; | |
} | |
""" | |
file_path = 'output/merged.json' | |
df = pd.read_json(file_path, orient='records', lines=False) | |
# that keeps track of how many times each question has been used | |
question_count = {index: 0 for index in df.index} | |
model_rankings = defaultdict(lambda: {'1st': 0, '2nd': 0, '3rd': 0}) | |
def get_rank_suffix(rank): | |
if 11 <= rank <= 13: | |
return 'th' | |
else: | |
suffixes = {1: 'st', 2: 'nd', 3: 'rd'} | |
return suffixes.get(rank % 10, 'th') | |
def process_rankings(user_rankings): | |
print("Processing Rankings:", user_rankings) # Debugging print | |
for answer_id, rank in user_rankings: | |
model = answer_id.split('_')[0] # Extracting the model name from the answer_id | |
rank_suffix = get_rank_suffix(rank) | |
model_rankings[model][f'{rank}{rank_suffix}'] += 1 # Using the correct suffix based on the rank | |
model_rankings_dict = dict(model_rankings) | |
save_response(model_rankings_dict) | |
# file_path = 'users_ranking.txt' | |
# with open(file_path, 'a') as file: | |
# model_rankings_dict = dict(model_rankings) | |
# json.dump(model_rankings_dict, file) | |
# file.write('\n') # Add a newline to separate entries | |
print("Updated Model Rankings:", model_rankings) # Debugging print | |
return | |
def get_questions_and_answers(): | |
available_questions = [index for index, count in question_count.items() if count < 3] | |
selected_indexes = random.sample(available_questions, min(4, len(available_questions))) | |
for index in selected_indexes: | |
question_count[index] += 1 | |
questions_and_answers = [] | |
for index in selected_indexes: | |
question = df.loc[index, 'instruction'] | |
answers_with_models = [ | |
(df.loc[index, 'cidar_output'], 'CIDAR'), | |
(df.loc[index, 'chat_output'], 'CHAT'), | |
(df.loc[index, 'alpagasus_output'], 'ALPAGASUS') | |
] | |
random.shuffle(answers_with_models) # Shuffle answers with their IDs | |
questions_and_answers.append((question, answers_with_models)) | |
return questions_and_answers | |
def rank_interface(): | |
questions = get_questions_and_answers() | |
# Create three dropdowns for each question for 1st, 2nd, and 3rd choices | |
inputs = [] | |
for question, answers in questions: | |
# Use an HTML component to display the question | |
inputs.append(gr.Markdown(rtl=True, value= question)) | |
answers_text = [answer for answer, _ in answers] | |
# Append three dropdowns for rankings without repeating the question | |
inputs.append(gr.Dropdown(elem_classes="rtl", choices=["...اختر"] + answers_text, label="الاختيار الأول")) | |
inputs.append(gr.Dropdown(elem_classes="rtl", choices=["...اختر"] + answers_text, label="الاختيار الثاني")) | |
inputs.append(gr.Dropdown(elem_classes="rtl", choices=["...اختر"] + answers_text, label="الاختيار الثالث")) | |
outputs = gr.Textbox(elem_id="rtl_text") | |
def rank_fluency(*dropdown_selections): | |
user_rankings = [] | |
for i in range(0, len(dropdown_selections), 4): # Process each set of 3 dropdowns for a question | |
selections = dropdown_selections[i+1:i+4] | |
# Check for duplicate selections within the same question | |
unique_selections = set(tuple(selection) for selection in selections) | |
# Now you can safely check if all sublists were unique | |
if len(selections) != len(unique_selections): | |
return "تأكد من عدم تكرار الإجابة لنفس السؤال" | |
question_index = i // 4 | |
_, model_answers = questions[question_index] | |
for j, chosen_answer in enumerate(selections, start=1): | |
if chosen_answer == "...اختر": # Skip unselected dropdowns | |
continue | |
for model_answer, model in model_answers: | |
if model_answer == chosen_answer: | |
user_rankings.append((model, j)) # j is the rank (1, 2, or 3) | |
break | |
process_rankings(user_rankings) | |
return "سجلنا ردك، ما قصرت =)" | |
return gr.Interface(fn=rank_fluency, inputs=inputs, outputs=outputs, title="ترتيب فصاحة النماذج", | |
description=".لديك مجموعة من الأسئلة، الرجاء ترتيب إجابات كل سؤال حسب جودة و فصاحة الإجابة", css=css) | |
iface = rank_interface() | |
iface.launch() | |