Reem1 commited on
Commit
c041d92
·
verified ·
1 Parent(s): 19793e2

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile +15 -0
  2. app.py +71 -0
  3. requirements.txt +6 -0
Dockerfile ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM nvidia/cuda:12.1.1-runtime-ubuntu22.04
2
+
3
+ RUN apt-get update && apt-get install -y \
4
+ git wget curl python3 python3-pip && rm -rf /var/lib/apt/lists/*
5
+
6
+ WORKDIR /app
7
+
8
+ COPY requirements.txt /app/requirements.txt
9
+ RUN pip install --no-cache-dir -r requirements.txt
10
+
11
+ COPY . /app
12
+
13
+ ENV PORT=7860
14
+
15
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
app.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, Request, HTTPException
2
+ from pydantic import BaseModel
3
+ from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline, BitsAndBytesConfig
4
+ import torch, os
5
+
6
+ app = FastAPI(title="Hakayti Generator API")
7
+
8
+ API_KEY = os.getenv("API_KEY", "my_secret_key_123")
9
+
10
+ MODEL_ID = "Reem1/hakayti-merged"
11
+
12
+ bnb_cfg = BitsAndBytesConfig(
13
+ load_in_4bit=True,
14
+ bnb_4bit_compute_dtype=torch.bfloat16 if torch.cuda.is_available() else torch.float32,
15
+ bnb_4bit_use_double_quant=True,
16
+ bnb_4bit_quant_type="nf4",
17
+ )
18
+
19
+ print(" Loading model...")
20
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
21
+ model = AutoModelForCausalLM.from_pretrained(
22
+ MODEL_ID,
23
+ device_map="auto",
24
+ quantization_config=bnb_cfg
25
+ )
26
+
27
+ pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
28
+ print(" Model loaded on:", next(model.parameters()).device)
29
+
30
+ few_shot_example = """<s>[User]: اسمي كريم وأحب الفضاء.
31
+ اكتب لي قصة طويلة للأطفال (40 جملة على الأقل) مكتوبة بأسلوب قصصي ممتع.
32
+ [Assistant]:
33
+ كريم كان يحب النظر إلى السماء كل ليلة. كان يجلس في شرفة بيته، يراقب النجوم ويعدها واحدة تلو الأخرى. أحيانًا كان يتخيل أن النجوم مثل مصابيح صغيرة تضيء له الطريق نحو أحلامه الكبيرة.
34
+ في المدرسة، لاحظ المعلم شغف كريم بالفضاء. أعطاه كتابًا مليئًا بالصور الملونة للكواكب والأقمار. انبهر كريم عندما رأى صور كوكب زحل وحلقاته اللامعة، وأخذ يتخيل نفسه يطير حوله.
35
+ قرر كريم أن يصنع نموذجًا صغيرًا للمجموعة الشمسية. جمع كرات صغيرة وطلّاها بالألوان: الأزرق للأرض، الأحمر للمريخ، والأصفر للشمس. علّقها بخيوط في غرفته، فصارت كأنها سماء صغيرة يعيش فيها.
36
+ في أحد الأيام، أعلنت المدرسة عن مسابقة للرسم بعنوان "رحلة إلى الفضاء". رسم كريم لوحة كبيرة يظهر فيها صاروخ ينطلق من الأرض، وحوله أطفال يلوّحون بأيديهم. فاز كريم بالجائزة الأولى، وكان سعيدًا جدًا لأن حلمه بالفضاء أصبح أقرب مما يتخيل.
37
+ في المساء، جلس كريم مع والده على سطح المنزل. أشار والده إلى القمر وقال: "تخيّل يا كريم أن العلماء يدرسون الآن كيف يعيش الناس يومًا ما في الفضاء". ابتسم كريم وأجاب: "سأكون أنا واحدًا منهم".
38
+ وهكذا تعلم كريم أن الحلم يبدأ بخطوة صغيرة، وأن حب المعرفة يمكن أن يفتح له أبوابًا واسعة نحو المستقبل.
39
+ </s>"""
40
+
41
+ def generate_story(name: str, hobby: str):
42
+ prompt = f"""{few_shot_example}
43
+
44
+ [User]: اسمي {name} وأحب {hobby}.
45
+ اكتب لي قصة طويلة للأطفال (40 جملة على الأقل) مكتوبة بنفس الأسلوب السابق،
46
+ وتأكد أن القصة كلها تدور حول {hobby} فقط.
47
+
48
+ [Assistant]:"""
49
+
50
+ out = pipe(
51
+ prompt,
52
+ max_new_tokens=900,
53
+ temperature=0.9,
54
+ top_p=0.95,
55
+ do_sample=True
56
+ )
57
+
58
+ full_text = out[0]["generated_text"]
59
+ story = full_text.split("[Assistant]:")[-1].replace("</s>", "").strip()
60
+ return story
61
+
62
+ class StoryRequest(BaseModel):
63
+ name: str
64
+ hobby: str
65
+
66
+ @app.post("/generate")
67
+ async def generate(req: StoryRequest, request: Request):
68
+ header_key = request.headers.get("x-api-key") or request.headers.get("authorization")
69
+ if API_KEY and header_key not in (API_KEY, f"Bearer {API_KEY}"):
70
+ raise HTTPException(status_code=401, detail="Unauthorized")
71
+ return {"story": generate_story(req.name, req.hobby)}
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ transformers
4
+ accelerate
5
+ bitsandbytes
6
+ safetensors