o
    i                     @   s   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dZejdd Zejdddgejjdd Zejdddgejjdd ZdS )z!Tests for live response handling.    N)cast)mock)	AsyncMock   )_api_client)_common)Client)client)live)typesFc                 C   s^   t jtjd}| sd|_d|_d|_n	d|_d|_d|_dd |_tj	
di i|_| |_|S )	zCreates a mock BaseApiClient.specTEST_API_KEYNzus-central1test_projectc                   S   s   dS )N	test_host r   r   r   ^/home/ubuntu/.local/lib/python3.10/site-packages/google/genai/tests/live/test_live_response.py<lambda>,   s    z!mock_api_client.<locals>.<lambda>headers)r   	MagicMock	gl_clientBaseApiClientapi_keylocationproject_hostr   HttpOptionsmodel_validate_http_optionsvertexai)r   mock_clientr   r   r   mock_api_client    s   
r!   c                  C   s,   t tjd} t  | _t dd| _t  | _| S )z%Provides a mock websocket connection.r   z{})return_value)r   r
   ClientConnectionsendrecvclose)	websocketr   r   r   mock_websocket4   s
   r(   r   Tc              
      s  t 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|d| d}| I d H }t|t	j
sHJ |jjjd jdksTJ |jjsZJ |jjjdgksdJ |jjjd jjdksqJ |jjjd jjdks~J t|jt	jsJ |jjdksJ |jjdksJ |s|jjdksJ |jjd jdksJ d S |jjdksJ |jjd jdksJ d S )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_turnr8   r9   turn_completegrounding_metadatar=   grounding_chunksr:   r;   r<   usage_metadataUsageMetadataprompt_token_counttotal_token_countresponse_token_countresponse_tokens_detailstoken_countr(   r   raw_response_jsonsessionresultr   r   r   test_receive_server_content@   s`   
#
r]   c                    s   t ddddigiddddi}|| j_tjt|d| d	}| I d
H }t|t	j
s/J |jd
us6J |jjjd jdksBJ |jjdu sJJ |jjt	jjksTJ |jjdu s\J d
S )zSTests parsing of LiveServerContent with turn_complete_reason and waiting_for_input.rC   r8   r9   zPlease provide more details.TNEED_MORE_INPUT)r?   r@   turnCompleteReasonwaitingForInputrD   rE   Nr   )rG   rH   r%   r"   r
   rI   r!   rJ   rK   r   rL   rM   rN   r8   r9   rO   turn_complete_reasonTurnCompleteReasonr^   waiting_for_inputrY   r   r   r   ,test_receive_server_content_with_turn_reason   s*   


rd   )F)__doc__rG   typingr   unittestr   unittest.mockr   pytest r   rF   r   r   r	   r   r
   r   r!   fixturer(   markparametrizeasyncior]   rd   r   r   r   r   <module>   s*   

D