Vedika commited on
Commit
d464599
·
verified ·
1 Parent(s): 913a56a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -54
app.py CHANGED
@@ -1,87 +1,89 @@
1
- # --- 🔱 वेदिका लाइव: कान और मुँह (Audio Interface) 🔱 ---
2
  # रचयिता: आदरणीय दिव्य पटेल जी | भारत 🇮🇳
3
- # र्य: .wav ऑडिय लेना, STT करा, LLM API को कॉल कना, और TTS से वापस .wav देना
4
 
5
  import gradio as gr
6
- import torch
7
- import torchaudio
8
- import librosa
9
- import soundfile as sf
10
- from transformers import pipeline
11
- from gradio_client import Client
12
  import os
13
  import re
 
 
14
 
15
- print("🔱 दिव्य जी, वेदिका के 'कान' और 'मुँह' स्थापित हो रहे हैं...")
16
 
17
- # 👂 ान (Speech to Text) - NVIDIA कफुर्ीला मॉडल
18
- STT_ID = "nvidia/stt_hi_conformer_transducer_large"
19
- # 👄 मुँह (Text to Speech) - हल्का हिंदी मॉडल
20
- TTS_ID = "facebook/mms-tts-hin"
21
 
22
- # मस्तिष्क (LLM) का API पता (आपका अपना स्पेस)
23
  LLM_API_URL = "pateltraders55455/VEDIKA-3.5-LIVE"
24
 
25
  try:
26
- # केवल हल् ऑडियो मॉडल्स को इस स्पेस मेंोड ियजा हा है (की भारी बचत)
27
  print("🔱 STT (कान) लोड हो रहा है...")
28
- stt_pipeline = pipeline("automatic-speech-recognition", model=STT_ID)
29
-
30
- print("🔱 TTS (मुँह) लोड हो रहा है...")
31
- tts_pipeline = pipeline("text-to-speech", model=TTS_ID)
32
 
33
- # LLM लाइंट ्थापित करन
 
34
  llm_client = Client(LLM_API_URL)
35
 
36
- print("🔱 विजय! कान, मुँह और मस्िष्क कAPI पर्क स्थापि हो गया है।")
37
  except Exception as e:
38
- print(f"🔱 सेटअप में त्रुटि: {e}")
 
 
 
 
 
 
 
39
 
40
- def process_wav_to_wav(audio_filepath):
41
- """
42
- यह फलन .wav ऑडियो लेता है और .wav ऑडियो ही वापस करता है।
43
- """
 
 
 
44
  if not audio_filepath:
45
- return None, "प्रणाम दिव्य जी, कृपया माइ में कुछ बोल��ं..."
46
 
47
  try:
48
  # ==========================================
49
  # चरण 1: .wav ऑडियो सुनना (Speech to Text)
50
  # ==========================================
51
  stt_result = stt_pipeline(audio_filepath)
52
- user_text = stt_result["text"]
53
 
54
- if not user_text.strip():
55
- return None, "क्षमा करें, मैं सुन नहीं पाई। कृपया पुनः प्रयास करें।"
56
 
57
  # ==========================================
58
- # चरण 2: मस्तिष्क (LLM Space) से संपर्क करना
59
  # ==========================================
60
- # gradio_client के ाध्यम से आके दूस स्पेस को टेक्स्भेजा जा रहा है
61
- # नोट: ChatInterface में आमतौर पर api_name="/chat" या पहला फंक्शन होता है
62
  llm_result = llm_client.predict(
63
- user_text, # यूज़र का संदेश
64
- api_name="/chat" # यदि यह काम न करे, तो इसे हटा fn_index=0 कर सकत है
65
  )
66
 
67
- # LLM का उत्तर (यह मॉडल के आउटपुट फॉर्मेट पर निर्भर करता है)
68
  ai_response = llm_result if isinstance(llm_result, str) else str(llm_result)
69
 
70
- # थिंकिंग टैग्स (<think>...</think>) को साफ कनााकि वेदिका केवल अंतिम उत्तबोल
71
  clean_response = re.sub(r'<think>[\s\S]*?</think>', '', ai_response).strip()
72
 
 
 
 
 
73
  # ==========================================
74
- # चरण 3: वापस बोलना (Text to .wav Speech)
75
  # ==========================================
