Files
whishper/transcription-api/backends/backend.py

68 lines
1.7 KiB
Python

from typing import Any, Mapping, TypedDict
import numpy as np
from faster_whisper.audio import decode_audio # type: ignore
SUPPORTED_MODELS = ["tiny", "tiny.en", "small", "small.en", "base", "base.en", "medium", "medium.en", "large-v2", "large-v3"]
WordData = TypedDict(
"WordData", {"word": str, "start": float | str, "end": float | str, "score": float}
)
Segment = TypedDict(
"Segment",
{
"id": str,
"text": str,
"start": float | str,
"end": float | str,
"score": float,
"words": list[WordData],
},
)
Transcription = TypedDict(
"Transcription",
{
"text": str,
"language": str,
"duration": float,
"segments": list[Segment],
},
)
class Backend:
name: str = "faster-whisper"
model_size: str
def __post_init__(self):
if self.model_size not in self.supported_model_sizes():
raise ValueError(f"model must be one of {self.supported_model_sizes()}")
def supported_backends(self):
"""
This is of not much use as of the moment, If we ever support multiple
backends this can be utilized.
"""
return ["faster-whisper"]
def model_path(self) -> str:
"""
Returns the local path to the model, error-out if unavailable
"""
raise NotImplementedError()
def supported_model_sizes(self) -> list[str]:
return SUPPORTED_MODELS
def download_model(self):
raise NotImplementedError()
def load(self):
raise NotImplementedError()
def transcribe(self, input: np.ndarray) -> list[Segment]:
"""
This should return word level transcription data.
"""
raise NotImplementedError()