
    q[i                        d Z ddlZddlmZ ddlm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Zej&                  d        Zej*                  j-                  dddg      ej*                  j.                  d               Zej*                  j-                  dddg      ej*                  j.                  d               Zy)z!Tests for live response handling.    N)cast)mock)	AsyncMock   )_api_client)_common)Client)client)live)typesFc                    t        j                  t        j                        }| sd|_        d|_        d|_        nd|_        d|_        d|_        d |_        t        j                  j                  di i      |_        | |_        |S )zCreates a mock BaseApiClient.specTEST_API_KEYNzus-central1test_projectc                       y)N	test_host r       c/mnt/data/GridWatch/venv/lib/python3.12/site-packages/google/genai/tests/live/test_live_response.py<lambda>z!mock_api_client.<locals>.<lambda>,   s    r   headers)r   	MagicMock	gl_clientBaseApiClientapi_keylocationproject_hostr   HttpOptionsmodel_validate_http_optionsvertexai)r#   mock_clients     r   mock_api_clientr%       s    I$;$;<+	(KKKK(K(K)+#//>>"o+ "+	r   c                      t        t        j                        } t               | _        t        d      | _        t               | _        | S )z%Provides a mock websocket connection.r   z{})return_value)r   r   ClientConnectionsendrecvclose)	websockets    r   mock_websocketr-   4   s8     T223);).$/).K)/	r   r#   Tc           
        K   t        j                  dddddddgdddgd	d
ddigiddgddddigddd      }|| j                  _        t	        j
                  t        |      |       }|j                          d {   }t        |t        j                        sJ |j                  j                  j                  d   j                  dk(  sJ |j                  j                  sJ |j                  j                   j"                  dgk(  sJ |j                  j                   j$                  d   j&                  j(                  dk(  sJ |j                  j                   j$                  d   j&                  j*                  dk(  sJ t        |j,                  t        j.                        sJ |j,                  j0                  dk(  sJ |j,                  j2                  dk(  sJ |sD|j,                  j4                  dk(  sJ |j,                  j6                  d   j8                  dk(  sJ y |j,                  j4                  dk(  sJ |j,                  j6                  d   j8                  dk(  sJ y 7 w)N      2         TEXT)
tokenCountmodality
   )promptTokenCountresponseTokenCountcandidatesTokenCounttotalTokenCountresponseTokensDetailscandidatesTokensDetailspartstextzThis is a simple response.Tz
test querywebz
google.comzSearch results)domaintitle)web_search_queriesgroundingChunks)	modelTurnturnCompletegroundingMetadata)usageMetadataserverContentr#   
api_clientr,   r   )jsondumpsr*   r'   r   AsyncSessionr%   _receive
isinstancer   LiveServerMessageserver_content
model_turnr>   r?   turn_completegrounding_metadatarC   grounding_chunksr@   rA   rB   usage_metadataUsageMetadataprompt_token_counttotal_token_countresponse_token_countresponse_tokens_detailstoken_countr-   r#   raw_response_jsonsessionresults        r   test_receive_server_contentrc   @   s     jj  ""$  !#$$ !#$&( !=>? %1N ,/# " '"" "F &7." (3~' !!##& 
FE33	44	4 &&,,Q/44	%&& 
			,	,,	,				1	1	D	D	VV	V				1	1	B	B1	E	I	I	P	PT`	``	`				1	1	B	B1	E	I	I	O	OSc	cc	c	F))5+>+>	??	?				1	1R	77	7				0	0C	77	7	  55;;;  88;GG2MMM   55;;;  88;GG2MMM1 $s   B I4I1G/I4c                 l  K   t        j                  ddddigiddddi      }|| j                  _        t	        j
                  t        |      | 	      }|j                          d
{   }t        |t        j                        sJ |j                  J |j                  j                  j                  d   j                  dk(  sJ |j                  j                  du sJ |j                  j                   t        j"                  j$                  k(  sJ |j                  j&                  du sJ y
7 ȭw)zSTests parsing of LiveServerContent with turn_complete_reason and waiting_for_input.rI   r>   r?   zPlease provide more details.TNEED_MORE_INPUT)rE   rF   turnCompleteReasonwaitingForInputrJ   rK   Nr   )rM   rN   r*   r'   r   rO   r%   rP   rQ   r   rR   rS   rT   r>   r?   rU   turn_complete_reasonTurnCompleteReasonre   waiting_for_inputr_   s        r   ,test_receive_server_content_with_turn_reasonrk      s4    
 jj!?@A  1!	" 	 &7." (3~' !!##& 
FE33	44	4				**	*				)	)	/	/	2	7	7;Y	YY	Y				,	,	44	4				3	3u7O7O7_7_	__	_				0	0D	88	8 $s   A'D4)D2*C	D4)F)__doc__rM   typingr   unittestr   unittest.mockr   pytest r   rL   r   r	   r
   r   r   r   r%   fixturer-   markparametrizeasynciorc   rk   r   r   r   <module>rv      s     (    #  )   #  (   dE]3BN  4BNH dE]39  49r   