FECUOY commited on
Commit
df506af
·
verified ·
1 Parent(s): a8da7ed

Update app.py

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