Spaces:
Sleeping
Sleeping
| 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 "فشل استخراج النص النهائي." | |