Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -338,8 +338,151 @@ with gr.Blocks(
|
|
338 |
|
339 |
"""
|
340 |
)
|
341 |
-
|
342 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
343 |
|
344 |
# Launch the interface
|
345 |
if __name__ == "__main__":
|
|
|
338 |
|
339 |
"""
|
340 |
)
|
341 |
+
|
342 |
+
|
343 |
+
# Launch the interface
|
344 |
+
if __name__ == "__main__":
|
345 |
+
with gr.Blocks(
|
346 |
+
theme=gr.themes.Soft(primary_hue="teal", secondary_hue="slate", neutral_hue="neutral"),
|
347 |
+
css="""
|
348 |
+
.chatbot-wrapper .message {
|
349 |
+
white-space: pre-wrap;
|
350 |
+
word-wrap: break-word;
|
351 |
+
}
|
352 |
+
"""
|
353 |
+
) as demo:
|
354 |
+
demo.load(lambda: None, _js="""
|
355 |
+
() => {
|
356 |
+
const style = document.createElement('style');
|
357 |
+
style.textContent = `
|
358 |
+
.chatbot-wrapper .message {
|
359 |
+
white-space: pre-wrap;
|
360 |
+
word-wrap: break-word;
|
361 |
+
}
|
362 |
+
`;
|
363 |
+
document.head.appendChild(style);
|
364 |
+
}
|
365 |
+
""")
|
366 |
+
|
367 |
+
gr.Markdown("# π PharmAI: μΆλ‘ κΈ°λ° μ½λ¦¬ν μ λ¬Έ AI μλΉμ€ π")
|
368 |
+
|
369 |
+
gr.HTML("""<a href="https://visitorbadge.io/status?path=https%3A%2F%2Faiqcamp-Gemini2-Flash-Thinking.hf.space">
|
370 |
+
<img src="https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Faiqcamp-Gemini2-Flash-Thinking.hf.space&countColor=%23263759" />
|
371 |
+
</a>""")
|
372 |
+
|
373 |
+
with gr.Tabs() as tabs:
|
374 |
+
with gr.TabItem("λν", id="chat_tab"):
|
375 |
+
chatbot = gr.Chatbot(
|
376 |
+
type="messages",
|
377 |
+
label="PharmAI μ±λ΄ (μ€νΈλ¦¬λ° μΆλ ₯)", # μ€νΈλ¦¬λ°μμ λνλ΄λ λ μ΄λΈ
|
378 |
+
render_markdown=True,
|
379 |
+
scale=1,
|
380 |
+
avatar_images=(None,"https://lh3.googleusercontent.com/oxz0sUBF0iYoN4VvhqWTmux-cxfD1rxuYkuFEfm1SFaseXEsjjE4Je_C_V3UQPuJ87sImQK3HfQ3RXiaRnQetjaZbjJJUkiPL5jFJ1WRl5FKJZYibUA=w214-h214-n-nu"),
|
381 |
+
elem_classes="chatbot-wrapper" # μ¬μ©μ μ μ μ€νμΌμ© ν΄λμ€ μΆκ°
|
382 |
+
)
|
383 |
+
|
384 |
+
with gr.Row(equal_height=True):
|
385 |
+
input_box = gr.Textbox(
|
386 |
+
lines=1,
|
387 |
+
label="λν λ©μμ§",
|
388 |
+
placeholder="μ¬κΈ°μ λ©μμ§λ₯Ό μ
λ ₯νμΈμ...",
|
389 |
+
scale=4
|
390 |
+
)
|
391 |
+
|
392 |
+
clear_button = gr.Button("λν μ΄κΈ°ν", scale=1)
|
393 |
+
|
394 |
+
# μμ ν둬ννΈ μΆκ° - νμΌ μ
λ‘λ μμ μ κ±°. ν
μ€νΈ μ€μ¬ μμ μ μ§.
|
395 |
+
example_prompts = [
|
396 |
+
["CYP450 ν¨μμ μ½λ¬Ό λμ¬ κ°μ μνΈ μμ©μ μ€λͺ
νκ³ , νΉν ν¨μ μ λ λλ μ΅μ κ° μνλ¦°κ³Ό κ°μ μ½λ¬Όμ μΉλ£ ν¨λ₯μ μ΄λ»κ² μν₯μ λ―ΈμΉ μ μλμ§μ μ€μ μ λμμμ€."],
|
397 |
+
["λ§μ± μ μ₯ μ§ν νμμμ λΉν μΉλ£λ₯Ό μν΄ μ¬μ©νλ μ리μ€λ‘ν¬μ΄μν΄ μ μ μ μ½λνμ λ° μ½λ ₯νμ νΉμ±μ μμΈν λΆμνκ³ , ν¬μ¬ μ©λ λ° ν¬μ¬ κ°κ²© κ²°μ μ μν₯μ λ―ΈμΉλ μμΈλ€μ μ€λͺ
ν΄ μ£Όμμμ€."],
|
398 |
+
["κ°κ²½λ³ μΉλ£(κ° μ¬μ ν ν΄μ)λ₯Ό μν μ μ½ κ°λ°μ μν 'μ²μ° μλ¬Ό'λ€μ μΆμΆνκ³ μ΄μ λν ꡬ체μ μΈ μ½λ¦¬κΈ°μ κ³Ό κ·Έ μ΄μ , κ·Έλ¦¬κ³ μ΄λ»κ² μ‘°ν©ν΄μΌ μ΅μμ ν¨κ³Όκ° μμμ§ μΆλ‘ νμ¬ νλ°©(νμν)μ κ΄μ μμ μ΅μ μ λ΅λ³μ νλΌ"],
|
399 |
+
["μμΈ νμ΄λ¨Έλ³ μΉλ£μ ν¨κ³Όμ μΈ μ²μ° μλ¬Ό λ¬Όμ§κ³Ό μ½λ¦¬κΈ°μ λ±μ νλ°©(νμν)μ κ΄μ μμ μ€λͺ
νκ³ μλ €μ€"],
|
400 |
+
["κ³ νμ μΉλ£ λ° μ¦μ μνμ ν¨κ³Όμ μΈ μ μ½ κ°λ°μ μν΄ κ°λ₯μ±μ΄ λ§€μ° λμ μ²μ° μλ¬Ό λ¬Όμ§κ³Ό μ½λ¦¬κΈ°μ λ±μ νλ°©(νμν)μ κ΄μ μμ μ€λͺ
νκ³ μλ €μ€"],
|
401 |
+
["κ³ νμ κ΄λ¦¬μμ ACE μ΅μ μ μ ARBμ μμ© λ©μ»€λμ¦μ λΉκ΅νκ³ λμ‘°νμ¬ λ λ-μμ§μ€ν
μ -μλμ€ν
λ‘ μμ€ν
μ λ―ΈμΉλ μν₯μ κ³ λ €νμμμ€."],
|
402 |
+
["μ 2ν λΉλ¨λ³μ λ³ν μ리νμ μ€λͺ
νκ³ λ©νΈν¬λ₯΄λ―Όμ΄ μ΄λ»κ² νλΉ κ°ν ν¨κ³Όλ₯Ό λ¬μ±νλμ§, μ μ₯ μ₯μ νμμ λν μ£Όμ κ³ λ € μ¬νμ ν¬ν¨νμ¬ μ€λͺ
νμμμ€."],
|
403 |
+
["μ¬λΆμ μΉλ£μμ λ² ν μ°¨λ¨μ μ μμ© λ©μ»€λμ¦κ³Ό μμμ μ€μμ±μ λν΄ λ
Όμνκ³ , νΉμ λ² ν μμ©μ²΄ μνκ³Ό μ¬νκ΄κ³μ λ―ΈμΉλ μν₯μ λν΄ μ°Έμ‘°νμμμ€."],
|
404 |
+
["μμΈ νμ΄λ¨Έλ³μ λ³νμ리νμ κΈ°μ μ μ€λͺ
νκ³ , νμ¬ μ¬μ©λλ μ½λ¬Όλ€μ΄ μμ©νλ μ£Όμ νκ²μ μμΈν κΈ°μ νμμμ€. νΉν, μμΈνΈμ½λ¦°μμ€ν
λΌμ μ΅μ μ μ NMDA μμ©μ²΄ κΈΈνμ μ μμ© λ°©μκ³Ό μμμ μμλ₯Ό λΉκ΅ λΆμν΄ μ£Όμμμ€."]
|
405 |
+
|
406 |
+
]
|
407 |
+
|
408 |
+
gr.Examples(
|
409 |
+
examples=example_prompts,
|
410 |
+
inputs=input_box,
|
411 |
+
label="μμ : Geminiμ μκ°μ λ³΄λ €λ©΄ λ€μ ν둬ννΈλ₯Ό μ¬μ©ν΄ 보μΈμ!",
|
412 |
+
examples_per_page=3 # νμοΏ½οΏ½ λ°λΌ μ‘°μ
|
413 |
+
)
|
414 |
+
|
415 |
+
|
416 |
+
# μ΄λ²€νΈ νΈλ€λ¬ μ€μ
|
417 |
+
msg_store = gr.State("") # μ¬μ©μ λ©μμ§λ₯Ό 보쑴νκΈ° μν μ μ₯μ
|
418 |
+
|
419 |
+
input_box.submit(
|
420 |
+
lambda msg: (msg, msg, ""), # λ©μμ§λ₯Ό μ μ₯νκ³ μ
λ ₯μ μ§μλλ€.
|
421 |
+
inputs=[input_box],
|
422 |
+
outputs=[msg_store, input_box, input_box],
|
423 |
+
queue=False
|
424 |
+
).then(
|
425 |
+
user_message, # μ¬μ©μ λ©μμ§λ₯Ό λνμ μΆκ°ν©λλ€.
|
426 |
+
inputs=[msg_store, chatbot],
|
427 |
+
outputs=[input_box, chatbot],
|
428 |
+
queue=False
|
429 |
+
).then(
|
430 |
+
stream_gemini_response, # μλ΅μ μμ±νκ³ μ€νΈλ¦¬λ°ν©λλ€.
|
431 |
+
inputs=[msg_store, chatbot],
|
432 |
+
outputs=chatbot
|
433 |
+
)
|
434 |
+
|
435 |
+
clear_button.click(
|
436 |
+
lambda: ([], "", ""),
|
437 |
+
outputs=[chatbot, input_box, msg_store],
|
438 |
+
queue=False
|
439 |
+
)
|
440 |
+
|
441 |
+
with gr.TabItem("μ¬μ© λ°©λ²", id="instructions_tab"):
|
442 |
+
gr.Markdown(
|
443 |
+
"""
|
444 |
+
## PharmAI: λΉμ μ μ λ¬Έ μ½λ¦¬ν μ΄μμ€ν΄νΈ
|
445 |
+
|
446 |
+
PharmAIμ μ€μ κ²μ νμν©λλ€. PharmAIλ κ΄λ²μν μ½ν μ§μ λ°μ΄ν°("PharmKG")μ FDA λ±μ μ λ¬Έ λ°μ΄ν°λ₯Ό νμ΅νμ¬ μ½λ¦¬ν μ£Όμ μ λν μ λ¬Έκ° μμ€μ μ 보λ₯Ό μ 곡νλλ‘ μ€κ³λμμ΅λλ€.
|
447 |
+
|
448 |
+
**μ£Όμ κΈ°λ₯:**
|
449 |
+
|
450 |
+
* **κ³ κΈ μ½λ¦¬ν ν΅μ°°λ ₯**: PharmAIλ κ΄λ²μν μ½λ¦¬ν μ§μ κ·Έλνλ₯Ό κΈ°λ°μΌλ‘ ꡬ쑰νλκ³ μμΈν λ΅λ³μ μ 곡ν©λλ€.
|
451 |
+
* **μΆλ‘ λ° μΆλ‘ **: μ±λ΄μ 볡μ‘νκ³ λ€λ©΄μ μΈ μ§λ¬Έμ μ²λ¦¬νμ¬ μ¬μ© κ°λ₯ν μ 보λ‘λΆν° μΆλ‘ νκ³ μΆλ‘ νλ λ₯λ ₯μ 보μ¬μ€λλ€.
|
452 |
+
* **ꡬ쑰νλ μλ΅**: μλ΅μ μ μ, μμ© λ©μ»€λμ¦, μ μμ¦, ν¬μ¬λ, λΆμμ©, μ½λ¬Ό μνΈ μμ©, μ½λν λ° ν΄λΉλλ κ²½μ° μ°Έμ‘° λ¬Ένμ ν¬ν¨νλλ‘ λ
Όλ¦¬μ μΌλ‘ ꡬμ±λ©λλ€.
|
453 |
+
* **μ¬κ³ κ³Όμ νμ**: λͺ¨λΈμ΄ μλ΅μ μμ±ν λ λͺ¨λΈμ μ¬κ³ κ³Όμ μ κ΄μ°°ν μ μμ΅λλ€(μ€νμ κΈ°λ₯).
|
454 |
+
* **λν κΈ°λ‘**: PharmAIλ μ΄μ λν λΆλΆμ κΈ°μ΅νμ¬ μ¬λ¬ λ²μ κ±Έμ³ λ μ ννκ³ κ΄λ ¨μ± μλ μ 보λ₯Ό μ 곡ν©λλ€.
|
455 |
+
* **μ€νΈλ¦¬λ° μΆλ ₯**: μ±λ΄μ λνν κ²½νμ μν΄ μλ΅μ μ€νΈλ¦¬λ°ν©λλ€.
|
456 |
+
|
457 |
+
**PharmAI μ¬μ© λ°©λ²:**
|
458 |
+
|
459 |
+
1. **λν μμ**: "λν" ν μλμ μ
λ ₯ μμμ μ½λ¦¬ν μ§λ¬Έμ μ
λ ₯ν©λλ€. μ±λ΄μ νΉν 볡μ‘ν μ½λ¦¬ν μ§λ¬Έμ μ²λ¦¬νλλ‘ μ€κ³λμμ΅λλ€.
|
460 |
+
|
461 |
+
2. **μμ ν둬ννΈ μ¬μ©**: μ 곡λ μμ μ§λ¬Έμ μ¬μ©νμ¬ λͺ¨λΈ μλ λ°©μμ νμΈν μ μμ΅λλ€. μ΄λ¬ν μμ λ μ±λ΄μ΄ μ λ¬Έ μ§μμ 보μ¬μ£Όλλ‘ νκΈ° μν΄ κ³ μλμμ΅λλ€.
|
462 |
+
|
463 |
+
3. **μμ ν둬ννΈ μ§μΉ¨**:
|
464 |
+
* **μμ© λ©μ»€λμ¦**: νΉμ μ½λ¬Όμ΄ λΆμ μμ€μμ μ΄λ»κ² μμ©νλμ§ λ¬Όμ΄λ³΄μΈμ. μ: "λ©νΈν¬λ₯΄λ―Όμ μμ© λ©μ»€λμ¦μ μ€λͺ
νμμμ€."
|
465 |
+
* **μ½λ¬Ό λμ¬**: μ μ²΄κ° μ½λ¬Όμ μ΄λ»κ² μ²λ¦¬νλμ§ λ¬Έμνμμμ€. μ: "CYP450 ν¨μμ μ½λ¬Ό λμ¬ κ°μ μνΈ μμ©μ μ€λͺ
νμμμ€..."
|
466 |
+
* **μμμ μλ―Έ**: νΉμ μ§λ³μ μΉλ£νλ λ° μμ΄ μ½λ¬Όμ μμμ μ¬μ©μ λν μ§λ¬Έμ μ κΈ°νμμμ€. μ: "μ¬λΆμ μΉλ£μμ λ² ν μ°¨λ¨μ μ μμ© λ©μ»€λμ¦κ³Ό μμμ μ€μμ±μ λν΄ λ
Όμνμμμ€..."
|
467 |
+
* **λ³νμ리ν λ° μ½λ¬Ό νμ **: μ§λ³, μμΈ λ° μ½λ¬Όμ΄ μ§λ³μ μΉλ£ν μ μλ λ°©λ²μ λν΄ λ¬Έμνμμμ€. μ: "μ 2ν λΉλ¨λ³μ λ³ν μ리νμ μ€λͺ
νκ³ λ©νΈν¬λ₯΄λ―Όμ΄ μ΄λ»κ² μμ©νλμ§ μ€λͺ
νμμμ€..."
|
468 |
+
* **λ³΅ν© λ€μ€ μ½λ¬Ό μνΈ μμ©**: μ 체μμ νλμ μ½λ¬Όμ΄ λ€λ₯Έ μ½λ¬Όμ μ΄λ»κ² μν₯μ λ―ΈμΉ μ μλμ§μ λν μ§λ¬Έμ μ κΈ°νμμμ€.
|
469 |
+
* **μ ν΅ μν κ΄μ **: μ§λ³ λ° μΉλ£μ λν μ ν΅ μν(νλ°©κ³Ό κ°μ) μ κ·Ό λ°©μμ λν΄ λ¬Έμνμμμ€. μ: "νλ°©μ κ΄μ μμ μμΈ νμ΄λ¨Έλ³ μΉλ£μ ν¨κ³Όμ μΈ μ²μ° μλ¬Ό λ¬Όμ§κ³Ό κ·Έ λ©μ»€λμ¦μ μ€λͺ
νμμμ€."
|
470 |
+
|
471 |
+
|
472 |
+
4. **μλ΅ κ²ν **: μ±λ΄μ λ΄λΆ μ²λ¦¬ κ³Όμ μ 보μ¬μ£Όλ "μκ° μ€" μΉμ
κ³Ό ν¨κ» μλ΅μ μ μν©λλ€. κ·Έλ° λ€μ μ μ, μμ© λ©μ»€λμ¦, μ μμ¦ λ±μ ν¬ν¨ν μΉμ
κ³Ό ν¨κ» λ³΄λ€ κ΅¬μ‘°νλ μλ΅μ μ 곡ν©λλ€.
|
473 |
+
|
474 |
+
5. **λν μ΄κΈ°ν**: "λν μ΄κΈ°ν" λ²νΌμ μ¬μ©νμ¬ μ μΈμ
μ μμν©λλ€.
|
475 |
+
|
476 |
+
**μ£Όμ μ¬ν:**
|
477 |
+
|
478 |
+
* 'μκ° μ€' κΈ°λ₯μ μ€νμ μ΄μ§λ§ μλ΅μ μμ±ν λ λͺ¨λΈμ΄ μνν λ¨κ³λ₯Ό 보μ¬μ€λλ€.
|
479 |
+
* μλ΅μ νμ§μ μ¬μ©μ ν둬ννΈμ λ°λΌ ν¬κ² λ¬λΌμ§λλ€. μ΅μμ κ²°κ³Όλ₯Ό μ»μΌλ €λ©΄ μ§λ¬Έν λ κ°λ₯ν ν μμΈνκ² μ€λͺ
νμμμ€.
|
480 |
+
* μ΄ λͺ¨λΈμ νΉν μ½λ¦¬ν μ 보μ μ΄μ μ λ§μΆκ³ μμΌλ―λ‘ μ΄ λ²μλ₯Ό λ²μ΄λ μ§λ¬Έμλ κ΄λ ¨μ± μλ λ΅λ³μ μ»μ§ λͺ»ν μ μμ΅λλ€.
|
481 |
+
* μ΄ μ±λ΄μ μ 보 μ κ³΅μ© λ¦¬μμ€λ‘ μ 곡λλ©° μλ£ μ§λ¨ λλ μΉλ£ κΆμ₯ μ¬νμ μ¬μ©ν΄μλ μ λ©λλ€. μλ£ μλ΄μ΄ νμν κ²½μ° νμ μλ£ μ λ¬Έκ°μ μλ΄νμμμ€.
|
482 |
+
|
483 |
+
"""
|
484 |
+
)
|
485 |
+
|
486 |
|
487 |
# Launch the interface
|
488 |
if __name__ == "__main__":
|