OpenNL2SQL-API / main.py
amalsp's picture
Create main.py
e5ba825 verified
raw
history blame
2.49 kB
"""FastAPI Backend for OpenNL2SQL - Simplified for HuggingFace Spaces
Author: Amal SP
Created: December 2025
"""
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from typing import Optional, List, Dict, Any
import os
import logging
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# Initialize FastAPI app
app = FastAPI(
title="OpenNL2SQL API",
description="AI-powered Natural Language to SQL Analytics System",
version="1.0.0"
)
# CORS configuration
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Request/Response Models
class QueryRequest(BaseModel):
question: str
session_id: Optional[str] = None
class QueryResponse(BaseModel):
success: bool
sql: Optional[str] = None
results: Optional[List[Dict[str, Any]]] = None
sql_explanation: Optional[str] = None
results_explanation: Optional[str] = None
error: Optional[str] = None
session_id: str
@app.get("/")
async def root():
"""Health check endpoint"""
return {
"status": "healthy",
"service": "OpenNL2SQL API",
"version": "1.0.0",
"message": "FastAPI backend is running on Hugging Face Spaces!"
}
@app.get("/health")
async def health_check():
"""Detailed health check"""
return {
"status": "healthy",
"groq_api_configured": bool(os.getenv("GROQ_API_KEY")),
"service": "OpenNL2SQL API"
}
@app.post("/query", response_model=QueryResponse)
async def process_query(request: QueryRequest):
"""Process natural language query"""
# For now, return a placeholder response
# This will be integrated with GROQ API and full backend logic
session_id = request.session_id or "demo-session"
return QueryResponse(
success=True,
sql="SELECT * FROM demo_table LIMIT 10;",
results=[{"status": "Backend is running! Full implementation coming soon."}],
sql_explanation="This is a demo response. Full NL2SQL functionality will be integrated.",
results_explanation="The backend is successfully deployed on Hugging Face Spaces.",
session_id=session_id
)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860)