Sehamsaa commited on
Commit
fc1f035
·
verified ·
1 Parent(s): f6580c6

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +27 -5
main.py CHANGED
@@ -21,8 +21,8 @@ from transformers import AutoTokenizer, AutoModelForSequenceClassification
21
  # ============================================================================
22
 
23
  MODEL_PATH = os.getenv("MODEL_PATH", "./saved_model")
24
- TOKENIZER_NAME = "UBC-NLP/MARBERT" # نحمّل الـ tokenizer مباشرة من Hub
25
- MAX_LENGTH = 256
26
 
27
  LABELS_EN = ["Low", "Medium", "High", "Critical"]
28
  LABELS_AR = ["منخفضة", "متوسطة", "عالية", "حرجة"]
@@ -50,11 +50,23 @@ async def lifespan(app: FastAPI):
50
  device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
51
  tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_NAME)
52
  model = AutoModelForSequenceClassification.from_pretrained(MODEL_PATH)
 
 
 
 
 
 
 
 
 
 
 
 
53
  model.to(device).eval()
54
  state["tokenizer"] = tokenizer
55
  state["model"] = model
56
  state["device"] = device
57
- print(f"[startup] Model ready on {device} | num_labels={model.config.num_labels}")
58
  yield
59
  state.clear()
60
 
@@ -92,8 +104,18 @@ def predict_severity(text: str) -> dict:
92
  raise RuntimeError("Model not loaded.")
93
 
94
  device = state["device"]
95
- inputs = tokenizer(text, return_tensors="pt", truncation=True,
96
- padding=True, max_length=MAX_LENGTH).to(device)
 
 
 
 
 
 
 
 
 
 
97
  with torch.no_grad():
98
  logits = model(**inputs).logits
99
  probs = torch.softmax(logits, dim=-1).cpu().numpy()[0]
 
21
  # ============================================================================
22
 
23
  MODEL_PATH = os.getenv("MODEL_PATH", "./saved_model")
24
+ TOKENIZER_NAME = "UBC-NLP/MARBERT"
25
+ MAX_LENGTH = 128 # نفس القيمة في التدريب الأصلي
26
 
27
  LABELS_EN = ["Low", "Medium", "High", "Critical"]
28
  LABELS_AR = ["منخفضة", "متوسطة", "عالية", "حرجة"]
 
50
  device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
51
  tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_NAME)
52
  model = AutoModelForSequenceClassification.from_pretrained(MODEL_PATH)
53
+
54
+ # تشخيص أحجام المفردات
55
+ tokenizer_vocab = len(tokenizer)
56
+ model_vocab = model.config.vocab_size
57
+ print(f"[diagnostic] Tokenizer vocab size: {tokenizer_vocab}")
58
+ print(f"[diagnostic] Model vocab size: {model_vocab}")
59
+
60
+ # مزامنة الأحجام إذا كان فيه اختلاف
61
+ if tokenizer_vocab != model_vocab:
62
+ print(f"[fix] Resizing model token embeddings: {model_vocab} -> {tokenizer_vocab}")
63
+ model.resize_token_embeddings(tokenizer_vocab)
64
+
65
  model.to(device).eval()
66
  state["tokenizer"] = tokenizer
67
  state["model"] = model
68
  state["device"] = device
69
+ print(f"[startup] Model ready on {device} | num_labels={model.config.num_labels}")
70
  yield
71
  state.clear()
72
 
 
104
  raise RuntimeError("Model not loaded.")
105
 
106
  device = state["device"]
107
+ inputs = tokenizer(
108
+ text,
109
+ return_tensors="pt",
110
+ truncation=True,
111
+ padding=True,
112
+ max_length=MAX_LENGTH,
113
+ ).to(device)
114
+
115
+ # حماية إضافية: تأكدي من أن جميع الـ token IDs ضمن النطاق
116
+ vocab_size = model.config.vocab_size
117
+ inputs["input_ids"] = torch.clamp(inputs["input_ids"], max=vocab_size - 1)
118
+
119
  with torch.no_grad():
120
  logits = model(**inputs).logits
121
  probs = torch.softmax(logits, dim=-1).cpu().numpy()[0]