o
    Yi                     @   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.specZTEST_API_KEYNzus-central1Ztest_projectc                   S   s   dS )NZ	test_host r   r   r   d/home/kim/smarthome/.venv/lib/python3.10/site-packages/google/genai/tests/live/test_live_response.py<lambda>,   s    z!mock_api_client.<locals>.<lambda>headers)r   Z	MagicMock	gl_clientZBaseApiClientZapi_keylocationprojectZ_hostr   ZHttpOptionsZmodel_validateZ_http_optionsvertexai)r   Z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
   Z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         ZTEXT)Z
tokenCountZmodality
   )ZpromptTokenCountZresponseTokenCountZcandidatesTokenCountZtotalTokenCountZresponseTokensDetailsZcandidatesTokensDetailspartstextzThis is a simple response.Tz
test querywebz
google.comzSearch results)domaintitle)web_search_queriesZgroundingChunks)	modelTurnturnCompleteZgroundingMetadata)ZusageMetadataserverContentr   
api_clientr   r   )jsondumpsr   r   r
   AsyncSessionr   _receive
isinstancer   LiveServerMessageserver_content
model_turnr#   r$   turn_completeZgrounding_metadatar(   Zgrounding_chunksr%   r&   r'   Zusage_metadataZUsageMetadataZprompt_token_countZtotal_token_countZresponse_token_countZresponse_tokens_detailsZtoken_countr   r   Z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.r+   r#   r$   zPlease provide more details.TNEED_MORE_INPUT)r)   r*   ZturnCompleteReasonZwaitingForInputr,   r-   Nr   )r/   r0   r   r   r
   r1   r   r2   r3   r   r4   r5   r6   r#   r$   r7   Zturn_complete_reasonZTurnCompleteReasonr<   Zwaiting_for_inputr8   r   r   r   ,test_receive_server_content_with_turn_reason   s*   


r=   )F)__doc__r/   typingr   Zunittestr   Zunittest.mockr   Zpytest r   r.   r   r   r	   r   r
   r   r   Zfixturer   markZparametrizeZasyncior;   r=   r   r   r   r   <module>   s*   

D