plant-chatbot / app.py
Dhakara's picture
Update app.py
fc12ced verified
Raw
History Blame Contribute Delete
2.73 kB
import gradio as gr
from gtts import gTTS
import os
import uuid
import tempfile
from transformers import pipeline
from deep_translator import GoogleTranslator
import fasttext
# Load language detection model
lang_model = fasttext.load_model("lid.176.bin")
# Load Hugging Face model
qa_pipeline = pipeline("text2text-generation", model="google/flan-t5-base")
# Plant/Soil knowledge base
knowledge_base = {
"best soil for gardening": "Loamy soil is best for gardening because it retains moisture and nutrients but also drains well.",
"best soil for tomato": "Tomatoes grow best in well-drained loamy soil that is rich in organic matter.",
"how to improve soil fertility": "You can improve soil fertility by adding compost, green manure, and crop rotation.",
"ideal soil for strawberry": "Strawberries prefer slightly acidic, well-drained loamy soil with high organic content.",
"what soil for roses": "Roses grow well in loamy, well-drained soil with a pH between 6.0 and 7.0."
}
# FastText-based language detection
def detect_language(text):
lang = lang_model.predict(text)[0][0].replace("__label__", "")
return lang
def generate_response(text):
# Detect language and translate
original_lang = detect_language(text)
translated_input = GoogleTranslator(source='auto', target='en').translate(text)
# Use knowledge base if match
response_text = ""
for key in knowledge_base:
if key in translated_input.lower():
response_text = knowledge_base[key]
break
# Otherwise use Hugging Face model
if not response_text:
response_text = qa_pipeline(translated_input, max_length=100)[0]['generated_text']
# Translate back to original language
translated_response = GoogleTranslator(source='en', target=original_lang).translate(response_text)
# Text-to-speech
try:
tts = gTTS(text=translated_response, lang=original_lang)
except:
tts = gTTS(text=translated_response, lang='en')
audio_path = os.path.join(tempfile.gettempdir(), f"{uuid.uuid4()}.mp3")
tts.save(audio_path)
return translated_response, audio_path
# Gradio UI
with gr.Blocks() as demo:
gr.Markdown("🌍 **Multilingual Voice Chatbot**\nAsk in any language about plants/soil!")
with gr.Row():
with gr.Column():
text_input = gr.Textbox(label="🌱 Ask a Question")
ask_button = gr.Button("🧠 Get Answer")
with gr.Column():
text_output = gr.Textbox(label="πŸ“ Response")
audio_output = gr.Audio(label="πŸ”Š Voice", autoplay=True)
ask_button.click(fn=generate_response, inputs=text_input, outputs=[text_output, audio_output])
demo.launch(share=True)