File size: 2,524 Bytes
64bbc9b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# main.py

from fastapi import FastAPI
from pydantic import BaseModel
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM

app = FastAPI()

# تعريف نموذج البيانات للطلب: يحتوي على حقل واحد "input" (النص المرسل من العميل)
class GenerateRequest(BaseModel):
    input: str  # جملة المُدخل (مثال: "اسمي محمد")

# تحميل النموذج والـ tokenizer من مكتبة Hugging Face
# هنا نستخدم مثال akhooli/gpt2-small-arabic (137M معلمات):contentReference[oaicite:3]{index=3}.
# نستخدم device=-1 لاستخدام الـ CPU فقط (Hot GPU غير متاح في خطة Spaces المجانية).
model_name = "akhooli/gpt2-small-arabic"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
generator = pipeline("text-generation", model=model, tokenizer=tokenizer, device=-1)

@app.post("/generate")
def generate_greeting(request: GenerateRequest):
    # استخراج النص المرسل في الطلب
    user_input = request.input.strip()
    if not user_input:
        # في حال كان الحقل فارغاً، نرجع رسالة خطأ بسيطة
        return {"response": "الرجاء تزويد جملة صحيحة في الحقل 'input'."}

    # استخدم النموذج لتوليد نص ترحيبي بناءً على المدخل
    # نحدد بعض معايير التوليد مثل max_new_tokens و top_p لتحسين الجودة.
    result = generator(
        user_input,
        max_new_tokens=50,      # الحد الأقصى لعدد الرموز الجديدة المولدة
        do_sample=True,         # استخدام التوليد العشوائي (Sampling) بدلًا من التوليد الحتمي
        top_p=0.95,             # لتحسين التنوع
        return_full_text=False  # لإرجاع الجزء المولد فقط (بدون نص المدخل الأصلي)
    )

    # الحصول على النص المولد وترتيبه
    generated_text = result[0]['generated_text'].strip()

    # في بعض الأحيان قد يبدأ النص المولد بحرف بليغ أو فاصلة، لذا نزيل أي علامات ترقيم غير ضرورية في البداية
    greeting = generated_text
    # تأكد من أن الرد ليس فارغاً تماماً
    if greeting == "":
        greeting = "مرحباً!"

    return {"response": greeting}