Spaces:
Paused
Paused
File size: 3,956 Bytes
7e0b3c1 ccccb88 4b8d1fe 7e0b3c1 a3d234b ccccb88 a3d234b 7e0b3c1 a3d234b 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 |
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"
@st.cache_resource
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}) |