
    hJ                        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$ n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e(ef      de
ee(ef      de
ee(ef      de
ee)ejT                  f      de
e(   defd       Z+e 	 	 	 	 	 	 dde(d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jT                  f      de
e(   defd       Z,e 	 	 	 	 	 	 dde(d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jT                  f      de
e(   defd       Z-e 	 	 	 	 	 	 dde(d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jT                  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GenerateContentResponsec                       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     U/var/www/Befach/backend/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                   v    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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)r3   
candidatesusageMetadatar+   r0   s    r-   mock_generate_content_responsez4GenerateContentHelper.mock_generate_content_response9   sF     " ,2=*A)BGT$*%'	 %'(*#%
 	
r,   Nr   contentsconfigr   streamc           
         |j                  d      }|j                  dd      }t        di |}|s1|j                  r%t        |j                  t              rt        d      t        j                  | ||j                  |j                        \  } }}	}
t        j                  | t        j                  |            }|-|t        d      t        | |i dt        |xs i       |||      S |j                  |xs i | 	      }|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
            stream: Whether this is a streaming call
            local_vars: Local variables from the calling function
            **kwargs: Additional keyword arguments

        Returns:
            GenerateContentSetupResult containing all setup information
        r"   r#   Nz)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   )r   rE   r    )r   optional_paramsr!   r   r+   )getr   r0   
isinstancer)   
ValueErrorlitellmget_llm_providerrI   rJ   r   1get_provider_google_genai_generate_content_configLlmProvidersr   dict$map_generate_content_optional_params"transform_generate_content_requestupdate_environment_variables)r   rE   rF   r   rG   kwargsr"   r#   r!   dynamic_api_keydynamic_api_baser   r    r   s                 r-   setup_generate_content_callz1GenerateContentHelper.setup_generate_content_callO   s   0 <B::!<
 *04Et)L .77 ,,>77=HII $$ 3#,,"**	
	
 "SS))*=>
 	) ,3 #* !PQQ-$715-1&,B-?-$7 /	 	  -QQ-3\r R  	% -OO!-I P  	 &LMM88 !=>!? !4 	9 	
 * 3%-M)E) 3+	
 		
r,   )z;This is a mock response from Google GenAI generate_content.)NNF)r$   r%   r&   r'   staticmethodr)   r   r   rD   r   r	   r   boolr   r[   r+   r,   r-   r/   r/   6   s    CZ

	c3h
 
*  7;-1s
s
5s
 23s
 &c]	s

 s
 
$s
 s
r,   r/   r   rE   rF   extra_headersextra_query
extra_bodytimeoutr   r1   c                   K   t               }		 t        j                         }
d|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_contentN)r   r   )r   rE   rF   r^   r_   r`   ra   r   r   r   original_exceptioncompletion_kwargsextra_kwargs)localsasyncioget_event_looprP   rQ   r   generate_contentcontextvarscopy_contextrunrun_in_executoriscoroutine	Exceptionexception_type)r   rE   rF   r^   r_   r`   ra   r   rX   
local_varsloop_funcctxfunc_with_contextinit_responseresponsees                     r-   rc   rc      s*    $ J)
%%'&*"# &+2+C+C$7,(A"Aq
 
'#! 3
 
 &&(#CGGT2"2249JKK}-**H  %H L +
  
$$ 3 (
 	

sY   C6BC CC <C	=C C6C C6C 	C 	C3C..C33C6c                    t               }		 |j                  dd      du }
t        di |}|j                  r:t	        |j                  t
              r t        j                  |j                        S t        j                  d| |||dd|}|j                  0t        j                  d| ||j                  d|
|j                  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)z-
    Generate content using Google GenAI
    rc   FTrC   r   rE   rF   r   rG   Nr   rE   rF   rG   	_is_asyncr!   r   litellm_metadatar   rE   r   r    r   r!   logging_objr^   r`   ra   r   r   rG   r   rd   r+   )rh   popr   r0   rN   r)   r/   rD   r[   r   r   generate_content_handlerr    r!   base_llm_http_handlerr   r   r"   r   rM   rq   rP   rr   )r   rE   rF   r^   r_   r`   ra   r   rX   rs   r   r!   setup_resultrz   r{   s                  r-   rk   rk     s   $ J=
JJ2E:dB	 .77''J((#-
 )GG,:: H  
 -HH 
 3
 
 88@5NN !#@@#+::   )AA$$-9-Z-Z)5)R)R , @ @'66$88'!.::h'#ZZ(:B? B 
"  
$$ 3 (
 	

s&   A$E 1AE BE 	E8E33E8c                   K   t               }		 d|d<   |,t        j                  | |	j                  dd            \  }
}}
}
t	        j
                  di | |||dd|}|j                  7t        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_streamNbase_url)r   rI   r}   )r   rE   rF   r!   rG   r   r   r   rd   r+   )rh   rP   rQ   rM   r/   r[   r   r   async_generate_content_handlerr    r!   r   r   r   r   r"   r   rq   rr   )r   rE   rF   r^   r_   r`   ra   r   rX   rs   ru   r   r{   s                r-   r   r   X  s    $ J=
-1)* &+2+C+CjnnZ&F,(A"Aq
 -HH 	
$ ': 	
 88@ 9WW %'DD#/#>#>  	 +CC$$-9-Z-Z)5)R)R , @ @'66$88'!.::h'#ZZ(:B? D 
 
 	

"  
$$ 3 (
 	

sZ   EBD3 D/D3  E!B	D3 *D1+D3 .E/D3 1D3 3	E<EEEc                 L   t               }		 |j                  dd      }
t        j                  d| |||dd|}|j                  0t        j                  d| ||j                  d|
|j                  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   FTr}   Nr~   r   r   r   rd   r+   )rh   r   r/   r[   r   r   r   r    r!   r   r   r   r"   r   rM   rq   rP   rr   )r   rE   rF   r^   r_   r`   ra   r   rX   rs   r   r   r{   s                r-   generate_content_streamr     sU   $ J4
JJ95A	 -HH 
 3
 
 88@5NN !#@@#+::   %==$$-9-Z-Z)5)R)R , @ @'66$88'!.::h'#ZZ(:B? > 
 	
"  
$$ 3 (
 	

s   A(C; 5BC; ;	D#DD#)NNNNNN)/ri   rl   	functoolsr   typingr   r   r   r   r   r	   r
   httpxpydanticr   r   rP   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/   r)   floatTimeoutrc   rk   r   r   r+   r,   r-   <module>r      s      P P P  *  - U S J 5 7  !$*-'! +, # #M
 M
`  37 /3,0+/59)-;
;
1;
 ./;
 DcN+;
 $sCx.);
 c3h(;
 eE5==012;
 "#;
 	;
 ;
|  37 /3,0+/59)-O
O
1O
 ./O
 DcN+O
 $sCx.)O
 c3h(O
 eE5==012O
 "#O
 	O
 O
d  37 /3,0+/59)-O
O
1O
 ./O
 DcN+O
 $sCx.)O
 c3h(O
 eE5==012O
 "#O
 	O
 O
d  37 /3,0+/59)-F
F
1F
 ./F
 DcN+F
 $sCx.)F
 c3h(F
 eE5==012F
 "#F
 c]F
 F
r,   