Ë
    uPêjƒº  ã                   ór  — U d Z ddlZddlZddl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 ddlmZ dd	lmZ dd
lmZmZmZmZmZmZmZmZmZmZmZm Z m!Z! ddl"m#Z#m$Z$m%Z% ddl&m'Z'  G d„ de	«      Z(dZ)ee*d<   e)dz  Z+ee*d<    e,e+dz  «      Z-ee*d<    e,e+dz  «      Z.ee*d<   dZ/ee*d<    G d„ de«      Z0y)z 
This file contains the transformation logic for Bedrock Nova Sonic realtime API.

Transforms between OpenAI Realtime API format and Bedrock Nova Sonic format.
é    N)ÚAnyÚFinal)Ú	BaseModel)Úverbose_logger)Úuuid)ÚLogging)ÚBaseRealtimeConfig)Úready_trigger_pcm)ÚOpenAIRealtimeContentPartDoneÚOpenAIRealtimeDoneEventÚOpenAIRealtimeEventsÚOpenAIRealtimeOutputItemDoneÚOpenAIRealtimeResponseAudioDoneÚ&OpenAIRealtimeResponseContentPartAddedÚOpenAIRealtimeResponseDeltaÚ OpenAIRealtimeResponseDoneObjectÚOpenAIRealtimeResponseTextDoneÚ&OpenAIRealtimeStreamResponseBaseObjectÚ+OpenAIRealtimeStreamResponseOutputItemAddedÚOpenAIRealtimeStreamSessionÚ!OpenAIRealtimeStreamSessionEvents)ÚALL_DELTA_TYPESÚRealtimeResponseTransformInputÚRealtimeResponseTypedDict)Úget_empty_usagec                   ó"   — e Zd ZU dZedz  ed<   y)ÚBedrockContentEndNÚ
stopReason)Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__© ó    úq/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/realtime/transformation.pyr   r   *   s   … Ø!€J��d‘
Ô!r%   r   é€>  ÚTRIGGER_AUDIO_SAMPLE_RATE_HERTZé   ÚTRIGGER_AUDIO_BYTES_PER_SECONDÚTRIGGER_LEADING_SILENCEé   ÚTRIGGER_TRAILING_SILENCEé   ÚTRIGGER_AUDIO_CHUNK_SIZEc                   ó  — e Zd ZdZd„ Zd3dedededz  defd„Zd3d	edz  dededz  defd
„Zde	fd„Z
d3dedee   dz  defd„Zdee   dee   fd„Zd4dede	defd„Zdedee   fd„Zdedee   fd„Zdedee   fd„Zdedee   fd„Zdedee   fd„Zdee   fd„Zdedee   fd„Zdee   fd„Z	 d3dedededz  dee   fd„Z	 d3dededee   dz  defd „Zdededefd!„Z	 d3dededee   dz  defd"„Zd#ed$edz  d%edz  d&edz  deee    edz  edz  edz  e!dz  f   f
d'„Z"d#ed%edz  d$edz  d(ee#   dz  deee    ee#   dz  f   f
d)„Z$d#ed%edz  d$edz  dee    fd*„Z%d#ed%edz  d$edz  d+edz  d(ee#   dz  deee    ee#   dz  f   fd,„Z&d#ed$edz  d&edz  deee    edz  edz  e!dz  f   fd-„Z'd$edz  d&edz  deee    edz  edz  e!dz  f   fd.„Z(d#ed%edz  d$edz  deee    eef   fd/„Z)dedee   fd0„Z*dee+z  deded1e,de-f
d2„Z.y)5ÚBedrockRealtimeConfigz>Configuration for Bedrock Nova Sonic realtime transformations.c                 óÚ  — t        t        j                  «       «      | _        t        t        j                  «       «      | _        t        t        j                  «       «      | _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        d	| _        d
| _        d| _        d| _        d| _        d| _        d	| _        d
| _        d| _        d| _        y )NFr.   gÍÌÌÌÌÌì?gffffffæ?éÀ]  é   é   ÚmatthewÚbase64ÚSPEECHz
audio/lpcmr'   ú
text/plain)r"   Úuuid_libÚuuid4Úprompt_nameÚcontent_nameÚaudio_content_nameÚprompt_startedÚclient_audio_streamedÚ
max_tokensÚtop_pÚtemperatureÚoutput_sample_rate_hertzÚoutput_sample_size_bitsÚoutput_channel_countÚvoice_idÚoutput_encodingÚoutput_audio_typeÚoutput_media_typeÚinput_sample_rate_hertzÚinput_sample_size_bitsÚinput_channel_countÚinput_encodingÚinput_audio_typeÚinput_media_typeÚtext_media_type©Úselfs    r&   Ú__init__zBedrockRealtimeConfig.__init__8   sÛ   € äœxŸ~™~Ó/Ó0ˆÔÜ¤§¡Ó 0Ó1ˆÔÜ"%¤h§n¡nÓ&6Ó"7ˆÔØ#ˆÔØ%*ˆÔ"ð ˆŒØˆŒ
ØˆÔð ).ˆÔ%Ø')ˆÔ$Ø$%ˆÔ!Ø!ˆŒØ'ˆÔØ!)ˆÔØ!-ˆÔð (-ˆÔ$Ø&(ˆÔ#Ø#$ˆÔ Ø&ˆÔØ (ˆÔØ ,ˆÔð  ,ˆÕr%   NÚheadersÚmodelÚapi_keyÚreturnc                 ó   — |S )z@Validate environment - no special validation needed for Bedrock.r$   )rS   rU   rV   rW   s       r&   Úvalidate_environmentz*BedrockRealtimeConfig.validate_environmentZ   s   € àˆr%   Úapi_basec                 ó   — |xs dS )z6Get complete URL - handled by aws_sdk_bedrock_runtime.Ú r$   )rS   r[   rV   rW   s       r&   Úget_complete_urlz&BedrockRealtimeConfig.get_complete_url^   s   € àŠ~˜2Ðr%   c                  ó   — y)z'Bedrock requires session configuration.Tr$   rR   s    r&   Úrequires_session_configurationz4BedrockRealtimeConfig.requires_session_configurationb   s   € àr%   Útoolsc           
      ó¤  — ddd| j                   | j                  | j                  dœiii}| j                  d| j                  i| j
                  | j                  | j                  | j                  | j                  | j                  | j                  dœdœ}|rddi|d	<   d
