Genisi-1 / app.py
AnesKAM's picture
Update app.py
83af477 verified
import streamlit as st
from openai import OpenAI
import time
# إعداد الصفحة
st.set_page_config(
page_title="مساعد DeepSeek R1",
page_icon="🤖",
layout="centered"
)
# العنوان الرئيسي
st.title("🤖 مساعد DeepSeek R1")
st.markdown("---")
# إدخال مفتاح API (الأفضل إدخاله يدويًا أو عبر secrets)
with st.sidebar:
st.header("⚙️ الإعدادات")
api_key = st.text_input(
"مفتاح API الخاص بك",
type="password",
value="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", # ضع مفتاحك هنا
help="يمكنك تغييره أو تركه كما هو"
)
st.markdown("---")
st.markdown("### 📝 معلومات")
st.markdown("هذا التطبيق يستخدم نموذج **DeepSeek-R1** عبر NVIDIA NIM.")
st.markdown("السرعة: 40 طلب/دقيقة كحد أقصى")
# التحقق من وجود المفتاح
if not api_key or api_key == "":
st.warning("⚠️ الرجاء إدخال مفتاح API في الشريط الجانبي")
st.stop()
# تهيئة العميل
@st.cache_resource
def get_client():
return OpenAI(
base_url="https://integrate.api.nvidia.com/v1",
api_key=api_key
)
client = get_client()
# تهيئة تاريخ المحادثة
if "messages" not in st.session_state:
st.session_state.messages = [
{"role": "system", "content": "أنت مساعد ذكي ومفيد. أجب باللغة العربية."}
]
# عرض المحادثة السابقة
for message in st.session_state.messages:
if message["role"] != "system": # لا نظهر رسالة النظام
with st.chat_message(message["role"]):
st.markdown(message["content"])
# مربع إدخال الرسالة
if prompt := st.chat_input("اكتب سؤالك هنا..."):
# إضافة رسالة المستخدم
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
# إعداد رسالة المساعد
with st.chat_message("assistant"):
message_placeholder = st.empty()
full_response = ""
try:
# إظهار مؤشر التحميل
with st.spinner("جارٍ التفكير..."):
# استدعاء API
completion = client.chat.completions.create(
model="deepseek-ai/deepseek-r1",
messages=st.session_state.messages,
temperature=0.6,
stream=True
)
# معالجة الـ streaming
for chunk in completion:
if chunk.choices[0].delta.content:
full_response += chunk.choices[0].delta.content
message_placeholder.markdown(full_response + "▌")
time.sleep(0.01) # تأثير كتابة لطيف
message_placeholder.markdown(full_response)
except Exception as e:
st.error(f"حدث خطأ: {str(e)}")
full_response = f"⚠️ خطأ في الاتصال: {str(e)}"
message_placeholder.markdown(full_response)
# حفظ الرد
st.session_state.messages.append({"role": "assistant", "content": full_response})
# زر مسح المحادثة
if st.sidebar.button("🗑️ مسح المحادثة"):
st.session_state.messages = [
{"role": "system", "content": "أنت مساعد ذكي ومفيد. أجب باللغة العربية."}
]
st.rerun()