Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 13 additions & 12 deletions pyrit/backend/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
FastAPI application entry point for PyRIT backend.
"""

import logging
import os
from collections.abc import AsyncGenerator
from contextlib import asynccontextmanager
Expand All @@ -18,21 +19,27 @@
from pyrit.backend.middleware import register_error_handlers
from pyrit.backend.routes import attacks, converters, health, labels, targets, version
from pyrit.memory import CentralMemory
from pyrit.setup.initialization import initialize_pyrit_async

# Check for development mode from environment variable
DEV_MODE = os.getenv("PYRIT_DEV_MODE", "false").lower() == "true"

logger = logging.getLogger(__name__)


@asynccontextmanager
async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
"""Manage application startup and shutdown lifecycle."""
# When launched via pyrit_backend CLI, initialization is already done.
# Only initialize here for standalone uvicorn usage (e.g. uvicorn pyrit.backend.main:app).
if not CentralMemory._memory_instance:
await initialize_pyrit_async(memory_db_type="SQLite")
# Initialization is handled by the pyrit_backend CLI before uvicorn starts.
# Running 'uvicorn pyrit.backend.main:app' directly is not supported;
# use 'pyrit_backend' instead.
try:
CentralMemory.get_memory_instance()
except ValueError:
logger.warning(
"CentralMemory is not initialized. "
"Start the server via 'pyrit_backend' CLI instead of running uvicorn directly."
)
yield
# Shutdown: nothing to clean up currently


app = FastAPI(
Expand Down Expand Up @@ -91,9 +98,3 @@ def setup_frontend() -> None:

# Set up frontend at module load time (needed when running via uvicorn)
setup_frontend()


if __name__ == "__main__":
import uvicorn

uvicorn.run(app, host="0.0.0.0", port=8000, log_level="info")
4 changes: 2 additions & 2 deletions pyrit/backend/mappers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

from pyrit.backend.mappers.attack_mappers import (
attack_result_to_summary,
pyrit_messages_to_dto,
pyrit_messages_to_dto_async,
pyrit_scores_to_dto,
request_piece_to_pyrit_message_piece,
request_to_pyrit_message,
Expand All @@ -25,7 +25,7 @@
__all__ = [
"attack_result_to_summary",
"converter_object_to_instance",
"pyrit_messages_to_dto",
"pyrit_messages_to_dto_async",
"pyrit_scores_to_dto",
"request_piece_to_pyrit_message_piece",
"request_to_pyrit_message",
Expand Down
Loading
Loading