| j                  |«      i|d<   dd|ii}t        j                  ||dœ«      S )z÷
        Create initial session configuration for Bedrock Nova Sonic.

        Args:
            model: Model ID
            tools: Optional list of tool definitions

        Returns JSON string with session start and prompt start events.
        ÚeventÚsessionStartÚinferenceConfiguration©Ú	maxTokensÚtopPrC   Ú	mediaType©ri   ÚsampleRateHertzÚsampleSizeBitsÚchannelCountÚvoiceIdÚencodingÚ	audioType©Ú
promptNameÚtextOutputConfigurationÚaudioOutputConfigurationúapplication/jsonÚtoolUseOutputConfigurationra   ÚtoolConfigurationÚpromptStart)Úsession_startÚprompt_start)rA   rB   rC   r<   rQ   rJ   rD   rE   rF   rG   rH   rI   Ú"_transform_tools_to_bedrock_formatÚjsonÚdumps)rS   rV   ra   ry   Úprompt_start_configrz   s         r&   Úsession_configuration_requestz3BedrockRealtimeConfig.session_configuration_requestf   s÷   € ð ØØ,Ø%)§_¡_Ø $§
¡
Ø'+×'7Ñ'7ñ/ð!ðð
 
ˆð ×*Ñ*Ø(3°T×5IÑ5IÐ'Jà!×3Ñ3Ø#'×#@Ñ#@Ø"&×">Ñ">Ø $× 9Ñ 9ØŸ=™=Ø ×0Ñ0Ø!×3Ñ3ñ)ñ&
Ðñ ØALÐN`Ð@aÐÐ <Ñ=Ø8?À×AhÑAhÐinÓAoÐ7pÐÐ 3Ñ4à&¨Ð8KÐ(LÐMˆô �z‰z¨MÈ<ÑXÓYÐYr%   c                 ó"  — g }|D ]‡  }|j                  d«      dk(  sŒ|j                  di «      }d|j                  dd«      |j                  dd«      dt        j                  |j                  di «      «      id	œi}|j                  |«       Œ‰ |S )
z¿
        Transform OpenAI tool format to Bedrock tool format.

        Args:
            tools: List of OpenAI format tools

        Returns:
            List of Bedrock format tools
        ÚtypeÚfunctionÚtoolSpecÚnamer]   Údescriptionr|   Ú
parameters)r„   r…   ÚinputSchema)Úgetr|   r}   Úappend)rS   ra   Úbedrock_toolsÚtoolr‚   Úbedrock_tools         r&   r{   z8BedrockRealtimeConfig._transform_tools_to_bedrock_format”   s™   € ð  "ˆØò 
	3ˆDØ�x‰x˜Ó :Ó-ØŸ8™8 J°Ó3�àØ (§¡¨V°RÓ 8Ø'/§|¡|°MÀ2Ó'FØ(.´·
±
¸8¿<¹<ÈÐVXÓ;YÓ0ZÐ'[ñ!ð �ð ×$Ñ$ \Õ2ð
	3ð Ðr%   Úaudio_formatÚ	is_outputc                 ó.   — |dk(  r|rdS dS |dv ry|rdS dS )a  
        Map OpenAI audio format to sample rate.

        Args:
            audio_format: OpenAI audio format (pcm16, g711_ulaw, g711_alaw)
            is_output: Whether this is for output (True) or input (False)

        Returns:
            Sample rate in Hz
        Úpcm16r3   r'   )Ú	g711_ulawÚ	g711_alawi@  r$   )rS   r�   rŽ   s      r&   Ú _map_audio_format_to_sample_ratez6BedrockRealtimeConfig._map_audio_format_to_sample_rate¬   s2   € ð ˜7Ò"Ù%�5Ð0¨5Ð0ØÐ7Ñ7ØÙ!ˆuÐ, uÐ,r%   Újson_messagec           
      óf  — t        j                  d«       g }|j                  di «      }d|v r
|d   | _        d|v r
|d   | _        d|v r
|d   | _        d|v r|d   }| j                  |d¬«      | _        d	|v r|d	   }| j                  |d
¬«      | _        d|v r
|d   | _        d|v r
|d   | _        ddd| j                  | j                  | j                  dœiii}|j                  t        j                  |«      «       | j                  d| j                  i| j                  | j                  | j                   | j"                  | j
                  | j$                  | j&                  dœdœ}|j                  d«      }|rddi|d<   d| j)                  |«      i|d<   dd|ii}	|j                  t        j                  |	«      «       d| _        |j                  d«      }
|
rÓt-        t/        j0                  «       «      }dd| j                  |dd
dd| j                  idœii}|j                  t        j                  |«      «       dd| j                  ||
dœii}|j                  t        j                  |«      «       dd | j                  |d!œii}|j                  t        j                  |«      «       |S )"zæ
        Transform session.update event to Bedrock session configuration.

        Args:
            json_message: OpenAI session.update message

        Returns:
            List of Bedrock format messages (JSON strings)
        zHandling session.updateÚsessionÚmax_response_output_tokensrC   ÚvoiceÚoutput_audio_formatT)rŽ   Úinput_audio_formatFrD   rK   rc   rd   re   rf   ri   rj   rq   ra   ru   rv   rw   rx   ÚinstructionsÚcontentStartÚTEXTÚSYSTEM©rr   ÚcontentNamer�   ÚinteractiveÚroleÚtextInputConfigurationÚ	textInput©rr   r    ÚcontentÚ
contentEnd©rr   r    )r   Údebugrˆ   rA   rC   rG   r“   rD   rK   rB   r‰   r|   r}   r<   rQ   rJ   rE   rF   rH   rI   r{   r?   r"   r:   r;   )rS   r”   ÚmessagesÚsession_configÚoutput_formatÚinput_formatry   r~   ra   rz   r›   Útext_content_nameÚtext_content_startÚ
text_inputÚtext_content_ends                  r&   Útransform_session_update_eventz4BedrockRealtimeConfig.transform_session_update_event¿   s  € ô 	×ÑÐ6Ô7Ø%'ˆà ,× 0Ñ 0°¸BÓ ?ˆð (¨>Ñ9Ø,Ð-IÑJˆDŒOØ˜NÑ*Ø-¨mÑ<ˆDÔð �nÑ$Ø*¨7Ñ3ˆDŒMØ  NÑ2Ø#1Ð2GÑ#HˆMØ,0×,QÑ,QÐR_ÐkoÐ,QÓ,pˆDÔ)ð   >Ñ1Ø"0Ð1EÑ"FˆLØ+/×+PÑ+PÐQ]ÐinÐ+PÓ+oˆDÔ(ð &¨Ñ7Ø,:Ð;UÑ,VˆDÔ)Ø$¨Ñ6Ø+9Ð:SÑ+TˆDÔ(ð ØØ,Ø%)§_¡_Ø $§
¡
Ø'+×'7Ñ'7ñ/ð!ðð
 
ˆð 	�‰œŸ
™
 =Ó1Ô2ð ×*Ñ*Ø(3°T×5IÑ5IÐ'Jà!×3Ñ3Ø#'×#@Ñ#@Ø"&×">Ñ">Ø $× 9Ñ 9ØŸ=™=Ø ×0Ñ0Ø!×3Ñ3ñ)ñ&
Ðð &×)Ñ)¨'Ó2ˆÙØALÐN`Ð@aÐÐ <Ñ=Ø8?À×AhÑAhÐinÓAoÐ7pÐÐ 3Ñ4à&¨Ð8KÐ(LÐMˆØ�‰œŸ
™
 <Ó0Ô1Ø"ˆÔð -×0Ñ0°Ó@ˆÙÜ'*¬8¯>©>Ó+;Ó'<Ðð Ø"Ø&*×&6Ñ&6Ø'8Ø &Ø',Ø (Ø3>À×@TÑ@TÐ2Uñ%ð	ð)Ðð �O‰OœDŸJ™JÐ'9Ó:Ô;ð ØØ&*×&6Ñ&6Ø'8Ø#/ñ"ðð!ˆJð �O‰OœDŸJ™J zÓ2Ô3ð Ø Ø&*×&6Ñ&6Ø'8ñ#ðð'Ðð �O‰OœDŸJ™JÐ'7Ó8Ô9àˆr%   c                 ój  — t        j                  d«       d| _        g }t        | d«      rˆ| j                  | j
                  k7  rodd| j                  | j                  dœii}|j                  t        j                  |«      «       t        | d«       t        t        j                  «       «      | _        t        | d«      s dd| j                  | j                  ddd	| j                  | j
                  | j                   | j"                  | j$                  | j&                  d
œdœii}|j                  t        j                  |«      «       d| _        | j
                  | _        |j+                  dd«      }dd| j                  | j                  |dœii}|j                  t        j                  |«      «       |S )zò
        Transform input_audio_buffer.append event to Bedrock audio input.

        Args:
            json_message: OpenAI input_audio_buffer.append message

        Returns:
            List of Bedrock format messages (JSON strings)
        z"Handling input_audio_buffer.appendTÚ_audio_content_startedrc   r§   r¨   rœ   ÚAUDIOÚUSER©ri   rk   rl   rm   rp   ro   ©rr   r    r�   r¡   r¢   ÚaudioInputConfigurationÚaudior]   Ú
