
    i.                     n    d 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  G d
 de      Zy)z
This file contains the handler for AWS Bedrock Nova Sonic realtime API.

This uses aws_sdk_bedrock_runtime for bidirectional streaming with Nova Sonic.
    N)AnyOptional)verbose_proxy_logger)Logging   )
BaseAWSLLM   )BedrockRealtimeConfigc            $           e Zd ZdZ fdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddedededee   dee   dee	   d	ee   d
ee   dee   dee   dee   dee   dee   dee   dee   de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dededefdZ xZS )BedrockRealtimez=Handler for Bedrock Nova Sonic realtime speech-to-speech API.c                 "    t         |           y )N)super__init__)self	__class__s    v/Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/realtime/handler.pyr   zBedrockRealtime.__init__   s        model	websocketlogging_objapi_baseapi_keytimeoutaws_region_nameaws_access_key_idaws_secret_access_keyaws_session_tokenaws_role_nameaws_session_nameaws_profile_nameaws_web_identity_tokenaws_sts_endpointaws_bedrock_runtime_endpointaws_external_idc           
      `  K   	 ddl m}m} ddlm} ddlm} |d|i}| j                  ||      }||}n||}nd| d	}t        j                  d
| d|         ||| |             } ||      }t               }	 |j                   ||             d{   }t        j                  d       dddddddd}t        j                  | j                  |||||            }t        j                  | j!                  ||||||            }t        j"                  ||d       d{    y# t        $ r t        d      w xY w7 7 # t$        $ rV} t        j&                  d|         	 |j)                  ddt+        |               d{  7    # t$        $ r Y  w xY wd} ~ ww xY ww)a`  
        Establish bidirectional streaming connection with Bedrock Nova Sonic.

        Args:
            model: Model ID (e.g., 'amazon.nova-sonic-v1:0')
            websocket: Client WebSocket connection
            logging_obj: LiteLLM logging object
            aws_region_name: AWS region
            Various AWS authentication parameters
        r   )BedrockRuntimeClient0InvokeModelWithBidirectionalStreamOperationInput)Config)EnvironmentCredentialsResolverzRMissing aws_sdk_bedrock_runtime. Install with: pip install aws-sdk-bedrock-runtimeNr   zhttps://bedrock-runtime.z.amazonaws.comz Bedrock Realtime: Connecting to z with model )endpoint_uriregion!aws_credentials_identity_resolver)config)model_idz2Bedrock Realtime: Bidirectional stream establishedcurrent_output_item_idcurrent_response_idcurrent_conversation_idcurrent_delta_chunkscurrent_item_chunkscurrent_delta_typesession_configuration_requestT)return_exceptionsz)Error in BedrockRealtime.async_realtime: i  zInternal error: )codereason)aws_sdk_bedrock_runtime.clientr&   r'   aws_sdk_bedrock_runtime.configr(   $smithy_aws_core.identity.environmentr)   ImportError_get_aws_region_namer   debugr
   &invoke_model_with_bidirectional_streamasynciocreate_task_forward_client_to_bedrock_forward_bedrock_to_clientgather	Exception	exceptionclosestr)!r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   kwargsr&   r'   r(   r)   optional_paramsr*   r-   bedrock_clienttransformation_configbedrock_streamsession_stateclient_to_bedrock_taskbedrock_to_client_taskes!                                    r   async_realtimezBedrockRealtime.async_realtime   s*    >	 > "!?O #77OO #L)57L5o5FnUL"".|nLP	

 %".L.N

 .V< 5 7<	 %KKDeT   !&&D +/'++/(,'+&*15M &-%8%8//")!&" &-%8%8//")!	&" ..&&"&  a  	d 	JV  	 **;A3?oo4:J3q6(8SoTTT   	s   F.D0 A&F.?E EBE *E
+E /F.0EF.E 
E 	F+F&."FFFF&	F# F&"F##F&&F++F.	client_wsrN   rM   rO   c                 n  K   	 ddl m}m} 	 |j                          d{   }t	        j
                  d|dd         |j                  |||j                  d            }	|	D ]_  }
 | ||
