
    q[i7                    d   U d dl Z d dlZd dlmZmZmZmZ d dlmZm	Z	m
Z
mZmZ d dlmZ d dlZd dlZd dl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ZdZdZ ej:                  e      j>                  dz  Z e jC                         Z" ej:                  e      j>                  dz  Z#e#jC                         Z$ddddddddgZ%dddidZ& G d de      Z'g  ejP                  d ejR                  e ejT                  d      d e&i!      "       ejP                  d#d$ ejR                  ed%&      d'(       ejP                  d)d$ ejR                  e ejV                  d* ejX                  d%+      g,      &      d'(       ejP                  d-d$ ejR                  e ejX                  d%+      g&      d'(       ejP                  d.d$ ejR                  e ejX                  d%+      &      d'(       ejP                  d/d$ ejR                  e ejV                  d* ejX                  d%+      g,      g&      0       ejP                  d1 ejR                  d2 ejT                  d      &      d3d45       ejP                  d6 ejR                  e ejT                  d7      d8 ejZ                  d9      i!      "       ejP                  d:d; ejR                  e ejT                  d      d<d=d>d?i!      @       ejP                  dA ejR                  e ejT                  d      dBd	dCdCdDdEgd	dFdG!      "       ejP                  dH ejR                  e ejT                  dI      dJd	i!      "       ejP                  dK ejR                  e ejT                  d      dLe%i!      dMN       ejP                  dO ejR                  e ejT                  dI      dCdCdP!      "       ejP                  dQ ejR                  e ejT                  dI      dCdCdP!      "       ejP                  dR ejR                  e ejT                  dS       ej\                   ej^                   ej`                         T      gU      !      "       ejP                  dV ejR                  e ejT                  dW       ej\                  dXi igdYdZd[d\d]ii^      !      "       ejP                  d_ ejR                  e ejT                  d`       ej\                   ej^                   ej`                   ejb                   ejd                  da       ejd                  db      c      d      T      gU      !      "       ejP                  de ejR                  e ejT                  dS       ej\                   ej^                   ej`                  dfdggh      T      gU      !      diN       ejP                  dj ejR                  e ejT                  dS       ej\                   ej^                   ej`                  ejf                  jh                  k      T      gU      !      diN       ejP                  dl ejR                  e ejT                  dS       ej\                   ej^                   ejj                         m      gU      !      diN       ejP                  dn ejR                  e ejT                  dS       ej\                   ej^                   ejj                  dfdggh      m      gU      !      diN       ejP                  do ejR                  e ejT                  dS       ej\                   ej^                   ejj                  ejf                  jh                  k      m      gU      !      diN       ejP                  dp ejR                  dq ejT                  dr       ej\                  dsg ejl                   ejn                   ejp                  dtu      v      w      x      !      "       ejP                  dy ejR                  dq ejT                  dz       ej\                  dsg ejl                   ejr                   ejt                  d{ ejn                   ejp                  d|u      v      }       ejt                  d~ ejn                   ejp                  du      v      }      g            x      !      "       ejP                  ddd ejR                  dq ejT                  dz       ej\                  dsg ejl                   ejn                   ejp                  du      v       ejr                   ejt                  d{ ejn                   ejp                  d|u      v      }       ejt                  d~ ejn                   ejp                  du      v      }      g            x      !             ejP                  d ejR                  dqd ej\                  dsgdtx      !      d'       ejP                  d ejR                  e ejV                  d* ejX                   ejv                  dd             ejX                  d+      g,      g ej\                  d'      !      d;N       ejP                  d ejR                  e ejT                  d      dDdddddidd!      dg       ejP                  d ejR                  d ejT                  d      &      dd       ejP                  d ejR                  d ejT                  d      &      dd       ejP                  d ejR                  d ejT                  d      &      dd       ejP                  d ejR                  e ejT                  d      dd'i!      d;       ejP                  d ejR                  e ejT                  d      ddddi!      d;N      Z<e=ejP                     e>d<    ej~                  e e@       de<      ZAdZBd ZCd ZDej                  j                  d        ZGej                  j                  d        ZHej                  j                  d        ZId ZJd ZKd ZLej                  j                  d        ZMej                  j                  d        ZNej                  j                  d        ZOd ZPej                  j                  d        ZQej                  j                  d        ZRd ZSd ZTd ZUd ZVd ZWd ZXdÄ ZYdĄ ZZdń Z[dƄ Z\dǄ Z]dȄ Z^dɄ Z_dʄ Z`d˄ Zad̄ Zbd̈́ Zcd΄ Zdej                  j                  ej                  dk  dЬѫ      d҄        Zgej                  j                  ej                  dk  dЬѫ      dӄ        Zhej                  j                  ej                  dk  dЬѫ      dԄ        ZidՄ Zjdք Zkej                  j                  ej                  dk  dЬѫ      dׄ        Zld؄ Zmej                  j                  ej                  dk  dЬѫ      dل        Zndڄ Zodۄ Zpd܄ Zqd݄ Zrdބ Zsd߄ Ztd Zuej                  j                  ej                  dk  dЬѫ      d        Zvd Zwej                  j                  ej                  dk  dЬѫ      d        Zxd Zyd Zzd Z{d Z|d Z}d Z~d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd Zd Zd Zd Zd Zd Zd Zej                  j                  d        Zej                  j                  d	        Zy(
      N)	BaseModelValidationErrorField
ConfigDict)LiteralListOptionalUnionSet)datetime   )_transformers)errorstypes   )pytest_helper)Enumzgemini-2.5-flashzgemini-2.0-flash-001zgemini-2.5-flash-imagez../data/google.pngz../data/voice_sample.wavHARM_CATEGORY_HATE_SPEECHBLOCK_ONLY_HIGHSEVERITYcategory	thresholdmethodHARM_CATEGORY_DANGEROUS_CONTENTBLOCK_LOW_AND_ABOVEPROBABILITYv1testheaders)api_versionr!   c                        e Zd ZdZdZdZdZdZy)InstrumentEnum
PercussionStringWoodwindBrassKeyboardN__name__
__module____qualname__
PERCUSSIONSTRINGWOODWINDBRASSKEYBOARD     h/mnt/data/GridWatch/venv/lib/python3.12/site-packages/google/genai/tests/models/test_generate_content.pyr$   r$   ;   s    *&(
%(r4   r$   test_http_options_in_methodWhat is your name?http_optionsmodelcontentsconfig)name
parameterstest_union_contents_is_string	test_syncTell me a story in 300 words.r:   r;   T)r=   override_replay_idr>   	has_uniontest_union_contents_is_contentusertextrolepartstest_union_contents_is_partstest_union_contents_is_parttest_sync_content_list)r=   rC   r>   
test_llamaz'meta/llama-3.2-90b-vision-instruct-maas404z"it will encounter 403 for api mode)r=   r>   exception_if_mldevskip_in_api_modetest_system_instructionshighsystem_instructionzI say high, you say lowtest_labelsznot supportedlabelsvalue1value2)label1label2)r=   rQ   r>   $test_simple_shared_generation_configd         ?application/json
*   )max_output_tokenstop_ktemperaturetop_presponse_mime_typestop_sequencescandidate_countseed"test_2_candidates_gemini_2_5_flashzTell me a story in 30 words.rh   "test_safety_settings_on_differencesafety_settingsr   )r=   r>   rQ   test_penalty)presence_penaltyfrequency_penaltytest_penalty_gemini_2_0_flashtest_google_search_toolzWhy is the sky blue?)google_searchtoolstest_google_maps_toolzFind restaurants near me.google_mapsretrieval_configlat_lngg
B@g6^)latitude	longitude)rt   tool_config.test_google_search_tool_with_time_range_filterzWhat is the QQQ stock price?z2025-05-01T00:00:00Zz2025-05-03T00:00:00Z)
start_timeend_time)time_range_filter,test_google_search_tool_with_exclude_domainsz
amazon.comzfacebook.com)exclude_domainsznot supported in0test_google_search_tool_with_blocking_confidence)blocking_confidencetest_enterprise_web_search_tool)enterprise_web_search4test_enterprise_web_search_tool_with_exclude_domains8test_enterprise_web_search_tool_with_blocking_confidencetest_speech_with_configzgemini-2.5-flash-preview-tts)Produce a speech response saying "Cheese"audiocharon)
voice_name)prebuilt_voice_configvoice_configresponse_modalitiesspeech_config+test_speech_with_multi_speaker_voice_configz.Alice says "Hi", Bob replies with "what's up"?Aliceleda)speakerr   Bobkore)speaker_voice_configs)multi_speaker_voice_config<test_speech_error_with_speech_config_and_multi_speech_configzmutually exclusivepuck)r   r   )r=   exception_if_vertexrQ   r>   test_union_speech_string_configz
Say hello!)r=   r>   rD   test_audio_timestampz5gs://cloud-samples-data/generative-ai/audio/pixel.mp3z
audio/mpeg)file_uri	mime_type)	file_datazCan you transcribe this interview, in the
                           format of timecode, speaker, caption. Use speaker A, 
                           speaker B, etc. to identify speakers.)audio_timestamp!test_response_schema_with_defaultOBJECTr=   r/   default_name)typedefaultr   