audioInputr¥   )r   r©   r@   ÚhasattrÚ_audio_content_sample_raterK   r<   r>   r‰   r|   r}   Údelattrr"   r:   r;   rP   rL   rM   rO   rN   r´   rˆ   )rS   r”   rª   Úmismatched_content_endÚaudio_content_startÚ
audio_dataÚaudio_events          r&   Ú)transform_input_audio_buffer_append_eventz?BedrockRealtimeConfig.transform_input_audio_buffer_append_event:  s¥  € ô 	×ÑÐAÔBØ%)ˆÔ"Ø%'ˆä�4Ð1Ô2°t×7VÑ7VÐZ^×ZvÑZvÒ7vàØ Ø&*×&6Ñ&6Ø'+×'>Ñ'>ñ#ðð-Ð"ð �O‰OœDŸJ™JÐ'=Ó>Ô?Ü�DÐ2Ô3Ü&)¬(¯.©.Ó*:Ó&;ˆDÔ#ô �tÐ5Ô6àØ"Ø&*×&6Ñ&6Ø'+×'>Ñ'>Ø 'Ø'+Ø &à)-×)>Ñ)>Ø/3×/KÑ/KØ.2×.IÑ.IØ,0×,DÑ,DØ)-×)>Ñ)>Ø(,×(;Ñ(;ñ4ñ%ðð*Ðð& �O‰OœDŸJ™JÐ':Ó;Ô<Ø*.ˆDÔ'Ø.2×.JÑ.JˆDÔ+ð )×,Ñ,¨W°bÓ9ˆ
àØØ"&×"2Ñ"2Ø#'×#:Ñ#:Ø)ñðð
ˆð 	�‰œŸ
™
 ;Ó/Ô0àˆr%   c                 óæ   — t        j                  d«       g }t        | d«      rMdd| j                  | j                  dœii}|j                  t        j                  |«      «       t        | d«       |S )zø
        Transform input_audio_buffer.commit event to Bedrock audio content end.

        Args:
            json_message: OpenAI input_audio_buffer.commit message

        Returns:
            List of Bedrock format messages (JSON strings)
        z"Handling input_audio_buffer.commitr´   rc   r§   r¨   )	r   r©   r¼   r<   r>   r‰   r|   r}   r¾   )rS   r”   rª   Úaudio_content_ends       r&   Ú)transform_input_audio_buffer_commit_eventz?BedrockRealtimeConfig.transform_input_audio_buffer_commit_event}  su   € ô 	×ÑÐAÔBØ%'ˆä�4Ð1Ô2àØ Ø&*×&6Ñ&6Ø'+×'>Ñ'>ñ#ðð(Ðð �O‰OœDŸJ™JÐ'8Ó9Ô:Ü�DÐ2Ô3àˆr%   c           
      óÔ  — t        j                  d«       |j                  di «      }|j                  d«      }|dk(  r| j                  |«      S g }|dk(  �r|j                  dg «      }|D ]ú  }|j                  d«      dk(  sŒt	        t        j                  «       «      }dd	| j                  |d
ddd| j                  idœii}|j                  t        j                  |«      «       dd| j                  ||j                  dd«      dœii}	|j                  t        j                  |	«      «       dd| j                  |dœii}
|j                  t        j                  |
«      «       Œü |S )zþ
        Transform conversation.item.create event to Bedrock text input or tool result.

        Args:
            json_message: OpenAI conversation.item.create message

        Returns:
            List of Bedrock format messages (JSON strings)
        z!Handling conversation.item.createÚitemr�   Úfunction_call_outputÚmessager¦   Ú
