FECUOY commited on
Commit
254e5b2
·
verified ·
1 Parent(s): 4186610

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -85
app.py CHANGED
@@ -1,91 +1,61 @@
1
- import gradio as gr
2
  import autogen
3
- import os
4
- from utils import process_uploaded_file, export_to_docx
5
- from agents_config import create_agents
6
 
7
- def run_novel_studio(uploaded_file, manual_text, oauth_token: gr.OAuthToken | None):
8
- # جلب التوكن تلقائياً من تسجيل الدخول أو من متغيرات البيئة
9
- user_token = oauth_token.token if oauth_token else os.getenv("HF_TOKEN")
10
-
11
- if not user_token:
12
- return "⚠️ يرجى تسجيل الدخول عبر Hugging Face أولاً للوصول إلى النماذج بصلاحياتك.", None
13
-
14
- file_content = ""
15
- if uploaded_file is not None:
16
- try:
17
- file_content = process_uploaded_file(uploaded_file)
18
- except Exception as e:
19
- return f"❌ خطأ في قراءة ملف docx: {str(e)}", None
20
-
21
- combined_context = f"{file_content}\n\n{manual_text}".strip()
22
-
23
- if len(combined_context) < 10:
24
- return "⚠️ المحتوى المقدم غير كافٍ. يرجى رفع ملف أو كتابة مسودة.", None
25
-
26
- try:
27
- # إنشاء فريق الوكلاء باستخدام التوكن الموثق
28
- agents_dict = create_agents(user_token)
29
-
30
- assistant_agents = [
31
- agents_dict["analyst"], agents_dict["style_guardian"],
32
- agents_dict["architect"], agents_dict["draft_writer"],
33
- agents_dict["humanizer"], agents_dict["continuity_guard"],
34
- agents_dict["psychologist"], agents_dict["critic"]
35
- ]
36
-
37
- groupchat = autogen.GroupChat(
38
- agents=assistant_agents,
39
- messages=[],
40
- max_round=15,
41
- speaker_selection_method="auto"
42
- )
43
-
44
- manager = autogen.GroupChatManager(
45
- groupchat=groupchat,
46
- llm_config=agents_dict["editor"].llm_config
47
  )
48
 
49
- init_message = f"المسودة المطلوبة للمعالجة:\n{combined_context}"
50
-
51
- chat_result = agents_dict["editor"].initiate_chat(
52
- manager,
53
- message=init_message
54
- )
55
-
56
- final_story_text = chat_result.chat_history[-1]['content']
57
- output_file_path = export_to_docx(final_story_text)
58
-
59
- return final_story_text, output_file_path
60
-
61
- except Exception as e:
62
- return f"❌ فشل النظام في المعالجة: {str(e)}", None
63
-
64
- # تصميم الواجهة مع دعم تسجيل الدخول
65
- with gr.Blocks(theme=gr.themes.Soft(), title="Ling-1T Novel Studio") as demo:
66
- with gr.Sidebar():
67
- gr.Markdown("# 🔐 الوصول")
68
- gr.LoginButton() # إضافة زر تسجيل الدخول لحل مشكلة الـ 403
69
-
70
- gr.Markdown("---")
71
- gr.Markdown("### 🛠️ المدخلات")
72
- file_upload = gr.File(label="ارفع مسودة (.docx, .txt)", file_types=[".docx", ".txt"])
73
- text_area = gr.Textbox(label="تعليمات إضافية", lines=6)
74
- submit_btn = gr.Button("🚀 إطلاق فريق العمل", variant="primary")
75
-
76
- with gr.Column():
77
- gr.HTML("<h1 style='text-align:center;'>🖋️ Ling-1T Novel Studio</h1>")
78
- output_markdown = gr.Markdown(value="ستظهر النتائج هنا بعد تسجيل الدخول وبدء المعالجة...")
79
- download_btn = gr.File(label="تحميل المخطوطة (.docx)")
80
-
81
- # ربط الأحداث مع إرسال oauth_token تلقائياً
82
- submit_btn.click(
83
- fn=run_novel_studio,
84
- inputs=[file_upload, text_area],
85
- outputs=[output_markdown, download_btn],
86
- api_name=False
87
  )
