AhmedEwis commited on
Commit
deffbc7
·
verified ·
1 Parent(s): c09a8da

Upload 9 files

Browse files
Files changed (9) hide show
  1. .env.example +13 -0
  2. .gitignore +64 -0
  3. DEPLOYMENT.md +154 -0
  4. HUGGINGFACE_DEPLOYMENT_GUIDE.md +202 -0
  5. LICENSE +21 -0
  6. QUICK_START.md +68 -0
  7. README.md +112 -7
  8. app.py +333 -0
  9. requirements.txt +3 -0
.env.example ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Environment Variables for CMA Chatbot
2
+
3
+ # Google Gemini API Key (required for AI functionality)
4
+ GEMINI_API_KEY=your_google_gemini_api_key_here
5
+
6
+ # Alternative name for the API key (Hugging Face Spaces compatibility)
7
+ GOOGLE_API_KEY=your_google_gemini_api_key_here
8
+
9
+ # Instructions:
10
+ # 1. Copy this file to .env
11
+ # 2. Replace 'your_google_gemini_api_key_here' with your actual API key
12
+ # 3. Get your API key from: https://makersuite.google.com/app/apikey
13
+ # 4. For Hugging Face Spaces, add the key as a secret in your Space settings
.gitignore ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Environment variables
2
+ .env
3
+ .env.local
4
+ .env.production
5
+
6
+ # Python
7
+ __pycache__/
8
+ *.py[cod]
9
+ *$py.class
10
+ *.so
11
+ .Python
12
+ build/
13
+ develop-eggs/
14
+ dist/
15
+ downloads/
16
+ eggs/
17
+ .eggs/
18
+ lib/
19
+ lib64/
20
+ parts/
21
+ sdist/
22
+ var/
23
+ wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # Virtual environments
30
+ venv/
31
+ env/
32
+ ENV/
33
+ env.bak/
34
+ venv.bak/
35
+
36
+ # IDE
37
+ .vscode/
38
+ .idea/
39
+ *.swp
40
+ *.swo
41
+ *~
42
+
43
+ # OS
44
+ .DS_Store
45
+ .DS_Store?
46
+ ._*
47
+ .Spotlight-V100
48
+ .Trashes
49
+ ehthumbs.db
50
+ Thumbs.db
51
+
52
+ # Logs
53
+ *.log
54
+ logs/
55
+
56
+ # Temporary files
57
+ *.tmp
58
+ *.temp
59
+ temp/
60
+ tmp/
61
+
62
+ # Gradio
63
+ gradio_cached_examples/
64
+ flagged/
DEPLOYMENT.md ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 🚀 دليل النشر على Hugging Face Spaces
2
+
3
+ هذا الدليل يوضح كيفية نشر مستشار هيئة أسواق المال على Hugging Face Spaces للحصول على رابط دائم ومجاني.
4
+
5
+ ## 📋 المتطلبات المسبقة
6
+
7
+ 1. **حساب Hugging Face**: إنشاء حساب مجاني على [huggingface.co](https://huggingface.co)
8
+ 2. **Google Gemini API Key**: الحصول على مفتاح API من [Google AI Studio](https://makersuite.google.com/app/apikey)
9
+
10
+ ## 🔧 خطوات النشر
11
+
12
+ ### الطريقة الأولى: الرفع المباشر (الأسهل)
13
+
14
+ 1. **إنشاء Space جديد**
15
+ - اذهب إلى [huggingface.co/new-space](https://huggingface.co/new-space)
16
+ - اختر اسماً للمشروع (مثل: `cma-arabic-chatbot`)
17
+ - اختر `Gradio` كـ SDK
18
+ - اختر `Public` للوصول العام
19
+
20
+ 2. **رفع الملفات**
21
+ - ارفع جميع الملفات من هذا المجلد:
22
+ - `app.py` (الملف الرئيسي)
23
+ - `requirements.txt`
24
+ - `README.md`
25
+ - `LICENSE`
26
+ - يمكنك سحب وإفلات الملفات مباشرة في واجهة الويب
27
+
28
+ 3. **إعداد المتغيرات السرية**
29
+ - اذهب إلى إعدادات Space
30
+ - أضف متغير سري جديد:
31
+ - **Name**: `GEMINI_API_KEY`
32
+ - **Value**: مفتاح Google Gemini API الخاص بك
33
+
34
+ 4. **تشغيل التطبيق**
35
+ - سيتم بناء وتشغيل التطبيق تلقائياً
36
+ - ستحصل على رابط دائم مثل: `https://huggingface.co/spaces/username/cma-arabic-chatbot`
37
+
38
+ ### الطريقة الثانية: استخدام Git
39
+
40
+ ```bash
41
+ # 1. استنساخ المستودع
42
+ git clone https://huggingface.co/spaces/username/cma-arabic-chatbot
43
+ cd cma-arabic-chatbot
44
+
45
+ # 2. نسخ الملفات
46
+ cp -r /path/to/cma-chatbot-hf/* .
47
+
48
+ # 3. رفع التغييرات
49
+ git add .
50
+ git commit -m "Initial commit: CMA Arabic Chatbot"
51
+ git push
52
+ ```
53
+
54
+ ## ⚙️ إعدادات متقدمة
55
+
56
+ ### تخصيص المظهر
57
+ يمكنك تعديل ملف `app.py` لتخصيص:
58
+ - الألوان والتصميم
59
+ - النصوص والرسائل
60
+ - الأمثلة المعروضة
61
+
62
+ ### إضافة المزيد من المعرفة
63
+ لإضافة المزيد من الأسئلة والأجوبة:
64
+ 1. عدّل قائمة `_load_default_knowledge()` في `app.py`
65
+ 2. أضف الأسئلة والأجوبة الجديدة
66
+ 3. احفظ وارفع التغييرات
67
+
68
+ ### تحسين الأداء
69
+ - استخدم نموذج AI أسرع إذا لزم الأمر
70
+ - قلل من حجم قاعدة المعرفة للاستجابة الأسرع
71
+ - أضف تخزين مؤقت للاستعلامات المتكررة
72
+
73
+ ## 🔒 الأمان والخصوصية
74
+
75
+ ### حماية مفتاح API
76
+ - **لا تضع** مفتاح API في الكود مباشرة
77
+ - استخدم **Secrets** في إعدادات Hugging Face Space
78
+ - تأكد من أن `.env` مدرج في `.gitignore`
79
+
80
+ ### خصوصية البيانات
81
+ - لا يتم حفظ محادثات المستخدمين
82
+ - جميع المعالجات تتم في الوقت الفعلي
83
+ - لا يتم مشاركة البيانات مع أطراف ثالثة
84
+
85
+ ## 🐛 استكشاف الأخطاء
86
+
87
+ ### مشاكل شائعة وحلولها
88
+
89
+ **1. خطأ في مفتاح API**
90
+ ```
91
+ Error: No API key found
92
+ ```
93
+ **الحل**: تأكد من إضافة `GEMINI_API_KEY` في إعدادات Secrets
94
+
95
+ **2. خطأ في التبعيات**
96
+ ```
97
+ ModuleNotFoundError: No module named 'gradio'
98
+ ```
99
+ **الحل**: تأكد من أن `requirements.txt` يحتوي على جميع المكتبات المطلوبة
100
+
101
+ **3. مشاكل في العرض العربي**
102
+ ```
103
+ Arabic text not displaying correctly
104
+ ```
105
+ **الحل**: تأكد من أن المتصفح يدعم UTF-8 وأن CSS يحتوي على `direction: rtl`
106
+
107
+ **4. بطء في الاستجابة**
108
+ ```
109
+ Timeout errors or slow responses
110
+ ```
111
+ **الحل**:
112
+ - تحقق من حالة Google Gemini API
113
+ - قلل من حجم السياق المرسل للنموذج
114
+ - أضف معالجة أخطاء أفضل
115
+
116
+ ## 📊 مراقبة الأداء
117
+
118
+ ### مقاييس مهمة
119
+ - **وقت الاستجابة**: يجب أن يكون أقل من 10 ثوانٍ
120
+ - **معدل النجاح**: يجب أن يكون أعلى من 95%
121
+ - **رضا المستخدمين**: من خلال التقييمات والتعليقات
122
+
123
+ ### تحسين الأداء
124
+ - راقب استخدام API quota
125
+ - حسّن صياغة الأسئلة للنموذج
126
+ - أضف ردود سريعة للأسئلة الشائعة
127
+
128
+ ## 🔄 التحديثات والصيانة
129
+
130
+ ### تحديث المحتوى
131
+ 1. عدّل قاعدة المعرفة في `app.py`
132
+ 2. اختبر التغييرات محلياً
133
+ 3. ارفع التحديثات إلى Hugging Face
134
+
135
+ ### تحديث التقنيات
136
+ - راقب تحديثات Gradio
137
+ - حدّث مكتبات Python في `requirements.txt`
138
+ - اختبر التوافق مع إصدارات جديدة
139
+
140
+ ## 📞 الدعم
141
+
142
+ ### للمساعدة التقنية
143
+ - [Hugging Face Community](https://huggingface.co/join/discord)
144
+ - [Gradio Documentation](https://gradio.app/docs/)
145
+ - [Google AI Documentation](https://ai.google.dev/docs)
146
+
147
+ ### للمساهمة في المشروع
148
+ - افتح Issue للإبلاغ عن مشاكل
149
+ - اقترح تحسينات عبر Pull Requests
150
+ - شارك تجربتك مع المجتمع
151
+
152
+ ---
153
+
154
+ **نصيحة**: احتفظ بنسخة احتياطية من مفتاح API وإعدادات المشروع في مكان آمن!
HUGGINGFACE_DEPLOYMENT_GUIDE.md ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 🚀 دليل النشر الكامل على Hugging Face Spaces
2
+
3
+ ## 📋 ما تحتاجه للبدء
4
+
5
+ ✅ **حساب Hugging Face** (مجاني)
6
+ ✅ **OpenAI API Key** (لديك بالفعل)
7
+ ✅ **ملفات المشروع** (موجودة في هذا المجلد)
8
+
9
+ ---
10
+
11
+ ## 🔧 الخطوة 1: إعداد حساب Hugging Face
12
+
13
+ ### 1.1 إنشاء الحساب
14
+ 1. اذهب إلى [huggingface.co](https://huggingface.co)
15
+ 2. اضغط "Sign Up" وأنشئ حساباً مجانياً
16
+ 3. تأكد من تفعيل البريد الإلكتروني
17
+
18
+ ### 1.2 إنشاء Space جديد
19
+ 1. اذهب إلى [huggingface.co/new-space](https://huggingface.co/new-space)
20
+ 2. املأ البيانات:
21
+ - **Space name**: `cma-arabic-chatbot` (أو أي اسم تريده)
22
+ - **License**: MIT
23
+ - **SDK**: اختر `Gradio`
24
+ - **Visibility**: اختر `Public`
25
+ 3. اضغط "Create Space"
26
+
27
+ ---
28
+
29
+ ## 📁 الخطوة 2: رفع الملفات
30
+
31
+ ### 2.1 الملفات المطلوبة (من هذا المجلد)
32
+ ارفع هذه الملفات بالترتيب:
33
+
34
+ 1. **`app.py`** - الملف الرئيسي للتطبيق
35
+ 2. **`requirements.txt`** - المكتبات المطلوبة
36
+ 3. **`README.md`** - وصف المشروع
37
+
38
+ ### 2.2 طريقة الرفع
39
+ **الطريقة الأسهل - السحب والإفلات:**
40
+ 1. افتح صفحة Space الخاص بك
41
+ 2. اسحب الملفات من مجلد `cma-chatbot-hf` وأفلتها في المتصفح
42
+ 3. أضف رسالة commit مثل: "Initial upload of CMA chatbot"
43
+ 4. اضغط "Commit changes to main"
44
+
45
+ ---
46
+
47
+ ## 🔑 الخطوة 3: إعداد OpenAI API Key
48
+
49
+ ### 3.1 إضافة المفتاح كـ Secret
50
+ 1. في صفحة Space، اضغط "Settings" (أعلى اليمين)
51
+ 2. اذهب إلى قسم "Repository secrets"
52
+ 3. اضغط "Add a new secret"
53
+ 4. املأ البيانات:
54
+ - **Name**: `OPENAI_API_KEY`
55
+ - **Value**: الصق مفتاح OpenAI API الخاص بك
56
+ 5. اضغط "Add secret"
57
+
58
+ ### 3.2 تأكيد الإعداد
59
+ - تأكد من أن اسم المتغير هو `OPENAI_API_KEY` بالضبط
60
+ - لا تضع مسافات أو أحرف إضافية
61
+ - المفتاح يجب أن يبدأ بـ `sk-`
62
+
63
+ ---
64
+
65
+ ## ⚙️ الخطوة 4: تعديل الكود للعمل مع OpenAI
66
+
67
+ ### 4.1 تحديث app.py
68
+ الكود الحالي يستخدم Google Gemini، نحتاج لتعديله لـ OpenAI:
69
+
70
+ ```python
71
+ # استبدل هذا الجزء في app.py
72
+ import openai
73
+ import os
74
+
75
+ class CMAGradioBot:
76
+ def __init__(self):
77
+ self.setup_openai()
78
+ self.knowledge_base = CMAKnowledgeBase()
79
+
80
+ def setup_openai(self):
81
+ """Configure OpenAI API"""
82
+ api_key = os.getenv('OPENAI_API_KEY')
83
+ if not api_key:
84
+ self.client = None
85
+ print("⚠️ No OpenAI API key found. Using fallback responses.")
86
+ return
87
+
88
+ try:
89
+ openai.api_key = api_key
90
+ self.client = openai
91
+ print("✅ OpenAI API configured successfully")
92
+ except Exception as e:
93
+ self.client = None
94
+ print(f"⚠️ Failed to configure OpenAI: {e}")
95
+ ```
96
+
97
+ ### 4.2 تحديث requirements.txt
98
+ ```txt
99
+ gradio>=4.0.0
100
+ openai>=1.0.0
101
+ python-dotenv>=1.0.0
102
+ ```
103
+
104
+ ---
105
+
106
+ ## 🔄 الخطوة 5: تشغيل التطبيق
107
+
108
+ ### 5.1 انتظار البناء
109
+ - بعد رفع الملفات، سيبدأ Hugging Face في بناء التطبيق
110
+ - ستظهر رسائل البناء في الأسفل
111
+ - انتظر حتى ترى "Running" باللون الأخضر
112
+
113
+ ### 5.2 اختبار التطبيق
114
+ 1. ستحصل على رابط مثل: `https://huggingface.co/spaces/username/cma-arabic-chatbot`
115
+ 2. اختبر بسؤال بسيط مثل: "ما هي المدة القانونية للاحتفاظ ببيانات KYC؟"
116
+ 3. تأكد من أن الإجابة تظهر بالعربية
117
+
118
+ ---
119
+
120
+ ## 🛠️ استكشاف الأخطاء الشائعة
121
+
122
+ ### ❌ خطأ: "No API key found"
123
+ **الحل:**
124
+ 1. تأكد من إضافة `OPENAI_API_KEY` في Secrets
125
+ 2. تأكد من كتابة الاسم بالضبط
126
+ 3. أعد تشغيل Space (Settings → Restart this Space)
127
+
128
+ ### ❌ خطأ: "Module not found"
129
+ **الحل:**
130
+ 1. تأكد من رفع `requirements.txt`
131
+ 2. تأكد من أن المحتوى صحيح
132
+ 3. انتظر اكتمال البناء
133
+
134
+ ### ❌ خطأ: "Build failed"
135
+ **الحل:**
136
+ 1. تحقق من رسائل الخطأ في logs
137
+ 2. تأكد من أن `app.py` لا يحتوي على أخطاء syntax
138
+ 3. تأكد من أن جميع imports موجودة في requirements.txt
139
+
140
+ ### ❌ النص العربي لا يظهر بشكل صحيح
141
+ **الحل:**
142
+ 1. تأكد من أن المتصفح يدعم UTF-8
143
+ 2. تحقق من CSS في app.py (direction: rtl)
144
+ 3. جرب متصفح مختلف
145
+
146
+ ---
147
+
148
+ ## 📊 التحقق من نجاح النشر
149
+
150
+ ### ✅ علامات النجاح:
151
+ - [ ] التطبيق يعمل بدون أخطاء
152
+ - [ ] النص العربي يظهر بشكل صحيح (من اليمين لليسار)
153
+ - [ ] الأسئلة تحصل على إجابات
154
+ - [ ] الرابط يعمل من أجهزة مختلفة
155
+ - [ ] لا توجد رسائل خطأ في console
156
+
157
+ ### 🎯 اختبار سريع:
158
+ جرب هذه الأسئلة:
159
+ 1. "ما هي المدة القانونية للاحتفاظ ببيانات KYC؟"
160
+ 2. "هل هناك قيود على تداولات الموظفين؟"
161
+ 3. "ما هي متطلبات الإفصاح؟" (يجب أن يقول لا توجد معلومات)
162
+
163
+ ---
164
+
165
+ ## 🔄 تحديث التطبيق لاحقاً
166
+
167
+ ### لإضافة المزيد من الأسئلة:
168
+ 1. عدّل قائمة `_load_default_knowledge()` في `app.py`
169
+ 2. أضف الأسئلة والأجوبة الجديدة
170
+ 3. ارفع الملف المحدث
171
+ 4. سيتم إعادة بناء التطبيق تلقائياً
172
+
173
+ ### لتحديث التصميم:
174
+ 1. عدّل CSS في `app.py`
175
+ 2. غيّر الألوان أو التخطيط
176
+ 3. ارفع التحديث
177
+
178
+ ---
179
+
180
+ ## 📞 الحصول على المساعدة
181
+
182
+ ### إذا واجهت مشاكل:
183
+ 1. **Hugging Face Community**: [hf.co/join/discord](https://hf.co/join/discord)
184
+ 2. **Gradio Docs**: [gradio.app/docs](https://gradio.app/docs)
185
+ 3. **OpenAI Docs**: [platform.openai.com/docs](https://platform.openai.com/docs)
186
+
187
+ ### معلومات مفيدة للدعم:
188
+ - رابط Space الخاص بك
189
+ - رسائل الخطأ (إن وجدت)
190
+ - متصفح ونظام التشغيل المستخدم
191
+
192
+ ---
193
+
194
+ ## 🎉 تهانينا!
195
+
196
+ بمجرد اكتمال هذه الخطوات، ستحصل على:
197
+ - ✅ **رابط دائم** لتطبيق CMA chatbot
198
+ - ✅ **استضافة مجانية** على Hugging Face
199
+ - ✅ **واجهة احترافية** باللغة العربية
200
+ - ✅ **إمكانية المشاركة** مع الآخرين
201
+
202
+ **رابطك سيكون:** `https://huggingface.co/spaces/username/cma-arabic-chatbot`
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2024 CMA Arabic Document Chatbot
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
QUICK_START.md ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ⚡ دليل البدء السريع - 5 دقائق للنشر
2
+
3
+ ## 🎯 الهدف
4
+ نشر مستشار هيئة أسواق المال على Hugging Face Spaces في 5 دقائق فقط!
5
+
6
+ ## 📝 الخطوات السريعة
7
+
8
+ ### 1️⃣ إنشاء حساب (دقيقة واحدة)
9
+ - اذهب إلى [huggingface.co](https://huggingface.co) وأنشئ حساباً مجانياً
10
+
11
+ ### 2️⃣ الحصول على API Key (دقيقتان)
12
+ - اذهب إلى [Google AI Studio](https://makersuite.google.com/app/apikey)
13
+ - اضغط "Create API Key"
14
+ - انسخ المفتاح واحتفظ به
15
+
16
+ ### 3️⃣ إنشاء Space (دقيقة واحدة)
17
+ - اذهب إلى [huggingface.co/new-space](https://huggingface.co/new-space)
18
+ - **Space name**: `cma-arabic-chatbot` (أو أي اسم تريده)
19
+ - **SDK**: اختر `Gradio`
20
+ - **Visibility**: اختر `Public`
21
+ - اضغط "Create Space"
22
+
23
+ ### 4️⃣ رفع الملفات (دقيقة واحدة)
24
+ سحب وإفلات هذه الملفات في Space:
25
+ - ✅ `app.py`
26
+ - ✅ `requirements.txt`
27
+ - ✅ `README.md`
28
+
29
+ ### 5️⃣ إضافة API Key (30 ثانية)
30
+ - في صفحة Space، اضغط "Settings"
31
+ - اذهب إلى "Repository secrets"
32
+ - اضغط "Add a new secret"
33
+ - **Name**: `GEMINI_API_KEY`
34
+ - **Value**: الصق مفتاح Google API
35
+ - اضغط "Add secret"
36
+
37
+ ## 🎉 انتهيت!
38
+
39
+ سيتم بناء التطبيق تلقائياً وستحصل على رابط مثل:
40
+ `https://huggingface.co/spaces/username/cma-arabic-chatbot`
41
+
42
+ ## 🔧 إذا واجهت مشاكل
43
+
44
+ ### المشكلة: "No API key found"
45
+ **الحل**: تأكد من إضافة `GEMINI_API_KEY` في Secrets
46
+
47
+ ### المشكلة: "Build failed"
48
+ **الحل**: تأكد من رفع `requirements.txt`
49
+
50
+ ### المشكلة: "Arabic text not showing"
51
+ **الحل**: انتظر دقيقتين لاكتمال البناء
52
+
53
+ ## 📱 اختبار سريع
54
+
55
+ جرب هذه الأسئلة:
56
+ - ما هي المدة القانونية للاحتفاظ ببيانات KYC؟
57
+ - هل هناك قيود على تداولات الموظفين؟
58
+
59
+ ## 🚀 مشاركة التطبيق
60
+
61
+ بمجرد أن يعمل التطبيق:
62
+ - انسخ الرابط وشاركه
63
+ - أضفه إلى موقعك الإلكتروني
64
+ - استخدمه في العروض التقديمية
65
+
66
+ ---
67
+
68
+ **تهانينا! 🎊 لديك الآن مستشار CMA يعمل على الإنترنت مجاناً!**
README.md CHANGED
@@ -1,14 +1,119 @@
1
  ---
2
- title: CMP AI
3
- emoji: 😻
4
  colorFrom: blue
5
- colorTo: red
6
  sdk: gradio
7
- sdk_version: 5.47.0
8
  app_file: app.py
9
  pinned: false
10
- license: apache-2.0
11
- short_description: cma-arabic-chatbot
 
 
 
 
 
 
 
 
 
12
  ---
13
 
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: CMA Arabic Document Chatbot
3
+ emoji: 🤖
4
  colorFrom: blue
5
+ colorTo: purple
6
  sdk: gradio
7
+ sdk_version: 4.44.0
8
  app_file: app.py
9
  pinned: false
10
+ license: mit
11
+ language:
12
+ - ar
13
+ tags:
14
+ - chatbot
15
+ - arabic
16
+ - legal
17
+ - finance
18
+ - cma
19
+ - kuwait
20
+ - regulations
21
  ---
22
 
23
+ # 🤖 مستشار هيئة أسواق المال الكويتية
24
+
25
+ ## نظرة عامة
26
+
27
+ مساعد ذكي متخصص في قوانين ولوائح هيئة أسواق المال الكويتية (CMA). يستخدم الذكاء الاصطناعي وقاعدة معرفة متخصصة لتقديم إجابات دقيقة ومفيدة حول الاستفسارات التنظيمية والقانونية.
28
+
29
+ ## المميزات الرئيسية
30
+
31
+ ### 🎯 **التخصص**
32
+ - متخصص في قوانين هيئة أسواق المال الكويتية
33
+ - يغطي مواضيع KYC، التفويض القانوني، قيود الموظفين، وإدارة الاستثمار
34
+ - معلومات محدثة ودقيقة من المصادر الرسمية
35
+
36
+ ### 🤖 **التقنية المتقدمة**
37
+ - مدعوم بنموذج Google Gemini-1.5-Flash للذكاء الاصطناعي
38
+ - قاعدة معرفة متخصصة ومنظمة
39
+ - معالجة طبيعية للغة العربية
40
+
41
+ ### 🎨 **واجهة مستخدم متقدمة**
42
+ - تصميم يدعم اللغة العربية (RTL)
43
+ - واجهة تفاعلية وسهلة الاستخدام
44
+ - أمثلة توضيحية ومساعدة مدمجة
45
+
46
+ ## الأسئلة المدعومة
47
+
48
+ يمكن للمستشار الإجابة على أسئلة متنوعة مثل:
49
+
50
+ ### 📊 **بيانات العملاء**
51
+ - ما هي المدة القانونية للاحتفاظ ببيانات اعرف عميلك (KYC)؟
52
+ - ما هي متطلبات تحديث بيانات العملاء؟
53
+
54
+ ### 📝 **التفويض القانوني**
55
+ - ما هي شروط التفويض القانوني لفتح الحسابات الاستثمارية؟
56
+ - هل يجوز أن يكون التفويض إلكترونياً؟
57
+
58
+ ### 👥 **قيود الموظفين**
59
+ - هل هناك قيود على تداولات موظفي الشركات المرخصة؟
60
+ - ما هي إجراءات الإبلاغ عن تداولات الموظفين؟
61
+
62
+ ### 💼 **إدارة الاستثمار**
63
+ - هل يجوز التواصل مع العملاء قبل الحصول على ترخيص التسويق؟
64
+ - ما هي التزامات حماية أموال العملاء؟
65
+
66
+ ## كيفية الاستخدام
67
+
68
+ 1. **اكتب سؤالك** في مربع النص
69
+ 2. **اضغط إرسال** أو اضغط Enter
70
+ 3. **احصل على إجابة** مفصلة ودقيقة
71
+ 4. **استمر في المحادثة** لمزيد من التوضيح
72
+
73
+ ## التقنيات المستخدمة
74
+
75
+ - **Gradio**: لبناء واجهة الويب التفاعلية
76
+ - **Google Gemini AI**: لمعالجة الاستفسارات وتوليد الإجابات
77
+ - **Python**: لغة البرمجة الأساسية
78
+ - **HTML/CSS**: لتخصيص التصميم والدعم العربي
79
+
80
+ ## الإعداد والتشغيل
81
+
82
+ ### متطلبات النظام
83
+ ```bash
84
+ pip install -r requirements.txt
85
+ ```
86
+
87
+ ### متغيرات البيئة
88
+ ```bash
89
+ GEMINI_API_KEY=your_google_gemini_api_key
90
+ ```
91
+
92
+ ### تشغيل التطبيق
93
+ ```bash
94
+ python app.py
95
+ ```
96
+
97
+ ## ملاحظات مهمة
98
+
99
+ ⚠️ **تنبيه**: هذا المستشار يقدم معلومات عامة للمساعدة والتوجيه. للحصول على استشارة قانونية رسمية أو معلومات محدثة، يرجى مراجعة الموقع الرسمي لهيئة أسواق المال الكويتية.
100
+
101
+ ## الترخيص
102
+
103
+ هذا المشروع مرخص تحت رخصة MIT - راجع ملف [LICENSE](LICENSE) للتفاصيل.
104
+
105
+ ## المساهمة
106
+
107
+ نرحب بالمساهمات لتحسين المستشار وإضافة المزيد من المعلومات. يرجى:
108
+
109
+ 1. عمل Fork للمشروع
110
+ 2. إنشاء فرع جديد للميزة
111
+ 3. تقديم Pull Request
112
+
113
+ ## الدعم
114
+
115
+ للأسئلة أو المشاكل التقنية، يرجى فتح Issue في المستودع.
116
+
117
+ ---
118
+
119
+ **تم تطوير هذا المستشار لتسهيل الوصول إلى المعلومات التنظيمية والقانونية لهيئة أسواق المال الكويتية**
app.py CHANGED
@@ -0,0 +1,333 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ CMA Arabic Document Chatbot for Hugging Face Spaces - OpenAI Version
4
+ Specialized chatbot for Kuwait Capital Markets Authority regulations
5
+ """
6
+
7
+ import os
8
+ import json
9
+ import gradio as gr
10
+ import openai
11
+ from typing import List, Dict, Any, Optional
12
+
13
+ class CMAKnowledgeBase:
14
+ """Knowledge base for CMA regulations and Q&A"""
15
+
16
+ def __init__(self):
17
+ self.qa_data = self._load_default_knowledge()
18
+
19
+ def _load_default_knowledge(self) -> List[Dict[str, Any]]:
20
+ """Load default CMA knowledge base"""
21
+ return [
22
+ {
23
+ "question": "ما هي المدة القانونية التي يجب أن يحتفظ فيها الشخص المرخص له ببيانات اعرف عميلك (KYC) بعد انتهاء العلاقة مع العميل؟",
24
+ "answer": "خمس سنوات.",
25
+ "category": "Capital Markets"
26
+ },
27
+ {
28
+ "question": "ما هي الشروط التي يجب أن تتوافر في التفويض القانوني الذي يسمح لشخص بفتح وتشغيل حساب استثماري نيابة عن عميل؟ وهل يجوز أن يكون التفويض إلكترونياً؟",
29
+ "answer": "• يجب أن يكون التفويض صادرًا من كاتب عدل أو موثق معتمد من وزارة العدل.\n• يجب أن يتضمن نصا صريحًا بالصلاحيات المفوضة مثل فتح الحساب، تشغيله، إجراء الحوالات، أو بيع وشراء الأوراق المالية.\n• لا يعتد بالتفويض الإلكتروني إلا إذا كان موثقًا ومعتمدًا وفق قانون المعاملات الإلكترونية.",
30
+ "category": "Capital Markets"
31
+ },
32
+ {
33
+ "question": "هل هناك قيود مفروضة على موظفي الشخص المرخص له من قبل هيئة أسواق المال بالنسبة لتداولاتهم؟",
34
+ "answer": "يتعين على موظفي الشخص المرخص له الالتزام بالتعليمات والقيود المفروضة عليهم من قبل الهيئة، حيث يتعين إبلاغ مسؤول المطابقة والالتزام - على الفور - بأي صفقة (بيع أو شراء أوراق مالية محلية) يجريها عن نفسه أو بالإنابة عن أحد أقربائه أو عن شركة تابعة له أو لأحد أقربائه.",
35
+ "category": "Capital Markets"
36
+ },
37
+ {
38
+ "question": "هل يجوز للشخص المرخص له بمزاولة نشاط مدير استثمار جماعي أن يتواصل مع بعض العملاء لمعرفة رأيهم بشأن الاستثمار في صندوق يرغب بتسويقه مستقبلاً؟ وذلك قبل حصوله على ترخيص تسويق الصندوق من الهيئة؟",
39
+ "answer": "يجوز للهيئة – بناء على طلب مقدم - أن تسمح للمسوق خلال فترة استكمال متطلبات الهيئة التواصل مع العملاء المحترفين المحتملين لبحث رغبتهم بالاستثمار في الصندوق المزمع تسويقه دون الإعلان في وسائل الاعلام، وأن لا يتم تقاضي أي مبالغ نقدية أو غير نقدية أو الحصول على التزام نهائي من العملاء بالاشتراك في الصندوق قبل الحصول على ترخيص التسويق من الهيئة.",
40
+ "category": "Capital Markets"
41
+ },
42
+ {
43
+ "question": "ما هي التزامات الشخص المرخص له تجاه حماية أموال العملاء؟",
44
+ "answer": "يجب على الشخص المرخص له الالتزام بقوانين اعرف عميلك (KYC) والاحتفاظ ببيانات العملاء لمدة خمس سنوات، والتأكد من صحة التفويضات القانونية، والإبلاغ الفوري عن تعاملات الموظفين لمنع تضارب المصالح، والامتثال لقوانين هيئة أسواق المال لضمان حماية أموال العملاء من خلال الشفافية والنزاهة في التعاملات المالية.",
45
+ "category": "Capital Markets"
46
+ }
47
+ ]
48
+
49
+ def get_cma_context(self) -> List[Dict[str, str]]:
50
+ """Get CMA-specific context for AI prompts"""
51
+ return [
52
+ {
53
+ 'question': item['question'],
54
+ 'answer': item['answer']
55
+ }
56
+ for item in self.qa_data
57
+ if item.get('category') == 'Capital Markets'
58
+ ]
59
+
60
+ class CMAGradioBot:
61
+ """Main chatbot class for CMA regulations using OpenAI"""
62
+
63
+ def __init__(self):
64
+ self.knowledge_base = CMAKnowledgeBase()
65
+ self.setup_openai()
66
+
67
+ def setup_openai(self):
68
+ """Configure OpenAI API"""
69
+ # Try to get API key from environment or Hugging Face secrets
70
+ api_key = os.getenv('OPENAI_API_KEY')
71
+
72
+ if not api_key:
73
+ # For demo purposes, we'll handle this gracefully
74
+ self.client = None
75
+ print("⚠️ No OpenAI API key found. Using fallback responses.")
76
+ return
77
+
78
+ try:
79
+ # Set up OpenAI client
80
+ openai.api_key = api_key
81
+ self.client = openai
82
+ print("✅ OpenAI API configured successfully")
83
+ except Exception as e:
84
+ self.client = None
85
+ print(f"⚠️ Failed to configure OpenAI: {e}")
86
+
87
+ def generate_response(self, question: str) -> str:
88
+ """Generate response using OpenAI with CMA context"""
89
+
90
+ # If no AI model available, use fallback
91
+ if not self.client:
92
+ return self._fallback_response(question)
93
+
94
+ try:
95
+ # Get CMA context
96
+ cma_context = self.knowledge_base.get_cma_context()
97
+
98
+ # Build context prompt
99
+ context_prompt = """أنت مستشار متخصص في قوانين هيئة أسواق المال الكويتية (CMA).
100
+ استخدم المعلومات التالية للإجابة على الأسئلة بدقة ومهنية.
101
+
102
+ المعلومات المرجعية من قاعدة المعرفة:
103
+ """
104
+
105
+ # Add context from knowledge base
106
+ for item in cma_context:
107
+ if item['question'] and item['answer']:
108
+ context_prompt += f"\nسؤال: {item['question']}\nجواب: {item['answer']}\n"
109
+
110
+ # Add current question
111
+ context_prompt += f"""
112
+ الآن أجب على السؤال التالي بناءً على المعلومات المتوفرة:
113
+
114
+ سؤال: {question}
115
+
116
+ إرشادات الإجابة:
117
+ - إذا كانت المعلومات متوفرة في قاعدة المعرفة، قدم إجابة دقيقة ومفصلة
118
+ - إذا لم تكن المعلومات متوفرة، اعترف بذلك بصراحة وأرشد المستخدم للمصادر الرسمية
119
+ - استخدم اللغة العربية الفصحى المهنية
120
+ - كن مختصراً ومفيداً ودقيقاً
121
+
122
+ جواب:"""
123
+
124
+ # Generate response using OpenAI
125
+ response = self.client.ChatCompletion.create(
126
+ model="gpt-3.5-turbo",
127
+ messages=[
128
+ {"role": "system", "content": "أنت مستشار متخصص في قوانين هيئة أسواق المال الكويتية. أجب باللغة العربية فقط."},
129
+ {"role": "user", "content": context_prompt}
130
+ ],
131
+ max_tokens=500,
132
+ temperature=0.3
133
+ )
134
+
135
+ return response.choices[0].message.content.strip()
136
+
137
+ except Exception as e:
138
+ error_msg = f"عذراً، حدث خطأ في معالجة السؤال. يرجى المحاولة مرة أخرى أو التواصل مع هيئة أسواق المال مباشرة للحصول على معلومات رسمية."
139
+ print(f"Error generating response: {e}")
140
+ return error_msg
141
+
142
+ def _fallback_response(self, question: str) -> str:
143
+ """Fallback response when AI model is not available"""
144
+ # Simple keyword matching for demo
145
+ question_lower = question.lower()
146
+
147
+ if "kyc" in question_lower or "اعرف عميلك" in question:
148
+ return "بناءً على قوانين هيئة أسواق المال الكويتية، يجب الاحتفاظ ببيانات اعرف عميلك (KYC) لمدة خمس سنوات بعد انتهاء العلاقة مع العميل."
149
+
150
+ elif "تفويض" in question or "حساب استثماري" in question:
151
+ return "يجب أن يكون التفويض القانوني صادراً من كاتب عدل أو موثق معتمد من وزارة العدل، ويتضمن نصاً صريحاً بالصلاحيات المفوضة. لا يُعتد بالتفويض الإلكتروني إلا إذا كان موثقاً ومعتمداً وفق قانون المعاملات الإلكترونية."
152
+
153
+ elif "موظف" in question or "تداول" in question:
154
+ return "يتعين على موظفي الشخص المرخص له إبلاغ مسؤول المطابقة والالتزام على الفور بأي صفقة (بيع أو شراء أوراق مالية محلية) يجريها عن نفسه أو بالإنابة عن أحد أقربائه."
155
+
156
+ else:
157
+ return "عذراً، لا تتوفر معلومات كافية في قاعدة المعرفة الحالية للإجابة على هذا السؤال. يرجى الرجوع إلى الموقع الرسمي لهيئة أسواق المال الكويتية أو التواصل معهم مباشرة للحصول على معلومات دقيقة ومحدثة."
158
+
159
+ def create_gradio_interface():
160
+ """Create and configure Gradio interface"""
161
+
162
+ # Initialize chatbot
163
+ bot = CMAGradioBot()
164
+
165
+ def chat_response(message, history):
166
+ """Handle chat responses"""
167
+ if not message.strip():
168
+ return history, ""
169
+
170
+ # Generate response
171
+ response = bot.generate_response(message)
172
+
173
+ # Update history
174
+ if history is None:
175
+ history = []
176
+
177
+ history.append([message, response])
178
+ return history, ""
179
+
180
+ # Create Gradio interface with custom theme
181
+ with gr.Blocks(
182
+ title="مستشار هيئة أسواق المال الكويتية",
183
+ theme=gr.themes.Soft(
184
+ primary_hue="blue",
185
+ secondary_hue="gray",
186
+ neutral_hue="gray"
187
+ ),
188
+ css="""
189
+ .gradio-container {
190
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
191
+ direction: rtl;
192
+ text-align: right;
193
+ }
194
+ .chat-message {
195
+ text-align: right;
196
+ direction: rtl;
197
+ }
198
+ .message-wrap {
199
+ direction: rtl;
200
+ }
201
+ .message {
202
+ text-align: right;
203
+ }
204
+ """
205
+ ) as interface:
206
+
207
+ # Header
208
+ gr.HTML("""
209
+ <div style="text-align: center; padding: 30px; background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%); color: white; border-radius: 15px; margin-bottom: 25px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);">
210
+ <h1 style="margin: 0; font-size: 2.5rem; font-weight: bold;">🤖 مستشار هيئة أسواق المال الكويتية</h1>
211
+ <p style="margin: 15px 0 0 0; font-size: 1.2rem; opacity: 0.9;">مساعد ذكي متخصص في الاستشارات التنظيمية والقانونية</p>
212
+ <p style="margin: 10px 0 0 0; font-size: 1rem; opacity: 0.8;">مدعوم بالذكاء الاصطناعي وقاعدة معرفة متخصصة</p>
213
+ </div>
214
+ """)
215
+
216
+ # Main chat interface
217
+ with gr.Row():
218
+ with gr.Column(scale=1):
219
+ chatbot = gr.Chatbot(
220
+ label="💬 المحادثة مع المستشار",
221
+ height=500,
222
+ show_label=True,
223
+ container=True,
224
+ show_copy_button=True,
225
+ type="tuples"
226
+ )
227
+
228
+ with gr.Row():
229
+ msg = gr.Textbox(
230
+ label="✍️ اكتب سؤالك هنا",
231
+ placeholder="مثال: ما هي المدة القانونية للاحتفاظ ببيانات KYC؟",
232
+ lines=2,
233
+ max_lines=5,
234
+ show_label=True,
235
+ container=True,
236
+ scale=4
237
+ )
238
+
239
+ submit_btn = gr.Button(
240
+ "📤 إرسال",
241
+ variant="primary",
242
+ scale=1,
243
+ size="lg"
244
+ )
245
+
246
+ clear_btn = gr.Button(
247
+ "🗑️ مسح المحادثة",
248
+ variant="secondary",
249
+ size="sm"
250
+ )
251
+
252
+ # Example questions section
253
+ with gr.Accordion("📋 أمثلة على الأسئلة المتاحة", open=False):
254
+ gr.HTML("""
255
+ <div style="padding: 20px; background: #f8f9fa; border-radius: 10px; direction: rtl; text-align: right;">
256
+ <h3 style="color: #2c3e50; margin-bottom: 15px;">أسئلة يمكن للمستشار الإجابة عليها:</h3>
257
+ <div style="display: grid; gap: 10px;">
258
+ <div style="padding: 10px; background: white; border-radius: 8px; border-right: 4px solid #007bff;">
259
+ <strong>📊 بيانات العملاء:</strong> ما هي المدة القانونية للاحتفاظ ببيانات اعرف عميلك (KYC)؟
260
+ </div>
261
+ <div style="padding: 10px; background: white; border-radius: 8px; border-right: 4px solid #28a745;">
262
+ <strong>📝 التفويض القانوني:</strong> ما هي شروط التفويض القانوني لفتح الحسابات الاستثمارية؟
263
+ </div>
264
+ <div style="padding: 10px; background: white; border-radius: 8px; border-right: 4px solid #ffc107;">
265
+ <strong>👥 قيود الموظفين:</strong> هل هناك قيود على تداولات موظفي الشركات المرخصة؟
266
+ </div>
267
+ <div style="padding: 10px; background: white; border-radius: 8px; border-right: 4px solid #dc3545;">
268
+ <strong>💼 إدارة الاستثمار:</strong> هل يجوز التواصل مع العملاء قبل الحصول على ترخيص التسويق؟
269
+ </div>
270
+ </div>
271
+ </div>
272
+ """)
273
+
274
+ # Information section
275
+ with gr.Accordion("ℹ️ معلومات مهمة", open=False):
276
+ gr.HTML("""
277
+ <div style="padding: 20px; background: #e3f2fd; border-radius: 10px; direction: rtl; text-align: right;">
278
+ <h3 style="color: #1565c0; margin-bottom: 15px;">🔍 حول هذا المستشار:</h3>
279
+ <ul style="line-height: 1.8; color: #424242;">
280
+ <li><strong>التخصص:</strong> قوانين ولوائح هيئة أسواق المال الكويتية (CMA)</li>
281
+ <li><strong>التقنية:</strong> مدعوم بالذكاء الاصطناعي (OpenAI GPT) وقاعدة معرفة متخصصة</li>
282
+ <li><strong>اللغة:</strong> العربية مع دعم كامل للنصوص من اليمين إلى اليسار</li>
283
+ <li><strong>الدقة:</strong> يعتمد على مصادر رسمية ويوضح حدود المعرفة المتاحة</li>
284
+ </ul>
285
+
286
+ <div style="margin-top: 20px; padding: 15px; background: #fff3cd; border-radius: 8px; border-right: 4px solid #ffc107;">
287
+ <h4 style="color: #856404; margin: 0 0 10px 0;">⚠️ تنبيه مهم:</h4>
288
+ <p style="margin: 0; color: #856404;">
289
+ هذا المستشار يقدم معلومات عامة للمساعدة والتوجيه. للحصول على استشارة قانونية رسمية أو معلومات محدثة،
290
+ يرجى مراجعة الموقع الرسمي لهيئة أسواق المال الكويتية أو التواصل معهم مباشرة.
291
+ </p>
292
+ </div>
293
+ </div>
294
+ """)
295
+
296
+ # Footer
297
+ gr.HTML("""
298
+ <div style="text-align: center; margin-top: 30px; padding: 20px; background: #f5f5f5; border-radius: 10px; color: #666;">
299
+ <p style="margin: 0; font-size: 0.9em;">
300
+ 🏛️ <strong>هيئة أسواق المال الكويتية</strong> |
301
+ 🤖 <strong>مدعوم بالذكاء الاصطناعي</strong> |
302
+ 🔒 <strong>معلومات موثوقة ومتخصصة</strong>
303
+ </p>
304
+ <p style="margin: 10px 0 0 0; font-size: 0.8em; opacity: 0.8;">
305
+ تم تطوير هذا المستشار لتسهيل الوصول إلى المعلومات التنظيمية والقانونية
306
+ </p>
307
+ </div>
308
+ """)
309
+
310
+ # Event handlers
311
+ msg.submit(chat_response, [msg, chatbot], [chatbot, msg])
312
+ submit_btn.click(chat_response, [msg, chatbot], [chatbot, msg])
313
+ clear_btn.click(lambda: ([], ""), None, [chatbot, msg])
314
+
315
+ # Clear message box after submit
316
+ msg.submit(lambda: "", None, msg)
317
+ submit_btn.click(lambda: "", None, msg)
318
+
319
+ return interface
320
+
321
+ # Launch the application
322
+ if __name__ == "__main__":
323
+ print("🚀 Starting CMA Arabic Document Chatbot...")
324
+ print("📋 Specialized in Kuwait Capital Markets Authority regulations")
325
+ print("🔧 Using OpenAI GPT for AI processing")
326
+
327
+ interface = create_gradio_interface()
328
+ interface.launch(
329
+ share=False, # Hugging Face Spaces handles sharing
330
+ server_name="0.0.0.0",
331
+ server_port=7860,
332
+ show_error=True
333
+ )
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio>=4.0.0
2
+ openai>=1.0.0
3
+ python-dotenv>=1.0.0