input_textrc   rœ   r�   Tr¶   ri   rŸ   r¤   Útextr]   r¥   r§   r¨   )r   r©   rˆ   Ú4transform_conversation_item_create_tool_result_eventr"   r:   r;   r<   rQ   r‰   r|   r}   )rS   r”   rÈ   Ú	item_typerª   r¦   Úcontent_partr®   r¯   r°   r±   s              r&   Ú(transform_conversation_item_create_eventz>BedrockRealtimeConfig.transform_conversation_item_create_event˜  sŒ  € ô 	×ÑÐ@ÔAà"×&Ñ& v¨rÓ2ˆØŸ8™8 FÓ+ˆ	ð Ð.Ò.Ø×LÑLÈ\ÓZÐZà%'ˆð ˜	Ó!Ø!ŸX™X i°Ó4ˆGØ 'ò (B�Ø×#Ñ# FÓ+¨|Ó;Ü(+¬H¯N©NÓ,<Ó(=Ð%ð  Ø*Ø.2×.>Ñ.>Ø/@Ø(.Ø/3Ø(.Ø;FÈ×H\ÑH\Ð:]ñ-ð	"ð*Ð&ð —O‘O¤D§J¡JÐ/AÓ$BÔCð  Ø'Ø.2×.>Ñ.>Ø/@Ø+7×+;Ñ+;¸FÀBÓ+Gñ*ð"ð"�Jð —O‘O¤D§J¡J¨zÓ$:Ô;ð  Ø(Ø.2×.>Ñ.>Ø/@ñ+ð"ð(Ð$ð —O‘O¤D§J¡JÐ/?Ó$@ÕAðQ(BðT ˆr%   c                 óæ  — t        j                  d«       | j                  r| j                  rg S g }t	        | d«      s”dd| j
                  | j                  ddd| j                  t        | j                  | j                  | j                  | j                  dœd	œii}|j                  t        j                  |«      «       d| _        t        | _        |j%                  | j'                  «       «       |S )
