File size: 3,190 Bytes
d3963e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# ربط كل الخدمات على خادم واحد — جسر

الآن **خادم واحد** (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 ✅
كلها آمنة لتطبيق مدفوع.