LearningnRunning commited on
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
Files changed (1) hide show
  1. app.py +46 -10
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
- placeholder="예: student001 (κ΄€λ¦¬μžλŠ” 'admin' μž…λ ₯)",
641
- value="student001"
 
642
  )
643
- start_btn = gr.Button("μ‹œμž‘ν•˜κΈ°", variant="primary")
 
 
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
- if scenario:
850
- # κΈ°λ³Έ μ‹œλ‚˜λ¦¬μ˜€ 정보 ν‘œμ‹œ
851
- scenario_info = f"**ν˜„μž¬ μ‹œλ‚˜λ¦¬μ˜€**: {scenario.title}"
852
- return emr_html, default_scenario, scenario_info
 
 
 
 
 
 
853
  else:
854
- return emr_html, default_scenario, "**ν˜„μž¬ μ‹œλ‚˜λ¦¬μ˜€**: μ„ νƒλ˜μ§€ μ•ŠμŒ"
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(