AI_Detector / app.py
Tany Nguyen
running server
b25f064
from fastapi import FastAPI, HTTPException, Depends
import os
import logging
import uvicorn
from dotenv import load_dotenv
from src.auth import get_api_key
from src.schemas import DetectionRequest, DetectionResponse
from src.services.ai_detector import ai_detector_service
from src.services.language_detector import language_detector_service
from src.middleware.request_logging import RequestLoggingMiddleware
# Load environment variables
load_dotenv()
# Configure logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
datefmt="%Y-%m-%d %H:%M:%S"
)
app = FastAPI(title="AI Text Detector API")
app.add_middleware(RequestLoggingMiddleware)
@app.on_event("startup")
async def startup_event():
language_detector_service.initialize()
ai_detector_service.initialize()
@app.get("/")
def root():
return {"message": "AI Text Detector API is running. Visit /docs for documentation."}
@app.get("/health")
def health_check():
return ai_detector_service.get_status()
@app.post("/detect", response_model=DetectionResponse)
async def detect(request: DetectionRequest, api_key: str = Depends(get_api_key)):
try:
# Detect language
lang = language_detector_service.detect_language(request.text)
if lang != "en":
# Optional: Decide if we want to block non-English or just warn.
# The requirements said "Keep the fasttext detector before passing to the AI text detector".
# Assuming we should strict block like before.
raise HTTPException(status_code=422, detail="Only English text is supported for accuracy")
result = ai_detector_service.detect(request.text)
return result
except HTTPException as he:
raise he
except RuntimeError:
raise HTTPException(status_code=503, detail="Model not initialized")
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__":
port = int(os.environ.get("PORT", 8080))
uvicorn.run(app, host="0.0.0.0", port=port)