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)