""" وحدة نماذج الذكاء الاصطناعي المتكاملة """ import streamlit as st import pandas as pd import random from datetime import datetime import time class AIModelsApp: """ وحدة نماذج الذكاء الاصطناعي المتكاملة للنظام """ def __init__(self): """ تهيئة وحدة نماذج الذكاء الاصطناعي """ # تهيئة حالة الجلسة الخاصة بنماذج الذكاء الاصطناعي إذا لم تكن موجودة if 'ai_models' not in st.session_state: # إنشاء بيانات تجريبية لنماذج الذكاء الاصطناعي st.session_state.ai_models = self._generate_sample_models() if 'api_keys' not in st.session_state: # إنشاء بيانات تجريبية لمفاتيح API st.session_state.api_keys = { 'openai': 'sk-**************************', 'huggingface': 'hf_**************************', 'azure': 'az_**************************', 'local': 'local_key_not_required' } if 'model_usage' not in st.session_state: # إنشاء بيانات تجريبية لاستخدام النماذج st.session_state.model_usage = self._generate_sample_usage() def run(self): """ تشغيل وحدة نماذج الذكاء الاصطناعي """ st.markdown("

وحدة نماذج الذكاء الاصطناعي

", unsafe_allow_html=True) # إنشاء تبويبات لنماذج الذكاء الاصطناعي المختلفة tabs = st.tabs(["النماذج المتاحة", "استخدام النماذج", "إدارة API", "سجل الاستخدام"]) with tabs[0]: self._render_available_models() with tabs[1]: self._render_model_usage() with tabs[2]: self._render_api_management() with tabs[3]: self._render_usage_history() def _render_available_models(self): """ عرض النماذج المتاحة """ st.markdown("### النماذج المتاحة") st.markdown("عرض نماذج الذكاء الاصطناعي المتاحة للاستخدام في النظام") # فلترة النماذج col1, col2 = st.columns(2) with col1: filter_type = st.multiselect( "نوع النموذج", options=["الكل", "تحليل نصوص", "استخراج بيانات", "تصنيف مستندات", "تلخيص", "ترجمة", "تنبؤ"], default=["الكل"] ) with col2: filter_provider = st.multiselect( "مزود الخدمة", options=["الكل", "OpenAI", "HuggingFace", "Azure", "محلي"], default=["الكل"] ) # تطبيق التصفية filtered_models = st.session_state.ai_models if "الكل" not in filter_type: filtered_models = [m for m in filtered_models if m['type'] in filter_type] if "الكل" not in filter_provider: filtered_models = [m for m in filtered_models if m['provider'] in filter_provider] # عرض النماذج if filtered_models: # تقسيم النماذج إلى صفوف for i in range(0, len(filtered_models), 3): cols = st.columns(3) for j in range(3): if i + j < len(filtered_models): model = filtered_models[i + j] with cols[j]: st.markdown(f"""

{model['name']}

النوع: {model['type']}

المزود: {model['provider']}

الإصدار: {model['version']}

الحالة: {model['status']}

{model['description']}

""", unsafe_allow_html=True) else: st.info("لا توجد نماذج تطابق معايير التصفية", icon="ℹ️") def _render_model_usage(self): """ عرض واجهة استخدام النماذج """ st.markdown("### استخدام نماذج الذكاء الاصطناعي") st.markdown("استخدام نماذج الذكاء الاصطناعي لمعالجة البيانات والمستندات") # اختيار النموذج model_names = [m['name'] for m in st.session_state.ai_models if m['status'] == 'متاح'] selected_model = st.selectbox("اختر النموذج", options=model_names, key="selected_model") # الحصول على معلومات النموذج المحدد model_info = next((m for m in st.session_state.ai_models if m['name'] == selected_model), None) if model_info: st.markdown(f"""

{model_info['name']}

النوع: {model_info['type']}

المزود: {model_info['provider']}

