NetGuard-AI / src /api.py
Alireza Aminzadeh
Upload folder using huggingface_hub
199e55c verified
Raw
History Blame Contribute Delete
1.48 kB
from fastapi import FastAPI, Request
from pydantic import BaseModel
import torch
from src.model import AnomalyDetector, detect_anomaly
import logging
app = FastAPI(title="NetGuard-AI API", description="Real-Time Network Intrusion Detection API")
logger = logging.getLogger("netguard-api")
# Load Model
model = AnomalyDetector()
try:
model.load_state_dict(torch.load('models/autoencoder.pth', map_location='cpu'))
print("Model loaded successfully.")
except FileNotFoundError:
print("Warning: Model file not found. Using untrained model.")
model.eval()
class TrafficData(BaseModel):
features: list[float] # Expected length 41
@app.post("/predict")
async def predict(data: TrafficData):
"""
Receives a single network flow and predicts if it's anomalous.
"""
if len(data.features) != 41:
return {"error": "Invalid feature length. Expected 41."}
tensor_data = torch.tensor([data.features], dtype=torch.float32)
is_anomaly, score = detect_anomaly(model, tensor_data, threshold=0.5)
result = {
"is_anomaly": bool(is_anomaly.item()),
"anomaly_score": float(score.item()),
"status": "Blocked" if is_anomaly.item() else "Allowed"
}
if result["is_anomaly"]:
logger.warning(f"Intrusion Detected! Score: {result['anomaly_score']}")
return result
@app.get("/health")
def health_check():
return {"status": "healthy"}