Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -6,7 +6,7 @@ import os, random, tempfile, json
|
|
| 6 |
import re
|
| 7 |
import threading
|
| 8 |
import uuid
|
| 9 |
-
import csv # ✅
|
| 10 |
|
| 11 |
# --- API設定 ---
|
| 12 |
API_KEY = os.getenv("API_KEY")
|
|
@@ -138,9 +138,8 @@ def _parse_choices(raw):
|
|
| 138 |
return [s]
|
| 139 |
|
| 140 |
def _format_question_block(question, choices_list):
|
| 141 |
-
# choices を A-D に整形し
|
| 142 |
labels = ["A", "B", "C", "D"]
|
| 143 |
-
# 4つ未満/超過でも崩れにくくする
|
| 144 |
choices = list(choices_list)[:4]
|
| 145 |
while len(choices) < 4:
|
| 146 |
choices.append("")
|
|
@@ -151,6 +150,10 @@ def _format_question_block(question, choices_list):
|
|
| 151 |
for lab, opt in zip(labels, choices):
|
| 152 |
opt_s = "" if opt is None else str(opt).strip()
|
| 153 |
lines.append(f"{lab}. {opt_s}")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 154 |
return "\n".join(lines)
|
| 155 |
|
| 156 |
# --- 自動難易度調整 ---
|
|
@@ -253,9 +256,13 @@ def next_step(prev_level, user_answer, question_text, passage_text,
|
|
| 253 |
submit_time = datetime.utcnow() + timedelta(hours=9)
|
| 254 |
state["question_count"] += 1
|
| 255 |
|
| 256 |
-
# ✅
|
| 257 |
-
|
| 258 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 259 |
|
| 260 |
new_level = adaptive_test(prev_level, correct)
|
| 261 |
|
|
@@ -332,7 +339,10 @@ with gr.Blocks() as demo:
|
|
| 332 |
|
| 333 |
text_display = gr.Textbox(label="Reading Passage", lines=15, interactive=False)
|
| 334 |
question_display = gr.Textbox(label="Question", lines=6, interactive=False)
|
| 335 |
-
|
|
|
|
|
|
|
|
|
|
| 336 |
submit_btn = gr.Button("Submit Answer")
|
| 337 |
|
| 338 |
feedback_display = gr.Markdown()
|
|
@@ -402,6 +412,5 @@ with gr.Blocks() as demo:
|
|
| 402 |
outputs=[dl_file, dl_msg]
|
| 403 |
)
|
| 404 |
|
| 405 |
-
|
| 406 |
-
# ✅ 追加:queue(同時アクセス耐性UP)
|
| 407 |
demo.queue(max_size=64).launch()
|
|
|
|
| 6 |
import re
|
| 7 |
import threading
|
| 8 |
import uuid
|
| 9 |
+
import csv # ✅ csv.writer用
|
| 10 |
|
| 11 |
# --- API設定 ---
|
| 12 |
API_KEY = os.getenv("API_KEY")
|
|
|
|
| 138 |
return [s]
|
| 139 |
|
| 140 |
def _format_question_block(question, choices_list):
|
| 141 |
+
# ✅ choices を A-D に整形し、共通選択肢「わからない」を追加(E)
|
| 142 |
labels = ["A", "B", "C", "D"]
|
|
|
|
| 143 |
choices = list(choices_list)[:4]
|
| 144 |
while len(choices) < 4:
|
| 145 |
choices.append("")
|
|
|
|
| 150 |
for lab, opt in zip(labels, choices):
|
| 151 |
opt_s = "" if opt is None else str(opt).strip()
|
| 152 |
lines.append(f"{lab}. {opt_s}")
|
| 153 |
+
|
| 154 |
+
# ✅ 共通選択肢を表示にも追加
|
| 155 |
+
lines.append("E. わからない")
|
| 156 |
+
|
| 157 |
return "\n".join(lines)
|
| 158 |
|
| 159 |
# --- 自動難易度調整 ---
|
|
|
|
| 256 |
submit_time = datetime.utcnow() + timedelta(hours=9)
|
| 257 |
state["question_count"] += 1
|
| 258 |
|
| 259 |
+
# ✅ 「わからない」は例外なく不正解
|
| 260 |
+
if str(user_answer).strip() == "わからない":
|
| 261 |
+
correct = False
|
| 262 |
+
else:
|
| 263 |
+
# ✅ CSVから読んだ正解(A/B/C/D)と比較(AI採点はしない)
|
| 264 |
+
correct_answer = (state.get("current_answer") or "").strip().upper()
|
| 265 |
+
correct = (str(user_answer).strip().upper() == correct_answer)
|
| 266 |
|
| 267 |
new_level = adaptive_test(prev_level, correct)
|
| 268 |
|
|
|
|
| 339 |
|
| 340 |
text_display = gr.Textbox(label="Reading Passage", lines=15, interactive=False)
|
| 341 |
question_display = gr.Textbox(label="Question", lines=6, interactive=False)
|
| 342 |
+
|
| 343 |
+
# ✅ 変更:共通選択肢「わからない」を追加
|
| 344 |
+
user_answer = gr.Radio(["A", "B", "C", "D", "わからない"], label="Your Answer")
|
| 345 |
+
|
| 346 |
submit_btn = gr.Button("Submit Answer")
|
| 347 |
|
| 348 |
feedback_display = gr.Markdown()
|
|
|
|
| 412 |
outputs=[dl_file, dl_msg]
|
| 413 |
)
|
| 414 |
|
| 415 |
+
# ✅ queue(同時アクセス耐性UP)
|
|
|
|
| 416 |
demo.queue(max_size=64).launch()
|