
    hj                    H   U d Z ddlZddl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ZddlZddlmZ ddl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 ddlmZ 	 ddlZdZn# e $ r dZ e	j!                    ZY nw xY wej"        rddl#mZ$ ddl#m%Z& n5eZ$ej'        e(d<   eZ&ej'        e(d<   	 ddl#mZ$ ddl#m%Z& n# e $ r dZ$dZ&Y nw xY wej)        *                    ed          Z+ddddddddd gd!d"d#d$gZ,d%e-d&e-fd'Z.dsd(Z/ej0        d)             Z1dtd*Z2d+ Z3d, Z4e+d-             Z5d. Z6d/ Z7d0 Z8ej)        9                    d1ddg          ej)        j:        d2                         Z;ej)        9                    d1ddg          ej)        j:        d3                         Z<ej)        9                    d1ddg          ej)        j:        d4                         Z=ej)        9                    d1ddg          ej)        j:        d5                         Z>ej)        9                    d1ddg          ej)        j:        d6                         Z?ej)        9                    d1ddg          ej)        j:        d7                         Z@ej)        9                    d1ddg          ej)        j:        d8                         ZAej)        9                    d1ddg          ej)        j:        d9                         ZBej)        9                    d1ddg          ej)        j:        d:                         ZCej)        9                    d1ddg          ej)        j:        d;                         ZDej)        9                    d1ddg          ej)        j:        d<                         ZEej)        9                    d1ddg          ej)        j:        d=                         ZFej)        9                    d1ddg          ej)        j:        d>                         ZGej)        9                    d1ddg          ej)        j:        d?                         ZHej)        9                    d1ddg          ej)        j:        d@                         ZIej)        9                    d1ddg          ej)        j:        dA                         ZJej)        9                    d1ddg          ej)        j:        dB                         ZKej)        9                    d1ddg          ej)        j:        dC                         ZLej)        9                    d1ddg          ej)        j:        dD                         ZMej)        9                    d1ddg          ej)        j:        dE                         ZNej)        9                    d1ddg          ej)        j:        dF                         ZOej)        9                    d1ddg          ej)        j:        dG                         ZPej)        9                    d1ddg          ej)        j:        dH                         ZQej)        9                    d1ddg          ej)        j:        dI                         ZRej)        9                    d1ddg          ej)        j:        dJ                         ZSej)        j:        dK             ZTej)        9                    d1ddg          ej)        j:        dL                         ZUej)        9                    d1ddg          ej)        j:        dM                         ZVej)        9                    d1ddg          ej)        j:        dN                         ZWej)        9                    d1ddg          ej)        j:        dO                         ZXej)        9                    d1ddg          ej)        j:        dP                         ZYej)        9                    d1ddg          ej)        j:        dQ                         ZZej)        9                    d1ddg          ej)        j:        dR                         Z[ej)        9                    d1ddg          ej)        j:        dS                         Z\ej)        9                    d1ddg          ej)        j:        dT                         Z]ej)        9                    d1ddg          ej)        j:        dU                         Z^ej)        9                    d1ddg          ej)        j:        dV                         Z_ej)        9                    d1ddg          ej)        j:        dW                         Z`ej)        9                    d1ddg          ej)        j:        dX                         Zaej)        9                    d1ddg          ej)        j:        dY                         Zbej)        9                    d1dg          ej)        j:        dZ                         Zcej)        9                    d1ddg          ej)        j:        d[                         Zdej)        9                    d1ddg          ej)        j:        d\                         Zeej)        9                    d1ddg          ej)        j:        d]                         Zfej)        9                    d1ddg          ej)        j:        d^                         Zgej)        9                    d1ddg          d_             Zhej)        9                    d1ddg          ej)        j:        d`                         Ziej)        9                    d1ddg          da             Zjej)        9                    d1ddg          db             Zkej)        9                    d1ddg          dc             Zlej)        9                    d1ddg          dd             Zmej)        9                    d1ddg          de             Znej)        9                    d1ddg          df             Zoej)        9                    d1ddg          dg             Zpej)        9                    d1ddg          dh             Zqej)        9                    d1ddg          di             Zrej)        9                    d1ddg          dj             Zsej)        9                    d1ddg          dk             Ztej)        j:        dl             Zuej)        j:        dm             Zvej)        j:        dn             Zwej)        9                    d1dg          ej)        j:        do                         Zxej)        9                    d1dg          ej)        j:        dp                         Zyej)        9                    d1ddg          ej)        j:        dq                         Zzej)        9                    d1dg          ej)        j:        dr                         Z{dS )uzTests for live.py.    N)AnyAsyncIterator)mock)	AsyncMock)Mock)patch)Credentials)client   )pytest_helper   )_api_client)_common)Client)live)typesFT)ClientSession	mcp_typesMcpClientSessionz(aiohttp is not installed, skipping test.)reasonget_current_weather!Get the current weather in a cityOBJECTSTRING#The location to get the weather fortypedescriptionCFr   enumlocationunitr   
properties)namer   
parametersr$   r%   c                     |dk    rdndS )"Get the current weather in a city.r      ;    r#   s     e/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/google/genai/tests/live/test_live.pyr   r   X   s    s{{"    c                    t          j        t          j                  }| sd|_        d |_        d |_        d |_        nad |_        |rCt          |t                    rt          j        di |n|}|j        |_        d |_        d |_        nd|_        d|_        d |_        d |_        ||_        t          j                            di i          |_        | |_        ||_        t'          j        t*          j                            dt1          j                              t*          j                            d          	          }d
|i|_        |S )NspecTEST_API_KEYzus-central1test_projectc                      dS )N	test_hostr.   r.   r0   r/   <lambda>z!mock_api_client.<locals>.<lambda>t   s    [ r0   headersSSL_CERT_FILESSL_CERT_DIR)cafilecapathsslr.   )r   	MagicMock	gl_clientBaseApiClientapi_keyr$   projectcustom_base_url
isinstancedictr   HttpOptionsbase_url_host_credentialsmodel_validate_http_optionsvertexair   r>   create_default_contextosenvirongetcertifiwhere_websocket_ssl_ctx)rM   credentialshttp_options
api_clientctxs        r/   mock_api_clientrY   ]   sX   ~9#:;;;*	 ('JJJ!%JJ ( d++%

