File size: 3,778 Bytes
9b3b874
 
f25bb93
11368e1
 
 
 
 
 
 
 
 
 
 
 
 
f25bb93
11368e1
f25bb93
 
 
 
 
 
 
 
11368e1
f25bb93
11368e1
 
 
f25bb93
 
 
 
11368e1
 
f25bb93
11368e1
a11de4b
 
11368e1
f25bb93
 
 
 
 
 
 
 
11368e1
 
f25bb93
 
11368e1
 
f25bb93
11368e1
 
 
f25bb93
 
 
2cd4955
f25bb93
11368e1
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
import autogen

# خريطة النماذج المباشرة الموزعة على الوكلاء
MODEL_MAP = {
    "Analyst": "Qwen/Qwen3-Next-80B-A3B-Instruct",
    "StyleGuardian": "openai/gpt-oss-120b", 
    "Architect": "deepseek-ai/DeepSeek-V3.2-Exp",
    "DraftWriter": "deepcogito/cogito-v2-preview-llama-405B",
    "Humanizer": "deepcogito/cogito-671b-v2.1",
    "ContinuityGuard": "meta-llama/Llama-3.3-70B-Instruct",
    "Psychologist": "zai-org/GLM-4.7-FP8",
    "Critic": "Qwen/Qwen3-235B-A22B-Thinking-2507",
    "Editor": "inclusionAI/Ling-1T"
}

def get_llm_config(model_id, user_token):
    """إنشاء إعدادات الاتصال بالنموذج عبر راوتر Hugging Face"""
    return {
        "config_list": [
            {
                "model": model_id,
                "api_key": user_token,
                "base_url": "https://router.huggingface.co/v1",
                "api_type": "openai",
            }
        ],
        "temperature": 0.7,
        "cache_seed": None, # لضمان نتائج متجددة دائماً
    }

def create_agents(user_token):
    """توليد فريق الوكلاء وتوزيع المهام عليهم"""
    
    # وظيفة داخلية لتبسيط إنشاء الوكلاء المساعدين
    def mk_asst(name, sys_msg, model_key):
        return autogen.AssistantAgent(
            name=name,
            system_message=sys_msg,
            llm_config=get_llm_config(MODEL_MAP[model_key], user_token)
        )

    agents = {
        "analyst": mk_asst("Analyst", "أنت المحلل البنيوي للنص، فكك الأفكار وحدد الروابط العمقية.", "Analyst"),
        "style_guardian": mk_asst("Style_Guardian", "أنت حارس الأسلوب الأدبي، تأكد من جودة اللغة والجماليات السردية.", "StyleGuardian"),
        "architect": mk_asst("Architect", "أنت مهندس الحبكة، قم ببناء تسلسل أحداث متماسك ومشوق.", "Architect"),
        "draft_writer": mk_asst("Draft_Writer", "أنت كاتب المسودة الأولية، حول الأفكار إلى نص سردي روائي.", "DraftWriter"),
        "humanizer": mk_asst("Humanizer", "أنت خبير الأنسنة، بث المشاعر في الشخصيات واجعل الحوارات نابضة بالحياة.", "Humanizer"),
        "continuity_guard": mk_asst("Continuity_Guard", "أنت مراقب الاستمرارية، امنع التناقضات في الأحداث أو صفات الشخصيات.", "ContinuityGuard"),
        "psychologist": mk_asst("Psychologist", "أنت محلل الدوافع النفسية، اجعل تصرفات الشخصيات مبررة نفسياً.", "Psychologist"),
        "critic": mk_asst("Critic", "أنت الناقد الأدبي، راجع النص النهائي وقدم ملاحظات قاسية للتحسين.", "Critic"),
    }

    # رئيس التحرير: المسؤول عن الإدارة والصياغة النهائية
    # تم ضبط human_input_mode إلى NEVER لضمان العمل التلقائي في بيئة الويب
    agents["editor"] = autogen.UserProxyAgent(
        name="Editor_In_Chief",
        human_input_mode="NEVER", 
        max_consecutive_auto_reply=10,
        code_execution_config=False,
        llm_config=get_llm_config(MODEL_MAP["Editor"], user_token),
        system_message="""أنت رئيس التحرير (Ling-1T). 
        مهمتك هي قيادة نقاش الوكلاء ودمج مخرجاتهم لصياغة الفصل الروائي النهائي بأسلوب أدبي رفيع.
        يجب أن تنتهي المحادثة دائماً بالنص الكامل للمخطوطة."""
    )

    return agents