Add prompt and temperature args to OpenAI and Groq hosted Whisper STT services
This commit is contained in:
@@ -111,6 +111,8 @@ class BaseWhisperSTTService(SegmentedSTTService):
|
|||||||
api_key: Service API key. Defaults to None.
|
api_key: Service API key. Defaults to None.
|
||||||
base_url: Service API base URL. Defaults to None.
|
base_url: Service API base URL. Defaults to None.
|
||||||
language: Language of the audio input. Defaults to English.
|
language: Language of the audio input. Defaults to English.
|
||||||
|
prompt: Optional text to guide the model's style or continue a previous segment.
|
||||||
|
temperature: Sampling temperature between 0 and 1. Defaults to 0.0.
|
||||||
**kwargs: Additional arguments passed to SegmentedSTTService.
|
**kwargs: Additional arguments passed to SegmentedSTTService.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -121,12 +123,16 @@ class BaseWhisperSTTService(SegmentedSTTService):
|
|||||||
api_key: Optional[str] = None,
|
api_key: Optional[str] = None,
|
||||||
base_url: Optional[str] = None,
|
base_url: Optional[str] = None,
|
||||||
language: Optional[Language] = Language.EN,
|
language: Optional[Language] = Language.EN,
|
||||||
|
prompt: Optional[str] = None,
|
||||||
|
temperature: float = 0.0,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.set_model_name(model)
|
self.set_model_name(model)
|
||||||
self._client = self._create_client(api_key, base_url)
|
self._client = self._create_client(api_key, base_url)
|
||||||
self._language = self.language_to_service_language(language or Language.EN)
|
self._language = self.language_to_service_language(language or Language.EN)
|
||||||
|
self._prompt = prompt
|
||||||
|
self._temperature = temperature
|
||||||
|
|
||||||
def _create_client(self, api_key: Optional[str], base_url: Optional[str]):
|
def _create_client(self, api_key: Optional[str], base_url: Optional[str]):
|
||||||
return AsyncOpenAI(api_key=api_key, base_url=base_url)
|
return AsyncOpenAI(api_key=api_key, base_url=base_url)
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ class GroqSTTService(BaseWhisperSTTService):
|
|||||||
api_key: Groq API key. Defaults to None.
|
api_key: Groq API key. Defaults to None.
|
||||||
base_url: API base URL. Defaults to "https://api.groq.com/openai/v1".
|
base_url: API base URL. Defaults to "https://api.groq.com/openai/v1".
|
||||||
language: Language of the audio input. Defaults to English.
|
language: Language of the audio input. Defaults to English.
|
||||||
|
prompt: Optional text to guide the model's style or continue a previous segment.
|
||||||
|
temperature: Sampling temperature between 0 and 1. Defaults to 0.0.
|
||||||
**kwargs: Additional arguments passed to BaseWhisperSTTService.
|
**kwargs: Additional arguments passed to BaseWhisperSTTService.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -64,17 +66,35 @@ class GroqSTTService(BaseWhisperSTTService):
|
|||||||
api_key: Optional[str] = None,
|
api_key: Optional[str] = None,
|
||||||
base_url: str = "https://api.groq.com/openai/v1",
|
base_url: str = "https://api.groq.com/openai/v1",
|
||||||
language: Optional[Language] = Language.EN,
|
language: Optional[Language] = Language.EN,
|
||||||
|
prompt: Optional[str] = None,
|
||||||
|
temperature: float = 0.0,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
model=model, api_key=api_key, base_url=base_url, language=language, **kwargs
|
model=model,
|
||||||
|
api_key=api_key,
|
||||||
|
base_url=base_url,
|
||||||
|
language=language,
|
||||||
|
prompt=prompt,
|
||||||
|
temperature=temperature,
|
||||||
|
**kwargs,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def _transcribe(self, audio: bytes) -> Transcription:
|
async def _transcribe(self, audio: bytes) -> Transcription:
|
||||||
assert self._language is not None # Assigned in the BaseWhisperSTTService class
|
assert self._language is not None # Assigned in the BaseWhisperSTTService class
|
||||||
return await self._client.audio.transcriptions.create(
|
|
||||||
file=("audio.wav", audio, "audio/wav"),
|
# Build kwargs dict with only set parameters
|
||||||
model=self.model_name,
|
kwargs = {
|
||||||
response_format="json",
|
"file": ("audio.wav", audio, "audio/wav"),
|
||||||
language=self._language,
|
"model": self.model_name,
|
||||||
)
|
"response_format": "json",
|
||||||
|
"language": self._language,
|
||||||
|
}
|
||||||
|
|
||||||
|
if self._prompt is not None:
|
||||||
|
kwargs["prompt"] = self._prompt
|
||||||
|
|
||||||
|
if self._temperature is not None:
|
||||||
|
kwargs["temperature"] = self._temperature
|
||||||
|
|
||||||
|
return await self._client.audio.transcriptions.create(**kwargs)
|
||||||
|
|||||||
@@ -408,6 +408,8 @@ class OpenAISTTService(BaseWhisperSTTService):
|
|||||||
api_key: OpenAI API key. Defaults to None.
|
api_key: OpenAI API key. Defaults to None.
|
||||||
base_url: API base URL. Defaults to None.
|
base_url: API base URL. Defaults to None.
|
||||||
language: Language of the audio input. Defaults to English.
|
language: Language of the audio input. Defaults to English.
|
||||||
|
prompt: Optional text to guide the model's style or continue a previous segment.
|
||||||
|
temperature: Sampling temperature between 0 and 1. Defaults to 0.0.
|
||||||
**kwargs: Additional arguments passed to BaseWhisperSTTService.
|
**kwargs: Additional arguments passed to BaseWhisperSTTService.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -418,17 +420,37 @@ class OpenAISTTService(BaseWhisperSTTService):
|
|||||||
api_key: Optional[str] = None,
|
api_key: Optional[str] = None,
|
||||||
base_url: Optional[str] = None,
|
base_url: Optional[str] = None,
|
||||||
language: Optional[Language] = Language.EN,
|
language: Optional[Language] = Language.EN,
|
||||||
|
prompt: Optional[str] = None,
|
||||||
|
temperature: float = 0.0,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
model=model, api_key=api_key, base_url=base_url, language=language, **kwargs
|
model=model,
|
||||||
|
api_key=api_key,
|
||||||
|
base_url=base_url,
|
||||||
|
language=language,
|
||||||
|
prompt=prompt,
|
||||||
|
temperature=temperature,
|
||||||
|
**kwargs,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def _transcribe(self, audio: bytes) -> Transcription:
|
async def _transcribe(self, audio: bytes) -> Transcription:
|
||||||
assert self._language is not None # Assigned in the BaseWhisperSTTService class
|
assert self._language is not None # Assigned in the BaseWhisperSTTService class
|
||||||
return await self._client.audio.transcriptions.create(
|
|
||||||
file=("audio.wav", audio, "audio/wav"), model=self.model_name, language=self._language
|
# Build kwargs dict with only set parameters
|
||||||
)
|
kwargs = {
|
||||||
|
"file": ("audio.wav", audio, "audio/wav"),
|
||||||
|
"model": self.model_name,
|
||||||
|
"language": self._language,
|
||||||
|
}
|
||||||
|
|
||||||
|
if self._prompt is not None:
|
||||||
|
kwargs["prompt"] = self._prompt
|
||||||
|
|
||||||
|
if self._temperature is not None:
|
||||||
|
kwargs["temperature"] = self._temperature
|
||||||
|
|
||||||
|
return await self._client.audio.transcriptions.create(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
class OpenAITTSService(TTSService):
|
class OpenAITTSService(TTSService):
|
||||||
|
|||||||
Reference in New Issue
Block a user