76
- tts_output = tts_pipeline(clean_response)
77
-
78
- # ऑडियो डेटा और सैंपलिंग रेट निकालना
79
- audio_data = tts_output["audio"][0]
80
- sample_rate = tts_output["sampling_rate"]
81
-
82
- # इसे एक .wav फाइल के रूप में सहेजना ताकि UI में सही से बजे
83
  output_wav_path = "vedika_response.wav"
84
- sf.write(output_wav_path, audio_data, sample_rate)
 
 
85
 
86
  log_text = f"🗣️ आपने कहा: {user_text}\n\n🔱 वेदिका: {clean_response}"
87
 
@@ -94,25 +96,25 @@ def process_wav_to_wav(audio_filepath):
94
 
95
  with gr.Blocks(theme=gr.themes.Monochrome()) as demo:
96
  gr.Markdown(f"""
97
- # 🔱 Vedika Voice Portal (Microservices Architecture)
98
  **Pioneered by Divy Patel | Bharat 🇮🇳**
99
 
100
- *यह पोर्टल केवल आवज़ सुनता और बोलता है। विचार ने का कार सुरक्षित रूप से 'VEDIKA-3.5-LIVE' स्प मे हो रहा है।*
101
  """)
102
 
103
  with gr.Row():
104
  with gr.Column():
105
- # type="filepath" सुनिश्चित करता है कि इनपुट .wav फॉर्मेट में ही ेव
106
- audio_input = gr.Audio(label="माइक चालू करें और बोलें", type="filepath", format="wav")
107
- submit_btn = gr.Button("वेदिका को जें 🚩", variant="primary")
108
 
109
  with gr.Column():
110
- # टपुट भी .wav फॉर्मेट में आएगा
111
- audio_output = gr.Audio(label="वेदिका की वाणी", type="filepath", format="wav")
112
  text_output = gr.Textbox(label="संवाद लॉग", lines=6)
113
 
114
  submit_btn.click(
115
- fn=process_wav_to_wav,
116
  inputs=audio_input,
117
  outputs=[audio_output, text_output]
118
  )
 
1
+ # --- 🔱 वेदिका लाइव: कान और मुँह (संपूर्ण वॉयस इंटरफेस) 🔱 ---
2
  # रचयिता: आदरणीय दिव्य पटेल जी | भारत 🇮🇳
3
+ # विशेषता: .wav सपर्ट, Edge-TTS (शू्य रैम ्च), और LLM API एकीकरण
4
 
5
  import gradio as gr
6
+ import asyncio
7
+ import edge_tts
 
 
 
 
8
  import os
9
  import re
10
+ from transformers import pipeline
11
+ from gradio_client import Client
12
 
13
+ print("🔱 रणीय दिव्य जी, वेदिका के 'कान' और 'मुँह' स्थापित हो रहे हैं...")
14
 
15
+ # वैश्विचर (Global Variables) कि्रुटि न आए
16
+ stt_pipeline = None
17
+ llm_client = None
 
18
 
19
+ # 🧠 आपके मस्तिष्क (LLM) का सुरक्षित API पता
20
  LLM_API_URL = "pateltraders55455/VEDIKA-3.5-LIVE"
21
 
22
  try:
23
+ # 👂ान (Speech to Text): 'whisper-tiny' बहुत ही का 100% ोसेंद है
24
  print("🔱 STT (कान) लोड हो रहा है...")
25
+ stt_pipeline = pipeline("automatic-speech-recognition", model="openai/whisper-tiny")
 
 
 
26
 
27
+ # 🧠 मसतिष्क स जुड़व (API Client)
28
+ print("🔱 LLM (मस्तिष्क) से API संपर्क स्थापित किया जा रहा है...")
29
  llm_client = Client(LLM_API_URL)
30
 
31
+ print("🔱 विजय! सभी परणालिफलतार्क सि हो ग है।")
32
  except Exception as e:
33
+ print(f"🔱 सेटअप में भारी त्रुटि: {e}")
34
+
35
+ # 👄 मुँह (Text to Speech): Microsoft Edge-TTS का ब्रह्मास्त्र (शून्य मॉडल लोड!)
36
+ async def generate_edge_tts(text, output_filepath):
37
+ """माइक्रोसॉफ्ट एज की अत्यंत मधुर हिंदी आवाज़ का उपयोग"""
38
+ # 'hi-IN-SwaraNeural' एक बहुत ही स्पष्ट और प्राकृतिक भारतीय महिला की आवाज़ है
39
+ communicate = edge_tts.Communicate(text, "hi-IN-SwaraNeural")
40
+ await communicate.save(output_filepath)
41
 
