|
|
import logging |
|
|
from contextlib import asynccontextmanager |
|
|
from fastapi import FastAPI |
|
|
from fastapi.middleware.cors import CORSMiddleware |
|
|
from api.routes import router |
|
|
from config.settings import settings |
|
|
|
|
|
|
|
|
logging.basicConfig( |
|
|
level=logging.INFO, |
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' |
|
|
) |
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
|
|
|
@asynccontextmanager |
|
|
async def lifespan(app: FastAPI): |
|
|
""" |
|
|
Lifespan event handler for startup and shutdown |
|
|
""" |
|
|
|
|
|
logger.info("=" * 50) |
|
|
logger.info(f"Starting {settings.api_title} v{settings.api_version}") |
|
|
logger.info("=" * 50) |
|
|
|
|
|
if settings.groq_api_key: |
|
|
logger.info(f"Groq API Key: Configured (length: {len(settings.groq_api_key)})") |
|
|
logger.info(f"Groq Model: {settings.groq_model}") |
|
|
else: |
|
|
logger.error("GROQ_API_KEY is NOT set!") |
|
|
logger.error("WARNING: API will NOT function without valid API key") |
|
|
|
|
|
logger.info("=" * 50) |
|
|
|
|
|
yield |
|
|
|
|
|
|
|
|
logger.info("Shutting down API...") |
|
|
|
|
|
|
|
|
|
|
|
app = FastAPI( |
|
|
title=settings.api_title, |
|
|
version=settings.api_version, |
|
|
description=settings.api_description, |
|
|
lifespan=lifespan |
|
|
) |
|
|
|
|
|
|
|
|
app.add_middleware( |
|
|
CORSMiddleware, |
|
|
allow_origins=["*"], |
|
|
allow_credentials=True, |
|
|
allow_methods=["*"], |
|
|
allow_headers=["*"], |
|
|
) |
|
|
|
|
|
|
|
|
app.include_router(router, prefix="/api") |
|
|
|
|
|
|
|
|
@app.get("/") |
|
|
async def root(): |
|
|
"""Root endpoint""" |
|
|
return { |
|
|
"service": settings.api_title, |
|
|
"version": settings.api_version, |
|
|
"status": "running", |
|
|
"endpoints": { |
|
|
"docs": "/docs", |
|
|
"health": "/api/v1/health", |
|
|
"coding": "/api/coding", |
|
|
"upload": "/api/upload-file" |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@app.get("/api/v1/health") |
|
|
async def health_check(): |
|
|
"""Health check endpoint""" |
|
|
api_key_status = "configured" if settings.groq_api_key else "missing" |
|
|
|
|
|
return { |
|
|
"status": "healthy", |
|
|
"service": settings.api_title, |
|
|
"version": settings.api_version, |
|
|
"groq_api_key": api_key_status, |
|
|
"groq_model": settings.groq_model |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
import uvicorn |
|
|
uvicorn.run( |
|
|
"main:app", |
|
|
host="0.0.0.0", |
|
|
port=7860, |
|
|
reload=False |
|
|
) |