FECUOY commited on
Commit
ec7a35a
·
verified ·
1 Parent(s): ad61b1b

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +124 -0
app.py ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import autogen
3
+ from agents_config import create_agents
4
+ from utils import validate_hf_token, format_chat_history
5
+
6
+ def run_novel_completion(novel_text, hf_token, request: gr.Request):
7
+ """
8
+ الوظيفة الرئيسية التي تشغل Pipeline
9
+ """
10
+ # 1. التحقق من التوكن
11
+ if not hf_token:
12
+ # محاولة جلب التوكن من جلسة تسجيل الدخول (OAuth) إذا توفرت
13
+ if request and request.username:
14
+ # ملاحظة: الحصول على التوكن الفعلي من OAuth يتطلب إعدادات خاصة،
15
+ # هنا سنعتمد على الإدخال اليدوي أو التوكن الممرر لضمان العمل
16
+ pass
17
+ return "الرجاء تسجيل الدخول أو إدخال HF Token الخاص بك.", ""
18
+
19
+ is_valid, msg = validate_hf_token(hf_token)
20
+ if not is_valid:
21
+ return msg, ""
22
+
23
+ # 2. إنشاء الوكلاء
24
+ try:
25
+ agents = create_agents(hf_token)
26
+ except Exception as e:
27
+ return f"حدث خطأ أثناء إعداد الوكلاء: {str(e)}", ""
28
+
29
+ # 3. إعداد مجموعة الدردشة (GroupChat)
30
+ groupchat = autogen.GroupChat(
31
+ agents=[
32
+ agents["analyst"],
33
+ agents["architect"],
34
+ agents["style_guardian"],
35
+ agents["draft_writer"],
36
+ agents["humanizer"],
37
+ agents["psychologist"],
38
+ agents["continuity_guard"],
39
+ agents["critic"],
40
+ agents["editor"]
41
+ ],
42
+ messages=[],
43
+ max_round=12, # عدد جولات المحادثة
44
+ speaker_selection_method="auto" # أو يمكنك تحديد 'round_robin'
45
+ )
46
+
47
+ manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=agents["editor"].llm_config)
48
+
49
+ # 4. بدء العملية
50
+ # الرسالة الأولية التي يوجهها المستخدم (أنت) إلى المدير (Editor)
51
+ initial_message = f"""
52
+ إليك رواية غير مكتملة. أريد منك قيادة فريقك لإكمال الفصل التالي.
53
+
54
+ النص الأصلي:
55
+ "{novel_text}"
56
+
57
+ الخطوات المطلوبة:
58
+ 1. اطلب من Analyst تحليل النص.
59
+ 2. اطلب من Architect و Style Guardian التخطيط.
60
+ 3. دع Draft Writer يكتب المسودة.
61
+ 4. مررها لـ Psychologist و Humanizer و Continuity Guard للتحسين.
62
+ 5. اطلب من Critic المراجعة النهائية.
63
+ 6. قدم لي النص النهائي المكتمل.
64
+ """
65
+
66
+ # بدء المحادثة
67
+ try:
68
+ chat_result = agents["editor"].initiate_chat(
69
+ manager,
70
+ message=initial_message
71
+ )
72
+
73
+ # استخراج النتائج
74
+ full_history = format_chat_history(chat_result.chat_history)
75
+
76
+ # محاولة استخراج آخر رسالة كنص نهائي
77
+ final_text = chat_result.chat_history[-1]['content']
78
+
79
+ return full_history, final_text
80
+
81
+ except Exception as e:
82
+ return f"حدث خطأ أثناء المعالجة: {str(e)}\nتأكد من أن النماذج المختارة متاحة ولديها رصيد كافٍ.", ""
83
+
84
+ # --- واجهة المستخدم ---
85
+ with gr.Blocks(css="assets/custom.css", title="إكمال الروايات بالذكاء الاصطناعي") as demo:
86
+
87
+ gr.Markdown("# 🖋️ استوديو إكمال الروايات - AI Novel Studio")
88
+ gr.Markdown("منصة تعتمد على AutoGen ونخبة من النماذج لإكمال روايتك بأسلوبك الخاص.")
89
+
90
+ with gr.Row():
91
+ with gr.Column(scale=1):
92
+ hf_token_input = gr.Textbox(
93
+ label="Hugging Face Token (Write Access)",
94
+ type="password",
95
+ placeholder="hf_..."
96
+ )
97
+ gr.Markdown("*يتم استخدام التوكن الخاص بك فقط لاستدعاء النماذج ولن يتم تخزينه.*")
98
+
99
+ with gr.Column(scale=3):
100
+ novel_input = gr.Textbox(
101
+ label="النص غير المكتمل",
102
+ lines=10,
103
+ placeholder="الصق نص الرواية هنا..."
104
+ )
105
+ submit_btn = gr.Button("ابدأ البناء القصصي 🚀", variant="primary")
106
+
107
+ with gr.Row():
108
+ with gr.Column():
109
+ gr.Markdown("### 🧠 سجل تفكير الوكلاء (Agent Workspace)")
110
+ logs_output = gr.Markdown(label="سير العمل")
111
+
112
+ with gr.Column():
113
+ gr.Markdown("### 📖 النص النهائي (Final Draft)")
114
+ final_output = gr.TextArea(label="النتيجة", show_copy_button=True)
115
+
116
+ submit_btn.click(
117
+ fn=run_novel_completion,
118
+ inputs=[novel_input, hf_token_input],
119
+ outputs=[logs_output, final_output]
120
+ )
121
+
122
+ if __name__ == "__main__":
123
+ demo.launch()
124
+