ayscript commited on
Commit
a553748
verified
1 Parent(s): a08223d

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +138 -0
app.py ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import requests
3
+ import soundfile as sf
4
+ import numpy as np
5
+ import tempfile
6
+ import os
7
+
8
+
9
+
10
+ ASR_URL = "asr space url"
11
+ LLM_URL = "llm space url"
12
+ TTS_URL = "tts space url"
13
+
14
+
15
+
16
+ def call_asr(audio_path):
17
+ payload = {
18
+ "data": [audio_path]
19
+ }
20
+ r = requests.post(ASR_URL, json=payload, timeout=120)
21
+ return r.json()["data"][0]
22
+
23
+
24
+ def call_llm(text):
25
+ payload = {
26
+ "data": [text]
27
+ }
28
+ r = requests.post(LLM_URL, json=payload, timeout=120)
29
+ return r.json()["data"][0]
30
+
31
+
32
+ def call_tts(text, language):
33
+ payload = {
34
+ "data": [text, language]
35
+ }
36
+ r = requests.post(TTS_URL, json=payload, timeout=120)
37
+ return r.json()["data"][0]
38
+
39
+
40
+
41
+
42
+
43
+ def healthatlas_pipeline(
44
+ mode,
45
+ text_input,
46
+ audio_input,
47
+ tts_language
48
+ ):
49
+ if mode == "Text":
50
+ if not text_input.strip():
51
+ return "Please enter text", None
52
+
53
+ llm_response = call_llm(text_input)
54
+
55
+ audio_path = call_tts(llm_response, tts_language)
56
+ return llm_response, audio_path
57
+
58
+ else: # Audio mode
59
+ if audio_input is None:
60
+ return "Please upload audio", None
61
+
62
+ # Save uploaded audio
63
+ sr, audio = audio_input
64
+ with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
65
+ sf.write(f.name, audio, sr)
66
+ audio_path = f.name
67
+
68
+ transcription = call_asr(audio_path)
69
+ llm_response = call_llm(transcription)
70
+ audio_out = call_tts(llm_response, tts_language)
71
+
72
+ return llm_response, audio_out
73
+
74
+
75
+
76
+ #gradio user interface
77
+ with gr.Blocks(title="HealthAtlas AI") as demo:
78
+ gr.Markdown(
79
+ """
80
+ # 馃彞 HealthAtlas
81
+ Multilingual AI Health Triage Assistant
82
+ **Languages:** English 路 Yoruba 路 Hausa 路 Igbo
83
+ """
84
+ )
85
+
86
+ mode = gr.Radio(
87
+ ["Text", "Audio"],
88
+ value="Text",
89
+ label="Input Mode"
90
+ )
91
+
92
+ text_input = gr.Textbox(
93
+ label="Text Input",
94
+ visible=True
95
+ )
96
+
97
+ audio_input = gr.Audio(
98
+ label="Audio Input",
99
+ type="numpy",
100
+ visible=False
101
+ )
102
+
103
+ tts_language = gr.Dropdown(
104
+ choices=["yoruba", "hausa"],
105
+ value="yoruba",
106
+ label="Speech Output Language"
107
+ )
108
+
109
+ output_text = gr.Textbox(
110
+ label="HealthAtlas Response"
111
+ )
112
+
113
+ output_audio = gr.Audio(
114
+ label="Spoken Response"
115
+ )
116
+
117
+ submit = gr.Button("Submit")
118
+
119
+ def toggle_inputs(m):
120
+ return (
121
+ gr.update(visible=m == "Text"),
122
+ gr.update(visible=m == "Audio")
123
+ )
124
+
125
+ mode.change(
126
+ toggle_inputs,
127
+ inputs=mode,
128
+ outputs=[text_input, audio_input]
129
+ )
130
+
131
+ submit.click(
132
+ healthatlas_pipeline,
133
+ inputs=[mode, text_input, audio_input, tts_language],
134
+ outputs=[output_text, output_audio]
135
+ )
136
+
137
+ if __name__ == "__main__":
138
+ demo.launch()