alschameri/helping-source
0
1from flask import Flask, request, jsonify,send_from_directory,session2import os3import json4import random5import logging6from werkzeug.exceptions import BadRequest7import uuid8 9# Configure logging10logging.basicConfig(11 level=logging.INFO,12 format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'13)14logger = logging.getLogger(__name__)15 16app = Flask(__name__)17app.secret_key = "super_secret_and_unique_key_123" #18 19rag_system, gemini_client = None, None20 21@app.route("/")22def dashboard():23 initialize_services()24 return "Welcome to the Helping-source!"25 26@app.route("/get_visitor_count", methods=["GET", "POST"])27def get_visitor_count():28 from model import connect_to_postgres,VisitorCount29 30 db_url = os.environ.get('DB_URL')31 session_count, engine = connect_to_postgres(db_url)32 33 visitor = session_count.query(VisitorCount).first()34 if not visitor:35 visitor = VisitorCount(count=1)36 session_count.add(visitor)37 else:38 visitor.count += 139 session_count.commit()40 # 41 count = visitor.count if visitor else 042 session_count.close()43 return jsonify({"output": count})44 45 46def initialize_services():47 """Initialize RAG system and Gemini client."""48 global rag_system, gemini_client49 50 try:51 from gemini_client import GeminiClient52 from advance_rag_system import RAGSystem53 54 gemini_client = GeminiClient()55 rag_system = RAGSystem(gemini_client=gemini_client)56 # Initialize Gemini client57 58 logger.info("Gemini client initialized successfully")59 60 # Initialize RAG system61 # rag_system = RAGSystem(gemini_client=gemini_client)62 logger.info("RAG system initialized successfully")63 64 # Load or create index65 if not rag_system.load_index():66 logger.info("No existing index found, creating new one...")67 rag_system.create_index()68 69 except Exception as e:70 logger.error(f"Failed to initialize services: {e}")71 raise72 73# space line agency api74@app.route("/get_client_api", methods=["GET", "POST"])75def get_client_api():76 """Handle chat messages and return AI responses."""77 initialize_services()78 try:79 data = request.get_json()80 if not data or 'message' not in data:81 raise BadRequest("Missing message in request")82 83 user_message = data['message'].strip()84 session_id = data.get('session_id', str(uuid.uuid4()))85 86 # Store session ID for conversation context87 session['session_id'] = session_id88 89 logger.info(f"Processing message from session {session_id}: {user_message}")90 91 # Check for closing triggers92 closing_triggers = ["شكراً", "انتهى", "لا حاجة"]93 if any(trigger in user_message for trigger in closing_triggers):94 return jsonify({95 'response': 'شكراً لتواصلك! إذا احتجت أي مساعدة لاحقًا، أنا هنا دائمًا.',96 'suggested_questions': [],97 'session_id': session_id98 })99 100 # Retrieve relevant context using RAG101 contexts = rag_system.retrieve_with_context(user_message)102 logger.info(f"Retrieved {len(contexts)} context chunks")103 104 # Generate response using Gemini105 system_prompt = """أنت مساعد ذكي لوكالة السفر "سبيس لاين للسفريات". 106 - تجيب بأسلوب مهذب ومفيد باللغة العربية107 - تساعد العملاء في التخطيط للسفر والسياحة108 - تقدم معلومات عن الوجهات والخدمات109 - تكون إجاباتك واضحة ومختصرة (2-4 جمل)110 - تقترح 2 أسئلة متابعة مفيدة"""111 112 context_text = "\n\n".join([f"السياق {i+1}: {ctx['text']}" for i, ctx in enumerate(contexts)])113 114 response_data = gemini_client.generate_with_context(115 system_prompt=system_prompt,116 user_message=user_message,117 contexts=[ctx['text'] for ctx in contexts]118 )119 120 # Default suggested questions121 default_suggestions = [122 "ما هي عروض السفر؟",123 "التاشيرات", 124 "احجز رحلة",125 "معلومات إضافية"126 ]127 128 return jsonify({129 'response': response_data.get('text', 'عذراً، حدث خطأ في النظام. يرجى المحاولة مرة أخرى.'),130 'suggested_questions': response_data.get('suggested_questions', default_suggestions),131 'session_id': session_id132 })133 134 except Exception as e:135 logger.error(f"Error in chat endpoint: {e}")136 return jsonify({137 'error': 'حدث خطأ في النظام. يرجى المحاولة مرة أخرى.',138 'suggested_questions': ["ما هي عروض السفر؟", "عنّا", "التاشيرات", "احجز رحلة"]139 }), 500140 141 142if __name__ == "__main__":143 app.run()144 