
    AHjR                        d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlZd dlmZmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZm Z  erd dl!m"Z"m#Z#m$Z$m%Z% neZ"eZ#eZ$eZ% e       Z& G d de      Z' G d d      Z(e 	 	 	 	 	 	 	 dde)de#de
e"   de
e%   de
ee)ef      de
ee)ef      de
ee)ef      de
ee*ejV                  f      de
e)   defd       Z,e 	 	 	 	 	 	 	 dde)de#de
e"   de
e%   de
ee)ef      de
ee)ef      de
ee)ef      de
ee*ejV                  f      de
e)   defd       Z-e 	 	 	 	 	 	 	 dde)de#de
e"   de
e%   de
ee)ef      de
ee)ef      de
ee)ef      de
ee*ejV                  f      de
e)   defd       Z.e 	 	 	 	 	 	 	 dde)de#de
e"   de
e%   de
ee)ef      de
ee)ef      de
ee)ef      de
ee*ejV                  f      de
e)   de	e   fd       Z/y)     N)partial)TYPE_CHECKINGAnyClassVarDictIteratorOptionalUnion)	BaseModel
ConfigDict)request_timeout)"GenerateContentToCompletionHandler)Logging)$BaseGoogleGenAIGenerateContentConfig)BaseLLMHTTPHandler)GenericLiteLLMParams)ProviderConfigManagerclient)GenerateContentConfigDict#GenerateContentContentListUnionDictGenerateContentResponseToolConfigDictc                       e Zd ZU dZ ed      Zee   ed<   eed<   e	ee
f   ed<   eed<   ee   ed<   e	ee
f   ed	<   eed
<   eed<   ee   ed<   y)GenerateContentSetupResultz<Internal Type - Result of setting up a generate content callT)arbitrary_types_allowedmodel_configmodelrequest_bodycustom_llm_provider generate_content_provider_configgenerate_content_config_dictlitellm_paramslitellm_logging_objlitellm_call_idN)__name__
__module____qualname____doc__r   r   r   __annotations__strr   r   r	   r   r   LiteLLMLoggingObj     Q/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/google_genai/main.pyr   r   *   sb    F)3D)QL(:&QJsCx. &./S&TT"&sCx.0((**c]"r-   r   c                   |    e Zd ZdZe	 ddedeeef   fd       Ze	 	 	 ddede	de
e   d	e
e   d
e
e   defd       Zy)GenerateContentHelperz9Helper class for Google GenAI generate content operationsmock_responsereturnc                 .    | d| igddddg dgddd	d
dS )z7Mock response for generate_content for testing purposestextr   )partsroleSTOPr   )contentfinishReasonindexsafetyRatings
         )promptTokenCountcandidatesTokenCounttotalTokenCount)r4   
candidatesusageMetadatar,   r1   s    r.   mock_generate_content_responsez4GenerateContentHelper.mock_generate_content_response<   sF     " ,2=*A)BGT$*%'	 %'(*#%
 	
r-   Nr   contentsconfigr   toolsc           
      D   |j                  d      }|j                  dd      }t        di |}|j                  dd      s1|j                  r%t        |j                  t              rt        d      t        j                  | ||j                  |j                        \  } }}	}
|j                  ||_
        t        j                  | t        j                  |            }|-|t        d	      t        | |i dt        |xs i       |||
      S |j!                  |xs i |       }|j                  d      xs |j                  d      }|j#                  | ||||      }|t        d	      |j%                  || t        |      d|i|       t        | |||||||
      S )a  
        Common setup logic for generate_content calls

        Args:
            model: The model name
            contents: The content to generate from
            config: Optional configuration
            custom_llm_provider: Optional custom LLM provider
            tools: Optional tools
            **kwargs: Additional keyword arguments

        Returns:
            GenerateContentSetupResult containing all setup information
        r#   r$   NstreamFz)Mock response should be handled by caller)r   r   api_baseapi_key)r   providerz-litellm_logging_obj is required, but got None)r   r   r   r    r!   r"   r#   r$   )r!   r   systemInstructionsystem_instruction)r   rF   rH   r!   rO   )kwargsr   optional_paramsr"   r   r,   )getr   r1   