j                  d	      
            }|j                  j                  |       d{    t	        j
                  d|
dd         a 7 7 $# t        $ r]}t	        j
                  d| d       	 |j                  j                          d{  7   n# t        $ r Y nw xY wY d}~yY d}~yd}~ww xY ww)z9Forward messages from client WebSocket to Bedrock stream.r   )BidirectionalInputPayloadPart,InvokeModelWithBidirectionalStreamInputChunkTNz(Bedrock Realtime: Received from client:    r6   )messager   r6   utf-8)bytes_)valuez#Bedrock Realtime: Sent to Bedrock: z$Client to Bedrock forwarding ended: exc_info)aws_sdk_bedrock_runtime.modelsrV   rW   receive_textr   r?   transform_realtime_requestgetencodeinput_streamsendrF   rH   )r   rT   rN   rM   r   rO   rV   rW   rY   transformed_messagesbedrock_messageeventrR   s                r   rC   z*BedrockRealtime._forward_client_to_bedrock   sM    *	
  ) 6 6 88$**>wt}oN
 (='W'W#2?2C2C73 (X ($ (<OH;#2#9#9'#BE
 )55::5AAA(..=ods>S=TU (<# 8* B
  	 &&6qc:T$1177999  :	su   D5C CBC %C
&#C 
C 	D2D-0DDDD-	D D-D  D-#
D5-D22D5c                   K   	 	 |j                          d{   }|d   j                          d{   }|j                  r|j                  j                  r|j                  j                  j	                  d      }	t        j                  d|	dd         ddlm}
 |j                  d	      |j                  d
      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      d}|j                  |	|||      }|j                  |j                  d	      |j                  d
      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      d       |j                  dg       }|D ]K  }t        j                  |      }|j                  |       d{    t        j                  d|dd         M 7 7 7 )# t        $ rS}t        j                  d| d       	 |j!                          d{  7   n# t        $ r Y nw xY wY d}~yY d}~yd}~ww xY ww)z9Forward messages from Bedrock stream to client WebSocket.TNr	   rZ   z)Bedrock Realtime: Received from Bedrock: rX   r   )RealtimeResponseTransformInputr0   r1   r2   r3   r4   r5   r6   r/   )rY   r   r   !realtime_response_transform_inputresponsez"Bedrock Realtime: Sent to client: z$Bedrock to client forwarding ended: r]   )await_outputreceiver\   r[   decoder   r?   litellm.types.realtimerj   rb   transform_realtime_responseupdatejsondumps	send_textrF   rH   )r   rN   rT   rM   r   r   rO   outputresultbedrock_responserj   rk   transformed_responseopenai_messagesopenai_messagemessage_jsonrR   s                    r   rD   z*BedrockRealtime._forward_bedrock_to_client   s    T	-::<<%ay0022<<FLL$7$7'-||':':'A'A''J$(..CDTUYVYDZC[\
 V 3@2C2C43 0=/@/@AV/W3@3D3D54 1>0A0A21 0=/@/@AV/W.;.?.?@T.U9F9J9J;:Y5$ ,A+\+\ 0#$/:[	 ,] ,( "((6J6N6N 87 4H3K3K 54 8L7O7O 98 5I4L4L 65 4H3K3K 54 3G2J2J 43 >R=U=U ?>'6 ';&>&>z2&NO*9'+zz.'A'11,???,22@dsAS@TU +:I <2F @
  	 &&6qc:Too'''  (	s   I7H HH HF8H ,H-$H H H 	I4!I/<IIII/	I"I/!I""I/%
I7/I44I7)NNNNNNNNNNNNNN)__name__
__module____qualname____doc__r   rI   r   LiteLLMLoggingr   floatrS   r
   dictrC   rD   __classcell__)r   s   @r   r   r      s   G #'!%#')-+//3+/'+*.*.04*.6:)-%FF F $	F
 3-F #F %F "#F $C=F  (}F $C=F  }F #3-F #3-F !)F  #3-!F" '/sm#F$ "#%FP33 3  5	3
 3 3j^^ ^  5	^
 ^ $^ ^r   r   )r   rA   rs   typingr   r   litellm._loggingr   *litellm.litellm_core_utils.litellm_loggingr   r   base_aws_llmr   transformationr
   r    r   r   <module>r      s/        1 P % 1aj ar   