MHD011's picture
Upload 5 files
9fe5b76 verified
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()
@app.route('/classify', methods=['POST'])
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)