88
 
89
- if __name__ == "__main__":
90
- demo.launch()
91
-
 
 
1
  import autogen
 
 
 
2
 
3
+ # النماذج التي أكدت فعاليتها - تم إزالة الملحقات اليدوية لضمان توافق الراوتر
4
+ MODEL_MAP = {
5
+ "Analyst": "Qwen/Qwen3-Next-80B-A3B-Instruct",
6
+ "StyleGuardian": "openai/gpt-oss-120b",
7
+ "Architect": "deepseek-ai/DeepSeek-V3.2-Exp",
8
+ "DraftWriter": "deepcogito/cogito-v2-preview-llama-405B",
9
+ "Humanizer": "deepcogito/cogito-671b-v2.1",
10
+ "ContinuityGuard": "meta-llama/Llama-3.3-70B-Instruct",
11
+ "Psychologist": "zai-org/GLM-4.7-FP8",
12
+ "Critic": "Qwen/Qwen3-235B-A22B-Thinking-2507",
13
+ "Editor": "inclusionAI/Ling-1T"
14
+ }
15
+
16
+ def get_llm_config(model_id, user_token):
17
+ return {
18
+ "config_list": [
19
+ {
20
+ "model": model_id,
21
+ "api_key": user_token,
22
+ "base_url": "https://router.huggingface.co/v1",
23
+ "api_type": "openai",
24
+ }
25
+ ],
26
+ "temperature": 0.7,
27
+ "cache_seed": None,
28
+ }
29
+
30
+ def create_agents(user_token):
31
+ # إنشاء الوكلاء المساعدين
32
+ def mk_asst(name, msg, model_key):
33
+ return autogen.AssistantAgent(
34
+ name=name,
35
+ system_message=msg,
36
+ llm_config=get_llm_config(MODEL_MAP[model_key], user_token)
 
 
 
 
 
 
37
  )
38
 
39
+ agents = {
40
+ "analyst": mk_asst("Analyst", "أنت المحلل البنيوي والمفكك لأفكار الرواية.", "Analyst"),
41
+ "style_guardian": mk_asst("Style_Guardian", "أنت المسؤول عن النبرة والجمالية اللغوية.", "StyleGuardian"),
42
+ "architect": mk_asst("Architect", "أنت مهندس الحبكة وباني التسلسل الدرامي.", "Architect"),
43
+ "draft_writer": mk_asst("Draft_Writer", "أنت كاتب المسودة الأدبية بأسلوب روائي.", "DraftWriter"),
44
+ "humanizer": mk_asst("Humanizer", "أنت من يبث الروح والمشاعر في الحوارات والشخصيات.", "Humanizer"),
45
+ "continuity_guard": mk_asst("Continuity_Guard", "أنت مراقب المنطق ومنع التناقضات.", "ContinuityGuard"),
46
+ "psychologist": mk_asst("Psychologist", "أنت محلل الأعماق النفسية للشخصيات.", "Psychologist"),
47
+ "critic": mk_asst("Critic", "أنت الناقد الذي يراجع الجودة النهائية.", "Critic"),
48
+ }
49
+
50
+ # رئيس التحرير (Editor) - تم ضبطه للعمل التلقائي التام
51
+ agents["editor"] = autogen.UserProxyAgent(
52
+ name="Editor_In_Chief",
53
+ human_input_mode="NEVER", # منع التوقف لانتظار إدخال يدوي
54
+ max_consecutive_auto_reply=15,
55
+ code_execution_config=False,
56
+ llm_config=get_llm_config(MODEL_MAP["Editor"], user_token),
57
+ system_message="""أنت رئيس التحرير. مهمتك هي استلام الأفكار، الإشراف على نقاش الوكلاء،
58
+ ثم تقديم النص الروائي النهائي في قالب منسق يحتوي على: العنوان، رقم الفصل، والمحتوى السردي."""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  )
60
 
61
+ return agents