Ë
    uPêj  ã                   ó  — U d Z ddlmZmZ ddlmZmZ ddlmZm	Z	m
Z
 ddlmZ eeef   Zeed<   dZee   ed<   d	Zee   ed
<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   ddgZeee      ed<   dgZeee      ed<    G d„ de«      Zd,dedz  dedz  fd„Zd,dedz  defd„Zd edefd!„Zd ededz  fd"„Z d#ee   defd$„Z!d edeez  dz  fd%„Z"d&edefd'„Z#d#ee   de$ed(f   fd)„Z%d#ee   defd*„Z&d#ee   defd+„Z'y)-z@
Shared utilities for the Soniox provider (https://soniox.com).
é    )ÚMappingÚSequence)ÚFinalÚ	TypeAlias)ÚSubtitleTokenÚrender_subtitle_tokens_as_srtÚrender_subtitle_tokens_as_vtt)ÚBaseLLMExceptionÚSonioxTokenzhttps://api.soniox.comÚSONIOX_API_BASEg      ð?ÚSONIOX_DEFAULT_POLL_INTERVALg      à?ÚSONIOX_MIN_POLL_INTERVALg      N@ÚSONIOX_MAX_POLL_INTERVALi  Ú SONIOX_DEFAULT_MAX_POLL_ATTEMPTSip  ÚSONIOX_MAX_POLL_ATTEMPTSÚfileÚtranscriptionÚSONIOX_DEFAULT_CLEANUPÚwebhook_auth_header_valueÚSONIOX_SECRET_FIELDSc                   ó   — e Zd ZdZy)ÚSonioxExceptionz-Provider-specific exception class for Soniox.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úe/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/soniox/common_utils.pyr   r   5   s   „ Ú7r   r   NÚapi_keyÚreturnc                 ó&   — ddl m} | xs  |d«      S )z/Resolve the Soniox API key from arg or env var.r   ©Úget_secret_strÚSONIOX_API_KEY)Úlitellm.secret_managers.mainr$   )r    r$   s     r   Úget_soniox_api_keyr'   9   s   € õ <àÒ6‘nÐ%5Ó6Ð6r   Úapi_basec                 óX   — ddl m} | xs  |d«      xs t        }|j                  d«      S )zMResolve the Soniox API base URL from arg or env var (defaults to public API).r   r#   r   ú/)r&   r$   r   Úrstrip)r(   r$   Úbases      r   Úget_soniox_api_baser-   B   s)   € å;àÒR™nÐ->Ó?ÒRÄ?€DØ�;‰;�sÓÐr   Úvaluec                 ó*   — t        | t        «      r| S dS )NÚ )Ú
isinstanceÚstr©r.   s    r   Ú_token_textr4   J   s   € Ü˜u¤cÔ*ˆ5Ð2°Ð2r   c                 ó*   — t        | t        «      r| S d S ©N)r1   Úintr3   s    r   Ú_token_millisecondsr8   N   s   € Ü˜u¤cÔ*ˆ5Ð4°Ð4r   Útokensc                 óÜ  — | syg }d}d}| D ]Î  }t        |j                  dd«      «      }|j                  d«      }|j                  d«      }|j                  d«      dk(  }|�1||k7  r,|�|j                  d«       |}d}|j                  d	|› d
�«       |�5||k7  r0|}|rdnd}	|j                  d|	› d|› d�«       |j                  «       }|j                  |«       ŒÐ dj	                  |«      S )aö  
    Render a list of Soniox tokens to a readable transcript string.

    Mirrors the behaviour of the official Soniox SDK's `renderTokens` helper:
    - When the speaker changes, a `Speaker N:` tag is inserted.
    - When the language changes, a `[lang]` (or `[Translation][lang]`) tag is
      inserted.

    If neither speaker nor language information is present on any token (i.e.
    diarization and language identification are disabled), the function simply
    concatenates the token texts.
    r0   NÚtextÚspeakerÚlanguageÚtranslation_statusÚtranslationz

