
    עi                        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ejD                  rddl#mZ$ ddl#m%Z& n/eZ$ejN                  e(d<   eZ&ejN                  e(d<   	 ddl#mZ$ ddl#m%Z& ejR                  jU                  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.dod(Z/ej`                  d)        Z1dpd*Z2d+ Z3d, Z4e+d-        Z5d. Z6d/ Z7d0 Z8ejR                  js                  d1ddg      ejR                  jt                  d2               Z;ejR                  js                  d1ddg      ejR                  jt                  d3               Z<ejR                  js                  d1ddg      ejR                  jt                  d4               Z=ejR                  js                  d1ddg      ejR                  jt                  d5               Z>ejR                  js                  d1ddg      ejR                  jt                  d6               Z?ejR                  js                  d1ddg      ejR                  jt                  d7               Z@ejR                  js                  d1ddg      ejR                  jt                  d8               ZAejR                  js                  d1ddg      ejR                  jt                  d9               ZBejR                  js                  d1ddg      ejR                  jt                  d:               ZCejR                  js                  d1ddg      ejR                  jt                  d;               ZDejR                  js                  d1ddg      ejR                  jt                  d<               ZEejR                  js                  d1ddg      ejR                  jt                  d=               ZFejR                  js                  d1ddg      ejR                  jt                  d>               ZGejR                  js                  d1ddg      ejR                  jt                  d?               ZHejR                  js                  d1ddg      ejR                  jt                  d@               ZIejR                  js                  d1ddg      ejR                  jt                  dA               ZJejR                  js                  d1ddg      ejR                  jt                  dB               ZKejR                  js                  d1ddg      ejR                  jt                  dC               ZLejR                  js                  d1ddg      ejR                  jt                  dD               ZMejR                  js                  d1ddg      ejR                  jt                  dE               ZNejR                  js                  d1ddg      ejR                  jt                  dF               ZOejR                  js                  d1ddg      ejR                  jt                  dG               ZPejR                  js                  d1ddg      ejR                  jt                  dH               ZQejR                  js                  d1ddg      ejR                  jt                  dI               ZRejR                  js                  d1ddg      ejR                  jt                  dJ               ZSejR                  js                  d1ddg      ejR                  jt                  dK               ZTejR                  js                  d1ddg      ejR                  jt                  dL               ZUejR                  js                  d1ddg      ejR                  jt                  dM               ZVejR                  js                  d1ddg      ejR                  jt                  dN               ZWejR                  js                  d1ddg      ejR                  jt                  dO               ZXejR                  js                  d1ddg      ejR                  jt                  dP               ZYejR                  js                  d1ddg      ejR                  jt                  dQ               ZZejR                  js                  d1ddg      ejR                  jt                  dR               Z[ejR                  js                  d1ddg      ejR                  jt                  dS               Z\ejR                  js                  d1ddg      ejR                  jt                  dT               Z]ejR                  js                  d1ddg      ejR                  jt                  dU               Z^ejR                  js                  d1ddg      ejR                  jt                  dV               Z_ejR                  js                  d1ddg      ejR                  jt                  dW               Z`ejR                  js                  d1ddg      ejR                  jt                  dX               ZaejR                  js                  d1dg      ejR                  jt                  dY               ZbejR                  js                  d1ddg      ejR                  jt                  dZ               ZcejR                  js                  d1ddg      ejR                  jt                  d[               ZdejR                  js                  d1ddg      ejR                  jt                  d\               ZeejR                  js                  d1ddg      d]        ZfejR                  js                  d1ddg      ejR                  jt                  d^               ZgejR                  js                  d1ddg      d_        ZhejR                  js                  d1ddg      d`        ZiejR                  js                  d1ddg      da        ZjejR                  js                  d1ddg      db        ZkejR                  js                  d1ddg      dc        ZlejR                  js                  d1ddg      dd        ZmejR                  js                  d1ddg      de        ZnejR                  js                  d1ddg      df        ZoejR                  js                  d1ddg      dg        ZpejR                  js                  d1ddg      dh        ZqejR                  js                  d1ddg      di        ZrejR                  jt                  dj        ZsejR                  jt                  dk        ZtejR                  jt                  dl        ZuejR                  js                  d1dg      ejR                  jt                  dm               ZvejR                  js                  d1dg      ejR                  jt                  dn               Zwy# e $ r dZ e	jB                         ZY w xY w# e $ r dZ$dZ&Y w xY w)qz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S dS )"Get the current weather in a city.r      ;    r#   s     b/sites/domain-asset-master/.venv/lib/python3.12/site-packages/google/genai/tests/live/test_live.pyr   r   X   s    s{""    c                    t        j                  t        j                        }| sd|_        d |_        d |_        d |_        ned |_        |rGt        |t              rt        j                  di |n|}|j                  |_        d |_        d |_        nd|_        d|_        d |_        d |_        ||_        t        j                  j                  di i      |_        | |_        ||_        t'        j(                  t*        j,                  j/                  dt1        j2                               t*        j,                  j/                  d      	      }d
|i|_        |S )NspecTEST_API_KEYzus-central1test_projectc                       y)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   ]   s1   ~~9#:#:;*	'JJJ!%JJ d+ 


