Spaces:
Runtime error
Runtime error
# 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) | |
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} | |