import gradio as gr import autogen import os from utils import process_uploaded_file, export_to_docx from agents_config import create_agents def run_novel_studio(uploaded_file, manual_text, user_token): """ الدالة الرئيسية التي تدير تدفق العمل من الرفع إلى التصدير. """ if not user_token or not user_token.startswith("hf_"): return "⚠️ يرجى إدخال Hugging Face Token صحيح (يبدأ بـ hf_).", None # 1. معالجة المدخلات (الملف المرفوع + النص اليدوي) file_content = "" if uploaded_file is not None: try: file_content = process_uploaded_file(uploaded_file) except Exception as e: return f"❌ خطأ في قراءة ملف docx: {str(e)}", None # دمج المحتوى مع الحفاظ على الأسطر combined_context = f"{file_content}\n\n{manual_text}".strip() if len(combined_context) < 10: return "⚠️ المحتوى المقدم غير كافٍ. يرجى رفع ملف أو كتابة مسودة.", None try: # 2. إنشاء فريق الوكلاء الـ 9 agents_dict = create_agents(user_token) # 3. إعداد غرفة النقاش (Group Chat) # الوكلاء المساعدون (بدون المدير ورئيس التحرير) assistant_agents = [ agents_dict["analyst"], agents_dict["style_guardian"], agents_dict["architect"], agents_dict["draft_writer"], agents_dict["humanizer"], agents_dict["continuity_guard"], agents_dict["psychologist"], agents_dict["critic"] ] groupchat = autogen.GroupChat( agents=assistant_agents, messages=[], max_round=12, speaker_selection_method="auto" ) manager = autogen.GroupChatManager( groupchat=groupchat, llm_config=agents_dict["editor"].llm_config ) # 4. إطلاق المهمة بقيادة Ling-1T init_message = f"""بصفتي رئيس التحرير، أضع بين أيديكم هذه المسودة. المطلوب: تحليلها، إكمال أحداث الفصل التالي، وتنسيقها أدبياً بشكل احترافي. المسودة: {combined_context}""" chat_result = agents_dict["editor"].initiate_chat( manager, message=init_message ) # 5. استخراج النص النهائي من Ling-1T وتوليد ملف DOCX # نبحث عن آخر رسالة تحتوي على النص المدمج final_story_text = chat_result.chat_history[-1]['content'] # توليد الملف باستخدام دالة utils المحدثة output_file_path = export_to_docx(final_story_text) return final_story_text, output_file_path except Exception as e: return f"❌ فشل النظام في المعالجة: {str(e)}", None # تصميم واجهة المستخدم (تنسيق احترافي وهادئ) with gr.Blocks(theme=gr.themes.Soft(), title="Ling-1T Novel Studio") as demo: gr.HTML("""
نظام ذكاء اصطناعي متعدد الوكلاء لإنتاج وتنسيق الروايات العربية