from fastapi import FastAPI, HTTPException from pydantic import BaseModel from llama_cpp import Llama from functools import lru_cache import uvicorn # Initialize FastAPI app app = FastAPI() # Lazy load the Llama model @lru_cache(maxsize=1) def load_model(): try: return Llama.from_pretrained( repo_id="prithivMLmods/Llama-3.2-1B-GGUF", filename="Llama-3.2-1B.F16.gguf" ) except Exception as e: raise RuntimeError(f"Failed to load model: {e}") # Define request model for log data class LogRequest(BaseModel): log_data: str # Define response model class AnalysisResponse(BaseModel): analysis: str # Define the route for security log analysis @app.post("/analyze_security_logs", response_model=AnalysisResponse) async def analyze_security_logs(request: LogRequest): llm = load_model() try: # Security-focused prompt prompt = ( "Analyze the following network log data for any indicators of malicious activity, " "such as unusual IP addresses, unauthorized access attempts, data exfiltration, or anomalies. " "Provide details on potential threats, IPs involved, and suggest actions if any threats are detected.\n\n" f"{request.log_data}" ) # Generate response from the Llama model response = llm.create_chat_completion( messages=[ { "role": "user", "content": prompt } ] ) # Extract and return the analysis text analysis_text = response["choices"][0]["message"]["content"] return AnalysisResponse(analysis=analysis_text) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) # Run the FastAPI app using uvicorn if __name__ == "__main__": uvicorn.run("app:app", host="0.0.0.0", port=8000, workers=4, reload=True)