+
+l
+
+
+ 
 $0#8j  jj)j)j#'j ((*'*".=="o * !*%*"Z^^OW]__==Z^^N++	 	 	# $)#,*	r0   c                      t          t          j                  } t                      | _        t          d          | _        t                      | _        | S )Nr2   ){"serverContent": {"turnComplete": true}}return_value)r   r
   ClientConnectionsendrecvclose)	websockets    r/   mock_websocketrc      sL    V4555);;).>  ). KK)/	r0   c                    K   i t                      t                      _        t          d          _        t          d          }t          d          }|d f|_        t
          j        dfd	            }t          d|          t          j        t          d	|           fd
                        } |             d {V S )N8   {
  "setupComplete": {"sessionId": "test_session_id"}
}
r\   NN
test_tokentokenc                   K   W V  d S Nr.   uriadditional_headerskwargsmock_wss      r/   mock_connectz)get_connect_message.<locals>.mock_connect         
MMMMMMr0   google.auth.defaultnew
ws_connectc                  :  K   t          j                  } |                               4 d {V  	 d d d           d {V  n# 1 d {V swxY w Y   j                                         t          j        j        j        d         d                   S )Nmodelconfigr   )r   	AsyncLiveconnectr_   assert_called_oncejsonloads	call_args)live_modulerW   rz   rp   ry   s    r/   _test_connectz*get_connect_message.<locals>._test_connect   s"      .,,K"" #           	                           L##%%%:gl,Q/2333s   A		
AArk   )
r   r_   r`   r   r]   
contextlibasynccontextmanagerr   objectr   )rW   ry   rz   mock_google_auth_default
mock_credsrq   r   rp   s   ```    @r/   get_connect_messager      s     ^FKK'',
H  ', "|<<<,'''*+5t*<'!     "! 		$<===<l555	4 	4 	4 	4 	4 	4 	4 65 >=	4 }						r0   c                 *   K   d | 2              d {V S )Nc                 "   K   g | 3 d {V }|
6 S rk   r.   ).0values     r/   
<listcomp>z+_async_iterator_to_list.<locals>.<listcomp>   s.      	.	.	.	.	.	.	.	.%%	.	.	.	.s   r.   )
async_iters    r/   _async_iterator_to_listr      s,      	.	.:	.	.	.	.	.	.	.	.	..r0   c                 ^   d}|                      d|           t                      }|j        j        j        j        rJ |j        j        j        j        |k    sJ t          |j        j        j        t          j	                  sJ |j        j        j        j
        j        d         |k    sJ d S )Ngoogle_api_keyGOOGLE_API_KEYx-goog-api-keysetenvr   aior   r   rM   rB   rE   rW   rA   rL   r9   monkeypatchrB   r
   s      r/   test_mldev_from_envr      s    '%w///88&Z_(1111		$	,	7	7	7	7	FJO/1I	J	JJJJ		$	2	:;K	LPW	W	W	W	W	W	Wr0   c                    d}d}|                      dd           |                      d|           |                      d|           t                      }|j        j        j        j        J |j        j        j        j        sJ |j        j        j        j        |k    sJ t          |j        j        j        t          j
                  sJ d|j        j        j        j        j        vsJ d S )Nfake_project_idzfake-locationGOOGLE_GENAI_USE_VERTEXAItrueGOOGLE_CLOUD_PROJECTGOOGLE_CLOUD_LOCATIONr   )r   r   r   r   r   rD   rM   rC   rE   rW   rA   rL   r9   )r   
project_idr$   r
   s       r/   test_vertex_from_envr      s     *(0&999+Z888,h77788&		$	4	<	<	<		$	----		$	,
	:	:	:	:	FJO/1I	J	JJJJ	!<!J!R	R	R	R	R	R	Rr0   c                    d}|                      dd           |                      d|           |                      dd           |                      dd           t                      }|j        j        j        j        sJ |j        j        j        j        |k    sJ t          |j        j        j        t          j	                  sJ |j        j        j        j
        j        d         |k    sJ d S )	Nr   r   r   r   r    r   r   r   r   s      r/   test_vertex_api_key_from_envr      s    '0&999%w///
 ,b111+R00088&		$	----		$	,	7	7	7	7	FJO/1I	J	JJJJ		$	2	:;K	LPW	W	W	W	W	W	Wr0   c                  d    d} t          j        dd| i          } |j                    dk    sJ d S )Nzhttps://test.comr   rH   )rB   rV   zwss://test.com)r@   rA   _websocket_base_urlrH   rW   s     r/   test_websocket_base_urlr      sN    (&)  * 
