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