Reem1 commited on
Commit
fa78252
·
verified ·
1 Parent(s): bcc0d69

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -22
app.py CHANGED
@@ -1,9 +1,13 @@
1
  import os
2
  from fastapi import FastAPI
3
  from pydantic import BaseModel
4
- from transformers import pipeline
 
 
 
 
 
5
 
6
- # 🔧 نخلي الكاش في فولدر قابل للكتابة
7
  os.environ["HF_HOME"] = "/data"
8
  os.environ["TRANSFORMERS_CACHE"] = "/data/cache"
9
 
@@ -14,7 +18,6 @@ app = FastAPI(
14
 
15
  MODEL_REPO = "Reem1/hakayti-merged"
16
 
17
- # مثال توضيحي few-shot
18
  few_shot_example = """<s>[User]: اسمي كريم وأحب الفضاء.
19
  اكتب لي قصة طويلة للأطفال (40 جملة على الأقل) مكتوبة بأسلوب قصصي ممتع.
20
  [Assistant]:
@@ -26,43 +29,44 @@ few_shot_example = """<s>[User]: اسمي كريم وأحب الفضاء.
26
  وهكذا تعلم كريم أن الحلم يبدأ بخطوة صغيرة، وأن حب المعرفة يمكن أن يفتح له أبوابًا واسعة نحو المستقبل.
27
  </s>"""
28
 
29
- # تحميل الموديل مرة واحدة
 
 
 
 
 
 
 
 
 
 
30
  pipe = pipeline(
31
  "text-generation",
32
- model=MODEL_REPO,
33
- tokenizer=MODEL_REPO,
34
  max_new_tokens=900,
35
  temperature=0.9,
36
- top_p=0.95
 
37
  )
 
38
 
39
- # body request
40
  class StoryRequest(BaseModel):
41
  name: str
42
  hobby: str
43
 
44
- # مولد القصة
45
- def generate_story(name, hobby):
46
  prompt = f"""{few_shot_example}
47
  [User]: اسمي {name} وأحب {hobby}.
48
  اكتب لي قصة طويلة للأطفال (40 جملة على الأقل) مكتوبة بنفس الأسلوب السابق،
49
  وتأكد أن القصة كلها تدور حول {hobby} فقط.
50
  [Assistant]:"""
51
 
52
- out = pipe(
53
- prompt,
54
- max_new_tokens=900,
55
- temperature=0.9,
56
- top_p=0.95,
57
- do_sample=True
58
- )
59
  full_text = out[0]["generated_text"]
60
  story = full_text.split("[Assistant]:")[-1].replace("</s>", "").strip()
61
  return story
62
 
63
- # API endpoint
64
  @app.post("/generate")
65
- def generate_story_api(req: StoryRequest):
66
- story = generate_story(req.name, req.hobby)
67
- return {"story": story}
68
-
 
1
  import os
2
  from fastapi import FastAPI
3
  from pydantic import BaseModel
4
+ from transformers import (
5
+ AutoModelForCausalLM,
6
+ AutoTokenizer,
7
+ pipeline,
8
+ BitsAndBytesConfig
9
+ )
10
 
 
11
  os.environ["HF_HOME"] = "/data"
12
  os.environ["TRANSFORMERS_CACHE"] = "/data/cache"
13
 
 
18
 
19
  MODEL_REPO = "Reem1/hakayti-merged"
20
 
 
21
  few_shot_example = """<s>[User]: اسمي كريم وأحب الفضاء.
22
  اكتب لي قصة طويلة للأطفال (40 جملة على الأقل) مكتوبة بأسلوب قصصي ممتع.
23
  [Assistant]:
 
29
  وهكذا تعلم كريم أن الحلم يبدأ بخطوة صغيرة، وأن حب المعرفة يمكن أن يفتح له أبوابًا واسعة نحو المستقبل.
30
  </s>"""
31
 
32
+ bnb_config = BitsAndBytesConfig(load_in_8bit=True)
33
+
34
+ print("⏳ Loading model in 8-bit ...")
35
+ model = AutoModelForCausalLM.from_pretrained(
36
+ MODEL_REPO,
37
+ quantization_config=bnb_config,
38
+ device_map="auto",
39
+ low_cpu_mem_usage=True
40
+ )
41
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_REPO)
42
+
43
  pipe = pipeline(
44
  "text-generation",
45
+ model=model,
46
+ tokenizer=tokenizer,
47
  max_new_tokens=900,
48
  temperature=0.9,
49
+ top_p=0.95,
50
+ do_sample=True
51
  )
52
+ print("✅ Model loaded.")
53
 
 
54
  class StoryRequest(BaseModel):
55
  name: str
56
  hobby: str
57
 
58
+ def generate_story(name: str, hobby: str) -> str:
 
59
  prompt = f"""{few_shot_example}
60
  [User]: اسمي {name} وأحب {hobby}.
61
  اكتب لي قصة طويلة للأطفال (40 جملة على الأقل) مكتوبة بنفس الأسلوب السابق،
62
  وتأكد أن القصة كلها تدور حول {hobby} فقط.
63
  [Assistant]:"""
64
 
65
+ out = pipe(prompt)
 
 
 
 
 
 
66
  full_text = out[0]["generated_text"]
67
  story = full_text.split("[Assistant]:")[-1].replace("</s>", "").strip()
68
  return story
69
 
 
70
  @app.post("/generate")
71
+ async def generate_story_api(req: StoryRequest):
72
+ return {"story": generate_story(req.name, req.hobby)}