David Pomerenke
Speed things up
566c57e
raw
history blame
1.89 kB
import json
import numpy as np
import pandas as pd
import uvicorn
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.middleware.gzip import GZipMiddleware
from fastapi.responses import JSONResponse
from fastapi.staticfiles import StaticFiles
from languages import languages
from models import models
from tables import aggregate, make_country_table, make_language_table, make_model_table
app = FastAPI()
app.add_middleware(CORSMiddleware, allow_origins=["*"])
app.add_middleware(GZipMiddleware, minimum_size=1000)
with open("results.json", "r") as f:
results = pd.DataFrame(json.load(f))
def serialize(df):
return df.replace({np.nan: None}).to_dict(orient="records")
@app.post("/api/data")
async def data(request: Request):
body = await request.body()
data = json.loads(body)
selected_languages = data.get("selectedLanguages", {})
df = results
_, lang_results, model_results, task_results = aggregate(df)
# lang_results = pd.merge(languages, lang_results, on="bcp_47", how="outer")
language_table = make_language_table(lang_results, languages)
datasets_df = pd.read_json("data/datasets.json")
countries = make_country_table(language_table)
if selected_languages:
# the filtering is only applied for the model table
df = df[df["bcp_47"].isin(lang["bcp_47"] for lang in selected_languages)]
model_table = make_model_table(model_results, models)
all_tables = {
"model_table": serialize(model_table),
"language_table": serialize(language_table),
"dataset_table": serialize(datasets_df),
"countries": serialize(countries),
}
return JSONResponse(content=all_tables)
app.mount("/", StaticFiles(directory="frontend/public", html=True), name="frontend")
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)