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()