File size: 4,219 Bytes
ec11884
0c8a0f0
 
0bb3508
 
 
edd8287
cd2bc8b
 
 
 
 
 
 
 
 
 
 
 
 
0bb3508
 
 
 
 
 
 
 
 
 
 
d4efbd1
9906480
0c8a0f0
 
 
 
 
 
0bb3508
 
 
 
 
 
9906480
0c8a0f0
 
 
 
 
 
 
0bb3508
 
 
 
 
 
 
 
 
d4efbd1
 
b9f9e30
0bb3508
 
4600387
9906480
cd2bc8b
 
 
 
9906480
 
 
 
e1f9a88
9906480
 
 
 
 
 
 
 
 
 
 
df9b536
ec11884
 
549f4f9
cd2bc8b
 
 
b9f9e30
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import gradio as gr
from transformers import pipeline
from langdetect import detect

# Load Arabic NLP model for intent classification
intent_classifier = pipeline("text-classification", model="aubmindlab/bert-base-arabertv02")

# Omdurman National Bank-specific guidelines
ONB_GUIDELINES = {
    "balance": "يمكنك التحقق من رصيدك عبر الإنترنت أو عبر تطبيق الهاتف الخاص ببنك أم درمان الوطني.",
    "lost_card": "في حالة فقدان البطاقة، اتصل بالرقم 249-123-456-789 فورًا.",
    "loan": "شروط القرض تشمل الحد الأدنى للدخل (5000 جنيه سوداني) وتاريخ ائتماني جيد.",
    "transfer": "لتحويل الأموال، استخدم تطبيق الهاتف أو الخدمة المصرفية عبر الإنترنت.",
    "new_account": "لفتح حساب جديد، قم بزيارة أقرب فرع مع جواز سفرك أو هويتك الوطنية.",
    "interest_rates": "أسعار الفائدة على الودائع تتراوح بين 5% إلى 10% سنويًا.",
    "branches": "فروعنا موجودة في أم درمان، الخرطوم، وبورتسودان. زيارة موقعنا للتفاصيل.",
    "working_hours": "ساعات العمل من 8 صباحًا إلى 3 مساءً من الأحد إلى الخميس.",
    "contact": "الاتصال بنا على الرقم 249-123-456-789 أو عبر البريد الإلكتروني [email protected]."
}

# Map intents to responses
INTENT_TO_RESPONSE = {
    "balance": "balance",
    "lost_card": "lost_card",
    "loan": "loan",
    "transfer": "transfer",
    "new_account": "new_account",
    "interest_rates": "interest_rates",
    "branches": "branches",
    "working_hours": "working_hours",
    "contact": "contact"
}

def detect_language(text):
    try:
        return detect(text)
    except:
        return "unknown"

def classify_intent(message: str):
    # Use NLP model to classify the user's intent
    result = intent_classifier(message)
    intent = result[0]['label']
    return INTENT_TO_RESPONSE.get(intent, "unknown")

def respond(message: str):
    # Detect language
    language = detect_language(message)
    
    # If the language is not Arabic, return a default response
    if language != "ar":
        return "عذرًا، هذا المساعد يدعم اللغة العربية فقط. الرجاء إعادة الصياغة بالعربية."
    
    # Classify the user's intent using NLP
    intent = classify_intent(message)
    
    # If intent is recognized, return the corresponding response
    if intent != "unknown":
        return ONB_GUIDELINES.get(intent, "عذرًا، لم يتم التعرف على الخيار المحدد.")
    
    # Fallback to keyword matching if NLP doesn't recognize the intent
    for keyword, key in INTENT_TO_RESPONSE.items():
        if keyword in message:
            return ONB_GUIDELINES.get(key, "عذرًا، لم يتم التعرف على الخيار المحدد.")
    
    # Default response if no intent or keyword is matched
    return "عذرًا، لم أفهم سؤالك. الرجاء إعادة الصياغة أو اختيار أحد الخيارات التالية: " + ", ".join(INTENT_TO_RESPONSE.keys())

# Chat interface
with gr.Blocks(css=".gradio-container {direction: rtl;}") as demo:
    gr.Markdown("# <center>بنك أم درمان الوطني - المساعد المصرفي</center>")
    
    with gr.Tab("المحادثة"):
        gr.Markdown("## اكتب سؤالك هنا:")
        
        # Text input
        text_input = gr.Textbox(label="السؤال")
        
        # Submit button
        submit_btn = gr.Button("إرسال")
        
        # Output textbox for responses
        output = gr.Textbox(label="الرد", interactive=False)
        
        # Link inputs and button to response function
        submit_btn.click(
            fn=respond,
            inputs=text_input,
            outputs=output
        )

if __name__ == "__main__":
    demo.launch(
        server_name="0.0.0.0",
        server_port=7860,
        share=True  # Enable public link
    )