-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.py
133 lines (113 loc) · 4.34 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import os
from collections import defaultdict
from database import save_response, read_responses
import gradio as gr
import pandas as pd
import random
css = """
.rtl
{
text-align: right;
}
.usr-inst{
text-align:center;
background-color: #3e517e;
border: solid 1px;
border-radius: 5px;
padding: 10px;
}
.svelte-1kzox3m{
justify-content: end;
}
.svelte-sfqy0y{
border:none;
}
.svelte-90oupt{
background-color: #0b0f19;
padding-top: 0px;
}
#component-4{
border: 1px solid;
padding: 5px;
background-color: #242433;
border-radius: 5px;
}
"""
file_path = 'instructions/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})
curr_order = ['CIDAR', 'CHAT', 'ALPAGASUS']
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
save_response(user_rankings)
print(read_responses())
return
def get_questions_and_answers():
available_questions = [index for index, count in question_count.items() if count < 3]
index = random.sample(available_questions, min(1, len(available_questions)))[0]
question_count[index] += 1
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
curr_order = [model for _, model in answers_with_models]
return (question, answers_with_models)
def reload_components():
question, answers = get_questions_and_answers()
user_instructions_txt = " في الصفحة التالية ستجد طلب له ثلاث إجابات مختلفة. من فضلك اختر مدي توافق كل إجابة مع الثقافة العربية."
radios = []
user_instructions = gr.Markdown(rtl=True, value= f'<h1 class="usr-inst">{user_instructions_txt}</h1>')
question_md = gr.Markdown(rtl=True, value= f'<b> {question} </b>')
for answer, model in answers:
radios.append(gr.Markdown(rtl = True, value= answer))
radios.append(gr.Radio(elem_classes = 'rtl', choices = ['متوافق', 'متوافق جزئياً', 'غير متوافق'], value = 'غير متوافق', label = ""))
return [user_instructions, question_md] + radios
def rank_interface():
def rank_fluency(*radio_selections):
user_rankings = {}
for i in range(0, len(radio_selections), 3): # Process each set of 3 dropdowns for a question
selections = radio_selections[i:i+3]
for j, chosen_answer in enumerate(selections):
model_name = curr_order[j]
if chosen_answer == 'غير متوافق':
user_rankings[model_name] = 3
elif chosen_answer == 'متوافق جزئياً':
user_rankings[model_name] = 2
elif chosen_answer == 'متوافق':
user_rankings[model_name] = 1
process_rankings(user_rankings)
return "سجلنا ردك، ما قصرت =)"
# Create three dropdowns for each question for 1st, 2nd, and 3rd choices
inputs = []
with gr.Blocks(css=css) as demo:
with gr.Row():
with gr.Column():
outptus= reload_components()
out_text = gr.Markdown("", rtl = True)
gr.Button("Submit").click(
fn=rank_fluency,
inputs=outptus[1:],
outputs=out_text
).then(
fn=reload_components,
outputs = outptus
)
gr.Button("Skip").click(
fn=reload_components,
outputs=outptus
)
return demo
questions = get_questions_and_answers()
iface = rank_interface()
iface.launch(share = True)