Ë
    uPêj&#  ã                   ó¦   — d Z ddlmZ ddlmZ ddlmZm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)zP
Translates from OpenAI's `/v1/audio/transcriptions` to Deepgram's `/v1/listen`
é    )ÚFinal)Ú	urlencode)ÚHeadersÚResponse)Úprocess_audio_file)ÚBaseLLMException©Úget_secret_str)ÚAllMessageValuesÚ&OpenAIAudioTranscriptionOptionalParams)Ú	FileTypesÚTranscriptionResponseé   )ÚAudioTranscriptionRequestDataÚBaseAudioTranscriptionConfigé   ©ÚDeepgramExceptionc                   ó2  — e Z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z  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edefd„Z	 ddedz  dedz  dededededz  defd„Zdefd„Zdededefd„Z	 	 dd
ededee   dedededz  dedz  defd„Zy)Ú DeepgramAudioTranscriptionConfigÚmodelÚreturnc                 ó   — dgS )NÚlanguage© )Úselfr   s     ú}/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/deepgram/audio_transcription/transformation.pyÚget_supported_openai_paramsz<DeepgramAudioTranscriptionConfig.get_supported_openai_params   s
   € Øˆ|Ðó    Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 ól   — | j                  |«      }|j                  «       D ]  \  }}||v sŒ|||<   Œ |S ©N)r   Úitems)r   r    r!   r   r"   Úsupported_paramsÚkÚvs           r   Úmap_openai_paramsz2DeepgramAudioTranscriptionConfig.map_openai_params   sL   € ð #'×"BÑ"BÀ5Ó"IÐØ&×,Ñ,Ó.ò 	'‰DˆAˆqØÐ$Ò$Ø%&� Ò"ð	'ð Ðr   Úerror_messageÚstatus_codeÚheadersc                 ó   — t        |||¬«      S )N)Úmessager+   r,   r   )r   r*   r+   r,   s       r   Úget_error_classz0DeepgramAudioTranscriptionConfig.get_error_class+   s   € Ü ¨ÀKÐY`ÔaÐar   Ú
audio_fileÚlitellm_paramsc                 óF   — t        |«      }t        |j                  d¬«      S )a–  
        Processes the audio file input based on its type and returns AudioTranscriptionRequestData.

        For Deepgram, the binary audio data is sent directly as the request body.

        Args:
            audio_file: Can be a file path (str), a tuple (filename, file_content), or binary data (bytes).

        Returns:
            AudioTranscriptionRequestData with binary data and no files.
        N)ÚdataÚfiles)r   r   Úfile_content)r   r   r0   r!   r1   Úprocessed_audios         r   Ú%transform_audio_transcription_requestzFDeepgramAudioTranscriptionConfig.transform_audio_transcription_request.   s$   € ô& "4°JÓ!?ˆô -°/×2NÑ2NÐVZÔ[Ð[r   Úraw_responsec                 ó  — 	 |j                  «       }|d   d   d   }|d   d   }d}d|v rt        |d   «      dkD  r
d|d   d   v }|s|d   }n!d	|v r	|d	   d   }n| j                  |d   «      }t        |¬
«      }d|d<   |j	                  d«      }|r|nd|d<   |d   d   |d<   d|v r#|d   D �	cg c]  }	|	d   |	d   |	d   dœ‘Œ c}	|d<   ||_        |S c c}	w # t        $ r }
t        d|
› d|j                  › �«      ‚d}
~
ww xY w)z_
        Transforms the raw response from Deepgram to the TranscriptionResponse format
        ÚresultsÚchannelsr   ÚalternativesFÚwordsÚspeakerÚ
transcriptÚ
paragraphs)ÚtextÚ
transcribeÚtaskÚdetected_languageÚenr   ÚmetadataÚdurationÚwordÚstartÚend)rH   rI   rJ   z&Error transforming Deepgram response: z
Response: N)	ÚjsonÚlenÚ _reconstruct_diarized_transcriptr   ÚgetÚ_hidden_paramsÚ	ExceptionÚ
ValueErrorrA   )r   r8   Úresponse_jsonÚfirst_channelÚfirst_alternativeÚhas_diarizationrA   ÚresponserD   rH   Úes              r   Ú&transform_audio_transcription_responsezGDeepgramAudioTranscriptionConfig.transform_audio_transcription_responseG   s�  € ð0	jØ#/×#4Ñ#4Ó#6ˆMð $1°Ñ#;¸JÑ#GÈÑ#JˆMØ'4°^Ñ'DÀQÑ'GÐð $ˆOØÐ+Ñ+´Ð4EÀgÑ4NÓ0OÐRSÒ0SØ"+Ð/@ÀÑ/IÈ!Ñ/LÐ"L�ñ #à(¨Ñ6‘ØÐ!2Ñ2à(¨Ñ6°|ÑD‘ð ×<Ñ<Ð=NÈwÑ=WÓX�ô 4¸Ô>ˆHð  ,ˆH�VÑð (5×'8Ñ'8Ð9LÓ'MÐÙ8IÑ#4ÈtˆH�ZÑ à#0°Ñ#<¸ZÑ#HˆH�ZÑ ð Ð+Ñ+ð !2°'Ñ :ö%àð " &™\°D¸±MÈ$ÈuÉ+ÓVò%�˜Ñ!ð '4ˆHÔ#àˆOùò%øô ò 	jÜÐEÀaÀSÈÐUa×UfÑUfÐTgÐhÓiÐiûð	jús*   ‚B.C Â0CÃC ÃC Ã	DÃ#C>Ã>Dr=   c           	      ó„  — |syg }d}g }|D ]y  }|j                  d«      }|j                  d|j                  dd«      «      }||k7  r.|r&|j                  d|› ddj                  |«      › �«       |}|g}Œi|j                  |«       Œ{ |r'|j                  d	|› ddj                  |«      › d
�«       d
j                  |«      S )a
  
        Reconstructs a diarized transcript from words with speaker information.

        Args:
            words: List of word objects with speaker, word, and optionally punctuated_word

        Returns:
            Formatted transcript with speaker labels
        Ú Nr>   Úpunctuated_wordrH   zSpeaker z: ú z	
Speaker ú
)rN   ÚappendÚjoin)r   r=   ÚsegmentsÚcurrent_speakerÚcurrent_wordsÚword_objr>   Ú	word_texts           r   rM   zADeepgramAudioTranscriptionConfig._reconstruct_diarized_transcript€   sØ   € ñ ØàˆØˆØ#%ˆàò 	0ˆHØ—l‘l 9Ó-ˆGà Ÿ™Ð%6¸¿¹ÀVÈRÓ8PÓQˆIà˜/Ò)á Ø—O‘O h¨Ð.?¸rÀ#Ç(Á(È=ÓBYÐAZÐ$[Ô\Ø")�Ø!* ‘ð ×$Ñ$ YÕ/ð	0ñ  Ø�O‰O˜j¨Ð(9¸¸C¿H¹HÀ]Ó<SÐ;TÐTVÐWÔXà�y‰y˜Ó"Ð"r   NÚapi_baseÚapi_keyÚstreamc                 óÆ   — |€t        d«      xs d}|j                  d«      }d|i}| j                  ||«      }|j                  |«       |› d�}	t	        |«      }
|	› d|
› �}|S )NÚDEEPGRAM_API_BASEzhttps://api.deepgram.com/v1ú/r   z/listenú?)r
   ÚrstripÚ_build_query_paramsÚupdater   )r   re   rf   r   r!   r1   rg   Úall_query_paramsÚadditional_paramsÚbase_urlÚquery_stringÚurls               r   Úget_complete_urlz1DeepgramAudioTranscriptionConfig.get_complete_url¦   sˆ   € ð ÐÜ%Ð&9Ó:Ò[Ð>[ˆHØ—?‘? 3Ó'ˆð $+¨EÐ"2Ðð $(×#;Ñ#;¸OÈUÓ#SÐØ×ÑÐ 1Ô2ð &˜J gÐ.ˆÜ'Ð(8Ó9ˆØ �z  < .Ð1ˆàˆ
r   c                 ój   — t        |t        «      rt        |«      j                  «       S t        |«      S )z¹
        Formats a parameter value for use in query string.

        Args:
            value: The parameter value to format

        Returns:
            Formatted string value
        )Ú
isinstanceÚboolÚstrÚlower)r   Úvalues     r   Ú_format_param_valuez4DeepgramAudioTranscriptionConfig._format_param_valueÁ   s+   € ô �eœTÔ"Ü�u“:×#Ñ#Ó%Ð%Ü�5‹zÐr   c                 ó¬   — i }| j                  ||| j                  |«      ¬«      }|j                  «       D ]  \  }}| j                  |«      }|||<   Œ |S )a  
        Builds a dictionary of query parameters from optional_params.

        Args:
            optional_params: Dictionary of optional parameters
            model: Model name

        Returns:
            Dictionary of filtered and formatted query parameters
        )r!   r   Úopenai_params)Úget_provider_specific_paramsr   r%   r{   )r   r!   r   Úquery_paramsÚprovider_specific_paramsÚkeyrz   Úformatted_values           r   rm   z4DeepgramAudioTranscriptionConfig._build_query_paramsÏ   st   € ð !ˆØ*.×*KÑ*KØ+ØØ×:Ñ:¸5ÓAð +Ló +
Ð ð 3×8Ñ8Ó:ò 	0‰JˆC�à"×6Ñ6°uÓ=ˆOØ /ˆL˜Òð	0ð
 Ðr   Úmessagesc                 ó.   — |xs t        d«      }dd|› �iS )NÚDEEPGRAM_API_KEYÚAuthorizationzToken r	   )r   r,   r   rƒ   r!   r1   rf   re   s           r   Úvalidate_environmentz5DeepgramAudioTranscriptionConfig.validate_environmentè   s*   € ð Ò?œ^Ð,>Ó?ˆà˜v g YÐ/ð
ð 	
r   r$   )NN)Ú__name__Ú
__module__Ú__qualname__rx   Úlistr   r   Údictrw   r)   Úintr   r   r/   r   r   r7   r   r   rX   rM   rt   r{   rm   r   r‡   r   r   r   r   r      sÐ  „ ð°ð ¸Ð>dÑ9eó ðà ðð ðð ð	ð
 ðð 
óðb¨Sð b¸sð bÈTÐT[É^ð bÐ`pó bð\àð\ð ð\ð ð	\ð
 ð\ð 
'ó\ð27jàð7jð 
ó7jðr$#°dð $#¸só $#ðZ #ñà˜‘*ðð �t‘ðð ð	ð
 ðð ðð �t‘ðð 
óð6¨Có ð°4ð Àð Èó ð@ #Ø#ñ
àð
ð ð
ð Ð'Ñ(ð	
ð
 ð
ð ð
ð �t‘ð
ð ˜‘*ð
ð 
ô
r   r   N)Ú__doc__Útypingr   Úurllib.parser   Úhttpxr   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™      sB   ðñõ Ý "ç #å KÝ FÝ 7÷÷ A÷õ -ô[
Ð'Cõ [
r   