ONYX-APP commited on
Commit
171e659
·
verified ·
1 Parent(s): ba7c688

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -47
app.py CHANGED
@@ -2,71 +2,66 @@ import os
2
  import torch
3
  import gradio as gr
4
  import kagglehub
 
 
5
  from threading import Thread
6
- from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
7
 
8
- # 🚀 تسريع المعالجة
9
- torch.set_num_threads(os.cpu_count())
10
 
11
- print("--- 📥 Downloading Model ---")
12
- model_path = kagglehub.model_download("ruicompany/onyx-gpt2large/transformers/1gb-stable")
13
 
14
- tokenizer = AutoTokenizer.from_pretrained(model_path)
15
- if tokenizer.pad_token is None:
16
- tokenizer.pad_token = tokenizer.eos_token
 
 
 
 
17
 
18
- # 🛠 تحميل الموديل مع تفعيل تحسينات الـ CPU
19
- model = AutoModelForCausalLM.from_pretrained(
20
- model_path,
21
- torch_dtype=torch.float32, # منخليه float32 عشان الـ Quantization يشتغل صح
22
- low_cpu_mem_usage=True
23
- )
24
 
25
- # 🔥 السر الجوهري: تحويل الموديل لنسخة سريعة جداً للـ CPU
26
- model = torch.quantization.quantize_dynamic(
27
- model, {torch.nn.Linear}, dtype=torch.qint8
28
- )
29
 
30
  def chat_onyx(message, history):
31
- # 🧠 تقليص الذاكرة: آخر 5 رسايل بس عشان ما يتقل الـ Prompt
32
- recent_history = history[-5:] if len(history) > 5 else history
33
-
34
  prompt = ""
35
  for user_msg, assistant_msg in recent_history:
36
  prompt += f"User: {user_msg}\nAssistant: {assistant_msg}\n"
37
  prompt += f"User: {message}\nAssistant:"
38
 
39
- inputs = tokenizer(prompt, return_tensors="pt")
 
40
 
41
- streamer = TextIteratorStreamer(
42
- tokenizer,
43
- skip_prompt=True,
44
- skip_special_tokens=True
 
 
 
 
45
  )
46
 
47
- generation_kwargs = dict(
48
- **inputs,
49
- streamer=streamer,
50
- max_new_tokens=100, # تقليل العدد لزيادة سرعة الاستجابة اللحظية
51
- do_sample=True,
52
- top_k=40,
53
- top_p=0.9,
54
- temperature=0.6, # تقليل الحرارة بيعطي إجابات أسرع وأدق
55
- use_cache=True, # 👈 ضروري جداً للستريمينغ
56
- pad_token_id=tokenizer.eos_token_id
57
- )
58
-
59
- thread = Thread(target=model.generate, kwargs=generation_kwargs)
60
- thread.start()
61
-
62
- partial = ""
63
- for new_text in streamer:
64
- partial += new_text
65
- yield partial
66
 
67
- # واجهة Gradio
68
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
69
- gr.Markdown("# 💎 ONYX AI - Turbo Mode")
 
70
  gr.ChatInterface(fn=chat_onyx)
71
 
72
  if __name__ == "__main__":
 
2
  import torch
3
  import gradio as gr
4
  import kagglehub
5
+ import ctranslate2
6
+ import transformers
7
  from threading import Thread
 
8
 
9
+ # 🚀 الحل الجذري حسب تعليمات كاجل الجديدة
10
+ os.environ["KAGGLE_API_TOKEN"] = "KGAT_e7d58c8edc599a3341c98d2f1295795f"
11
 
12
+ # 🚀 تسريع CPU لأقصى حد
13
+ torch.set_num_threads(os.cpu_count())
14
 
15
+ print("--- 📥 Downloading Model from Kaggle ---")
16
+ try:
17
+ model_path = kagglehub.model_download("ruicompany/onyx-gpt2large/transformers/1gb-stable")
18
+ print(f"--- ✅ Success! Model Path: {model_path} ---")
19
+ except Exception as e:
20
+ print(f"--- ❌ Download Failed: {e} ---")
21
+ model_path = kagglehub.model_download("ruicompany/onyx-gpt2large/transformers/default")
22
 
23
+ # 🛠 تحويل الموديل لصيغة CTranslate2 (تنفذ مرة واحدة عند التشغيل)
24
+ ct2_model_path = "onyx_ct2_model"
25
+ if not os.path.exists(ct2_model_path):
26
+ print("--- ⚙️ Converting model to CTranslate2 format (int8) ---")
27
+ converter = ctranslate2.converters.TransformersConverter(model_path)
28
+ converter.convert(ct2_model_path, quantization="int8", force=True)
29
 
30
+ # تحميل الـ Tokenizer والـ Generator
31
+ tokenizer = transformers.AutoTokenizer.from_pretrained(model_path)
32
+ generator = ctranslate2.Generator(ct2_model_path, device="cpu")
 
33
 
34
  def chat_onyx(message, history):
35
+ # بناء الـ Prompt مع تقليص الذاكرة لسرعة الاستجابة
36
+ recent_history = history[-3:] if len(history) > 3 else history
 
37
  prompt = ""
38
  for user_msg, assistant_msg in recent_history:
39
  prompt += f"User: {user_msg}\nAssistant: {assistant_msg}\n"
40
  prompt += f"User: {message}\nAssistant:"
41
 
42
+ # تحويل النص لـ Tokens
43
+ tokens = tokenizer.convert_ids_to_tokens(tokenizer.encode(prompt))
44
 
45
+ # الـ Streaming باستخدام Generator الخاص بـ CTranslate2
46
+ step_results = generator.generate_tokens(
47
+ tokens,
48
+ max_length=150,
49
+ sampling_topk=40,
50
+ sampling_temperature=0.7,
51
+ end_token=tokenizer.eos_token,
52
+ include_prompt_in_result=False
53
  )
54
 
55
+ partial_text = ""
56
+ for result in step_results:
57
+ word = tokenizer.decode([result.token_id])
58
+ partial_text += word
59
+ yield partial_text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
+ # واجهة Gradio الاحترافية
62
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
63
+ gr.Markdown("# 💎 ONYX AI - Turbo CTranslate2 Mode")
64
+ gr.Markdown(f"**Eng. Rawan**, ONYX is now optimized with CTranslate2 & INT8 Quantization.")
65
  gr.ChatInterface(fn=chat_onyx)
66
 
67
  if __name__ == "__main__":