Upload 4 files
Browse files- README_HF.md +69 -0
- app.py +338 -0
- deploy_to_hf.md +99 -0
- requirements_hf.txt +4 -0
README_HF.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: Creative Agent - الوكيل الإبداعي
|
| 3 |
+
emoji: 🎨
|
| 4 |
+
colorFrom: green
|
| 5 |
+
colorTo: blue
|
| 6 |
+
sdk: gradio
|
| 7 |
+
sdk_version: 4.8.0
|
| 8 |
+
app_file: app.py
|
| 9 |
+
pinned: false
|
| 10 |
+
license: mit
|
| 11 |
+
language:
|
| 12 |
+
- ar
|
| 13 |
+
tags:
|
| 14 |
+
- arabic
|
| 15 |
+
- creative-writing
|
| 16 |
+
- marketing
|
| 17 |
+
- advertising
|
| 18 |
+
- saudi
|
| 19 |
+
- allam
|
| 20 |
+
- content-generation
|
| 21 |
+
---
|
| 22 |
+
|
| 23 |
+
# 🎨 Creative Agent - الوكيل الإبداعي
|
| 24 |
+
|
| 25 |
+
مساعد ذكي لإنشاء المحتوى الإبداعي والإعلاني باللغة العربية باستخدام نموذج علام.
|
| 26 |
+
|
| 27 |
+
## ✨ المميزات
|
| 28 |
+
|
| 29 |
+
- **🤖 نموذج علام المتقدم**: يستخدم ALLaM-7B-Instruct-preview للحصول على محتوى عربي طبيعي ومقنع
|
| 30 |
+
- **🎯 محتوى مخصص**: ينشئ نصوص إعلانية تتناسب مع علامتك التجارية وجمهورك
|
| 31 |
+
- **🇸🇦 لمسة محلية**: يراعي الثقافة والسوق السعودي
|
| 32 |
+
- **⚡ سريع وسهل**: واجهة بسيطة ونتائج فورية
|
| 33 |
+
|
| 34 |
+
## 🎯 كيفية الاستخدام
|
| 35 |
+
|
| 36 |
+
1. **أدخل اسم العميل** - اسم العلامة التجارية أو الشركة
|
| 37 |
+
2. **وصف المنتج** - تفاصيل المنتج أو الخدمة المراد التسويق لها
|
| 38 |
+
3. **الجمهور المستهدف** - حدد من هم عملاؤك (العمر، الاهتمامات، المنطقة)
|
| 39 |
+
4. **صوت العلامة** - اختر طابع التواصل (مرح، جدي، ودود، إلخ)
|
| 40 |
+
5. **اضغط إنشاء** - احصل على محتوى إبداعي مخصص
|
| 41 |
+
|
| 42 |
+
## 💡 أمثلة للتجربة
|
| 43 |
+
|
| 44 |
+
### مطعم تراثي
|
| 45 |
+
- **العميل**: مطعم الأصالة
|
| 46 |
+
- **المنتج**: مطعم يقدم الأكلات السعودية التراثية
|
| 47 |
+
- **الجمهور**: العائلات السعودية ومحبو التراث
|
| 48 |
+
- **الصوت**: تراثي - دافئ - أصيل - عائلي
|
| 49 |
+
|
| 50 |
+
### متجر تقني
|
| 51 |
+
- **العميل**: متجر التقنية
|
| 52 |
+
- **المنتج**: أجهزة ذكية وإكسسوارات تقنية
|
| 53 |
+
- **الجمهور**: الشباب التقني (18-35 سنة)
|
| 54 |
+
- **الصوت**: عصري - ذكي - سريع - مبتكر
|
| 55 |
+
|
| 56 |
+
## 🔧 التقنيات المستخدمة
|
| 57 |
+
|
| 58 |
+
- **النموذج**: ALLaM-7B-Instruct-preview
|
| 59 |
+
- **المنصة**: Gradio
|
| 60 |
+
- **اللغة**: Python
|
| 61 |
+
- **التخصص**: المحتوى العربي والسوق السعودي
|
| 62 |
+
|
| 63 |
+
## 🎨 مطور بواسطة
|
| 64 |
+
|
| 65 |
+
فريق الوكالة الإبداعية - الرياض، السعودية 🇸🇦
|
| 66 |
+
|
| 67 |
+
---
|
| 68 |
+
|
| 69 |
+
**ملاحظة**: هذا التطبيق مصمم خصيصاً للسوق السعودي ويستخدم نموذج علام المطور محلياً لضمان الجودة والملاءمة الثقافية.
|
app.py
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
Creative Agent - HuggingFace Space
|
| 4 |
+
التطبيق البسيط لإنشاء المحتوى الإبداعي باستخدام نموذج علام
|
| 5 |
+
"""
|
| 6 |
+
|
| 7 |
+
import gradio as gr
|
| 8 |
+
import torch
|
| 9 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 10 |
+
from typing import Optional
|
| 11 |
+
import os
|
| 12 |
+
|
| 13 |
+
class AllamCreativeAgent:
|
| 14 |
+
"""الوكيل الإبداعي باستخدام نموذج علام"""
|
| 15 |
+
|
| 16 |
+
def __init__(self):
|
| 17 |
+
self.model_name = "ALLaM-AI/ALLaM-7B-Instruct-preview"
|
| 18 |
+
self.model: Optional[AutoModelForCausalLM] = None
|
| 19 |
+
self.tokenizer: Optional[AutoTokenizer] = None
|
| 20 |
+
self.device = "cuda" if torch.cuda.is_available() else "cpu"
|
| 21 |
+
self.is_loaded = False
|
| 22 |
+
print(f"🔄 تهيئة النظام على {self.device}")
|
| 23 |
+
|
| 24 |
+
def load_model(self, progress=gr.Progress()):
|
| 25 |
+
"""تحميل نموذج علام"""
|
| 26 |
+
if self.is_loaded:
|
| 27 |
+
return
|
| 28 |
+
|
| 29 |
+
try:
|
| 30 |
+
progress(0.1, desc="تحميل التوكينايزر...")
|
| 31 |
+
self.tokenizer = AutoTokenizer.from_pretrained(
|
| 32 |
+
self.model_name,
|
| 33 |
+
trust_remote_code=True
|
| 34 |
+
)
|
| 35 |
+
|
| 36 |
+
progress(0.4, desc="تحميل نموذج علام...")
|
| 37 |
+
self.model = AutoModelForCausalLM.from_pretrained(
|
| 38 |
+
self.model_name,
|
| 39 |
+
torch_dtype=torch.float16 if self.device == "cuda" else torch.float32,
|
| 40 |
+
device_map="auto" if self.device == "cuda" else None,
|
| 41 |
+
trust_remote_code=True,
|
| 42 |
+
low_cpu_mem_usage=True
|
| 43 |
+
)
|
| 44 |
+
|
| 45 |
+
if self.device == "cpu":
|
| 46 |
+
self.model = self.model.to(self.device)
|
| 47 |
+
|
| 48 |
+
progress(1.0, desc="تم تحميل النموذج بنجاح!")
|
| 49 |
+
self.is_loaded = True
|
| 50 |
+
print(f"✅ تم تحميل نموذج علام على {self.device}")
|
| 51 |
+
|
| 52 |
+
except Exception as e:
|
| 53 |
+
print(f"❌ خطأ في تحميل نموذج علام: {str(e)}")
|
| 54 |
+
raise
|
| 55 |
+
|
| 56 |
+
def generate_creative_content(self, client_name: str, product_description: str,
|
| 57 |
+
target_audience: str, brand_voice: str,
|
| 58 |
+
progress=gr.Progress()) -> str:
|
| 59 |
+
"""إنشاء محتوى إبداعي"""
|
| 60 |
+
|
| 61 |
+
if not all([client_name, product_description, target_audience, brand_voice]):
|
| 62 |
+
return "⚠️ يرجى ملء جميع الحقول المطلوبة"
|
| 63 |
+
|
| 64 |
+
progress(0.1, desc="تحضير النموذج...")
|
| 65 |
+
|
| 66 |
+
try:
|
| 67 |
+
# تحميل النموذج إذا لم يكن محمل
|
| 68 |
+
if not self.is_loaded:
|
| 69 |
+
self.load_model(progress)
|
| 70 |
+
|
| 71 |
+
progress(0.6, desc="إنشاء المحتوى الإبداعي...")
|
| 72 |
+
|
| 73 |
+
# تحضير النص التوجيهي
|
| 74 |
+
prompt = f"""أنت مبدع إعلاني محترف في وكالة إبداعية بالرياض. مهمتك إنشاء محتوى إبداعي للعملاء.
|
| 75 |
+
|
| 76 |
+
معلومات العميل:
|
| 77 |
+
- اسم العميل: {client_name}
|
| 78 |
+
- وصف المنتج: {product_description}
|
| 79 |
+
- الجمهور المستهدف: {target_audience}
|
| 80 |
+
- صوت العلامة التجارية: {brand_voice}
|
| 81 |
+
|
| 82 |
+
المطلوب:
|
| 83 |
+
أنشئ نصاً إعلانياً جذاباً باللغة العربية يتناسب مع صوت العلامة التجارية، يستخدم أسلوباً سردياً مقنعاً يربط بين المنتج وحياة الجمهور اليومية، ويثير المشاعر ويحفز على الفعل، مع استخدام عبارات تفاعلية ومحلية تناسب الجمهور السعودي.
|
| 84 |
+
|
| 85 |
+
النص الإعلاني:"""
|
| 86 |
+
|
| 87 |
+
# تحضير الرسائل
|
| 88 |
+
messages = [
|
| 89 |
+
{"role": "system", "content": "أنت مبدع إعلاني محترف متخصص في السوق السعودي وخبير في كتابة المحتوى الإبداعي باللغة العربية"},
|
| 90 |
+
{"role": "user", "content": prompt}
|
| 91 |
+
]
|
| 92 |
+
|
| 93 |
+
# تطبيق قالب المحادثة
|
| 94 |
+
inputs = self.tokenizer.apply_chat_template(
|
| 95 |
+
messages,
|
| 96 |
+
tokenize=False,
|
| 97 |
+
add_generation_prompt=True
|
| 98 |
+
)
|
| 99 |
+
|
| 100 |
+
# تحضير المدخلات
|
| 101 |
+
inputs = self.tokenizer(
|
| 102 |
+
inputs,
|
| 103 |
+
return_tensors='pt',
|
| 104 |
+
return_token_type_ids=False
|
| 105 |
+
)
|
| 106 |
+
|
| 107 |
+
# نقل للجهاز المناسب
|
| 108 |
+
inputs = {k: v.to(self.device) for k, v in inputs.items()}
|
| 109 |
+
|
| 110 |
+
progress(0.8, desc="معالجة النص...")
|
| 111 |
+
|
| 112 |
+
# توليد المحتوى
|
| 113 |
+
with torch.no_grad():
|
| 114 |
+
response = self.model.generate(
|
| 115 |
+
**inputs,
|
| 116 |
+
max_new_tokens=1024,
|
| 117 |
+
do_sample=True,
|
| 118 |
+
top_k=50,
|
| 119 |
+
top_p=0.95,
|
| 120 |
+
temperature=0.7,
|
| 121 |
+
pad_token_id=self.tokenizer.eos_token_id
|
| 122 |
+
)
|
| 123 |
+
|
| 124 |
+
# استخراج النص المولد
|
| 125 |
+
if inputs['input_ids'].shape[1] > 0:
|
| 126 |
+
original_length = inputs['input_ids'].shape[1]
|
| 127 |
+
generated_tokens = response[:, original_length:]
|
| 128 |
+
generated_text = self.tokenizer.batch_decode(
|
| 129 |
+
generated_tokens,
|
| 130 |
+
skip_special_tokens=True
|
| 131 |
+
)[0]
|
| 132 |
+
else:
|
| 133 |
+
generated_text = self.tokenizer.batch_decode(
|
| 134 |
+
response,
|
| 135 |
+
skip_special_tokens=True
|
| 136 |
+
)[0]
|
| 137 |
+
|
| 138 |
+
progress(1.0, desc="تم إنشاء المحتوى!")
|
| 139 |
+
|
| 140 |
+
# تنظيف الذاكرة
|
| 141 |
+
if self.device == "cuda":
|
| 142 |
+
torch.cuda.empty_cache()
|
| 143 |
+
|
| 144 |
+
return f"""# 🎨 المحتوى الإبداعي لـ {client_name}
|
| 145 |
+
|
| 146 |
+
{generated_text.strip()}
|
| 147 |
+
|
| 148 |
+
---
|
| 149 |
+
✨ تم إنشاء هذا المحتوى بواسطة نموذج علام - مطور محلياً في السعودية
|
| 150 |
+
🤖 نموذج: ALLaM-7B-Instruct-preview
|
| 151 |
+
🔗 Creative Agent | الوكيل الإبداعي
|
| 152 |
+
"""
|
| 153 |
+
|
| 154 |
+
except Exception as e:
|
| 155 |
+
progress(1.0, desc="حدث خطأ!")
|
| 156 |
+
return f"❌ حدث خطأ في إنشاء المحتوى: {str(e)}"
|
| 157 |
+
|
| 158 |
+
def get_model_status(self) -> str:
|
| 159 |
+
"""حالة النموذج"""
|
| 160 |
+
cuda_available = torch.cuda.is_available()
|
| 161 |
+
gpu_name = torch.cuda.get_device_name(0) if cuda_available else "غير متوفر"
|
| 162 |
+
|
| 163 |
+
status = f"""## 📊 حالة النموذج
|
| 164 |
+
|
| 165 |
+
**النموذج**: ALLaM-7B-Instruct-preview
|
| 166 |
+
**الجهاز**: {self.device.upper()}
|
| 167 |
+
**GPU**: {gpu_name}
|
| 168 |
+
**حالة التحميل**: {"✅ محمل" if self.is_loaded else "⏳ غير محمل"}
|
| 169 |
+
**CUDA متوفر**: {"✅ نعم" if cuda_available else "❌ لا"}
|
| 170 |
+
"""
|
| 171 |
+
return status
|
| 172 |
+
|
| 173 |
+
def create_gradio_interface():
|
| 174 |
+
"""إنشاء واجهة Gradio"""
|
| 175 |
+
|
| 176 |
+
agent = AllamCreativeAgent()
|
| 177 |
+
|
| 178 |
+
# تصميم الواجهة
|
| 179 |
+
with gr.Blocks(
|
| 180 |
+
title="Creative Agent - الوكيل الإبداعي",
|
| 181 |
+
theme=gr.themes.Soft(),
|
| 182 |
+
css="""
|
| 183 |
+
.rtl { direction: rtl; text-align: right; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; }
|
| 184 |
+
.main-title { text-align: center; color: #2E7D32; margin-bottom: 20px; }
|
| 185 |
+
.info-box { background: #f5f5f5; padding: 15px; border-radius: 10px; margin: 10px 0; border-right: 4px solid #4CAF50; }
|
| 186 |
+
.status-box { background: #e3f2fd; padding: 10px; border-radius: 8px; margin: 10px 0; }
|
| 187 |
+
"""
|
| 188 |
+
) as demo:
|
| 189 |
+
|
| 190 |
+
# العنوان الرئيسي
|
| 191 |
+
gr.Markdown(
|
| 192 |
+
"""
|
| 193 |
+
# 🎨 Creative Agent - الوكيل الإبداعي
|
| 194 |
+
### مساعدك الذكي في إنشاء المحتوى الإبداعي باستخدام نموذج علام
|
| 195 |
+
#### مطور باستخدام نموذج ALLaM-7B من الذكاء الاصطناعي السعودي
|
| 196 |
+
""",
|
| 197 |
+
elem_classes=["main-title"]
|
| 198 |
+
)
|
| 199 |
+
|
| 200 |
+
with gr.Row():
|
| 201 |
+
with gr.Column(scale=2):
|
| 202 |
+
gr.Markdown("## 📝 معلومات الحملة الإعلانية")
|
| 203 |
+
|
| 204 |
+
client_name = gr.Textbox(
|
| 205 |
+
label="اسم العميل *",
|
| 206 |
+
placeholder="مثال: مقهى الرياض الذهبي",
|
| 207 |
+
elem_classes=["rtl"]
|
| 208 |
+
)
|
| 209 |
+
|
| 210 |
+
product_description = gr.Textbox(
|
| 211 |
+
label="وصف المنتج أو الخدمة *",
|
| 212 |
+
placeholder="مثال: مقهى عصري يقدم القهوة السعودية الأصيلة مع لمسة حديثة، يقع في حي الملز",
|
| 213 |
+
lines=3,
|
| 214 |
+
elem_classes=["rtl"]
|
| 215 |
+
)
|
| 216 |
+
|
| 217 |
+
target_audience = gr.Textbox(
|
| 218 |
+
label="الجمهور المستهدف *",
|
| 219 |
+
placeholder="مثال: الشباب والمهنيون في الرياض (25-40 سنة)، محبو القهوة المميزة والأجواء العصرية",
|
| 220 |
+
lines=3,
|
| 221 |
+
elem_classes=["rtl"]
|
| 222 |
+
)
|
| 223 |
+
|
| 224 |
+
brand_voice = gr.Textbox(
|
| 225 |
+
label="صوت العلامة التجارية *",
|
| 226 |
+
placeholder="مثال: عصري - دافئ - أصيل - مميز - مضياف",
|
| 227 |
+
elem_classes=["rtl"]
|
| 228 |
+
)
|
| 229 |
+
|
| 230 |
+
generate_btn = gr.Button(
|
| 231 |
+
"🚀 إنشاء المحتوى الإبداعي",
|
| 232 |
+
variant="primary",
|
| 233 |
+
size="lg"
|
| 234 |
+
)
|
| 235 |
+
|
| 236 |
+
with gr.Column(scale=1):
|
| 237 |
+
gr.Markdown("## 💡 نصائح للحصول على أفضل النتائج")
|
| 238 |
+
gr.Markdown(
|
| 239 |
+
"""
|
| 240 |
+
<div class="info-box">
|
| 241 |
+
<strong>للحصول على محتوى مميز:</strong><br><br>
|
| 242 |
+
🎯 <strong>كن محدداً</strong> في وصف منتجك أو خدمتك<br>
|
| 243 |
+
👥 <strong>حدد الجمهور بدقة</strong> (العمر، المنطقة، الاهتمامات)<br>
|
| 244 |
+
🗣️ <strong>اختر صوت العلامة</strong> بعناية (مرح، رسمي، ودود)<br>
|
| 245 |
+
🇸🇦 <strong>فكر محلياً</strong> - استخدم مصطلحات سعودية مناسبة<br>
|
| 246 |
+
</div>
|
| 247 |
+
""",
|
| 248 |
+
elem_classes=["rtl"]
|
| 249 |
+
)
|
| 250 |
+
|
| 251 |
+
# معلومات النموذج
|
| 252 |
+
model_status = gr.Markdown(
|
| 253 |
+
agent.get_model_status(),
|
| 254 |
+
elem_classes=["rtl", "status-box"]
|
| 255 |
+
)
|
| 256 |
+
|
| 257 |
+
refresh_btn = gr.Button("🔄 تحديث حالة النموذج", size="sm")
|
| 258 |
+
|
| 259 |
+
# منطقة النتائج
|
| 260 |
+
gr.Markdown("## ✨ المحتوى الإبداعي المُنشأ")
|
| 261 |
+
output_content = gr.Markdown(
|
| 262 |
+
"""
|
| 263 |
+
<div class="info-box">
|
| 264 |
+
سيظهر المحتوى الإبداعي هنا بعد الضغط على زر الإنشاء...<br><br>
|
| 265 |
+
<strong>ما ستحصل عليه:</strong><br>
|
| 266 |
+
• نص إعلاني مخصص لعلامتك التجارية<br>
|
| 267 |
+
• أسلوب يناسب جمهورك المستهدف<br>
|
| 268 |
+
• لغة عربية طبيعية ومقنعة<br>
|
| 269 |
+
• لمسة محلية تناسب السوق السعودي<br>
|
| 270 |
+
</div>
|
| 271 |
+
""",
|
| 272 |
+
elem_classes=["rtl"]
|
| 273 |
+
)
|
| 274 |
+
|
| 275 |
+
# ربط الأحداث
|
| 276 |
+
generate_btn.click(
|
| 277 |
+
fn=agent.generate_creative_content,
|
| 278 |
+
inputs=[client_name, product_description, target_audience, brand_voice],
|
| 279 |
+
outputs=output_content,
|
| 280 |
+
show_progress=True
|
| 281 |
+
)
|
| 282 |
+
|
| 283 |
+
refresh_btn.click(
|
| 284 |
+
fn=agent.get_model_status,
|
| 285 |
+
outputs=model_status
|
| 286 |
+
)
|
| 287 |
+
|
| 288 |
+
# معلومات إضافية
|
| 289 |
+
gr.Markdown(
|
| 290 |
+
"""
|
| 291 |
+
---
|
| 292 |
+
<div style="text-align: center; color: #666; font-size: 14px;">
|
| 293 |
+
🎨 <strong>Creative Agent</strong> - الوكيل الإبداعي<br>
|
| 294 |
+
مطور باستخدام نموذج علام من الذكاء الاصطناعي السعودي 🇸🇦<br>
|
| 295 |
+
<em>تطوير: فريق الوكالة الإبداعية | الرياض 2024</em>
|
| 296 |
+
</div>
|
| 297 |
+
""",
|
| 298 |
+
elem_classes=["rtl"]
|
| 299 |
+
)
|
| 300 |
+
|
| 301 |
+
# أمثلة سريعة
|
| 302 |
+
gr.Markdown(
|
| 303 |
+
"""
|
| 304 |
+
<div class="info-box">
|
| 305 |
+
<strong>أمثلة سريعة للتجربة:</strong><br><br>
|
| 306 |
+
|
| 307 |
+
<strong>مطعم:</strong><br>
|
| 308 |
+
العميل: مطعم الأصالة<br>
|
| 309 |
+
المنتج: مطعم تراثي يقدم الأكلات السعودية الشعبية<br>
|
| 310 |
+
الجمهور: العائلات السعودية ومحبو التراث<br>
|
| 311 |
+
الصوت: تراثي - دافئ - أصيل - عائلي<br><br>
|
| 312 |
+
|
| 313 |
+
<strong>متجر إلكتروني:</strong><br>
|
| 314 |
+
العميل: متجر التقنية<br>
|
| 315 |
+
المنتج: متجر إلكتروني للأجهزة التقنية والإكسسوارات<br>
|
| 316 |
+
الجمهور: الشباب التقني (18-35 سنة)<br>
|
| 317 |
+
الصوت: عصري - ذكي - سريع - مفيد<br>
|
| 318 |
+
</div>
|
| 319 |
+
""",
|
| 320 |
+
elem_classes=["rtl"]
|
| 321 |
+
)
|
| 322 |
+
|
| 323 |
+
return demo
|
| 324 |
+
|
| 325 |
+
def main():
|
| 326 |
+
"""تشغيل التطبيق"""
|
| 327 |
+
demo = create_gradio_interface()
|
| 328 |
+
|
| 329 |
+
# تشغيل التطبيق مع النشر العام
|
| 330 |
+
demo.launch(
|
| 331 |
+
share=True,
|
| 332 |
+
server_port=int(os.environ.get("GRADIO_SERVER_PORT", 7860)),
|
| 333 |
+
show_api=False,
|
| 334 |
+
show_error=True
|
| 335 |
+
)
|
| 336 |
+
|
| 337 |
+
if __name__ == "__main__":
|
| 338 |
+
main()
|
deploy_to_hf.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# نشر التطبيق البسيط على HuggingFace Spaces 🚀
|
| 2 |
+
|
| 3 |
+
## الملفات المطلوبة للنشر:
|
| 4 |
+
|
| 5 |
+
### 1. الملفات الأساسية:
|
| 6 |
+
- `app.py` - التطبيق الرئيسي
|
| 7 |
+
- `README_HF.md` - وصف المشروع (سيُعيد تسميته README.md)
|
| 8 |
+
- `requirements_hf.txt` - المتطلبات (سيُعيد تسميته requirements.txt)
|
| 9 |
+
|
| 10 |
+
## 📋 خطوات النشر:
|
| 11 |
+
|
| 12 |
+
### 1. إنشاء Space جديد:
|
| 13 |
+
- اذهب إلى [HuggingFace Spaces](https://huggingface.co/spaces)
|
| 14 |
+
- اضغط "Create new Space"
|
| 15 |
+
- اختر اسم: `creative-agent-arabic`
|
| 16 |
+
- اختر SDK: `Gradio`
|
| 17 |
+
- اجعله Public
|
| 18 |
+
|
| 19 |
+
### 2. رفع الملفات:
|
| 20 |
+
```bash
|
| 21 |
+
# انسخ الملفات التالية للـ Space:
|
| 22 |
+
|
| 23 |
+
# 1. التطبيق الرئيسي
|
| 24 |
+
cp app.py → app.py
|
| 25 |
+
|
| 26 |
+
# 2. ملف الوصف
|
| 27 |
+
cp README_HF.md → README.md
|
| 28 |
+
|
| 29 |
+
# 3. المتطلبات
|
| 30 |
+
cp requirements_hf.txt → requirements.txt
|
| 31 |
+
```
|
| 32 |
+
|
| 33 |
+
### 3. إعدادات المساحة:
|
| 34 |
+
```yaml
|
| 35 |
+
# في README.md للـ Space (تلقائي):
|
| 36 |
+
---
|
| 37 |
+
title: Creative Agent - الوكيل الإبداعي
|
| 38 |
+
emoji: 🎨
|
| 39 |
+
colorFrom: green
|
| 40 |
+
colorTo: blue
|
| 41 |
+
sdk: gradio
|
| 42 |
+
sdk_version: 4.8.0
|
| 43 |
+
app_file: app.py
|
| 44 |
+
pinned: false
|
| 45 |
+
---
|
| 46 |
+
```
|
| 47 |
+
|
| 48 |
+
### 4. التحقق من النشر:
|
| 49 |
+
بمجرد رفع الملفات:
|
| 50 |
+
- ✅ سيبدأ التطبيق تلقائياً
|
| 51 |
+
- ✅ سيحمل نموذج علام
|
| 52 |
+
- ✅ سيصبح متاح للجمهور
|
| 53 |
+
- ✅ سيحصل على رابط: `https://huggingface.co/spaces/[username]/creative-agent-arabic`
|
| 54 |
+
|
| 55 |
+
## 🎯 المميزات بعد النشر:
|
| 56 |
+
|
| 57 |
+
### للمستخدمين:
|
| 58 |
+
- **وصول مجاني** لنموذج علام
|
| 59 |
+
- **واجهة عربية** سهلة الاستخدام
|
| 60 |
+
- **نتائج فورية** بدون تثبيت
|
| 61 |
+
- **مشاركة الروابط** مع الفريق
|
| 62 |
+
|
| 63 |
+
### للمطور (أنت):
|
| 64 |
+
- **إحصائيات الاستخدام** من HuggingFace
|
| 65 |
+
- **تعليقات المستخدمين**
|
| 66 |
+
- **انتشار أوسع** للمشروع
|
| 67 |
+
- **بناء سمعة** في مجتمع AI
|
| 68 |
+
|
| 69 |
+
## 🛠️ إضافات مستقبلية للـ Space:
|
| 70 |
+
|
| 71 |
+
### يمكن إضافة:
|
| 72 |
+
- **أمثلة تفاعلية** في الواجهة
|
| 73 |
+
- **معرض للنتائج** المميزة
|
| 74 |
+
- **تقييم المستخدمين** للمحتوى المُنشأ
|
| 75 |
+
- **تكامل مع API** خارجية
|
| 76 |
+
|
| 77 |
+
## ⚡ الملاحظات المهمة:
|
| 78 |
+
|
| 79 |
+
### الأداء:
|
| 80 |
+
- النموذج سيحمل عند أول استخدام (قد يستغرق دقائق)
|
| 81 |
+
- بعدها سيكون سريع جداً
|
| 82 |
+
- HuggingFace يوفر GPU مجاناً للـ Spaces
|
| 83 |
+
|
| 84 |
+
### الاستخدام:
|
| 85 |
+
- **مجاني** للجميع
|
| 86 |
+
- **لا حدود** على عدد المحاولات
|
| 87 |
+
- **متاح 24/7**
|
| 88 |
+
|
| 89 |
+
---
|
| 90 |
+
|
| 91 |
+
## 🎉 النتيجة النهائية:
|
| 92 |
+
|
| 93 |
+
بمجرد النشر ستحصل على:
|
| 94 |
+
- **رابط عام**: `https://huggingface.co/spaces/[username]/creative-agent-arabic`
|
| 95 |
+
- **تطبيق ويب كامل** باللغة العربية
|
| 96 |
+
- **استخدام نموذج علام** مجاناً
|
| 97 |
+
- **مشاركة سهلة** مع العملاء والفريق
|
| 98 |
+
|
| 99 |
+
**التطبيق جاهز تماماً للنشر! 🚀**
|
requirements_hf.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
gradio==4.8.0
|
| 2 |
+
transformers==4.36.2
|
| 3 |
+
torch==2.1.2
|
| 4 |
+
accelerate==0.25.0
|