| 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 |
| ) |