isinstancer*   
ValueErrorlitellmget_llm_providerrK   rL   r   r   1get_provider_google_genai_generate_content_configLlmProvidersr   dict$map_generate_content_optional_params"transform_generate_content_requestupdate_from_kwargs)r   rF   rG   r   rH   rP   r#   r$   r"   dynamic_api_keydynamic_api_baser    r!   rO   r   s                  r.   setup_generate_content_callz1GenerateContentHelper.setup_generate_content_callR   s   . <B::!<
 *04Et)L .77 

8U+,,>77=HII $$ 3#,,"**	
	
 --51DN.
 "SS))*=>
 	) ,3 #* !PQQ-$715-1&,B-?-$7 /	 	  -QQ-3\r R  	% $ZZ(;< 


 A
 -OO!-I#5 P  	 &LMM.. !=>!? !4 	/ 	
 * 3%-M)E) 3+	
 		
r-   )z;This is a mock response from Google GenAI generate_content.)NNN)r%   r&   r'   r(   staticmethodr*   r   r   rE   r   r	   r   r   r   r_   r,   r-   r.   r0   r0   9   s    CZ

	c3h
 
*  7;-1*.|
|
5|
 23|
 &c]	|

 '|
 
$|
 |
r-   r0   r   rF   rG   rH   extra_headersextra_query
extra_bodytimeoutr   r2   c	                    K   t               }
	 t        j                         }d|	d<   d|	v r||	j                  d      }|t	        j
                  | |      \  }}}}t        t        f| ||||||||d	|	}t        j                         }t        |j                  |      }|j                  d|       d{   }t        j                  |      r| d{   }|S |}|S 7 )7 # t        $ r}t	        j                  | |||
|	      d}~ww xY ww)z4
    Async: Generate content using Google GenAI
    Tagenerate_contentgenerationConfigN)r   r   )	r   rF   rG   ra   rb   rc   rd   r   rH   r   r   original_exceptioncompletion_kwargsextra_kwargs)localsasyncioget_event_looppoprU   rV   r   generate_contentcontextvarscopy_contextrunrun_in_executoriscoroutine	Exceptionexception_type)r   rF   rG   rH   ra   rb   rc   rd   r   rP   
local_varsloop_funcctxfunc_with_contextinit_responseresponsees                      r.   rf   rf      sH    & J-
%%'&*"# 'FNZZ 23F&+2+C+C$7,(A"Aq
 
'#! 3
 
 &&(#CGGT2"2249JKK}-**H  %H L +
  
$$ 3 (
 	

sY   DB'C# 5C6C# C!C# DC# DC# !C# #	D,DDDc	                 l   t               }
	 |	j                  dd      }d|	v r||	j                  d      }t        di |	}|j                  r:t	        |j                  t
              r t        j                  |j                        S t        j                  d| ||||d|	}|	j                  d      xs |	j                  d      }|j                  1t        j                  d| ||j                  |||j                  |d	|	S t        j                  |j                   |||j                  |j                  |j"                  |j                  |j$                  |||xs t&        ||	j                  d
      |	j                  di       |      }|S # t(        $ r}t+        j,                  | |||
|	      d}~ww xY w)z-
    Generate content using Google GenAI
    rf   Frg   NrD   r   rF   rG   r   rH   rN   rO   )r   rF   rG   rH   	_is_asyncr"   ra   r   litellm_metadata)r   rF   rH   r    r!   r   r"   logging_objra   rc   rd   r   r   r   rO   rh   r,   )rl   ro   r   r1   rS   r*   r0   rE   r_   rR   r    r   generate_content_handlerr!   r"   base_llm_http_handlerr   r   r#   r   rv   rU   rw   )r   rF   rG   rH   ra   rb   rc   rd   r   rP   rx   r   r"   setup_resultrO   r   r   s                    r.   rp   rp     s   & JG
JJ2E:	 'FNZZ 23F-77''J((#-
 )GG,:: H  
 -HH 
 3
 
 $ZZ(;< 


 A

 88@5NN 	!#@@#+::+	 	 	 )AA$$-9-Z-Z)5)R)R , @ @'66$88'!.::h'#ZZ(:B?1 B 
$  
$$ 3 (
 	

s&   A9F A;F BF 	F3F..F3c	                 f  K   t               }
	 d|	d<   d|	v r||	j                  d      }|,t        j                  | |
