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