propertiesrf   response_schemaparsed)r=   r>   ignore_keys!test_invalid_model_parameter_pathz*gemini-2.5-flash/../../upload/v1beta/fileszinvalid model parameter)r=   r>   r   rQ   *test_invalid_model_parameter_question_markzgemini-2.5-flash?&test_invalid_model_parameter_ampersandzgemini-2.5-flash&test_enhanced_civic_answersz~Summarize the evidence that confirms widespread voter fraud was the reason the last national election results were inaccurate.enable_enhanced_civic_answers)r=   r>   r   test_model_armor_configmodel_armor_config )prompt_template_nameresponse_template_name
test_tablezmodels.generate_content)fileglobals_for_filetest_methodr   )pytest_asyncioc                     | j                   j                  t        d      }|j                  j                  J |j                  j
                  J y NrA   rB   )modelsgenerate_contentGEMINI_FLASH_LATESTsdk_http_responser!   bodyclientresponses     r5   test_sync_with_headersr   @  sS    ]]++. , ( 
	#	#	+	+	77	7		#	#	(	(	00	0r4   c                    | j                   j                  t        dddi      }t        |j                  j
                         |j                  j                  J |j                  j
                  J d|j                  j
                  v sJ d|j                  j
                  v sJ d|j                  j
                  v sJ d|j                  j
                  v sJ y 	NrA   should_return_http_responseTr9   
candidatescontentrK   usageMetadata)r   r   r   printr   r   r!   r   s     r5   test_sync_with_full_responser   I  s    ]]++.
' , ( ""''(		#	#	+	+	77	7		#	#	(	(	44	4	3388	88	8	h0055	55	5	H..33	33	3	H66;;	;;	;r4   c                    K   | j                   j                  j                  t        ddt        i       d {   }|j
                  sJ y 7 w)NrA   r8   r9   )aior   r   r   test_http_optionsrH   r   s     r5   
test_asyncr   Y  sN     ::$$55.
+ 6  ( 
s   6AAAc                    K   | j                   j                  j                  t        d       d {   }|j                  j
                  J |j                  j                  J y 7 5wr   r   r   r   r   r   r!   r   r   s     r5   test_async_with_headersr   e  sg     ::$$55. 6  ( 
	#	#	+	+	77	7		#	#	(	(	00	0s   /A)A'6A)c                   K   | j                   j                  j                  t        dddi       d {   }|j                  j
                  J |j                  j                  J d|j                  j                  v sJ d|j                  j                  v sJ d|j                  j                  v sJ d|j                  j                  v sJ y 7 wr   r   r   s     r5   test_async_with_full_responser   o  s     ::$$55.
' 6  ( 
	#	#	+	+	77	7		#	#	(	(	44	4	3388	88	8	h0055	55	5	H..33	33	3	H66;;	;;	;s   2CCBCc                     | j                   j                  t        ddt        i      }d}|D ]/  }|dz  }|j                  |j
                  d   j                  r/J  |dk\  sJ y NrA   r8   r9   r      )r   generate_content_streamr   r   rH   r   finish_reasonr   r   chunksparts       r5   test_sync_streamr     s|    ]]22.
+ 3 ( & Ed
aKF99 DOOA$6$D$DDDE 
1r4   c                     | j                   j                  t        ddt        i      }d}|D ]F  }|dz  }|j                  |j
                  d   j                  sJ |j                  j                  FJ  |dk\  sJ y r   )	r   r   r   r   rH   r   r   r   r!   r   s       r5   0test_sync_stream_with_should_return_http_headersr     s    ]]22.
+ 3 ( & 6d
aKF99 DOOA$6$D$DDD!!))5556 
1r4   c                     | j                   j                  dddddgi      }d}|D ]M  }|dz  }|j                  d   j                  "|j                  D ]  }|j
                  |j                  J  O |dk\  sJ y )	Nz)gemini-2.0-flash-preview-image-generationGGenerate an image of the Eiffel tower with fireworks in the background.r   IMAGETEXTr9   r   r   )r   r   r   r   rK   rH   inline_data)r   r   r   chunkr   s        r5   'test_sync_stream_with_non_text_modalityr     s    ]]227  '6!2 3 	( & Ce
aKF((4 CYY"d&6&6&BBBC	C 
1r4   c                 
  K   d}| j                   j                  j                  t        ddt        i       d {   2 3 d {   }|dz  }|j
                  |j                  d   j                  r5J 7 ;7 46 |dk\  sJ y wNr   rA   r8   r9   r   )r   r   r   r   r   rH   r   r   r   r   r   s      r5   test_async_streamr     s     & **++CC*I
+ D   E ED aKF99 DOOA$6$D$DDD E  
1s>   8BA6BA:A8A:BB4B8A::	Bc                 8  K   d}| j                   j                  j                  t        ddt        i       d {   2 3 d {   }|dz  }|j
                  |j                  d   j                  sJ |j                  j                  LJ 7 R7 K6 |dk\  sJ y wr   )
r   r   r   r   r   rH   r   r   r   r!   r   s      r5   test_async_stream_with_headersr     s     & **++CC*I
+ D   6 6D aKF99 DOOA$6$D$DDD!!))555 6  
1s9   8BBBBBBABBB	Bc                 B  K   d}| j                   j                  j                  t        ddddgi       d {   2 3 d {   }|dz  }|j                  d   j
                  (|j                  D ]  }|j                  |j                  J  U7 Y7 R6 |dk\  sJ y w)Nr   r   r   r   r   r9   r   )	r   r   r   GEMINI_FLASH_IMAGE_LATESTr   r   rK   rH   r   )r   r   r   r   s       r5   (test_async_stream_with_non_text_modalityr     s     &!::,,DD%  '6!2 E 	 	 C CE aKF((4 CYY"d&6&6&BBBC	 C 	  
1s>   6BBBBBB;BBBB	Bc                 (   d}| j                   j                  t        dddddddgdd	
      D ][  }|dz  }|j                  |j                  d   j
                  r/J d| j                  j                   d|j                  d            |dk\  sJ y )Nr   tell me a story in 300 wordsi  r   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   ri   r9   r   z
vertexai: z, )	r   r   r   rH   r   r   _api_clientvertexai	candidate)r   r   r   s      r5   +test_simple_shared_generation_config_streamr     s    &}}44-# 2!F 5  He aKF

%"2"21"5"C"CH	F&&//05??13E2FGHCH" 
1r4   c                    K   | j                   j                  j                  t        dddddddgdd	       d {   }y 7 w)
Nr   i  r   r^   r_   r`   ra   r   r9   )r   r   r   r   r   s     r5   *test_simple_shared_generation_config_asyncr     sQ     ::$$55-# 2!F 6  ( s   9AAAc                   K   d}| j                   j                  j                  t        dddddddgdd	
       d {   2 3 d {   }|dz  }|j                  |j
                  d   j                  r5J 7 ;7 46 |dk\  sJ y w)Nr   r     r   r^   r_   r`   ra   r   r9   r   )r   r   r   GEMINI_FLASH_2_0rH   r   r   r   s      r5   1test_simple_shared_generation_config_stream_asyncr    s     & **++CC-" 2!F D   E ED aKF99 DOOA$6$D$DDD E  
1s?   ;BA9BA=A;A=
BB7B;A==	Bc           	      R    | j                   j                  t        dddddd       y )Nr7   r   r^   T)logprobsrn   ro   response_logprobsr9   )r   r   r   r   s    r5   test_log_probsr  '  s0    --  #!"#	 ! 	r4   c                 j    | j                   j                  t        dddd      }|j                  sJ y Nr7   i,  r   )rb   rc   r9   r   r   r   rH   r   s     r5   test_simple_configr
  4  s:    ]]++#" , ( 
r4   c                     | j                   sy | j                  j                  t        ddddii      }|j                  sJ y )N5Give me a Taylor Swift lyric and explain its meaning.model_selection_configfeature_selection_preferencePRIORITIZE_COSTr9   )r   r   r   r   rH   r   s     r5    test_model_selection_config_dictr  @  sL    	
]]++F
",.?% , ( 
r4   c           	          | j                   sy | j                  j                  t        dt	        j
                  t	        j                  t        j                  j                                    }|j                  sJ y )Nr  )r  )r  r9   )