j	                  dd            \  }}}}t        j                  d| ||||d|	}|	j	                  d      xs |	j	                  d	      }|j                  Od
|	v r|	j                  d
d       t        j                  d| ||j                  |j                  |d|d|	 d{   S t        j                  |j                  ||j                  |j                  ||j                  |j                  |j                   |||xs t"        d|	j	                  d      d|	j	                  di       |       d{   S 7 7 # t$        $ r}t        j&                  | |||
|	      d}~ww xY ww)zL
    Async: Generate content using Google GenAI with streaming response
    Tagenerate_content_streamrg   Nbase_url)r   rK   r   rN   rO   rJ   )r   rF   rG   r"   rH   rJ   ra   r   r   )r   rF   r    r!   rH   r   r"   r   ra   rc   rd   r   r   rJ   r   rO   rh   r,   )rl   ro   rU   rV   rR   r0   r_   r    r   async_generate_content_handlerr!   r"   r   r   r   r   r#   r   rv   rw   )r   rF   rG   rH   ra   rb   rc   rd   r   rP   rx   rz   r   rO   r   s                  r.   r   r   t  s    & JJ
-1)* 'FNZZ 23F&+2+C+CjnnZ&F,(A"Aq
 -HH 
 3
 
 $ZZ(;< 


 A

 88@6!

8T* 9WW 	%'DD#/#>#>"/	 	 	 +CC$$-9-Z-Z)5)R)R , @ @'66$88'!.::h'#ZZ(:B?1! D 
 
 	
	
&  
$$ 3 (
 	

sZ   F1CF -F.F 1F12BF =F>F F1F F 	F.F))F..F1c	                    t               }
	 |	j                  dd      }d|	v r||	j                  d      }t        j                  d| ||||d|	}|j                  Gd|	v r|	j                  dd       t        j                  d| ||j                  ||j                  d|d|	S t        j                  |j                  ||j                  |j                  ||j                  |j                  |j                  |||xs t        ||	j                  d	      d|	j                  d
i             S # t        $ r}t!        j"                  | |||
|	      d}~ww xY w)zE
    Generate content using Google GenAI with streaming response
    r   Frg   Nr   rJ   T)r   rF   rG   r   r"   rJ   ra   r   r   )r   rF   r    r!   rH   r   r"   r   ra   rc   rd   r   r   rJ   r   rh   r,   )rl   ro   r0   r_   r    r   r   r!   r"   r   r   r   r#   r   rR   rv   rU   rw   )r   rF   rG   rH   ra   rb   rc   rd   r   rP   rx   r   r   r   s                 r.   generate_content_streamr     s   & J<
JJ95A	 'FNZZ 23F,HH 
 3
 
 88@6!

8T* 6NN 	!#@@#+::+	 	 	 %==$$-9-Z-Z)5)R)R , @ @'66$88'!.::h'#ZZ(:B? > 
 	
$  
$$ 3 (
 	

s   BD* #BD* *	E3EE)NNNNNNN)0rm   rq   	functoolsr   typingr   r   r   r   r   r	   r
   httpxpydanticr   r   rU   litellm.constantsr   %litellm.google_genai.adapters.handlerr   *litellm.litellm_core_utils.litellm_loggingr   r+   1litellm.llms.base_llm.google_genai.transformationr   *litellm.llms.custom_httpx.llm_http_handlerr   litellm.types.routerr   litellm.utilsr   r   litellm.types.google_genai.mainr   r   r   r   r   r   r0   r*   floatTimeoutrf   rp   r   r   r,   r-   r.   <module>r      s      P P P  *  - U S J 5 7  !$*-'!N
 +, # #V
 V
r  37&* /3,0+/59)-@
@
1@
 ./@
 N#	@
 DcN+@
 $sCx.)@
 c3h(@
 eE5==012@
 "#@
 	@
 @
F  37&* /3,0+/59)-Z
Z
1Z
 ./Z
 N#	Z
 DcN+Z
 $sCx.)Z
 c3h(Z
 eE5==012Z
 "#Z
 	Z
 Z
z  37&* /3,0+/59)-]
]
1]
 ./]
 N#	]
 DcN+]
 $sCx.)]
 c3h(]
 eE5==012]
 "#]
 	]
 ]
@  37&* /3,0+/59)-O
O
1O
 ./O
 N#	O
 DcN+O
 $sCx.)O
 c3h(O
 eE5==012O
 "#O
 c]O
 O
r-   