(	'	)	)-=	=	=	=	=	=	=r0   c                      d} t          j        d| ddid          }d |_        d |_         |j                    | k    sJ d S )Nz"https://test-api-gateway-proxy.comTAuthorizationzBearer test_tokenrH   r9   rM   rV   )r@   rA   rC   r$   r   r   s     r/   4test_websocket_base_url_no_auth_with_custom_base_urlr      sm    1(&%':;   * ** 
(	'	)	)X	5	5	5	5	5	5r0   rM   c                   K   t          j        t          |          |           }|                    d           d {V  | j                                         t          j        | j        j        d         d                   }d|v sJ d S )NrM   rW   rb   testinputr   client_contentr   AsyncSessionrY   r_   r}   r~   r   r   rc   rM   session	sent_datas       r/   test_async_session_send_textr      s        (333~  ' 	6"""""""""((***j,6q9!<==)	Y	&	&	&	&	&	&r0   c                 2  K   t          j        t          |          |           }dddigigdd}|                    |           d {V  | j                                         t          j        | j        j        d	         d	                   }d
|v sJ d S )Nr   r   partstextr   T)contentturn_completer   r   r   r   rc   rM   r   r   r   s        r/   $test_async_session_send_content_dictr     s      
  (333~  ' ff-./0 . 	>*********((***j,6q9!<==)	Y	&	&	&	&	&	&r0   c                   K   t          j        t          |          |           }t          j        t          j        t          j        d          g          gd          }|                    |           d {V  | j                                         t          j
        | j        j        d	         d	                   }d
|v sJ d S )Nr   r   r   r   )r   T)turnsr   r   r   r   )r   r   rY   r   LiveClientContentContentPartr_   r}   r~   r   r   r   s        r/   test_async_session_send_contentr     s      
  (333~  ' *]%*&"9"9"9!:;;;<D  . 	>*********((***j,6q9!<==)	Y	&	&	&	&	&	&r0   c                 &  K   t          j        t          |          |           }ddd}|                    |           d {V  | j                                         t          j        | j        j        d         d                   }d|v sJ d S 	Nr   r      000000	audio/pcmdata	mime_typer   r   realtime_inputr   rc   rM   r   r   r   s        r/   test_async_session_send_bytesr   /  s      
  (333~  ' &K@@.>*********((***j,6q9!<==)	Y	&	&	&	&	&	&r0   c                 H  K   t          j        t          |          |           }t          j        dd          }|                    |           d {V  | j                                         t          j        | j        j	        d         d                   }d|v sJ d S r   )
r   r   rY   r   Blobr_   r}   r~   r   r   r   s        r/   test_async_session_send_blobr   ?  s      
  (333~  ' :9DDD.>*********((***j,6q9!<==)	Y	&	&	&	&	&	&r0   c                 p  K   t          j        t          |          |           }t          j        t          j        dd          g          }|                    |           d {V  | j                                         t          j	        | j        j
        d         d                   }d	|v sJ d S )
Nr   r   MDAwMDAwr   r   media_chunksr   r   r   )r   r   rY   r   LiveClientRealtimeInputr   r_   r}   r~   r   r   r   s        r/   &test_async_session_send_realtime_inputr   O  s      
  (333~  ' 0JJ+FFFG  . 	>*********((***j,6q9!<==)	Y	&	&	&	&	&	&r0   c                   K   t          j        t          |          |           }|r.t          j        t          j        dddd          g          }n.t          j        t          j        ddddd	
          g          }|                    |           d {V  | j                                         t          j	        | j        j
        d         d                   }d|v sJ d S )Nr   r   r   g      -@r   )temperaturer%   )r(   responsefunction_responseszsome-id)r(   r   idr   r   tool_response)r   r   rY   r   LiveClientToolResponseFunctionResponser_   r}   r~   r   r   )rc   rM   r   r   r   s        r/   %test_async_session_send_tool_responser   `  s1     
  (333~  '  0"*)-s;;  
  MM 0"*)-s;;  
  M 	=)))))))))((***j,6q9!<==)	I	%	%	%	%	%	%r0   c                 <  K   t          j        t          |          |           }|                    d            d {V  | j                                         t          j        | j        j        d         d                   }d|v sJ |d         d         sJ d S )Nr   r   r   r   r   r   r   r   s       r/   "test_async_session_send_input_noner     s      
  (333~  ' 	4         ((***j,6q9!<==)	Y	&	&	&	&	#	$_	555555r0   c                   K   t          j        t          |          |           }t          j        t
                    5  |                    ddig           d {V  d d d            n# 1 swxY w Y   t          j        t
                    5  |                    ddi           d {V  d d d            d S # 1 swxY w Y   d S )Nr   r   invalid_keyinvalid_valuer   )r   r   rY   pytestraises
ValueErrorr_   rc   rM   r   s      r/   test_async_session_send_errorr     sv     
  (333~  ' }Z   A A
,,}o>?,
@
@@@@@@@@A A A A A A A A A A A A A A A }Z   ? ?
,,m_=,
>
>>>>>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s$     A,,A03A0B<<C C c                    K   t          j        t          |          |           }|                                }t	          |           d {V }t          |d         t          j                  sJ d S )Nr   r   r   )r   r   rY   receiver   rE   r   LiveServerMessage)rc   rM   r   	responsess       r/   test_async_session_receiver     s        (333~  ' oo)+I66666666)	IaL%"9	:	::::::r0   c                 8  K   t          d          | _        t          j        t	          |          |           }t          j        t                    5  |                                	                                 d {V  d d d            d S # 1 swxY w Y   d S )Nzinvalid jsonr\   r   r   )
r   r`   r   r   rY   r   r   r   r   	__anext__r   s      r/    test_async_session_receive_errorr     s      
 "~>>>. (333~  ' }Z   ( (
//


%
%
'
''''''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   -BBBc                   K   t          ddg          | _        t          j        t	          |          |           }|                                }t          |           d {V }t          |d         t          j	                  sJ |d         j
        j        j        d         j        dk    sJ |d         j
        j        d	k    sJ d S )
Nz>{"serverContent": {"modelTurn": {"parts":[{"text": "test"}]}}}r[   side_effectr   r   r   r      T)r   r`   r   r   rY   r   r   rE   r   r   server_content
model_turnr   r   r   rc   rM   r   messagess       r/   test_async_session_receive_textr     s      
 "
J
5  .  (333~  ' __(*844444444(	HQK!8	9	9999	!	#	.	4Q	7	<	F	F	F	F	!	#	1T	9	9	9	9	9	9r0   c                 |  K   t          ddg          | _        t          j        t	          |          |           }|                                }t          |           d {V }t          |d         t          j	                  sJ |d         j
        j        j        d         j        j        dk    sJ |d         j
        j        j        d         j        j        dk    sJ t!          j        t$                    5  t          |                                           d {V  d d d            d S # 1 swxY w Y   d S )	Nzl{"serverContent": {"modelTurn": {"parts":[{"inlineData": {"data": "MDAwMDAw", "mimeType": "audio/pcm" }}]}}}r[   r   r   r   r   r   r   )r   r`   r   r   rY   r   r   rE   r   r   r   r   r   inline_datar   r   r   r   RuntimeErrorr   s       r/    test_async_session_receive_audior    s     
 "E 6  .  (333~  ' __(*844444444(	HQK!8	9	9999qk +1!4@J	    qk +1!4@E	    }\"" 5 5
!'//"3"3
4
444444445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   <(D11D58D5c                   K   t          ddg          | _        t          j        t	          |          |           }|                                }t          |           d {V }t          |d         t          j	                  sJ |d         j
        j        d         j        dk    sJ |d         j
        j        d         j        d         d	k    sJ |d         j
        j        d         j        d
         dk    sJ t          j        t                     5  t          |                                           d {V  d d d            d S # 1 swxY w Y   d S )Nzv{"toolCall": {"functionCalls": [{"name": "get_current_weather", "args": {"location": "San Francisco", "unit": "C"}}]}}r[   r   r   r   r   r   r$   zSan Franciscor%   r   )r   r`   r   r   rY   r   r   rE   r   r   	tool_callfunction_callsr(   argsr   r   r  r   s       r/   $test_async_session_receive_tool_callr	    s     
 "" 6	 	 	.  (333~  ' __(*844444444(	HQK!8	9	9999	!		-a	0	59N	N	N	N	Nqk*1-2:>	    
!		-a	0	5f	=	D	D	D	D}\"" 5 5
!'//"3"3
4
444444445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   (EEEc                 B  K   t          g d          | _        t          j        t	          |          |           }|                                }t          |           d {V }t          |d         t          j	                  sJ |d         j
        j        j        dk    sJ |d         j
        j        j        dk    sJ t          |d         t          j	                  sJ |d         j
        j        j        d	k    sJ |d         j
        j        j        d
k    sJ d S )N)zS{"serverContent": {"inputTranscription": {"text": "test_input", "finished": true}}}zV{"serverContent": {"outputTranscription": {"text": "test_output", "finished": false}}}r[   r   r   r   r   
test_inputTr   test_outputF)r   r`   r   r   rY   r   r   rE   r   r   r   input_transcriptionr   finishedoutput_transcriptionr   s       r/   (test_async_session_receive_transcriptionr    s?     
 "    .  (333~  ' __(*844444444(	HQK!8	9	9999	!	#	7	<	L	L	L	L	!	#	7	@D	H	H	H	H	HQK!8	9	9999	!	#	8	=	N	N	N	N	!	#	8	AU	J	J	J	J	J	Jr0   c                 z  K   t          ddg          | _        t          j        t          j        d                    }t          j        t          |          |           }|                                }t          |           d {V }|d	         }t          |t          j                  sJ ||k    sJ d S )
Nz{"goAway": {"timeLeft": "10s"}}r[   r   10s)	time_left)go_awayr   r   r   )r   r`   r   r   LiveServerGoAwayr   r   rY   r   r   rE   rc   rM   expected_resultr   r   messages         r/   test_async_go_awayr  (  s      
 "
+
5  . +$u555  /  (333~  ' __(*844444444(QK'	GU4	5	5555	O	#	#	#	#	#	#r0   c                 ~  K   t          ddg          | _        t          j        t          j        ddd                    }t          j        t          |	          | 
          }|                                }t          |           d {V }|d         }t          |t          j                  sJ ||k    sJ d S )Nz{
                "sessionResumptionUpdate": {
                    "newHandle": "test_handle",
                    "resumable": "true",
                    "lastConsumedClientMessageIndex": "123456789"
                }
          }r[   r   test_handleTi[)
new_handle	resumable"last_consumed_client_message_index)session_resumption_updater   r   r   )r   r`   r   r   !LiveServerSessionResumptionUpdater   r   rY   r   r   rE   r  s         r/   $test_async_session_resumption_updater!  A  s      
 " 6	  . + % G"-6! ! !  /  (333~  ' __(*844444444(QK'	GU4	5	5555	O	#	#	#	#	#	#r0   c                    K   t          j        t          |          |           }d }|                     |            d          2 3 d {V }t	          |t
          j                  sJ $6 d S )Nr   c                    K   dW V  dW V  d S )Ns   data1s   data2r.   r.   r0   r/   mock_streamz4test_async_session_start_stream.<locals>.mock_streamp  s       
NNNN
NNNNNNr0   r   )streamr   )r   r   rY   start_streamrE   r   r   )rc   rM   r   r$  r  s        r/   test_async_session_start_streamr'  f  s       x(((. '   ++[]]k ,   8 8 8 8 8 8 8G gu6777777  s   A,c                   K   t          j        ddg          | _        t          j        t          |          |           }t          |                                           d {V }t          |          dk    sJ |d         }t          |t          j                  sJ |j        J |j        j        t          j        j        k    sJ |d         j        j        du sJ d S )	NzJ{"voiceActivityDetectionSignal": {"vadSignalType": "VAD_SIGNAL_TYPE_SOS"}}r[   r   r   r   r   T)r   r   r`   r   r   rY   r   r   lenrE   r   r   voice_activity_detection_signalvad_signal_typeVadSignalTypeVAD_SIGNAL_TYPE_SOSr   r   )rc   rM   r   r   vad_messages        r/   %test_async_session_receive_vad_signalr0  z  s      
V
5  .  (333~  ' +7??+<+<========( 
X				+	K!8	9	9999		4	@	@	@1A			01 1 1 1
 
"	$	2d	:	:	:	:	:	:r0   c                    K   t          j        t          |          |           }|                                 d {V  | j                                         d S )Nr   )r   r   rY   ra   r}   r   s      r/   test_async_session_closer2    sg       x(((. ' 	))+++++r0   c                 V  K   t          j                    5  t          j        d           t          t	          |           d           d {V }d d d            n# 1 swxY w Y   di i}| r)d|d         d<   i |d         d<   d	g|d         d         d
<   nd|d         d<   ||k    sJ d S )Nerrorr   
test_modelry   setupOprojects/test_project/locations/us-central1/publishers/google/models/test_modelry   generationConfigAUDIOresponseModalitiesmodels/test_model)warningscatch_warningssimplefilterr   rY   )rM   resultr  s      r/    test_bidi_setup_to_api_no_configrA    s3          '"""&***        F               bM/ <(yOGW%35OG/0JQOG/01EFF(;OGW%	?	"	"	"	"	"	"s   :AA #A c                   K   dddddiidddd	d
dddddddiddigdddi}| r6d|d         d<   dg|d         d         d<   dddiidd|d         d         d<   nd|d         d<   dddiidddddid	d
dddddd
}t          t          |           d |!           d {V }t          j                            |d "          t          j                            |d "          k    sJ t          j        t          j        t          j        t          j        d#          $          d          dt          j	        d%          d	d
ddt          j
        j        dd&
  
        }t          t          |           d |!           d {V }t          j                            |d "          t          j                            |d "          k    sJ d S )'Nr7  r<  prebuilt_voice_config
