Ë
    uPêjã  ã                   ó°   — d Z ddl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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  G d„ de«      Z G d„ de«      Zy)z©
Azure AI Speech (Cognitive Services) speech-to-text transformation.

Maps OpenAI-compatible audio transcription calls to Azure Speech REST
recognition for short audio.
é    )ÚAnyÚFinal)Ú	urlencodeÚurlparseN)Úprocess_audio_file)ÚAudioTranscriptionRequestDataÚBaseAudioTranscriptionConfig)ÚBaseLLMException)Úget_secret_str)ÚAllMessageValuesÚ&OpenAIAudioTranscriptionOptionalParams)Ú	FileTypesÚTranscriptionResponsec                   ó   — e Zd Zy)Ú&AzureSpeechAudioTranscriptionExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    úz/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/azure/audio_transcription/transformation.pyr   r      s   „ Ør   r   c                   óÒ  — e Zd ZdZdZdZd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*dedede	e   d
edededz  dedz  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ded
ededef
d„Zdej,                  defd„Zdededeej4                  z  defd„Zdedefd„Zdedefd„Zdedefd „Zdedefd!„Z ded"edefd#„Z!d$edefd%„Z"d&edz  defd'„Z#d(eee$f   defd)„Z%y),Ú#AzureSpeechAudioTranscriptionConfigz¶
    Configuration for Azure AI Speech (Cognitive Services) STT.

    Reference:
    https://learn.microsoft.com/en-us/azure/ai-services/speech-service/rest-speech-to-text-short
    zapi.cognitive.microsoft.comzstt.speech.microsoft.comz5/speech/recognition/conversation/cognitiveservices/v1zen-USÚmodelÚreturnc                 ó
   — ddgS )NÚlanguageÚresponse_formatr   )Úselfr   s     r   Úget_supported_openai_paramsz?AzureSpeechAudioTranscriptionConfig.get_supported_openai_params,   s   € ØÐ-Ð.Ð.r   Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 ón   — | j                  |¬«      }|j                  «       D ]  \  }}||v sŒ|||<   Œ |S )N)r   )r    Úitems)r   r!   r"   r   r#   Úsupported_paramsÚkeyÚvalues           r   Úmap_openai_paramsz5AzureSpeechAudioTranscriptionConfig.map_openai_params/   sO   € ð #'×"BÑ"BÈÐ"BÓ"OÐØ,×2Ñ2Ó4ò 	-‰JˆC�ØÐ&Ò&Ø',� Ò$ð	-ð Ðr   NÚheadersÚmessagesÚlitellm_paramsÚapi_keyÚapi_basec                 ó    — |xs t        d«      }|st        dd¬«      ‚|j                  «       }||d<   |j                  dd«      |d<   d|d	<   |S )
