Skydata001 commited on
Commit
90e19d2
·
verified ·
1 Parent(s): fa949bc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -16
app.py CHANGED
@@ -14,13 +14,6 @@ from supabase import create_client, Client
14
  from PIL import Image
15
 
16
  import torch
17
- from transformers import (
18
- Qwen2_5_VLForConditionalGeneration,
19
- AutoProcessor,
20
- TextIteratorStreamer
21
- )
22
- from qwen_vl_utils import process_vision_info
23
- from faster_whisper import WhisperModel
24
 
25
  app = FastAPI()
26
 
@@ -36,14 +29,27 @@ model_error_message = ""
36
  model = None
37
  processor = None
38
  whisper_model = None
 
 
39
 
40
  def load_models_in_background():
41
- """تحميل النموذج في الخلفية لضمان عمل السيرفر في أقل من 5 ثوانٍ"""
42
- global model, processor, whisper_model, model_status, model_error_message
43
  try:
44
- print(f"جاري تحميل نموذج {MODEL_ID} في الخلفية على A100 GPU ({DEVICE})...")
45
 
46
- # تحميل Qwen 2.5-VL 32B AWQ
 
 
 
 
 
 
 
 
 
 
 
47
  model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
48
  MODEL_ID,
49
  torch_dtype="auto",
@@ -63,7 +69,7 @@ def load_models_in_background():
63
  model_error_message = str(e)
64
  print(f"خطأ أثناء تحميل النموذج على GPU: {e}")
65
 
66
- # إطلاق التحميل في خيط خلفي فور الإقلاع
67
  threading.Thread(target=load_models_in_background, daemon=True).start()
68
 
69
  # ---------------------------------------------------------
@@ -144,10 +150,10 @@ async def chat_endpoint(
144
  image_file: Optional[UploadFile] = File(None),
145
  audio_file: Optional[UploadFile] = File(None)
146
  ):
147
- if not model or not processor:
148
  raise HTTPException(
149
  status_code=500,
150
- detail=f"النموذج جاري تحميله حالياً في الذاكرة. الحالة: {model_status}. يرجى الانتظار بضع ثوانٍ..."
151
  )
152
 
153
  user_text = message
@@ -252,7 +258,7 @@ async def chat_endpoint(
252
 
253
  # 7. التجهيز والبث الحي
254
  text_prompt = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
255
- image_inputs, video_inputs = process_vision_info(messages)
256
 
257
  inputs = processor(
258
  text=[text_prompt],
@@ -262,7 +268,7 @@ async def chat_endpoint(
262
  return_tensors="pt"
263
  ).to(DEVICE)
264
 
265
- streamer = TextIteratorStreamer(processor.tokenizer, skip_prompt=True, skip_special_tokens=True)
266
  generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=2048)
267
 
268
  thread = Thread(target=model.generate, kwargs=generation_kwargs)
 
14
  from PIL import Image
15
 
16
  import torch
 
 
 
 
 
 
 
17
 
18
  app = FastAPI()
19
 
 
29
  model = None
30
  processor = None
31
  whisper_model = None
32
+ process_vision_info_fn = None
33
+ TextIteratorStreamer_cls = None
34
 
35
  def load_models_in_background():
36
+ """تحميل المستلزمات والنموذج في خيط خلفي آمن لمنع توقف السيرفر"""
37
+ global model, processor, whisper_model, process_vision_info_fn, TextIteratorStreamer_cls, model_status, model_error_message
38
  try:
39
+ print(f"جاري استيراد مكتبات الذكاء الاصطناعي وتجهيز {MODEL_ID} على A100 GPU ({DEVICE})...")
40
 
41
+ from transformers import (
42
+ Qwen2_5_VLForConditionalGeneration,
43
+ AutoProcessor,
44
+ TextIteratorStreamer
45
+ )
46
+ from qwen_vl_utils import process_vision_info
47
+ from faster_whisper import WhisperModel
48
+
49
+ process_vision_info_fn = process_vision_info
50
+ TextIteratorStreamer_cls = TextIteratorStreamer
51
+
52
+ # تحميل Qwen 2.5-VL 32B AWQ بطريقة صحيحة ومجربة
53
  model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
54
  MODEL_ID,
55
  torch_dtype="auto",
 
69
  model_error_message = str(e)
70
  print(f"خطأ أثناء تحميل النموذج على GPU: {e}")
71
 
72
+ # إطلاق التحميل التفرعي في الخلفية فور تشغيل التطبيق
73
  threading.Thread(target=load_models_in_background, daemon=True).start()
74
 
75
  # ---------------------------------------------------------
 
150
  image_file: Optional[UploadFile] = File(None),
151
  audio_file: Optional[UploadFile] = File(None)
152
  ):
153
+ if not model or not processor or not TextIteratorStreamer_cls or not process_vision_info_fn:
154
  raise HTTPException(
155
  status_code=500,
156
+ detail=f"النموذج جاري تحميله في الذاكرة. الحالة: '{model_status}'. الخطأ إن وجد: {model_error_message}"
157
  )
158
 
159
  user_text = message
 
258
 
259
  # 7. التجهيز والبث الحي
260
  text_prompt = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
261
+ image_inputs, video_inputs = process_vision_info_fn(messages)
262
 
263
  inputs = processor(
264
  text=[text_prompt],
 
268
  return_tensors="pt"
269
  ).to(DEVICE)
270
 
271
+ streamer = TextIteratorStreamer_cls(processor.tokenizer, skip_prompt=True, skip_special_tokens=True)
272
  generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=2048)
273
 
274
  thread = Thread(target=model.generate, kwargs=generation_kwargs)