Vedika commited on
Commit
3d7d3a3
·
verified ·
1 Parent(s): 0a9b39d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -47
app.py CHANGED
@@ -1,57 +1,60 @@
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()
@@ -60,29 +63,41 @@ def process_voice_conversation(audio_filepath):
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}"
@@ -90,31 +105,29 @@ def process_voice_conversation(audio_filepath):
90
  return output_wav_path, log_text
91
 
92
  except Exception as e:
93
- return None, f"🔱 क्षमा करें, प्रसंस्करण में त्रुटि आई: {str(e)}"
94
 
95
- # --- 🚩 अजेय स्वदेशी इंटरफेस (Gradio) 🚩 ---
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
  )
 
1
+ # --- 🔱 वेदिका संपूर्ण वॉयस पो्टल (All-in-One Ecosystem) 🔱 ---
2
  # रचयिता: आदरणीय दिव्य पटेल जी | भारत 🇮🇳
3
+ # विशेषता: एक ही स्पेस में का(STT), मसतिष्क (LLM), और मुँह (TTS)
4
 
5
  import gradio as gr
6
  import asyncio
7
  import edge_tts
8
+ import torch
9
  import os
10
  import re
11
+ from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
 
12
 
13
+ print("🔱 आदरणीय दिव्य जी, वेदिका की त्रिवणी (कान, मस्तिष्क, मुँह) गृत हो रह है...")
14
 
15
+ # 👂 ान (STT) - त्यंत हल्का औविश्वसीय
16
+ STT_ID = "openai/whisper-tiny"
 
17
 
18
+ # 🧠 मस्तिष्क (LLM) - Qwen 0.5B (हगिंग फे फ्ी सपेस के लि एकदम सही और हल्क अस्त्र)
19
+ LLM_ID = "Qwen/Qwen2.5-0.5B-Instruct"
20
 
21
  try:
 
22
  print("🔱 STT (कान) लोड हो रहा है...")
23
+ stt_pipeline = pipeline("automatic-speech-recognition", model=STT_ID)
24
 
25
+ print("🔱 LLM (मस्तिष्क) लोड हो रहहै...")
26
+ tokenizer = AutoTokenizer.from_pretrained(LLM_ID)
27
+ model = AutoModelForCausalLM.from_pretrained(
28
+ LLM_ID,
29
+ device_map="auto",
30
+ torch_dtype=torch.float16, # रैम की बचत और शानदार गति
31
+ low_cpu_mem_usage=True
32
+ )
33
 
34
+ print("🔱 विजय! कान मस्तिष्क सफलतापूर्वक सक्रिय हो ग हैं।")
35
  except Exception as e:
36
+ print(f"🔱 सेटअप में त्रुटि: {e}")
37
+ stt_pipeline = None
38
+ model = None
39
 
40
+ # 👄 मुँह (TTS) - Microsoft Edge-TTS (शून्य रैखर्च)
41
  async def generate_edge_tts(text, output_filepath):
42
+ """माइक्रोसॉफ्ट एज की अत्यंत मधुर हिंदी आवाज़"""
 
43
  communicate = edge_tts.Communicate(text, "hi-IN-SwaraNeural")
44
  await communicate.save(output_filepath)
45
 
46
+ def process_all_in_one(audio_filepath):
47
+ """एक फलन में सुना, सोचा और बोलना"""
48
 
49
+ if stt_pipeline is None or model is None:
50
+ return None, "क्षमा करें, सर्वर पूरी तरह से लोड नहीं हो पाया है।"
 
51
 
52
  if not audio_filepath:
53
+ return None, "प्रणाम दिव्य जी, कृपया माइ में कुछ बोलें..."
54
 
55
  try:
56
  # ==========================================
57
+ # चरण 1: सुनना (Speech to Text)
58
  # ==========================================
59
  stt_result = stt_pipeline(audio_filepath)
60
  user_text = stt_result["text"].strip()
 
63
  return None, "क्षमा करें, मैं सुन नहीं पाई। कृपया पुनः बोलें।"
64
 
65
  # ==========================================
66
+ # चरण 2: सोचना (LLM Generation)
67
  # ==========================================
68
+ messages = [
69
+ {"role": "system", "content": "आप 'वेदिका' हैं, एक अत्यंत बुद्धिमान और शालीन एआई, जिसे आदरणीय दिव्य पटेल जी ने भारत में बनाया है। हमेशा सम्मानजनक हिंदी में बहुत ही संक्षिप्त और सटीक उत्तर दें।"},
70
+ {"role": "user", "content": user_text}
71
+ ]
72
+
73
+ # प्रॉम्प्ट तैयार करना
74
+ text_prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
75
+ inputs = tokenizer([text_prompt], return_tensors="pt").to(model.device)
76
+
77
+ # उत्तर उत्पन्न करना
78
+ output_ids = model.generate(
79
+ **inputs,
80
+ max_new_tokens=150, # आवाज़ के लिए छोटे उत्तर बेहतर होते हैं
81
+ temperature=0.7,
82
+ do_sample=True
83
  )
84
 
85
+ # आउटपुट से केवल नया उत्तर निकालना
86
+ response_ids = output_ids[0][len(inputs.input_ids[0]):]
87
+ ai_response = tokenizer.decode(response_ids, skip_special_tokens=True)
88
 
89
+ # सुरक्षा के लिए थिंकिंग टैग्स हटाना
90
  clean_response = re.sub(r'<think>[\s\S]*?</think>', '', ai_response).strip()
91
 
 
92
  if not clean_response:
93
+ clean_response = "जी, आपकी बात मेरे ंज्ञान ें गई ।"
94
 
95
  # ==========================================
96
+ # चरण 3: बोलना (Text to Speech)
97
  # ==========================================
98
+ output_wav_path = "vedika_final_response.wav"
99
 
100
+ # एसिंक्रोनस TTS को चलाना
101
  asyncio.run(generate_edge_tts(clean_response, output_wav_path))
102
 
103
  log_text = f"🗣️ आपने कहा: {user_text}\n\n🔱 वेदिका: {clean_response}"
 
105
  return output_wav_path, log_text
106
 
107
  except Exception as e:
108
+ return None, f"🔱 क्षमा करें, प्रसंस्करण में तकनीकी बाधा आई: {str(e)}"
109
 
110
+ # --- 🚩 स्वदेशी अजेय इंटरफेस (Gradio) 🚩 ---
111
 
112
  with gr.Blocks(theme=gr.themes.Monochrome()) as demo:
113
  gr.Markdown(f"""
114
+ # 🔱 Vedika Voice Ecosystem (All-in-One)
115
  **Pioneered by Divy Patel | Bharat 🇮🇳**
116
 
117
+ *यह एक संूर्ण स्वदेशी पोर्टल है जो एक ही सवर पर सुनता है (Whisper), सता है (Qwen 0.5B), बोलता है (Edge-TTS)।*
118
  """)
119
 
120
  with gr.Row():
121
  with gr.Column():
 
122
  audio_input = gr.Audio(label="माइक चालू करें और बोलें", type="filepath")
123
+ submit_btn = gr.Button("वेदिका से संव करें 🚩", variant="primary")
124
 
125
  with gr.Column():
 
126
  audio_output = gr.Audio(label="वेदिका की मधुर वाणी")
127
  text_output = gr.Textbox(label="संवाद लॉग", lines=6)
128
 
129
  submit_btn.click(
130
+ fn=process_all_in_one,
131
  inputs=audio_input,
132
  outputs=[audio_output, text_output]
133
  )