Commit
Β·
09ab9b3
1
Parent(s):
485f265
feat: Update student ID handling in app.py to improve ID generation and session initialization. Modify Supabase schema to accommodate larger student ID fields across relevant tables.
Browse files- app.py +17 -26
- supabase_init.sql +5 -5
app.py
CHANGED
|
@@ -648,8 +648,7 @@ with gr.Blocks(title="κ°νΈ μΈμμΈκ³ κ΅μ‘ νλ«νΌ", theme=gr.themes.Sof
|
|
| 648 |
info="μλμΌλ‘ μμ±λ κ³ μ IDμ
λλ€. 'μ ID μμ±' λ²νΌμΌλ‘ μ IDλ₯Ό λ°μ μ μμ΅λλ€."
|
| 649 |
)
|
| 650 |
with gr.Row():
|
| 651 |
-
generate_id_btn = gr.Button("π μ ID μμ±", variant="secondary"
|
| 652 |
-
start_btn = gr.Button("μμνκΈ°", variant="primary")
|
| 653 |
|
| 654 |
# ν ꡬμ±
|
| 655 |
with gr.Tabs() as tabs:
|
|
@@ -759,30 +758,19 @@ with gr.Blocks(title="κ°νΈ μΈμμΈκ³ κ΅μ‘ νλ«νΌ", theme=gr.themes.Sof
|
|
| 759 |
new_id = generate_student_id()
|
| 760 |
return new_id
|
| 761 |
|
| 762 |
-
# μ ID μμ± λ²νΌ
|
| 763 |
-
|
| 764 |
-
|
| 765 |
-
|
| 766 |
-
|
| 767 |
-
|
| 768 |
-
def initialize_session(student_id):
|
| 769 |
-
"""μΈμ
μ΄κΈ°ν"""
|
| 770 |
-
is_admin = (student_id == "admin")
|
| 771 |
role = "admin" if is_admin else "student"
|
| 772 |
-
|
| 773 |
-
# κ΄λ¦¬μμΈ κ²½μ° κ΄λ¦¬μ ν νμ
|
| 774 |
tab_visibility = gr.update(visible=is_admin)
|
| 775 |
|
| 776 |
-
|
| 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 |
-
|
| 783 |
-
fn=
|
| 784 |
-
|
| 785 |
-
outputs=[student_id_state, user_role_state, tab_admin, gr.Markdown()]
|
| 786 |
)
|
| 787 |
|
| 788 |
def select_scenario_and_create_session(scenario_id, student_id):
|
|
@@ -876,6 +864,9 @@ with gr.Blocks(title="κ°νΈ μΈμμΈκ³ κ΅μ‘ νλ«νΌ", theme=gr.themes.Sof
|
|
| 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)
|
|
@@ -883,16 +874,16 @@ with gr.Blocks(title="κ°νΈ μΈμμΈκ³ κ΅μ‘ νλ«νΌ", theme=gr.themes.Sof
|
|
| 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(
|
| 894 |
fn=initialize_app,
|
| 895 |
-
outputs=[emr_display, scenario_id_state, current_scenario_display]
|
| 896 |
)
|
| 897 |
|
| 898 |
|
|
|
|
| 648 |
info="μλμΌλ‘ μμ±λ κ³ μ IDμ
λλ€. 'μ ID μμ±' λ²νΌμΌλ‘ μ IDλ₯Ό λ°μ μ μμ΅λλ€."
|
| 649 |
)
|
| 650 |
with gr.Row():
|
| 651 |
+
generate_id_btn = gr.Button("π μ ID μμ±", variant="secondary")
|
|
|
|
| 652 |
|
| 653 |
# ν ꡬμ±
|
| 654 |
with gr.Tabs() as tabs:
|
|
|
|
| 758 |
new_id = generate_student_id()
|
| 759 |
return new_id
|
| 760 |
|
| 761 |
+
# μ ID μμ± λ²νΌ (student_id_stateλ ν¨κ» μ
λ°μ΄νΈ)
|
| 762 |
+
def update_student_id_with_state():
|
| 763 |
+
"""μ νμ ID μμ± λ° μν μ
λ°μ΄νΈ"""
|
| 764 |
+
new_id = generate_student_id()
|
| 765 |
+
is_admin = (new_id == "admin")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 766 |
role = "admin" if is_admin else "student"
|
|
|
|
|
|
|
| 767 |
tab_visibility = gr.update(visible=is_admin)
|
| 768 |
|
| 769 |
+
return new_id, new_id, role, tab_visibility
|
|
|
|
|
|
|
|
|
|
|
|
|
| 770 |
|
| 771 |
+
generate_id_btn.click(
|
| 772 |
+
fn=update_student_id_with_state,
|
| 773 |
+
outputs=[student_id_input, student_id_state, user_role_state, tab_admin]
|
|
|
|
| 774 |
)
|
| 775 |
|
| 776 |
def select_scenario_and_create_session(scenario_id, student_id):
|
|
|
|
| 864 |
"""μ± μ΄κΈ° λ‘λ μ μ€ν"""
|
| 865 |
default_scenario = "S001_D0_ER_WARD"
|
| 866 |
|
| 867 |
+
# student_id_stateλ₯Ό μ΄κΈ° IDλ‘ μ€μ
|
| 868 |
+
initial_student_id = student_id_input.value
|
| 869 |
+
|
| 870 |
# Supabase μλΉμ€κ° μμΌλ©΄ μλλ¦¬μ€ λ°μ΄ν° λ‘λ
|
| 871 |
if supabase_service:
|
| 872 |
scenario, patient, emr_html = load_scenario_data(default_scenario)
|
|
|
|
| 874 |
if scenario:
|
| 875 |
# κΈ°λ³Έ μλλ¦¬μ€ μ 보 νμ
|
| 876 |
scenario_info = f"**νμ¬ μλ리μ€**: {scenario.title}"
|
| 877 |
+
return emr_html, default_scenario, scenario_info, initial_student_id, "student"
|
| 878 |
else:
|
| 879 |
+
return emr_html, default_scenario, "**νμ¬ μλ리μ€**: μ νλμ§ μμ", initial_student_id, "student"
|
| 880 |
else:
|
| 881 |
+
return "", default_scenario, "**νμ¬ μλ리μ€**: μ νλμ§ μμ", initial_student_id, "student"
|
| 882 |
|
| 883 |
# μ΄κΈ° λ‘λ
|
| 884 |
app.load(
|
| 885 |
fn=initialize_app,
|
| 886 |
+
outputs=[emr_display, scenario_id_state, current_scenario_display, student_id_state, user_role_state]
|
| 887 |
)
|
| 888 |
|
| 889 |
|
supabase_init.sql
CHANGED
|
@@ -68,7 +68,7 @@ COMMENT ON COLUMN scenarios.handoff_situation IS 'μΈμμΈκ³ μν© (μ: μ
|
|
| 68 |
CREATE TABLE IF NOT EXISTS handoff_records (
|
| 69 |
id SERIAL PRIMARY KEY,
|
| 70 |
session_id VARCHAR(100),
|
| 71 |
-
student_id VARCHAR(
|
| 72 |
scenario_id VARCHAR(50) NOT NULL REFERENCES scenarios(id) ON DELETE CASCADE,
|
| 73 |
submitted_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
| 74 |
situation TEXT,
|
|
@@ -96,7 +96,7 @@ COMMENT ON COLUMN handoff_records.safety_concerns IS 'νμ μμ κ΄λ ¨ μ£Ό
|
|
| 96 |
CREATE TABLE IF NOT EXISTS chat_history (
|
| 97 |
id SERIAL PRIMARY KEY,
|
| 98 |
session_id VARCHAR(100) NOT NULL,
|
| 99 |
-
student_id VARCHAR(
|
| 100 |
scenario_id VARCHAR(50) NOT NULL,
|
| 101 |
role VARCHAR(20) NOT NULL CHECK (role IN ('user', 'assistant')),
|
| 102 |
message TEXT NOT NULL,
|
|
@@ -109,7 +109,7 @@ COMMENT ON TABLE chat_history IS 'νμκ³Ό AI κ°μ μ±ν
κΈ°λ‘';
|
|
| 109 |
CREATE TABLE IF NOT EXISTS sbar_drafts (
|
| 110 |
id SERIAL PRIMARY KEY,
|
| 111 |
session_id VARCHAR(100) NOT NULL UNIQUE,
|
| 112 |
-
student_id VARCHAR(
|
| 113 |
scenario_id VARCHAR(50) NOT NULL,
|
| 114 |
situation TEXT DEFAULT '',
|
| 115 |
background TEXT DEFAULT '',
|
|
@@ -123,8 +123,8 @@ COMMENT ON TABLE sbar_drafts IS 'μμ± μ€μΈ SBAR μμ μ μ₯';
|
|
| 123 |
-- 1.6 sessions ν
μ΄λΈ (μΈμ
κ΄λ¦¬)
|
| 124 |
CREATE TABLE IF NOT EXISTS sessions (
|
| 125 |
id SERIAL PRIMARY KEY,
|
| 126 |
-
session_id VARCHAR(
|
| 127 |
-
student_id VARCHAR(
|
| 128 |
scenario_id VARCHAR(50) NOT NULL,
|
| 129 |
status VARCHAR(20) DEFAULT 'active',
|
| 130 |
started_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
|
|
| 68 |
CREATE TABLE IF NOT EXISTS handoff_records (
|
| 69 |
id SERIAL PRIMARY KEY,
|
| 70 |
session_id VARCHAR(100),
|
| 71 |
+
student_id VARCHAR(100) NOT NULL,
|
| 72 |
scenario_id VARCHAR(50) NOT NULL REFERENCES scenarios(id) ON DELETE CASCADE,
|
| 73 |
submitted_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
| 74 |
situation TEXT,
|
|
|
|
| 96 |
CREATE TABLE IF NOT EXISTS chat_history (
|
| 97 |
id SERIAL PRIMARY KEY,
|
| 98 |
session_id VARCHAR(100) NOT NULL,
|
| 99 |
+
student_id VARCHAR(100) NOT NULL,
|
| 100 |
scenario_id VARCHAR(50) NOT NULL,
|
| 101 |
role VARCHAR(20) NOT NULL CHECK (role IN ('user', 'assistant')),
|
| 102 |
message TEXT NOT NULL,
|
|
|
|
| 109 |
CREATE TABLE IF NOT EXISTS sbar_drafts (
|
| 110 |
id SERIAL PRIMARY KEY,
|
| 111 |
session_id VARCHAR(100) NOT NULL UNIQUE,
|
| 112 |
+
student_id VARCHAR(100) NOT NULL,
|
| 113 |
scenario_id VARCHAR(50) NOT NULL,
|
| 114 |
situation TEXT DEFAULT '',
|
| 115 |
background TEXT DEFAULT '',
|
|
|
|
| 123 |
-- 1.6 sessions ν
μ΄λΈ (μΈμ
κ΄λ¦¬)
|
| 124 |
CREATE TABLE IF NOT EXISTS sessions (
|
| 125 |
id SERIAL PRIMARY KEY,
|
| 126 |
+
session_id VARCHAR(100) UNIQUE NOT NULL,
|
| 127 |
+
student_id VARCHAR(100) NOT NULL,
|
| 128 |
scenario_id VARCHAR(50) NOT NULL,
|
| 129 |
status VARCHAR(20) DEFAULT 'active',
|
| 130 |
started_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|