aa  
        Transform response.create event to Bedrock format.

        Nova Sonic only starts generating after it detects user speech, so text-only
        sessions never get a response on their own. Injecting a short spoken "ready"
        utterance (followed by silence) makes the model respond to the pending
        interactive text input. Sessions where the client streams its own audio rely
        on Nova Sonic's built-in turn detection instead.

        Args:
            json_message: OpenAI response.create message

        Returns:
            List of Bedrock format messages (JSON strings)
        zHandling response.creater´   rc   rœ   rµ   Tr¶   r·   r¸   )r   r©   r?   r@   r¼   r<   r>   rP   r(   rL   rM   rO   rN   r‰   r|   r}   r´   r½   ÚextendÚ _response_trigger_audio_messages)rS   r”   rª   Útrigger_content_starts       r&   Útransform_response_create_eventz5BedrockRealtimeConfig.transform_response_create_eventÜ  sã   € ô  	×ÑÐ7Ô8Ø×"Ò" d×&@Ò&@ØˆIà%'ˆÜ�tÐ5Ô6àØ"Ø&*×&6Ñ&6Ø'+×'>Ñ'>Ø 'Ø'+Ø &à)-×)>Ñ)>Ü/NØ.2×.IÑ.IØ,0×,DÑ,DØ)-×)>Ñ)>Ø(,×(;Ñ(;ñ4ñ%ðð,Ð!ð& �O‰OœDŸJ™JÐ'<Ó=Ô>Ø*.ˆDÔ'Ü.MˆDÔ+à�‰˜×=Ñ=Ó?Ô@Øˆr%   c                 ó@  — t         t        «       z   t        z   }t        dt	        |«      t
        «      D �cg c]^  }t        j                  dd| j                  | j                  t        j                  |||t
        z    «      j                  «       dœii«      ‘Œ` c}S c c}w )Nr   rc   r»   r¥   )r+   r
   r-   ÚrangeÚlenr/   r|   r}   r<   r>   r7   Ú	b64encodeÚdecode)rS   ÚpcmÚoffsets      r&   rÓ   z6BedrockRealtimeConfig._response_trigger_audio_messages  sœ   € Ü,Ô/@Ó/BÑBÔE]Ñ]ˆô   ¤3 s£8Ô-EÓFö
ð ô �J‰JàØ$Ø*.×*:Ñ*:Ø+/×+BÑ+BÜ'-×'7Ñ'7¸¸FÀVÔNfÑEfÐ8gÓ'h×'oÑ'oÓ'qñ'ððõ
ò
ð 	
ùò 
s   µA#Bc                 ó0   — t        j                  d«       g S )zÙ
        Transform response.cancel event to Bedrock format.

        Args:
            json_message: OpenAI response.cancel message

        Returns:
            List of Bedrock format messages (JSON strings)
        zHandling response.cancel)r   r©   )rS   r”   s     r&   Útransform_response_cancel_eventz5BedrockRealtimeConfig.transform_response_cancel_event  s   € ô 	×ÑÐ7Ô8àˆ	r%   c                 óž  — | j                   sg S g }t        | d«      rMdd| j                  | j                  dœii}|j	                  t        j                  |«      «       t        | d«       |j	                  t        j                  ddd| j                  iii«      «       |j	                  t        j                  ddi ii«      «       d| _         |S )	zá
        Build the Bedrock events that gracefully close the session
        (contentEnd for any open audio content, promptEnd, sessionEnd).

        Returns:
            List of Bedrock format messages (JSON strings)
        r´   rc   r§   r¨   Ú	promptEndrr   Ú
sessionEndF)r?   r¼   r<   r>   r‰   r|   r}   r¾   )rS   rª   rÅ   s      r&   Úsession_close_messagesz,BedrockRealtimeConfig.session_close_messages+  sÅ   € ð ×"Ò"ØˆIà%'ˆÜ�4Ð1Ô2àØ Ø&*×&6Ñ&6Ø'+×'>Ñ'>ñ#ðð(Ðð �O‰OœDŸJ™JÐ'8Ó9Ô:Ü�DÐ2Ô3à�‰œŸ
™
 G¨k¸LÈ$×JZÑJZÐ;[Ð-\Ð#]Ó^Ô_Ø�‰œŸ
™
 G¨l¸BÐ-?Ð#@ÓAÔBØ#ˆÔØˆr%   rÊ   r   c                 óð  — 	 t        j                  |«      }|j                  d«      }|dk(  r| j                  |«      S |dk(  r| j                  |«      S |dk(  r| j                  |«      S |dk(  r| j                  |«      S |d	k(  r| j                  |«      S |d
k(  r| j                  |«      S t        j                  d|«       g S # t         j                  $ r t        j                  d|dd «       g cY S w xY w)aE  
        Transform OpenAI realtime request to Bedrock Nova Sonic format.

        Args:
            message: OpenAI format message (JSON string)
            model: Model ID
            session_configuration_request: Previous session config

        Returns:
            List of Bedrock format messages (JSON strings)
        úInvalid JSON message: %sNéÈ   r�   zsession.updatezinput_audio_buffer.appendzinput_audio_buffer.commitzconversation.item.createzresponse.createzresponse.cancelzUnknown message type: %s)r|   ÚloadsÚJSONDecodeErrorr   Úwarningrˆ   r²   rÃ   rÆ   rÐ   rÕ   rÞ   )rS   rÊ   rV   r   r”   Úmessage_types         r&   Útransform_realtime_requestz0BedrockRealtimeConfig.transform_realtime_requestH  s  € ð"	Ü"&§*¡*¨WÓ"5ˆLð
 +×.Ñ.¨vÓ6ˆð Ð+Ò+Ø×6Ñ6°|ÓDÐDØÐ8Ò8Ø×AÑAÀ,ÓOÐOØÐ8Ò8Ø×AÑAÀ,ÓOÐOØÐ7Ò7Ø×@Ñ@ÀÓNÐNØÐ.Ò.Ø×7Ñ7¸ÓEÐEØÐ.Ò.Ø×7Ñ7¸ÓEÐEä×"Ñ"Ð#=¸|ÔLØˆIøô+ ×#Ñ#ò 	Ü×"Ñ"Ð#=¸wÀtÈ¸}ÔMØŠIð	ús   ‚C Ã.C5Ã4C5Úlogging_objÚ
modalitiesc                 ón   — t        |j                  |�|nddg¬«      }|�t        |t        «      r||d<   |S )NrÌ   rº   )Úidrì   rV   )r   Úlitellm_trace_idÚ
isinstancer"   )rS   rV   rë   rì   r–   s        r&   Ú_session_objectz%BedrockRealtimeConfig._session_objectr  sF   € ô 5Ø×+Ñ+Ø%/Ð%;‘zÀ&È'ÐARô
ˆð Ð¤¨E´3Ô!7Ø$ˆG�GÑØˆr%   c                 ót   — t        d| j                  ||«      t        t        j                  «       «      ¬«      S )zABuild the OpenAI session.created event for this realtime session.zsession.created©r�   r–   Úevent_id©r   rñ   r"   r   r;   )rS   rV   rë   s      r&   Úsession_created_eventz+BedrockRealtimeConfig.session_created_event€  s2   € ô 1Ø"Ø×(Ñ(¨°Ó<ÜœŸ™›Ó&ô
ð 	
r%   c                 óv   — t        d| j                  |||«      t        t        j                  «       «      ¬«      S )zRBuild the OpenAI session.updated ack reflecting the client's requested modalities.zsession.updatedró   rõ   )rS   rV   rë   rì   s       r&   Úsession_updated_eventz+BedrockRealtimeConfig.session_updated_eventŒ  s4   € ô 1Ø"Ø×(Ñ(¨°¸ZÓHÜœŸ™›Ó&ô
ð 	
r%   rc   Úcurrent_response_idÚcurrent_output_item_idÚcurrent_conversation_idc                 óš  — |d   }|j                  d«      }|dk7  rg |||dfS t        j                  d«       |sdt        j                  «       › �}|sdt        j                  «       › �}|sdt        j                  «       › �}|j                  d	d
«      }|d
k(  rdnd}g }	t        ddt        j                  «       › �d|dg |dœ¬«      }
|	j                  |
«       t        d|d|ddddg dœ¬«      }|	j                  |«       t        ddddt        j                  «       › �||dk(  rdddœndddœ|¬«      }|	j                  |«       |	||||fS )a¥  
        Transform Bedrock contentStart event to OpenAI response events.

        Args:
            event: Bedrock contentStart event
            current_response_id: Current response ID
            current_output_item_id: Current output item ID
            current_conversation_id: Current conversation ID

        Returns:
            Tuple of (events, response_id, output_item_id, conversation_id, delta_type)
        rœ   r¢   Ú	ASSISTANTNzHandling ASSISTANT contentStartÚresp_Úitem_Úconv_r�   r�   rÌ   rº   zresponse.createdÚevent_úrealtime.responseÚin_progress)Úobjectrî   ÚstatusÚoutputÚconversation_id©r�   rô   Úresponsezresponse.output_item.addedr   úrealtime.itemrÊ   Ú	assistant©rî   r  r�   r  r¢   r¦   )r�   Úresponse_idÚoutput_indexrÈ   zresponse.content_part.addedr]   ©r�   rÌ   ©r�   Ú
transcript)r�   Úcontent_indexr  rô   Úitem_idÚpartr  )	rˆ   r   r©   r   r;   r   r‰   r   r   )rS   rc   rù   rú   rû   Úcontent_startr¢   Úcontent_typeÚcurrent_delta_typeÚreturned_messagesÚresponse_createdÚoutput_item_addedÚcontent_part_addeds                r&   Útransform_content_start_eventz3BedrockRealtimeConfig.transform_content_start_event™  s´  € ð2  % ^Ñ4ˆØ#×'Ñ'¨Ó/ˆà�;ÒàØ#Ø&Ø'Øðð ô 	×ÑÐ>Ô?ñ #Ø$)¬$¯*©*«,¨Ð"8ÐÙ%Ø',¬T¯Z©Z«\¨NÐ%;Ð"Ù&Ø(-¬d¯j©j«l¨^Ð&<Ð#ð ,×/Ñ/°¸Ó?ˆØ?KÈvÒ?U±VÐ[bÐà?AÐô #IØ#ØœdŸj™j›l˜^Ð,à-Ø)Ø'ØØ#:ñô
#
Ðð 	× Ñ Ð!1Ô2ô $OØ-Ø+Øà,Ø)Ø!Ø'Ø#Øñô	$
Ðð 	× Ñ Ð!2Ô3ô %KØ.ØØØœdŸj™j›l˜^Ð,Ø*à0BÀfÒ0L˜¨Ò,Ð[bÐrtÑRuà+ô
%
Ðð 	× Ñ Ð!3Ô4ð ØØ"Ø#Øð
ð 	
r%   Úcurrent_delta_chunksc           	      óè   — t        j                  d«       |d   j                  dd«      }|r|sg |fS t        dddt	        j
                  «       › �|d||¬«      }|€g }|j                  |«       |g|fS )	a{  
        Transform Bedrock textOutput event to OpenAI response.text.delta.

        Args:
            event: Bedrock textOutput event
            current_output_item_id: Current output item ID
            current_response_id: Current response ID
            current_delta_chunks: Current delta chunks

        Returns:
            Tuple of (events, updated_delta_chunks)
        zHandling textOutputÚ
textOutputr¦   r]   zresponse.text.deltar   r  ©r�   r  rô   r  r  r  Údelta)r   r©   rˆ   r   r   r;   r‰   )rS   rc   rú   rù   r  Útext_contentÚ
text_deltas          r&   Útransform_text_output_eventz1BedrockRealtimeConfig.transform_text_output_event  s’   € ô& 	×ÑÐ2Ô3Ø# LÑ1×5Ñ5°iÀÓDˆá%Ñ-@ØÐ+Ð+Ð+ä7Ø&ØØœdŸj™j›l˜^Ð,Ø*ØØ+Øô
ˆ
ð  Ð'Ø#%Ð Ø×#Ñ# JÔ/àˆ|Ð1Ð1Ð1r%   c           	      ó¶   — t        j                  d«       |d   j                  dd«      }|r|sg S t        dddt	        j
                  «       › �|d||¬«      }|gS )	a5  
        Transform Bedrock audioOutput event to OpenAI response.audio.delta.

        Args:
            event: Bedrock audioOutput event
            current_output_item_id: Current output item ID
            current_response_id: Current response ID

        Returns:
            List of OpenAI events
        zHandling audioOutputÚaudioOutputr¦   r]   zresponse.audio.deltar   r  r   )r   r©   rˆ   r   r   r;   )rS   rc   rú   rù   Úaudio_contentÚaudio_deltas         r&   Útransform_audio_output_eventz2BedrockRealtimeConfig.transform_audio_output_event,  sk   € ô" 	×ÑÐ3Ô4Ø$ ]Ñ3×7Ñ7¸	À2ÓFˆá%Ñ-@ØˆIä8Ø'ØØœdŸj™j›l˜^Ð,Ø*ØØ+Øô
ˆð ˆ}Ðr%   r  c                 ó  — |d   }t        j                  d|«       |r|sg |fS g }|dk(  r§d}|r/dj                  |D �	cg c]  }	|	j                  dd«      ‘Œ c}	«      }t	        dddt        j                  «       › �|d||¬	«      }
|j                  |
«       t        d
ddt        j                  «       › �|dd|dœ|¬«      }|j                  |«       nw|dk(  rrt        dddt        j                  «       › �|d|¬«      }|j                  |«       t        d
ddt        j                  «       › �|ddddœ|¬«      }|j                  |«       t        ddt        j                  «       › �d||ddddg dœ¬«      }|j                  |«       |dfS c c}	w )a½  
        Transform Bedrock contentEnd event to OpenAI response done events.

        Args:
            event: Bedrock contentEnd event
            current_output_item_id: Current output item ID
            current_response_id: Current response ID
            current_delta_type: Current delta type (text or audio)
            current_delta_chunks: Current delta chunks

        Returns:
            Tuple of (events, reset_delta_chunks)
        r§   zHandling contentEnd: %srÌ   r]   r!  zresponse.text.doner   r  )r�   r  rô   r  r  r  rÌ   zresponse.content_part.doner  )r�   r  rô   r  r  r  r  rº   zresponse.audio.done)r�   r  rô   r  r  r  r  zresponse.output_item.doner
  rÊ   Ú	completedr  r  )r�   rô   r  r  rÈ   N)r   r©   Újoinrˆ   r   r   r;   r‰   r   r   r   )rS   rc   rú   rù   r  r  Úcontent_endr  Úaccumulated_textÚchunkÚ	text_doneÚcontent_part_doneÚ
audio_doneÚoutput_item_dones                 r&   Útransform_content_end_eventz1BedrockRealtimeConfig.transform_content_end_eventO  sÚ  € ð* # <Ñ0ˆÜ×ÑÐ6¸ÔDá%Ñ-@ØÐ+Ð+Ð+à?AÐð  Ò'à!ÐÙ#Ø#%§7¡7ÐPdÖ+eÀu¨E¯I©I°g¸rÕ,BÒ+eÓ#fÐ ä=Ø)ØØ!¤$§*¡*£, Ð0Ø.ØØ/Ø%ô ˆIð ×$Ñ$ YÔ/ô !>Ø1ØØ!¤$§*¡*£, Ð0Ø.ØØ$Ð.>Ñ?Ø/ô!Ðð ×$Ñ$Ð%6Õ7à 7Ò*Ü ?Ø*ØØ!¤$§*¡*£, Ð0Ø.ØØ/ô!ˆJð ×$Ñ$ ZÔ0ô !>Ø1ØØ!¤$§*¡*£, Ð0Ø.ØØ%°RÑ8Ø/ô!Ðð ×$Ñ$Ð%6Ô7ô #?Ø,ØœdŸj™j›l˜^Ð,ØØ+à,Ø)Ø!Ø%Ø#Øñô#
Ðð 	× Ñ Ð!1Ô2ð ! $Ð&Ð&ùòE ,fs   ¾F
c                 óP   — t        j                  d«       | j                  ||«      S )a¶  
        Transform a Bedrock end-of-response event (promptEnd, completionEnd, or an
        END_TURN contentEnd) to OpenAI response.done.

        Args:
            event: Bedrock event that ends the response
            current_response_id: Current response ID
            current_conversation_id: Current conversation ID

        Returns:
            Tuple of (events, reset_output_item_id, reset_response_id, reset_delta_type)
        zHandling promptEnd)r   r©   Ú_response_done_events)rS   rc   rù   rû   s       r&   Útransform_prompt_end_eventz0BedrockRealtimeConfig.transform_prompt_end_eventµ  s(   € ô. 	×ÑÐ1Ô2Ø×)Ñ)Ð*=Ð?VÓWÐWr%   c                 óà   — |r|sg d d d fS t        «       }t        ddt        j                  «       › �t	        d|dg ||j
                  |j                  |j                  dœ¬«      ¬«      }|gd d d fS )Nzresponse.doner  r  r+  )Úprompt_tokensÚcompletion_tokensÚtotal_tokens)r  rî   r  r  r  Úusager  )r   r   r   r;   r   r9  r:  r;  )rS   rù   rû   Ú	usage_objÚresponse_dones        r&   r6  z+BedrockRealtimeConfig._response_done_eventsÏ  sˆ   € ñ #Ñ*AØ�t˜T 4Ð'Ð'ä*Ó,ˆ	Ü6Ø ØœdŸj™j›l˜^Ð,Ü5Ø*Ø&Ø"ØØ 7à%.×%<Ñ%<Ø)2×)DÑ)DØ$-×$:Ñ$:ñôô 
ˆð$ ˆ  d¨DÐ0Ð0r%   c           
      óÈ  — t        j                  d«       |d   }|r|sg ddfS i }d|v r1	 t        |d   t        «      rt	        j
                  |d   «      n|d   }|j                  dd«      }|j                  dd«      }ddlm	} d	d
t        j                  «       › �||d||t	        j                  |«      dœ}	 |t        |	«      g||fS # t        j                  $ r i }Y Œ…w xY w)aA  
        Transform Bedrock toolUse event to OpenAI format.

        Args:
            event: Bedrock toolUse event
            current_output_item_id: Current output item ID
            current_response_id: Current response ID

        Returns:
            Tuple of (events, tool_call_id, tool_name) for tracking
        zHandling toolUseÚtoolUser]   ÚinputÚ	toolUseIdÚtoolNamer   )Úcastz%response.function_call_arguments.doner  )r�   rô   r  r  r  Úcall_idr„   Ú	arguments)r   r©   rð   r"   r|   ræ   rç   rˆ   ÚtypingrD  r   r;   r}   r   )
rS   rc   rú   rù   Útool_useÚ
tool_inputÚtool_call_idÚ	tool_namerD  Úfunction_call_events
             r&   Útransform_tool_use_eventz.BedrockRealtimeConfig.transform_tool_use_eventñ  s  € ô" 	×ÑÐ/Ô0Ø 	Ñ*ˆá%Ñ-@Ø�r˜2�:Ðð ˆ
Ø�hÑð Ü>HÈÐRYÑIZÔ\_Ô>`œTŸZ™Z¨°Ñ(9Ô:ÐfnÐovÑfw�
ð 'Ÿl™l¨;¸Ó;ˆØ#Ÿ<™<¨
°BÓ7ˆ	õ 	 ð <Ø ¤§¡£ Ð/Ø.Ø-ØØ#ØÜŸ™ JÓ/ñ	6
Ðñ Ô&Ð(;Ó<Ð=ØØð
ð 	
øô+ ×'Ñ'ò  Ø’
ð ús   «0C	 Ã	C!Ã C!c                 ó®  — t        j                  d«       g }|j                  di «      }|j                  d«      dk(  �rt        t	        j
                  «       «      }|j                  dd«      }|j                  dd«      }dd	| j                  |d
