| # هيكل المشروع | Project Structure |
|
|
| ## نظرة عامة |
|
|
| هذا المستودع (**diac-api-project / testApp**) هو غلاف تطبيقي حول مكتبة البحث [rufaelfekadu/Diac](https://github.com/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 |
|
|
| ```python |
| 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`) |
|
|
| ## تغيير اسم النموذج |
|
|
| ```bash |
| 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 وقد يستغرق دقائق ويتطلب مساحة قرص وذاكرة كافية. |
|
|