Spaces:
Sleeping
Sleeping
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 | |
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 | |
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) | |