Spaces:
Sleeping
Sleeping
File size: 3,151 Bytes
4bec409 7cfecec 4bec409 7cfecec 4bec409 7cfecec 4bec409 7cfecec 4bec409 7cfecec 4bec409 7cfecec 4bec409 7cfecec 4bec409 7cfecec 4bec409 | 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 77 78 79 80 81 82 83 84 85 | import re
from huggingface_hub import HfApi
def validate_hf_token(token: str):
"""
التحقق من صحة توكن المستخدم وجلب بيانات الحساب لضمان صلاحية الاستهلاك.
"""
if not token or not token.startswith("hf_"):
return False, "⚠️ عذراً، يجب إدخال Hugging Face Token صحيح يبدأ بـ hf_"
try:
api = HfApi(token=token)
user_info = api.whoami()
username = user_info.get('name', 'User')
return True, f"✅ تم الاتصال بنجاح. مرحباً كاتبنا المبدع: {username}"
except Exception as e:
return False, f"❌ خطأ في التحقق من الرمز: {str(e)}"
def clean_ai_output(text: str):
"""
تنظيف مخرجات النماذج من العلامات الزائدة أو النصوص التقنية
التي قد تظهر أثناء توليد النص الروائي.
"""
if not text:
return ""
# إزالة علامات التفكير أو الوسوم التقنية إن وجدت
text = re.sub(r'<\|thought\|>.*?<\|/thought\|>', '', text, flags=re.DOTALL)
text = re.sub(r'\[SYSTEM_NOTE\].*?\[/SYSTEM_NOTE\]', '', text, flags=re.DOTALL)
return text.strip()
def format_chat_history(chat_history):
"""
تنسيق المحادثة الجماعية بين الوكلاء الـ 9 لعرضها في واجهة Gradio.
يتم استخدام Markdown لتمييز الأدوار.
"""
if not chat_history:
return "جاري بدء النقاش بين الوكلاء..."
formatted_output = ""
# أيقونات مخصصة لكل وكيل لتمييزهم بصرياً
icons = {
"Analyst": "🔍",
"Style_Guardian": "🛡️",
"Architect": "📐",
"Draft_Writer": "✍️",
"Humanizer": "🎭",
"Continuity_Guard": "⏳",
"Psychologist": "🧠",
"Critic": "⚖️",
"Editor_In_Chief": "👑"
}
for message in chat_history:
role = message.get("name", "Unknown")
content = message.get("content", "")
if not content:
continue
icon = icons.get(role, "🤖")
# تنسيق مخصص لكل رسالة
formatted_output += f"### {icon} {role}\n"
formatted_output += f"{content}\n\n"
formatted_output += "---\n\n"
return formatted_output
def extract_final_story(chat_history):
"""
محاولة استخراج النص الروائي النهائي المدمج من رسالة Editor-in-Chief الأخيرة.
"""
if not chat_history:
return "لم يتم توليد نص بعد."
# نبحث عن آخر رسالة من رئيس التحرير أو آخر رسالة في الحوار
for message in reversed(chat_history):
if message.get("name") == "Editor_In_Chief" or message.get("role") == "assistant":
return clean_ai_output(message.get("content", ""))
return "فشل استخراج النص النهائي."
|