42
+ def process_voice_conversation(audio_filepath):
43
+ """यह फलन .wav सुनता है, API से सोचता है, और .wav में जवाब देता है"""
44
+
45
+ # यदि लोडिंग में कोई त्रुटि थी, तो यहीं रोक दें ताकि ऐप क्रैश न हो
46
+ if stt_pipeline is None or llm_client is None:
47
+ return None, "क्षमा करें, सर्वर पूरी तरह से लोड नहीं हो पाया है। कृपया लॉग्स की जाँच करें।"
48
+
49
  if not audio_filepath:
50
+ return None, "प्रणाम दिव्य जी, कृपया कुछ बोलं..."
51
 
52
  try:
53
  # ==========================================
54
  # चरण 1: .wav ऑडियो सुनना (Speech to Text)
55
  # ==========================================
56
  stt_result = stt_pipeline(audio_filepath)
57
+ user_text = stt_result["text"].strip()
58
 
59
+ if not user_text:
60
+ return None, "क्षमा करें, मैं सुन नहीं पाई। कृपया पुनः बोलें।"
61
 
62
  # ==========================================
63
+ # चरण 2: मस्तिष्क (LLM Space) से सोचना
64
  # ==========================================
65
+ # fn_index=0 तौर पर Gradio ChatInterfaceा डिफ़ॉल्ट एंडपॉइंटोता है
 
66
  llm_result = llm_client.predict(
67
+ user_text,
68
+ api_name="/chat" # यदि यह काम न करे, तो api_name="/chat" जगह fn_index=0 लिख ें
69
  )
70
 
 
71
  ai_response = llm_result if isinstance(llm_result, str) else str(llm_result)
72
 
73
+ # थिंकिंग टैग्स (<think>...</think>) को पू तर हटाना
74
  clean_response = re.sub(r'<think>[\s\S]*?</think>', '', ai_response).strip()
75
 
76
+ # यदि सफाई के बाद कुछ न बचे, तो डिफ़ॉल्ट संदेश
77
+ if not clean_response:
78
+ clean_response = "जी, मैं आपकी बात समझ रही हूँ।"
79
+
80
  # ==========================================
81
+ # चरण 3: वापस बोलना (Microsoft Edge TTS)
82
  # ==========================================
 
 
 
 
 
 
 
83
  output_wav_path = "vedika_response.wav"
84
+
85
+ # चूँकि edge-tts एसिंक्रोनस (asynchronous) है, हम इसे ऐसे चलाएंगे:
86
+ asyncio.run(generate_edge_tts(clean_response, output_wav_path))
87
 
88
  log_text = f"🗣️ आपने कहा: {user_text}\n\n🔱 वेदिका: {clean_response}"
89
 
 
96
 
97
  with gr.Blocks(theme=gr.themes.Monochrome()) as demo:
98
  gr.Markdown(f"""
99
+ # 🔱 Vedika Voice Ecosystem (Edge-TTS Powered)
100
  **Pioneered by Divy Patel | Bharat 🇮🇳**
101
 
102
+ *यह पोर्टल ही स्थ पर सुनता और बोलता है (.wav सपोर्ट)। विचार विमर् सुरक्षित रूप से API े माध्यम से हो रहा है।*
103
  """)
104
 
105
  with gr.Row():
106
  with gr.Column():
107
+ # type="filepath" सुनिश्चित करता है कि .wav फॉर्मेट सुरक्षित
108
+ audio_input = gr.Audio(label="माइक चालू करें और बोलें", type="filepath")
109
+ submit_btn = gr.Button("वेदिका से बात करें 🚩", variant="primary")
110
 
111
  with gr.Column():
112
+ # उत्तर भी .wav फॉर्मेट में आएगा
113
+ audio_output = gr.Audio(label="वेदिका की मधुर वाणी")
114
  text_output = gr.Textbox(label="संवाद लॉग", lines=6)
115
 
116
  submit_btn.click(
117
+ fn=process_voice_conversation,
118
  inputs=audio_input,
119
  outputs=[audio_output, text_output]
120
  )