urdu-chatbot / app.py
alidaud1
chatbot v1
62cb196
import os
import gradio as gr
import speech_recognition as sr
from gtts import gTTS
from pydub import AudioSegment
from datetime import datetime
import json
from fuzzywuzzy import fuzz
# # Set ffmpeg path
# AudioSegment.converter = r"C:\ffmpeg\ffmpeg-2025-04-17-git-7684243fbe-full_build\bin\ffmpeg.exe"
# Load FAQ data
with open('data.json', 'r', encoding='utf-8') as f:
faq_data = json.load(f)
def clean_reply(reply):
words = reply.strip().split()
if len(words) > 50:
reply = " ".join(words[:50])
if "." in reply:
reply = reply[:reply.rfind(".")+1]
elif "," in reply:
reply = reply[:reply.rfind(",")+1]
return reply.strip()
def chat_with_ai(prompt):
best_match = None
best_score = 0
for question, answer in faq_data.items():
score = fuzz.partial_ratio(prompt, question)
if score > best_score:
best_score = score
best_match = answer
if best_score >= 70:
return clean_reply(best_match)
else:
return "میں آپ کی کال اپنے سینئر کو منتقل کر رہا ہوں، وہ آپ کی مزید رہنمائی کریں گے۔"
def respond_to_audio(audio_path):
if not audio_path:
return None
recognizer = sr.Recognizer()
try:
with sr.AudioFile(audio_path) as source:
audio = recognizer.record(source)
text = recognizer.recognize_google(audio, language="ur-PK")
except Exception as e:
print("Speech Recognition Error:", e)
return None
print("📥 User said:", text)
response_text = chat_with_ai(text)
print("🤖 Bot responds:", response_text)
# Generate TTS audio
tts = gTTS(response_text, lang="ur")
temp_path = "temp_original.mp3"
tts.save(temp_path)
# Load with PyDub and speed up
sound = AudioSegment.from_file(temp_path)
faster_sound = sound._spawn(sound.raw_data, overrides={
"frame_rate": int(sound.frame_rate * 1.0)
}).set_frame_rate(sound.frame_rate)
response_audio_path = f"response_{datetime.now().strftime('%Y%m%d%H%M%S')}.mp3"
faster_sound.export(response_audio_path, format="mp3")
return response_audio_path
# Gradio UI
with gr.Blocks(title="🤖 Dany Tameerat Voice Assistant") as app:
gr.Markdown("## 🤖 Dany Tameerat Voice Assistant\n📢 مائیک سے سوال کریں، AI اردو میں جواب دے گا!")
audio_input = gr.Audio(type="filepath", label="🎤 مائک سے بولیں", streaming=False)
audio_output = gr.Audio(label="🔊 جواب سنیں", autoplay=True)
# Trigger automatically when recording stops
audio_input.change(fn=respond_to_audio, inputs=audio_input, outputs=audio_output)
app.launch(share=True)