Spaces:
Paused
Paused
| from typing import List, Optional, Union | |
| from httpx import Headers | |
| from litellm.llms.base_llm.audio_transcription.transformation import ( | |
| BaseAudioTranscriptionConfig, | |
| ) | |
| from litellm.llms.base_llm.chat.transformation import BaseLLMException | |
| from litellm.secret_managers.main import get_secret_str | |
| from litellm.types.llms.openai import ( | |
| AllMessageValues, | |
| OpenAIAudioTranscriptionOptionalParams, | |
| ) | |
| from litellm.types.utils import FileTypes | |
| from ..common_utils import OpenAIError | |
| class OpenAIWhisperAudioTranscriptionConfig(BaseAudioTranscriptionConfig): | |
| def get_supported_openai_params( | |
| self, model: str | |
| ) -> List[OpenAIAudioTranscriptionOptionalParams]: | |
| """ | |
| Get the supported OpenAI params for the `whisper-1` models | |
| """ | |
| return [ | |
| "language", | |
| "prompt", | |
| "response_format", | |
| "temperature", | |
| "timestamp_granularities", | |
| ] | |
| def map_openai_params( | |
| self, | |
| non_default_params: dict, | |
| optional_params: dict, | |
| model: str, | |
| drop_params: bool, | |
| ) -> dict: | |
| """ | |
| Map the OpenAI params to the Whisper params | |
| """ | |
| supported_params = self.get_supported_openai_params(model) | |
| for k, v in non_default_params.items(): | |
| if k in supported_params: | |
| optional_params[k] = v | |
| return optional_params | |
| def validate_environment( | |
| self, | |
| headers: dict, | |
| model: str, | |
| messages: List[AllMessageValues], | |
| optional_params: dict, | |
| litellm_params: dict, | |
| api_key: Optional[str] = None, | |
| api_base: Optional[str] = None, | |
| ) -> dict: | |
| api_key = api_key or get_secret_str("OPENAI_API_KEY") | |
| auth_header = { | |
| "Authorization": f"Bearer {api_key}", | |
| } | |
| headers.update(auth_header) | |
| return headers | |
| def transform_audio_transcription_request( | |
| self, | |
| model: str, | |
| audio_file: FileTypes, | |
| optional_params: dict, | |
| litellm_params: dict, | |
| ) -> dict: | |
| """ | |
| Transform the audio transcription request | |
| """ | |
| data = {"model": model, "file": audio_file, **optional_params} | |
| if "response_format" not in data or ( | |
| data["response_format"] == "text" or data["response_format"] == "json" | |
| ): | |
| data[ | |
| "response_format" | |
| ] = "verbose_json" # ensures 'duration' is received - used for cost calculation | |
| return data | |
| def get_error_class( | |
| self, error_message: str, status_code: int, headers: Union[dict, Headers] | |
| ) -> BaseLLMException: | |
| return OpenAIError( | |
| status_code=status_code, | |
| message=error_message, | |
| headers=headers, | |
| ) | |