voice_namez
en-defaultzen-US)voice_configlanguage_codeTffffff?皙?g      "@
   MEDIA_RESOLUTION_MEDIUM   )speechConfigenableAffectiveDialogr   topPtopKmaxOutputTokensmediaResolutionseedproactive_audior   test instructionuserr   role)ry   r9  proactivitysystemInstructionr8  ry   r:  r9  r;  )voiceConfiglanguageCoderL  	   )
speech_configenable_affective_dialogrX  r   top_ptop_kmax_output_tokensrR  system_instructionmedia_resolutionr   r5  rx   )r   ro   )rD  )rC  )rS  )
r]  r^  rX  r   r_  r`  ra  rc  rR  rb  )r   rY   r   LiveClientMessage_from_responseLiveConnectConfigSpeechConfigVoiceConfigPrebuiltVoiceConfigProactivityConfigMediaResolutionrJ  )rM   r  config_dictr@  rz   s        r/   $test_bidi_setup_to_api_speech_configrm    s1     
 & .l/K# $+	  (, !#!:  ,T2 0
    % /:  <	. GW%
 	JOG/01EF
 $lL%A
  	D DOG/0@@ )<OGW% &l'C #	  "&'..3 +" %x((([        & 
	 	/	/d 
0 
 
--t .  
 
 
 
 "&($)$=)% % %  
     #)$???,D+#  && %x(((        & 
	 	/	/d 
0 
 
--t .  
 
 
 
 
 
r0   c           	         K   ddddddiiddddd	iidgiid
ddddddd}t          j        t          d          5  t          t	          |           d|           d {V }d d d            d S # 1 swxY w Y   d S )Nmulti_speaker_voice_configspeaker_voice_configsAlicerC  rD  leda)speakerrE  BobkorerG  rH  r\  rI  rK  rT  rJ  )r]  r   r_  r`  ra  rR  rb  rc  z.*multi_speaker_voice_config.*matchr   r5  rx   )r   r   r   r   rY   rM   rl  r@  s      r/   2test_bidi_setup_error_if_multispeaker_voice_configry  "  s<      '%!(1L&3I'  "'1L&3I' ()$ .33 +6 }Z'GHHH  &***        F                 s   'A11A58A5c                   K   ddi}t          j        t          |           t                    5  t	          t          |           d|           d {V }d d d            n# 1 swxY w Y   | sd S |d         d         dk    sJ d S )Nexplicit_vad_signalTr   r5  rx   r7  explicitVadSignal)r   exception_if_mldevrY   r   r   rx  s      r/   test_explicit_vadr~  J  s       '-+'x(((*    '***,{        F               
 
F	,	-	5	5	5	5	5	5s   'A""A&)A&c                   K   t          |           }ddi}t          j        |t                    5  t	          t          |           d|           d {V }d d d            n# 1 swxY w Y   | sd S |d         d         dk    sJ d S )Nr   r{  Tr5  rx   r7  r|  )rY   r   r}  r   r   )rM   rW   rl  r@  s       r/   test_explicit_vad_configr  Z  s      111* '-+'
J??  &***        F               
 
F	,	-	5	5	5	5	5	5s   'A$$A(+A(c                     K   dddii} t          t          d          d|            d {V }|d         d	         ddik    sJ d S )
Nhistory_config!initial_history_in_client_contentTFr   r5  rx   r7  historyConfigr   rY   )rl  r@  s     r/   test_history_configr  l  s       <dC+ %u%%%\+        & 
	))4. 
 
 
 
 
 