dd|dddidœdœii}|j                  t        j                  |«      «       dd| j                  |t        |t        «      r|nt        j                  |«      dœii}|j                  t        j                  |«      «       dd| j                  |dœii}	|j                  t        j                  |	«      «       |S )a  
        Transform conversation.item.create with tool result to Bedrock format.

        Args:
            json_message: OpenAI conversation.item.create message with tool result

        Returns:
            List of Bedrock format messages (JSON strings)
        z1Handling conversation.item.create for tool resultrÈ   r�   rÉ   rE  r]   r  rc   rœ   FÚTOOLr�   ri   r9   )rB  r�   r£   )rr   r    r¡   r�   r¢   ÚtoolResultInputConfigurationÚ
toolResultr¥   r§   r¨   )r   r©   rˆ   r"   r:   r;   r<   r‰   r|   r}   rð   )
rS   r”   rª   rÈ   Útool_content_namerE  r  Útool_content_startÚtool_resultÚtool_content_ends
             r&   rÍ   zJBedrockRealtimeConfig.transform_conversation_item_create_tool_result_event(  s_  € ô 	×ÑÐPÔQØ%'ˆà"×&Ñ& v¨rÓ2ˆØ�8‰8�FÓÐ5Ó5Ü'*¬8¯>©>Ó+;Ó'<ÐØ!ŸX™X i°Ó4ˆGØ ŸH™H X¨rÓ2ˆFð Ø"Ø&*×&6Ñ&6Ø'8Ø',Ø &Ø &à)0Ø$*Ø7BÀLÐ6Qñ9ñ%ðð)Ðð  �O‰OœDŸJ™JÐ'9Ó:Ô;ð Ø Ø&*×&6Ñ&6Ø'8Ü.8¸ÄÔ.E¡FÌ4Ï:É:ÐV\ÓK]ñ#ðð"ˆKð �O‰OœDŸJ™J {Ó3Ô4ð Ø Ø&*×&6Ñ&6Ø'8ñ#ðð'Ðð �O‰OœDŸJ™JÐ'7Ó8Ô9àˆr%   Ú!realtime_response_transform_inputc                 ó  — 	 t        j                  |«      }|j                  d«      }|j                  d«      }|j                  d
«      }	|j                  d	«      }
|j                  d«      }|j                  d«      }g }|j                  di «      }d|v rt        j                  ddi«      }�nxd|v r-| j                  ||||	«      \  }}}}	}|j                  |«       �nGd|v r*| j                  ||||
«      \  }}
|j                  |«       �nd|v r%| j                  |||«      }|j                  |«       nðd|v rw| j                  |||||
«      \  }}
|j                  |«       t        j!                  |d   «      j"                  dk(  rž| j%                  ||	«      \  }}}}|j                  |«       nud|v r@| j'                  |||«      \  }}}|j                  |«       t        j(                  d||«       n1d|v sd|v r)| j+                  |||	«      \  }}}}|j                  |«       ||||
|	|j                  d«      ||dœS # t         j                  $ r¸ t        |t        «      r|dd j                  dd¬«      n|dd }t        j                  d|«       g |j                  d«      |j                  d«      |j                  d	«      |j                  d
«      |j                  d«      |j                  d«      |j                  d«      dœcY S w xY w)ab  
        Transform Bedrock Nova Sonic response to OpenAI realtime format.

        Args:
            message: Bedrock format message (JSON string)
            model: Model ID
            logging_obj: Logging object
            realtime_response_transform_input: Current state

        Returns:
            Transformed response with updated state
        Nrå   zutf-8Úreplace)Úerrorsrä   rú   rù   r  rû   Úcurrent_item_chunksr  r   )r	  rú   rù   r  rû   rZ  r  r   rc   rd   Ú
