syafiqq02 commited on
Commit
4d4e7e1
Β·
1 Parent(s): 10e3cf1

last commit gradio

Browse files
Files changed (1) hide show
  1. app.py +62 -122
app.py CHANGED
@@ -1,135 +1,75 @@
1
- import os
2
  import gradio as gr
3
- import nltk
4
- from groq import Groq
5
- from sumy.parsers.plaintext import PlaintextParser
6
- from sumy.nlp.tokenizers import Tokenizer
7
- from sumy.summarizers.lsa import LsaSummarizer
8
-
9
- # Download tokenizer NLTK
10
- nltk.download('punkt')
11
- nltk.download('punkt_tab')
12
-
13
- # API Key Groq
14
- GROQ_API_KEY = "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"
15
- groq_client = Groq(api_key=GROQ_API_KEY)
16
-
17
- def save_to_file(content, filename):
18
- with open(filename, 'w', encoding='utf-8') as file:
19
- file.write(content)
20
- return filename
21
-
22
- def transcribe_and_summarize_generate(audio_path):
23
- # Transkripsi
24
- with open(audio_path, "rb") as audio_file:
25
- response = groq_client.audio.transcriptions.create(
26
- model="whisper-large-v3",
27
- file=audio_file,
28
- response_format="text"
29
- )
30
- transcription = response
31
-
32
- # Summarization LSA
33
- parser = PlaintextParser.from_string(transcription, Tokenizer("english"))
34
- summarizer = LsaSummarizer()
35
- summary_sentences = summarizer(parser.document, 5)
36
- summarized_text = " ".join([str(sentence) for sentence in summary_sentences])
37
-
38
- # Token info
39
- original_tokens = len(nltk.word_tokenize(transcription))
40
- summarized_tokens = len(nltk.word_tokenize(summarized_text))
41
- token_info = f"Asli: {original_tokens} token | Ringkasan: {summarized_tokens} token"
42
-
43
- # SOAP
44
- prompt_soap = f"""
45
- Anda adalah asisten medis yang membantu dokter dalam menyusun catatan SOAP berdasarkan percakapan dokter dan pasien.
46
- Ringkaskan dalam bentuk paragraf tanpa adanya bullet point dan gunakan bahasa Indonesia.
47
- Harap buat ringkasan dalam format berikut:
48
- Subjective:
49
- Objective:
50
- Assessment:
51
- Plan:
52
-
53
- ### Percakapan:
54
- {transcription}
55
-
56
- Tolong jangan tambahkan informasi tambahan selain yang berkaitan dengan diagnosis, obat, hasil lab, dan radiologi.
57
- """
58
- response_soap = groq_client.chat.completions.create(
59
- model="llama3-8b-8192",
60
- messages=[{"role": "user", "content": prompt_soap}]
61
  )
62
- soap_content = response_soap.choices[0].message.content
63
-
64
- # Tags
65
- prompt_tags = f"""
66
- Identifikasi dan berikan luaran dalam bahasa Indonesia tags berikut dari percakapan dengan format:
67
- Diagnosis:
68
- Obat:
69
- Hasil Lab:
70
- Radiologi:
71
 
72
- ### Percakapan:
73
- {transcription}
 
74
 
75
- Tolong jangan tambahkan informasi tambahan selain yang berkaitan dengan diagnosis, obat, hasil lab, dan radiologi.
76
- """
77
- response_tags = groq_client.chat.completions.create(
78
- model="llama3-8b-8192",
79
- messages=[{"role": "user", "content": prompt_tags}]
80
  )
81
- tags_content = response_tags.choices[0].message.content
82
 
83
- # Save files
84
- summarized_file = save_to_file(summarized_text, 'summarized_transcription.txt')
85
- soap_file = save_to_file(soap_content, 'soap_summary.txt')
86
- tags_file = save_to_file(tags_content, 'medical_tags.txt')
87
 
88
- return (
89
- summarized_text,
90
- soap_content,
91
- tags_content,
92
- token_info,
93
- summarized_file,
94
- soap_file,
95
- tags_file,
96
- audio_path
97
- )
98
 
99
- # Gradio UI
100
- with gr.Blocks(title="SOAP AI: Transkripsi dan Ringkasan Medis Otomatis") as app:
101
- gr.Markdown("## 🧠 SOAP AI - Transkripsi, Ringkasan, dan Deteksi Medis Otomatis")
 
102
 
103
- with gr.Row():
104
- with gr.Column():
105
- audio_input = gr.Audio("microphone", type="filepath", label="πŸŽ™οΈ Rekam Percakapan")
106
- transcribe_button = gr.Button("🩺 Jalankan Proses Lengkap (Transkripsi + Ringkasan + SOAP + Tags)")
107
 
