feat: remote Whisper via whisper.base_url — OpenAI-compatible upload
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import asyncio
|
||||
import httpx
|
||||
|
||||
|
||||
class TranscriptionEngine:
|
||||
@@ -23,6 +24,27 @@ class TranscriptionEngine:
|
||||
language: str = "de",
|
||||
model_name: str = "large-v3",
|
||||
device: str = "auto",
|
||||
base_url: str = "",
|
||||
) -> str:
|
||||
if base_url:
|
||||
return await self._transcribe_remote(audio_path, language, model_name, base_url)
|
||||
return await self._transcribe_local(audio_path, language, model_name, device)
|
||||
|
||||
async def _transcribe_remote(
|
||||
self, audio_path: str, language: str, model_name: str, base_url: str
|
||||
) -> str:
|
||||
async with httpx.AsyncClient(timeout=300) as client:
|
||||
with open(audio_path, "rb") as f:
|
||||
r = await client.post(
|
||||
f"{base_url}/v1/audio/transcriptions",
|
||||
files={"file": ("audio.wav", f, "audio/wav")},
|
||||
data={"model": model_name, "language": language},
|
||||
)
|
||||
r.raise_for_status()
|
||||
return r.json()["text"]
|
||||
|
||||
async def _transcribe_local(
|
||||
self, audio_path: str, language: str, model_name: str, device: str
|
||||
) -> str:
|
||||
loop = asyncio.get_event_loop()
|
||||
model = self._get_model(model_name, device)
|
||||
|
||||
Reference in New Issue
Block a user