NLPAlhuzali commited on
Commit
6e92cbd
·
verified ·
1 Parent(s): ace995d

Update models/space_a.py

Browse files
Files changed (1) hide show
  1. models/space_a.py +38 -19
models/space_a.py CHANGED
@@ -1,8 +1,12 @@
 
 
 
1
  import torch
2
  from transformers import AutoTokenizer, AutoModelForCausalLM
3
 
4
  device = "cuda" if torch.cuda.is_available() else "cpu"
5
  model_id = "ALLaM-AI/ALLaM-7B-Instruct-preview"
 
6
  tokenizer = AutoTokenizer.from_pretrained(model_id)
7
  model = AutoModelForCausalLM.from_pretrained(
8
  model_id,
@@ -11,7 +15,27 @@ model = AutoModelForCausalLM.from_pretrained(
11
  low_cpu_mem_usage=True,
12
  )
13
 
14
- def summarize_question(text: str, max_new_tokens: int = 60) -> str:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  examples = """
16
  أمثلة على كيفية التفكير خطوة بخطوة ثم إعطاء السؤال المختصر:
17
  السؤال الأصلي:
@@ -22,35 +46,30 @@ def summarize_question(text: str, max_new_tokens: int = 60) -> str:
22
  3. يسأل عن الحصول على وصفة Ativan كبديل أو إضافة للعلاج.
23
  السؤال المختصر:
24
  استفسار حول عدم فعالية citalopram والحاجة الى Ativan
 
 
 
 
 
 
 
 
25
  """.strip()
26
 
27
  new_segment = f"""
28
  الآن لديك سؤال جديد، فكر خطوة بخطوة بشكل مشابه ثم أعطني السؤال المختصر:
29
  تأكد من عدم اضافة ملاحظات أو اضافة معلومة غير موجودة في السؤال
30
  السؤال الأصلي:
31
- {text}
32
  السؤال المختصر:
33
- """
34
 
35
- full_prompt = f"""
36
  أنت مساعد لغوي مختص بأسئلة الصحة النفسية.
37
  هدفك هو إعادة كتابة الأسئلة المطوّلة في شكل مختصر ومباشر، يركّز على النقطة الأساسية.
38
  {examples}
39
  {new_segment}
40
  """.strip()
41
 
42
- inputs = tokenizer(
43
- tokenizer.apply_chat_template([{"role": "user", "content": full_prompt}], tokenize=False),
44
- return_tensors="pt"
45
- ).to(model.device)
46
-
47
- with torch.no_grad():
48
- output = model.generate(
49
- **inputs,
50
- max_new_tokens=max_new_tokens,
51
- do_sample=False,
52
- pad_token_id=tokenizer.eos_token_id
53
- )
54
-
55
- decoded = tokenizer.decode(output[0], skip_special_tokens=True)
56
- return decoded.split("السؤال المختصر:")[-1].strip() if "السؤال المختصر:" in decoded else decoded.strip()
 
1
+ # -*- coding: utf-8 -*-
2
+ # ALLaM 7B – Arabic Mental Health Question Summarizer
3
+
4
  import torch
5
  from transformers import AutoTokenizer, AutoModelForCausalLM
6
 
7
  device = "cuda" if torch.cuda.is_available() else "cpu"
8
  model_id = "ALLaM-AI/ALLaM-7B-Instruct-preview"
9
+
10
  tokenizer = AutoTokenizer.from_pretrained(model_id)
11
  model = AutoModelForCausalLM.from_pretrained(
12
  model_id,
 
15
  low_cpu_mem_usage=True,
16
  )
17
 
18
+ def _generate(system_text: str, user_text: str, max_new_tokens: int = 60) -> str:
19
+ messages = []
20
+ if system_text.strip():
21
+ messages.append({"role": "system", "content": system_text})
22
+ messages.append({"role": "user", "content": user_text})
23
+
24
+ prompt_text = tokenizer.apply_chat_template(messages, tokenize=False)
25
+ inputs = tokenizer(prompt_text, return_tensors="pt").to(model.device)
26
+
27
+ with torch.no_grad():
28
+ output = model.generate(
29
+ **inputs,
30
+ max_new_tokens=max_new_tokens,
31
+ do_sample=False,
32
+ pad_token_id=tokenizer.eos_token_id,
33
+ )
34
+
35
+ decoded = tokenizer.decode(output[0], skip_special_tokens=True)
36
+ return decoded.replace("[/INST]", "").strip()
37
+
38
+ def summarize_question(question_text: str) -> str:
39
  examples = """
40
  أمثلة على كيفية التفكير خطوة بخطوة ثم إعطاء السؤال المختصر:
41
  السؤال الأصلي:
 
46
  3. يسأل عن الحصول على وصفة Ativan كبديل أو إضافة للعلاج.
47
  السؤال المختصر:
48
  استفسار حول عدم فعالية citalopram والحاجة الى Ativan
49
+ السؤال الأصلي:
50
+ كنت اعاني من قلق وأخذت دواء سبرالكس لمدة 4 شهور وتوقفت عنه في 2014. سأذهب لتحليل بول للعمل، هل سيظهر أثر الدواء؟
51
+ فكر خطوة بخطوة:
52
+ 1. المستخدم كان يعاني من قلق وتناول سبرالكس قبل عدة سنوات.
53
+ 2. يخشى أن يظهر الدواء القديم في فحص البول المطلوب للعمل.
54
+ 3. يريد معرفة إن كان ما زال موجوداً في جسمه.
55
+ السؤال المختصر:
56
+ سؤال حول بقاء أثر الدواء في تحليل البول بعد مدة؟
57
  """.strip()
58
 
59
  new_segment = f"""
60
  الآن لديك سؤال جديد، فكر خطوة بخطوة بشكل مشابه ثم أعطني السؤال المختصر:
61
  تأكد من عدم اضافة ملاحظات أو اضافة معلومة غير موجودة في السؤال
62
  السؤال الأصلي:
63
+ {question_text}
64
  السؤال المختصر:
65
+ """.strip()
66
 
67
+ final_prompt = f"""
68
  أنت مساعد لغوي مختص بأسئلة الصحة النفسية.
69
  هدفك هو إعادة كتابة الأسئلة المطوّلة في شكل مختصر ومباشر، يركّز على النقطة الأساسية.
70
  {examples}
71
  {new_segment}
72
  """.strip()
73
 
74
+ response = _generate("", final_prompt)
75
+ return response.split("السؤال المختصر:")[-1].strip() if "السؤال المختصر:" in response else response.strip()