108
- with gr.Column():
109
- summarize_box = gr.Textbox(label="πŸ“„ Ringkasan LSA (5 Kalimat)", lines=5, interactive=False)
110
- soap_box = gr.Textbox(label="πŸ“‹ Ringkasan SOAP", lines=8, interactive=False)
111
- tags_box = gr.Textbox(label="🏷️ Medical Tags", lines=6, interactive=False)
112
- token_box = gr.Textbox(label="πŸ”’ Token Info", interactive=False)
113
-
114
- with gr.Row():
115
- download_summary = gr.File(label="⬇️ Download Ringkasan LSA")
116
- download_soap = gr.File(label="⬇️ Download SOAP")
117
- download_tags = gr.File(label="⬇️ Download Tags")
118
- download_audio = gr.File(label="⬇️ Download Audio")
119
 
120
- transcribe_button.click(
121
- transcribe_and_summarize_generate,
122
- inputs=[audio_input],
123
- outputs=[
124
- summarize_box,
125
- soap_box,
126
- tags_box,
127
- token_box,
128
- download_summary,
129
- download_soap,
130
- download_tags,
131
- download_audio
132
- ]
133
  )
134
 
135
- app.launch(share=True)
 
 
1
  import gradio as gr
2
+ import os
3
+ import requests
4
+ from dotenv import load_dotenv
5
+
6
+ load_dotenv()
7
+ API_TRANSCRIBE = os.getenv("API_TRANSCRIBE")
8
+ API_TEXT = os.getenv("API_TEXT")
9
+
10
+ # ==== Function for backend calls ====
11
+ def handle_audio(audio_file):
12
+ if audio_file is None:
13
+ return "-", "-", "-"
14
+ with open(audio_file, "rb") as f:
15
+ files = {"audio": f}
16
+ response = requests.post(API_TRANSCRIBE, files=files)
17
+ result = response.json()
18
+ return result.get("transcription", "-"), result.get("soap_content", "-"), result.get("tags_content", "-")
19
+
20
+ def handle_text(dialogue):
21
+ if not dialogue.strip():
22
+ return "-", "-", "-"
23
+ response = requests.post(API_TEXT, json={"dialogue": dialogue})
24
+ result = response.json()
25
+ return dialogue, result.get("soap_content", "-"), result.get("tags_content", "-")
26
+
27
+ # ==== Function to toggle inputs ====
28
+ def toggle_inputs(choice):
29
+ return (
30
+ gr.update(visible=(choice == "Upload Audio")),
31
+ gr.update(visible=(choice == "Rekam Audio")),
32
+ gr.update(visible=(choice == "Input Teks")),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  )
 
 
 
 
 
 
 
 
 
34
 
35
+ # ==== UI ====
36
+ with gr.Blocks(title="SOAP AI Dropdown Input") as app:
37
+ gr.Markdown("## 🩺 SOAP AI β€” Pilih Jenis Input")
38
 
39
+ input_choice = gr.Dropdown(
40
+ choices=["Upload Audio", "Input Teks"],
41
+ value="Upload Audio",
42
+ label="Pilih Metode Input"
 
43
  )
 
44
 
45
+ # Input fields (hidden by default except selected)
46
+ audio_upload = gr.Audio("microphone",label="πŸ”Š Upload File Audio", type="filepath", visible=True)
47
+ text_input = gr.Textbox(label="πŸ“ Masukkan Percakapan Dokter-Pasien", lines=6, visible=False)
 
48
 
49
+ # Tombol proses
50
+ process_button = gr.Button("πŸš€ Proses ke SOAP")
 
 
 
 
 
 
 
 
51
 
52
+ # Output
53
+ transcript_output = gr.Textbox(label="πŸ“ Hasil Transkripsi", lines=3)
54
+ soap_output = gr.Textbox(label="πŸ“‹ Ringkasan SOAP", lines=6)
55
+ tags_output = gr.Textbox(label="🏷️ Medical Tags", lines=6)
56
 
57
+ # === Events ===
58
+ input_choice.change(fn=toggle_inputs, inputs=input_choice,
59
+ outputs=[audio_upload, text_input])
 
60
 
61
+ process_button.click(
62
+ fn=handle_audio,
63
+ inputs=audio_upload,
64
+ outputs=[transcript_output, soap_output, tags_output],
65
+ show_progress="minimal"
66
+ )
 
 
 
 
 
67
 
68
+ process_button.click(
69
+ fn=handle_text,
70
+ inputs=text_input,
71
+ outputs=[transcript_output, soap_output, tags_output],
72
+ show_progress="minimal"
 
 
 
 
 
 
 
 
73
  )
74
 
75
+ app.launch()