الوصف: {model_info['description']}

""", unsafe_allow_html=True) # واجهة الاستخدام حسب نوع النموذج if model_info['type'] in ["تحليل نصوص", "تلخيص", "ترجمة"]: self._render_text_model_interface(model_info) elif model_info['type'] in ["استخراج بيانات", "تصنيف مستندات"]: self._render_document_model_interface(model_info) elif model_info['type'] == "تنبؤ": self._render_prediction_model_interface(model_info) def _render_text_model_interface(self, model_info): """ عرض واجهة استخدام نماذج النصوص """ # إدخال النص input_text = st.text_area( "أدخل النص", height=150, placeholder="أدخل النص للمعالجة...", key="model_input_text" ) # خيارات النموذج st.markdown("#### خيارات النموذج") col1, col2, col3 = st.columns(3) with col1: temperature = st.slider("درجة الإبداعية", 0.0, 1.0, 0.7, 0.1, key="temperature") with col2: max_tokens = st.slider("الحد الأقصى للكلمات", 100, 2000, 500, 100, key="max_tokens") with col3: if model_info['type'] == "ترجمة": target_lang = st.selectbox( "اللغة الهدف", options=["الإنجليزية", "العربية", "الفرنسية", "الإسبانية", "الألمانية"], key="target_lang" ) # زر المعالجة if st.button("معالجة النص", key="process_text_btn"): if input_text: # محاكاة عملية المعالجة with st.spinner("جاري معالجة النص..."): # محاكاة وقت المعالجة time.sleep(2) # إنشاء نص ناتج تجريبي if model_info['type'] == "تحليل نصوص": output_text = f"تحليل النص:\n\n1. يحتوي النص على {len(input_text.split())} كلمة.\n2. الموضوع الرئيسي: مناقصات ومشاريع.\n3. المشاعر: محايدة.\n4. الكلمات المفتاحية: مشروع، مناقصة، تحليل، تسعير." elif model_info['type'] == "تلخيص": output_text = f"ملخص النص:\n\n{input_text.split('.')[0]}. " + "هذا ملخص تجريبي للنص المدخل يحتوي على أهم النقاط والمعلومات." elif model_info['type'] == "ترجمة": output_text = f"الترجمة إلى {target_lang}:\n\n" + "This is a sample translation of the input text. It contains the main points and information." # عرض النتيجة st.markdown("#### نتيجة المعالجة") st.text_area("النص الناتج", value=output_text, height=150, key="model_output_text") # إضافة الاستخدام إلى السجل self._add_usage_to_history(model_info['name'], model_info['type'], len(input_text.split())) else: st.warning("يرجى إدخال نص للمعالجة", icon="⚠️") def _render_document_model_interface(self, model_info): """ عرض واجهة استخدام نماذج المستندات """ # رفع المستند uploaded_file = st.file_uploader( "اختر مستنداً للمعالجة", type=["pdf", "docx", "txt"], key="model_doc_upload" ) # خيارات النموذج st.markdown("#### خيارات النموذج") col1, col2 = st.columns(2) with col1: if model_info['type'] == "استخراج بيانات": extraction_type = st.multiselect( "نوع البيانات المستخرجة", options=["جداول الكميات", "الأسعار", "المواصفات الفنية", "الشروط التعاقدية", "المعلومات العامة"], default=["جداول الكميات", "الأسعار"], key="extraction_type" ) elif model_info['type'] == "تصنيف مستندات": classification_type = st.selectbox( "نوع التصنيف", options=["نوع المستند", "مجال المشروع", "مستوى المخاطر"], key="classification_type" ) with col2: confidence_threshold = st.slider("حد الثقة", 0.0, 1.0, 0.7, 0.1, key="confidence_threshold") # زر المعالجة if st.button("معالجة المستند", key="process_doc_btn"): if uploaded_file is not None: # محاكاة عملية المعالجة with st.spinner("جاري معالجة المستند..."): # محاكاة وقت المعالجة time.sleep(3) st.success("تمت معالجة المستند بنجاح!", icon="✅") # عرض النتائج حسب نوع النموذج if model_info['type'] == "استخراج بيانات": st.markdown("#### البيانات المستخرجة") # عرض بيانات تجريبية للجداول المستخرجة if "جداول الكميات" in extraction_type: st.markdown("##### جدول الكميات") # إنشاء بيانات تجريبية quantities_data = [] for i in range(5): quantities_data.append({ "البند": f"بند {i+1}", "الوصف": f"وصف البند {i+1}", "الوحدة": random.choice(["متر", "متر مربع", "متر مكعب", "طن", "قطعة"]), "الكمية": random.randint(10, 1000), "السعر الوحدة": random.randint(100, 5000), "الإجمالي": 0 }) quantities_data[i]["الإجمالي"] = quantities_data[i]["الكمية"] * quantities_data[i]["السعر الوحدة"] # عرض الجدول quantities_df = pd.DataFrame(quantities_data) st.dataframe(quantities_df, use_container_width=True) if "الأسعار" in extraction_type: st.markdown("##### ملخص الأسعار") # إنشاء بيانات تجريبية price_summary = { "إجمالي قيمة المشروع": f"{random.randint(1000000, 10000000)} ريال", "مدة التنفيذ": f"{random.randint(6, 36)} شهر", "قيمة الدفعة المقدمة": f"{random.randint(10, 30)}%", "غرامة التأخير": f"{random.randint(1, 10)}% (بحد أقصى 10% من قيمة العقد)" } # عرض الملخص for key, value in price_summary.items(): st.markdown(f"**{key}:** {value}") elif model_info['type'] == "تصنيف مستندات": st.markdown("#### نتائج التصنيف") if classification_type == "نوع المستند": # إنشاء بيانات تجريبية doc_types = [ {"نوع المستند": "كراسة شروط", "نسبة الثقة": 0.92}, {"نوع المستند": "عقد", "نسبة الثقة": 0.05}, {"نوع المستند": "مواصفات فنية", "نسبة الثقة": 0.02}, {"نوع المستند": "جدول كميات", "نسبة الثقة": 0.01} ] # عرض النتائج doc_types_df = pd.DataFrame(doc_types) st.dataframe(doc_types_df, use_container_width=True) st.markdown(f"**التصنيف النهائي:** كراسة شروط (بثقة 92%)") # إضافة الاستخدام إلى السجل self._add_usage_to_history(model_info['name'], model_info['type'], 1) else: st.warning("يرجى رفع مستند للمعالجة", icon="⚠️") def _render_prediction_model_interface(self, model_info): """ عرض واجهة استخدام نماذج التنبؤ """ # اختيار نوع التنبؤ prediction_type = st.selectbox( "نوع التنبؤ", options=["تنبؤ بتكلفة المشروع", "تنبؤ بمدة التنفيذ", "تنبؤ بالمخاطر"], key="prediction_type" ) # إدخال البيانات حسب نوع التنبؤ if prediction_type == "تنبؤ بتكلفة المشروع": st.markdown("#### بيانات المشروع") col1, col2 = st.columns(2) with col1: project_type = st.selectbox( "نوع المشروع", options=["طرق وجسور", "مباني", "بنية تحتية", "مياه وصرف صحي", "كهرباء"], key="project_type" ) project_size = st.selectbox( "حجم المشروع", options=["صغير", "متوسط", "كبير", "ضخم"], key="project_size" ) with col2: project_location = st.selectbox( "موقع المشروع", options=["الرياض", "جدة", "الدمام", "مكة المكرمة", "المدينة المنورة", "تبوك", "أبها"], key="project_location" ) project_duration = st.slider("مدة التنفيذ (بالشهور)", 3, 60, 12, 3, key="project_duration") elif prediction_type == "تنبؤ بمدة التنفيذ": st.markdown("#### بيانات المشروع") col1, col2 = st.columns(2) with col1: project_type = st.selectbox( "نوع المشروع", options=["طرق وجسور", "مباني", "بنية تحتية", "مياه وصرف صحي", "كهرباء"], key="duration_project_type" ) project_budget = st.number_input( "ميزانية المشروع (بالمليون ريال)", min_value=1.0, max_value=1000.0, value=10.0, step=1.0, key="project_budget" ) with col2: project_location = st.selectbox( "موقع المشروع", options=["الرياض", "جدة", "الدمام", "مكة المكرمة", "المدينة المنورة", "تبوك", "أبها"], key="duration_project_location" ) resources_level = st.selectbox( "مستوى الموارد", options=["منخفض", "متوسط", "عالي"], key="resources_level" ) elif prediction_type == "تنبؤ بالمخاطر": st.markdown("#### بيانات المشروع") col1, col2 = st.columns(2) with col1: project_type = st.selectbox( "نوع المشروع", options=["طرق وجسور", "مباني", "بنية تحتية", "مياه وصرف صحي", "كهرباء"], key="risk_project_type" ) project_complexity = st.selectbox( "مستوى تعقيد المشروع", options=["بسيط", "متوسط", "معقد", "معقد جداً"], key="project_complexity" ) with col2: project_location = st.selectbox( "موقع المشروع", options=["الرياض", "جدة", "الدمام", "مكة المكرمة", "المدينة المنورة", "تبوك", "أبها"], key="risk_project_location" ) previous_experience = st.selectbox( "الخبرة السابقة", options=["لا توجد خبرة", "خبرة محدودة", "خبرة متوسطة", "خبرة واسعة"], key="previous_experience" ) # زر التنبؤ if st.button("تنفيذ التنبؤ", key="predict_btn"): # محاكاة عملية التنبؤ with st.spinner("جاري تنفيذ التنبؤ..."): # محاكاة وقت المعالجة time.sleep(2) st.success("تم تنفيذ التنبؤ بنجاح!", icon="✅") # عرض النتائج حسب نوع التنبؤ if prediction_type == "تنبؤ بتكلفة المشروع": st.markdown("#### نتائج التنبؤ بالتكلفة") # إنشاء بيانات تجريبية base_cost = random.randint(5000000, 50000000) min_cost = int(base_cost * 0.9) max_cost = int(base_cost * 1.1) st.markdown(f"""