NÚAZURE_SPEECH_API_KEYz6api_key is required for Azure AI Speech transcription.i‘  ©ÚmessageÚstatus_codezOcp-Apim-Subscription-KeyzContent-Typez	audio/wavzapplication/jsonÚAccept)r   r   ÚcopyÚget)	r   r*   r   r+   r"   r,   r-   r.   Úvalidated_headerss	            r   Úvalidate_environmentz8AzureSpeechAudioTranscriptionConfig.validate_environment<   sn   € ð ÒCœ^Ð,BÓCˆÙÜ8ØPØôð ð
 $+§<¡<£>ÐØ9@ÐÐ5Ñ6Ø,=×,AÑ,AÀ.ÐR]Ó,^Ð˜.Ñ)Ø&8Ð˜(Ñ#Ø Ð r   Ústreamc                 ó  — |xs t        d«      }|€t        dd¬«      ‚| j                  |¬«      }|j                  d| j                  «      | j                  |j                  d«      «      dœ}|› | j                  › d	t        |«      › �S )
NÚAZURE_SPEECH_API_BASEzÎapi_base is required for Azure AI Speech transcription. Use a Cognitive Services endpoint like https://{region}.api.cognitive.microsoft.com or an STT endpoint like https://{region}.stt.speech.microsoft.com.é�  r1   )r.   r   r   )r   Úformatú?)r   r   Ú_resolve_stt_base_urlr6   ÚDEFAULT_LANGUAGEÚ_get_azure_response_formatÚSTT_ENDPOINT_PATHr   )	r   r.   r-   r   r"   r,   r9   Úbase_urlÚquery_paramss	            r   Úget_complete_urlz4AzureSpeechAudioTranscriptionConfig.get_complete_urlS   s¢   € ð ÒFœ~Ð.EÓFˆØÐÜ8ðOð
  ôð ð ×4Ñ4¸hÐ4ÓGˆà'×+Ñ+¨J¸×8MÑ8MÓNØ×5Ñ5°o×6IÑ6IÐJ[Ó6\Ó]ñ
ˆð �˜D×2Ñ2Ð3°1´Y¸|Ó5LÐ4MÐNÐNr   Ú
audio_filec                 ó\   — t        |«      }t        |j                  d |j                  ¬«      S )N)ÚdataÚfilesÚcontent_type)r   r   Úfile_contentrJ   )r   r   rF   r"   r,   Úprocessed_audios         r   Ú%transform_audio_transcription_requestzIAzureSpeechAudioTranscriptionConfig.transform_audio_transcription_requesto   s0   € ô "4°JÓ!?ˆÜ,Ø ×-Ñ-ØØ(×5Ñ5ô
ð 	
r   Úraw_responsec                 óê   — |j                  «       }|j                  d«      }|�+|dk7  r&t        d|› d�|j                  |j                  ¬«      ‚| j                  |«      }t        |¬«      }||_        |S )NÚRecognitionStatusÚSuccessz<Azure AI Speech transcription failed with RecognitionStatus=ú.©r2   r3   r*   )Útext)Újsonr6   r   r3   r*   Ú_extract_textr   Ú_hidden_params)r   rN   Úresponse_jsonÚrecognition_statusrT   Úresponses         r   Ú&transform_audio_transcription_responsezJAzureSpeechAudioTranscriptionConfig.transform_audio_transcription_response}   s‰   € ð  ,×0Ñ0Ó2ˆØ$1×$5Ñ$5Ð6IÓ$JÐØÐ)Ð.@ÀIÒ.MÜ8ØWÐXjÐWkÐklÐmØ(×4Ñ4Ø$×,Ñ,ôð ð ×(Ñ(¨Ó7ˆÜ/°TÔ:ˆØ"/ˆÔØˆr   Úerror_messager3   c                 ó   — t        |||¬«      S )NrS   )r   )r   r\   r3   r*   s       r   Úget_error_classz3AzureSpeechAudioTranscriptionConfig.get_error_class�   s   € Ü5Ø!Ø#Øô
ð 	
r   c                 ód  — |j                  d«      }t        |«      }|j                  xs d}| j                  |¬«      r/| j	                  || j
                  ¬«      }| j                  |¬«      S | j                  |¬«      r|j                  › d|› �S | j                  |¬«      rt        dd¬	«      ‚|S )
