TradingAgents/backend/app/main.py

72 lines
1.7 KiB
Python

"""
FastAPI application entry point for TradingAgentsX Backend
"""
from fastapi import FastAPI
from fastapi.responses import JSONResponse
import logging
import sys
from pathlib import Path
from backend.app.core.config import settings
from backend.app.core.cors import setup_cors
from backend.app.api.routes import router
# Configure logging
logging.basicConfig(
level=logging.INFO if settings.debug else logging.WARNING,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
)
logger = logging.getLogger(__name__)
# Create FastAPI application
app = FastAPI(
title=settings.app_name,
version=settings.app_version,
description="Multi-Agent LLM Financial Trading Framework - REST API",
docs_url="/docs",
redoc_url="/redoc",
)
# Setup CORS
setup_cors(app)
# Include API routes
app.include_router(router)
@app.get("/")
async def root():
"""Root endpoint"""
return {
"message": "Welcome to TradingAgentsX API",
"version": settings.app_version,
"docs": "/docs",
"health": "/api/health",
}
@app.exception_handler(Exception)
async def global_exception_handler(request, exc):
"""Global exception handler"""
logger.error(f"Unhandled exception: {str(exc)}", exc_info=True)
return JSONResponse(
status_code=500,
content={
"error": "Internal server error",
"detail": str(exc), # Always return detailed error for user debugging
"type": type(exc).__name__,
},
)
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"app.main:app",
host="0.0.0.0",
port=8000,
reload=settings.debug,
log_level="info" if settings.debug else "warning",
)