
    h                         d Z ddlmZmZmZ ddlmZmZ ddlZddl	m
Z
 ddlmZ ddlmZ ddlmZmZ dd	lmZmZ d
dlmZmZ ddlmZ  G d de      Zy)zZ
Translates from OpenAI's `/v1/audio/transcriptions` to ElevenLabs's `/v1/speech-to-text`
    )ListOptionalUnion)HeadersResponseN)process_audio_file)BaseLLMException)get_secret_str)AllMessageValues&OpenAIAudioTranscriptionOptionalParams)	FileTypesTranscriptionResponse   )AudioTranscriptionRequestDataBaseAudioTranscriptionConfig   ElevenLabsExceptionc                      e Zd Zedefd       Zdedee   fdZde	de	dede
de	f
dZd	ed
edee	ef   defdZdedede	de	def
dZdedefdZ	 ddee   dee   dede	de	dee
   defdZ	 	 dde	dedee   de	de	dee   dee   de	fdZy)"ElevenLabsAudioTranscriptionConfigreturnc                 J    t         j                  j                  j                  S N)litellmLlmProviders
ELEVENLABSvalue)selfs    v/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/elevenlabs/audio_transcription/transformation.pycustom_llm_providerz6ElevenLabsAudioTranscriptionConfig.custom_llm_provider   s    ##..444    modelc                 
    ddgS )Nlanguagetemperature )r   r"   s     r   get_supported_openai_paramsz>ElevenLabsAudioTranscriptionConfig.get_supported_openai_params   s     M**r!   non_default_paramsoptional_paramsdrop_paramsc                     | j                  |      }|j                         D ]  \  }}||v s|dk(  r||d<   |||<    |S )Nr$   language_code)r'   items)r   r(   r)   r"   r*   supported_paramskvs           r   map_openai_paramsz4ElevenLabsAudioTranscriptionConfig.map_openai_params$   sX      ;;EB&,,.DAq$$
?78OO4)*OA& / r!   error_messagestatus_codeheadersc                     t        |||      S )N)messager3   r4   r   )r   r2   r3   r4   s       r   get_error_classz2ElevenLabsAudioTranscriptionConfig.get_error_class5   s     #!{G
 	
r!   
audio_filelitellm_paramsc                    t        |      }d|i}|j                         D ]*  \  }}|| j                  |      v s|t        |      ||<   , | j	                  ||| j                  |            }	|	j                         D ]  \  }}t        |      ||<    d|j
                  |j                  |j                  fi}
t        ||
      S )a  
        Transforms the audio transcription request for ElevenLabs API.
        
        Returns AudioTranscriptionRequestData with both form data and files.
        
        Returns:
            AudioTranscriptionRequestData: Structured data with form data and files
        model_id)r"   r)   openai_paramsfile)datafiles)	r   r-   r'   strget_provider_specific_paramsfilenamefile_contentcontent_typer   )r   r"   r8   r)   r9   processed_audio	form_datakeyr   provider_specific_paramsr?   s              r   %transform_audio_transcription_requestzHElevenLabsAudioTranscriptionConfig.transform_audio_transcription_request<   s    " -Z8  '	 *//1JCd66u==%BS!$U	# 2 $(#D#D+::5A $E $
  388:JC ZIcN ; /22O4P4PRaRnRnop,
 	
r!   raw_responsec           	         	 |j                         }|j                  dd      }t        |      }d|d<   |j                  dd      |d<   d	|v rlg |d	<   |d	   D ]_  }|j                  d
      dk(  s|d	   j                  |j                  dd      |j                  dd      |j                  dd      d       a ||_        |S # t
        $ r)}t        dt        |       d|j                         d}~ww xY w)za
        Transforms the raw response from ElevenLabs to the TranscriptionResponse format
        text )rL   
transcribetaskr,   unknownr$   wordstypewordstartr   end)rS   rT   rU   z(Error transforming ElevenLabs response: z
Response: N)	jsongetr   append_hidden_params	Exception
ValueErrorr@   rL   )r   rJ   response_jsonrL   response	word_dataes          r   &transform_audio_transcription_responsezIElevenLabsAudioTranscriptionConfig.transform_audio_transcription_responser   s   !	(--/M !$$VR0D -$7H  ,HV#0#4#4_i#PHZ  -'$&!!.w!7I }}V,6 )00$-MM&"$=%.]]7A%>#,==#:2  "8 '4H#O 	:3q6(,|O`O`Nab 	s   A-C 0AC 	C5$C00C5Napi_baseapi_keystreamc                 T    |t        d      xs d}|j                  d      }| d}|S )NELEVENLABS_API_BASEzhttps://api.elevenlabs.io/z/v1/speech-to-text)r
   rstrip)r   ra   rb   r"   r)   r9   rc   urls           r   get_complete_urlz3ElevenLabsAudioTranscriptionConfig.get_complete_url   sB     45T9T  ??3' 
,-
r!   messagesc                 h    |xs t        d      }|t        d      d|i}|j                  |       |S )NELEVENLABS_API_KEYzLElevenLabs API key is required. Set ELEVENLABS_API_KEY environment variable.z
xi-api-key)r
   r[   update)	r   r4   r"   rj   r)   r9   rb   ra   auth_headers	            r   validate_environmentz7ElevenLabsAudioTranscriptionConfig.validate_environment   sJ     A^,@A?^ 
 '
 	{#r!   r   )NN)__name__
__module____qualname__propertyr@   r    r   r   r'   dictboolr1   intr   r   r	   r7   r   r   rI   r   r   r`   r   ri   r   ro   r&   r!   r   r   r      s   5S 5 5++	4	5+
   	
  
"
 
/2
=B4==Q
	
3
3
 3
 	3

 3
 
'3
l(( 
(b "&3- # 	
    
6 "&"&  '(	
   # 3- 
r!   r   )__doc__typingr   r   r   httpxr   r   r   ,litellm.litellm_core_utils.audio_utils.utilsr   )litellm.llms.base_llm.chat.transformationr	   litellm.secret_managers.mainr
   litellm.types.llms.openair   r   litellm.types.utilsr   r   +base_llm.audio_transcription.transformationr   r   common_utilsr   r   r&   r!   r   <module>r      sE    ) ( #  K F 7 A /k)E kr!   