from fastapi import FastAPI, File, UploadFile
from fastapi.middleware.cors import CORSMiddleware
from mvector.predict import MVectorPredictor
import os

app = FastAPI()

# 允许跨域
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"],
)

predictor = MVectorPredictor(configs='configs/ecapa_tdnn.yml')

@app.post("/recognize")
async def recognize(file: UploadFile = File(...)):
    try:
        audio_bytes = await file.read()
        result = predictor.recognition(audio_bytes)
        return {"status": 200, "data": result}
    except Exception as e:
        return {"status": 500, "error": str(e)}

@app.post("/compare") 
async def compare(file1: UploadFile = File(...), file2: UploadFile = File(...)):
    try:
        score = predictor.contrast(
            await file1.read(),
            await file2.read()
        )
        return {"similarity": float(score)}
    except Exception as e:
        return {"status": 500, "error": str(e)}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=9001)