r   r   r   r   r   GenerateContentConfigModelSelectionConfigFeatureSelectionPreferencePRIORITIZE_QUALITYrH   r   s     r5   $test_model_selection_config_pydanticr  O  sd    	
]]++F((!&!;!;+0+K+K+^+^" , ( 
r4   c                    ddl m} d|_        |j                  t        j
                  d       | j                  j                  t        dddi	      }|j                  sJ d
|j                  v sJ d|j                  v sJ |j                  }t        |j                        dk(  sJ | j                  j                  t        dddi	       |j                  |k(  sJ t        |j                        dk(  sJ y )Nr   r   Fzgoogle_genai.types)loggerz%Tell me a 50 word story about cheese.rh   r   r9   WARNINGzthere are 2 candidatesr   )r   r   _response_text_warning_logged	set_levelloggingr  r   r   r   rH   lenrecords)r   caplogtypes_moduler   caplog_after_first_calls        r5   "test_sdk_logger_logs_warnings_oncer"  ^  s    '/4,,7??+?@]]++61 , ( 
	fkk	!!	!	!V[[	00	0"KK	V^^		!!	!--  61 !  
/	//	/	V^^		!!	!r4   c                     | j                   r^| j                  j                  t        dddd      }|j                  sJ |j
                  sJ t        |j                  t              sJ y y r  )r   r   r   r   create_timeresponse_id
isinstancer   r   s     r5   )test_response_create_time_and_response_idr'  |  sn    __}}--!%!$
 . H h**H555 r4   c                 p    | j                   j                  t        dddddgi      }|j                  sJ y )Nr7   rl   r   r   )r   r   r9   r	  r   s     r5   test_safety_settingsr)    sG    ]]++#
5,  , 	( 
r4   c                 j   ddddddddg}| j                   j                  r*| j                  j                  t        dd	|i
      D ]  } y t        j                  t              5 }| j                  j                  t        dd	|i
      D ]  } 	 d d d        dt              v sJ y # 1 sw Y   xY w)Nr   r   r   r   r   r   r   r7   rl   r9   r   	r   r   r   r   r   pytestraises
ValueErrorstrr   rl   r   es       r5   )test_safety_settings_on_difference_streamr2         2( 8,!/   55!%
 6    
z	" a--77#' 8  $ 	 s1v    &*B))B2c                 j   ddddddddg}| j                   j                  r*| j                  j                  t        dd	|i
      D ]  } y t        j                  t              5 }| j                  j                  t        dd	|i
      D ]  } 	 d d d        dt              v sJ y # 1 sw Y   xY w)Nharm_category_hate_speechblock_only_highseverityr   harm_category_dangerous_contentblock_low_and_aboveprobabilityr7   rl   r9   r   r+  r0  s       r5   9test_safety_settings_on_difference_stream_with_lower_enumr<    r3  r4  c                      G d dt               }| j                  j                  t        dd|d      }t	        |j
                  |      sJ y )Nc                   T    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   y)	)test_pydantic_schema.<locals>.CountryInfotitle
populationcapital	continentgdpofficial_languagetotal_area_sq_miNr+   r,   r-   r/  __annotations__intr3   r4   r5   CountryInfor?    s)     JOLN	Hr4   rJ  )Give me information of the United States.r_   r   r9   r   r   r   r   r&  r   r   rJ  r   s      r5   test_pydantic_schemarN    sP    	I 	 ]]++: 2( , ( 
HOO[	11	1r4   c                 $    G d dt         t               G d dt               G fddt              }| j                  j	                  t
        dd|j                         d	
      }t        |j                         |j                  d k7  sJ y )Nc                       e Zd ZdZdZy))test_json_schema_fields.<locals>.UserRoleadminviewerN)r+   r,   r-   ADMINVIEWERr3   r4   r5   UserRolerQ    s    EFr4   rV  c                   "    e Zd ZU eed<   eed<   y)(test_json_schema_fields.<locals>.AddressstreetcityNr+   r,   r-   r/  rH  r3   r4   r5   AddressrX    s    K
Ir4   r\  c                       e Zd ZU  ed      Zeed<    edd      Zee	   ed<    ed	      Z
eW    ed
<   eW  ef   ed<    edd      Zy),test_json_schema_fields.<locals>.UserProfilezUser's unique name)descriptionusernamer      )geleager   )	min_itemsrolescontactzUser SchemazA user profile)r@  r_  N)r+   r,   r-   r   r`  r/  rH  rd  r	   rI  rf  r   r
   r   model_config)r\  rV  s   r5   UserProfiler^    sZ    &:;Hc;!+C#+ 1-E3x=-7C<  )9Lr4   ri  rK  r_   )rf   response_json_schemar9   )	r/  r   r   r   r   r   model_json_schemar   r   )r   ri  r   r\  rV  s      @@r5   test_json_schema_fieldsrl    s~    d 	 I  ]]++: 2"-"?"?"A , ( 	D	  	 r4   c                 @    G d dt               }| j                  j                  t        dd|d      }t	        j
                  |j                        }t        |j                               }|d   dk(  sJ |t        |j                  j                               k(  sJ y )	Nc                   ,    e Zd ZU eed<   eed<   eed<   y):test_pydantic_schema_orders_properties.<locals>.Restaurantr=   ratingfun_factNrG  r3   r4   r5   
Restaurantro    s    
IKMr4   rr  z1Give me information about a restaurant in Boston.r_   r   r9   r   r=   )
r   r   r   r   jsonloadsrH   listkeysmodel_fields)r   rr  r   response_text_jsonresponse_keyss        r5   &test_pydantic_schema_orders_propertiesrz    s    9 
 ]]++B 2' , ( zz(--0)..01-	q	V	##	#	$z66;;=>	>>	>r4   c                      G d dt               }| j                  j                  t        dd|d      }t	        |j
                  |      sJ y )Nc                   :    e Zd ZU eed<   dZeed<   dZee   ed<   y);test_pydantic_schema_with_default_value.<locals>.Restaurantr=   r   rp  zNew YorkrZ  N)	r+   r,   r-   r/  rH  rp  rI  rZ  r	   r3   r4   r5   rr  r}  (  s    
IFCO$D(3-$r4   rr  z&Can you recommend a restaurant for me?r_   r   r9   rL  )r   rr  r   s      r5   'test_pydantic_schema_with_default_valuer~  '  sP    %9 %
 ]]++7 2' , ( 
HOOZ	00	0r4   c                      G d dt                G fddt               }| j                  j                  t        dd|d      }t	        |j
                  |      sJ y )	Nc                       e Zd ZU eed<   y)-test_repeated_pydantic_schema.<locals>.Personr=   Nr[  r3   r4   r5   Personr  :      
Ir4   r  c                   2    e Zd ZU eed<   W  ed<   W  ed<   y)3test_repeated_pydantic_schema.<locals>.Relationshiprelationshipperson1person2Nr[  )r  s   r5   Relationshipr  =  s    OOr4   r  zCreate a couple.r_   r   r9   rL  )r   r  r   r  s      @r5   test_repeated_pydantic_schemar  8  s]    y Y 
 ]]++! 2) , ( 
HOO\	22	2r4   c                     | j                   j                  t        ddt        d      }t	        |j
                  t              sJ y )Nzwhat's your favorite number?r_   r   r9   )r   r   r   rI  r&  r   r   s     r5   test_int_schemar  M  sB    ]]++- 2  , ( 
HOOS	))	)r4   c           	          | j                   j                  t        ddt        t        t        t                 d      }t        |j                  d   d   d   t              sJ y )Nz-Can you return two matrices, a 2x3 and a 3x4?r_   r   r9   r   )r   r   r   ru  rI  r&  r   r   s     r5   test_nested_list_of_int_schemar  Y  s^    ]]++> 2!$tCy/2 , ( 
HOOA&q)!,c	22	2r4   c                     | j                   j                  t        ddt        d   d      }g d}t	        |j
                  t              sJ |j
                  |v sJ y )N&Which ice cream flavor should I order?r_   )	chocolatevanillazcookie doughr   r9   )r   r   r   r   r&  r   r/  )r   r   allowed_valuess      r5   test_literal_schemar  e  s_    ]]++7 2$%KL , ( <.	HOOS	))	)	N	**	*r4   c                     t        j                  t              5 }| j                  j	                  t
        ddt        d   d       d d d        dt              v sJ y # 1 sw Y   xY w)Nr  r_   )r  r  r   r   r9   zvalidation error)r,  r-  r.  r   r   r   r   r/  r   r1  s     r5   0test_literal_schema_with_non_string_types_raisesr  t  sg    }}Z  A
MM""!9"4&'@A
 #  
