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` — رابط Supabase (Postgres pooler).
 
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) إعداد Supabase (لتخزين التقييمات)
34
 
35
- اتبعي الخطوات في [README_DEPLOY.md](README_DEPLOY.md) قسم «إعداد Supabase»
36
- للحصول على `DATABASE_URL` (نوع pooler، يبدأ بـ `postgresql://`).
 
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);