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