s1v	%%	% s   -AA()r   
   z | is not supported in Python 3.9)reasonc                     G d dt               }| j                  j                  t        dd|d      }t	        |j
                  |      sJ t	        |j
                  j                  t              sJ |j
                  j                  dv sJ y )Nc                   (    e Zd ZU eed<   ed   ed<   y)0test_pydantic_schema_with_literal.<locals>.Movier=   actioncomedydramagenreNr+   r,   r-   r/  rH  r   r3   r4   r5   Movier    s    
I.//r4   r  z0Give me information about the movie "Mean Girls"r_   r   r9   r  )r   r   r   r   r&  r   r  r/  r   r  r   s      r5   !test_pydantic_schema_with_literalr    s    
0i 0 ]]++A 2" , ( 
HOOU	++	+	HOO))3	//	/			"?	??	?r4   c                      G d dt               }| j                  j                  t        dd|d      }t	        |j
                  |      sJ |j
                  j                  dk(  sJ y )Nc                   (    e Zd ZU eed<   ed   ed<   y)=test_pydantic_schema_with_single_value_literal.<locals>.Movier=   r  r  Nr  r3   r4   r5   r  r    s    
I8r4   r  z0Give me information about the movie "The Matrix"r_   r   r9   r  )r   r   r   r   r&  r   r  r  s      r5   .test_pydantic_schema_with_single_value_literalr    sh    
i  ]]++A 2" , ( 
HOOU	++	+			(	**	*r4   c                      G d dt               }| j                  j                  t        dd|d      }t	        |j
                  |      sJ t        |j
                  j                        t        d fv sJ y )Nc                   ,    e Zd ZU eed<   dZedz  ed<   y)3test_pydantic_schema_with_none.<locals>.CountryInfor=   NrF  )r+   r,   r-   r/  rH  rF  rI  r3   r4   r5   rJ  r    s    
I#'cDj'r4   rJ  rK  r_   r   r9   )	r   r   r   r   r&  r   r   rF  rI  rM  s      r5   test_pydantic_schema_with_noner    sq    
(I ( ]]++: 2( , ( 
HOO[	11	1	hoo..	/C;	>>	>r4   c                      G d dt               }| j                  j                  t        dd|d      }t	        |j
                  |      sJ |j
                  j                  J y )Nc                   ,    e Zd ZU eed<   dZee   ed<   y)<test_pydantic_schema_with_optional_none.<locals>.CountryInfor=   NrF  )r+   r,   r-   r/  rH  rF  r	   rI  r3   r4   r5   rJ  r    s    
I&*hsm*r4   rJ  zJGive me information of the United States but don't include the total area.r_   r   r9   )r   r   r   r   r&  r   rF  rM  s      r5   'test_pydantic_schema_with_optional_noner    sf    +I + ]]++\ 2( , ( 
HOO[	11	1		)	)	11	1r4   c                     G d dt               }t        j                  j                  |j	                               }| j
                  j                  t        dt        j                  d|            }|j                  sJ y )Nc                   T    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   y)	3test_pydantic_schema_from_json.<locals>.CountryInfor=   
pupulationrB  rC  rD  rE  rF  NrG  r3   r4   r5   rJ  r    '    
IOLN	Hr4   rJ  rK  r_   r   r9   
r   r   Schemamodel_validaterk  r   r   r   r  rH   )r   rJ  schemar   s       r5   test_pydantic_schema_from_jsonr    sn    I  <<&&{'D'D'FG&]]++:((/  , ( 
r4   c                     | j                   j                  t        dt        j                  j                  t        dt        t        z                    }t        |j                        t        t        fv sJ y )NzGGive me a random number, either as an integers or written out as words.r_   r   r9   )r   r   r   r   r  r  dictrI  r/  r   r   r   s     r5   test_schema_with_union_typer    se    
 ]]++X((77/)9 	 , ( 
hoo	3*	,,	,r4   c                     | j                   j                  t        ddt        t        t
        f   d      }t        |j                        t        t
        fv sJ y )Nz6Give me a random number, either an integer or a float.r_   r   r9   )r   r   r   r
   rI  floatr   r   r   s     r5   +test_schema_with_union_type_all_py_versionsr    sR    ]]++G 2"3:. , ( 
hoo	3,	..	.r4   c           
          | j                   j                  t        dt        j                  dt
        t        t        z                 }|j                  D ]%  }t        |t              rt        |t              r%J  y NzZGive me a list of 5 random numbers, including some integers and some written out as words.r_   r   r9   )
