import streamlit as st from zhipuai import ZhipuAI import os import fitz # PyMuPDF from fpdf import FPDF from io import BytesIO # --- 1. إعدادات الهوية البصرية (براند عبس) --- st.set_page_config(page_title="ABS AI | بعقل هادي", page_icon="🤖", layout="wide") st.markdown(""" """, unsafe_allow_html=True) st.title("🤖 مشروع ABS AI | الذكاء المتكامل") st.caption("تطوير: عبدالسلام (عبس) - محتوى يقتل عوائق النجاح") # --- 2. سحب المفتاح وتجهيز الـ Client --- api_key = os.getenv("ZHIPUAI_API_KEY") if api_key: client = ZhipuAI(api_key=api_key) # --- 3. القائمة الجانبية لرفع الملفات --- with st.sidebar: st.header("📂 مستودع الملفات") uploaded_file = st.file_uploader("ارفع ملف PDF لمحورته", type=['pdf']) file_context = "" if uploaded_file: with st.spinner("جاري قراءة الملف وتحليله..."): doc = fitz.open(stream=uploaded_file.read(), filetype="pdf") file_context = "".join([page.get_text() for page in doc]) st.success("✅ الملف جاهز في الذاكرة!") st.write("---") if st.button("🗑️ مسح ذاكرة الشات"): st.session_state.messages = [] st.rerun() # --- 4. نظام الشات والذاكرة السحابية --- if "messages" not in st.session_state: st.session_state.messages = [] # عرض التاريخ القديم للمحادثة for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"]) # استقبال سؤال "عبس" الجديد if prompt := st.chat_input("اسألني أي حاجة يا وحش..."): # عرض سؤال المستخدم with st.chat_message("user"): st.markdown(prompt) st.session_state.messages.append({"role": "user", "content": prompt}) # رد الـ AI with st.chat_message("assistant"): with st.spinner("بيفكر بعقل هادي..."): try: # تجهيز الـ Prompt (دمج الملف لو موجود) user_content = prompt if file_context: user_content = f"سياق الملف المرفوع: {file_context[:8000]}\n\nسؤال المستخدم: {prompt}" response = client.chat.completions.create( model="glm-4", messages=[ {"role": "system", "content": "أنت مساعد ذكي بلهجة مصرية عامية مهذبة. أنت عبارة عن AI خاص بـ 'عبس' صاحب قناة 'بعقل هادي'. ردودك قوية، أخوية، وبسلطة معرفية."}, {"role": "user", "content": user_content} ], timeout=60 ) answer = response.choices[0].message.content st.markdown(answer) # --- 5. صناعة الـ PDF للرد الحالي --- pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) # تنظيف النص للتحويل لـ PDF clean_text = answer.encode('latin-1', 'ignore').decode('latin-1') pdf.multi_cell(0, 10, txt=clean_text) # التحويل لـ bytes لستريم لايت pdf_output = bytes(pdf.output(dest='S')) st.download_button( label="⬇️ تحميل الرد كـ PDF", data=pdf_output, file_name="ABS_Response.pdf", mime="application/pdf" ) st.session_state.messages.append({"role": "assistant", "content": answer}) except Exception as e: st.error(f"يا عبس حصلت مشكلة في الاتصال: {e}") else: st.error("⚠️ يا بطل، المفتاح (ZHIPUAI_API_KEY) مش موجود في الـ Secrets. ضيفه عشان المكنة تطلع قماش!") st.markdown("---") st.markdown("
تم البرمجة 'بعقل هادي' بواسطة عبس
", unsafe_allow_html=True)