Nú/Ú )Úhostname)rb   Údomain)Úregionz://zqAzure AI Speech transcription requires a Cognitive Services or STT Speech endpoint, not an Azure OpenAI endpoint.r<   r1   )Úrstripr   rb   Ú_is_cognitive_services_endpointÚ_extract_region_from_hostnameÚCOGNITIVE_SERVICES_DOMAINÚ_build_stt_base_urlÚ_is_stt_endpointÚschemeÚ_is_azure_openai_endpointr   )r   r.   Ú
parsed_urlrb   rd   s        r   r?   z9AzureSpeechAudioTranscriptionConfig._resolve_stt_base_url–   sÄ   € Ø—?‘? 3Ó'ˆÜ$ XÓ.ˆ
Ø$×-Ñ-Ò3°ˆà×/Ñ/¸Ð/ÔBØ ×>Ñ>ÈÐY]×YwÑYwÐ>ÓxˆFØ×+Ñ+°6Ð+Ó:Ð:à× Ñ ¨(Ð Ô3Ø ×'Ñ'Ð(¨¨H¨:Ð6Ð6à×)Ñ)°8Ð)Ô<Ü8ðLð  ôð ð ˆr   rb   c                 ó`   — || j                   k(  xs |j                  d| j                   › �«      S ©NrR   )rh   Úendswith©r   rb   s     r   rf   zCAzureSpeechAudioTranscriptionConfig._is_cognitive_services_endpoint­   s3   € Ø˜4×9Ñ9Ñ9Òt¸X×=NÑ=NÐQRÐSW×SqÑSqÐRrÐOsÓ=tÐtr   c                 ó`   — || j                   k(  xs |j                  d| j                   › �«      S ro   )ÚSTT_SPEECH_DOMAINrp   rq   s     r   rj   z4AzureSpeechAudioTranscriptionConfig._is_stt_endpoint°   s1   € Ø˜4×1Ñ1Ñ1Òd°X×5FÑ5FÈÈ4×KaÑKaÐJbÐGcÓ5dÐdr   c                 ó$   — |j                  d«      S )Nz.openai.azure.com)rp   rq   s     r   rl   z=AzureSpeechAudioTranscriptionConfig._is_azure_openai_endpoint³   s   € Ø× Ñ Ð!4Ó5Ð5r   rc   c                 óP   — |j                  d|› �«      r|d t        d|› �«        S y)NrR   ra   )rp   Úlen)r   rb   rc   s      r   rg   zAAzureSpeechAudioTranscriptionConfig._extract_region_from_hostname¶   s5   € Ø×Ñ˜q  ˜\Ô*ØÐ0œs Q v h <Ó0Ð0Ð1Ð1Ør   rd   c                 óH   — |rd|› d| j                   › �S d| j                   › �S )Nzhttps://rR   )rs   )r   rd   s     r   ri   z7AzureSpeechAudioTranscriptionConfig._build_stt_base_url»   s3   € ÙØ˜f˜X Q t×'=Ñ'=Ð&>Ð?Ð?Ø˜$×0Ñ0Ð1Ð2Ð2r   r   c                 ó   — |dk(  ryy)NÚverbose_jsonÚdetailedÚsimpler   )r   r   s     r   rA   z>AzureSpeechAudioTranscriptionConfig._get_azure_response_formatÀ   s   € Ø˜nÒ,ØØr   rX   c                 ó  — t        |j                  d«      t        «      r|d   S |j                  d«      }t        |t        «      r?|r=|d   }t        |t        «      r(|j                  d«      xs |j                  d«      xs dS y)NÚDisplayTextÚNBestr   ÚDisplayÚLexicalra   )Ú
isinstancer6   ÚstrÚlistÚdict)r   rX   ÚnbestÚbests       r   rV   z1AzureSpeechAudioTranscriptionConfig._extract_textÅ   sv   € Ü�m×'Ñ'¨Ó6¼Ô<Ø  Ñ/Ð/à$×(Ñ(¨Ó1ˆÜ�eœTÔ"¡uØ ™(ˆDÜ˜$¤Ô%Ø—x‘x 	Ó*ÒG¨d¯h©h°yÓ.AÒGÀRÐGàr   )NN)N)&r   r   r   Ú__doc__rh   rs   rB   r@   r‚   rƒ   r   r    r„   Úboolr)   r   r8   rE   r   r   rM   ÚhttpxÚResponser   r[   ÚintÚHeadersr
   r^   r?   rf   rj   rl   rg   ri   rA   r   rV   r   r   r   r   r      si  „ ñð !>ÐØ2ÐØOÐØÐð/°ð /¸Ð>dÑ9eó /ðà ðð ðð ð	ð
 ðð 
óð( #Ø#ñ!àð!ð ð!ð Ð'Ñ(ð	!ð
 ð!ð ð!ð �t‘ð!ð ˜‘*ð!ð 
ó!ð< #ñOà˜‘*ðOð �t‘ðOð ð	Oð
 ðOð ðOð �t‘ðOð 
óOð8
àð
ð ð
ð ð	
ð
 ð
ð 
'ó
ðà—n‘nðð 
óð$
¨Sð 
¸sð 
ÈTÐTY×TaÑTaÑMað 
Ðfvó 
ð¨cð °có ð.u¸ð uÀó uðe¨ð e°ó eð6°#ð 6¸$ó 6ð°cð À3ð È3ó ð
3¨#ð 3°#ó 3ð
¸#À¹*ð Èó ð

¨4°°S°©>ð 
¸cô 
r   r   )r‡   Útypingr   r   Úurllib.parser   r   r‰   Ú,litellm.litellm_core_utils.audio_utils.utilsr   Ú8litellm.llms.base_llm.audio_transcription.transformationr   r	   Ú)litellm.llms.base_llm.chat.transformationr
   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.openair   r   Úlitellm.types.utilsr   r   r   r   r   r   r   ú<module>r•      sM   ðñ÷ ß ,ã å K÷õ GÝ 7÷÷ Aô	Ð-=ô 	ôpÐ*Fõ pr   