ChatBot_Telecom / app.py
amira01's picture
Update app.py
39c1b28 verified
import streamlit as st
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.prompts import PromptTemplate
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.schema import Document
import os
import pickle
from pathlib import Path
# تحميل API Key
@st.cache_data
def load_api_key():
if "OPENROUTER_API_KEY" in os.environ:
return os.getenv("OPENROUTER_API_KEY")
raise ValueError("API key not found in environment variables")
# تحويل النص إلى لغة فصيحة
@st.cache_resource
def load_translator_model():
return ChatOpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=load_api_key(),
model="mistralai/mistral-7b-instruct",
temperature=0.1
)
def translate_to_fusha(text):
translator = load_translator_model()
prompt = f"""
قم بتحويل الجملة التالية من اللهجة العامية إلى اللغة العربية الفصحى مع الحفاظ على المعنى:
النص الأصلي: {text}
النص المترجم:
"""
try:
response = translator.predict(prompt)
return response.strip()
except Exception as e:
st.error(f"خطأ في التحويل إلى الفصحى: {str(e)}")
return text # العودة للنص الأصلي في حالة الخطأ
# مسارات تخزين البيانات
EMBEDDINGS_PATH = "embeddings_cache.pkl"
VECTORDB_PATH = "faiss_vectorstore"
# تحميل أو إنشاء الـ embeddings و vectorstore
@st.cache_resource
def load_or_create_embeddings():
# تحميل البيانات
faq_data =[
{
"question": "ما هي الخدمات التي تقدمها شركة اتصالات المستقبل؟",
"answer": "نقدم خدمات الاتصالات الهاتفية، الإنترنت، والجيل الخامس (5G)، بالإضافة إلى خدمات الترفيه عبر الإنترنت مثل البث المباشر والتلفزيون الذكي."
},
{
"question": "هل تقدمون خدمة الإنترنت فائق السرعة؟",
"answer": "نعم، نقدم خدمات الإنترنت فائق السرعة عبر شبكات الجيل الرابع والجيل الخامس."
},
{
"question": "ما هي الباقات المتاحة للإنترنت المنزلي؟",
"answer": "لدينا عدة باقات تبدأ من 50 ميجابت في الثانية حتى 1 جيجابت في الثانية، مع خيارات لا محدودية للباقات."
},
{
"question": "هل توفر اتصالات المستقبل خدمات الهاتف المحمول؟",
"answer": "نعم، نقدم خدمات الهاتف المحمول مع خيارات مختلفة للباقات الصوتية والبيانات."
},
{
"question": "هل يوجد تطبيق للهواتف الذكية لإدارة حساباتي؟",
"answer": "نعم، لدينا تطبيق مخصص يتيح لك إدارة حسابك، دفع الفواتير، ومتابعة استهلاك البيانات."
},
{
"question": "ما هي خطط اتصالات المستقبل لتوسيع خدماتها في المناطق الريفية؟",
"answer": "نحن نعمل حالياً على توسيع شبكة الجيل الخامس لتشمل المناطق الريفية، بهدف توفير اتصال أسرع وأكثر استقرارًا."
},
{
"question": "هل تقدمون خدمات خاصة للشركات؟",
"answer": "نعم، نقدم خدمات مخصصة للأعمال والشركات مثل حلول الاتصالات الموحدة، الإنترنت المخصص، وحلول الأمن السيبراني."
},
{
"question": "هل هناك خصومات أو عروض خاصة للطلاب؟",
"answer": "نعم، نقدم خصومات خاصة للطلاب على باقات الإنترنت والمكالمات."
},
{
"question": "هل تقدمون خدمات الدفع عبر الهاتف؟",
"answer": "نعم، يمكن للعملاء الدفع باستخدام الهاتف عبر خدمة 'محفظتي' المتاحة عبر التطبيق."
},
{
"question": "ما هو نظام الفواتير في اتصالات المستقبل؟",
"answer": "لدينا نظام فواتير شهري مرن، حيث يمكن للعملاء اختيار الدفع المسبق أو الفواتير الشهرية."
},
{
"question": "هل تقدمون خدمات الإنترنت للمنزل والأعمال؟",
"answer": "نعم، نقدم خدمات الإنترنت بسرعات عالية للأفراد والشركات مع دعم فني متميز."
},
{
"question": "ما هي الميزات الخاصة لباقات الجيل الخامس التي تقدمها الشركة؟",
"answer": "توفر باقات الجيل الخامس سرعة إنترنت غير محدودة تقريباً، مع تحسينات كبيرة في الاتصال بالإنترنت للأجهزة المتعددة."
},
{
"question": "هل يمكن للعملاء تحويل رصيدهم بين الأرقام؟",
"answer": "نعم، توفر اتصالات المستقبل خدمة تحويل الرصيد بين الأرقام عبر التطبيق أو الرسائل النصية."
},
{
"question": "هل توجد خدمات إضافية مثل المكالمات الدولية؟",
"answer": "نعم، لدينا باقات للمكالمات الدولية بأسعار تنافسية لعدة وجهات حول العالم."
},
{
"question": "كيف يمكنني الاشتراك في أحد باقات الإنترنت؟",
"answer": "يمكنك الاشتراك عبر التطبيق أو من خلال زيارة أحد فروعنا أو عبر موقعنا الإلكتروني."
},
{
"question": "هل يوجد دعم للعملاء على مدار الساعة؟",
"answer": "نعم، نحن نقدم دعمًا على مدار الساعة عبر الهاتف، الدردشة المباشرة، والبريد الإلكتروني."
},
{
"question": "هل تقدمون خدمة 'الواي فاي' في الأماكن العامة؟",
"answer": "نعم، لدينا خدمة واي فاي مجانية في العديد من الأماكن العامة مثل المولات والمطارات."
},
{
"question": "كيف يمكنني إلغاء خدمة اشتراك تلقائي؟",
"answer": "يمكنك إلغاء الاشتراك من خلال التطبيق أو بالاتصال بخدمة العملاء."
},
{
"question": "ما هي خطة 'اتصالات المستقبل' لتقديم خدمات الإنترنت عبر الأقمار الصناعية؟",
"answer": "نحن نعمل على تطوير خدمة الإنترنت عبر الأقمار الصناعية لتوفير الاتصال في المناطق التي يصعب الوصول إليها."
},
{
"question": "هل توجد خيارات مختلفة لتخصيص باقات البيانات؟",
"answer": "نعم، يمكنك تخصيص باقات البيانات حسب احتياجاتك، سواء للاستخدام الشخصي أو للأعمال."
},
{
"question": "هل تقدمون خدمات الترفيه مثل الألعاب عبر الإنترنت؟",
"answer": "نعم، نقدم مجموعة واسعة من الألعاب عبر الإنترنت بالتعاون مع شركات ترفيه عالمية."
},
{
"question": "هل تقدمون خدمات التلفزيون الرقمي؟",
"answer": "نعم، نقدم خدمة 'اتصالات المستقبل' للبث المباشر والمحتوى الرقمي مع قنوات محلية وعالمية."
},
{
"question": "هل توفرون خيارات مرنة للدفع؟",
"answer": "نعم، نحن نوفر عدة خيارات للدفع، بما في ذلك الدفع عبر الإنترنت، الدفع عبر الهاتف المحمول، وطرق الدفع التقليدية."
},
{
"question": "كيف يمكنني التحقق من رصيدي وبيانات استهلاكي؟",
"answer": "يمكنك التحقق من رصيدك واستهلاكك عبر تطبيق الهاتف المحمول أو عبر موقعنا الإلكتروني."
},
{
"question": "هل تقدمون خدمات خاصة لذوي الاحتياجات الخاصة؟",
"answer": "نعم، نقدم حلولًا خاصة لذوي الاحتياجات الخاصة مثل المترجمين الفوريين وتطبيقات قراءة الشاشة."
},
{
"question": "ما هي الحلول التي تقدمها اتصالات المستقبل للأمن السيبراني؟",
"answer": "نحن نقدم حلولاً متكاملة لحماية البيانات والخصوصية للشركات والأفراد، بما في ذلك خدمات المراقبة والتشفير."
},
{
"question": "هل تقدمون برامج شراكة للمؤسسات؟",
"answer": "نعم، لدينا برامج شراكة للأعمال التجارية تشمل عروضًا مخصصة وخدمات متميزة."
},
{
"question": "هل تقدمون خدمات الإنترنت المحمول لمناطق غير مغطاة؟",
"answer": "نعم، نعمل على تطوير حلول لتوصيل الإنترنت المحمول في المناطق النائية عبر تقنيات جديدة."
},
{
"question": "هل تقدمون باقات مشتركة للعائلة؟",
"answer": "نعم، لدينا باقات عائلية توفر مميزات مشتركة للإنترنت والمكالمات بأسعار منافسة."
},
{
"question": "هل تقدمون عروضًا للعملاء الجدد؟",
"answer": "نعم، نقدم عروضًا خاصة للعملاء الجدد تشمل خصومات على أول فاتورة أو ترقية مجانية للباقات."
},
{
"question": "ما هي أبرز مميزات شبكة الجيل الخامس في اتصالات المستقبل؟",
"answer": "توفر الشبكة سرعة عالية جداً، زمن استجابة منخفض، ودعماً أكبر للأجهزة المتصلة."
},
{
"question": "هل يمكنني ترقية خطتي إلى باقة أكبر في أي وقت؟",
"answer": "نعم، يمكنك ترقية خطتك في أي وقت عبر التطبيق أو من خلال خدمة العملاء."
},
{
"question": "هل تقدمون خدمات 'الواي فاي' في الفنادق والمطاعم؟",
"answer": "نعم، نقدم خدمات واي فاي مدفوعة أو مجانية في العديد من الفنادق والمطاعم."
},
{
"question": "هل يمكنني إلغاء اشتراكي في الخدمات قبل نهاية الفترة؟",
"answer": "نعم، يمكنك إلغاء الاشتراك في الخدمات وفقًا لشروط وأحكام محددة عبر خدمة العملاء."
},
{
"question": "هل تقدمون خدمات الدعم الفني للمشاكل التقنية؟",
"answer": "نعم، لدينا فريق دعم فني متخصص يقدم المساعدة في حل المشاكل التقنية المتعلقة بالشبكة أو الأجهزة."
},
{
"question": "هل توفرون حلولاً خاصة للمؤسسات الحكومية؟",
"answer": "نعم، نقدم حلولاً متخصصة للمؤسسات الحكومية تشمل الأمن السيبراني والبنية التحتية للاتصالات."
},
{
"question": "هل تقدمون خدمات إضافية مثل التخزين السحابي؟",
"answer": "نعم، نقدم خدمات تخزين سحابي للعملاء لتخزين البيانات والملفات بشكل آمن."
},
{
"question": "كيف يمكنني استعادة الرقم أو الحساب بعد فقده؟",
"answer": "يمكنك استعادة الرقم أو الحساب عن طريق التحقق من هويتك عبر خدمة العملاء أو التطبيق."
},
{
"question": "هل تقدمون خصومات للأعمال التجارية؟",
"answer": "نعم، نقدم خصومات وخدمات مخصصة للأعمال التجارية، بما في ذلك حلول الاتصال السحابية."
},
{
"question": "هل يمكنني إضافة أفراد عائلتي إلى خطتي؟",
"answer": "نعم، يمكنك إضافة أفراد عائلتك إلى خطتك واختيار باقات مشتركة."
},
{
"question": "هل تقدمون خططًا خاصة لرجال الأعمال؟",
"answer": "نعم، نقدم خططًا مخصصة لرجال الأعمال تشمل بيانات غير محدودة وخدمات متميزة."
},
{
"question": "ما هي مزايا الاشتراك في خدمة الإنترنت عبر الألياف الضوئية؟",
"answer": "خدمة الإنترنت عبر الألياف الضوئية توفر سرعة عالية جداً وثباتاً في الاتصال."
},
{
"question": "هل يوجد خصومات للمتقاعدين؟",
"answer": "نعم، نقدم خصومات خاصة للمتقاعدين على بعض الخدمات."
},
{
"question": "هل تقدمون خدمات مشتركين دوليين؟",
"answer": "نعم، نقدم خدمات مخصصة للمشتركين الدوليين مثل المكالمات الدولية بأسعار مخفضة."
},
{
"question": "هل يمكنني تغيير باقتي أثناء السفر خارج البلاد؟",
"answer": "نعم، يمكنك تغيير باقتك بسهولة عبر التطبيق لتناسب احتياجاتك أثناء السفر."
},
{
"question": "هل يوجد خطط مخصصة للأشخاص الذين يستخدمون الإنترنت بشكل كبير؟",
"answer": "نعم، نقدم خطط مخصصة للعملاء الذين يستخدمون الإنترنت بشكل كبير تشمل بيانات غير محدودة."
},
{
"question": "هل تقدمون خدمات لأصحاب المشاريع الصغيرة؟",
"answer": "نعم، نقدم حلولاً مخصصة لأصحاب المشاريع الصغيرة تشمل الإنترنت عالي السرعة وخدمات الاتصالات."
},
{
"question": "هل تقدمون حلول ترفيهية لمستخدمي الإنترنت المنزلي؟",
"answer": "نعم، نقدم حلولاً ترفيهية مثل اشتراكات في منصات بث الفيديو والألعاب عبر الإنترنت."
},
{
"question": "كيف يمكنني تحديث بياناتي الشخصية؟",
"answer": "يمكنك تحديث بياناتك الشخصية بسهولة عبر التطبيق أو عبر زيارة أحد فروعنا."
},
{
"question": "هل تقدمون ضمانًا لجودة الشبكة؟",
"answer": "نعم، نقدم ضمانًا لجودة الشبكة مع التعويضات في حال حدوث انقطاعات طويلة."
},
{
"question": "متى تم إنشاء شركة اتصالات المستقبل؟",
"answer": "تم إنشاء شركة 'اتصالات المستقبل' في عام 2025 في مصر على يد مجموعة من الخبراء."
},
{
"question": "ما هي أسعار باقات الإنترنت المنزلي الأساسية؟",
"answer": "تبدأ أسعار باقات الإنترنت المنزلي من 250 جنيهًا شهريًا للباقة 50 ميجابت/ثانية، وتصل إلى 750 جنيهًا للباقة 1 جيجابت/ثانية."
},
{
"question": "كم تبلغ تكلفة باقات الجيل الخامس للهواتف المحمولة؟",
"answer": "تبدأ باقات الجيل الخامس من 150 جنيهًا (10 جيجابايت) وتصل إلى 500 جنيهًا (باقة غير محدودة بسرعات فائقة)."
},
{
"question": "ما هي أسعار باقات الإنترنت للأعمال؟",
"answer": "تبدأ باقات الإنترنت للأعمال من 500 جنيه شهريًا (100 ميجابت/ثانية) وتصل إلى 2000 جنيه (1 جيجابت/ثانية مع خوادم مخصصة)."
},
{
"question": "هل تختلف أسعار الباقات حسب المنطقة؟",
"answer": "نعم، قد تختلف الأسعار قليلاً حسب المنطقة بسبب اختلاف البنية التحتية، مع وجود خصومات تصل إلى 20% في بعض المناطق النائية."
},
{
"question": "ما هي أسعار الباقات العائلية؟",
"answer": "الباقات العائلية تبدأ من 600 جنيه (4 خطوط بإنترنت مشترك 200 جيجابايت) مع خصم 15% على الخطوط الإضافية."
},
{
"question": "كم سعر ترقية الباقة إلى سرعة أعلى؟",
"answer": "ترقية الباقة تكلف 50 جنيهًا للترقية بين المستويات، مع وجود عرض ترقية مجانية كل 6 أشهر للعملاء الدائمين."
},
{
"question": "ما هي أسعار باقات البيانات الإضافية؟",
"answer": "حزم البيانات الإضافية تبدأ من 20 جنيهًا (2 جيجابايت) وتصل إلى 100 جنيه (20 جيجابايت) صالحة لمدة 30 يومًا."
},
{
"question": "هل هناك عروض خاصة على أسعار الباقات الجديدة؟",
"answer": "نعم، حالياً يوجد خصم 25% على أول 3 أشهر للباقات الجديدة، بالإضافة إلى شهر مجاني عند الاشتراك السنوي."
},
{
"question": "ما هي سرعات باقات الإنترنت المنزلي المتاحة؟",
"answer": "السرعات المتاحة: 50، 100، 200، 500 ميجابت/ثانية، و1 جيجابت/ثانية مع خيارات محدودة وغير محدودة."
},
{
"question": "ما هي أحجام البيانات في باقات الهاتف المحمول؟",
"answer": "أحجام البيانات: 5، 10، 20، 50 جيجابايت للباقات الشهرية، مع وجود باقات يومية وأسبوعية أيضًا."
},
{
"question": "ما الفرق بين باقات السرعة الثابتة والمتغيرة؟",
"answer": "الباقات الثابتة تحافظ على السرعة المعلنة طوال الوقت بسعر أعلى قليلاً، بينما المتغيرة قد تقل السرعة في أوقات الذروة بخصم 30% على السعر."
},
{
"question": "ما هي باقة الإنترنت الأكثر مبيعاً؟",
"answer": "الباقة 200 ميجابت/ثانية بسعر 400 جنيه شهرياً هي الأكثر طلباً لأنها توازن بين السعر والسرعة المناسبة لمعظم الأسر."
},
{
"question": "هل توجد باقات إنترنت ليلية بأسعار مخفضة؟",
"answer": "نعم، لدينا باقة ليلية غير محدودة من الساعة 12 مساءً حتى 6 صباحًا بسعر 100 جنيه فقط شهريًا."
},
{
"question": "ما هي مدة صلاحية باقات البيانات؟",
"answer": "معظم الباقات شهرية، لكن لدينا باقات أسبوعية (صلاحية 7 أيام) ويومية (24 ساعة) بأسعار تبدأ من 10 جنيهات."
},
{
"question": "كم تبلغ سرعة باقة 500 ميجابت/ثانية الفعلية؟",
"answer": "سرعة الباقة 500 ميجابت/ثانية تصل فعلياً إلى 480-490 ميجابت/ثانية في الظروف المثالية، مع ضمان عدم انخفاضها عن 400 ميجابت/ثانية."
},
{
"question": "ما هي الباقات الموصى بها للألعاب عبر الإنترنت؟",
"answer": "نوصي بباقة 1 جيجابت/ثانية للألعاب (زمن استجابة أقل من 10ms) أو باقة 500 ميجابت/ثانية مع خوادم ألعاب مخصصة."
},
{
"question": "هل توجد باقات إنترنت للطلاب بأسعار خاصة؟",
"answer": "نعم، باقات الطلاب تبدأ من 150 جنيه (100 ميجابت/ثانية) مع اشتراط تقديم إثبات دراسة صالح."
},
{
"question": "ما هي تكلفة إعدادات الإنترنت الأولية؟",
"answer": "رسوم الإعداد 200 جنيه لمرة واحدة، لكننا نقدمها مجاناً حالياً مع أي باقة سنوية."
},
{
"question": "كم عدد الأجهزة التي يمكن توصيلها بباقة 1 جيجابت؟",
"answer": "باقة 1 جيجابت/ثانية تدعم حتى 50 جهازاً متصلاً في نفس الوقت دون تأثر الأداء."
},
{
"question": "ما هي باقات الإنترنت المؤقتة للزوار؟",
"answer": "لدينا باقات زوار لمدة 7 أيام (100 جيجابايت) بسعر 150 جنيه، أو 30 يومًا (300 جيجابايت) بـ 300 جنيه."
},
{
"question": "هل تختلف أسعار الباقات بين الفروع والموقع الإلكتروني؟",
"answer": "الأسعار واحدة، لكن قد تجد عروضاً حصرية على الموقع الإلكتروني أو في بعض الفروع حسب المنطقة."
},
{
"question": "ما هي باقات الإنترنت للشركات الصغيرة؟",
"answer": "باقات الشركات الصغيرة تبدأ من 300 جيجابايت شهرياً بـ 600 جنيه مع عنوان IP ثابت وخدمة دعم متميزة."
},
{
"question": "هل توجد باقات إنترنت بدون حدود استهلاك؟",
"answer": "نعم، الباقات غير المحدودة تبدأ من 600 جنيه شهرياً (200 ميجابت/ثانية) مع استهلاك عادل يصل إلى 1 تيرابايت."
}
]
# تحقق من وجود تخزين مسبق
if Path(EMBEDDINGS_PATH).exists() and Path(VECTORDB_PATH).exists():
try:
with open(EMBEDDINGS_PATH, "rb") as f:
embeddings = pickle.load(f)
vectorstore = FAISS.load_local(VECTORDB_PATH, embeddings)
return vectorstore.as_retriever()
except Exception as e:
st.warning(f"خطأ في تحميل البيانات المحفوظة: {str(e)}. سيتم إنشاء بيانات جديدة.")
# إنشاء بيانات جديدة إذا لم توجد
documents = [Document(page_content=f"سؤال: {faq['question']} جواب: {faq['answer']}") for faq in faq_data]
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/paraphrase-multilingual-mpnet-base-v2")
# حفظ الـ embeddings للاستخدام المستقبلي
with open(EMBEDDINGS_PATH, "wb") as f:
pickle.dump(embeddings, f)
# إنشاء وحفظ vectorstore
vectorstore = FAISS.from_documents(documents, embeddings)
vectorstore.save_local(VECTORDB_PATH)
return vectorstore.as_retriever()
# 3. LLM model
@st.cache_resource
def load_model():
return ChatOpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=load_api_key(),
model="mistralai/mistral-7b-instruct",
temperature=0.3
)
# 4. Prompt Engineering
template = """
أنت مساعد ذكي متخصص في خدمات شركة "اتصالات المستقبل".
يجب عليك الالتزام الصارم بالقواعد التالية:
1. استخدم فقط المعلومات المقدمة في قسم 'السياق' أدناه للإجابة.
2. إذا لم تجد الإجابة في السياق، قل: "عذراً، لا يمكنني الإجابة على هذا السؤال حالياً. يرجى الاتصال بخدمة العملاء على الرقم 00000 للمساعدة."
3. حافظ على نفس لغة السؤال (عربية/إنجليزية) في ردك.
السياق:
{context}
السؤال:
{question}
الإجابة:
"""
prompt = PromptTemplate(
input_variables=["context", "question"],
template=template,
)
# 5. Rag
@st.cache_resource
def create_qa_chain(_llm, _retriever):
return RetrievalQA.from_chain_type(
llm=_llm,
retriever=_retriever,
chain_type="stuff",
chain_type_kwargs={"prompt": prompt},
return_source_documents=False,
)
# UI
def main():
# أسلوب CSS مخصص للدردشة
st.markdown("""
<style>
.chat-container {
direction: rtl;
display: flex;
flex-direction: column;
gap: 10px;
margin-bottom: 20px;
}
.user-message {
background-color: #000000; /* أسود */
color: white; /* نص أبيض */
padding: 12px 16px;
border-radius: 18px 18px 0 18px;
align-self: flex-end;
max-width: 80%;
box-shadow: 0 1px 2px rgba(0,0,0,0.1);
}
.bot-message {
background-color: #E0E0E0; /* رمادي فاتح */
color: #000000; /* نص أسود */
padding: 12px 16px;
border-radius: 18px 18px 18px 0;
align-self: flex-start;
max-width: 80%;
box-shadow: 0 1px 2px rgba(0,0,0,0.1);
}
.stTextInput input, .stTextArea textarea {
border: 2px solid #4CAF50 !important;
border-radius: 10px !important;
padding: 10px !important;
}
.stButton button {
background-color: #4CAF50 !important;
color: white !important;
border-radius: 10px !important;
padding: 10px 24px !important;
width: 100% !important;
font-weight: bold !important;
}
</style>
""", unsafe_allow_html=True)
# رأس الصفحة
st.markdown('<h1 style="color: #2E86C1; text-align:center">📞 مساعد اتصالات المستقبل</h1>', unsafe_allow_html=True)
st.markdown("---")
# تهيئة حالة الجلسة لتخزين المحادثة
if 'chat_history' not in st.session_state:
st.session_state.chat_history = []
# عرض تاريخ المحادثة
with st.container():
st.markdown('<div class="chat-container">', unsafe_allow_html=True)
for message in st.session_state.chat_history:
if message['type'] == 'user':
st.markdown(f'<div class="user-message">👤 {message["content"]}</div>', unsafe_allow_html=True)
else:
st.markdown(f'<div class="bot-message">🤖 {message["content"]}</div>', unsafe_allow_html=True)
st.markdown('</div>', unsafe_allow_html=True)
try:
# تحميل المكونات
llm = load_model()
retriever = load_or_create_embeddings()
qa_chain = create_qa_chain(llm, retriever)
# قسم إدخال السؤال
user_query = st.text_area(
"اكتب رسالتك هنا:",
height=100,
placeholder="اطرح سؤالك عن خدماتنا...",
key="user_input"
)
col1, col2 = st.columns([1, 3])
with col1:
if st.button("إرسال", key="send_btn"):
if user_query.strip():
# إضافة سؤال المستخدم إلى التاريخ
st.session_state.chat_history.append({
'type': 'user',
'content': user_query
})
with st.spinner('جاري تحضير الإجابة...'):
# تحويل السؤال إلى فصحى
fusha_query = translate_to_fusha(user_query)
# الحصول على الإجابة
response = qa_chain.run(fusha_query)
# إضافة إجابة البوت إلى التاريخ
st.session_state.chat_history.append({
'type': 'bot',
'content': response
})
# إعادة تحميل الصفحة لعرض المحادثة الجديدة
st.rerun()
else:
st.warning("الرجاء إدخال سؤال قبل الإرسال")
with col2:
if st.button("مسح المحادثة", key="clear_btn"):
st.session_state.chat_history = []
st.rerun()
except Exception as e:
st.error(f"حدث خطأ: {str(e)}")
st.session_state.chat_history.append({
'type': 'bot',
'content': "عذراً، حدث خطأ في النظام. يرجى المحاولة مرة أخرى."
})
st.rerun()
if __name__ == "__main__":
main()