from fastapi import FastAPI, Request from fastapi.templating import Jinja2Templates from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse import pandas as pd from pathlib import Path from app.backend.constant import Navigation, ModelProvider, EvaluationMetric, EmbdDtype, EmbdDim, Similarity from app.backend.data_engine import DataEngine app = FastAPI() # Mount static files app.mount("/static", StaticFiles(directory="app/static"), name="static") # Templates templates = Jinja2Templates(directory="app/templates") # Initialize data engine data_engine = DataEngine() @app.get("/", response_class=HTMLResponse) async def home(request: Request, tab: str = "text"): # Get initial data based on tab if tab == "multimodal": data = data_engine.get_filtered_data(navigation="multimodal") else: data = data_engine.get_data() # Convert data to list for template rendering data_list = data.values.tolist() columns = data.columns.tolist() return templates.TemplateResponse("index.html", { "request": request, "active_tab": tab, "data": data_list, "columns": columns, "navigations": [e.value for e in Navigation], "embd_types": [e.value for e in EmbdDtype], "embd_dims": [e.value for e in EmbdDim], "similarities": [e.value for e in Similarity] }) @app.post("/api/filter") async def filter_data(filters: dict): # Apply filters to data data = data_engine.get_filtered_data( navigation=filters.get('navigation'), embd_type=filters.get('embd_type'), embd_dims=filters.get('embd_dims'), similarity=filters.get('similarity') ) # Convert to list for JSON response return data.values.tolist() if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=7890)