waleedmohd's picture
Update app.py
fee1871 verified
raw
history blame
3.2 kB
import gradio as gr
import spacy
import json
from datetime import datetime
# Load spaCy language models
try:
nlp_ar = spacy.blank("ar") # Arabic
nlp_en = spacy.blank("en") # English
except Exception as e:
print(f"Error loading spaCy models: {e}")
nlp_ar = None
nlp_en = None
# Function to detect language using spaCy
def detect_language(text):
if not text.strip():
return "unknown"
# Check if the text contains Arabic characters using spaCy
if nlp_ar and any(token.is_alpha for token in nlp_ar(text)):
return "ar"
# Check for English
if nlp_en and any(token.is_alpha for token in nlp_en(text)):
return "en"
return "unknown"
# Placeholder customer service functions
def get_enhanced_response(intent, lang):
responses = {
"balance": {"ar": "رصيدك هو 1000 جنيه سوداني.", "en": "Your balance is 1000 SDG."},
"lost_card": {"ar": "يرجى الاتصال بالبنك فورًا للإبلاغ عن بطاقة مفقودة.", "en": "Please contact the bank immediately to report a lost card."}
}
return responses.get(intent, {}).get(lang, "I'm not sure how to answer that.")
# Log interactions
def log_interaction(user_message, bot_response, intent, language):
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_entry = {"timestamp": timestamp, "user_message": user_message, "bot_response": bot_response, "intent": intent, "language": language}
with open("/mnt/data/chat_logs.jsonl", "a", encoding="utf-8") as f:
f.write(json.dumps(log_entry, ensure_ascii=False) + "\n")
# Intent classification function
def classify_intent(message):
keywords = {
"balance": ["balance", "رصيد"],
"lost_card": ["lost", "card", "بطاقة", "ضائعة"]
}
for intent, words in keywords.items():
if any(word in message.lower() for word in words):
return intent
return "unknown"
# Response function
def respond(message):
language = detect_language(message)
intent = classify_intent(message)
response = get_enhanced_response(intent, language)
log_interaction(message, response, intent, language)
return response
# Chatbot interface with Gradio
def chatbot_interface(user_input, chat_history):
if not user_input.strip():
return "", chat_history
response = respond(user_input)
chat_history.append(("User", user_input))
chat_history.append(("Bot", response))
return "", chat_history
# Gradio UI
with gr.Blocks() as demo:
gr.Markdown("# Banking Chatbot - Now with spaCy")
chat_history = gr.State([])
chatbot = gr.Chatbot()
user_input = gr.Textbox(placeholder="Type your message...")
send_btn = gr.Button("Send")
send_btn.click(fn=chatbot_interface, inputs=[user_input, chat_history], outputs=[user_input, chatbot])
user_input.submit(fn=chatbot_interface, inputs=[user_input, chat_history], outputs=[user_input, chatbot])
if __name__ == "__main__":
demo.launch()