Spaces:
Paused
Paused
import numpy as np | |
import streamlit as st | |
from transformers import AutoModelForCausalLM, AutoTokenizer | |
import torch | |
# التحقق من توفر GPU | |
device = "cuda" if torch.cuda.is_available() else "cpu" | |
def load_model(): | |
""" | |
تحميل النموذج والمُرمِّز مع التخزين المؤقت | |
""" | |
model = AutoModelForCausalLM.from_pretrained( | |
"joermd/speedy-llama2", | |
torch_dtype=torch.float16, | |
device_map=device | |
) | |
tokenizer = AutoTokenizer.from_pretrained("joermd/speedy-llama2") | |
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.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) | |
# تهيئة سجل المحادثة | |
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}) |