r0   c                 "  K   dddigddi}t          j        di |}ddddigdddi}| r)d	|d         d
<   i |d         d<   dg|d         d         d<   nd|d         d
<   t          t          |           d|           d {V }||k    sJ d S )Nrb  r   rT  rU  rV  r7  r5  )ry   rY  r8  ry   r9  r:  r;  r<  r   rx   r.   r   rf  r   rY   rM   rl  rz   r  r@  s        r/   >test_bidi_setup_to_api_with_system_instruction_as_content_typer  y  s5      /01 + "11[11&!345    /  	< 	Z G 46OG/0JOG/01EFF )<OGW%$x(((        & 
?	"	"	"	"	"	"r0   c                 Z  K   dgdddidi igd}t          j        di |}dddgdd	digd
ddi igdi}| rd|d         d<   nd|d         d<   t          t          |           d|           d {V }||k    sJ t          t          |           d|           d {V }||k    sJ d S )NTEXTrT  r   rG  google_searchresponse_modalitiesrb  generation_configtoolsr7  r   r;  r   rU  rV  googleSearchr9  rY  r  r8  ry   r<  r   r5  rx   r.   r  r  s        r/   6test_bidi_setup_to_api_with_config_tools_google_searchr    sx      %X.)3/ "%&	 + "11[11& %+H 
  !345    $R()
 
/  <(yOGW%%(;OGW%$x(((        &
 
?	"	"	"	" %x(((        &
 
?	"	"	"	"	"	"r0   c                    K   dgdddidi igd}t          j        di |}dddgdd	digd
ddi igdi} rd|d         d<   nd|d         d<   t          j        t          dd           t          j        t          dd            fd                        } ||           d {V }||k    sJ  ||           d {V }||k    sJ d S )Nr  rT  r   rG  r  r  r7  r  r   rU  rV  r  r  r8  ry   r<  r   rt   McpToolc                 T   K   t          t                    d|            d {V S )Nr   r5  rx   r  )rz   rM   s    r/   get_connect_message_no_mcpzXtest_bidi_setup_to_api_with_config_tools_with_no_mcp.<locals>.get_connect_message_no_mcp  sQ       %***6         r0   r.   )r   rf  r   r   r   )rM   rl  rz   r  r  r@  s   `     r/   4test_bidi_setup_to_api_with_config_tools_with_no_mcpr    s      %X.)3/ "%&	 + "11[11& %+H 
  !345    $R()
 
/  <(yOGW%%(;OGW%<(d333<iT***    +* 43 ,+K88888888&	?	"	"	"	"++K88888888&	?	"	"	"	"	"	"r0   c                   K   t          j        t          j        d          dgt          j        t          j        d          gd          t          j        dt          j        d	
                              }dddgdddigddddd	iddi}| rd|d         d<   nd|d         d<   t          t          |           d|           d {V }||k    sJ d S )NrG  )r   r  rT  r   rU  rV  i  rI  )target_tokens)trigger_tokenssliding_window)r  r  rb  context_window_compressionr7  r  r   r  )r9  rY  contextWindowCompressionr8  ry   r<  r   r5  rx   )	r   rf  GenerationConfigr   r   ContextWindowCompressionConfigSlidingWindowr   rY   )rM   rz   r  r@  s       r/   6test_bidi_setup_to_api_with_context_window_compressionr    sm     
 ".3???!(!34445F   "'!E,2>>>" " "
 
 
&  %+H 
  !345   
 !%!0" 5( ( /   <(yOGW%%(;OGW%$x(((        & 
?	"	"	"	"	"	"r0   c                 \  K   ddidt           igd}t          j        di |}ddddd	d
dd	ddgddddddgigdi}t          t	          |           d|           d {V }|d         d         d         d         d         d         |d         d         d         d         d         d         k    sJ t          t	          |           d|           d {V }|d         d         d         d         d         d         |d         d         d         d         d         d         k    sJ d S )Nr   rG  function_declarationsr  r  r7  r5  functionDeclarationsr   r   r   r   r   r    r!   r#   r&   r   r   r)   r(   r   ry   r  r   rx   r  r   r   r.   )r  r   rf  r   rY   r  s        r/   =test_bidi_setup_to_api_with_config_tools_function_declarationr  %  s      *3/(*?@A + "11[11&$& '/"G' ' ,4c3Z"H"H% %! ! 0!D( ( '  /. %x(((        &
 
	!!	$%;	<Q	?
 gw'*+AB1E

 
 
 
 %x(((        &
 
	!!	$%;	<Q	?
 gw'*+AB1E

 
 
 
 
 
r0   c                 X  K   ddit           gd}t          j        di |}dddddd	d
dddgddddddgigdi}t          t	          |           d|           d {V }|d         d         d         d         d         d         |d         d         d         d         d         d         k    sJ t          t	          |           d|           d {V }|d         d         d         d         d         d         |d         d         d         d         d         d         k    sJ d S )Nr   rG  r  r7  r5  r  r   r   r   r   r   r    r!   r#   r&   r   r+   r  r  r   rx   r  r   r   r.   )r   r   rf  r   rY   r  s        r/   :test_bidi_setup_to_api_with_config_tools_function_directlyr  a  s	      *3/#$ + "11[11&$& '/"G' ' ,4c3Z"H"H% %! ! 0!E( ( '  /. %x(((        &
 
	!!	$%;	<Q	?
 gw'*+AB1E

 
 
 
 %x(((        &
 
	!!	$%;	<Q	?
 gw'*+AB1E

 
 
 
 
 
r0   c                 ~  K   t          |           }t          j                            |t                    }t          j        j        |_        ddid|gigd}t          j        di |}t          t          |           d|           d {V }|d	         d
         d         d         d         d         dk    sJ d S )Nr   )r
   callabler   rG  r  r  r5  rx   r7  r  r   r  behaviorNON_BLOCKINGr.   )
rY   r   FunctionDeclarationfrom_callabler   Behaviorr  r  rf  r   )rM   rW   declarationrl  rz   r@  s         r/   3test_bidi_setup_to_api_with_tools_function_behaviorr    s      111*)77"5 8  + 4+)3/(;-89 + "11[11&$x(((V        &
 Wogq!"89!<ZH	     r0   c                 $  K   t           d S dddddddiidd	d
dgigdi}dddgiddddddiidd	d
dgigdi}t          t          |           ddt          j        d	d
ddddiid          gi           d {V }| r||k    sn|sJ d S d S )Nr7  r<  r  r   r$   r   r   r&   get_weatherGet the weather in a city.r  r  r;  r:  r8  r9  ry   r  r   r5  r  r   stringr(   r   inputSchemarx   )r   r   rY   Tool)rM   expected_result_googleaiexpected_result_vertexair@  s       r/   ,test_bidi_setup_to_api_with_config_mcp_toolsr    s     
 
F &$&$$h'%! ! (!=( ( '  ( "% ` %&$$h'%! ! (!=( ( '  4 %x(((
n$:&%/&(1C$D   	        && 
((((# )((((((r0   c                 "  K   t           d S  G d dt                    }ddddddd	iid
dddgigdi}dddgidddddd	iid
dddgigdi}t          t          |           dd |            gi           d {V }| r||k    sn|sJ d S d S )Nc                       e Zd Zd Zd ZdS )Ltest_bidi_setup_to_api_with_config_mcp_session.<locals>.MockMcpClientSessionc                 "    d | _         d | _        d S rk   )_read_stream_write_streamselfs    r/   __init__zUtest_bidi_setup_to_api_with_config_mcp_session.<locals>.MockMcpClientSession.__init__  s    ddr0   c           
      j   K   t          j        t          j        ddddddiid          g	          S )
Nr  r  r   r$   r   r  r&   r  )r  )r   ListToolsResultr  r  s    r/   
list_toolszWtest_bidi_setup_to_api_with_config_mcp_session.<locals>.MockMcpClientSession.list_tools  sY      &n$:&%/&(1C$D   	   r0   N)__name__
__module____qualname__r  r  r.   r0   r/   MockMcpClientSessionr    s2                 r0   r  r7  r<  r  r   r$   r   r   r&   r  r  r  r  r;  r:  r8  r  r   r5  r  rx   )r   r   r   rY   )rM   r  r  r  r@  s        r/   .test_bidi_setup_to_api_with_config_mcp_sessionr    s     
 
