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()
|