import io import pandas as pd from app.db.db import db_dependency, init_database from fastapi import FastAPI, File, UploadFile from app.services.openrouter import InvestorProcessor from app.pydantic_schemas import QueryRequest, QueryResponseList from app.services.langgraph_agent import LangGraphQueryAgent app = FastAPI() init_database() @app.get("/") def read_root(): return {"Hello": "World"} @app.post("/parse-csv") async def parse_csv(db: db_dependency, file: UploadFile = File(...)): # Read uploaded CSV with pandas content = await file.read() df = pd.read_csv(io.StringIO(content.decode("utf-8"))) # Process the dataframe processor = InvestorProcessor(sql_session=db) results = await processor.process_csv(df) # Convert Pydantic objects to dictionaries return {"results": [r.dict() for r in results]} @app.post("/query", response_model=QueryResponseList) async def query_investors(db: db_dependency, request: QueryRequest): agent = LangGraphQueryAgent(sql_session=db) result = agent.run(request.question) return result if __name__ == "__main__": import uvicorn uvicorn.run(app="main:app", host="localhost", port=8000, reload=True)