import gradio as gr import requests import os # ============================================ # إعدادات الاتصال بـ Backend API # ============================================ BACKEND_API_URL = os.getenv("BACKEND_API_URL", "http://localhost:7860") # ============================================ # دالة الاتصال بـ API # ============================================ def analyze_phishing(text): if not text or text.strip() == "": return "⚠️ الرجاء إدخال نص للتحليل", "", "" try: response = requests.post( f"{BACKEND_API_URL}/analyze", json={"text": text}, timeout=30 ) if response.status_code == 200: result = response.json() verdict = result.get("verdict", "❌ خطأ في المعالجة") confidence = result.get("confidence", 0) model_class = result.get("model_class", -1) model_confidence = result.get("model_confidence", 0) indicators_found = result.get("indicators_found", False) verdict_text = f"**النتيجة**: {verdict}" confidence_text = f""" **معلومات الثقة**: - ثقة النموذج: {model_confidence}% - الثقة النهائية: {confidence}% - تصنيف النموذج: {'احتيال' if model_class == 1 else 'آمن'} - مؤشرات احتيال مكتشفة: {'نعم ✓' if indicators_found else 'لا ✗'} """ if "احتيال" in verdict: color_indicator = "🔴 **تحذير**: هذه الرسالة تحتوي على علامات احتيال قوية!" else: color_indicator = "🟢 **آمن**: هذه الرسالة آمنة للاستخدام." return verdict_text, confidence_text, color_indicator else: return f"❌ خطأ في الاتصال: {response.status_code}", "", "" except Exception as e: return f"❌ خطأ: تأكد من أن المساحة الأولى تعمل. التفاصيل: {str(e)}", "", "" # ============================================ # بناء واجهة Gradio (متوافقة مع 4.44.1) # ============================================ with gr.Blocks(theme=gr.themes.Soft(primary_hue="red"), title="PhishGuard AI") as demo: gr.Markdown("# 🛡️ PhishGuard AI - كاشف التصيد الاحتيالي") gr.Markdown("أداة ذكية للكشف عن رسائل التصيد الاحتيالي باستخدام تعلم الآلة والمنطق الهجين.") # استبدال Divider بـ Markdown خط أفقي لضمان التوافق gr.Markdown("---") with gr.Group(): gr.Markdown("### 📝 أدخل الرسالة للتحليل") input_text = gr.Textbox( label="نص الرسالة", placeholder="الصق نص الرسالة أو البريد الإلكتروني هنا...", lines=5 ) gr.Markdown("---") analyze_button = gr.Button("🔍 تحليل الرسالة", variant="primary") gr.Markdown("---") with gr.Group(): gr.Markdown("### 📊 النتائج") with gr.Row(): verdict_output = gr.Markdown("**النتيجة**: في انتظار إدخال نص...") indicator_output = gr.Markdown("**الحالة**: جاهز للتحليل") gr.Markdown("---") confidence_output = gr.Markdown("**معلومات الثقة**: سيتم عرضها هنا بعد التحليل") with gr.Accordion("ℹ️ معلومات مهمة", open=False): gr.Markdown(""" ### نصائح للحماية: 1. لا تضغط على روابط غريبة. 2. راقب الكلمات مثل "سارع" أو "حدث بياناتك". 3. لا تشارك بياناتك البنكية أبداً. """) analyze_button.click( fn=analyze_phishing, inputs=input_text, outputs=[verdict_output, confidence_output, indicator_output] ) if __name__ == "__main__": demo.launch()