Vedika commited on
Commit
9896caf
·
verified ·
1 Parent(s): a8d6c17

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +95 -92
app.py CHANGED
@@ -1,118 +1,121 @@
1
- # --- 🔱 वेदिका 3.5 फ्ैश: भारत का अप 2B AI (Super Fast Version) ---
2
- # रचयिता एवं मार्गदर्शक: दिव्य पटेल जी | भारत 🇮🇳
 
3
 
4
  import gradio as gr
5
  import torch
6
- from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
7
- from threading import Thread
8
- from PIL import Image
 
 
9
  import os
10
- import cv2
11
 
12
- print("🔱 भारत का अेय AI 'वेदिका 3.5 फ्लैश' सुप-फास्टोड में जगृत हो रह है...")
13
 
14
- # CPU Optimization
15
- os.environ["OMP_NUM_THREADS"] = "2"
16
- torch.set_num_threads(2)
 
17
 
18
- MODEL_ID = "pateltraders55455/Vedika-3.5-flash"
 
19
 
20
  try:
21
- print(f"🔱 '{MODEL_ID}' (2B) लोड किया जा रहा है...")
22
- tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, trust_remote_code=True)
23
- model = AutoModelForCausalLM.from_pretrained(
24
- MODEL_ID,
25
- device_map="cpu",
26
- torch_dtype=torch.bfloat16,
27
- low_cpu_mem_usage=True,
28
- trust_remote_code=True
29
- )
30
- print("🔱 विजय! 'वेदिका 3.5 फ्लैश' तैयार है!")
31
- except Exception as e:
32
- print(f"🔱 मॉडल लोडिंग में त्रुटि: {e}")
33
- model, tokenizer = None, None
34
-
35
- def generate_vedika_magic(message, history, image=None, video=None):
36
- if model is None or tokenizer is None:
37
- return history + [{"role": "assistant", "content": "🔱 सिस्टम त्रुटि: मोडल लोड नहीं हो सका।"}]
38
-
39
- recent_history = history[-2:] if len(history) > 2 else history
40
 
41
- system_instruction = """You are 'Vedika 3.5 Flash'...
 
42
 
43
- <think>
44
- 1. Analyze the user's query carefully.
45
- 2. Break down the problem into smaller logical steps.
46
- 3. Consider different solutions or facts.
47
- 4. Formulate the best response.
48
- </think>
49
 
50
- [Your final, polished answer goes here, OUTSIDE the think tags.]
 
 
 
 
 
 
51
  """
 
 
52
 
53
- messages = [{"role": "system", "content": system_instruction}]
54
-
55
- for user_msg, ai_msg in recent_history:
56
- messages.append({"role": "user", "content": user_msg})
57
- messages.append({"role": "assistant", "content": ai_msg})
58
-
59
- if image is not None:
60
- messages.append({"role": "user", "content": "Describe this image."})
61
- if video is not None:
62
- messages.append({"role": "user", "content": "Describe this video."})
63
-
64
- messages.append({"role": "user", "content": message})
65
-
66
  try:
67
- text_prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
68
- inputs = tokenizer([text_prompt], return_tensors="pt").to(model.device)
69
-
70
- streamer = TextIteratorStreamer(tokenizer, timeout=60.0, skip_prompt=True, skip_special_tokens=True)
 
71
 
72
- generate_kwargs = dict(
73
- **inputs,
74
- streamer=streamer,
75
- max_new_tokens=512,
76
- temperature=1,
77
- top_p=0.9,
78
- do_sample=True,
79
- use_cache=True
 
 
 
80
  )
 
 
 
 
 
 
81
 
82
- t = Thread(target=model.generate, kwargs=generate_kwargs)
83
- t.start()
84
-
85
- # पिछले स्ट्रिमर लूप को जारी रखते हैं
86
- response_text = ""
87
- for new_token in streamer:
88
- response_text += new_token
 
 
 
 
 
89
 
90
- # सही फॉर्मेट परिणाम ो लौटएँ ताकि Gradio ो समस्यन हो
91
- return history + [{"role": "assistant", "content": response_text}]
 
92
 
93
  except Exception as e:
94
- return history + [{"role": "assistant", "content": f"🔱 प्रसंस्करण त्रुटि: {str(e)}"}]
95
-
96
- # =============================================================================
97
- # 🔱 वेदिका 3.5 फ्लैश का मल्टीमीडिया UI + Send बटन
98
- # ============================================================================
99
 
100
- with gr.Blocks() as demo:
101
- gr.Markdown("## 🔱 Vedika 3.5 Flash (Super Fast)")
102
 
103
- with gr.Row():
104
- text_input = gr.Textbox(placeholder="वेदिका 3.5 फ्लैश से कुछ भी पूछें...")
105
- image_input = gr.Image(type="filepath", label="Upload Photo")
106
- video_input = gr.Video(label="Upload Video")
107
 
108
- send_btn = gr.Button("Send")
109
- chat_output = gr.Chatbot()
110
-
111
- def chat_fn(message, history, image, video):
112
- return generate_vedika_magic(message, history, image, video)
113
-
114
- send_btn.click(chat_fn, [text_input, chat_output, image_input, video_input], chat_output)
 
 
 
 
 
 
 
 
 
 
 
 
115
 
116
  if __name__ == "__main__":
117
- demo.launch()
118
-
 
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
+
88
+ return output_wav_path, log_text
89
 
90
  except Exception as e:
91
+ return None, f"🔱 क्षमा करें, प्रसंस्करण में त्रुटि आई: {str(e)}"
 
 
 
 
92
 
93
+ # --- 🚩 अजेय स्वदेशी इंटरफेस (Gradio) 🚩 ---
 
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
+ )
119
 
120
  if __name__ == "__main__":
121
+ demo.launch()