Spaces:
Paused
Paused
File size: 4,598 Bytes
7e0b3c1 ccccb88 5114a9c ccccb88 5114a9c ccccb88 5114a9c ccccb88 5114a9c ccccb88 4b8d1fe 7e0b3c1 a3d234b ccccb88 a3d234b 7e0b3c1 a3d234b ccccb88 5114a9c ccccb88 5114a9c ccccb88 7e0b3c1 4b8d1fe ccccb88 7e0b3c1 4b8d1fe ccccb88 7e0b3c1 4b8d1fe ccccb88 7e0b3c1 a3d234b ccccb88 a3d234b ccccb88 a3d234b ccccb88 a3d234b ccccb88 a3d234b ccccb88 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
import numpy as np
import streamlit as st
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
from accelerate import init_empty_weights
# التحقق من توفر GPU
device = "cuda" if torch.cuda.is_available() else "cpu"
@st.cache_resource
def load_model():
"""
تحميل النموذج والمُرمِّز مع التخزين المؤقت
"""
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
# تحميل النموذج مع إعدادات الذاكرة المنخفضة
model = AutoModelForCausalLM.from_pretrained(
"mistralai/Mistral-7B-Instruct-v0.2",
torch_dtype=torch.float16,
low_cpu_mem_usage=True,
device_map="auto"
)
return model, tokenizer
# الصور العشوائية للكلاب عند حدوث خطأ
random_dog = [
"0f476473-2d8b-415e-b944-483768418a95.jpg",
"1bd75c81-f1d7-4e55-9310-a27595fa8762.jpg",
"526590d2-8817-4ff0-8c62-fdcba5306d02.jpg",
"1326984c-39b0-492c-a773-f120d747a7e2.jpg",
"42a98d03-5ed7-4b3b-af89-7c4376cb14c3.jpg"
]
def reset_conversation():
'''
إعادة تعيين المحادثة
'''
st.session_state.conversation = []
st.session_state.messages = []
return None
def generate_response(prompt, temperature, max_length):
"""
توليد استجابة من النموذج
"""
try:
inputs = tokenizer.encode(prompt, return_tensors="pt").to(device)
with torch.no_grad():
outputs = model.generate(
inputs,
max_length=max_length,
temperature=temperature,
do_sample=True,
pad_token_id=tokenizer.eos_token_id
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response
except Exception as e:
return str(e)
# تحميل النموذج والمُرمِّز
try:
with st.spinner('جاري تحميل النموذج... قد يستغرق هذا بضع دقائق...'):
model, tokenizer = load_model()
except Exception as e:
st.error(f"حدث خطأ أثناء تحميل النموذج: {str(e)}")
st.error("تأكد من تثبيت جميع المكتبات المطلوبة:")
st.code("""
pip install -U accelerate>=0.26.0
pip install transformers
pip install torch
pip install streamlit
""")
st.stop()
# إعداد واجهة Streamlit
st.subheader('Mistral Chat')
# إضافة أزرار التحكم في الشريط الجانبي
temp_values = st.sidebar.slider('اختر قيمة درجة الحرارة', 0.0, 1.0, 0.5)
max_token_value = st.sidebar.slider('اختر الحد الأقصى للرموز', 100, 2000, 500)
st.sidebar.button('إعادة تعيين المحادثة', on_click=reset_conversation)
# معلومات حول النموذج
st.sidebar.markdown("""
### معلومات النظام
- النموذج: Mistral-7B-Instruct-v0.2
- الجهاز: GPU متوفر ✅ """ if torch.cuda.is_available() else "CPU ⚠️")
# تهيئة سجل المحادثة
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})
# عرض رد المساعد
with st.chat_message("assistant"):
try:
# توليد الرد
with st.spinner('جاري التفكير...'):
response = generate_response(
prompt,
temperature=temp_values,
max_length=max_token_value
)
st.write(response)
except Exception as e:
response = "😵💫 يبدو أن هناك خطأ ما!\n حاول مرة أخرى لاحقاً.\n\n إليك صورة عشوائية لكلب 🐶:"
st.write(response)
random_dog_pick = 'https://random.dog/' + random_dog[np.random.randint(len(random_dog))]
st.image(random_dog_pick)
st.write("رسالة الخطأ:")
st.write(e)
st.session_state.messages.append({"role": "assistant", "content": response}) |