shaml / docs /PROJECT_STRUCTURE.md
Cursor Agent
Add Diac API backend, Arabic RTL frontend, Docker, and docs
0b083c6 unverified

هيكل المشروع | Project Structure

نظرة عامة

هذا المستودع (diac-api-project / testApp) هو غلاف تطبيقي حول مكتبة البحث rufaelfekadu/Diac.
كود التدريب والبحث الأصلي (train_lightning.py, inference_hf.py, …) يبقى في المستودع الأصلي ويُثبَّت كحزمة Python عبر pip.

المجلدات الرئيسية

المسار الوظيفة
backend/app/main.py تطبيق FastAPI والمسارات
backend/app/services/model_service.py تحميل النموذج مرة واحدة واستدعاء predict_text
backend/app/schemas.py نماذج Pydantic للطلبات والاستجابات
backend/app/config.py إعدادات من متغيرات البيئة
backend/scripts/run_local.py تشغيل محلي من سطر الأوامر
frontend/ واجهة React + Vite (عربية، RTL)
constants/ ملفات الترميز المطلوبة لـ from_pretrained(..., tokenizer_constants_path="constants/")
app/main.py نقطة دخول قديمة متوافقة مع الإصدارات السابقة
docker/ Dockerfile للخلفية
docs/ توثيق إضافي

المستودع الأصلي Diac (للبحث)

الملف الوظيفة
train_lightning.py تدريب PyTorch Lightning
train.py تدريب بديل
inference.py استنتاج من checkpoint محلي + YAML
inference_hf.py استنتاج من Hugging Face
src/diac/models/diacritization_model.py DiacritizationModule
configs/*.yml إعدادات النماذج
scripts/*.sh سكربتات التجارب

تحميل النموذج من Hugging Face

from diac.models import DiacritizationModule

model = DiacritizationModule.from_pretrained(
    "rufaelfekadu/diac-transformer-text-asr-tashkeela-clartts",
    tokenizer_constants_path="constants/",
)

يجب أن يكون مجلد constants/ موجودًا في مسار العمل (يحتوي constants.json وملفات .pickle).

صيغ المدخلات والمخرجات

API

  • طلب واحد: {"text": "كتب الطالب الدرس"}
  • استجابة: {"input": "...", "diacritized": "..."}
  • دفعة: {"texts": ["...", "..."]}{"results": [{"input","diacritized"}, ...]}

inference_hf.py (الأصلي)

  • مدخل: ملف .txt (سطر = جملة) أو .tsv (نص + ASR)
  • مخرج: ملف نصي عند --output_path (افتراضي outputs/hf_inference_output.txt)

CLI المحلي

  • --text → طباعة النص المشكّل
  • --file → قراءة أسطر، الكتابة إلى outputs/local_diacritized.txt (أو --output)

تغيير اسم النموذج

export MODEL_NAME="rufaelfekadu/diac-transformer-text-only-tashkeela"

أو في .env / docker-compose.yml.

ملاحظات

  • النموذج الافتراضي text+asr يتوقع إعداد INFERENCE.USE_ASR من ملف config المحمّل مع الـ checkpoint؛ للنص فقط قد تحتاج نموذج text-only.
  • أول تحميل يحمّل الـ checkpoint من Hugging Face وقد يستغرق دقائق ويتطلب مساحة قرص وذاكرة كافية.