recommendation / main.py
Manar312's picture
Upload 4 files
daa46b5 verified
Raw
History Blame Contribute Delete
5.06 kB
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)