Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -130,12 +130,12 @@ ________________________________________
|
|
| 130 |
return f"【API 錯誤 {resp.status_code}】{resp.text[:300]}"
|
| 131 |
|
| 132 |
# === 紀錄到 Google Sheet ===
|
| 133 |
-
def log_to_sheet(level, p1, p2, p3, p4, p5, p6, p7, raw, total):
|
| 134 |
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
| 135 |
-
SHEET.append_row([now, level, p1, p2, p3, p4, p5, p6, p7, total, raw])
|
| 136 |
|
| 137 |
# === 整合流程 ===
|
| 138 |
-
def collect_and_score(level, p1, p2, p3, p4, p5, p6, p7):
|
| 139 |
combined = f"""1. 年齡/性別/主訴: {p1}
|
| 140 |
2. 個人病史: {p2}
|
| 141 |
3. 家族史: {p3}
|
|
@@ -147,22 +147,24 @@ def collect_and_score(level, p1, p2, p3, p4, p5, p6, p7):
|
|
| 147 |
raw = call_gemini(combined)
|
| 148 |
total = parse_scores(raw)
|
| 149 |
md = render_score_card(total, raw)
|
| 150 |
-
log_to_sheet(level, p1, p2, p3, p4, p5, p6, p7, raw, total)
|
| 151 |
-
return level, p1, p2, p3, p4, p5, p6, p7, md
|
| 152 |
|
| 153 |
def do_clear():
|
| 154 |
-
return "
|
| 155 |
|
| 156 |
# === Gradio 介面 ===
|
| 157 |
with gr.Blocks(title="One-Minute Summary 評分") as demo:
|
| 158 |
gr.HTML(INTRO_TEXT)
|
| 159 |
|
| 160 |
level = gr.Dropdown(
|
| 161 |
-
choices=["主治醫師", "住院醫師", "
|
| 162 |
-
value="
|
| 163 |
label="請選擇職級"
|
| 164 |
)
|
| 165 |
|
|
|
|
|
|
|
| 166 |
p1 = gr.Textbox(label="1. 年齡、性別、Chief Complaint (10分)", lines=2)
|
| 167 |
p2 = gr.Textbox(label="2. 個人病史 (10分)", lines=2)
|
| 168 |
p3 = gr.Textbox(label="3. 家族史 (10分)", lines=2)
|
|
@@ -179,13 +181,13 @@ with gr.Blocks(title="One-Minute Summary 評分") as demo:
|
|
| 179 |
|
| 180 |
submit_btn.click(
|
| 181 |
collect_and_score,
|
| 182 |
-
[level, p1, p2, p3, p4, p5, p6, p7],
|
| 183 |
-
[level, p1, p2, p3, p4, p5, p6, p7, result]
|
| 184 |
)
|
| 185 |
|
| 186 |
clear_btn.click(
|
| 187 |
do_clear,
|
| 188 |
-
outputs=[level, p1, p2, p3, p4, p5, p6, p7, result]
|
| 189 |
)
|
| 190 |
|
| 191 |
demo.launch()
|
|
|
|
| 130 |
return f"【API 錯誤 {resp.status_code}】{resp.text[:300]}"
|
| 131 |
|
| 132 |
# === 紀錄到 Google Sheet ===
|
| 133 |
+
def log_to_sheet(level, name, p1, p2, p3, p4, p5, p6, p7, raw, total):
|
| 134 |
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
| 135 |
+
SHEET.append_row([now, level, name, p1, p2, p3, p4, p5, p6, p7, total, raw])
|
| 136 |
|
| 137 |
# === 整合流程 ===
|
| 138 |
+
def collect_and_score(level, name, p1, p2, p3, p4, p5, p6, p7):
|
| 139 |
combined = f"""1. 年齡/性別/主訴: {p1}
|
| 140 |
2. 個人病史: {p2}
|
| 141 |
3. 家族史: {p3}
|
|
|
|
| 147 |
raw = call_gemini(combined)
|
| 148 |
total = parse_scores(raw)
|
| 149 |
md = render_score_card(total, raw)
|
| 150 |
+
log_to_sheet(level, name, p1, p2, p3, p4, p5, p6, p7, raw, total)
|
| 151 |
+
return level, name, p1, p2, p3, p4, p5, p6, p7, md
|
| 152 |
|
| 153 |
def do_clear():
|
| 154 |
+
return "Clerk1", "", "", "", "", "", "", "", "", "(已清空)"
|
| 155 |
|
| 156 |
# === Gradio 介面 ===
|
| 157 |
with gr.Blocks(title="One-Minute Summary 評分") as demo:
|
| 158 |
gr.HTML(INTRO_TEXT)
|
| 159 |
|
| 160 |
level = gr.Dropdown(
|
| 161 |
+
choices=["主治醫師", "住院醫師", "PGY2", "PGY1", "Clerk2", "Clerk1","其他"],
|
| 162 |
+
value="Clerk1",
|
| 163 |
label="請選擇職級"
|
| 164 |
)
|
| 165 |
|
| 166 |
+
name = gr.Textbox(label="姓名", lines=1, placeholder="請輸入姓名")
|
| 167 |
+
|
| 168 |
p1 = gr.Textbox(label="1. 年齡、性別、Chief Complaint (10分)", lines=2)
|
| 169 |
p2 = gr.Textbox(label="2. 個人病史 (10分)", lines=2)
|
| 170 |
p3 = gr.Textbox(label="3. 家族史 (10分)", lines=2)
|
|
|
|
| 181 |
|
| 182 |
submit_btn.click(
|
| 183 |
collect_and_score,
|
| 184 |
+
[level, name, p1, p2, p3, p4, p5, p6, p7],
|
| 185 |
+
[level, name, p1, p2, p3, p4, p5, p6, p7, result]
|
| 186 |
)
|
| 187 |
|
| 188 |
clear_btn.click(
|
| 189 |
do_clear,
|
| 190 |
+
outputs=[level, name, p1, p2, p3, p4, p5, p6, p7, result]
|
| 191 |
)
|
| 192 |
|
| 193 |
demo.launch()
|