FECUOY's picture
Update app.py
4d84df7 verified
import gradio as gr
# تأكد أن المكتبة تسمى pyautogen في requirements ولكن تُستدعى كـ autogen
import autogen
from agents_config import create_agents
from utils import validate_hf_token, format_chat_history
def run_novel_completion(novel_text, hf_token, request: gr.Request):
"""
الوظيفة الرئيسية التي تشغل Pipeline
"""
# 1. التحقق من التوكن
if not hf_token:
# محاولة جلب التوكن من جلسة تسجيل الدخول (OAuth) إذا توفرت
if request and request.username:
# ملاحظة: الحصول على التوكن الفعلي من OAuth يتطلب إعدادات خاصة،
# هنا سنعتمد على الإدخال اليدوي أو التوكن الممرر لضمان العمل
pass
return "الرجاء تسجيل الدخول أو إدخال HF Token الخاص بك.", ""
is_valid, msg = validate_hf_token(hf_token)
if not is_valid:
return msg, ""
# 2. إنشاء الوكلاء
try:
agents = create_agents(hf_token)
except Exception as e:
return f"حدث خطأ أثناء إعداد الوكلاء: {str(e)}", ""
# 3. إعداد مجموعة الدردشة (GroupChat)
groupchat = autogen.GroupChat(
agents=[
agents["analyst"],
agents["architect"],
agents["style_guardian"],
agents["draft_writer"],
agents["humanizer"],
agents["psychologist"],
agents["continuity_guard"],
agents["critic"],
agents["editor"]
],
messages=[],
max_round=12, # عدد جولات المحادثة
speaker_selection_method="auto" # أو يمكنك تحديد 'round_robin'
)
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=agents["editor"].llm_config)
# 4. بدء العملية
# الرسالة الأولية التي يوجهها المستخدم (أنت) إلى المدير (Editor)
initial_message = f"""
إليك رواية غير مكتملة. أريد منك قيادة فريقك لإكمال الفصل التالي.
النص الأصلي:
"{novel_text}"
الخطوات المطلوبة:
1. اطلب من Analyst تحليل النص.
2. اطلب من Architect و Style Guardian التخطيط.
3. دع Draft Writer يكتب المسودة.
4. مررها لـ Psychologist و Humanizer و Continuity Guard للتحسين.
5. اطلب من Critic المراجعة النهائية.
6. قدم لي النص النهائي المكتمل.
"""
# بدء المحادثة
try:
chat_result = agents["editor"].initiate_chat(
manager,
message=initial_message
)
# استخراج النتائج
full_history = format_chat_history(chat_result.chat_history)
# محاولة استخراج آخر رسالة كنص نهائي
final_text = chat_result.chat_history[-1]['content']
return full_history, final_text
except Exception as e:
return f"حدث خطأ أثناء المعالجة: {str(e)}\nتأكد من أن النماذج المختارة متاحة ولديها رصيد كافٍ.", ""
# --- واجهة المستخدم ---
with gr.Blocks(css="assets/custom.css", title="إكمال الروايات بالذكاء الاصطناعي") as demo:
gr.Markdown("# 🖋️ استوديو إكمال الروايات - AI Novel Studio")
gr.Markdown("منصة تعتمد على AutoGen ونخبة من النماذج لإكمال روايتك بأسلوبك الخاص.")
with gr.Row():
with gr.Column(scale=1):
hf_token_input = gr.Textbox(
label="Hugging Face Token (Write Access)",
type="password",
placeholder="hf_..."
)
gr.Markdown("*يتم استخدام التوكن الخاص بك فقط لاستدعاء النماذج ولن يتم تخزينه.*")
with gr.Column(scale=3):
novel_input = gr.Textbox(
label="النص غير المكتمل",
lines=10,
placeholder="الصق نص الرواية هنا..."
)
submit_btn = gr.Button("ابدأ البناء القصصي 🚀", variant="primary")
with gr.Row():
with gr.Column():
gr.Markdown("### 🧠 سجل تفكير الوكلاء (Agent Workspace)")
logs_output = gr.Markdown(label="سير العمل")
with gr.Column():
gr.Markdown("### 📖 النص النهائي (Final Draft)")
final_output = gr.TextArea(label="النتيجة", show_copy_button=True)
submit_btn.click(
fn=run_novel_completion,
inputs=[novel_input, hf_token_input],
outputs=[logs_output, final_output]
)
if __name__ == "__main__":
demo.launch()