r   r   r   r   r  ru  rI  r/  r   r&  r   r   items      r5    test_list_schema_with_union_typer    sm    
 ]]++k((/sSy/ , ( oo :ddC JtS$999:r4   c                 
   | j                   j                  t        dt        j                  dt
        t        t        t        f                  }|j                  D ]%  }t        |t              rt        |t              r%J  y r  )r   r   r   r   r  ru  r
   rI  r/  r   r&  r  s      r5   0test_list_schema_with_union_type_all_py_versionsr    sp    ]]++k((/uS#X/ , ( oo :ddC JtS$999:r4   c                     G d dt               }| j                  j                  t        dd|d      }t	        |j
                  |      sJ t	        |j
                  j                  t              s|j
                  j                  J y y )Nc                   `    e Zd ZU eed<   eed<   eed<   eed<   eed<   eee      ed<   eed<   y)	Etest_pydantic_schema_with_optional_generic_alias.<locals>.CountryInfor=   rA  rB  rC  rD  official_languagesrF  N)r+   r,   r-   r/  rH  rI  r	   r   r3   r4   r5   rJ  r  %  s0    
IOLN	H c++r4   rJ  rK  r_   r   r9   )r   r   r   r   r&  r   r  ru  rM  s      r5   0test_pydantic_schema_with_optional_generic_aliasr  $  s    I  ]]++: 2( , ( 
HOO[	11	1	HOO66	=AcAcAkk	kAk	=r4   c                     G d dt                G fddt               }d}| j                  j                  t        |d|d      }t	        |j
                  |      sJ t	        |j
                  j                        sJ y )	Nc                   V    e Zd ZU  edd      Zee   ed<    edd      Zee   ed<   y)?test_pydantic_schema_with_optional_pydantic.<locals>.TestPersonzFirst name of the personNr_  r   
first_namezLast name of the person	last_name)	r+   r,   r-   r   r  r	   r/  rH  r  r3   r4   r5   
TestPersonr  ;  s8     %.!J   %-t Ix} r4   r  c                   Z    e Zd ZU  edd      Zee   ed<    edd      ZeW     ed<   y)Atest_pydantic_schema_with_optional_pydantic.<locals>.TestDocumentz!Case number assigned to the claimNr  case_numberz7Name of the party that filed or submitted the statementfiled_by)	r+   r,   r-   r   r  r	   r/  rH  r  )r  s   r5   TestDocumentr  C  s;    !&7"K#  &+M&Hhz" r4   r  z
  Carefully examine the following document and extract the metadata.
  Be sure to include the party that filed the document.

  Document Text:
  --------------
  Case Number: 20-12345
  File by: John Doe
  r_   r   r9   )r   r   r   r   r&  r   r  )r   r  test_promptr   r  s       @r5   +test_pydantic_schema_with_optional_pydanticr  :  s~    9 Y + ]]++ 2) , ( 
HOO\	22	2	HOO,,j	99	9r4   c           	      @    G d dt               }| j                  j                  t        dt	        j
                  dt        |               }t        |j                  t              sJ t        |j                        dk(  sJ t        |j                  d   |      sJ y )	Nc                   T    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   y)	1test_list_of_pydantic_schema.<locals>.CountryInfor=   rA  rB  rC  rD  rE  rF  NrG  r3   r4   r5   rJ  r  c  r  r4   rJ  >Give me information for the United States, Canada, and Mexico.r_   r   r9   r   r   
r   r   r   r   r   r  ru  r&  r   r  rM  s      r5   test_list_of_pydantic_schemar  b  s    I  ]]++O((/{+ , ( 
HOOT	**	*	X__		""	"	HOOA&	44	4r4   c           
      T    G d dt               }| j                  j                  t        dt	        j
                  dt        t        |                  }t        |j                  t              sJ t        |j                        dk(  sJ t        |j                  d   d   |      sJ y )	Nc                   "    e Zd ZU eed<   eed<   y)3test_nested_list_of_pydantic_schema.<locals>.Reciper=   	cook_timeNr[  r3   r4   r5   Reciper  z  s    
INr4   r  zI'm writing three recipe books, one each for United States, Canada, and Mexico. Can you give some recipe ideas, at least 2 per book?r_   r   r9   r   r   r  )r   r  r   s      r5   #test_nested_list_of_pydantic_schemar  y  s    y  ]]++F((/tF|,	 , ( 
HOOT	**	*	X__		""	"	HOOA&q)6	22	2r4   c                     G d dt               }| j                  j                  t        ddt        |   d      }t        |j                  t              sJ t        |j                        dk(  sJ t        |j                  d   |      sJ y )	Nc                   T    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   y)	Btest_list_of_pydantic_schema_with_dict_config.<locals>.CountryInfor=   rA  rB  rC  rD  rE  rF  NrG  r3   r4   r5   rJ  r    r  r4   rJ  r  r_   r   r9   r   r   )r   r   r   r   ru  r&  r   r  rM  s      r5   -test_list_of_pydantic_schema_with_dict_configr    s    I  ]]++O 2!+. , ( 
HOOT	**	*	X__		""	"	HOOA&	44	4r4   c                 (    G d dt                G fddt               }| j                  j                  t        dt	        j
                  d|            }t        |j                  |      sJ t        |j                  j                        sJ y )	Nc                       e Zd ZU eed<   y)<test_pydantic_schema_with_nested_class.<locals>.CurrencyInfor=   Nr[  r3   r4   r5   CurrencyInfor    r  r4   r  c                   &    e Zd ZU eed<   W  ed<   y);test_pydantic_schema_with_nested_class.<locals>.CountryInfor=   currencyNr[  r  s   r5   rJ  r    s    
Ir4   rJ  )Give me information for the United Statesr_   r   r9   	r   r   r   r   r   r  r&  r   r  r   rJ  r   r  s      @r5   &test_pydantic_schema_with_nested_classr    s    Y I  ]]++:((/% , ( 
HOO[	11	1	HOO,,l	;;	;r4   c                     G d dt               }| j                  j                  t        dt	        j
                  d|            }t        |j                  |      sJ t        |j                  j                        t        t        fv sJ y )Nc                   (    e Zd ZU eed<   eez  ed<   y)9test_pydantic_schema_with_union_type.<locals>.CountryInfor=   restaurants_per_capitaN)r+   r,   r-   r/  rH  rI  r  r3   r4   r5   rJ  r    s    
I%K'r4   rJ  r  r_   r   r9   r   r   r   r   r   r  r&  r   r   r  rI  r  rM  s      r5   $test_pydantic_schema_with_union_typer    sz    (I ( ]]++:((/% , ( 
HOO[	11	1	hoo44	5#u	EE	Er4   c                     G d dt               }| j                  j                  t        dt	        j
                  d|            }t        |j                  |      sJ t        |j                  j                        t        t        fv sJ y )Nc                   ,    e Zd ZU eed<   eeef   ed<   y)Itest_pydantic_schema_with_union_type_all_py_versions.<locals>.CountryInfor=   r  N)r+   r,   r-   r/  rH  r
   rI  r  r3   r4   r5   rJ  r     s    
I!#u*--r4   rJ  r  r_   r   r9   r  rM  s      r5   4test_pydantic_schema_with_union_type_all_py_versionsr    sz    .I . ]]++:((/% , ( 
HOO[	11	1	hoo44	5#u	EE	Er4   c           	           G d dt               } G d dt               }| j                  j                  t        dt	        j
                  d||z              }t        |j                        ||fv sJ y )	Nc                   ,    e Zd ZU eed<   eed<   eed<   y)0test_union_of_pydantic_schema.<locals>.SongLyric	song_namelyricartistNr[  r3   r4   r5   	SongLyricr        NJKr4   r  c                       e Zd ZU eed<   y).test_union_of_pydantic_schema.<locals>.FunFactrq  Nr[  r3   r4   r5   FunFactr        Mr4   r  8Can you give me a Taylor Swift song lyric or a fun fact?r_   r   r9   )r   r   r   r   r   r  r   r   r   r  r  r   s       r5   test_union_of_pydantic_schemar    sr    ) 
	  ]]++I((/#g- , ( 
hoo	9g"6	66	6r4   c           
           G d dt               } G d dt               }| j                  j                  t        dt	        j
                  dt        ||f               }t        |j                        ||fv sJ y )	Nc                   ,    e Zd ZU eed<   eed<   eed<   y)@test_union_of_pydantic_schema_all_py_versions.<locals>.SongLyricr  r  r  Nr[  r3   r4   r5   r  r    r	  r4   r  c                       e Zd ZU eed<   y)>test_union_of_pydantic_schema_all_py_versions.<locals>.FunFactrq  Nr[  r3   r4   r5   r  r    r  r4   r  r  r_   r   r9   )	r   r   r   r   r   r  r
   r   r   r  s       r5   -test_union_of_pydantic_schema_all_py_versionsr    sw    ) 
	  ]]++I((/	7 23 , ( 
hoo	9g"6	66	6r4   c                 (    G d dt                G fddt              }| j                  j                  t        dt        j                  d|            }t        |j                  |      sJ t        |j                  j                        sJ y )	Nc                   (    e Zd ZdZdZdZdZdZdZdZ	y)	8test_pydantic_schema_with_nested_enum.<locals>.ContinentAsiaAfrica
AntarcticaEuropezNorth AmericazSouth America	AustraliaN)
r+   r,   r-   ASIAAFRICA
ANTARCTICAEUROPENORTH_AMERICASOUTH_AMERICA	AUSTRALIAr3   r4   r5   	Continentr    s%    DFJF#M#MIr4   r&  c                   &    e Zd ZU eed<   W  ed<   y):test_pydantic_schema_with_nested_enum.<locals>.CountryInfor=   rC  Nr[  )r&  s   r5   rJ  r(    s    
Ir4   rJ  r  r_   r   r9   )
r   r   r   r   r   r   r  r&  r   rC  )r   rJ  r   r&  s      @r5   %test_pydantic_schema_with_nested_enumr)    s    $ I  ]]++:((/% , ( 
HOO[	11	1	HOO--y	99	9r4   c                 .    G d dt                G fddt               }| j                  j                  t        dt	        j
                  d|            }t        |j                  |      sJ t        |j                  j                  d	         sJ y )
Nc                       e Zd ZU eed<   y)Atest_pydantic_schema_with_nested_list_class.<locals>.CurrencyInfor=   Nr[  r3   r4   r5   r  r,  (  r  r4   r  c                   ,    e Zd ZU eed<   eW     ed<   y)@test_pydantic_schema_with_nested_list_class.<locals>.CountryInfor=   r  N)r+   r,   r-   r/  rH  ru  r  s   r5   rJ  r.  +  s    
I<  r4   rJ  z*Give me information for the United States.r_   r   r9   r   r  r  s      @r5   +test_pydantic_schema_with_nested_list_classr/  '  s    Y !I ! ]]++;((/% , ( 
HOO[	11	1	HOO,,Q/	>>	>r4   c           	      z    G d dt                G fddt               }| j                  j                  t        dt	        j
                  dt        |               }t        |j                  t              sJ t        |j                  d	   |      sJ t        |j                  d	   j                        sJ y )
Nc                   ,    e Zd ZU eed<   eed<   eed<   y)Dtest_list_of_pydantic_schema_with_nested_class.<locals>.CurrencyInfor=   codesymbolNr[  r3   r4   r5   r  r2  <      
I
IKr4   r  c                   b    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   W  ed<   y	)
Ctest_list_of_pydantic_schema_with_nested_class.<locals>.CountryInfor=   rA  rB  rC  rD  rE  rF  r  NrG  r  s   r5   rJ  r7  A  s.    
IOLN	Hr4   rJ  r  r_   r   r9   r   
r   r   r   r   r   r  ru  r&  r   r  r  s      @r5   .test_list_of_pydantic_schema_with_nested_classr9  ;  s    Y 
I  ]]++O((/{+ , ( 
HOOT	**	*	HOOA&	44	4	HOOA&//	>>	>r4   c           	          G d dt                G fddt               }| j                  j                  t        dt	        j
                  dt        |               }t        |j                  t              sJ t        |j                  d	   |      sJ t        |j                  d	   j                  t              sJ t        |j                  d	   j                  d	         sJ y )
Nc                   ,    e Zd ZU eed<   eed<   eed<   y)Itest_list_of_pydantic_schema_with_nested_list_class.<locals>.CurrencyInfor=   r3  r4  Nr[  r3   r4   r5   r  r<  Y  r5  r4   r  c                   h    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eW     ed<   y	)
Htest_list_of_pydantic_schema_with_nested_list_class.<locals>.CountryInfor=   rA  rB  rC  rD  rE  rF  r  Nr+   r,   r-   r/  rH  rI  ru  r  s   r5   rJ  r>  ^  s3    
IOLN	H<  r4   rJ  r  r_   r   r9   r   r8  r  s      @r5   3test_list_of_pydantic_schema_with_nested_list_classr@  X  s    Y 
!I ! ]]++O((/{+ , ( 
HOOT	**	*	HOOA&	44	4	HOOA&//	66	6	HOOA&//2L	AA	Ar4   c                     G d dt               }| j                  sgt        j                  t              5 }| j
                  j                  t        dt        j                  dt        t        |f                d d d        y | j
                  j                  t        dt        j                  dt        t        |f               }|j                  sJ y # 1 sw Y   y xY w)Nc                   J    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   y)Ftest_response_schema_with_dict_of_pydantic_schema.<locals>.CountryInforA  rB  rC  rD  rE  rF  N)r+   r,   r-   rI  rH  r/  r3   r4   r5   rJ  rC  w  s"    OLN	Hr4   rJ  r  r_   r   r9   )r   r   r,  r-  r.  r   r   r   r   r  r  r/  rH   )r   rJ  r1  r   s       r5   1test_response_schema_with_dict_of_pydantic_schemarD  v  s    I  
	z	" amm$$#S,,!3"3#34 %   }}--!Q**1 k!12
 . H ===% s   ACCc           
         t        j                  t              5 }| j                  j	                  t
        dt        j                  dt        j                                      d d d        dt              v sJ y # 1 sw Y   xY w)Nr  r_   r   r9   zUnsupported schema type)
r,  r-  r.  r   r   r   r   r  r  r/  r  s     r5   (test_schema_with_unsupported_type_raisesrF    sp    }}Z  A
MM""!Q**1!LLN
 #  
#c!f	,,	, s   A
A<<Bc                     | j                   j                  t        ddt        d      }t        D ch c]  }|j                   }}|j
                  |v sJ t        |j                  t              sJ y c c}w )N-What instrument plays multiple notes at once?text/x.enumr   r9   )r   r   r   r$   valuerH   r&  r   )r   r   memberinstrument_valuess       r5   $test_enum_schema_with_enum_mime_typerM    st    ]]++> -+ , ( 3AAv||AA	+	++	+	HOO^	44	4 Bs   A4c                     t        j                  t        j                        5 }| j                  j                  t        ddt        t           d       d d d        dt              v sJ y # 1 sw Y   xY w)N*What instrument plays single note at once?rI  r   r9   400)
r,  r-  r   ClientErrorr   r   r   ru  r$   r/  r  s     r5   ,test_list_of_enum_schema_with_enum_mime_typerR    sj    }}V''( A
MM""="/#N3
 #  
#a& s   1A--A6c                     | j                   j                  t        ddt        t           d      }t        |j                  t              sJ |j                  sJ |j                  D ]  }t        |t              rJ  y )NrO  r_   r   r9   )r   r   r   ru  r$   r&  r   r  s      r5   ,test_list_of_enum_schema_with_json_mime_typerT    sv    ]]++; 2!.1 , ( 
HOOT	**	*	oo ,ddN+++,r4   c                      G d dt               }| j                  j                  t        dd|d      }t	        |j
                  |      sJ t	        |j
                  j                  t              sJ y )Nc                   (    e Zd ZU ee   ed<   eed<   y)Qtest_optional_enum_in_pydantic_schema_with_json_mime_type.<locals>.InstrumentInfo
instrumentrq  N)r+   r,   r-   r	   r$   rH  r/  r3   r4   r5   InstrumentInforW    s    ((Mr4   rY  z_What instrument plays single note at once? Include the name of the instrument in your response.r_   r   r9   )r   r   r   r   r&  r   rX  r$   )r   rY  r   s      r5   9test_optional_enum_in_pydantic_schema_with_json_mime_typerZ    sj    y  ]]++p 2+ , ( 
HOO^	44	4	HOO..	??	?r4   c                    | j                   j                  t        ddt        d      }|j                  j                  dd      }t        D ch c]  }|j                   }}||v sJ t        |j                  t              sJ y c c}w )NrH  r_   r   r9   "r   )	r   r   r   r$   rH   replacerJ  r&  r   )r   r   removed_quotesrK  rL  s        r5   $test_enum_schema_with_json_mime_typer_    s    ]]++> 2+ , ( ==((b1.2@Av||AA	,	,,	,	HOO^	44	4 Bs   Bc                      G d dt               }| j                  j                  t        dd|d      }|D ch c]  }t	        |j
                         }}|j                  |v sJ y c c}w )Nc                        e Zd ZdZdZdZdZdZy)Dtest_non_string_enum_schema_with_enum_mime_type.<locals>.IntegerEnumr   r   r         Nr*   r3   r4   r5   IntegerEnumrb    s    JFHEHr4   re  rH  rI  r   r9   )r   r   r   r   r/  rJ  rH   )r   re  r   rK  rL  s        r5   /test_non_string_enum_schema_with_enum_mime_typerf    ss    D  MM**> -( + ( 8CCVs6<<(CC	+	++	+ Ds   A(c                     | j                   j                  t        ddg dddiddiddiddiddiddiddidddd	
      }t        |j                  t
              sJ y )NrK  r_   r=   rA  rB  rC  rD  rE  rF  r   r/   INTEGERr   requiredr   r   r   r9   r   r   r   r&  r   r  r   s     r5   test_json_schemarm        ]]++: 2 "8,!' 3$h/ &1 ),(.'9'-y&9 ' , (8 
HOOT	**	*r4   c                     | j                   j                  t        ddg dddiddiddiddiddiddiddidddd	
      }t        |j                  t
              sJ y )NrK  r_   )r=   r  rB  rC  rD  rE  rF  r   stringintegerr   rj  r   r9   rl  r   s     r5    test_json_schema_with_lower_enumrr  (  rn  r4   c                    | j                   j                  t        ddddddgdddd	d
dddddddddddgddgdddddddddddddgddgdgddidd      }t        |j                  t
              sJ d|j                  v sJ t        |j                  d   t              sJ d|j                  d   d   v sJ y ) NGive me a fruit basket.r_   r   Fruit Basket-A structured representation of a fruit basketfruitARRAY*An ordered list of the fruit in the basketzA piece of fruitAppleDescribes an appler/   zAlways 'apple'r   r_  z$The color of the apple (e.g., 'red'))r   colorr   r}  r@  r_  r   r   property_orderingrk  OrangeDescribes an orangezAlways 'orange'z'The size of the orange (e.g., 'medium'))r   sizer  )r_  any_ofr   r_  items)r   r@  r_  rk  r   r   r9   r   )r   r   r   r&  r   r  ru  r   s     r5   test_json_schema_with_any_ofr  H  sC   ]]++( 2%L")%F *< ,31E*2 3;9I/(
 3;/80(1$ 9?7H/5w.?% * ,41F*2 3;9J/(
 3;/;/(1$ 9?7G/5v.>% +)%, 24:= , A(D 
HOOT	**	*	HOO	##	#	HOOG,d	33	3	8??7+A.	..	.r4   c                 n   t        j                  t         j                  j                  dddt        j                  t         j                  j                  dt        j                  t        j                  ddt         j                  j                  t        j                  t         j                  j
                  d      t        j                  t         j                  j
                  d	      d
ddgddg      t        j                  ddt         j                  j                  t        j                  t         j                  j
                  d      t        j                  t         j                  j
                  d      d
ddgddg      g            idg      }| j                  j                  t        dt        j                  d|            }t        |j                  t              sJ d|j                  v sJ t        |j                  d   t              sJ d|j                  d   d   v sJ y )Nru  rv  rw  ry  rz  r{  zAlways "apple"r|  z+The variety of apple (e.g., "Granny Smith"))r   varietyr   r  r~  r  r  zAlways "orange"z+The variety of orange (e.g.,"Navel orange"))r  r  )r   r@  r_  r   rk  rt  r_   r   r9   r   )r   r  Typer   rx  r/   r   r   r   r  r&  r   r  ru  )r   r   r   s      r5   test_schema_with_any_ofr    s   ,,::A
5<<::##FLLll '&:$zz00&+ll

8I8IWg&h).',zz'8'8.[* & .4Y,?$*I#6 ll (&;$zz00&+ll

8I8IWh&i).',zz'8'8.[* & .4Y,?$*I#6#%L yU+/X ]]++(((/) , ( 
HOOT	**	*	HOO	##	#	HOOG,d	33	3	8??7+A.	..	.r4   c                    t        j                  | t        j                        5  | j                  j                  dt        j                  d      t        j                  dgt        j                  t        j                  t        j                  t        d                        	       d d d        y # 1 sw Y   y xY w)
Nz?gemini-2.5-flash-preview-tts-voice-replication-rev22-2025-10-28r   r   z	audio/wav)voice_sample_audior   )replicated_voice_configr   r   r9   )r   r   r   rQ  r   r   t
t_contentsr   r  SpeechConfigVoiceConfigReplicatedVoiceConfigaudio_bytesr  s    r5   test_replicated_voice_configr    s    ((1C1CD mm$$Q<<9 ,,#*)!..$00.3.I.I-8$// 
 %   s   B	B77C c                     | j                   j                  t        ddddiddiddiddiddiddiddidddd	
      }|D ]#  }|j                  }|D ]  }|j                  rJ  % y )NrK  r_   r   r/   ri  rh  r   )r   r   r   r9   )r   r   r   rK   rH   )r   r   rrK   ps        r5   test_json_schema_with_streamingr    s    ]]22: 2 "8,!' 3$h/ &1 ),(.'9'-y&9  3 ((  aGGE VVmVr4   c                      G d dt               }| j                  j                  t        dd|d      }|D ]#  }|j                  }|D ]  }|j
                  rJ  % y )Nc                   T    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   y)	8test_pydantic_schema_with_streaming.<locals>.CountryInfor=   rA  rB  rC  rD  rE  rF  NrG  r3   r4   r5   rJ  r    r  r4   rJ  rK  r_   r   r9   )r   r   r   r   rK   rH   )r   rJ  r   r  rK   r  s         r5   #test_pydantic_schema_with_streamingr    sn    I  ]]22: 2( 3 (  aGGE VVmVr4   c                     G d dt               }t        j                  j                  |j	                               }| j
                  j                  t        dt        j                  d|            }|j                  sJ y )Nc                   2    e Zd ZU eed<   eed<   ee   ed<   y)"test_schema_from_json.<locals>.FoobarbazquxNr?  r3   r4   r5   Foor        	H	H	cNr4   r  Fill in the Foo.r_   r   r9   r  )r   r  r  r   s       r5   test_schema_from_jsonr    sn    I 
 <<&&s'<'<'>?&]]++!((/  , ( 
r4   c           	           G d dt               }| j                  j                  t        dt	        j
                  d|j                                     }|j                   y )Nc                   2    e Zd ZU eed<   eed<   ee   ed<   y)*test_schema_from_model_schema.<locals>.Foor  r  r  Nr?  r3   r4   r5   r  r  .  r  r4   r  r  r_   r   r9   )r   r   r   r   r   r  rk  rH   )r   r  r   s      r5   test_schema_from_model_schemar  ,  sU    I 
 ]]++!((///1 , ( --r4   c           	          G d dt               }| j                  rF| j                  j                  t        dt        j                  d|            }|j                  sJ y t        j                  t              5 }| j                  j                  t        dt        j                  d|             d d d        dt              v sJ y # 1 sw Y   xY w)Nc                   6    e Zd ZU eed<   eed<   eeef   ed<   y)3test_schema_with_additional_properties.<locals>.Foor  r  r  N)r+   r,   r-   r/  rH  rI  r  r3   r4   r5   r  r  A  s    	H	H	c3hr4   r  r7   r_   r   r9   z8additionalProperties is not supported in the Gemini API.)r   r   r   r   r   r   r  rH   r,  r-  r.  r/  )r   r  r   r1  s       r5   &test_schema_with_additional_propertiesr  ?  s    I 
 __}}--!%**1
 . H ===	z	" amm$$#',,!3! %  FQOOO s   ;8CCc                     dt         dt         fd}| j                  j                  t        dd|gi      }d|j                  v sJ y )NrZ  returnc                     d|  dS )zReturns the weather in a city.zThe weather in z is sunny and 100 degrees.r3   )rZ  s    r5   get_weatherz"test_function.<locals>.get_weather^  s    TF"<==r4   zEWhat is the weather like in Sunnyvale? Answer in very short sentence.rt   r9   100)r/  r   r   r   rH   )r   r  r   s      r5   test_functionr  ]  sZ    > > > ]]++ K= , 	( 
(--		r4   c                     t        j                  t              5 }| j                  j	                  t
        dddi       d d d        dt              v sJ dt        |      v sJ y # 1 sw Y   (xY w)NzWhat is your nameinput_that_does_not_existwhat_ever_valuer9   zExtra inputs are not permitted)r,  r-  r   r   r   r   r/  r  s     r5   &test_invalid_input_without_transformerr  o  ss    }}_% 
MM""!$'):
 #  
%A	..	.	)SV	33	3 s   %A&&A/c                     t        j                  t              5 }| j                  j	                  t
        ddi       d d d        dt        j                        v sJ y # 1 sw Y   #xY wNinvalid_keyinvalid_valuerB   r,  r-  r   r   r   r   r/  rJ  r  s     r5   (test_invalid_input_with_transformer_dictr  |  s_    }}_% 
MM""!1 # 
 
#agg,	&&	& s   $A  A)c                     t        j                  t              5 }| j                  j	                  t
        ddig       d d d        dt        j                        v sJ y # 1 sw Y   #xY wr  r  r  s     r5   (test_invalid_input_with_transformer_listr    sb    }}_% 
MM""! /23 # 
 
#agg,	&&	& s   %A!!A*c                     t        j                  t              5 }| j                  j	                  dd       d d d        dt              v sJ y # 1 sw Y   xY w)Nrd  r7   rB   r:   )r,  r-  r   r   r   r/  r  s     r5   'test_invalid_input_for_simple_parameterr    sV    }}_% 
MM""% # 
 
CF		 s   AAc                    	 | j                   j                  t        dddgi       y # t        j                  $ rH}d|j
                  v r|j
                  d   }n|j
                  }|d   dk(  sJ |d   d	k(  sJ Y d }~y d }~ww xY w)
Nr7   r   AUDIOr9   errorr3  r   statusINVALID_ARGUMENT)r   r   r   r   rQ  details)r   r1  r  s      r5   (test_catch_stack_trace_in_error_handlingr    s    3
MM""!%%y1 # 
 
		 3$ !))		'"g		g6?c!!!8 2222/3s   %( B>A>>Bc                 2    G d dt               }| j                  j                  t        ddgdt        |   d      }d|j
                  v sJ d	|j
                  v sJ d|j                  d
   j                  v sJ d	|j                  d   j                  v sJ y )Nc                   "    e Zd ZU eed<   eed<   y)/test_multiple_strings.<locals>.SummaryResponsessummarypersonNr[  r3   r4   r5   SummaryResponsesr        LKr4   r  4Summarize Shakespeare's life work in a few sentencesSummarize Hemingway's life workr_   r   r9   Shakespeare	Hemingwayr   r   )r   r   r   r   ru  rH   r   r  r   r  r   s      r5   test_multiple_stringsr    s      ]]++
@
+
 !3!"23 , 
( 
(--	''	'		%%	%	(//!,33	33	3	*11	11	1r4   c                     G d dt               }| j                  j                  t        t	        j
                  d      t	        j
                  d      gdt        |   d      }d	|j                  v sJ d
|j                  v sJ d	|j                  d   j                  v sJ d
|j                  d   j                  v sJ y )Nc                   "    e Zd ZU eed<   eed<   y)-test_multiple_parts.<locals>.SummaryResponsesr  r  Nr[  r3   r4   r5   r  r    r  r4   r  r  rG   r  r_   r   r9   r  r  r   r   )
r   r   r   r   r   Partru  rH   r   r  r  s      r5   test_multiple_partsr    s      ]]++
**I **;
<	 !3!"23 , ( 
(--	''	'		%%	%	8??1-44	44	4	*11	11	1r4   c                    | j                   j                  t        ddt        j                  j                  dddi      t        j                  j                  ddd	i      t        j                  j                  dd
di      t        j                  j                  dd
di      gt        j                  t        j                  t        j                  ddt        j                  t        j                  j                  dt        j                  t        j                  j                        i            t        j                  ddt        j                  t        j                  j                  dt        j                  t        j                  j                        i            g      g            }d|j                  v sJ d|j                  v sJ d|j                  v sJ d|j                  v sJ y )NzWhat is the weather in Boston?z What is the stock price of GOOG?r  locationBoston)r=   argsget_stock_pricer4  GOOGr   zIt is sunny and 100 degrees.)r=   r   zThe stock price is $100.zGet the weather in a city.)r   r   )r=   r_  r>   z Get the stock price of a symbol.)function_declarationsrs   r9   sunnyz100 degreesz$100)r   r   r   r   r  from_function_callfrom_function_responser  ToolFunctionDeclarationr  r  r   r/   rH   r   s     r5   test_multiple_function_callsr    s   ]]++
*
,
**
'
' ) (  **
'
'$f% (  **
+
+ "$BC ,  **
+
+$"$>? , ( ((jj//,&B%*\\#(::#4#4",ell+0::+<+</$* & //0&H%*\\#(::#4#4"*ELL+0::+<+<-$* &)- , 6(p 
X]]	""	"	HMM	!!	!	(--	''	'	8==	  	 r4   c                    dt         j                  j                  t        d      g}| j                  j                  t        |      }|j                  }|j                  sJ |j                  sJ t        |j                  D cg c]  }|j                  j                   c}      }|dgk(  sJ t        |j                  d   j                  t         j                        sJ |j                  sJ |j                   sJ t        |j                   D cg c]  }|j                  j                   c}      }|ddgk(  sJ y c c}w c c}w )NzHello world.	image/pngdatar   rB   r   r   r   )r   r  
from_bytesimage_bytesr   r   r   usage_metadatacandidates_token_countcandidates_tokens_detailssortedmodalityr=   r&  MediaModalityprompt_token_countprompt_tokens_details)r   r;   r   r  d
modalitiess         r5   test_usage_metadata_part_typesr  '	  sD   jj  ( ]]++x , ( **.		.	..	.		1	11	1 . H HI1qzzI* 
x			..q1::E<O<O
Q Q 
Q 
	*	**	*		-	--	- . D DE1qzzE* 
(	((	( J Fs   E Ec           
         | j                   ry 	 | j                  j                  t        t	        j
                  dt        j                  j                  t        d      t        j                  j                  d      g      gt	        j                  ddd	gd
            D ]  } y # t        j                  $ r}|j                  dk(  sJ Y d }~y d }~ww xY wNrF   r  r  Make sky more beautiful.rG   rI   
text/plainr   r   make the sky more beautiful.rf   r   rU   r9   zFDeveloper instruction is not enabled for models/gemini-2.5-flash-image)r   r   r   r   r   Contentr  r  r  	from_textr  r   rQ  message)r   r   r1  s      r5   test_error_handling_streamr  F	  s    __
66'MMJJ))(K *  JJ((.H(I	

 **+!(& 1=
 7  & '* 
		 			)	)	)s   BB( (C;CCc           
         | j                   ry 	 | j                  j                  t        t	        j
                  dt        j                  j                  t        d      t        j                  j                  d      g      gt	        j                  ddd	gd
             y # t        j                  $ r}|j                  dk(  sJ Y d }~y d }~ww xY wr  )r   r   r   r   r   r   r  r  r  r  r  r   rQ  r  r  s     r5   test_error_handling_unaryr  h	  s    __

MM""'MMJJ))(K *  JJ((.H(I	

 **+!(& 1=
 # ( 
		 			)	)	)s   BB# #C6CCc           	      (   | j                   j                  t        dt        j                  dddii            }| j
                  r4|j                  j                  t        j                  j                  k(  sJ y |j                  j                  rJ y )NzWhat is 1 + 1?r!   zX-Vertex-AI-LLM-Request-Type	dedicated)r8   r9   )
r   r   r   r   r  r   r  traffic_typeTrafficTypePROVISIONED_THROUGHPUTr   s     r5   !test_provisioned_output_dedicatedr  	  s    ]]++((!$BK#PQ , ( __""//53D3D3[3[[[[&&33333r4   c           
        K   | j                   ry 	 | j                  j                  j                  t        t        j                  dt
        j                  j                  t        d      t
        j                  j                  d      g      gt        j                  ddd	gd
             d {    y 7 # t        j                  $ r}|j                  dk(  sJ Y d }~y d }~ww xY wwr  )r   r   r   r   r   r   r   r  r  r  r  r  r   rQ  r  r  s     r5   test_error_handling_unary_asyncr  	  s     __

**


,
,'MMJJ))(K *  JJ((.H(I	

 **+!(& 1=
 -   ( 
		 			)	)	)sA   C*B B9 1B72B9 6C*7B9 9C'C"C*"C''C*c           
        K   | j                   ry 	 | j                  j                  j                  t        t        j                  dt
        j                  j                  t        d      t
        j                  j                  d      g      gt        j                  ddd	gd
             d {   2 3 d {   }
7 7 6 y # t        j                  $ r}d|j                  v sJ Y d }~y d }~ww xY ww)NrF   r  r  r  rG   rI   r  r   r   r  r  r9   z$Developer instruction is not enabled)r   r   r   r   r   r   r   r  r  r  r  r  r   rQ  r  )r   r   r1  s      r5    test_error_handling_stream_asyncr  	  s     __
A"JJ--EE'MMJJ))(K *  JJ((.H(I	

 **+!(& 1=
 F    d& '  * 
		 A2aii?@?As_   C6B C 1C 2C 6C:C;C>C CC C6C3C.)C6.C33C6)ospathlibpydanticr   r   r   r   typingr   r   r	   r
   r   r   r,  rs  r  sysr   r   r  r   r   r   enumr   r   r   r   Path__file__parentIMAGE_PNG_FILE_PATH
read_bytesr  AUDIO_WAV_FILE_PATHr  safety_settings_with_methodr   r$   TestTableItem_GenerateContentParametersr  r   r  	t_contentr  r  GoogleSearchIntervalfromisoformatPhishBlockThresholdr   EnterpriseWebSearchr  r  PrebuiltVoiceConfigMultiSpeakerVoiceConfigSpeakerVoiceConfigFileDatar   ru  rH  setupglobals
pytestmarkpytest_pluginsr   r   markasyncior   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r"  r'  r)  r2  r<  rN  rl  rz  r~  r  r  r  r  r  skipifversion_infor  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)  r/  r9  r@  rD  rF  rM  rR  rT  rZ  r_  rf  rm  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r3   r4   r5   <module>r1     s    
  B B 6 6     
 "    ( ) 4 "gll8,336JJ !,,."gll8,336PP !,,.
 0& 6*  %)fi5HI T r1M*3533%!Q\\"67 1
	r1  M,&3533%0O
 r1&  M-&3533%"U]]!uzz'FGH
 'r1>  M+&3533% ejj&EFG
 ?r1P  M*&3533%UZZ%DE
 Qr1b  M%&3533%%5::+JKL
cr1~  M3533;!Q\\"67
 !=r1P  M'3533%!Q\\&)$kakk-'
Qr1h  M*3533%!Q\\"67XB

ir1~  M33533%!Q\\"67%("&8#'&#$	
r1`  M13533%!Q\\"@A!1
	ar1t  M13533%!Q\\"67!#>
 $
ur1J  M3533"!Q\\"@A$'%(

Kr1`  M,3533"!Q\\"@A$'%(

ar1v  M&3533%!Q\\"89.5..!uzz0B0B0B0DEF
	wr1J  M$3533%!Q\\"=>.5..%r*+&!(1)4$)

Kr1n  M=3533%!Q\\"@A.5..EJJ&8e&8&8.<enn+A8+A+A$:," *@)?)?$:*"	/	'
or1\  M;3533%!Q\\"89.5..EJJ&8e&8&8-9>,J'
 .]r1~  M?3533%!Q\\"89.5..EJJ&8e&8&8050I0I0]0]'
 .r1`  M.3533%!Q\\"89.5..EJJ.Ge.G.G.I

 .ar1~  MC3533%!Q\\"89.5..EJJ.Ge.G.G-9>,J/
 .r1`  MG3533%!Q\\"89.5..EJJ.Ge.G.G050I0I0]0]/
 .ar1B	  M&35330!Q\\; /5..%,I0e00!2!2!2.Ge.G.G'//"	
C	r1h	  M:35330!Q\\A /5..%,I0e00/Lu/L/L4E44(/->U->->:S%:S:S39;&." 5E44(-->U->->:S%:S:S39;&."/0
!i	r1l
  MK0/35330!Q\\A /5..%,I0e00!2!2!2.Ge.G.G'-/"
 0Mu/L/L4E44(/->U->->:S%:S:S39;&." 5E44(-->U->->:S%:S:S39;&."/0#
	(m
r1~  M.35330!.5..%,IX
 
r1T  M#3533%"

&4enn)`*6' #

"D$ /5..tD)
, +1Ur1H  M03533%!Q\\"67&8$$,'5!#$
  J%Ir1p  M03533>!Q\\"67
 64qr1B  M93533%!Q\\"67
 64Cr1T  M53533%!Q\\"67
 64Ur1f  M*3533%!Q\\ 0

 ,gr1D  M&3533%!Q\\"67$,..0'
 +Er1
D,,- rh !]  	Y)	
 %1<    1 1 < <   ,      *,     (
	"<6  F F2,!:?(1"3*	*	3+
& w-  @	@$ w-  +	+" w-  ?	?"2"0 w-  	-		-	/ w-  
:	
:
:l,%:P5.3&5.<( w-  F	F$F$ w-  7	7*7*:4?(?:B<>
-5 
, @$5",,+@+@F/R8/v*84*&P< $
4''3B2.22<!~)>DB4  B A Ar4   