F    -   * &$&$$h'%! ! (!=( ( '  ( "% ` %&$$h'%! ! (!=( ( '  4 %x(((
((**+        & 
((((# )((((((r0   c                    K   ddi igi}t          j        d
i |}dddi igdi}t          t          |           d|           d {V }|d         d         d	         |d         d         d	         k    sJ d S )Nr  code_executionr7  r5  codeExecutionr  r   rx   r   r.   r  r  s        r/   7test_bidi_setup_to_api_with_config_tools_code_executionr  [  s       !2&'+ "11[11&r  / %x(((        &
 
	!!	$(@(I!(L	L	L	L	L	L	Lr0   c                    K   ddddddddd	d
i}t          j        di |}dd|d         di}t          t          |           d|           d {V }|d         d         |d         d         k    sJ d S )Nrealtime_input_configTSTART_SENSITIVITY_HIGHEND_SENSITIVITY_HIGH   d   )disabledstart_of_speech_sensitivityend_of_speech_sensitivityprefix_padding_mssilence_duration_msNO_INTERRUPTIONTURN_INCLUDES_ALL_INPUT)automatic_activity_detectionactivity_handlingturn_coverager7  r5  )ry   realtimeInputConfigr   rx   r  r.   r  r  s        r/   1test_bidi_setup_to_api_with_realtime_input_configr  t  s       -E+A#%%(+ +  14
  
 + "11[11&!,-D!E / %x(((        & Wo+,		!"7	89 9 9 9 9 9r0   c                    K   di i}t          j        di |}ddi di}t          t          |           d|           d {V }|d         d         |d         d         k    sJ d S )	Ninput_audio_transcriptionr7  r5  )ry   inputAudioTranscriptionr   rx   r  r.   r  r  s        r/   /test_bidi_setup_to_api_with_input_transcriptionr    s       "2+ "11[11&%' / %x(((V        &
 Wo/0		!";	<= = = = = =r0   c                    K   di i}t          j        di |}ddi di}t          t          |           d|           d {V }|d         d         |d         d         k    sJ d S )	Noutput_audio_transcriptionr7  r5  )ry   outputAudioTranscriptionr   rx   r  r.   r  r  s        r/   0test_bidi_setup_to_api_with_output_transcriptionr    s       #B+ "11[11&&( / %x(((        & Wo01		!"<	=> > > > > >r0   c                    K   ddi}t          j        d
i |}ddddidi}t          t          |           d|           d {V }|d         d	         d         |d         d	         d         k    sJ d S )Nrc  MEDIA_RESOLUTION_LOWr7  r5  rQ  ry   r9  r   rx   r9  r.   r  r  s        r/   ,test_bidi_setup_to_api_with_media_resolutionr    s       0+ "11[11&01GH / %x(((        & Wo()*;<		!"4	56G	HI I I I I Ir0   c                 x   K   dddgiddi}t          t          |           d           d {V }||k    sJ d S )	Nr7  r;  r:  r8  )r9  ry   r   z#publishers/google/models/test_modelr6  r  )rM   r  r@  s      r/   test_bidi_setup_publishersr    s       !$
 d 	/ %x(((13 3 3 3 3 3 3 3 3& 
?	"	"	"	"	"	"r0   c                    K   t          j        t          d          5  t          t	          |           ddddii           d {V }d d d            n# 1 swxY w Y   |d	         d
         d         dk    sJ d S )Nz;Setting `LiveConnectConfig.generation_config` is deprecatedrv  r   r<  r  r   rG  rx   r7  r9  )r   warnsDeprecationWarningr   rY   )rM   r@  s     r/   )test_bidi_setup_generation_config_warningr    s      
 |I   < < '***!#mS%9:< < < < < < < < <F	< < < < < < < < < < < < < < < 
+	,]	;s	B	B	B	B	B	Bs   +AAAc                    K   dddii}t          j        di |}t          t          |           d|           d {V }ddddiii}| rd	d
gi|d         d<   d|d         d<   nd|d         d<   ||k    sJ d S )Nsession_resumptionhandler  r   r5  rx   r7  sessionResumptionr;  r:  r9  r8  ry   r<  r.   r  )rM   rl  rz   r@  r  s        r/   .test_bidi_setup_to_api_with_session_resumptionr    s       X}5+ "11[11&$x(((        & 
 /  <
4OG/0
 )zOGW%%(;OGW%	?	"	"	"	"	"	"r0   c                 h  K   t          |           }ddddi}t          j        di |}t          j        |t
                    5  t          t          |           d|           d {V }d d d            n# 1 swxY w Y   dd	dddii}| rd
dgi|d         d<   d|d         d<   nd S ||k    sJ d S )Nr   r  r  T)r  transparentr5  rx   r7  r  r;  r:  r9  r8  ry   r.   )rY   r   rf  r   r}  r   r   )rM   rW   rl  rz   r@  r  s         r/   :test_bidi_setup_to_api_with_transparent_session_resumptionr  (  sn      111*}TJJ+ "11[11&'
J??  &***        F               
%!   /  
4OG/0
 )zOGW%%
F	?	"	"	"	"	"	"s   'A88A<?A<c                   K   t          |           }ddddi}t          j        |t                    5  t	          |d|           d {V }d d d            n# 1 swxY w Y   | sdd	d
dddidi}||k    sJ t          j        t          j        dd                    }t          j        |t                    5  t	          |d|           d {V }d d d            n# 1 swxY w Y   | s||k    sJ d S d S )Nr   translation_configTes)echo_target_languagetarget_language_coder5  )rW   ry   rz   r7  r<  translationConfigr  )r  )rY   r   exception_if_vertexr   r   r   rf  TranslationConfig)rM   rW   rl  r@  r  rz   s         r/   .test_bidi_setup_to_api_with_translation_configr  M  s%      111* "&"& + (Z@@  &\+        F              
 
 %(#,0,0& &!
 

O _$$$$ "0##    & (Z@@  &\&        F              
 
 %_$$$$% %$$s#   AA A=C""C&)C&c                     t          j        t          |          |           }|                    d          }d|v sJ |dddddigdgd	ik    sJ t	          j        d
i |sJ d S )Nr   r   r   r   FrU  r   rW  r   r   r   r.   )r   r   rY   _parse_client_messager   rd  rc   rM   r   r@  s       r/   test_parse_client_message_strr  ~  s     (333~  ' ((00&	V	#	#	#	#	 #/?.@AAB  
 
 
 
 
	 	*	*6	*	******r0   c                    K   ddddi}ddddi}| rdg|d<   dd	|ii}| rd
|d         d<   nd|d         d<   t          t          |           d|           d {V }t          j        |          }t          j        |          }||k    sJ d S )Nthinking_configTi   )include_thoughtsthinking_budgetthinkingConfigr:  r;  r7  r9  r8  ry   r<  r   r5  rx   )r   rY   r   camel_to_snake_all_keys)rM   rl  expected_gen_configr  r@  s        r/   +test_bidi_setup_to_api_with_thinking_configr    s#      "! + "!   :18	,- 
1/  < 	Z G  )<OGW%$x((([        & 088&!9/JJ/	?	"	"	"	"	"	"r0   c                     t          j        t          |          |           }|                    t	          j        t          g d          d                    }d|v sJ |ddddd	giik    sJ d S 
Nr   r   r   r   r   
text/plainr   r   r   AAAAr   r   )r   r   rY   r  r   r   bytesr  s       r/   test_parse_client_message_blobr!    s     (333~  ' ((jeIII&&,??? & 
V	#	#	#	#	
vFFG 
 
 
 
 
 
r0   c                    t          j        t          |          |           }t          j        t          g d          d          }|                                }|                    |          }d|v sJ |ddddd	giik    sJ d S r  )r   r   rY   r   r   r   
model_dumpr  )rc   rM   r   blob	blob_dictr@  s         r/   #test_parse_client_message_blob_dictr&    s      (333~  ' 
yyy))\	B	B	B$oo)((33&	V	#	#	#	#	
vFFG 
 
 
 
 
 
r0   c           
      &   t          j        t          |          |           }|                    t	          j        dt	          j        t	          j        d          gd          g                    }d	|v sJ |d	ddd
digdgdik    sJ d S )Nr   r   Fr   r   rU  rV  r  r   r   r  )r   r   rY   r  r   r   r   r   r  s       r/   (test_parse_client_message_client_contentr(    s      (333~  ' ((ejf&=&=&=%>VLLLM   & 
V	#	#	#	#	 #/?.@AAB  
 
 
 
 
 
r0   c                    t          j        t          |          |           }t          j        dt          j        t          j        t          j        t          g d          d                    gd	          g
          }|	                    |          }d|v sJ t          |d         d         d         d         d         d         d                   t          k    sJ |dddddddigdgd
ik    sJ d S )Nr   r   Fr  r  r   r  rU  rV  r  r   r   r   r   r  r   r  r  r  )r   r   rY   r   r   r   r   r   r   r  r   strrc   rM   r   r   r@  s        r/   -test_parse_client_message_client_content_blobr-    sx     (333~  ' *
-*"'*$YYY//<# # #   	 	 	  . ((88&	V	#	#	#	#

!
"7
+A
.w
7
:=
I 
 
    
  f"M"MN   
 

 

 

 

 

 

r0   c                 (   t          j        t          |          |           }t          j        dt          j        t          j        t          j        t          g d          d                    gd	          g
          }|	                    |
                    dd                    }d|v sJ t          |d         d         d         d         d         d         d                   t          k    sJ |dddddddigdgd
