import streamlit as st import pandas as pd import numpy as np import matplotlib.pyplot as plt import plotly.express as px import plotly.graph_objects as go from datetime import datetime import time import io import os import json import base64 from pathlib import Path # استيراد محلل المستندات from .document_analyzer import AIDocumentAnalyzer, DocumentParser # استيراد وحدة تكامل البيانات from .data_integration import DataAIIntegration class AIAssistantApp: """وحدة الذكاء الاصطناعي""" def __init__(self): """تهيئة وحدة الذكاء الاصطناعي""" # تهيئة حالة الجلسة if 'chat_history' not in st.session_state: st.session_state.chat_history = [ { 'role': 'assistant', 'content': 'مرحباً! أنا مساعدك الذكي لإدارة المناقصات. كيف يمكنني مساعدتك اليوم؟' } ] if 'document_summaries' not in st.session_state: st.session_state.document_summaries = [ { 'id': 1, 'title': 'كراسة الشروط والمواصفات - مشروع إنشاء مبنى إداري', 'date': '2024-03-15', 'summary': 'تتضمن كراسة الشروط والمواصفات لمشروع إنشاء مبنى إداري متطلبات المشروع وشروط التنفيذ والمواصفات الفنية للأعمال المطلوبة. يتكون المبنى من 5 طوابق بمساحة إجمالية 5000 متر مربع. تشمل الأعمال الأساسية: الأعمال الإنشائية، الأعمال المعمارية، الأعمال الكهربائية، الأعمال الميكانيكية، وأعمال التشطيبات.', 'key_points': [ 'مدة التنفيذ: 18 شهراً', 'قيمة الضمان الابتدائي: 2% من قيمة العطاء', 'قيمة الضمان النهائي: 5% من قيمة العقد', 'غرامة التأخير: 1% من قيمة العقد عن كل أسبوع تأخير بحد أقصى 10%', 'شروط الدفع: دفعات شهرية حسب نسبة الإنجاز' ], 'entities': { 'الجهة المالكة': 'وزارة المالية', 'موقع المشروع': 'الرياض - حي العليا', 'رقم المناقصة': 'T-2024-001', 'تاريخ الطرح': '2024-03-01', 'تاريخ الإقفال': '2024-04-15' } }, { 'id': 2, 'title': 'جدول الكميات - مشروع تطوير شبكة طرق', 'date': '2024-03-20', 'summary': 'يتضمن جدول الكميات لمشروع تطوير شبكة طرق تفاصيل الأعمال المطلوبة والكميات التقديرية. يشمل المشروع إنشاء طرق جديدة بطول 15 كم وتطوير طرق قائمة بطول 10 كم، بالإضافة إلى إنشاء 3 جسور و5 أنفاق.', 'key_points': [ 'إجمالي أعمال الحفر: 250,000 م3', 'إجمالي أعمال الردم: 180,000 م3', 'إجمالي أعمال الخرسانة: 45,000 م3', 'إجمالي أعمال الأسفلت: 120,000 م2', 'إجمالي أعمال الإنارة: 500 عمود إنارة' ], 'entities': { 'الجهة المالكة': 'وزارة النقل', 'موقع المشروع': 'جدة', 'رقم المناقصة': 'T-2024-002', 'تاريخ الطرح': '2024-03-10', 'تاريخ الإقفال': '2024-04-20' } }, { 'id': 3, 'title': 'المواصفات الفنية - مشروع بناء مدرسة', 'date': '2024-03-25', 'summary': 'تتضمن المواصفات الفنية لمشروع بناء مدرسة تفاصيل المتطلبات الفنية للمشروع. تتكون المدرسة من 3 طوابق بمساحة إجمالية 3000 متر مربع، وتشمل 20 فصلاً دراسياً، ومختبرات علوم، وقاعة متعددة الأغراض، ومكتبة، وغرف إدارية.', 'key_points': [ 'نوع الهيكل: خرساني مسلح', 'نظام التكييف: نظام مركزي', 'نظام الإنارة: LED موفر للطاقة', 'نظام مكافحة الحريق: نظام رش آلي', 'متطلبات خاصة: نظام طاقة شمسية لتوفير 30% من احتياجات الطاقة' ], 'entities': { 'الجهة المالكة': 'وزارة التعليم', 'موقع المشروع': 'الدمام', 'رقم المناقصة': 'T-2024-003', 'تاريخ الطرح': '2024-03-15', 'تاريخ الإقفال': '2024-04-25' } } ] if 'ai_models' not in st.session_state: st.session_state.ai_models = [ { 'id': 1, 'name': 'نموذج تحليل المستندات', 'description': 'نموذج ذكاء اصطناعي لتحليل مستندات المناقصات واستخراج المعلومات الرئيسية منها.', 'type': 'معالجة اللغة الطبيعية', 'accuracy': 92, 'last_updated': '2024-03-01' }, { 'id': 2, 'name': 'نموذج تقدير التكاليف', 'description': 'نموذج ذكاء اصطناعي لتقدير تكاليف المشاريع بناءً على بيانات المشاريع السابقة.', 'type': 'تعلم آلي', 'accuracy': 85, 'last_updated': '2024-02-15' }, { 'id': 3, 'name': 'نموذج تحليل المخاطر', 'description': 'نموذج ذكاء اصطناعي لتحليل المخاطر المحتملة للمشاريع وتقديم توصيات للتخفيف منها.', 'type': 'تعلم آلي', 'accuracy': 88, 'last_updated': '2024-02-20' }, { 'id': 4, 'name': 'نموذج تحليل المنافسين', 'description': 'نموذج ذكاء اصطناعي لتحليل المنافسين وتقديم توصيات لزيادة فرص الفوز بالمناقصات.', 'type': 'تعلم آلي', 'accuracy': 80, 'last_updated': '2024-02-10' }, { 'id': 5, 'name': 'نموذج تحليل ملفات DWG', 'description': 'نموذج ذكاء اصطناعي لتحليل ملفات DWG واستخراج المعلومات الرئيسية منها.', 'type': 'رؤية حاسوبية', 'accuracy': 90, 'last_updated': '2024-03-10' } ] # تهيئة متغير السمة في حالة الجلسة إذا لم يكن موجوداً if 'theme' not in st.session_state: st.session_state.theme = 'light' # تهيئة متغير استيراد البنود من تحليل المستندات if 'imported_items' not in st.session_state: st.session_state.imported_items = [] # تهيئة محلل المستندات self.document_analyzer = AIDocumentAnalyzer() # تهيئة وحدة تكامل البيانات self.data_integration = DataAIIntegration() # تكامل وحدة تحليل البيانات مع وحدة الذكاء الاصطناعي self.data_integration.integrate_with_ai_assistant(self) def run(self): """ تشغيل وحدة الذكاء الاصطناعي هذه الدالة هي نقطة الدخول الرئيسية لوحدة الذكاء الاصطناعي. تقوم بتهيئة واجهة المستخدم وعرض الوظائف المختلفة للذكاء الاصطناعي. """ try: # تم إزالة set_page_config لتجنب التعارض مع app.py # تطبيق التنسيق المخصص st.markdown(""" """, unsafe_allow_html=True) # عرض عنوان الوحدة st.markdown('

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