configuredTrœ   r  r&  r§   ÚEND_TURNr@  zTool use event: %s (ID: %s)rà   ÚcompletionEnd)r|   ræ   rç   rð   ÚbytesrÚ   r   rè   rˆ   r}   r  rÒ   r$  r)  r4  r   Úmodel_validater   r6  rM  r©   r7  )rS   rÊ   rV   rë   rV  r”   Úmessage_previewrú   rù   rû   r  r  r   r  rc   ÚeventsÚdone_eventsrJ  rK  s                      r&   Útransform_realtime_responsez1BedrockRealtimeConfig.transform_realtime_responseg  s�  € ð&	Ü"&§*¡*¨WÓ"5ˆLð$ "C×!FÑ!FÐG_Ó!`ÐØ?×CÑCÐDYÓZÐØ"C×"GÑ"GÐHaÓ"bÐØ@×DÑDÐE[Ó\ÐØ>×BÑBÐCWÓXÐØ(I×(MÑ(MÐNmÓ(nÐ%à?AÐð $×'Ñ'¨°Ó4ˆð ˜UÑ"Ü,0¯J©J¸ÀdÐ7KÓ,LÒ)à˜uÑ$ð ×2Ñ2ØØ#Ø&Ø'ó	ñØØ#Ø&Ø'Ø"ð ×$Ñ$ VÖ,à˜UÑ"Ø+/×+KÑ+KØØ&Ø#Ø$ó	,Ñ(ˆFÐ(ð ×$Ñ$ VÖ,à˜eÑ#Ø×6Ñ6°uÐ>TÐViÓjˆFØ×$Ñ$ VÕ,à˜UÑ"Ø+/×+KÑ+KØØ&Ø#Ø"Ø$ó,Ñ(ˆFÐ(ð ×$Ñ$ VÔ,Ü ×/Ñ/°°lÑ0CÓD×OÑOÐS]Ò]ð ×.Ñ.Ð/BÐD[Ó\ñØØ*Ø'Ø&à!×(Ñ(¨Õ5à˜%ÑØ.2×.KÑ.KØÐ-Ð/Bó/Ñ+ˆF�L )ð ×$Ñ$ VÔ,ä× Ñ Ð!>À	È<ÕXà˜EÑ! _¸Ñ%=ð ×/Ñ/°Ð7JÐLcÓdñØØ&Ø#Ø"à×$Ñ$ VÔ,ð *Ø&<Ø#6Ø$8Ø'>Ø#D×#HÑ#HÐI^Ó#_Ø"4Ø-Jñ	
ð 		
øôA ×#Ñ#ò 	äCMÈgÔW\ÔC]�˜˜�×$Ñ$ W°YÐ$Ô?ÐcjÐkoÐloÐcpð ô ×"Ñ"Ð#=¸ÔOàØ*K×*OÑ*OÐPhÓ*iØ'H×'LÑ'LÐMbÓ'cØ(I×(MÑ(MÐNdÓ(eØ+L×+PÑ+PÐQjÓ+kØ'H×'LÑ'LÐMbÓ'cØ&G×&KÑ&KÐL`Ó&aØ1R×1VÑ1VÐWvÓ1wñ	ò 	ð	ús   ‚I  É CLÌ
L)N)T)/r   r    r!   Ú__doc__rT   Údictr"   rZ   r^   Úboolr`   Úlistr   r{   Úintr“   r²   rÃ   rÆ   rÐ   rÕ   rÓ   rÞ   râ   rê   ÚLiteLLMLoggingObjr   rñ   r   rö   rø   Útupler   r   r  r   r$  r)  r4  r7  r6  rM  rÍ   r^  r   r   rc  r$   r%   r&   r1   r1   5   s3  „ ÙHò ,ñD¨Dð ¸ð ÀsÈTÁzð Ð]aó ñ¨¨t©ð ¸Cð È#ÐPTÉ*ð Ð`có ð°ó ñ,Z°3ð ,Z¸tÀD¹zÈDÑ?Pð ,ZÐ\_ó ,Zð\¸¸T¹
ð ÀtÈDÁzó ñ0-¸Sð -ÈTð -Ð]`ó -ð&y¸4ð yÀDÈÁIó yðvAÀdð AÈtÐTWÉyó AðFÀdð ÈtÐTWÉyó ð6BÀTð BÈdÐSVÉió BðH.¸Dð .ÀTÈ#ÁYó .ð`
°$°s±)ó 
ð"¸Dð ÀTÈ#ÁYó ð¨¨S©	ó ðB 59ñ	(àð(ð ð(ð (+¨T¡zð	(ð
 
