File size: 2,736 Bytes
c045b61
ec978d4
 
 
 
 
41a8fd5
ec978d4
41a8fd5
53b9316
ec978d4
53b9316
 
 
 
 
ec978d4
53b9316
ec978d4
 
 
53b9316
 
 
 
 
 
 
 
 
ec978d4
53b9316
 
 
 
c045b61
53b9316
 
ec978d4
f18ee53
53b9316
 
 
ec978d4
53b9316
 
 
 
ec978d4
53b9316
 
 
ec978d4
53b9316
ec978d4
53b9316
 
 
 
 
 
 
f18ee53
53b9316
 
c045b61
 
53b9316
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import gradio as gr
import re
import json
import time
from datetime import datetime

# Corrected Simple language detection function
def simple_detect_language(text):
    arabic_pattern = re.compile(r'[Ø€-Û¿]+')  # Fixed Arabic character range
    return "ar" if arabic_pattern.search(text) else "en"

# Placeholder customer service functions
def get_enhanced_response(intent, lang, name=""):
    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.")

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") as f:
        f.write(json.dumps(log_entry) + "\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 = simple_detect_language(message)
    intent = classify_intent(message)
    response = get_enhanced_response(intent, language)
    log_interaction(message, response, intent, language)
    return response

# Chat 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")
    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()