parthmax24's picture
Initial commit
52de2ff
import os
import pandas as pd
from fastapi import FastAPI, Request, Form
from fastapi.responses import JSONResponse, HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from dotenv import load_dotenv
from pathlib import Path
from chatbot import WatershedChatbot
load_dotenv()
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")
chatbot = WatershedChatbot()
csv_path = Path(__file__).resolve().parent / "summary.csv"
try:
summary_df = pd.read_csv(csv_path)
except FileNotFoundError:
dummy_data = pd.DataFrame([
{
"district": "Example District",
"cropping_intensity": 100,
"soil_loss": 10,
"check_dams": 5,
"reforested_area": 200
}
])
dummy_data.to_csv(csv_path, index=False)
summary_df = dummy_data
print(f"[INFO] Created dummy summary.csv at {csv_path}")
summary_df.columns = summary_df.columns.str.lower().str.strip()
@app.get("/", response_class=HTMLResponse)
async def get_home(request: Request):
districts = ["All"] + sorted(summary_df["district"].unique().tolist())
summary_data = summary_df.to_dict(orient="records")
return templates.TemplateResponse("index.html", {
"request": request,
"districts": districts,
"summary_data": summary_data
})
@app.post("/api/chat")
async def chat_endpoint(query: str = Form(...), district: str = Form(None)):
try:
response = chatbot.answer_query(query, district)
return JSONResponse(content=response)
except Exception as e:
return JSONResponse(status_code=500, content={"error": str(e)})