Spaces:
Runtime error
Runtime error
Create main.py
Browse files
main.py
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# main.py
|
2 |
+
|
3 |
+
from fastapi import FastAPI
|
4 |
+
from pydantic import BaseModel
|
5 |
+
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
|
6 |
+
|
7 |
+
app = FastAPI()
|
8 |
+
|
9 |
+
# تعريف نموذج البيانات للطلب: يحتوي على حقل واحد "input" (النص المرسل من العميل)
|
10 |
+
class GenerateRequest(BaseModel):
|
11 |
+
input: str # جملة المُدخل (مثال: "اسمي محمد")
|
12 |
+
|
13 |
+
# تحميل النموذج والـ tokenizer من مكتبة Hugging Face
|
14 |
+
# هنا نستخدم مثال akhooli/gpt2-small-arabic (137M معلمات):contentReference[oaicite:3]{index=3}.
|
15 |
+
# نستخدم device=-1 لاستخدام الـ CPU فقط (Hot GPU غير متاح في خطة Spaces المجانية).
|
16 |
+
model_name = "akhooli/gpt2-small-arabic"
|
17 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
18 |
+
model = AutoModelForCausalLM.from_pretrained(model_name)
|
19 |
+
generator = pipeline("text-generation", model=model, tokenizer=tokenizer, device=-1)
|
20 |
+
|
21 |
+
@app.post("/generate")
|
22 |
+
def generate_greeting(request: GenerateRequest):
|
23 |
+
# استخراج النص المرسل في الطلب
|
24 |
+
user_input = request.input.strip()
|
25 |
+
if not user_input:
|
26 |
+
# في حال كان الحقل فارغاً، نرجع رسالة خطأ بسيطة
|
27 |
+
return {"response": "الرجاء تزويد جملة صحيحة في الحقل 'input'."}
|
28 |
+
|
29 |
+
# استخدم النموذج لتوليد نص ترحيبي بناءً على المدخل
|
30 |
+
# نحدد بعض معايير التوليد مثل max_new_tokens و top_p لتحسين الجودة.
|
31 |
+
result = generator(
|
32 |
+
user_input,
|
33 |
+
max_new_tokens=50, # الحد الأقصى لعدد الرموز الجديدة المولدة
|
34 |
+
do_sample=True, # استخدام التوليد العشوائي (Sampling) بدلًا من التوليد الحتمي
|
35 |
+
top_p=0.95, # لتحسين التنوع
|
36 |
+
return_full_text=False # لإرجاع الجزء المولد فقط (بدون نص المدخل الأصلي)
|
37 |
+
)
|
38 |
+
|
39 |
+
# الحصول على النص المولد وترتيبه
|
40 |
+
generated_text = result[0]['generated_text'].strip()
|
41 |
+
|
42 |
+
# في بعض الأحيان قد يبدأ النص المولد بحرف بليغ أو فاصلة، لذا نزيل أي علامات ترقيم غير ضرورية في البداية
|
43 |
+
greeting = generated_text
|
44 |
+
# تأكد من أن الرد ليس فارغاً تماماً
|
45 |
+
if greeting == "":
|
46 |
+
greeting = "مرحباً!"
|
47 |
+
|
48 |
+
return {"response": greeting}
|