', unsafe_allow_html=True) # إضافة شريط جانبي يحتوي على معلومات المستخدم وإعدادات الذكاء الاصطناعي with st.sidebar: st.markdown("### إعدادات الذكاء الاصطناعي") # اختيار نموذج الذكاء الاصطناعي ai_model = st.selectbox( "اختر نموذج الذكاء الاصطناعي", options=["OpenAI GPT-4", "Claude 3 Opus", "Gemini Pro", "نموذج محلي"], index=0, key="ai_model_selector" ) # إعدادات النموذج st.markdown("#### إعدادات النموذج") temperature = st.slider( "درجة الإبداعية", min_value=0.0, max_value=1.0, value=0.7, step=0.1, key="temperature_slider" ) max_tokens = st.slider( "الحد الأقصى للكلمات", min_value=100, max_value=4000, value=2000, step=100, key="max_tokens_slider" ) # إضافة زر لتحليل ملفات DWG st.markdown("#### تحليل ملفات DWG") dwg_file = st.file_uploader( "ارفع ملف DWG للتحليل", type=["dwg"], key="dwg_file_uploader" ) if dwg_file is not None: if st.button("تحليل ملف DWG", key="analyze_dwg_button"): st.info("جاري تحليل ملف DWG...") # هنا يتم استدعاء دالة تحليل ملف DWG st.success("تم تحليل ملف DWG بنجاح!") # إضافة معلومات عن التكامل مع بيئة هجين فيس st.markdown("#### التكامل مع بيئة هجين فيس") st.markdown(""" تم تكامل وحدة الذكاء الاصطناعي مع بيئة هجين فيس بنجاح. يمكنك الآن استخدام جميع ميزات الذكاء الاصطناعي في بيئة آمنة ومتكاملة. """) # إنشاء تبويبات لعرض الوظائف المختلفة للذكاء الاصطناعي tabs = st.tabs([ "المساعد الذكي", "تحليل المستندات", "تقدير التكاليف", "تحليل المخاطر", "نماذج الذكاء الاصطناعي" ]) # تبويب المساعد الذكي with tabs[0]: self._render_assistant_tab() # تبويب تحليل المستندات with tabs[1]: self._render_document_analysis_tab() # تبويب تقدير التكاليف with tabs[2]: self._render_cost_estimation_tab() # تبويب تحليل المخاطر with tabs[3]: self._render_risk_analysis_tab() # تبويب نماذج الذكاء الاصطناعي with tabs[4]: self._render_ai_models_tab() # عرض حقوق النشر st.markdown("---") st.markdown('
© 2025 جميع الحقوق محفوظة
', unsafe_allow_html=True) except Exception as e: st.error(f"حدث خطأ أثناء تشغيل وحدة الذكاء الاصطناعي: {str(e)}") def _render_assistant_tab(self): """عرض تبويب المساعد الذكي""" st.markdown("### المساعد الذكي") st.markdown(""" المساعد الذكي يساعدك في: - تحليل المناقصات والعقود - تقدير التكاليف والمخاطر - الإجابة على الأسئلة المتعلقة بالمناقصات - تقديم توصيات لزيادة فرص الفوز بالمناقصات """) # عرض محادثة المساعد الذكي chat_container = st.container() with chat_container: for message in st.session_state.chat_history: if message['role'] == 'user': st.markdown(f'
أنت: {message["content"]}
', unsafe_allow_html=True) else: st.markdown(f'
المساعد: {message["content"]}
', unsafe_allow_html=True) # إدخال رسالة جديدة user_input = st.text_area("اكتب رسالتك هنا", key="user_input_area") if st.button("إرسال", key="send_message_button"): if user_input: # إضافة رسالة المستخدم إلى المحادثة st.session_state.chat_history.append({ 'role': 'user', 'content': user_input }) # إضافة رد المساعد الذكي response = self._generate_ai_response(user_input) st.session_state.chat_history.append({ 'role': 'assistant', 'content': response }) # إعادة تحميل الصفحة لعرض الرسائل الجديدة st.rerun() def _render_document_analysis_tab(self): """عرض تبويب تحليل المستندات""" st.markdown("### تحليل المستندات") st.markdown(""" يمكنك تحليل المستندات التالية: - كراسات الشروط والمواصفات - العقود - جداول الكميات - المواصفات الفنية - ملفات DWG """) # رفع مستند للتحليل uploaded_file = st.file_uploader("ارفع مستنداً للتحليل", type=["pdf", "docx", "txt", "dwg"], key="document_analysis_uploader") if uploaded_file is not None: # عرض معلومات الملف file_details = { "اسم الملف": uploaded_file.name, "نوع الملف": uploaded_file.type, "حجم الملف": f"{uploaded_file.size / 1024:.2f} كيلوبايت" } st.json(file_details) # اختيار نوع التحليل analysis_type = st.selectbox( "اختر نوع التحليل", options=[ "تحليل شامل", "استخراج البنود الرئيسية", "تحليل الشروط والمتطلبات", "تحليل المخاطر", "تحليل التكاليف" ], key="analysis_type_selector" ) # اختيار نموذج الذكاء الاصطناعي ai_model = st.selectbox( "اختر نموذج الذكاء الاصطناعي للتحليل", options=["OpenAI GPT-4", "Claude 3 Opus", "Gemini Pro", "نموذج محلي"], key="analysis_model_selector" ) # زر تحليل المستند if st.button("تحليل المستند", key="analyze_document_button"): with st.spinner("جاري تحليل المستند..."): # محاكاة عملية التحليل progress_bar = st.progress(0) for i in range(100): time.sleep(0.01) progress_bar.progress(i + 1) # عرض نتائج التحليل st.success("تم تحليل المستند بنجاح!") # إنشاء نتائج تحليل افتراضية analysis_results = { "عنوان المستند": "كراسة الشروط والمواصفات - مشروع إنشاء مبنى إداري", "نوع المستند": "كراسة شروط ومواصفات", "تاريخ المستند": (Content truncated due to size limit. Use line ranges to read in chunks)