CoolFace
Apppublic

syedkhizarrayaz/BM-AI-Analysis-And-Alert-Prioritization-Agent

sourceHugging Faceupdated 8mo agoView on Hugging Face
0likes
direct_true_llm_server.py251 linesDownload Raw Back to root
1#!/usr/bin/env python32"""3Direct HTTP Server for True Local LLM AML Analysis4Bypasses FastAPI overhead for optimal performance with true LLM5"""6 7import json8import time9import threading10from http.server import HTTPServer, BaseHTTPRequestHandler11from urllib.parse import urlparse, parse_qs12import psutil13from optimized_true_local_llm_aml import get_optimized_true_local_llm_system14 15 16class DirectTrueLLMHandler(BaseHTTPRequestHandler):17    """Direct HTTP handler for true local LLM AML analysis"""18    19    def __init__(self, *args, **kwargs):20        self.llm_system = get_optimized_true_local_llm_system()21        super().__init__(*args, **kwargs)22    23    def do_POST(self):24        """Handle POST requests"""25        start_time = time.time()26        27        try:28            # Parse URL29            parsed_url = urlparse(self.path)30            31            if parsed_url.path == '/api/ai-service/generateanalysisjsontruellm':32                self._handle_true_llm_analysis()33            elif parsed_url.path == '/api/ai-service/generateanalysisjsontruellmstreaming':34                self._handle_true_llm_streaming()35            else:36                self._send_error_response(404, "Endpoint not found")37                38        except Exception as e:39            self._send_error_response(500, f"Internal server error: {str(e)}")40        41        end_time = time.time()42        total_time = (end_time - start_time) * 100043        print(f"⚡ Direct request time: {total_time:.2f}ms")44    45    def _handle_true_llm_analysis(self):46        """Handle true local LLM analysis request"""47        try:48            # Read request body49            content_length = int(self.headers['Content-Length'])50            post_data = self.rfile.read(content_length)51            52            # Parse JSON53            request_data = json.loads(post_data.decode('utf-8'))54            55            # Generate true local LLM analysis56            analysis_start = time.time()57            result = self.llm_system.analyze_with_optimized_llm(request_data)58            analysis_end = time.time()59            60            # Prepare response61            response_data = {62                "status": 200,63                "message": "Success",64                "data": [{65                    "AlertID": result["AlertID"],66                    "FocusColumnValue": result["FocusColumnValue"],67                    "analysis": result["analysis"],68                    "response_time_seconds": result["response_time_seconds"],69                    "method": result["method"],70                    "model": result.get("model", "qwen2.5:1.5b"),71                    "prompt_length": result.get("prompt_length", 0)72                }]73            }74            75            # Send response76            self._send_json_response(response_data)77            78            analysis_time = (analysis_end - analysis_start) * 100079            print(f"⚡ True LLM analysis: {analysis_time:.2f}ms")80            81        except Exception as e:82            self._send_error_response(500, f"Analysis error: {str(e)}")83    84    def _handle_true_llm_streaming(self):85        """Handle true local LLM streaming request"""86        try:87            # Read request body88            content_length = int(self.headers['Content-Length'])89            post_data = self.rfile.read(content_length)90            91            # Parse JSON92            request_data = json.loads(post_data.decode('utf-8'))93            94            # Generate true local LLM analysis95            result = self.llm_system.analyze_with_optimized_llm(request_data)96            97            # Prepare streaming response98            response_data = {99                "AlertID": result["AlertID"],100                "FocusColumnValue": result["FocusColumnValue"],101                "analysis": result["analysis"],102                "response_time_seconds": result["response_time_seconds"],103                "method": result["method"],104                "model": result.get("model", "qwen2.5:1.5b"),105                "prompt_length": result.get("prompt_length", 0)106            }107            108            # Send streaming response109            self._send_streaming_response(response_data)110            111        except Exception as e:112            self._send_error_response(500, f"Streaming error: {str(e)}")113    114    def _send_json_response(self, data):115        """Send JSON response"""116        response_json = json.dumps(data)117        118        self.send_response(200)119        self.send_header('Content-Type', 'application/json')120        self.send_header('Content-Length', str(len(response_json)))121        self.send_header('Access-Control-Allow-Origin', '*')122        self.send_header('Access-Control-Allow-Methods', 'POST, OPTIONS')123        self.send_header('Access-Control-Allow-Headers', 'Content-Type')124        self.end_headers()125        126        self.wfile.write(response_json.encode('utf-8'))127    128    def _send_streaming_response(self, data):129        """Send streaming response"""130        response_json = json.dumps(data)131        streaming_data = f"data: {response_json}\n\n"132        133        self.send_response(200)134        self.send_header('Content-Type', 'text/plain')135        self.send_header('Content-Length', str(len(streaming_data)))136        self.send_header('Cache-Control', 'no-cache')137        self.send_header('Connection', 'keep-alive')138        self.send_header('Access-Control-Allow-Origin', '*')139        self.end_headers()140        141        self.wfile.write(streaming_data.encode('utf-8'))142    143    def _send_error_response(self, status_code, message):144        """Send error response"""145        error_data = {146            "status": "error",147            "message": message148        }149        150        response_json = json.dumps(error_data)151        152        self.send_response(status_code)153        self.send_header('Content-Type', 'application/json')154        self.send_header('Content-Length', str(len(response_json)))155        self.end_headers()156        157        self.wfile.write(response_json.encode('utf-8'))158    159    def do_OPTIONS(self):160        """Handle CORS preflight requests"""161        self.send_response(200)162        self.send_header('Access-Control-Allow-Origin', '*')163        self.send_header('Access-Control-Allow-Methods', 'POST, OPTIONS')164        self.send_header('Access-Control-Allow-Headers', 'Content-Type')165        self.end_headers()166    167    def log_message(self, format, *args):168        """Override to reduce logging overhead"""169        pass  # Disable logging for maximum performance170 171 172class DirectTrueLLMServer:173    """Direct HTTP server for true local LLM AML analysis"""174    175    def __init__(self, host='localhost', port=8002):176        self.host = host177        self.port = port178        self.server = None179        self.server_thread = None180    181    def start(self):182        """Start the direct server"""183        try:184            self.server = HTTPServer((self.host, self.port), DirectTrueLLMHandler)185            self.server_thread = threading.Thread(target=self.server.serve_forever)186            self.server_thread.daemon = True187            self.server_thread.start()188            189            print(f"🚀 Direct True LLM Server started on {self.host}:{self.port}")190            print(f"⚡ Endpoints:")191            print(f"   POST /api/ai-service/generateanalysisjsontruellm")192            print(f"   POST /api/ai-service/generateanalysisjsontruellmstreaming")193            194        except Exception as e:195            print(f"❌ Failed to start server: {e}")196    197    def stop(self):198        """Stop the server"""199        if self.server:200            self.server.shutdown()201            self.server.server_close()202            print("🛑 Direct True LLM Server stopped")203 204 205def optimize_system_for_true_llm():206    """Optimize system for true local LLM performance"""207    import os208    209    # Set high priority for Python process210    try:211        import psutil212        current_process = psutil.Process()213        current_process.nice(psutil.HIGH_PRIORITY_CLASS)214        print("✅ Set high priority for Python process")215    except:216        print("⚠️ Could not set high priority")217    218    # Optimize Python settings219    os.environ['PYTHONUNBUFFERED'] = '1'220    os.environ['PYTHONDONTWRITEBYTECODE'] = '1'221    222    print("✅ System optimized for true local LLM performance")223 224 225if __name__ == "__main__":226    print("🏁 Starting Direct True Local LLM AML Analysis Server")227    print("=" * 60)228    229    # Optimize system230    optimize_system_for_true_llm()231    232    # Monitor resources233    memory = psutil.virtual_memory()234    cpu_count = psutil.cpu_count()235    print(f"💻 System Resources:")236    print(f"   CPU Cores: {cpu_count}")237    print(f"   RAM: {memory.total / (1024**3):.1f}GB")238    print(f"   RAM Usage: {memory.percent}%")239    240    # Start server241    server = DirectTrueLLMServer()242    server.start()243    244    try:245        print("\n🔄 Server running... Press Ctrl+C to stop")246        while True:247            time.sleep(1)248    except KeyboardInterrupt:249        print("\n🛑 Shutting down...")250        server.stop()251