Commit
Β·
485f265
1
Parent(s):
5033c67
feat: Implement automatic student ID generation using TSID, add functionality for generating new IDs, and update UI components to reflect changes. Enhance session initialization to handle empty student IDs.
Browse files
app.py
CHANGED
|
@@ -44,6 +44,12 @@ except Exception as e:
|
|
| 44 |
# Gemini νκ°κΈ° μ΄κΈ°ν
|
| 45 |
evaluator = GeminiEvaluator()
|
| 46 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 47 |
|
| 48 |
# ===== EMR HTML μμ± ν¨μλ€ (κΈ°μ‘΄ λ‘μ§ μ¬μ¬μ©) =====
|
| 49 |
|
|
@@ -636,11 +642,14 @@ with gr.Blocks(title="κ°νΈ μΈμμΈκ³ κ΅μ‘ νλ«νΌ", theme=gr.themes.Sof
|
|
| 636 |
with gr.Row():
|
| 637 |
with gr.Column():
|
| 638 |
student_id_input = gr.Textbox(
|
| 639 |
-
label="π€ νμ ID",
|
| 640 |
-
|
| 641 |
-
|
|
|
|
| 642 |
)
|
| 643 |
-
|
|
|
|
|
|
|
| 644 |
|
| 645 |
# ν ꡬμ±
|
| 646 |
with gr.Tabs() as tabs:
|
|
@@ -738,6 +747,24 @@ with gr.Blocks(title="κ°νΈ μΈμμΈκ³ κ΅μ‘ νλ«νΌ", theme=gr.themes.Sof
|
|
| 738 |
|
| 739 |
# ===== μ΄λ²€νΈ νΈλ€λ¬ =====
|
| 740 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 741 |
def initialize_session(student_id):
|
| 742 |
"""μΈμ
μ΄κΈ°ν"""
|
| 743 |
is_admin = (student_id == "admin")
|
|
@@ -746,6 +773,10 @@ with gr.Blocks(title="κ°νΈ μΈμμΈκ³ κ΅μ‘ νλ«νΌ", theme=gr.themes.Sof
|
|
| 746 |
# κ΄λ¦¬μμΈ κ²½μ° κ΄λ¦¬μ ν νμ
|
| 747 |
tab_visibility = gr.update(visible=is_admin)
|
| 748 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 749 |
return student_id, role, tab_visibility, gr.update(value=f"νμν©λλ€, {student_id}λ!")
|
| 750 |
|
| 751 |
start_btn.click(
|
|
@@ -844,14 +875,19 @@ with gr.Blocks(title="κ°νΈ μΈμμΈκ³ κ΅μ‘ νλ«νΌ", theme=gr.themes.Sof
|
|
| 844 |
def initialize_app():
|
| 845 |
"""μ± μ΄κΈ° λ‘λ μ μ€ν"""
|
| 846 |
default_scenario = "S001_D0_ER_WARD"
|
| 847 |
-
scenario, patient, emr_html = load_scenario_data(default_scenario)
|
| 848 |
|
| 849 |
-
|
| 850 |
-
|
| 851 |
-
|
| 852 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 853 |
else:
|
| 854 |
-
return
|
| 855 |
|
| 856 |
# μ΄κΈ° λ‘λ
|
| 857 |
app.load(
|
|
|
|
| 44 |
# Gemini νκ°κΈ° μ΄κΈ°ν
|
| 45 |
evaluator = GeminiEvaluator()
|
| 46 |
|
| 47 |
+
# μ΄κΈ° νμ ID μμ± (TSID κΈ°λ°)
|
| 48 |
+
from tsidpy import TSID
|
| 49 |
+
|
| 50 |
+
tsid = TSID.create()
|
| 51 |
+
initial_student_id = f"student_{tsid.to_string()}"
|
| 52 |
+
|
| 53 |
|
| 54 |
# ===== EMR HTML μμ± ν¨μλ€ (κΈ°μ‘΄ λ‘μ§ μ¬μ¬μ©) =====
|
| 55 |
|
|
|
|
| 642 |
with gr.Row():
|
| 643 |
with gr.Column():
|
| 644 |
student_id_input = gr.Textbox(
|
| 645 |
+
label="π€ νμ ID (μλ μμ±λ¨)",
|
| 646 |
+
value=initial_student_id,
|
| 647 |
+
interactive=False,
|
| 648 |
+
info="μλμΌλ‘ μμ±λ κ³ μ IDμ
λλ€. 'μ ID μμ±' λ²νΌμΌλ‘ μ IDλ₯Ό λ°μ μ μμ΅λλ€."
|
| 649 |
)
|
| 650 |
+
with gr.Row():
|
| 651 |
+
generate_id_btn = gr.Button("π μ ID μμ±", variant="secondary", size="sm")
|
| 652 |
+
start_btn = gr.Button("μμνκΈ°", variant="primary")
|
| 653 |
|
| 654 |
# ν ꡬμ±
|
| 655 |
with gr.Tabs() as tabs:
|
|
|
|
| 747 |
|
| 748 |
# ===== μ΄λ²€νΈ νΈλ€λ¬ =====
|
| 749 |
|
| 750 |
+
def generate_student_id():
|
| 751 |
+
"""TSID κΈ°λ° νμ ID μμ±"""
|
| 752 |
+
from tsidpy import TSID
|
| 753 |
+
tsid = TSID.create()
|
| 754 |
+
student_id = f"student_{tsid.to_string()}"
|
| 755 |
+
return student_id
|
| 756 |
+
|
| 757 |
+
def update_student_id():
|
| 758 |
+
"""μ νμ ID μμ±"""
|
| 759 |
+
new_id = generate_student_id()
|
| 760 |
+
return new_id
|
| 761 |
+
|
| 762 |
+
# μ ID μμ± λ²νΌ
|
| 763 |
+
generate_id_btn.click(
|
| 764 |
+
fn=update_student_id,
|
| 765 |
+
outputs=[student_id_input]
|
| 766 |
+
)
|
| 767 |
+
|
| 768 |
def initialize_session(student_id):
|
| 769 |
"""μΈμ
μ΄κΈ°ν"""
|
| 770 |
is_admin = (student_id == "admin")
|
|
|
|
| 773 |
# κ΄λ¦¬μμΈ κ²½μ° κ΄λ¦¬μ ν νμ
|
| 774 |
tab_visibility = gr.update(visible=is_admin)
|
| 775 |
|
| 776 |
+
# νμ IDκ° λΉμ΄μμΌλ©΄ μμ±
|
| 777 |
+
if not student_id or student_id.strip() == "":
|
| 778 |
+
student_id = generate_student_id()
|
| 779 |
+
|
| 780 |
return student_id, role, tab_visibility, gr.update(value=f"νμν©λλ€, {student_id}λ!")
|
| 781 |
|
| 782 |
start_btn.click(
|
|
|
|
| 875 |
def initialize_app():
|
| 876 |
"""μ± μ΄κΈ° λ‘λ μ μ€ν"""
|
| 877 |
default_scenario = "S001_D0_ER_WARD"
|
|
|
|
| 878 |
|
| 879 |
+
# Supabase μλΉμ€κ° μμΌλ©΄ μλλ¦¬μ€ λ°μ΄ν° λ‘λ
|
| 880 |
+
if supabase_service:
|
| 881 |
+
scenario, patient, emr_html = load_scenario_data(default_scenario)
|
| 882 |
+
|
| 883 |
+
if scenario:
|
| 884 |
+
# κΈ°λ³Έ μλλ¦¬μ€ μ 보 νμ
|
| 885 |
+
scenario_info = f"**νμ¬ μλ리μ€**: {scenario.title}"
|
| 886 |
+
return emr_html, default_scenario, scenario_info
|
| 887 |
+
else:
|
| 888 |
+
return emr_html, default_scenario, "**νμ¬ μλ리μ€**: μ νλμ§ μμ"
|
| 889 |
else:
|
| 890 |
+
return "", default_scenario, "**νμ¬ μλ리μ€**: μ νλμ§ μμ"
|
| 891 |
|
| 892 |
# μ΄κΈ° λ‘λ
|
| 893 |
app.load(
|