zSpeaker ú:z[Translation] ú
ú[z] )r4   ÚgetÚappendÚlstripÚjoin)
r9   Ú
text_partsÚcurrent_speakerÚcurrent_languageÚtokenr;   r<   r=   Úis_translationÚprefixs
             r   Úrender_soniox_tokensrM   R   s  € ñ Øà#%€JØ"€OØ#Ðàò  ˆÜ˜5Ÿ9™9 V¨RÓ0Ó1ˆØ—)‘)˜IÓ&ˆØ—9‘9˜ZÓ(ˆØŸ™Ð#7Ó8¸MÑIˆð Ð 7¨oÒ#=ØÐ*Ø×!Ñ! &Ô)Ø%ˆOØ#ÐØ×Ñ ¨Ð(9¸Ð;Ô<ð Ð HÐ0@Ò$@Ø'ÐÙ)7Ñ%¸RˆFØ×Ñ  6 (¨!Ð,<Ð+=¸RÐ@ÔAØ—;‘;“=ˆDà×Ñ˜$Õð+ ð. �7‰7�:ÓÐr   c                 ó8   — t        | t        t        z  «      r| S d S r6   )r1   r2   r7   r3   s    r   Ú_token_speakerrO   €   s   € Ü˜u¤c¬C¡iÔ0ˆ5Ð:°dÐ:r   rJ   c           
      óâ   — t        t        | j                  dd«      «      t        | j                  d«      «      t        | j                  d«      «      t	        | j                  d«      «      ¬«      S )Nr;   r0   Ústart_msÚend_msr<   )r;   rQ   rR   r<   )r   r4   rC   r8   rO   )rJ   s    r   Ú_soniox_token_to_subtitle_tokenrS   „   sU   € ÜÜ˜Ÿ™ 6¨2Ó.Ó/Ü$ U§Y¡Y¨zÓ%:Ó;Ü" 5§9¡9¨XÓ#6Ó7Ü˜uŸy™y¨Ó3Ó4ô	ð r   .c                 ó&   — t        d„ | D «       «      S )a  
    Convert Soniox tokens for subtitle rendering, excluding translation tokens
    (``translation_status == "translation"``): Soniox does not timestamp them,
    so they cannot be aligned to the audio and would otherwise mix translated
    text into original-language cues.
    c              3   ó\   K  — | ]$  }|j                  d «      dk7  sŒt        |«      –— Œ& y­w)r>   r?   N)rC   rS   )Ú.0rJ   s     r   ú	<genexpr>z#_subtitle_tokens.<locals>.<genexpr>”   s-   è ø€ ò Ø38ÀeÇiÁiÐPdÓFeÐivÓFvÔ'¨×.ñùs   ‚,œ,)Útuple©r9   s    r   Ú_subtitle_tokensrZ   �   s   € ô ñ Ø<Bôó ð r   c                 ó*   — t        t        | «      «      S )z~
    Render Soniox tokens as SRT (SubRip) subtitle format.

    Returns an empty string if no tokens have timestamp data.
    )r   rZ   rY   s    r   Úrender_soniox_tokens_as_srtr\   ™   ó   € ô )Ô)9¸&Ó)AÓBÐBr   c                 ó*   — t        t        | «      «      S )zr
    Render Soniox tokens as WebVTT subtitle format.

    Returns the VTT header even if no cues are present.
    )r	   rZ   rY   s    r   Úrender_soniox_tokens_as_vttr_   ¢   r]   r   r6   )(r   Úcollections.abcr   r   Útypingr   r   Ú5litellm.litellm_core_utils.audio_utils.subtitle_utilsr   r   r	   Ú)litellm.llms.base_llm.chat.transformationr
   r2   Úobjectr   Ú__annotations__r   r   Úfloatr   r   r   r7   r   r   Úlistr   r   r'   r-   r4   r8   rM   rO   rS   rX   rZ   r\   r_   r   r   r   ú<module>rh      sØ  ðò÷ .ß #÷ñ õ
 Gà   f Ñ-€ˆYÓ -ð 7€��s‘Ó 6ð .1Ð ˜e E™lÓ 0ð
 *-Ð ˜% ™,Ó ,ð
 *.Ð ˜% ™,Ó -ð 04Ð   %¨¡*Ó 3ð
 (,Ð ˜% ™*Ó +ð -3°OÐ+DÐ ˜˜d 3™iÑ(Ó Dð +FÐ)FÐ �e˜D ™IÑ&Ó Fô8Ð&ô 8ñ7  d¡
ð 7°c¸D±jó 7ñ #¨¡*ð ¸ó ð3�vð 3 #ó 3ð5˜vð 5¨#°©*ó 5ð+ ¨+Ñ!6ð +¸3ó +ð\;˜&ð ; S¨3¡Y°Ñ%5ó ;ð¨;ð ¸=ó ð	˜X kÑ2ð 	°u¸]ÈCÐ=OÑ7Pó 	ðC¨°Ñ(=ð CÀ#ó CðC¨°Ñ(=ð CÀ#ô Cr   