pharma / src /streamlit_app.py
abdelslam-ai's picture
Update src/streamlit_app.py
bb2553c verified
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("""
<style>
.stChatFloatingInputContainer { bottom: 20px; }
.stButton>button { width: 100%; border-radius: 20px; background-color: #007bff; color: white; }
</style>
""", 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("<div style='text-align: center'>تم البرمجة 'بعقل هادي' بواسطة عبس</div>", unsafe_allow_html=True)