Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,7 +1,66 @@
|
|
|
|
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
-
from huggingface_hub import InferenceClient
|
| 3 |
|
| 4 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
|
| 6 |
# Function to convert days to score
|
| 7 |
def days_to_score(days):
|
|
@@ -20,66 +79,37 @@ def days_to_score(days):
|
|
| 20 |
def diagnose_gerd_responses(responses):
|
| 21 |
scores = [days_to_score(d) for d in responses]
|
| 22 |
total_score = sum(scores)
|
|
|
|
| 23 |
if total_score <= 7:
|
| 24 |
diagnosis = "Kemungkinan Anda tidak menderita GERD."
|
| 25 |
elif 8 <= total_score <= 18:
|
| 26 |
diagnosis = "Kemungkinan Anda menderita GERD. Konsultasikan dengan penyedia layanan kesehatan untuk evaluasi lebih lanjut."
|
| 27 |
else:
|
| 28 |
diagnosis = "Skor di luar jangkauan. Pastikan Anda memasukkan nilai dengan benar."
|
| 29 |
-
return diagnosis
|
| 30 |
-
|
| 31 |
-
def respond(message, history, system_message, max_tokens, temperature, top_p):
|
| 32 |
-
messages = [{"role": "system", "content": system_message}]
|
| 33 |
-
|
| 34 |
-
for val in history:
|
| 35 |
-
if val[0]:
|
| 36 |
-
messages.append({"role": "user", "content": val[0]})
|
| 37 |
-
if val[1]:
|
| 38 |
-
messages.append({"role": "assistant", "content": val[1]})
|
| 39 |
-
|
| 40 |
-
messages.append({"role": "user", "content": message})
|
| 41 |
|
| 42 |
-
|
| 43 |
-
user_responses = []
|
| 44 |
-
|
| 45 |
-
for message in client.chat_completion(messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p):
|
| 46 |
-
token = message.choices[0].delta.content
|
| 47 |
-
response += token
|
| 48 |
-
yield response
|
| 49 |
-
|
| 50 |
-
if "nyeri ulu hati" in message:
|
| 51 |
-
user_responses.append(int(message))
|
| 52 |
-
response = "Berapa hari dalam 7 hari terakhir Anda mengalami nyeri ulu hati?"
|
| 53 |
-
elif "regurgitasi" in message:
|
| 54 |
-
user_responses.append(int(message))
|
| 55 |
-
response = "Berapa hari dalam 7 hari terakhir Anda mengalami regurgitasi?"
|
| 56 |
-
elif "mual" in message:
|
| 57 |
-
user_responses.append(int(message))
|
| 58 |
-
response = "Berapa hari dalam 7 hari terakhir Anda mengalami mual?"
|
| 59 |
-
elif "sulit tidur" in message:
|
| 60 |
-
user_responses.append(int(message))
|
| 61 |
-
response = "Berapa hari dalam 7 hari terakhir Anda mengalami kesulitan tidur karena nyeri ulu hati?"
|
| 62 |
-
elif "minum obat" in message:
|
| 63 |
-
user_responses.append(int(message))
|
| 64 |
-
response = "Berapa hari dalam 7 hari terakhir Anda minum obat tambahan untuk nyeri ulu hati?"
|
| 65 |
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
|
| 70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
|
| 78 |
-
gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"),
|
| 79 |
-
],
|
| 80 |
title="Nexus-Gerd-Bot",
|
| 81 |
description="Chat dengan Nexus-Gerd-Bot untuk menilai kemungkinan GERD berdasarkan gejala yang Anda alami dalam 7 hari terakhir."
|
| 82 |
)
|
| 83 |
|
|
|
|
| 84 |
if __name__ == "__main__":
|
| 85 |
-
|
|
|
|
| 1 |
+
import nltk
|
| 2 |
+
from nltk.chat.util import Chat, reflections
|
| 3 |
import gradio as gr
|
|
|
|
| 4 |
|
| 5 |
+
# Reflection to handle variations in user inputs
|
| 6 |
+
reflections = {
|
| 7 |
+
"aku": "kamu",
|
| 8 |
+
"saya": "Anda",
|
| 9 |
+
"kamu": "saya",
|
| 10 |
+
"Anda": "saya",
|
| 11 |
+
"adalah": "adalah",
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
# Define chatbot pairs
|
| 15 |
+
pairs = [
|
| 16 |
+
[
|
| 17 |
+
r"(hi|halo|hai|hello|hey)",
|
| 18 |
+
["Halo! Saya Nexus-Gerd-Bot. Bagaimana saya bisa membantu Anda hari ini?",]
|
| 19 |
+
],
|
| 20 |
+
[
|
| 21 |
+
r"siapa kamu\??",
|
| 22 |
+
["Saya adalah Nexus-Gerd-Bot, asisten virtual untuk membantu Anda menilai kemungkinan GERD.",]
|
| 23 |
+
],
|
| 24 |
+
[
|
| 25 |
+
r"bagaimana kabarmu\??",
|
| 26 |
+
["Saya baik-baik saja. Terima kasih sudah bertanya!",]
|
| 27 |
+
],
|
| 28 |
+
[
|
| 29 |
+
r"(.*)gerd(.*)",
|
| 30 |
+
["Saya bisa membantu menilai apakah Anda mungkin menderita GERD berdasarkan gejala yang Anda alami dalam 7 hari terakhir. Siapkah Anda untuk memulai?",]
|
| 31 |
+
],
|
| 32 |
+
[
|
| 33 |
+
r"(.*) (nyeri ulu hati|heartburn) (.*) ?",
|
| 34 |
+
["Berapa hari dalam 7 hari terakhir Anda mengalami nyeri ulu hati?",]
|
| 35 |
+
],
|
| 36 |
+
[
|
| 37 |
+
r"(.*) (regurgitasi) (.*) ?",
|
| 38 |
+
["Berapa hari dalam 7 hari terakhir Anda mengalami regurgitasi?",]
|
| 39 |
+
],
|
| 40 |
+
[
|
| 41 |
+
r"(.*) (mual) (.*) ?",
|
| 42 |
+
["Berapa hari dalam 7 hari terakhir Anda mengalami mual?",]
|
| 43 |
+
],
|
| 44 |
+
[
|
| 45 |
+
r"(.*) (sulit tidur) (.*) ?",
|
| 46 |
+
["Berapa hari dalam 7 hari terakhir Anda mengalami kesulitan tidur karena nyeri ulu hati?",]
|
| 47 |
+
],
|
| 48 |
+
[
|
| 49 |
+
r"(.*) (minum obat) (.*) ?",
|
| 50 |
+
["Berapa hari dalam 7 hari terakhir Anda minum obat tambahan untuk nyeri ulu hati?",]
|
| 51 |
+
],
|
| 52 |
+
[
|
| 53 |
+
r"terima kasih(.*)",
|
| 54 |
+
["Sama-sama! Jika Anda membutuhkan bantuan lebih lanjut, jangan ragu untuk bertanya.",]
|
| 55 |
+
],
|
| 56 |
+
[
|
| 57 |
+
r"selamat tinggal|dadah|sampai jumpa",
|
| 58 |
+
["Sampai jumpa! Semoga hari Anda menyenangkan!",]
|
| 59 |
+
],
|
| 60 |
+
]
|
| 61 |
+
|
| 62 |
+
# Create a Chat object
|
| 63 |
+
chatbot = Chat(pairs, reflections)
|
| 64 |
|
| 65 |
# Function to convert days to score
|
| 66 |
def days_to_score(days):
|
|
|
|
| 79 |
def diagnose_gerd_responses(responses):
|
| 80 |
scores = [days_to_score(d) for d in responses]
|
| 81 |
total_score = sum(scores)
|
| 82 |
+
|
| 83 |
if total_score <= 7:
|
| 84 |
diagnosis = "Kemungkinan Anda tidak menderita GERD."
|
| 85 |
elif 8 <= total_score <= 18:
|
| 86 |
diagnosis = "Kemungkinan Anda menderita GERD. Konsultasikan dengan penyedia layanan kesehatan untuk evaluasi lebih lanjut."
|
| 87 |
else:
|
| 88 |
diagnosis = "Skor di luar jangkauan. Pastikan Anda memasukkan nilai dengan benar."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
|
| 90 |
+
return diagnosis
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 91 |
|
| 92 |
+
# Function to handle chatbot responses and collect inputs
|
| 93 |
+
def chatbot_interface(user_input, state):
|
| 94 |
+
responses = state or []
|
| 95 |
|
| 96 |
+
if len(responses) < 6:
|
| 97 |
+
response = chatbot.respond(user_input)
|
| 98 |
+
responses.append(int(user_input))
|
| 99 |
+
return response, responses
|
| 100 |
+
else:
|
| 101 |
+
diagnosis = diagnose_gerd_responses(responses)
|
| 102 |
+
return diagnosis, responses
|
| 103 |
|
| 104 |
+
# Define the Gradio interface
|
| 105 |
+
interface = gr.Interface(
|
| 106 |
+
fn=chatbot_interface,
|
| 107 |
+
inputs=[gr.Textbox(lines=2, placeholder="Masukkan pesan Anda di sini...")],
|
| 108 |
+
outputs=[gr.Textbox(label="Nexus-Gerd-Bot"), gr.State()],
|
|
|
|
|
|
|
|
|
|
| 109 |
title="Nexus-Gerd-Bot",
|
| 110 |
description="Chat dengan Nexus-Gerd-Bot untuk menilai kemungkinan GERD berdasarkan gejala yang Anda alami dalam 7 hari terakhir."
|
| 111 |
)
|
| 112 |
|
| 113 |
+
# Launch the app
|
| 114 |
if __name__ == "__main__":
|
| 115 |
+
interface.launch()
|