Spaces:
Sleeping
Sleeping
import os | |
import logging | |
from flask import Flask, request, jsonify | |
from flask_cors import CORS | |
from transformers import pipeline | |
import torch | |
app = Flask(__name__) | |
CORS(app) | |
# تهيئة السجل (Logging) | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
# الفئات المحددة مسبقًا | |
PREDEFINED_LABELS = [ | |
"مطار", "مطعم", "سوق", "حديقة", "ملعب", "مسجد", | |
"طريق", "مخبز", "صيدلية", "مستشفى", "مصنع", | |
"محطة وقود", "جامعة", "مطبخ", "غرفة نوم", | |
"حمام", "غرفة معيشة", "شرفة", "مكتب", "صف دراسي" | |
] | |
# متغيرات عامة للنموذج والتهيئة | |
MODEL = None | |
DEVICE = None | |
LABELS_ENCODED = None # سيتم تخزين تمثيل الـ Labels هنا | |
def initialize(): | |
global MODEL, DEVICE, LABELS_ENCODED | |
DEVICE = "cuda" if torch.cuda.is_available() else "cpu" | |
logger.info(f"جار التحميل على الجهاز: {DEVICE}") | |
MODEL = pipeline( | |
task="zero-shot-classification", | |
model="joeddav/xlm-roberta-large-xnli", | |
device=DEVICE, | |
torch_dtype=torch.float16 if DEVICE == "cuda" else torch.float32, | |
) | |
# تهيئة النموذج مع الـ Labels كاملة (Warm-up) | |
logger.info("جار تهيئة النموذج مع الـ Labels...") | |
dummy_result = MODEL( | |
"تهيئة النموذج", | |
PREDEFINED_LABELS, | |
multi_label=False | |
) | |
logger.info("تم تحميل النموذج والـ Labels بنجاح") | |
# استدعاء التهيئة عند بدء التشغيل | |
initialize() | |
def classify(): | |
try: | |
text = request.json.get('text', '').strip() | |
if not text: | |
return jsonify({"error": "يجب تقديم نص للتصنيف"}), 400 | |
# الاستدعاء باستخدام الـ Labels المخزنة مسبقًا | |
result = MODEL(text, PREDEFINED_LABELS, multi_label=False) | |
return jsonify({ | |
"prediction": { | |
"label": result["labels"][0], | |
"score": float(result["scores"][0]) | |
} | |
}) | |
except Exception as e: | |
logger.error(f"خطأ في التصنيف: {str(e)}") | |
return jsonify({"error": "حدث خطأ أثناء المعالجة"}), 500 | |
if __name__ == '__main__': | |
app.run(host='0.0.0.0', port=7860) |