{base_cost:,} ريال

نطاق التكلفة المتوقع: {min_cost:,} - {max_cost:,} ريال

""", unsafe_allow_html=True) # عرض تفاصيل التكلفة st.markdown("##### تفاصيل التكلفة") cost_details = { "المواد": int(base_cost * 0.6), "العمالة": int(base_cost * 0.25), "المعدات": int(base_cost * 0.1), "أخرى": int(base_cost * 0.05) } # عرض الرسم البياني cost_df = pd.DataFrame({ "البند": list(cost_details.keys()), "التكلفة": list(cost_details.values()) }) st.bar_chart(cost_df.set_index("البند")) elif prediction_type == "تنبؤ بمدة التنفيذ": st.markdown("#### نتائج التنبؤ بمدة التنفيذ") # إنشاء بيانات تجريبية base_duration = random.randint(12, 36) min_duration = int(base_duration * 0.9) max_duration = int(base_duration * 1.2) st.markdown(f"""

{base_duration} شهر

نطاق المدة المتوقع: {min_duration} - {max_duration} شهر

""", unsafe_allow_html=True) # عرض الجدول الزمني st.markdown("##### الجدول الزمني التقديري") timeline_data = [ {"المرحلة": "التجهيز والتخطيط", "المدة (شهر)": int(base_duration * 0.1), "النسبة": "10%"}, {"المرحلة": "الأعمال الأولية", "المدة (شهر)": int(base_duration * 0.2), "النسبة": "20%"}, {"المرحلة": "الأعمال الرئيسية", "المدة (شهر)": int(base_duration * 0.5), "النسبة": "50%"}, {"المرحلة": "التشطيبات", "المدة (شهر)": int(base_duration * 0.15), "النسبة": "15%"}, {"المرحلة": "الاختبار والتسليم", "المدة (شهر)": int(base_duration * 0.05), "النسبة": "5%"} ] timeline_df = pd.DataFrame(timeline_data) st.dataframe(timeline_df, use_container_width=True) elif prediction_type == "تنبؤ بالمخاطر": st.markdown("#### نتائج تحليل المخاطر") # إنشاء بيانات تجريبية للمخاطر risks = [ {"المخاطرة": "تأخر التوريدات", "الاحتمالية": random.randint(30, 70), "التأثير": random.randint(30, 70)}, {"المخاطرة": "نقص العمالة", "الاحتمالية": random.randint(30, 70), "التأثير": random.randint(30, 70)}, {"المخاطرة": "تغيير المواصفات", "الاحتمالية": random.randint(30, 70), "التأثير": random.randint(30, 70)}, {"المخاطرة": "ظروف جوية", "الاحتمالية": random.randint(30, 70), "التأثير": random.randint(30, 70)}, {"المخاطرة": "مشاكل تمويلية", "الاحتمالية": random.randint(30, 70), "التأثير": random.randint(30, 70)} ] # حساب درجة المخاطرة for risk in risks: risk_score = (risk["الاحتمالية"] * risk["التأثير"]) / 100 if risk_score < 30: risk["المستوى"] = "منخفض" risk["اللون"] = "green" elif risk_score < 60: risk["المستوى"] = "متوسط" risk["اللون"] = "orange" else: risk["المستوى"] = "مرتفع" risk["اللون"] = "red" # عرض جدول المخاطر risks_df = pd.DataFrame([{k: v for k, v in risk.items() if k != "اللون"} for risk in risks]) st.dataframe(risks_df, use_container_width=True) # عرض خطة الاستجابة للمخاطر st.markdown("##### خطة الاستجابة للمخاطر") for risk in risks: if risk["المستوى"] == "مرتفع": st.markdown(f"""
{risk['المخاطرة']} (مخاطرة مرتفعة): يجب وضع خطة استجابة فورية وتخصيص موارد إضافية للتعامل مع هذه المخاطرة.
""", unsafe_allow_html=True) # إضافة الاستخدام إلى السجل self._add_usage_to_history(model_info['name'], model_info['type'], 1) def _render_api_management(self): """ عرض واجهة إدارة مفاتيح API """ st.markdown("### إدارة مفاتيح API") st.markdown("إدارة مفاتيح API للوصول إلى خدمات الذكاء الاصطناعي") # عرض مفاتيح API الحالية st.markdown("#### مفاتيح API الحالية") for provider, key in st.session_state.api_keys.items(): col1, col2, col3 = st.columns([3, 5, 2]) with col1: st.markdown(f"**{provider.capitalize()}**") with col2: # عرض المفتاح بشكل آمن st.text_input( f"مفتاح {provider}", value=key, type="password", key=f"api_key_{provider}", label_visibility="collapsed" ) with col3: st.button("تحديث", key=f"update_{provider}_btn") # إضافة مفتاح API جديد st.markdown("#### إضافة مفتاح API جديد") col1, col2, col3 = st.columns([3, 5, 2]) with col1: new_provider = st.text_input("اسم المزود", key="new_provider") with col2: new_key = st.text_input("مفتاح API", type="password", key="new_key") with col3: st.markdown(" ") # فراغ للمحاذاة if st.button("إضافة", key="add_api_key_btn"): if new_provider and new_key: st.success(f"تمت إضافة مفتاح API لـ {new_provider} بنجاح", icon="✅") else: st.warning("يرجى إدخال اسم المزود ومفتاح API", icon="⚠️") # إعدادات الأمان st.markdown("#### إعدادات الأمان") st.checkbox("تشفير مفاتيح API في قاعدة البيانات", value=True, key="encrypt_api_keys") st.checkbox("تسجيل استخدام مفاتيح API", value=True, key="log_api_usage") st.checkbox("تحديد صلاحيات الوصول لمفاتيح API", value=False, key="api_access_control") def _render_usage_history(self): """ عرض سجل استخدام النماذج """ st.markdown("### سجل استخدام النماذج") st.markdown("عرض سجل استخدام نماذج الذكاء الاصطناعي مع إحصائيات الاستخدام") # عرض إحصائيات الاستخدام st.markdown("#### إحصائيات الاستخدام") col1, col2, col3, col4 = st.columns(4) with col1: st.metric("إجمالي الاستخدامات", len(st.session_state.model_usage)) with col2: total_tokens = sum(usage['tokens'] for usage in st.session_state.model_usage) st.metric("إجمالي الرموز", f"{total_tokens:,}") with col3: unique_models = len(set(usage['model'] for usage in st.session_state.model_usage)) st.metric("النماذج المستخدمة", unique_models) with col4: # حساب تكلفة تقديرية estimated_cost = total_tokens * 0.0001 st.metric("التكلفة التقديرية", f"{estimated_cost:.2f} $") # عرض الرسم البياني للاستخدام st.markdown("#### استخدام النماذج حسب النوع") # تجميع البيانات حسب نوع النموذج usage_by_type = {} for usage in st.session_state.model_usage: if usage['type'] in usage_by_type: usage_by_type[usage['type']] += 1 else: usage_by_type[usage['type']] = 1 # تحويل البيانات إلى DataFrame usage_df = pd.DataFrame({ "نوع النموذج": list(usage_by_type.keys()), "عدد الاستخدامات": list(usage_by_type.values()) }) # عرض الرسم البياني st.bar_chart(usage_df.set_index("نوع النموذج")) # عرض سجل الاستخدام st.markdown("#### سجل الاستخدام") # خيارات التصفية col1, col2 = st.columns(2) with col1: filter_model_type = st.multiselect( "نوع النموذج", options=["الكل"] + list(set(usage['type'] for usage in st.session_state.model_usage)), default=["الكل"] ) with col2: date_range = st.selectbox( "النطاق الزمني", options=["الكل", "اليوم", "الأسبوع الماضي", "الشهر الماضي"] ) # تطبيق التصفية filtered_usage = st.session_state.model_usage if "الكل" not in filter_model_type: filtered_usage = [u for u in filtered_usage if u['type'] in filter_model_type] # تحويل البيانات إلى DataFrame if filtered_usage: usage_df = pd.DataFrame(filtered_usage) usage_df = usage_df[['date', 'model', 'type', 'tokens', 'status']] usage_df.columns = ['التاريخ', 'النموذج', 'النوع', 'الرموز', 'الحالة'] # عرض الجدول st.dataframe(usage_df, use_container_width=True) else: st.info("لا توجد بيانات استخدام تطابق معايير التصفية", icon="ℹ️") def _add_usage_to_history(self, model_name, model_type, tokens_count): """ إضافة استخدام إلى سجل الاستخدام """ new_usage = { 'id': len(st.session_state.model_usage) + 1, 'model': model_name, 'type': model_type, 'tokens': tokens_count, 'date': datetime.now().strftime("%Y-%m-%d %H:%M"), 'status': 'ناجح' } st.session_state.model_usage.insert(0, new_usage) def _generate_sample_models(self): """ إنشاء بيانات تجريبية لنماذج الذكاء الاصطناعي """ models = [ { 'id': 1, 'name': 'GPT-4', 'type': 'تحليل نصوص', 'provider': 'OpenAI', 'version': '4.0', 'status': 'متاح', 'description': 'نموذج لغوي متقدم لتحليل النصوص وفهم المحتوى بدقة عالية' }, { 'id': 2, 'name': 'BERT-Arabic', 'type': 'تحليل نصوص', 'provider': 'HuggingFace', 'version': '2.1', 'status': 'متاح', 'description': 'نموذج متخصص في تحليل النصوص العربية مع دعم للهجات المختلفة' }, { 'id': 3, 'name': 'DocExtractor', 'type': 'استخراج بيانات', 'provider': 'محلي', 'version': '1.5', 'status': 'متاح', 'description': 'نموذج لاستخراج البيانات من المستندات والعقود بدقة عالية' }, { 'id': 4, 'name': 'TenderClassifier', 'type': 'تصنيف مستندات', 'provider': 'محلي', 'version': '2.0', 'status': 'متاح', 'description': 'نموذج متخصص في تصنيف مستندات المناقصات والعقود' }, { 'id': 5, 'name': 'AzureSummarizer', 'type': 'تلخيص', 'provider': 'Azure', 'version': '3.2', 'status': 'متاح', 'description': 'نموذج لتلخيص المستندات الطويلة مع الحفاظ على المعلومات الأساسية' }, { 'id': 6, 'name': 'TranslateAI', 'type': 'ترجمة', 'provider': 'OpenAI', 'version': '2.5', 'status': 'متاح', 'description': 'نموذج للترجمة بين اللغات المختلفة مع دعم خاص للمصطلحات التقنية' }, { 'id': 7, 'name': 'CostPredictor', 'type': 'تنبؤ', 'provider': 'محلي', 'version': '1.8', 'status': 'متاح', 'description': 'نموذج للتنبؤ بتكاليف المشاريع بناءً على البيانات التاريخية' }, { 'id': 8, 'name': 'RiskAnalyzer', 'type': 'تنبؤ', 'provider': 'Azure', 'version': '2.1', 'status': 'متاح', 'description': 'نموذج لتحليل المخاطر المحتملة في المشاريع والمناقصات' }, { 'id': 9, 'name': 'GPT-5', 'type': 'تحليل نصوص', 'provider': 'OpenAI', 'version': '5.0-beta', 'status': 'قيد التطوير', 'description': 'النسخة التجريبية من الجيل الخامس لنماذج GPT مع قدرات متقدمة' }, { 'id': 10, 'name': 'MultiModalAnalyzer', 'type': 'تحليل نصوص', 'provider': 'HuggingFace', 'version': '1.0', 'status': 'قيد التطوير', 'description': 'نموذج متعدد الوسائط لتحليل النصوص والصور والمخططات' } ] return models def _generate_sample_usage(self): """ إنشاء بيانات تجريبية لسجل استخدام النماذج """ models = self._generate_sample_models() usage = [] for i in range(50): # اختيار نموذج عشوائي من النماذج المتاحة available_models = [m for m in models if m['status'] == 'متاح'] model = random.choice(available_models) # تحديد عدد الرموز بناءً على نوع النموذج if model['type'] in ['تحليل نصوص', 'تلخيص', 'ترجمة']: tokens = random.randint(100, 2000) else: tokens = random.randint(500, 5000) # تحديد تاريخ عشوائي خلال الشهر الماضي days_ago = random.randint(0, 30) usage_date = (datetime.now() - pd.Timedelta(days=days_ago)).strftime("%Y-%m-%d %H:%M") entry = { 'id': i + 1, 'model': model['name'], 'type': model['type'], 'tokens': tokens, 'date': usage_date, 'status': 'ناجح' if random.random() < 0.95 else 'فشل' } usage.append(entry) # ترتيب السجل حسب التاريخ (الأحدث أولاً) usage.sort(key=lambda x: x['date'], reverse=True) return usage