ˆc‰ó(ð\ (,ñ	àðð 'ðð ˜‘I Ñ$ð	ð
 
%óð

àð

ð 'ð

ð 
+ó	

ð  (,ñ	
àð
ð 'ð
ð ˜‘I Ñ$ð	
ð
 
+ó
ðg
àðg
ð ! 4™Zðg
ð !$ d¡
ð	g
ð
 "% t¡ðg
ð 
ØÐ!Ñ"Øˆd‰
Øˆd‰
Øˆd‰
Ø˜$Ñð		 ñ
óg
ðR(2àð(2ð !$ d¡
ð(2ð ! 4™Zð	(2ð
 #Ð#>Ñ?À$ÑFð(2ð 
ˆtÐ(Ñ)¨4Ð0KÑ+LÈtÑ+SÐSÑ	Tó(2ðT!àð!ð !$ d¡
ð!ð ! 4™Zð	!ð
 
Ð"Ñ	#ó!ðFd'àðd'ð !$ d¡
ðd'ð ! 4™Zð	d'ð
   $™Jðd'ð #Ð#>Ñ?À$ÑFðd'ð 
ˆtÐ(Ñ)¨4Ð0KÑ+LÈtÑ+SÐSÑ	Tód'ðLXàðXð ! 4™ZðXð "% t¡ð	Xð
 
ØÐ!Ñ"Øˆd‰
Øˆd‰
Ø˜$Ñð	 ñ
óXð4 1à  4™Zð 1ð "% t¡ð 1ð 
ØÐ!Ñ"Øˆd‰
Øˆd‰
Ø˜$Ñð	 ñ
ó	 1ðD5
àð5
ð !$ d¡
ð5
ð ! 4™Zð	5
ð
 
ˆtÐ(Ñ)¨3°Ð3Ñ	4ó5
ðn=ÐQUð =ÐZ^Ð_bÑZcó =ð~~
à�u‘ð~
ð ð~
ð 'ð	~
ð
 ,Jð~
ð 
#ô~
r%   r1   )1rd  r7   r|   r   r:   rG  r   r   Úpydanticr   Úlitellm._loggingr   Úlitellm._uuidÚ*litellm.litellm_core_utils.litellm_loggingr   ri  Ú-litellm.llms.base_llm.realtime.transformationr	   Ú+litellm.llms.bedrock.realtime.trigger_audior
   Úlitellm.types.llms.openair   r   r   r   r   r   r   r   r   r   r   r   r   Úlitellm.types.realtimer   r   r   Úlitellm.utilsr   r   r(   r#   r*   r^  r+   r-   r/   r1   r$   r%   r&   ú<module>rt     s¼   ðòó Û Û ß å å +Ý Ý SÝ LÝ I÷÷ ÷ õ ÷ñ õ
 *ô"˜	ô "ð */Ð  Ó .Ø(GÈ!Ñ(KÐ  Ó KÙ!&Ð'EÈÑ'JÓ!KÐ ˜Ó KÙ"'Ð(FÈÑ(JÓ"KÐ ˜%Ó KØ"&Ð ˜%Ó &ôp
Ð.õ p
r%   