import gradio as gr import pandas as pd import uuid import shutil import edge_tts import re from sentence_transformers import SentenceTransformer, util import asyncio # Load Gita dataset df = pd.read_csv("bhagavad_gita.csv") # Load model model = SentenceTransformer("all-MiniLM-L6-v2") verse_embeddings = model.encode(df['meaning_in_english'].tolist(), convert_to_tensor=True) # Background music path bg_music_path = "krishna_bg_music.mp3" def shorten_explanation(text, max_sentences=2): return '. '.join(text.split('. ')[:max_sentences]).strip() + "." def clean_english(text): return re.sub(r'[^\x00-\x7F]+', ' ', text) def generate_voice_sync(text): voice = "en-IN-PrabhatNeural" filename = f"{uuid.uuid4()}.mp3" communicate = edge_tts.Communicate(text, voice=voice) loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.run_until_complete(communicate.save(filename)) loop.close() return filename def get_unique_bgm(): unique_path = f"bgm_{uuid.uuid4()}.mp3" shutil.copy(bg_music_path, unique_path) return unique_path def versewise_bot(question, play_music): if not question.strip(): return "Please ask a question.", None, None query_embedding = model.encode(question, convert_to_tensor=True) similarity_scores = util.pytorch_cos_sim(query_embedding, verse_embeddings)[0] idx = similarity_scores.argmax().item() verse = df.iloc[idx] sanskrit = verse['verse_in_sanskrit'] translation = verse['translation_in_english'] explanation = shorten_explanation(verse['meaning_in_english']) verse_number = verse['verse_number'] reply = f"""π *Bhagavad Gita {verse_number}* π "{sanskrit[:60]}..." *"{translation}"* π {explanation} πΌ Stay strong β Krishna walks with you.""" voice_text = f"{clean_english(translation)}. {clean_english(explanation)}" audio_path = generate_voice_sync(voice_text) music = get_unique_bgm() if play_music else None return reply, audio_path, music def get_quote_of_the_day(): verse = df.sample(1).iloc[0] sanskrit = verse['verse_in_sanskrit'] translation = verse['translation_in_english'] verse_number = verse['verse_number'] return f"""