vladyslav commited on
Commit
074b318
·
1 Parent(s): c7b86ea

Example version of testing

Browse files
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ venv/
2
+ .env
app.py ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+ import gradio as gr
4
+
5
+ MODELS = {
6
+ "GPT-4o": "gpt-4o",
7
+ "Gemini 1.5 Pro": "gemini-1.5-pro",
8
+ "Claude 3.5 Sonnet": "claude-3-5-sonnet-20241022"
9
+ }
10
+
11
+ MODELS_PATH = {
12
+ "GPT-4o": "gpt_4o",
13
+ "Gemini 1.5 Pro": "gemini_1_5_pro",
14
+ "Claude 3.5 Sonnet": "claude_3_5_sonnet"
15
+ }
16
+
17
+ BOOKS = {
18
+ "Іван Нечуйлевицький - Кайдашева Сім'я": "nechuy-levytskyy-ivan-semenovych-kaydasheva-simia.json",
19
+ }
20
+
21
+ questions_data = []
22
+ current_question_index = 0
23
+ answers_log = [] # Log for saving answers
24
+
25
+
26
+ def load_questions(model, book):
27
+ global questions_data, current_question_index
28
+ current_question_index = 0
29
+ answers_log.clear()
30
+
31
+ if not model or not book:
32
+ return "Будь ласка, оберіть модель і книгу.", []
33
+
34
+ model_path = MODELS_PATH[model]
35
+ book_filename = BOOKS[book]
36
+ file_path = os.path.join("questions", model_path, book_filename)
37
+
38
+ if not os.path.exists(file_path):
39
+ return f"Файл за шляхом {file_path} не знайдено.", []
40
+
41
+ with open(file_path, "r", encoding="utf-8") as file:
42
+ questions_data = json.load(file)
43
+
44
+ if questions_data:
45
+ first_question = questions_data[current_question_index]
46
+ question_text = f"**Питання:** {first_question['question']}"
47
+ answers = [answer['answer'] for answer in first_question['answers']]
48
+ return question_text, answers
49
+ else:
50
+ return "У файлі немає питань.", []
51
+
52
+
53
+ def get_next_question(selected_answer):
54
+ global current_question_index, answers_log
55
+
56
+ # Writing answer in log
57
+ answers_log.append({
58
+ "selected": selected_answer,
59
+ "isCorrect": any(answer['answer'] == selected_answer and answer['isCorrect'] for answer in questions_data[current_question_index]['answers'])
60
+ })
61
+
62
+ # Move to the next question
63
+ current_question_index += 1
64
+ if current_question_index < len(questions_data):
65
+ next_question = questions_data[current_question_index]
66
+ question_text = f"**Питання:** {next_question['question']}"
67
+ answers = [answer['answer'] for answer in next_question['answers']]
68
+ return question_text, gr.update(choices=answers, interactive=True), gr.update(visible=True)
69
+ else:
70
+ # All questions are completed — summarizing
71
+ correct_answers_count = sum(1 for answer in answers_log if answer['isCorrect'])
72
+ total_questions = len(questions_data)
73
+ summary = f"# Усі питання пройдено.\n\n**Ви відповіли правильно на {correct_answers_count} з {total_questions} питань.**"
74
+ return summary, gr.update(visible=False), gr.update(visible=False)
75
+
76
+
77
+ with gr.Blocks() as demo:
78
+ with gr.Column():
79
+ gr.Markdown("# Оберіть модель та книгу, щоб завантажити питання")
80
+
81
+ model_radio = gr.Radio(list(MODELS.keys()), label="Оберіть модель")
82
+ book_radio = gr.Radio(list(BOOKS.keys()), label="Оберіть книгу")
83
+
84
+ load_button = gr.Button("Завантажити питання")
85
+ question_output = gr.Markdown(label="Питання")
86
+ answer_radio = gr.Radio([], label="Варіанти відповіді", interactive=True)
87
+ next_button = gr.Button("Наступне питання", visible=False)
88
+
89
+ def update_question(model, book):
90
+ question, answers = load_questions(model, book)
91
+ return question, gr.update(choices=answers, interactive=True), gr.update(visible=True)
92
+
93
+ load_button.click(
94
+ update_question,
95
+ inputs=[model_radio, book_radio],
96
+ outputs=[question_output, answer_radio, next_button]
97
+ )
98
+
99
+ next_button.click(
100
+ get_next_question,
101
+ inputs=[answer_radio],
102
+ outputs=[question_output, answer_radio, next_button]
103
+ )
104
+
105
+ if __name__ == "__main__":
106
+ demo.launch()
questions/gemini_1_5_pro/nechuy-levytskyy-ivan-semenovych-kaydasheva-simia.json ADDED
@@ -0,0 +1,222 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "question": "Який характер мала Мотря, за словами Лавріна?",
4
+ "textPart": "Мотря й гарна, й трохи бриклива, і в неї серце з перцем.",
5
+ "answers": [
6
+ {
7
+ "answer": "Гарна, трохи бриклива, з серцем з перцем.",
8
+ "isCorrect": true
9
+ },
10
+ {
11
+ "answer": "Тиха та сором'язлива.",
12
+ "isCorrect": false
13
+ },
14
+ {
15
+ "answer": "Весела та жартівлива.",
16
+ "isCorrect": false
17
+ },
18
+ {
19
+ "answer": "Сердита та сварлива.",
20
+ "isCorrect": false
21
+ }
22
+ ]
23
+ },
24
+ {
25
+ "question": "Чому Кайдашиха так детально вчила Мотрю розпалювати піч?",
26
+ "textPart": "— Мотре! Вставай, моя дитино, затопи в печі, та як будеш розкладать дрова, то поклади на двох полінах переклад, та вибирай, моє серденько, товстенький переклад, щоб дрова швидше розгорілись... Вона була рада, що взяла в свою хату добру робітницю, і почала залежуватись.",
27
+ "answers": [
28
+ {
29
+ "answer": "Кайдашиха хотіла, щоб Мотря робила всю роботу, а сама могла лінуватися.",
30
+ "isCorrect": true
31
+ },
32
+ {
33
+ "answer": "Кайдашиха дуже турбувалася про Мотрю і хотіла її навчити всьому.",
34
+ "isCorrect": false
35
+ },
36
+ {
37
+ "answer": "Кайдашиха боялася, що Мотря не вміє розпалювати піч і спалить хату.",
38
+ "isCorrect": false
39
+ },
40
+ {
41
+ "answer": "Кайдашиха хотіла перевірити, чи Мотря слухняна невістка.",
42
+ "isCorrect": false
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ "question": "Що сталося, коли Кайдашиха та Мотря почали сваритися через мотовило?",
48
+ "textPart": "Молодиці підняли гвалт. Чоловіки позбігались у хату. Їм здалось, що молодиці б’ються. Серед хати стояли свекруха й невістка і сіпали кожна до себе мотовило.",
49
+ "answers": [
50
+ {
51
+ "answer": "Чоловіки позбігалися в хату, думаючи, що вони б'ються.",
52
+ "isCorrect": true
53
+ },
54
+ {
55
+ "answer": "Вони помирилися та почали разом прясти.",
56
+ "isCorrect": false
57
+ },
58
+ {
59
+ "answer": "Кайдашиха віддала Мотрі мотовило.",
60
+ "isCorrect": false
61
+ },
62
+ {
63
+ "answer": "Мотря пішла до батьків.",
64
+ "isCorrect": false
65
+ }
66
+ ]
67
+ },
68
+ {
69
+ "question": "Як дівчина відповіла Лаврінові на питання про село?",
70
+ "textPart": "— Добривечір тобі, дівчино! Чи далеко звідсіль до села? — спитав Лаврін.\n— До якого села тобі треба? — спитала дівчина, і її голос рознісся, неначе в житі затуркотала горлиця.\n— До того села, звідкіля ти сама, — сказав Лаврін.\n— Не питай, бо швидко старий будеш, — сказала дівчина й осміхнулась.",
71
+ "answers": [
72
+ {
73
+ "answer": "«Не питай, бо швидко старий будеш»",
74
+ "isCorrect": true
75
+ },
76
+ {
77
+ "answer": "«Я з сусіднього села»",
78
+ "isCorrect": false
79
+ },
80
+ {
81
+ "answer": "«Дуже далеко»",
82
+ "isCorrect": false
83
+ },
84
+ {
85
+ "answer": "«Я не знаю»",
86
+ "isCorrect": false
87
+ }
88
+ ]
89
+ },
90
+ {
91
+ "question": "Що зробила Кайдашиха, коли побачила хату Балашів?",
92
+ "textPart": "Кайдашиха сиділа на возі й не хотіла злазити. Вона зовсім розсердилась.",
93
+ "answers": [
94
+ {
95
+ "answer": "Залишилась сидіти на возі, розсердившись.",
96
+ "isCorrect": true
97
+ },
98
+ {
99
+ "answer": "Зайшла в хату, посміхаючись.",
100
+ "isCorrect": false
101
+ },
102
+ {
103
+ "answer": "Почала сваритися з Балашем.",
104
+ "isCorrect": false
105
+ },
106
+ {
107
+ "answer": "Втекла назад до Семигор.",
108
+ "isCorrect": false
109
+ }
110
+ ]
111
+ },
112
+ {
113
+ "question": "Куди дуже хотіла піти Мелашка і чому?",
114
+ "textPart": "— Ой, пустіть мене, мамо, в Київ з бабою! — просилася Мелашка. — Я й зросла, а в Києві не була. Мене й господь не помилує на тому світі.",
115
+ "answers": [
116
+ {
117
+ "answer": "До Києва, бо там ще ніколи не була і боялася, що господь її не помилує.",
118
+ "isCorrect": true
119
+ },
120
+ {
121
+ "answer": "До Бієвець, бо сумувала за батьками.",
122
+ "isCorrect": false
123
+ },
124
+ {
125
+ "answer": "До попаді, щоб пополуднувати.",
126
+ "isCorrect": false
127
+ },
128
+ {
129
+ "answer": "На Западинці, до сватів.",
130
+ "isCorrect": false
131
+ }
132
+ ]
133
+ },
134
+ {
135
+ "question": "Чому Мелашка злякалась на цвинтарі та побігла до хати?",
136
+ "textPart": "На неї напав страх. Вона глянула ще раз вгору, і їй здалось, що хрести на церкві трусяться й коливаються, що коливається вся гора, от-от впаде на неї. І вона прожогом побігла з цвинтаря до хати.",
137
+ "answers": [
138
+ {
139
+ "answer": "Їй здалося, що Андріївська гора з церквою падає на неї.",
140
+ "isCorrect": true
141
+ },
142
+ {
143
+ "answer": "Вона побачила змію.",
144
+ "isCorrect": false
145
+ },
146
+ {
147
+ "answer": "Почався дощ.",
148
+ "isCorrect": false
149
+ },
150
+ {
151
+ "answer": "Вона почула крик.",
152
+ "isCorrect": false
153
+ }
154
+ ]
155
+ },
156
+ {
157
+ "question": "З якого міста Мелашка поверталася додому з ріднею?",
158
+ "textPart": "Другого дня Мелашка з ріднею вийшли з Києва.",
159
+ "answers": [
160
+ {
161
+ "answer": "З Києва",
162
+ "isCorrect": true
163
+ },
164
+ {
165
+ "answer": "З Богуслава",
166
+ "isCorrect": false
167
+ },
168
+ {
169
+ "answer": "З Бассарабії",
170
+ "isCorrect": false
171
+ },
172
+ {
173
+ "answer": "З Семигори",
174
+ "isCorrect": false
175
+ }
176
+ ]
177
+ },
178
+ {
179
+ "question": "Що Кайдашиха сказала про Мотрю, коли Карпо загадував Лаврінові йти на роботу?",
180
+ "textPart": "— Ану, Лавріне, бери заступа та йди на роботу, — загадував Карпо братові. — Піди вижени на роботу свою Мотрю, — промовила стара Кайдашиха.",
181
+ "answers": [
182
+ {
183
+ "answer": "Піди вижени на роботу свою Мотрю",
184
+ "isCorrect": true
185
+ },
186
+ {
187
+ "answer": "Нехай Мотря зостанеться вдома",
188
+ "isCorrect": false
189
+ },
190
+ {
191
+ "answer": "Мотря теж має йти на роботу",
192
+ "isCorrect": false
193
+ },
194
+ {
195
+ "answer": "Мотря не повинна працювати",
196
+ "isCorrect": false
197
+ }
198
+ ]
199
+ },
200
+ {
201
+ "question": "Чому Кайдашиха схопилася за голову на городі?",
202
+ "textPart": "Мелашка посадила огірки коло самого тину. Огірки зійшли, як зелене руно. Показались ранні огірочки. Мотрин півень перескочив через тин та давай вибирати Мел��шчині огірки. Півень сокотав та скликав курей. Всі Мотрині кури перелетіли через тин в огірки. За курами полізли крізь тин курчата. Квочка вигребла яму саме серед огудиння. Стара Кайдашиха вийшла на город, угляділа таку шкоду та аж за голову вхопилась.",
203
+ "answers": [
204
+ {
205
+ "answer": "Бо побачила, що Мотрині кури клюють Мелашчині огірки.",
206
+ "isCorrect": true
207
+ },
208
+ {
209
+ "answer": "Бо загубила свою хустку",
210
+ "isCorrect": false
211
+ },
212
+ {
213
+ "answer": "Бо побачила змію",
214
+ "isCorrect": false
215
+ },
216
+ {
217
+ "answer": "Бо їй стало погано.",
218
+ "isCorrect": false
219
+ }
220
+ ]
221
+ }
222
+ ]
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ protobuf==5.29.3
2
+ gradio==5.16.0
utils.py ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ from typing import List, Dict
3
+
4
+
5
+ def read_json_to_dict_array(file_path: str) -> List[Dict]:
6
+ """
7
+ Read a JSON file and convert its content to an array of dictionaries.
8
+
9
+ :param file_path: Path to JSON file.
10
+ :return: Array or dicts.
11
+ """
12
+ try:
13
+ with open(file_path, 'r', encoding='utf-8') as f:
14
+ data = json.load(f)
15
+ if isinstance(data, list):
16
+ return data
17
+ else:
18
+ raise ValueError(f"Wrong data type. Expected list. Got: {str(type(data))}")
19
+ except FileNotFoundError:
20
+ print(f"File '{file_path}' not found")
21
+ except json.JSONDecodeError as e:
22
+ print(f"Failed to decode JSON: {e}")
23
+ return []