Spaces:
Sleeping
Sleeping
shahad altamimi Claude Opus 4.8 commited on
Commit ·
7c6e43c
1
Parent(s): b131f35
حذف ملفات Supabase القديمة (انتقلنا لـ SQLite Cloud) وإصلاح الروابط
Browse files
README.md
CHANGED
|
@@ -9,7 +9,7 @@ app_file: reverse-dictionary/frontend/streamlit_app.py
|
|
| 9 |
pinned: false
|
| 10 |
---
|
| 11 |
|
| 12 |
-
# 🔍
|
| 13 |
|
| 14 |
تطبيق Streamlit يقارن 3 نماذج Embedding عربية: تُدخل تعريفًا، فتظهر أقرب
|
| 15 |
الكلمات في كل نموذج، ويقيّمها المستخدمون (صح/خطأ لكل كلمة)، وتُجمَّع
|
|
@@ -19,9 +19,8 @@ pinned: false
|
|
| 19 |
- الملفات الكبيرة (النماذج + الـ embeddings) تُنزَّل تلقائيًا من Hugging Face Hub.
|
| 20 |
|
| 21 |
## النشر
|
| 22 |
-
راجع [README_STREAMLIT_CLOUD.md](reverse-dictionary/README_STREAMLIT_CLOUD.md)
|
| 23 |
-
و [README_DEPLOY.md](reverse-dictionary/README_DEPLOY.md).
|
| 24 |
|
| 25 |
## الأسرار المطلوبة (Space settings → Secrets)
|
| 26 |
- `HF_DATA_REPO` — مستودع HF الذي يحوي النماذج والـ embeddings.
|
| 27 |
-
- `DATABASE_URL` — رابط
|
|
|
|
| 9 |
pinned: false
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# 🔍 تقييم البحث الدلالي
|
| 13 |
|
| 14 |
تطبيق Streamlit يقارن 3 نماذج Embedding عربية: تُدخل تعريفًا، فتظهر أقرب
|
| 15 |
الكلمات في كل نموذج، ويقيّمها المستخدمون (صح/خطأ لكل كلمة)، وتُجمَّع
|
|
|
|
| 19 |
- الملفات الكبيرة (النماذج + الـ embeddings) تُنزَّل تلقائيًا من Hugging Face Hub.
|
| 20 |
|
| 21 |
## النشر
|
| 22 |
+
راجع [README_STREAMLIT_CLOUD.md](reverse-dictionary/README_STREAMLIT_CLOUD.md).
|
|
|
|
| 23 |
|
| 24 |
## الأسرار المطلوبة (Space settings → Secrets)
|
| 25 |
- `HF_DATA_REPO` — مستودع HF الذي يحوي النماذج والـ embeddings.
|
| 26 |
+
- `DATABASE_URL` — رابط قاعدة التقييمات (SQLite Cloud `sqlitecloud://...`).
|
reverse-dictionary/README_DEPLOY.md
DELETED
|
@@ -1,136 +0,0 @@
|
|
| 1 |
-
# 🚀 دليل النشر — تقييم البحث الدلالي على Hugging Face Spaces + Supabase
|
| 2 |
-
|
| 3 |
-
هذا الدليل يشرح **خطوة بخطوة** كيف تنشرين التطبيق برابط عام، يسجّل فيه
|
| 4 |
-
المقيّمون بأسمائهم وإيميلاتهم، وتتجمّع تقييماتهم في قاعدة **Supabase**
|
| 5 |
-
مركزية تشوفينها من لوحة تحكم Supabase (بدون أي صفحة إدارية).
|
| 6 |
-
|
| 7 |
-
> 💡 التطبيق يشتغل **محليًا بدون Supabase** عبر قاعدة SQLite تلقائية
|
| 8 |
-
> (للتجربة). بمجرّد ما تضيفين `DATABASE_URL` يتحوّل تلقائيًا لـ Supabase.
|
| 9 |
-
|
| 10 |
-
---
|
| 11 |
-
|
| 12 |
-
## 🗺️ نظرة عامة على الخطوات
|
| 13 |
-
1. إنشاء مشروع Supabase وأخذ رابط `DATABASE_URL`.
|
| 14 |
-
2. (اختياري) إنشاء الجداول — أو يتركها التطبيق ينشئها تلقائيًا.
|
| 15 |
-
3. تجربة محلية بالرابط.
|
| 16 |
-
4. إنشاء Space على Hugging Face ورفع الملفات.
|
| 17 |
-
5. وضع `DATABASE_URL` في أسرار الـ Space.
|
| 18 |
-
6. متابعة التقييمات وتصديرها من Supabase.
|
| 19 |
-
|
| 20 |
-
---
|
| 21 |
-
|
| 22 |
-
## 1) إنشاء مشروع Supabase وأخذ DATABASE_URL
|
| 23 |
-
|
| 24 |
-
1. ادخلي <https://supabase.com> → **Sign in** (بحساب GitHub أو إيميل).
|
| 25 |
-
2. **New project** → اختاري اسمًا، وحدّدي **Database Password** (احفظيها) → **Create**.
|
| 26 |
-
3. انتظري دقيقة حتى يجهز المشروع.
|
| 27 |
-
4. فوق، اضغطي زر **Connect** (أو: Project Settings → Database).
|
| 28 |
-
5. اختاري قسم **Connection string** ثم تبويب **URI**، ومن القائمة اختاري
|
| 29 |
-
نوع **Transaction pooler** (الموصى به للتطبيقات).
|
| 30 |
-
الرابط يكون بهذا الشكل (يبدأ بـ `postgresql://` والمنفذ غالبًا `6543`):
|
| 31 |
-
```
|
| 32 |
-
postgresql://postgres.abcdxyz:[YOUR-PASSWORD]@aws-0-eu-central-1.pooler.supabase.com:6543/postgres
|
| 33 |
-
```
|
| 34 |
-
6. انسخي الرابط، واستبدلي `[YOUR-PASSWORD]` بكلمة مرور القاعدة من الخطوة (2).
|
| 35 |
-
هذا هو **DATABASE_URL**.
|
| 36 |
-
|
| 37 |
-
> ⚠️ هذا الرابط سرّي — لا تكتبيه في الكود ولا ترفعيه على Git.
|
| 38 |
-
|
| 39 |
-
---
|
| 40 |
-
|
| 41 |
-
## 2) إنشاء الجداول (اختياري)
|
| 42 |
-
|
| 43 |
-
التطبيق **ينشئ الجداول تلقائيًا** أول تشغيل، فتقدرين تتخطّين هذي الخطوة.
|
| 44 |
-
لكن لو حابة تنشئينها يدويًا:
|
| 45 |
-
|
| 46 |
-
- في Supabase: **SQL Editor** → **New query** → الصقي محتوى ملف
|
| 47 |
-
[`supabase_schema.sql`](supabase_schema.sql) كامل → **Run**.
|
| 48 |
-
|
| 49 |
-
ينشئ جدولين: `evaluators` (المقيّمون) و `ratings` (التقييمات).
|
| 50 |
-
|
| 51 |
-
---
|
| 52 |
-
|
| 53 |
-
## 3) تجربة محلية (قبل النشر)
|
| 54 |
-
|
| 55 |
-
```bash
|
| 56 |
-
cd reverse-dictionary
|
| 57 |
-
|
| 58 |
-
# ضعي الرابط في أسرار Streamlit المحلية
|
| 59 |
-
cp .streamlit/secrets.toml.example .streamlit/secrets.toml
|
| 60 |
-
# ثم افتحي .streamlit/secrets.toml وحطي DATABASE_URL الحقيقي
|
| 61 |
-
|
| 62 |
-
# ثبّتي المكتبات (لو ما ثبّتِها)
|
| 63 |
-
backend/.venv/bin/python -m pip install -r backend/requirements.txt
|
| 64 |
-
|
| 65 |
-
# شغّلي التطبيق
|
| 66 |
-
backend/.venv/bin/python -m streamlit run frontend/streamlit_app.py
|
| 67 |
-
```
|
| 68 |
-
- بيطلب منك التسجيل (اسم + إيميل) ثم تقدرين تقيّمين.
|
| 69 |
-
- في الشريط الجانبي يظهر مكان التخزين (Supabase أو SQLite المحلية).
|
| 70 |
-
- بدون `secrets.toml` يشتغل على SQLite محلية تلقائيًا (للتجربة فقط).
|
| 71 |
-
|
| 72 |
-
---
|
| 73 |
-
|
| 74 |
-
## 4) إنشاء Space على Hugging Face ورفع الملفات
|
| 75 |
-
|
| 76 |
-
1. ادخلي <https://huggingface.co> → سجّلي دخول.
|
| 77 |
-
2. **New** → **Space**.
|
| 78 |
-
3. اختاري: **Space SDK = Streamlit**، الاسم، والرؤية **Public**.
|
| 79 |
-
4. ارفعي ملفات المشروع للـ Space (عبر الويب أو git). المطلوب رفعه:
|
| 80 |
-
- `frontend/streamlit_app.py`
|
| 81 |
-
- مجلد `backend/` كامل (config + app/)
|
| 82 |
-
- `backend/requirements.txt` → **مهم:** ضعي نسخة منه في **جذر الـ Space**
|
| 83 |
-
باسم `requirements.txt` (HF يقرأ المتطلبات من الجذر).
|
| 84 |
-
- **النموذج المحلي** `models/ksaa_custom/` و **الـ embeddings** `data/embeddings/*.npy`
|
| 85 |
-
و **البيانات** `data/processed/data.csv`.
|
| 86 |
-
|
| 87 |
-
> 📦 **ملفات كبيرة (Git LFS):** ملف النموذج (~540MB) والـ embeddings (~900MB)
|
| 88 |
-
> كبيرة. ارفعيها عبر **Git LFS**:
|
| 89 |
-
> ```bash
|
| 90 |
-
> git lfs install
|
| 91 |
-
> git lfs track "*.npy" "*.safetensors"
|
| 92 |
-
> git add .gitattributes
|
| 93 |
-
> git add models/ data/embeddings/ data/processed/
|
| 94 |
-
> git commit -m "add model + embeddings"
|
| 95 |
-
> git push
|
| 96 |
-
> ```
|
| 97 |
-
|
| 98 |
-
5. **نقطة الدخول:** تأكّدي أن ملف التشغيل هو `streamlit_app.py`. لو رفعتِه
|
| 99 |
-
داخل `frontend/`، أنشئي في جذر الـ Space ملف `app.py` بسطر واحد:
|
| 100 |
-
```python
|
| 101 |
-
import runpy; runpy.run_path("frontend/streamlit_app.py", run_name="__main__")
|
| 102 |
-
```
|
| 103 |
-
أو انقلي `streamlit_app.py` للجذر (وعدّلي مسار `BACKEND_DIR` بداخله إن لزم).
|
| 104 |
-
|
| 105 |
-
---
|
| 106 |
-
|
| 107 |
-
## 5) وضع DATABASE_URL في أسرار الـ Space
|
| 108 |
-
|
| 109 |
-
1. في صفحة الـ Space: **Settings** → **Variables and secrets**.
|
| 110 |
-
2. **New secret**:
|
| 111 |
-
- الاسم: `DATABASE_URL`
|
| 112 |
-
- القيمة: رابط Supabase من الخطوة (1).
|
| 113 |
-
3. احفظي — بيعيد الـ Space التشغيل ويتصل بـ Supabase.
|
| 114 |
-
|
| 115 |
-
> لا تضعي `secrets.toml` داخل الـ Space — على HF نستخدم أسرار الـ Space فقط.
|
| 116 |
-
|
| 117 |
-
---
|
| 118 |
-
|
| 119 |
-
## 6) متابعة التقييمات وتصديرها (من Supabase)
|
| 120 |
-
|
| 121 |
-
1. في Supabase: **Table Editor** → اختاري جدول **ratings**.
|
| 122 |
-
2. تشوفين كل التقييمات من جميع المقيّمين (الاسم، الإيميل، الاستعلام،
|
| 123 |
-
النموذج، الكلمة، نسبة التشابه، صح/خطأ، هل كان Reranking مفعّلًا).
|
| 124 |
-
3. **تصدير CSV:** من Table Editor، زر **Export** (أو من SQL Editor شغّلي
|
| 125 |
-
`SELECT * FROM ratings;` ثم **Download CSV**).
|
| 126 |
-
4. جدول **evaluators** يعرض من سجّل (الاسم + الإيميل).
|
| 127 |
-
|
| 128 |
-
---
|
| 129 |
-
|
| 130 |
-
## ملاحظات
|
| 131 |
-
- التطبيق يعرض لكل مقيّم **سجلّه هو فقط** داخل الواجهة (خصوصية)، بينما
|
| 132 |
-
الصورة الكاملة تشوفينها أنتِ في Supabase.
|
| 133 |
-
- زر "حذف" في الواجهة يحذف **تقييمات المقيّم الحالي فقط** — ما يقدر أحد
|
| 134 |
-
يمسح تقييمات غيره.
|
| 135 |
-
- على الباقة المجانية لـ HF، التحميل أول مرة بطيء (تحميل النماذج)، والبحث
|
| 136 |
-
على CPU أبطأ من جهازك — طبيعي.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
reverse-dictionary/README_STREAMLIT_CLOUD.md
CHANGED
|
@@ -30,10 +30,11 @@ GitHub (الكود) → Streamlit Cloud (يشغّل التطبيق)
|
|
| 30 |
|
| 31 |
---
|
| 32 |
|
| 33 |
-
## 2) إعداد
|
| 34 |
|
| 35 |
-
|
| 36 |
-
ل
|
|
|
|
| 37 |
|
| 38 |
---
|
| 39 |
|
|
|
|
| 30 |
|
| 31 |
---
|
| 32 |
|
| 33 |
+
## 2) إعداد قاعدة التقييمات (DATABASE_URL)
|
| 34 |
|
| 35 |
+
أنشئي قاعدة على **SQLite Cloud** <https://sqlitecloud.io> واحصلي على رابط
|
| 36 |
+
الاتصال (يبدأ بـ `sqlitecloud://...?apikey=...`). الجداول تُنشأ تلقائيًا.
|
| 37 |
+
(يدعم الكود أيضًا Supabase عبر رابط `postgresql://`.)
|
| 38 |
|
| 39 |
---
|
| 40 |
|
reverse-dictionary/supabase_schema.sql
DELETED
|
@@ -1,33 +0,0 @@
|
|
| 1 |
-
-- ============================================================
|
| 2 |
-
-- 📄 الملف: supabase_schema.sql
|
| 3 |
-
-- 🎯 الغرض: أوامر إنشاء جداول التقييم في Supabase (Postgres).
|
| 4 |
-
--
|
| 5 |
-
-- ملاحظة: التطبيق ينشئ هذي الجداول تلقائيًا أول تشغيل، لكن لو
|
| 6 |
-
-- حابة تنشئينها يدويًا: افتحي Supabase → SQL Editor → الصقي
|
| 7 |
-
-- هذا الملف كامل → Run.
|
| 8 |
-
-- ============================================================
|
| 9 |
-
|
| 10 |
-
-- 👤 جدول المقيّمين (الإيميل فريد)
|
| 11 |
-
CREATE TABLE IF NOT EXISTS evaluators (
|
| 12 |
-
id BIGSERIAL PRIMARY KEY,
|
| 13 |
-
name TEXT NOT NULL,
|
| 14 |
-
email TEXT NOT NULL UNIQUE,
|
| 15 |
-
created_at TIMESTAMPTZ DEFAULT now()
|
| 16 |
-
);
|
| 17 |
-
|
| 18 |
-
-- ⭐ جدول التقييمات: صف لكل كلمة قُيّمت (صح/خطأ) + بيانات المقيّم
|
| 19 |
-
CREATE TABLE IF NOT EXISTS ratings (
|
| 20 |
-
id BIGSERIAL PRIMARY KEY,
|
| 21 |
-
created_at TIMESTAMPTZ DEFAULT now(),
|
| 22 |
-
query TEXT, -- الاستعلام (التعريف المُدخل)
|
| 23 |
-
model TEXT, -- اسم النموذج
|
| 24 |
-
word TEXT, -- الكلمة المقترحة
|
| 25 |
-
similarity REAL, -- نسبة التشابه
|
| 26 |
-
verdict TEXT, -- "صح" أو "خطأ"
|
| 27 |
-
evaluator_name TEXT,
|
| 28 |
-
evaluator_email TEXT
|
| 29 |
-
);
|
| 30 |
-
|
| 31 |
-
-- فهارس تسرّع الاستعلامات الشائعة (اختيارية لكن مفيدة)
|
| 32 |
-
CREATE INDEX IF NOT EXISTS idx_ratings_email ON ratings (evaluator_email);
|
| 33 |
-
CREATE INDEX IF NOT EXISTS idx_ratings_model ON ratings (model);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|