ik    sJ d S )Nr   r   Fr  r  r   r*  rU  rV  r  r~   Tmodeexclude_noner   r   r   r   r  r   r  r  r  )r   r   rY   r   r   r   r   r   r   r  r#  r   r+  r,  s        r/   -test_parse_client_message_client_content_dictr2    s     (333~  ' *
-*"'*$YYY//<# # #   	 	 	  . ((V$?? & 
V	#	#	#	#

!
"7
+A
.w
7
:=
I 
 
    
  f"M"MN   
 

 

 

 

 

 

r0   c                    t          j        t          |          |           }t          j        t          j        t          g d          d          g          }|                    |          }d|v sJ |dddd	d
giik    sJ d S )Nr   r   r  r  r   r   r   r   r  r  )r   r   rY   r   r   r   r   r  rc   rM   r   r   r@  s        r/   (test_parse_client_message_realtime_inputr5  N  s      (333~  ' 
'JE)))$4$4MMMN  % ((//&	V	#	#	#	#	
vFFG 
 
 
 
 
 
r0   c                 @   t          j        t          |          |           }t          j        t          j        t          g d          d          g          }|                    |                    dd	                    }d
|v sJ |d
ddddgiik    sJ d S )Nr   r   r  r  r   r   r~   Tr/  r   r   r  r  )	r   r   rY   r   r   r   r   r  r#  r4  s        r/   -test_parse_client_message_realtime_input_dictr7  a  s      (333~  ' 
'JE)))$4$4MMMN  % ((F66 & 
V	#	#	#	#	
vFFG 
 
 
 
 
 
r0   c                    t          j        t          |          |           }t          j        t          j        ddddi          g          }|                    |          }d	|v sJ |d	d
ddddidgiik    sJ d S )Nr   r   test_id	test_namer@  test_responser   r(   r   r   r   r   )r   r   rY   r   r   r   r  r4  s        r/   'test_parse_client_message_tool_responser=  v  s      (333~  ' 
&

  /2    % ((//&	F	"	"	"	"	
!% !
 
 
 
 
 
 
r0   c           	          t          j        t          |          |           }t          j        dddddd	          }|                    |          }d
|v sJ |d
dddddddd	giik    sJ d S )Nr   r   r9  r:  r;  test_user_nametest_user_email)r@  	user_name	userEmailr<  r   r   )r   r   rY   r   r   r  r4  s        r/   +test_parse_client_message_function_responserC    s      (333~  ' 
 	!%&   % ((//&	F	"	"	"	"	
!% /#3#4  
! 
 
 
 
 
 
r0   c                     t          j        t          |          |           }ddddid}|                    |          }d|v sJ |dd	ddddidgiik    sJ d S )
Nr   r   r9  r:  r@  r;  r<  r   r   )r   r   rY   r  r4  s        r/   ?test_parse_client_message_tool_response_dict_with_only_responserE    s      (333~  ' / % ((//&	F	"	"	"	"	
!% !
 
 
 
 
 
 
r0   c                 .   t          j        t          |          |           }t          j        t          j        ddddi          g          }|                    |                    d	d
                    }d|v sJ |ddddddidgiik    sJ d S )Nr   r   r9  r:  r@  r;  r<  r   r~   Tr/  r   r   )r   r   rY   r   r   r   r  r#  r4  s        r/   0test_parse_client_message_realtime_tool_responserG    s      (333~  ' 
&

  /2    % ((F66 & 
F	"	"	"	"	
!% !
 
 
 
 
 
 
r0   c                     K   t          d          }t          d|          i t          j        d	 fd	            }t	          j        t          d|          fd            } |             d {V  d S )
Nprovided_fake_tokenrh   TrM   rU   c                    K   |d<   W V  d S Nr9   r.   rm   rn   ro   capturerc   s      r/   rq   z<test_connect_with_provided_credentials.<locals>.mock_connect  &      +GI
r0   rv   rt   c                     K   t          j                  } |                     d          4 d {V  	 d d d           d {V  n# 1 d {V swxY w Y   dd         v sJ d         d         dk    sJ d S )N
test-modelr6  r   r9   zBearer provided_fake_tokenr   r{   r|   r   rN  r
   s    r/   r   z=test_connect_with_provided_credentials.<locals>._test_connect
  s     .((K"""66        
                           gi000009o.2NNNNNNN   A
AArk   )r	   rY   r   r   r   r   r   )rc   rU   rq   r   rN  r
   s   `   @@r/   &test_connect_with_provided_credentialsrU    s       "7888+DkBBB&'!      "! 	<l555O O O O O 65O 	r0   c                 X   K   t          dd           t          d          }t          d          }|d f|_        i t          j        d fd	            }t          d|	          t          j        t          d
|	          fd                        } |             d {V  d S )NTrJ  rf   r\   default_test_tokenrh   c                    K   |d<   W V  d S rL  r.   rM  s      r/   rq   z;test_connect_with_default_credentials.<locals>.mock_connect   rO  r0   rs   rt   rv   c                     K   t          j                  } |                     d          4 d {V  	 d d d           d {V  n# 1 d {V swxY w Y   dd         v sJ d         d         dk    sJ d S )NrQ  r6  r   r9   zBearer default_test_tokenrR  rS  s    r/   r   z<test_connect_with_default_credentials.<locals>._test_connect%  s      .((K"""66        
                           gi000009o.2MMMMMMMrT  rk   )rY   r   r]   r   r   r   r   r   )rc   r   r   rq   r   rN  r
   s   `    @@r/   %test_connect_with_default_credentialsrZ    s      Dd;;;&!|<<<.///*+5t*<''!      "! 		$<===<l555N N N N N 65 >=N 	r0   c                     K   t          j        ddddid          i t          j        d fd	            }t	          j        t          d|	          fd
            } |             d {V  d S )NThttps://custom-base-url.comr   Bearer custom_test_tokenr   r   c                *   K   | d<   |d<   W V  d S Nrm   r9   r.   rM  s      r/   rq   z7test_connect_with_custom_base_url.<locals>.mock_connect?  s/      GEN+GI
r0   rv   rt   c                    K   t          j                  } |                     d          4 d {V  	 d d d           d {V  n# 1 d {V swxY w Y   dd         v sJ d         d         dk    sJ d         dk    sJ d S )NrQ  r6  r   r9   r]  rm   r\  rR  rS  s    r/   r   z8test_connect_with_custom_base_url.<locals>._test_connectE  s/     .((K"""66        
                           gi000009o.2LLLLL5>:::::::rT  rk   )r@   rA   r   r   r   r   r   )rc   rq   r   rN  r
   s   `  @@r/   !test_connect_with_custom_base_urlra  2  s       "3%'AB   & '!      "!
 	<l555; ; ; ; ; 65; 	r0   c                   K   t          |          }d|_        t          |d           d {V }t                      t                      _        t          d          _        i t          j        dfd	            }t          j	        t          d|	          5  t          j        |          }|                    d          4 d {V  	 d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   d
d         v s
J d            d         d
         dk    sJ dd         v sJ d S )Nr   zauth_tokens/TEST_AUTH_TOKENr5  r6  re   r\   c                *   K   | d<   |d<   W V  d S r_  r.   rm   rn   ro   rN  rp   s      r/   rq   z=test_bidi_setup_to_api_with_auth_tokens.<locals>.mock_connectb  )      GEN+GI
