Spaces:
Sleeping
Sleeping
| # ربط كل الخدمات على خادم واحد — جسر | |
| الآن **خادم واحد** (Hugging Face Space) يقدّم الخدمات الثلاث، والسيرفر الوسيط | |
| (`api-server.js`) يوجّه إليه فقط. عنوان واحد لكل شيء. | |
| ## المعمارية بعد الربط | |
| ``` | |
| [تطبيق Flutter] | |
| │ يرسل: نص للترجمة / صوت للتفريغ / نص للنطق | |
| ▼ | |
| [api-server.js] ← وسيط خفيف (Node، صفر تبعيات) | |
| │ يحوّل طلبات REST إلى نداءات Gradio | |
| ▼ | |
| [Hugging Face Space] ← خادم واحد على ZeroGPU | |
| ├── /translate → MADLAD-400-3b-mt (Apache 2.0 تجاري، 400+ لغة) | |
| ├── /stt → Whisper small | |
| └── /tts → Chatterbox (استنساخ صوتي، 7 لغات) | |
| ``` | |
| ## ما الذي تغيّر | |
| **في الـ Space** (`app.py` + `requirements.txt`): | |
| - أضيف endpoint `translate` يستخدم MADLAD-400 (تجاري، بديل NLLB غير التجاري) | |
| - أضيف endpoint `stt` يستخدم Whisper | |
| - الواجهة الآن ثلاثة تبويبات: توليد كلام / ترجمة / تفريغ | |
| **في السيرفر الوسيط** (`api-server.js`): | |
| - حُذفت `TRANSLATE_URL` و `STT_URL` — لم تعد هناك خدمات منفصلة | |
| - كل الطلبات تذهب لنفس `INFERENCE_BASE_URL` عبر مُنادٍ Gradio عام | |
| - التفريغ يرفع الملف لـ Gradio ثم ينادي `stt` | |
| **في التطبيق** (`api_service.dart`): | |
| - التفريغ الآن يرسل بايتات الصوت الخام مع ترويسة `x-lang` | |
| ## خطوات التشغيل | |
| ### 1) الـ Space | |
| انسخ (Duplicate) الـ Space الرسمي ResembleAI/Chatterbox-Multilingual-TTS-V3، | |
| ثم استبدل `app.py` و `requirements.txt` بالنسختين المرفقتين، وارفع `default_voice.wav`. | |
| اختر عتاد **ZeroGPU**. | |
| > تحميل أول مرة: MADLAD-3B (~12 جيجا) + Whisper + Chatterbox. أول طلب لكل | |
| > خدمة يستغرق وقتاً للتحميل، ثم يصبح سريعاً. لو أردت MADLAD أصغر/أسرع اضبط | |
| > متغير البيئة `MADLAD_MODEL=google/madlad400-3b-mt` (الافتراضي) — أو للجودة | |
| > الأعلى `google/madlad400-7b-mt`. | |
| ### 2) السيرفر الوسيط | |
| ```bash | |
| INFERENCE_BASE_URL=https://YOUR-USERNAME-SPACENAME.hf.space node api-server.js | |
| ``` | |
| متغير واحد فقط! (اختياري: `HF_TOKEN` لو الـ Space خاص، `PORT`). | |
| ### 3) التطبيق | |
| ```bash | |
| flutter run --dart-define=API_BASE_URL=https://your-bridge-server.com | |
| ``` | |
| ## اختبار سريع للخادم الموحّد | |
| ```bash | |
| BASE=https://YOUR-USERNAME-SPACENAME.hf.space | |
| # ترجمة | |
| curl -X POST $BASE/gradio_api/call/translate \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"data":["مرحبا بالعالم","العربية (ar)","English (en)"]}' | |
| # ثم curl $BASE/gradio_api/call/translate/EVENT_ID | |
| ``` | |
| ## ملاحظة الترخيص | |
| - **MADLAD-400**: Apache 2.0 ✅ تجاري مسموح (بديل NLLB الذي كان CC-BY-NC) | |
| - **Whisper**: MIT ✅ | |
| - **Chatterbox**: MIT ✅ | |
| كلها آمنة لتطبيق مدفوع. | |