from fastapi import FastAPI from pydantic import BaseModel from transformers import pipeline import uvicorn # ========================= # إنشاء التطبيق # ========================= app = FastAPI( title="Rafiq AI Recommendation System", description="AI therapy recommendation system for autism children", version="1.0" ) # ========================= # تحميل موديل الذكاء الاصطناعي # ========================= generator = pipeline( "text-generation", model="distilgpt2" ) # ========================= # Request Model # ========================= class ChildAssessment(BaseModel): cars_score: float vineland_avg: float behavior_score: float # ========================= # تحديد المرحلة # ========================= def determine_stage(composite_score): if composite_score >= 48: return { "stage": 1, "name": "التعرف الاجتماعي", "activities": [ "التعرف على الأم والأب", "التعرف على الإخوات", "التعرف على الحيوانات الأساسية", "التعرف على الخضروات والفواكه", "التعرف على المنزل والمدرسة" ], "sessions": 5, "repetitions": 10, "break_time": "يوم" } elif composite_score >= 32: return { "stage": 2, "name": "التفاعل الاجتماعي", "activities": [ "فهم نعم ولا", "مرحبا وباي", "تبادل الأدوار", "اللعب الجماعي", "انتظار الدور" ], "sessions": 4, "repetitions": 8, "break_time": "يومين" } else: return { "stage": 3, "name": "التواصل الاجتماعي", "activities": [ "بدء الحوار", "الإجابة على الأسئلة", "التعبير عن الاحتياجات", "بدء اللعب مع الآخرين", "المحادثات البسيطة" ], "sessions": 3, "repetitions": 5, "break_time": "3 أيام" } # ========================= # AI Recommendation Endpoint # ========================= @app.post("/recommend") def recommend(data: ChildAssessment): # ===================== # حساب الدرجة المركبة # ===================== composite_score = ( (data.cars_score * 0.5) + ((2 - data.vineland_avg) * 25 * 0.3) + (data.behavior_score * 0.2) ) # ===================== # تحديد شدة الحالة # ===================== if composite_score >= 48: severity = "شديد" elif composite_score >= 32: severity = "متوسط" else: severity = "خفيف" # ===================== # تحديد المرحلة # ===================== stage_info = determine_stage(composite_score) # ===================== # Prompt للـ AI # ===================== prompt = f""" طفل توحد لديه: CARS Score = {data.cars_score} Vineland Average = {data.vineland_avg} Behavior Score = {data.behavior_score} شدة الحالة: {severity} المرحلة الحالية: {stage_info['name']} الأنشطة: {', '.join(stage_info['activities'])} اكتب نصيحة علاجية قصيرة ومفيدة للأهل. """ # ===================== # توليد النص # ===================== result = generator( prompt, max_length=120, do_sample=True, temperature=0.7 ) ai_text = result[0]["generated_text"] # ===================== # Response # ===================== return { "severity": severity, "recommended_stage": stage_info["stage"], "stage_name": stage_info["name"], "activities": stage_info["activities"], "sessions_per_week": stage_info["sessions"], "repetitions_per_activity": stage_info["repetitions"], "break_between_sessions": stage_info["break_time"], "composite_score": round(composite_score, 2), "ai_recommendation": ai_text } # ========================= # Home Endpoint # ========================= @app.get("/") def home(): return { "message": "Rafiq AI Recommendation System Running" } # ========================= # تشغيل السيرفر # ========================= if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=7860)