+l
+ 
 $0#8#8j  jj)j)j#'j (*'*"..=="o* !*%*""ZZ^^OW]]_=ZZ^^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      s;    V445);).>). K)/	r0   c                 r   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 {   S 7 w)N8   {
  "setupComplete": {"sessionId": "test_session_id"}
}
r\   NN
test_tokentokenc                   K    y wNr.   )uriadditional_headerskwargsmock_wss      r/   mock_connectz)get_connect_message.<locals>.mock_connect   s     
Ms   
google.auth.defaultnew
ws_connectc                  T  K   t        j                        } | j                        4 d {    	 d d d       d {    j                  j	                          t        j                  j                  j                  d   d         S 7 ^7 O# 1 d {  7  sw Y   _xY ww)Nmodelconfigr   )r   	AsyncLiveconnectr_   assert_called_oncejsonloads	call_args)live_modulerW   rx   ro   rw   s    r/   _test_connectz*get_connect_message.<locals>._test_connect   s      ..,K"" #    	  LL##%::gll,,Q/233    sD   -B(BB(BB(BAB(B(B%BB%!B(rk   )
r   r_   r`   r   r]   
contextlibasynccontextmanagerr   objectr   )rW   rw   rx   mock_google_auth_default
mock_credsrp   r   ro   s   ```    @r/   get_connect_messager      s     ^FK'',
H', "|<,'*+5t*<'!! " 		$<=<<l5	4 6 >	4 		s   B*B70B51B7c                 D   K   | 2 cg c3 d {   }|7 6 c}S c c}w wrk   r.   )
async_itervalues     r/   _async_iterator_to_listr      s!     #-	.	.%%	.	..	.s$    
 c                    d}| j                  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 y )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/8&ZZ__((111	1		$	$	,	,	77	7	FJJOO//1I1I	JJ	J		$	$	2	2	:	:;K	LPW	WW	Wr0   c                 ~   d}d}| j                  dd       | j                  d|       | j                  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 y )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+Z8,h78&		$	$	4	4	<<	<		$	$	-	--	-		$	$	,	,
	::	:	FJJOO//1I1I	JJ	J	!<!<!J!J!R!R	RR	Rr0   c                 N   d}| j                  dd       | j                  d|       | j                  dd       | j                  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 y )	Nr   r   r   r   r    r   r   r   r   s      r/   test_vertex_api_key_from_envr      s    '0&9%w/
 ,b1+R08&		$	$	-	--	-		$	$	,	,	77	7	FJJOO//1I1I	JJ	J		$	$	2	2	:	:;K	LPW	WW	Wr0   c                  f    d} t        j                  dd| i      } |j                         dk(  sJ y )Nzhttps://test.comr   rH   )rB   rV   zwss://test.com)r@   rA   _websocket_base_urlrH   rW   s     r/   test_websocket_base_urlr      s>    (&&)* 
(	'	'	)-=	==	=r0   c                      d} t        j                  d| ddid      }d |_        d |_         |j                         | k(  sJ y )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      sX    1(&&%':;* ** 
(	'	'	)X	55	5r0   rM   c                 $  K   t        j                  t        |      |       }|j                  d       d {    | j                  j	                          t        j                  | j                  j                  d   d         }d|v sJ y 7 Tw)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~' 	6"""((*jj,,66q9!<=)	Y	&&	& #s   7BBABc                 :  K   t        j                  t        |      |       }dddigigdd}|j                  |       d {    | j                  j	                          t        j                  | j                  j                  d	   d	         }d
|v sJ y 7 Tw)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~' ff-./0. 	>***((*jj,,66q9!<=)	Y	&&	& +s   ABBABc                   K   t        j                  t        |      |       }t        j                  t        j
                  t        j                  d      g      gd      }|j                  |       d {    | j                  j                          t        j                  | j                  j                  d	   d	         }d
|v sJ y 7 Tw)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~' **]]%**&"9!:;<D. 	>***((*jj,,66q9!<=)	Y	&&	& +s   A8C:C;ACc                 .  K   t        j                  t        |      |       }ddd}|j                  |       d {    | j                  j	                          t        j                  | j                  j                  d   d         }d|v sJ y 7 Tw	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~' &K@.>***((*jj,,66q9!<=)	Y	&&	& +s   <BBABc                 R  K   t        j                  t        |      |       }t        j                  dd      }|j                  |       d {    | j
                  j                          t        j                  | j
                  j                  d   d         }d|v sJ y 7 Twr   )
r   r   rY   r   Blobr_   r{   r|   r}   r~   r   s        r/   test_async_session_send_blobr   ?  s     
  (3~' ::9D.>***((*jj,,66q9!<=)	Y	&&	& +s   AB'B%AB'c                 |  K   t        j                  t        |      |       }t        j                  t        j
                  dd      g      }|j                  |       d {    | j                  j                          t        j                  | j                  j                  d   d         }d	|v sJ y 7 Tw)
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~' 00JJJ+FG. 	>***((*jj,,66q9!<=)	Y	&&	& +s   A#B<%B:&AB<c                   K   t        j                  t        |      |       }|r0t        j                  t        j
                  dddd      g      }n0t        j                  t        j
                  ddddd	
      g      }|j                  |       d {    | j                  j                          t        j                  | j                  j                  d   d         }d|v sJ y 7 Tw)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   `  s     
  (3~' 00""*)-s;
M 00""*)-s;
M 	=)))((*jj,,66q9!<=)	I	%%	% *s   BC2C0AC2c                 8  K   t        j                  t        |      |       }|j                  d        d {    | j                  j	                          t        j                  | j                  j                  d   d         }d|v sJ |d   d   sJ y 7 ^w)Nr   r   r   r   r   r   r   r   s       r/   "test_async_session_send_input_noner     s     
  (3~' 	4   ((*jj,,66q9!<=)	Y	&&	&	#	$_	55	5	 !s   7BBABc                   K   t        j                  t        |      |       }t        j                  t
              5  |j                  ddig       d {    d d d        t        j                  t
              5  |j                  ddi       d {    d d d        y 7 K# 1 sw Y   JxY w7 # 1 sw Y   y xY ww)Nr   r   invalid_keyinvalid_valuer   )r   r   rY   pytestraises
ValueErrorr_   rc   rM   r   s      r/   test_async_session_send_errorr     s     
  (3~' }}Z  A
,,}o>?,
@@@A }}Z  ?
,,m_=,
>>>? ? AA A ?? ?sX   ;B>B$B"B$!B><B2B0B2	B>"B$$B-)B>0B22B;7B>c                    K   t        j                  t        |      |       }|j                         }t	        |       d {   }t        |d   t        j                        sJ y 7 $w)Nr   r   r   )r   r   rY   receiver   rE   r   LiveServerMessage)rc   rM   r   	responsess       r/   test_async_session_receiver     s\       (3~' oo)+I66)	IaL%"9"9	::	: 7s   A A)A'%A)c                   K   t        d      | _        t        j                  t	        |      |       }t        j                  t              5  |j                         j                          d {    d d d        y 7 # 1 sw Y   y xY ww)Nzinvalid jsonr\   r   r   )
r   r`   r   r   rY   r   r   r   r   	__anext__r   s      r/    test_async_session_receive_errorr     ss     
 "~>. (3~' }}Z  (
