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