Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -45,6 +45,7 @@ LOG_COLUMNS = [
|
|
| 45 |
"passage_id",
|
| 46 |
"original_level",
|
| 47 |
"flesch_score", # ★追加:Group1=orig_lev, Group2=rewritten fre
|
|
|
|
| 48 |
"action_time",
|
| 49 |
"action_type",
|
| 50 |
"page_text",
|
|
@@ -246,7 +247,6 @@ def extract_main_body_llm(text: str) -> str:
|
|
| 246 |
"""
|
| 247 |
prompt = f"""
|
| 248 |
Extract ONLY the main body text from the following passage.
|
| 249 |
-
|
| 250 |
Rules:
|
| 251 |
- Completely EXCLUDE titles, headings, chapter labels, author names, source information,
|
| 252 |
footnotes, annotations, introductions, and any non-body content.
|
|
@@ -256,7 +256,6 @@ Rules:
|
|
| 256 |
- Output only the extracted main body text.
|
| 257 |
- Do not include explanations, comments, or metadata.
|
| 258 |
- Do not include [TEXT START] and [TEXT END] in the output.
|
| 259 |
-
|
| 260 |
[TEXT START]
|
| 261 |
{text}
|
| 262 |
[TEXT END]
|
|
@@ -395,6 +394,7 @@ def start_test(student_id, level_input, group_input, session_state):
|
|
| 395 |
"passage_id": None,
|
| 396 |
"original_level": None,
|
| 397 |
"flesch_score": None,
|
|
|
|
| 398 |
"action_time": now,
|
| 399 |
"action_type": action,
|
| 400 |
"page_text": None
|
|
@@ -431,6 +431,7 @@ def start_test(student_id, level_input, group_input, session_state):
|
|
| 431 |
"passage_id": None,
|
| 432 |
"original_level": None,
|
| 433 |
"flesch_score": None,
|
|
|
|
| 434 |
"action_time": now,
|
| 435 |
"action_type": action,
|
| 436 |
"page_text": None
|
|
@@ -484,6 +485,8 @@ def start_test(student_id, level_input, group_input, session_state):
|
|
| 484 |
next_upd = gr.update(interactive=True, visible=True)
|
| 485 |
finish_upd = gr.update(interactive=False, visible=False)
|
| 486 |
|
|
|
|
|
|
|
| 487 |
now2 = (datetime.utcnow() + timedelta(hours=9)).isoformat()
|
| 488 |
save_log({
|
| 489 |
"user_id": user_id,
|
|
@@ -492,6 +495,7 @@ def start_test(student_id, level_input, group_input, session_state):
|
|
| 492 |
"passage_id": pid,
|
| 493 |
"original_level": orig_lev,
|
| 494 |
"flesch_score": measured_fre, # ★追加
|
|
|
|
| 495 |
"action_time": now2,
|
| 496 |
"action_type": "page_displayed_1",
|
| 497 |
"page_text": pages[0]
|
|
@@ -501,7 +505,8 @@ def start_test(student_id, level_input, group_input, session_state):
|
|
| 501 |
"user_id": user_id,
|
| 502 |
"level": level,
|
| 503 |
"group": group,
|
| 504 |
-
"used_passages": list(used_passages_set)
|
|
|
|
| 505 |
}
|
| 506 |
|
| 507 |
return (
|
|
@@ -530,6 +535,7 @@ def next_page(pages_json, current_page, total_pages, pid, orig_lev, session_stat
|
|
| 530 |
user_id = session_state.get("user_id")
|
| 531 |
level = session_state.get("level")
|
| 532 |
group = session_state.get("group")
|
|
|
|
| 533 |
|
| 534 |
now = (datetime.utcnow() + timedelta(hours=9)).isoformat()
|
| 535 |
save_log({
|
|
@@ -539,6 +545,7 @@ def next_page(pages_json, current_page, total_pages, pid, orig_lev, session_stat
|
|
| 539 |
"passage_id": pid,
|
| 540 |
"original_level": orig_lev,
|
| 541 |
"flesch_score": "", # ★列維持
|
|
|
|
| 542 |
"action_time": now,
|
| 543 |
"action_type": "next_pushed",
|
| 544 |
"page_text": None
|
|
@@ -562,6 +569,7 @@ def next_page(pages_json, current_page, total_pages, pid, orig_lev, session_stat
|
|
| 562 |
"passage_id": pid,
|
| 563 |
"original_level": orig_lev,
|
| 564 |
"flesch_score": "", # ★列維持
|
|
|
|
| 565 |
"action_time": now2,
|
| 566 |
"action_type": f"page_displayed_{new_page+1}",
|
| 567 |
"page_text": pages[new_page]
|
|
@@ -595,6 +603,7 @@ def prev_page(pages_json, current_page, total_pages, pid, orig_lev, session_stat
|
|
| 595 |
user_id = session_state.get("user_id")
|
| 596 |
level = session_state.get("level")
|
| 597 |
group = session_state.get("group")
|
|
|
|
| 598 |
|
| 599 |
now = (datetime.utcnow() + timedelta(hours=9)).isoformat()
|
| 600 |
save_log({
|
|
@@ -604,6 +613,7 @@ def prev_page(pages_json, current_page, total_pages, pid, orig_lev, session_stat
|
|
| 604 |
"passage_id": pid,
|
| 605 |
"original_level": orig_lev,
|
| 606 |
"flesch_score": "", # ★列維持
|
|
|
|
| 607 |
"action_time": now,
|
| 608 |
"action_type": "prev_pushed",
|
| 609 |
"page_text": None
|
|
@@ -632,6 +642,7 @@ def prev_page(pages_json, current_page, total_pages, pid, orig_lev, session_stat
|
|
| 632 |
"passage_id": pid,
|
| 633 |
"original_level": orig_lev,
|
| 634 |
"flesch_score": "", # ★列維持
|
|
|
|
| 635 |
"action_time": now2,
|
| 636 |
"action_type": f"page_displayed_{new_page+1}",
|
| 637 |
"page_text": pages[new_page]
|
|
@@ -654,6 +665,7 @@ def finish_or_retire(pages_json, current_page, pid, orig_lev, action, session_st
|
|
| 654 |
level = session_state.get("level")
|
| 655 |
group = session_state.get("group")
|
| 656 |
used_passages_set = set(session_state.get("used_passages", []))
|
|
|
|
| 657 |
|
| 658 |
pages = json.loads(pages_json)
|
| 659 |
now = (datetime.utcnow() + timedelta(hours=9)).isoformat()
|
|
@@ -665,6 +677,7 @@ def finish_or_retire(pages_json, current_page, pid, orig_lev, action, session_st
|
|
| 665 |
"passage_id": pid,
|
| 666 |
"original_level": orig_lev,
|
| 667 |
"flesch_score": "", # ★列維持
|
|
|
|
| 668 |
"action_time": now,
|
| 669 |
"action_type": action,
|
| 670 |
"page_text": None
|
|
@@ -708,6 +721,8 @@ def finish_or_retire(pages_json, current_page, pid, orig_lev, action, session_st
|
|
| 708 |
next_upd = gr.update(interactive=True, visible=True)
|
| 709 |
finish_upd = gr.update(interactive=False, visible=False)
|
| 710 |
|
|
|
|
|
|
|
| 711 |
now2 = (datetime.utcnow() + timedelta(hours=9)).isoformat()
|
| 712 |
save_log({
|
| 713 |
"user_id": user_id,
|
|
@@ -716,6 +731,7 @@ def finish_or_retire(pages_json, current_page, pid, orig_lev, action, session_st
|
|
| 716 |
"passage_id": new_pid,
|
| 717 |
"original_level": new_orig_lev,
|
| 718 |
"flesch_score": measured_fre, # ★追加
|
|
|
|
| 719 |
"action_time": now2,
|
| 720 |
"action_type": "page_displayed_1",
|
| 721 |
"page_text": new_pages[0]
|
|
@@ -725,7 +741,8 @@ def finish_or_retire(pages_json, current_page, pid, orig_lev, action, session_st
|
|
| 725 |
"user_id": user_id,
|
| 726 |
"level": level,
|
| 727 |
"group": group,
|
| 728 |
-
"used_passages": list(used_passages_set)
|
|
|
|
| 729 |
}
|
| 730 |
|
| 731 |
return (
|
|
@@ -901,7 +918,7 @@ custom_css = """
|
|
| 901 |
with gr.Blocks(css=custom_css) as demo:
|
| 902 |
gr.Markdown("# 📚 Reading Exercise")
|
| 903 |
|
| 904 |
-
session_state = gr.State({"user_id": None, "level": None, "group": 2, "used_passages": []})
|
| 905 |
|
| 906 |
student_id_input = gr.Textbox(label="Student ID")
|
| 907 |
|
|
|
|
| 45 |
"passage_id",
|
| 46 |
"original_level",
|
| 47 |
"flesch_score", # ★追加:Group1=orig_lev, Group2=rewritten fre
|
| 48 |
+
"reading_order", # ★追加:そのユーザーが何番目の教材を読んでいるか
|
| 49 |
"action_time",
|
| 50 |
"action_type",
|
| 51 |
"page_text",
|
|
|
|
| 247 |
"""
|
| 248 |
prompt = f"""
|
| 249 |
Extract ONLY the main body text from the following passage.
|
|
|
|
| 250 |
Rules:
|
| 251 |
- Completely EXCLUDE titles, headings, chapter labels, author names, source information,
|
| 252 |
footnotes, annotations, introductions, and any non-body content.
|
|
|
|
| 256 |
- Output only the extracted main body text.
|
| 257 |
- Do not include explanations, comments, or metadata.
|
| 258 |
- Do not include [TEXT START] and [TEXT END] in the output.
|
|
|
|
| 259 |
[TEXT START]
|
| 260 |
{text}
|
| 261 |
[TEXT END]
|
|
|
|
| 394 |
"passage_id": None,
|
| 395 |
"original_level": None,
|
| 396 |
"flesch_score": None,
|
| 397 |
+
"reading_order": 0, # ★追加
|
| 398 |
"action_time": now,
|
| 399 |
"action_type": action,
|
| 400 |
"page_text": None
|
|
|
|
| 431 |
"passage_id": None,
|
| 432 |
"original_level": None,
|
| 433 |
"flesch_score": None,
|
| 434 |
+
"reading_order": 0, # ★追加(教材未表示なので0)
|
| 435 |
"action_time": now,
|
| 436 |
"action_type": action,
|
| 437 |
"page_text": None
|
|
|
|
| 485 |
next_upd = gr.update(interactive=True, visible=True)
|
| 486 |
finish_upd = gr.update(interactive=False, visible=False)
|
| 487 |
|
| 488 |
+
reading_order = 1 # ★追加:このユーザーの最初の教材は1番目
|
| 489 |
+
|
| 490 |
now2 = (datetime.utcnow() + timedelta(hours=9)).isoformat()
|
| 491 |
save_log({
|
| 492 |
"user_id": user_id,
|
|
|
|
| 495 |
"passage_id": pid,
|
| 496 |
"original_level": orig_lev,
|
| 497 |
"flesch_score": measured_fre, # ★追加
|
| 498 |
+
"reading_order": reading_order, # ★追加
|
| 499 |
"action_time": now2,
|
| 500 |
"action_type": "page_displayed_1",
|
| 501 |
"page_text": pages[0]
|
|
|
|
| 505 |
"user_id": user_id,
|
| 506 |
"level": level,
|
| 507 |
"group": group,
|
| 508 |
+
"used_passages": list(used_passages_set),
|
| 509 |
+
"reading_order": reading_order # ★追加
|
| 510 |
}
|
| 511 |
|
| 512 |
return (
|
|
|
|
| 535 |
user_id = session_state.get("user_id")
|
| 536 |
level = session_state.get("level")
|
| 537 |
group = session_state.get("group")
|
| 538 |
+
reading_order = session_state.get("reading_order", 1) # ★追加
|
| 539 |
|
| 540 |
now = (datetime.utcnow() + timedelta(hours=9)).isoformat()
|
| 541 |
save_log({
|
|
|
|
| 545 |
"passage_id": pid,
|
| 546 |
"original_level": orig_lev,
|
| 547 |
"flesch_score": "", # ★列維持
|
| 548 |
+
"reading_order": reading_order, # ★追加
|
| 549 |
"action_time": now,
|
| 550 |
"action_type": "next_pushed",
|
| 551 |
"page_text": None
|
|
|
|
| 569 |
"passage_id": pid,
|
| 570 |
"original_level": orig_lev,
|
| 571 |
"flesch_score": "", # ★列維持
|
| 572 |
+
"reading_order": reading_order, # ★追加
|
| 573 |
"action_time": now2,
|
| 574 |
"action_type": f"page_displayed_{new_page+1}",
|
| 575 |
"page_text": pages[new_page]
|
|
|
|
| 603 |
user_id = session_state.get("user_id")
|
| 604 |
level = session_state.get("level")
|
| 605 |
group = session_state.get("group")
|
| 606 |
+
reading_order = session_state.get("reading_order", 1) # ★追加
|
| 607 |
|
| 608 |
now = (datetime.utcnow() + timedelta(hours=9)).isoformat()
|
| 609 |
save_log({
|
|
|
|
| 613 |
"passage_id": pid,
|
| 614 |
"original_level": orig_lev,
|
| 615 |
"flesch_score": "", # ★列維持
|
| 616 |
+
"reading_order": reading_order, # ★追加
|
| 617 |
"action_time": now,
|
| 618 |
"action_type": "prev_pushed",
|
| 619 |
"page_text": None
|
|
|
|
| 642 |
"passage_id": pid,
|
| 643 |
"original_level": orig_lev,
|
| 644 |
"flesch_score": "", # ★列維持
|
| 645 |
+
"reading_order": reading_order, # ★追加
|
| 646 |
"action_time": now2,
|
| 647 |
"action_type": f"page_displayed_{new_page+1}",
|
| 648 |
"page_text": pages[new_page]
|
|
|
|
| 665 |
level = session_state.get("level")
|
| 666 |
group = session_state.get("group")
|
| 667 |
used_passages_set = set(session_state.get("used_passages", []))
|
| 668 |
+
reading_order = int(session_state.get("reading_order", 1)) # ★追加
|
| 669 |
|
| 670 |
pages = json.loads(pages_json)
|
| 671 |
now = (datetime.utcnow() + timedelta(hours=9)).isoformat()
|
|
|
|
| 677 |
"passage_id": pid,
|
| 678 |
"original_level": orig_lev,
|
| 679 |
"flesch_score": "", # ★列維持
|
| 680 |
+
"reading_order": reading_order, # ★追加
|
| 681 |
"action_time": now,
|
| 682 |
"action_type": action,
|
| 683 |
"page_text": None
|
|
|
|
| 721 |
next_upd = gr.update(interactive=True, visible=True)
|
| 722 |
finish_upd = gr.update(interactive=False, visible=False)
|
| 723 |
|
| 724 |
+
new_reading_order = reading_order + 1 # ★追加:次の教材なので+1
|
| 725 |
+
|
| 726 |
now2 = (datetime.utcnow() + timedelta(hours=9)).isoformat()
|
| 727 |
save_log({
|
| 728 |
"user_id": user_id,
|
|
|
|
| 731 |
"passage_id": new_pid,
|
| 732 |
"original_level": new_orig_lev,
|
| 733 |
"flesch_score": measured_fre, # ★追加
|
| 734 |
+
"reading_order": new_reading_order, # ★追加
|
| 735 |
"action_time": now2,
|
| 736 |
"action_type": "page_displayed_1",
|
| 737 |
"page_text": new_pages[0]
|
|
|
|
| 741 |
"user_id": user_id,
|
| 742 |
"level": level,
|
| 743 |
"group": group,
|
| 744 |
+
"used_passages": list(used_passages_set),
|
| 745 |
+
"reading_order": new_reading_order # ★追加
|
| 746 |
}
|
| 747 |
|
| 748 |
return (
|
|
|
|
| 918 |
with gr.Blocks(css=custom_css) as demo:
|
| 919 |
gr.Markdown("# 📚 Reading Exercise")
|
| 920 |
|
| 921 |
+
session_state = gr.State({"user_id": None, "level": None, "group": 2, "used_passages": [], "reading_order": 0}) # ★追加
|
| 922 |
|
| 923 |
student_id_input = gr.Textbox(label="Student ID")
|
| 924 |
|