//

%
%
'''( ('( (s0   AB"B 0A>1B 5	B>B  B	Bc                   K   t        ddg      | _        t        j                  t	        |      |       }|j                         }t        |       d {   }t        |d   t        j                        sJ |d   j                  j                  j                  d   j                  dk(  sJ |d   j                  j                  d	k(  sJ y 7 ww)
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~' __(*844(	HQK!8!8	99	9	!	#	#	.	.	4	4Q	7	<	<	FF	F	!	#	#	1	1T	99	9 5s   ACCA8Cc                   K   t        ddg      | _        t        j                  t	        |      |       }|j                         }t        |       d {   }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        |j                                d {    d d d        y 7 7 # 1 sw Y   y xY ww)	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     s8    
 "E 6.  (3~' __(*844(	HQK!8!8	99	9qk  ++11!4@@JJ	 qk  ++11!4@@EE	 }}\" 5
!'//"3
4445 5 5 55 5s=   AED;B:ED?-D=.D?2
E=D??EEc                   K   t        ddg      | _        t        j                  t	        |      |       }|j                         }t        |       d {   }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        |j                                d {    d d d        y 7 7 # 1 sw Y   y xY ww)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    sJ    
 "" 6	.  (3~' __(*844(	HQK!8!8	99	9	!			-	-a	0	5	59N	NN	Nqk**1-22:>	 
!			-	-a	0	5	5f	=	DD	D}}\" 5
!'//"3
4445 5 5 55 5s=   AEECEE6E7E;
EEEEc                 z  K   t        g d      | _        t        j                  t	        |      |       }|j                         }t        |       d {   }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 y 7 w)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~' __(*844(	HQK!8!8	99	9	!	#	#	7	7	<	<	LL	L	!	#	#	7	7	@	@D	HH	H	HQK!8!8	99	9	!	#	#	8	8	=	=	NN	N	!	#	#	8	8	A	AU	JJ	J 5s   AD;D9C$D;c                 b  K   t        ddg      | _        t        j                  t        j                  d            }t        j                  t        |      |       }|j                         }t        |       d {   }|d	   }t        |t        j                        sJ ||k(  sJ y 7 -w)
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/  (3~' __(*844(QK'	GU44	55	5	O	##	#	 5s   A=B/?B- .B/c                 f  K   t        ddg      | _        t        j                  t        j                  ddd            }t        j                  t        |	      | 
      }|j                         }t        |       d {   }|d   }t        |t        j                        sJ ||k(  sJ y 7 -w)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 G"-6!/  (3~' __(*844(QK'	GU44	55	5	O	##	#	 5s   A?B1B/.B1c                    K   t        j                  t        |      |       }d }|j                   |       d      2 3 d {   }t	        |t
        j                        r$J 7 !6 y w)Nr   c                     K   d d y w)Ns   data1s   data2r.   r.   r0   r/   mock_streamz4test_async_session_start_stream.<locals>.mock_streamp  s     
N
Ns   r   )streamr   )r   r   rY   start_streamrE   r   r   )rc   rM   r   r  r  s        r/   test_async_session_start_streamr"  f  sr      x(.' ++]k ,  8 8G gu667778 s.   <A(A&A$A&A("A($A&&A(c                   K   t        j                  ddg      | _        t        j                  t        |      |       }t        |j                                d {   }t        |      dkD  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 y 7 w)	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_signalr+  z  s      
V
5.  (3~' +7??+<==( 
X		+	K!8!8	99	9		4	4	@@	@11AA				0	011
 
"	$	$	2	2d	::	: >s   AC4C2BC4c                    K   t        j                  t        |      |       }|j                          d {    | j                  j	                          y 7 w)Nr   )r   r   rY   ra   r{   r   s      r/   test_async_session_closer-    sJ      x(.' 	))+ s   4AA Ac                 .  K   t        j                         5  t        j                  d       t        t	        |       d       d {   }d d d        di i}| rd|d   d<   i |d   d<   d	g|d   d   d
<   nd|d   d<   |k(  sJ y 7 ?# 1 sw Y   >xY ww)Nerrorr   
test_modelrw   setupOprojects/test_project/locations/us-central1/publishers/google/models/test_modelrw   generationConfigAUDIOresponseModalitiesmodels/test_model)warningscatch_warningssimplefilterr   rY   )rM   resultr  s      r/    test_bidi_setup_to_api_no_configr<    s        '"&* F bM/(yOGW%35OG/0JQOG/01EF(;OGW%	?	""	" s.   B0B	BB	;BB		BB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}| r'd|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 {   }t        j                  j	                  |d "      t        j                  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 {   }t        j                  j	                  |d "      t        j                  j	                  |d "      k(  sJ y 7 87 Mw)'Nr2  r7  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)rw   r4  proactivitysystemInstructionr3  rw   r5  r4  r6  )voiceConfiglanguageCoderG  	   )
speech_configenable_affective_dialogrS  r   top_ptop_kmax_output_tokensrM  system_instructionmedia_resolutionr   r0  rv   )r   rn   )r?  )r>  )rN  )
rX  rY  rS  r   rZ  r[  r\  r^  rM  r]  )r   rY   r   LiveClientMessage_from_responseLiveConnectConfigSpeechConfigVoiceConfigPrebuiltVoiceConfigProactivityConfigMediaResolutionrE  )rM   r  config_dictr;  rx   s        r/   $test_bidi_setup_to_api_speech_configrh    s    
 & .l/K# $+	 (, !#!: ,T2 0
  %/: 	. GW%
 	JOG/01EF
 $lL%A
  	DOG/0@ )<OGW% &l'C #	 "&'..3+" %x([ & 
	 	 	/	/d 
0 
--t . 
  
 ""&&(($)$=$=)%
   #))$?,,DD+#&& %x( & 
	 	 	/	/d 
0 
--t . 
  
A8s&   BGF>C,G3G4AGG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 {   }d d d        y 7 # 1 sw Y   y xY ww)Nmulti_speaker_voice_configspeaker_voice_configsAlicer>  r?  leda)speakerr@  BobkorerB  rC  rW  rD  rF  rO  rE  )rX  r   rZ  r[  r\  rM  r]  r^  z.*multi_speaker_voice_config.*matchr   r0  rv   )r   r   r   r   rY   rM   rg  r;  s      r/   2test_bidi_setup_error_if_multispeaker_voice_configrt  "  s      '%!(1L&3I' "'1L&3I'()$ .33+6 }}Z'GH &* F  s.   ;A5A)A'A)	A5'A))A2.A5c                    K   ddi}t        j                  t        |       t              5  t	        t        |       d|       d {   }d d d        | sy d   d   dk(  sJ y 7 # 1 sw Y   xY ww)Nexplicit_vad_signalTr   r0  rv   r2  explicitVadSignal)r   exception_if_mldevrY   r   r   rs  s      r/   test_explicit_vadry  J  s      '-+''x(*  '*,{ F 

	,	-	55	5 s.   )A3A'A%A'A3%A''A0,A3c                    K   t        |       }ddi}t        j                  |t              5  t	        t        |       d|       d {   }d d d        | sy d   d   dk(  sJ y 7 # 1 sw Y   xY ww)Nr   rv  Tr0  rv   r2  rw  )rY   r   rx  r   r   )rM   rW   rg  r;  s       r/   test_explicit_vad_configr{  Z  s      1* '-+''
J? &* F 

	,	-	55	5 s.   +A5A)	A'
A)A5'A))A2.A5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 {   }||k(  sJ y 7 w)Nr]  r   rO  rP  rQ  r2  r0  )rw   rT  r3  rw   r4  r5  r6  r7  r   rv   r.   r   ra  r   rY   rM   rg  rx   r  r;  s        r/   >test_bidi_setup_to_api_with_system_instruction_as_content_typer  l  s      /01+ ""1[1&!345 /  	Z G 46OG/0JOG/01EF )<OGW%$x( & 
?	""	"	s   A/B 1A>2B c                 D  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 {   }||k(  sJ t        t        |       d|       d {   }||k(  sJ y 7 37 w)NTEXTrO  r   rB  google_searchresponse_modalitiesr]  generation_configtoolsr2  r   r6  r   rP  rQ  googleSearchr4  rT  r  r3  rw   r7  r   r0  rv   r.   r}  r~  s        r/   6test_bidi_setup_to_api_with_config_tools_google_searchr    s     %X.)3/ "%&	+ ""1[1& %+H
  !345  $R()
/ (yOGW%(;OGW%$x( &
 
?	""	" %x( &
 
?	""	"s$   A&B (B)&B BB B 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 {   }||k(  sJ  ||       d {   }||k(  sJ y 7 #7 w)Nr  rO  r   rB  r  r  r2  r  r   rP  rQ  r  r  r3  rw   r7  r   rr   McpToolc                 P   K   t        t              d|        d {   S 7 w)Nr   r0  rv   r   rY   )rx   rM   s    r/   get_connect_message_no_mcpzXtest_bidi_setup_to_api_with_config_tools_with_no_mcp.<locals>.get_connect_message_no_mcp  s-      %*6   s   &$&r.   )r   ra  r   r   r   )rM   rg  rx   r  r  r;  s   `     r/   4test_bidi_setup_to_api_with_config_tools_with_no_mcpr    s     %X.)3/ "%&	+ ""1[1& %+H
  !345  $R()
/ (yOGW%(;OGW%<<(d3<<iT* + 4 ,K88&	?	""	"+K88&	?	""	"	 9 9s$   BCC C3C4CC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 {   }||k(  sJ y 7 w)NrB  )r   r  rO  r   rP  rQ  i  rD  )target_tokens)trigger_tokenssliding_window)r  r  r]  context_window_compressionr2  r  r   r  )r4  rT  contextWindowCompressionr3  rw   r7  r   r0  rv   )	r   ra  GenerationConfigr   r   ContextWindowCompressionConfigSlidingWindowr   rY   )rM   rx   r  r;  s       r/   6test_bidi_setup_to_api_with_context_window_compressionr    s    
 ""..3?!(!345F "'!E!E,,2>"
&  %+H
  !345 
 !%!0" 5(/  (yOGW%(;OGW%$x( & 
?	""	"	s   CC	C
C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 {   }|d   d   d   d   d   d   |d   d   d   d   d   d   k(  sJ t        t	        |       d|       d {   }|d   d   d   d   d   d   |d   d   d   d   d   d   k(  sJ y 7 {7 2w)Nr   rB  function_declarationsr  r  r2  r0  functionDeclarationsr   r   r   r   r   r    r!   r#   r&   r   r   r)   r(   r   rw   r  r   rv   r  r   r   r.   )r  r   ra  r   rY   r~  s        r/   =test_bidi_setup_to_api_with_config_tools_function_declarationr    s     *3/(*?@A+ ""1[1&$& '/"G' ,4c3Z"H%! 0!D( ' /. %x( &
 
	!!	$%;	<Q	?
 gw'*+AB1E

  
 %x( &
 
	!!	$%;	<Q	?
 gw'*+AB1E

  
%s%   ACCA
C)C*1CCc                   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 {   }|d   d   d   d   d   d   |d   d   d   d   d   d   k(  sJ t        t	        |       d|       d {   }|d   d   d   d   d   d   |d   d   d   d   d   d   k(  sJ y 7 {7 2w)Nr   rB  r  r2  r0  r  r   r   r   r   r   r    r!   r#   r&   r   r+   r  r  r   rv   r  r   r   r.   )r   r   ra  r   rY   r~  s        r/   :test_bidi_setup_to_api_with_config_tools_function_directlyr  T  s     *3/#$+ ""1[1&$& '/"G' ,4c3Z"H%! 0!E( ' /. %x( &
 
	!!	$%;	<Q	?
 gw'*+AB1E

  
 %x( &
 
	!!	$%;	<Q	?
 gw'*+AB1E

  
%s%   ACCA
C'C(1CCc                   K   t        |       }t        j                  j                  |t              }t        j
                  j                  |_        ddid|gigd}t        j                  di |}t        j                  |t              5  t        t        |       d|       d {   }d d d        | ry d	   d
   d   d   d   d   dk(  sJ y 7 )# 1 sw Y   (xY ww)Nr   )r
   callabler   rB  r  r  r0  rv   r2  r  r   r  behaviorNON_BLOCKINGr.   )rY   r   FunctionDeclarationfrom_callabler   Behaviorr  r  ra  r   exception_if_vertexr   r   )rM   rW   declarationrg  rx   r;  s         r/   3test_bidi_setup_to_api_with_tools_function_behaviorr    s      1*))77"5 8 + 44+)3/(;-89+ ""1[1&((Z@ &*,v F 
 Wogq!"89!<ZH	 s0   BC!C)C*C.%C!CCC!c                   K   t         y 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 {   }| r||k(  sJ |sJ y y 7 w)Nr2  r7  r  r   r$   r   r   r&   get_weatherGet the weather in a city.r  r  r6  r5  r3  r4  rw   r  r   r0  r  r   stringr(   r   inputSchemarv   )r   r   rY   Tool)rM   expected_result_googleaiexpected_result_vertexair;  s       r/   ,test_bidi_setup_to_api_with_config_mcp_toolsr    sF    
 
 &$&$$h'%! (!=( ' ( "% ` %&$$h'%! (!=( ' 4 %x(
nn$:&%/&(1C$D	 && 
 (($#$# )%s   A3B5B	6Bc                   K   t         y  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 {   }| r||k(  sJ |sJ y y 7 w)Nc                       e Zd Zd Zd Zy)Ltest_bidi_setup_to_api_with_config_mcp_session.<locals>.MockMcpClientSessionc                      d | _         d | _        y 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           
      r   K   t        j                  t        j                  ddddddiid      g	      S w)
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  sE     &&nn$:&%/&(1C$D	 s   57N)__name__
__module____qualname__r  r  r.   r0   r/   MockMcpClientSessionr    s     r0   r  r2  r7  r  r   r$   r   r   r&   r  r  r  r  r6  r5  r3  r  r   r0  r  rv   )r   r   r   rY   )rM   r  r  r  r;  s        r/   .test_bidi_setup_to_api_with_config_mcp_sessionr    s0    
 
- * &$&$$h'%! (!=( ' ( "% ` %&$$h'%! (!=( ' 4 %x(
(*+ & 
 (($#$# )s   A*B,B -Bc                    K   ddi igi}t        j                  d
i |}dddi igdi}t        t        |       d|       d {   }|d   d   d	   |d   d   d	   k(  sJ y 7 w)Nr  code_executionr2  r0  codeExecutionr  r   rv   r   r.   r}  r~  s        r/   7test_bidi_setup_to_api_with_config_tools_code_executionr  Q  s      !2&'+ ""1[1&r / %x( &
 
	!!	$(@(I!(L	LL	Ls   AA%A#A%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 {   }|d   d   |d   d   k(  sJ y 7 w)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_coverager2  r0  )rw   realtimeInputConfigr   rv   r  r.   r}  r~  s        r/   1test_bidi_setup_to_api_with_realtime_input_configr  j  s      -E+A#%%(+  14
 + ""1[1&!,-D!E/ %x( & Wo+,		!"7	899s   A	A&A$A&c                    K   di i}t        j                  di |}ddi di}t        t        |       d|       d {   }|d   d   |d   d   k(  sJ y 7 w)	Ninput_audio_transcriptionr2  r0  )rw   inputAudioTranscriptionr   rv   r  r.   r}  r~  s        r/   /test_bidi_setup_to_api_with_input_transcriptionr    s      "2+ ""1[1&%'/ %x(V &
 Wo/0		!";	<==   <AAAc                    K   di i}t        j                  di |}ddi di}t        t        |       d|       d {   }|d   d   |d   d   k(  sJ y 7 w)	Noutput_audio_transcriptionr2  r0  )rw   outputAudioTranscriptionr   rv   r  r.   r}  r~  s        r/   0test_bidi_setup_to_api_with_output_transcriptionr    s      #B+ ""1[1&&(/ %x( & Wo01		!"<	=>>r  c                    K   ddi}t        j                  d
i |}ddddidi}t        t        |       d|       d {   }|d   d	   d   |d   d	   d   k(  sJ y 7 w)Nr^  MEDIA_RESOLUTION_LOWr2  r0  rL  )rw   r4  r   rv   r4  r.   r}  r~  s        r/   ,test_bidi_setup_to_api_with_media_resolutionr    s      0+ ""1[1&01GH/ %x( & Wo()*;<		!"4	56G	HIIs   >A! AA!c                 p   K   dddgiddi}t        t        |       d       d {   }||k(  sJ y 7 w)	Nr2  r6  r5  r3  )r4  rw   r   z#publishers/google/models/test_modelr1  r  )rM   r  r;  s      r/   test_bidi_setup_publishersr    s^      !$
 d	/ %x(13 3& 
?	""	"	3s   %646c                    K   t        j                  t        d      5  t        t	        |       ddddii       d {   }d d d        d	   d
   d   dk(  sJ y 7 # 1 sw Y   xY ww)Nz;Setting `LiveConnectConfig.generation_config` is deprecatedrq  r   r7  r  r   rB  rv   r2  r4  )r   warnsDeprecationWarningr   rY   )rM   r;  s     r/   )test_bidi_setup_generation_config_warningr    s|     
 ||I < '*!#mS%9:< <F	< 
+	,]	;s	BB	B<	< <s,   A* AAAA*AA'#A*c                    K   dddii}t        j                  di |}t        t        |       d|       d {   }ddddiii}| rd	d
gi|d   d<   d|d   d<   nd|d   d<   ||k(  sJ y 7 2w)Nsession_resumptionhandler  r   r0  rv   r2  sessionResumptionr6  r5  r4  r3  rw   r7  r.   r}  )rM   rg  rx   r;  r  s        r/   .test_bidi_setup_to_api_with_session_resumptionr    s      X}5+ ""1[1&$x( & 
 / 
4OG/0
 )zOGW%(;OGW%	?	""	"+s   7A.A,3A.c                 L  K   t        |       }ddddi}t        j                  di |}t        j                  |t
              5  t        t        |       d|       d {   }d d d        dd	dddii}| rd
dgi|d   d<   d|d   d<   ny |k(  sJ y 7 4# 1 sw Y   3xY ww)Nr   r  r  T)r  transparentr0  rv   r2  r  r6  r5  r4  r3  rw   r.   )rY   r   ra  r   rx  r   r   )rM   rW   rg  rx   r;  r  s         r/   :test_bidi_setup_to_api_with_transparent_session_resumptionr    s      1*}TJ+ ""1[1&''
J? &* F 
%! / 
4OG/0
 )zOGW%
	?	""	"1 s0   AB$B!B"B&0B$BB!B$c                     t        j                  t        |      |       }|j                  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 y )Nr   r   r   r   FrP  r   rR  r   r   r   r.   )r   r   rY   _parse_client_messager   r_  rc   rM   r   r;  s       r/   test_parse_client_message_strr  C  s     (3~' ((0&	V	##	#	 #/?.@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 {   }t        j                  |      }t        j                  |      }||k(  sJ y 7 6w)Nthinking_configTi   )include_thoughtsthinking_budgetthinkingConfigr5  r6  r2  r4  r3  rw   r7  r   r0  rv   )r   rY   r   camel_to_snake_all_keys)rM   rg  expected_gen_configr  r;  s        r/   +test_bidi_setup_to_api_with_thinking_configr  U  s      "!+ "! 18	,- 
1/  	Z G )<OGW%$x([ & 008&!99/J/	?	""	"s   ABB7Bc                     t        j                  t        |      |       }|j                  t	        j
                  t        g d      d            }d|v sJ |ddddd	giik(  sJ y 
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~' ((jjeI&,?& 
V	##	#	
vFG 
  
r0   c                     t        j                  t        |      |       }t        j                  t        g d      d      }|j                         }|j                  |      }d|v sJ |ddddd	giik(  sJ y 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~' 
y)\	B$oo)((3&	V	##	#	
vFG 
  
r0   c           
         t        j                  t        |      |       }|j                  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 y )Nr   r   Fr   r   rP  rQ  r  r   r   r  )r   r   rY   r  r   r   r   r   r  s       r/   (test_parse_client_message_client_contentr    s      (3~' ((ejjf&=%>VLM& 
V	##	#	 #/?.@AB 
  
r0   c                    t        j                  t        |      |       }t        j                  dt        j
                  t        j                  t        j                  t        g d      d            gd	      g
      }|j                  |      }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 y )Nr   r   Fr
  r  r   r   rP  rQ  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    s     (3~' **
--**"'**$Y/<# 	. ((8&	V	##	#

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

 
 

r0   c                    t        j                  t        |      |       }t        j                  dt        j
                  t        j                  t        j                  t        g d      d            gd	      g
      }|j                  |j                  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 y )Nr   r   Fr
  r  r   r  rP  rQ  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_dictr     s.     (3~' **
--**"'**$Y/<# 	. ((V$?& 
V	##	#

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

 
 

r0   c                     t        j                  t        |      |       }t        j                  t        j
                  t        g d      d      g      }|j                  |      }d|v sJ |dddd	d
giik(  sJ y )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_inputr#    s      (3~' 
'
'JJE)$4MN% ((/&	V	##	#	
vFG 
  
r0   c                 "   t        j                  t        |      |       }t        j                  t        j
                  t        g d      d      g      }|j                  |j                  dd	            }d
|v sJ |d
ddddgiik(  sJ y )Nr   r   r
  r  r   r   r|   Tr  r   r   r  r  )	r   r   rY   r   r   r   r  r  r  r"  s        r/   -test_parse_client_message_realtime_input_dictr%  &  s      (3~' 
'
'JJE)$4MN% ((F6& 
V	##	#	
vFG 
  
r0   c                     t        j                  t        |      |       }t        j                  t        j
                  ddddi      g      }|j                  |      }d	|v sJ |d	d
ddddidgiik(  sJ y )Nr   r   test_id	test_namer;  test_responser   r(   r   r   r   r   )r   r   rY   r   r   r   r  r"  s        r/   'test_parse_client_message_tool_responser+  ;  s      (3~' 
&
&

 
  /2% ((/&	F	""	"	
!%!
 
  
r0   c           	          t        j                  t        |      |       }t        j                  dddddd	      }|j                  |      }d
|v sJ |d
dddddddd	giik(  sJ y )Nr   r   r'  r(  r)  test_user_nametest_user_email)r;  	user_name	userEmailr*  r   r   )r   r   rY   r   r   r  r"  s        r/   +test_parse_client_message_function_responser1  \  s      (3~' 
 
 	!%&% ((/&	F	""	"	
!% /#3#4
! 
  
r0   c                     t        j                  t        |      |       }ddddid}|j                  |      }d|v sJ |dd	ddddidgiik(  sJ y )
Nr   r   r'  r(  r;  r)  r*  r   r   )r   r   rY   r  r"  s        r/   ?test_parse_client_message_tool_response_dict_with_only_responser3    s      (3~' /% ((/&	F	""	"	
!%!
 
  
r0   c                    t        j                  t        |      |       }t        j                  t        j
                  ddddi      g      }|j                  |j                  d	d
            }d|v sJ |ddddddidgiik(  sJ y )Nr   r   r'  r(  r;  r)  r*  r   r|   Tr  r   r   )r   r   rY   r   r   r   r  r  r"  s        r/   0test_parse_client_message_realtime_tool_responser5    s      (3~' 
&
&

 
  /2% ((F6& 
F	""	"	
!%!
 
  
r0   c                     K   t        d      }t        d|      i t        j                  d	 fd	       }t	        j
                  t        d|      fd       } |        d {    y 7 w)
Nprovided_fake_tokenrh   TrM   rU   c                "   K   |d<    y wNr9   r.   rl   rm   rn   capturerc   s      r/   rp   z<test_connect_with_provided_credentials.<locals>.mock_connect       +GI
   rt   rr   c                     K   t        j                        } | j                  d      4 d {    	 d d d       d {    dd   v sJ d   d   dk(  sJ y 7 ,7 # 1 d {  7  sw Y   -xY ww)N
test-modelr1  r   r9   zBearer provided_fake_tokenr   ry   rz   r   r<  r
   s    r/   r   z=test_connect_with_provided_credentials.<locals>._test_connect  s     ..(K"""6  
  gi00009o.2NNNN	    C   ,A5AA5A A5 AA5A5 A2&A)'A2.A5rk   )r	   rY   r   r   r   r   r   )rc   rU   rp   r   r<  r
   s   `   @@r/   &test_connect_with_provided_credentialsrD    sm      "78+DkB&'!! " 	<<l5O 6O 	s   A%A2*A0+A2c                 2   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 {    y 7 w)NTr8  rf   r\   default_test_tokenrh   c                "   K   |d<    y wr:  r.   r;  s      r/   rp   z;test_connect_with_default_credentials.<locals>.mock_connect  r=  r>  rq   rr   rt   c                     K   t        j                        } | j                  d      4 d {    	 d d d       d {    dd   v sJ d   d   dk(  sJ y 7 ,7 # 1 d {  7  sw Y   -xY ww)Nr@  r1  r   r9   zBearer default_test_tokenrA  rB  s    r/   r   z<test_connect_with_default_credentials.<locals>._test_connect  s      ..(K"""6  
  gi00009o.2MMMM	    rC  rk   )rY   r   r]   r   r   r   r   r   )rc   r   r   rp   r   r<  r
   s   `    @@r/   %test_connect_with_default_credentialsrI    s      Dd;&!|<./*+5t*<''!! " 		$<=<<l5N 6 >N 	s   B
BBBc                     K   t        j                  ddddid      i t        j                  d fd	       }t	        j
                  t        d|	      fd
       } |        d {    y 7 w)NThttps://custom-base-url.comr   Bearer custom_test_tokenr   r   c                ,   K   | d<   |d<    y wNrl   r9   r.   r;  s      r/   rp   z7test_connect_with_custom_base_url.<locals>.mock_connect  s      GEN+GI
   rt   rr   c                    K   t        j                        } | j                  d      4 d {    	 d d d       d {    dd   v sJ d   d   dk(  sJ d   dk(  sJ y 7 67 '# 1 d {  7  sw Y   7xY ww)Nr@  r1  r   r9   rL  rl   rK  rA  rB  s    r/   r   z8test_connect_with_custom_base_url.<locals>._test_connect
  s     ..(K"""6  
  gi00009o.2LLLL5>::::    sC   ,A?A&A?A*A? A(&A?(A?*A<0A31A<8A?rk   )r@   rA   r   r   r   r   r   )rc   rp   r   r<  r
   s   `  @@r/   !test_connect_with_custom_base_urlrQ    sz      ""3%'AB& '!! "
 	<<l5; 6; 	s   A(A5-A3.A5c                 N  K   t        |      }d|_        t        |d       d {   }t               t               _        t        d      _        i t        j                  dfd	       }t        j                  t        d|	      5  t        j                  |      }|j                  d      4 d {    	 d d d       d {    d d d        d
d   v sJ d       d   d
   dk(  sJ dd   v sJ y 7 7 D7 5# 1 d {  7  sw Y   ExY w# 1 sw Y   IxY ww)Nr   zauth_tokens/TEST_AUTH_TOKENr0  r1  re   r\   c                ,   K   | d<   |d<    y wrN  r.   rl   rm   rn   r<  ro   s      r/   rp   z=test_bidi_setup_to_api_with_auth_tokens.<locals>.mock_connect'       GEN+GI
MrO  rt   rr   r   r9   z)Authorization key is missing from headersz!Token auth_tokens/TEST_AUTH_TOKENBidiGenerateContentConstrainedrl   rk   )rY   rB   r   r   r_   r`   r   r   r   r   r   ry   rz   rc   rM   api_client_mockr;  rp   r   r<  ro   s         @@r/   'test_bidi_setup_to_api_with_auth_tokensrY    s<     $X6/9/$_LII&K'',F',
 '!! "
 ||D,L9 ..1K"" #      ++101+ i)-PPP	)WU^	;;	;= J&     sp   $D%C>A&D%,D;D <D?DDDD.D% DDD	
DD	DD"D%c                   K   t        |      }t        j                  j                  dddii      |_        t        |d       d {   }t               t               _        t        d      _        i t        j                  dfd		       }t        j                  t        d
|      5  t        j                  |      }|j                  d      4 d {    	 d d d       d {    d d d        dd   v sJ d       d   d   dk(  sJ dd   v sJ y 7 7 D7 5# 1 d {  7  sw Y   ExY w# 1 sw Y   IxY ww)Nr   r9   r   r4   r0  r1  re   r\   c                ,   K   | d<   |d<    y wrN  r.   rT  s      r/   rp   z9test_bidi_setup_to_api_with_api_key.<locals>.mock_connectO  rU  rO  rt   rr   z&x-goog-api-key is missing from headersBidiGenerateContentrl   rk   )rY   r   rG   rK   rL   r   r   r_   r`   r   r   r   r   r   ry   rz   rW  s         @@r/   #test_bidi_setup_to_api_with_api_keyr]  =  sU     $X6/"'"3"3"B"B#^45#/ %_LII&K'',F',
 '!! "
 ||D,L9 ..1K"" #      
WY/	/Y1YY	/		,	-	??	?	'%.	00	05 J&     ss   AE	D
A&E0,D:D!D: D%"D:-D#.D:2.E!D:#D:%D7	+D.,D7	3D::E?E)FNNrk   )x__doc__r   r|   rO   r>   typingr   r   unittestr   unittest.mockr   r   r   r8  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"  r+  r-  r<  rh  rt  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%  r+  r1  r3  r5  rD  rI  rQ  rY  r]  r.   r0   r/   <module>rq     s  "    	 
  %  #     1    )   #  ! 
$3)V[["%FKK%&5 ;;%%"L &  
 "6 !D
 !c
	
  &## #S #
#L   F/	X S S X&>6$ dE]3'  4' dE]3'  4'  dE]3'  4' dE]3'  4' dE]3'  4' dE]3'  4' dE]3&  4&@ dE]3
6  4
6 dE]3
?  4
? dE]3;  4; dE]3(  4( dE]3:  4:& dE]35  45> dE]35  45< dE]3K  4K0 dE]3$  4$. dE]3 $  4 $F dE]38  48$ dE]3;  4;: dE]3,  4, dE]3#  4#$ dE]3f  4fR dE]3#  4#L dE]36  46 dE]36  46  dE]3"#  4"#J dE]3(#  4(#V dE]3'#  4'#T dE]3'#  4'#T dE]37  47t dE]37  47t dE]3  44 dE]3H  4HV dE]3S  4Sl dE]3M  4M. dE]3  4D dE]3  4, dE]3  4, dE]3  4. dV,#  -#( dE]3C  4C dE]3#  4#< dE]3 #  4 #F dE]3+ 4+" dE]3$#  4$#N dE]3 4 dE]3 4$ dE]3 4* dE]3) 4)X dE]3+ 4+\ dE]3 4$ dE]3 4( dE]3 4@ dE]3 4D dE]3 4< dE]3  4 F  0  6  > eW-!<  .!<H eW-1  .1c@   dnnG 
 Is$   ;x, =y ,yy	yy