Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| import skops.io as sio | |
| import joblib | |
| import numpy as np | |
| import os | |
| print("Current directory contents:", os.listdir()) | |
| # تحميل أسماء الأعمدة | |
| try: | |
| feature_names = joblib.load("feature_names.pkl") | |
| print(f"✅ Loaded feature names: {len(feature_names)} features") | |
| except Exception as e: | |
| print(f"❌ Error loading feature_names.pkl: {e}") | |
| feature_names = ['tdp', 'cores', 'logicals', 'cpuCount', 'rank', 'samples', | |
| 'extracted_ghz', 'speed_ghz', 'turbo_ghz', 'cost_per_rank_point', 'cost_per_core', | |
| 'brand_encoded', 'category_final_encoded', 'socket_final_encoded'] | |
| # تحميل النموذج | |
| try: | |
| untrusted_types = sio.get_untrusted_types(file="cpu_price_model.skops") | |
| model = sio.load("cpu_price_model.skops", trusted=untrusted_types) | |
| print("✅ Model loaded successfully!") | |
| except Exception as e: | |
| print(f"❌ Error loading model: {e}") | |
| raise e | |
| # اسماءالشركات مع عدد المعالجات من البيانات | |
| BRAND_MAPPING = { | |
| "Intel": 0, # 2593 معالج | |
| "AMD": 1, # 1252 معالج | |
| "Other": 2, # 319 معالج | |
| "Qualcomm": 3, # 107 معالج | |
| "MediaTek": 4, # 61 معالج | |
| "Samsung": 5, # 25 معالج | |
| "VIA": 6, # 23 معالج | |
| "Rockchip": 7, # 19 معالج | |
| "Unisoc": 8, # 16 معالج | |
| "Snapdragon": 9, # 15 معالج | |
| "Apple": 10, # 15 معالج | |
| "QCT": 11, # 5 معالج | |
| "Spreadtrum": 12, # 3 معالج | |
| "Nvidia": 13, # 2 معالج | |
| "AArch64": 14, # 2 معالج | |
| "Microsoft": 15, # 2 معالج | |
| } | |
| # الفئات وعدد المعالجات في البيانات | |
| CATEGORY_MAPPING = { | |
| "Server/Workstation": 0, # 1313 معالج | |
| "Desktop": 1, # 1301 معالج | |
| "Laptop": 2, # 1195 معالج | |
| "Embedded/IoT": 3, # 537 معالج | |
| "Mobile / Tablet": 4, # 72 معالج | |
| "Unknown": 5, # 41 معالج | |
| } | |
| #السوكت وعدد المعالجات في البيانات ذي اعلى الفئات لان كانت فوق 190 | |
| SOCKET_MAPPING = { | |
| "Unknown": 0, # 868 معالج | |
| "FCLGA3647": 1, # 178 معالج | |
| "AM4": 2, # 140 معالج | |
| "LGA1366": 3, # 104 معالج | |
| "LGA1155": 4, # 103 معالج | |
| "Other": 5 # باقي المقابس | |
| } | |
| def predict_price(tdp, cores, logicals, cpuCount, rank, samples, | |
| extracted_ghz, speed_ghz, turbo_ghz, | |
| cost_per_rank_point, cost_per_core, | |
| brand_name, category_name, socket_name): | |
| """دالة التنبؤ مع مدخلات سهلة الفهم""" | |
| # تحويل الأسماء إلى أرقام مشفرة | |
| brand_encoded = BRAND_MAPPING.get(brand_name, 2) # 2 = Other | |
| category_encoded = CATEGORY_MAPPING.get(category_name, 5) # 5 = Unknown | |
| socket_encoded = SOCKET_MAPPING.get(socket_name, 5) # 5 = Other | |
| # إنشاء مصفوفة المدخلات (14 عموداً) | |
| input_data = np.array([[ | |
| tdp, cores, logicals, cpuCount, rank, samples, | |
| extracted_ghz, speed_ghz, turbo_ghz, | |
| cost_per_rank_point, cost_per_core, | |
| brand_encoded, category_encoded, socket_encoded | |
| ]]) | |
| # تحويل إلى DataFrame | |
| input_df = pd.DataFrame(input_data, columns=feature_names) | |
| # التنبؤ | |
| prediction = model.predict(input_df)[0] | |
| # تنسيق النتيجة | |
| return f"💰 السعر المتوقع: ${prediction:,.2f}" | |
| # ========== واجهة المستخدم ========== | |
| # قائمةالشركات | |
| brand_choices = ["Intel", "AMD", "Other", "Qualcomm", "MediaTek", | |
| "Samsung", "VIA", "Rockchip", "Unisoc", "Snapdragon", | |
| "Apple", "QCT", "Spreadtrum", "Nvidia", "AArch64", "Microsoft"] | |
| # قائمة الفئات | |
| category_choices = ["Server/Workstation", "Desktop", "Laptop", "Embedded/IoT", "Mobile / Tablet", "Unknown"] | |
| # قائمة السوكت (حسب شيوعها في البيانات) | |
| socket_choices = ["Unknown", "FCLGA3647", "AM4", "LGA1366", "LGA1155", "Other"] | |
| inputs = [ | |
| # الأعمدة الرقمية | |
| gr.Number(label="استهلاك الطاقة (TDP) - واط", value=65), | |
| gr.Number(label="عدد الأنوية (Cores)", value=6), | |
| gr.Number(label="عدد الخيوط (Threads)", value=12), | |
| gr.Number(label="عدد المقابس (Sockets)", value=1), | |
| gr.Number(label="ترتيب الأداء (Rank) - كلما قل الرقم كان أفضل", value=1000), | |
| gr.Number(label="عدد العينات (Samples)", value=50), | |
| gr.Number(label="السرعة المستخرجة من الاسم (GHz)", value=2.5), | |
| gr.Number(label="السرعة الأساسية (GHz)", value=2.4), | |
| gr.Number(label="السرعة القصوى (Turbo - GHz)", value=4.0), | |
| gr.Number(label="التكلفة لكل نقطة ترتيب", value=0.5), | |
| gr.Number(label="التكلفة لكل نواة", value=15.0), | |
| # الأعمدة الفئوية (قوائم منسدلة) | |
| gr.Dropdown( | |
| choices=brand_choices, | |
| label="العلامة التجارية (Brand)", | |
| value="Intel" | |
| ), | |
| gr.Dropdown( | |
| choices=category_choices, | |
| label="فئة المعالج (Category)", | |
| value="Desktop" | |
| ), | |
| gr.Dropdown( | |
| choices=socket_choices, | |
| label="نوع المقبس (Socket)", | |
| value="AM4" | |
| ), | |
| ] | |
| outputs = gr.Textbox(label="نتيجة التنبؤ", lines=2) | |
| title = "💰 تنبؤ أسعار المعالجات" | |
| description = """ | |
| ### 🖥️ أدخل مواصفات المعالج لتحصل على تقدير لسعره | |
| **ملاحظة:** هذا التطبيق للأغراض التعليمية والبحثية فقط. الأسعار تقديرية وقد لا تعكس الواقع الحالي⚠️. | |
| """ | |
| examples = [ | |
| # [TDP, cores, logicals, cpuCount, rank, samples, extracted_ghz, speed_ghz, turbo_ghz, cost_per_rank, cost_per_core, brand, category, socket] | |
| [65, 6, 12, 1, 1000, 50, 2.5, 2.4, 4.0, 0.5, 15.0, "Intel", "Desktop", "LGA1155"], | |
| [125, 8, 16, 1, 500, 100, 3.0, 3.0, 4.5, 0.8, 20.0, "AMD", "Desktop", "AM4"], | |
| [15, 4, 8, 1, 2000, 30, 2.0, 1.8, 3.2, 0.3, 8.0, "Qualcomm", "Mobile / Tablet", "Unknown"], | |
| [95, 6, 12, 1, 800, 60, 2.8, 2.6, 4.2, 0.6, 18.0, "Intel", "Server/Workstation", "FCLGA3647"], | |
| [10, 8, 8, 1, 1500, 40, 3.5, 3.2, 4.8, 0.4, 12.0, "Apple", "Laptop", "Unknown"], | |
| [65, 4, 8, 1, 1200, 45, 2.2, 2.0, 3.8, 0.4, 12.0, "AMD", "Desktop", "AM4"], | |
| [35, 2, 4, 1, 2500, 20, 1.8, 1.6, 2.8, 0.2, 5.0, "Intel", "Embedded/IoT", "Unknown"], | |
| ] | |
| demo = gr.Interface( | |
| fn=predict_price, | |
| inputs=inputs, | |
| outputs=outputs, | |
| title=title, | |
| description=description, | |
| examples=examples, | |
| theme="soft", | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |