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()