Signed-off-by: Bhanu068 <voutharoja.bhanu06@gmail.com> Signed-off-by: Bhanu Prakash Voutharoja <59905694+Bhanu068@users.noreply.github.com> Co-authored-by: Hongsheng Liu <liuhongsheng4@huawei.com> Co-authored-by: Yueqian Lin <70319226+linyueqian@users.noreply.github.com>
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from typing import Literal
|
|
|
|
import numpy as np
|
|
from pydantic import BaseModel, Field, field_validator
|
|
|
|
|
|
class OpenAICreateSpeechRequest(BaseModel):
|
|
input: str
|
|
model: str | None = None
|
|
voice: Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"]
|
|
instructions: str | None = None
|
|
response_format: Literal["wav", "pcm", "flac", "mp3", "aac", "opus"]
|
|
speed: float | None = Field(
|
|
default=1.0,
|
|
ge=0.25,
|
|
le=4.0,
|
|
)
|
|
stream_format: Literal["sse", "audio"] | None = "audio"
|
|
|
|
@field_validator("stream_format")
|
|
@classmethod
|
|
def validate_stream_format(cls, v: str) -> str:
|
|
if v == "sse":
|
|
raise ValueError("'sse' is not a supported stream_format yet. Please use 'audio'.")
|
|
return v
|
|
|
|
|
|
class CreateAudio(BaseModel):
|
|
audio_tensor: np.ndarray
|
|
sample_rate: int = 24000
|
|
response_format: str = "wav"
|
|
speed: float = 1.0
|
|
stream_format: Literal["sse", "audio"] | None = "audio"
|
|
base64_encode: bool = True
|
|
|
|
class Config:
|
|
arbitrary_types_allowed = True
|
|
|
|
|
|
class AudioResponse(BaseModel):
|
|
audio_data: bytes | str
|
|
media_type: str
|