Spaces:
Runtime error
Runtime error
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() |