35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
from fastapi import FastAPI, UploadFile, File, HTTPException
|
|
from faster_whisper import WhisperModel
|
|
import io
|
|
|
|
app = FastAPI()
|
|
|
|
# Chargement du modèle sur ton GPU RTX 4060 Ti
|
|
# On utilise "cuda" et "float16" pour la vitesse maximale
|
|
model = WhisperModel("base", device="cuda", compute_type="float16")
|
|
|
|
@app.get("/v1/models")
|
|
async def get_models():
|
|
# Indispensable pour qu'Open WebUI voie le modèle dans la liste
|
|
return {"data": [{"id": "whisper-1"}]}
|
|
|
|
@app.post("/v1/audio/transcriptions")
|
|
async def transcribe(file: UploadFile = File(...)):
|
|
try:
|
|
# On lit le fichier envoyé par le micro
|
|
audio_data = await file.read()
|
|
audio_file = io.BytesIO(audio_data)
|
|
|
|
# Transcription ultra-rapide avec ton GPU
|
|
segments, _ = model.transcribe(audio_file, beam_size=5)
|
|
text = " ".join([segment.text for segment in segments])
|
|
|
|
return {"text": text}
|
|
except Exception as e:
|
|
print(f"Erreur transcription: {e}")
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
if __name__ == "__main__":
|
|
import uvicorn
|
|
# On lance sur le port 7860 comme prévu dans ton Docker-compose
|
|
uvicorn.run(app, host="0.0.0.0", port=7860) |