File size: 1,147 Bytes
bcb314a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from fastapi import FastAPI, Request, UploadFile, File
from fastapi.responses import HTMLResponse, StreamingResponse
from fastapi.templating import Jinja2Templates
import requests

app = FastAPI(title="Scoring UI")
templates = Jinja2Templates(directory="templates")

# 🔧 Локальный адрес FastAPI-сервера
API_URL = "http://localhost:8000/predict_csv"

@app.get("/", response_class=HTMLResponse)
async def home(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

@app.get("/health")
async def health():
    return {"status": "ok", "service": "scoring-ui"}

@app.post("/predict")
async def predict_csv(file: UploadFile = File(...)):
    files = {"file": (file.filename, await file.read(), file.content_type)}
    try:
        resp = requests.post(API_URL, files=files, timeout=1800)
        resp.raise_for_status()
        return StreamingResponse(
            iter([resp.content]),
            media_type="text/csv",
            headers={"Content-Disposition": f'attachment; filename="predicted_{file.filename}"'}
        )
    except Exception as e:
        return {"error": str(e)}