|
|
import logging |
|
|
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__) |
|
|
|
|
|
|
|
|
app = FastAPI( |
|
|
title=settings.api_title, |
|
|
version=settings.api_version, |
|
|
description=settings.api_description |
|
|
) |
|
|
|
|
|
|
|
|
app.add_middleware( |
|
|
CORSMiddleware, |
|
|
allow_origins=["*"], |
|
|
allow_credentials=True, |
|
|
allow_methods=["*"], |
|
|
allow_headers=["*"], |
|
|
) |
|
|
|
|
|
|
|
|
app.include_router(router, prefix="/api") |
|
|
|
|
|
@app.on_event("startup") |
|
|
async def startup_event(): |
|
|
"""Log startup information""" |
|
|
logger.info("=" * 50) |
|
|
logger.info(f"🚀 {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("⚠️ API will NOT function without valid API key") |
|
|
|
|
|
logger.info("=" * 50) |
|
|
|
|
|
@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 |
|
|
} |