MMMMMMr0   rv   rt   r   r9   z)Authorization key is missing from headersz!Token auth_tokens/TEST_AUTH_TOKENBidiGenerateContentConstrainedrm   rk   )rY   rB   r   r   r_   r`   r   r   r   r   r   r{   r|   rc   rM   api_client_mockr@  rq   r   rN  rp   s         @@r/   'test_bidi_setup_to_api_with_auth_tokensri  R  sV      $X666/9/$_LIIIIIIIII&KK'',F  ',
 '!      "!
 |D,L999  .11K"" #                                                    ++++0 ,++ i)-PPPPP	)WU^	;	;	;	;	;	;s6    1DC%D%
C/	/D2C/	3DD	Dc                   K   t          |          }t          j                            dddii          |_        t          |d           d {V }t                      t                      _        t          d          _        i t          j
        dfd		            }t          j        t          d
|          5  t          j        |          }|                    d          4 d {V  	 d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   dd         v s
J d            d         d         dk    sJ dd         v sJ d S )Nr   r9   r   r4   r5  r6  re   r\   c                *   K   | d<   |d<   W V  d S r_  r.   rd  s      r/   rq   z9test_bidi_setup_to_api_with_api_key.<locals>.mock_connect  re  r0   rv   rt   z&x-goog-api-key is missing from headersBidiGenerateContentrm   rk   )rY   r   rG   rK   rL   r   r   r_   r`   r   r   r   r   r   r{   r|   rg  s         @@r/   #test_bidi_setup_to_api_with_api_keyrm  x  su      $X666/"'"3"B"B#^45# #/ %_LIIIIIIIII&KK'',F  ',
 '!      "!
 |D,L999  .11K"" #                                                    
WY/	/	/	/1Y	/	/	/		,	-	?	?	?	?	'%.	0	0	0	0	0	0s6   1D#2D4D#
D	D#D	D##D'*D'c                    K   t                      t                      _        t          d          _        t                      _        t	          d          }t	          d          }|d f|_        t          j        dfd	            }t          d|          t          j	        t          d	|           fd
                        } |             d {V  d S )Nsn   {"setupComplete": {"sessionId": "test_session_id", "voiceConsentSignature": {"signature": "test_sig_abc123"}}}r\   rf   rg   rh   c                   K   W V  d S rk   r.   rl   s      r/   rq   zTtest_async_session_setup_complete_with_voice_consent_signature.<locals>.mock_connect  rr   r0   rs   rt   rv   c                  T  K   t          j        t                              } |                     d          4 d {V }|j        J |j        j        dk    sJ |j        j        J |j        j        j        dk    sJ 	 d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   r5  r6  test_session_idtest_sig_abc123)r   r{   rY   r|   setup_complete
session_idvoice_consent_signature	signature)r   r   rM   s     r/   r   zUtest_async_session_setup_complete_with_voice_consent_signature.<locals>._test_connect  sV      .(!C!C!CDDK"""66       '#///#.2CCCCC#;GGG

 
8
B                                 s   AB
B!$B!rk   )r   r_   r`   ra   r   r]   r   r   r   r   r   )rM   r   r   rq   r   rp   s   `    @r/   >test_async_session_setup_complete_with_voice_consent_signaturerw    s     
 KK'',J  ', ++'-!|<<<,'''*+5t*<'!     "! 		$<===<l555	 	 	 	 65 >=	 	r0   c                 .  K   t          j        dgt          j        t          j        t          j        ddd                                        }t          t          | 	          d
|           d {V }|                    di           }|                    di           }|                    di           }|                    di           }|                    di           }|                    d          dk    sJ |                    d          J |                    d          J t          j        dgt          j        t          j        t          j        ddt          j        d                                                  }t          t          | 	          d
|           d {V }	|	                    di           }
|
                    di           }|                    di           }|                    di           }|                    di           }|                    d          dk    sJ |                    d          J |                    d          J |d                             d          dk    sJ d S )Nr:  z	audio/wavs   fake_audio_datas   fake_consent_data)r   voice_sample_audioconsent_audio)replicated_voice_config)rE  )r  r]  r   r5  rx   r7  r9  rL  rE  r{  r   ry  rz  rr  )rv  )r   ry  ru  ru  rv  )	r   rf  rg  rh  ReplicatedVoiceConfigr   rY   rQ   VoiceConsentSignature)rM   rz   r@  r7  
gen_configr]  rE  
replicatedconfig_with_sigresult_with_sig	setup_siggen_config_sigspeech_config_sigvoice_config_sigreplicated_sigs                  r/   4test_bidi_setup_replicated_voice_config_with_consentr    s"      "")&(&+&A'%7 4' ' '      & %x(((V        & **Wb
!
!%yy+R00*..44-"">266, 92>>*		$	$	3	3	3	3	,	-	-	9	9	9		(	(	4	4	4+")&(&+&A'%7*/*E 1+ + +' ' '  
 
 
  / .x(((        / !!'2..)==!3R88.$((<<&**>2>>#''(A2FF.			K	(	(K	7	7	7	7			0	1	1	=	=	=			5	6	6	B	B	B./33K@@	     r0   )FNNrk   )|__doc__r   r~   rO   r>   typingr   r   unittestr   unittest.mockr   r   r   r=  rR   google.oauth2.credentialsr	   r   
websocketsr
   r   r   r   rW   r   r   r@   r   r   aiohttpAIOHTTP_NOT_INSTALLEDImportErrorr?   TYPE_CHECKINGmcpr   r   r   Type__annotations__markskipifrequires_aiohttpr  r+  r   rY   fixturerc   r   r   r   r   r   r   r   parametrizeasyncior   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r!  r'  r0  r2  rA  rm  ry  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r&  r(  r-  r2  r5  r7  r=  rC  rE  rG  rU  rZ  ra  ri  rm  rw  r  r.   r0   r/   <module>r     sZ  "         				 



  % % % % % % % %       # # # # # #               1 1 1 1 1 1              ) ) ) ) ) )             # # # # # #            NNN!    dnGGG
 
 $$$$$$3333333)V["%FK%%%&&&&&&5555555	   I
 ;%%"L &   
 "6 !D 
 !c
 	
 	
    &## #S # # # #
# # # #L          F/ / /	X 	X 	X S S S X X X&> > >6 6 6$ dE]33' '  43' dE]33' '  43'  dE]33' '  43' dE]33' '  43' dE]33' '  43' dE]33' '  43' dE]33& &  43&@ dE]33
6 
6  43
6 dE]33
? 
?  43
? dE]33; ;  43; dE]33( (  43( dE]33: :  43:& dE]335 5  435> dE]335 5  435< dE]33K K  43K0 dE]33$ $  43$. dE]33 $  $  43 $F dE]338 8  438$ dE]33; ;  43;: dE]33, ,  43, dE]33# #  43#$ dE]33f f  43fR dE]33# #  43#L dE]336 6  436 dE]336 6  436  	 	 	 dE]33"# "#  43"#J dE]33(# (#  43(#V dE]33'# '#  43'#T dE]33'# '#  43'#T dE]337 7  437t dE]337 7  437t dE]33   43. dE]33H H  43HV dE]33S S  43Sl dE]33M M  43M. dE]33   43D dE]33   43, dE]33   43, dE]33   43. dV,,# #  -,#( dE]33C C  43C dE]33# #  43#< dE]33 #  #  43 #F dE]33,% ,%  43,%^ dE]33+ + 43+" dE]33$# $#  43$#N dE]33  43 dE]33  43$ dE]33  43* dE]33) ) 43)X dE]33+ + 43+\ dE]33  43$ dE]33  43( dE]33  43@ dE]33  43D dE]33  43< dE]33    43 F   0   6   > eW--!< !<  .-!<H eW--1 1  .-1D dE]33" "  43"J eW--; ;  .-; ; ;s$   ;B BBC 	C$#C$