|
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: |
|
|
|
|
|
|
|
st.markdown(""" |
|
<style> |
|
.module-title { |
|
color: #2c3e50; |
|
text-align: center; |
|
font-size: 2.5rem; |
|
margin-bottom: 1rem; |
|
padding-bottom: 1rem; |
|
border-bottom: 2px solid #3498db; |
|
} |
|
.stTabs [data-baseweb="tab-list"] { |
|
gap: 10px; |
|
} |
|
.stTabs [data-baseweb="tab"] { |
|
height: 50px; |
|
white-space: pre-wrap; |
|
background-color: #f8f9fa; |
|
border-radius: 4px 4px 0px 0px; |
|
gap: 1px; |
|
padding-top: 10px; |
|
padding-bottom: 10px; |
|
} |
|
</style> |
|
""", unsafe_allow_html=True) |
|
|
|
|
|
st.markdown('<h1 class="module-title">وحدة الذكاء الاصطناعي</h1>', 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" |
|
) |
|
|
|
|
|
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...") |
|
|
|
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('<div style="text-align: center;">© 2025 جميع الحقوق محفوظة</div>', 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'<div style="background-color: #e6f7ff; padding: 10px; border-radius: 10px; margin-bottom: 10px;"><strong>أنت:</strong> {message["content"]}</div>', unsafe_allow_html=True) |
|
else: |
|
st.markdown(f'<div style="background-color: #f0f0f0; padding: 10px; border-radius: 10px; margin-bottom: 10px;"><strong>المساعد:</strong> {message["content"]}</div>', 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 = { |
|
"عنوان المستند": "كراسة الشروط والمواصفات - مشروع إنشاء مبنى إداري", |
|
"نوع المستند": "كراسة شروط ومواصفات", |
|
"تاريخ المستند": "2024-03-15", |
|
"الجهة المصدرة": "وزارة الأشغال العامة", |
|
"ملخص المستند": "كراسة شروط ومواصفات لمشروع إنشاء مبنى إداري جديد بمساحة 5000 متر مربع", |
|
"الكلمات المفتاحية": ["مبنى إداري", "إنشاءات", "مناقصة حكومية", "شروط ومواصفات"], |
|
"البنود الرئيسية": [ |
|
"مواصفات الأعمال الإنشائية", |
|
"مواصفات الأعمال المعمارية", |
|
"مواصفات الأعمال الكهربائية", |
|
"مواصفات الأعمال الميكانيكية", |
|
"شروط المناقصة والترسية" |
|
], |
|
"المتطلبات الفنية": [ |
|
"خبرة لا تقل عن 10 سنوات في المشاريع المماثلة", |
|
"سابقة أعمال لمشاريع مماثلة بقيمة 50 مليون ريال", |
|
"كادر فني مؤهل لا يقل عن 50 مهندس وفني", |
|
"معدات وأدوات كافية لتنفيذ المشروع" |
|
], |
|
"الميزانية التقديرية": 35000000 |
|
} |
|
|
|
|
|
|