
    jN                        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     r/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/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           
         |j                  d      }|j                  dd      }t        di |}|j                  dd      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
            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   )r   rF   rH   r!   )r   optional_paramsr"   r   r,   )getr   r1   
isinstancer*   
ValueErrorlitellmget_llm_providerrK   rL   r   1get_provider_google_genai_generate_content_configLlmProvidersr   dict$map_generate_content_optional_params"transform_generate_content_requestupdate_environment_variables)r   rF   rG   r   rH   kwargsr#   r$   r"   dynamic_api_keydynamic_api_baser    r!   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#,,"**	
	
 "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.)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*.s
s
5s
 23s
 &c]	s

 's
 
$s
 s
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   r_   r`   ra   rb   r   rH   r   r   original_exceptioncompletion_kwargsextra_kwargs)localsasyncioget_event_looppoprR   rS   r   generate_contentcontextvarscopy_contextrunrun_in_executoriscoroutine	Exceptionexception_type)r   rF   rG   rH   r_   r`   ra   rb   r   rZ   
local_varsloop_funcctxfunc_with_contextinit_responseresponsees                      r.   rd   rd      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	                     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                  0t        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
    rd   Fre   NrD   r   rF   rG   r   rH   )r   rF   rG   rH   	_is_asyncr"   r   litellm_metadata)r   rF   rH   r    r!   r   r"   logging_objr_   ra   rb   r   r   r   rf   r,   )rj   rm   r   r1   rP   r*   r0   rE   r]   r    r   generate_content_handlerr!   r"   base_llm_http_handlerr   r   r#   r   rO   rt   rR   ru   )r   rF   rG   rH   r_   r`   ra   rb   r   rZ   rv   r   r"   setup_resultr}   r~   s                   r.   rn   rn     s   & J@
JJ2E:	 'FNZZ 23F-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&   A9E% AE% BE% %	F.FFc	                   K   t               }
	 d|	d<   d|	v r||	j                  d      }|,t        j                  | |
j	                  dd            \  }}}}t        j                  d| ||||d|	}|j                  8t        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_streamre   Nbase_url)r   rK   r   )r   rF   rG   r"   rH   rJ   r   r   r   rF   r    r!   rH   r   r"   r   r_   ra   rb   r   r   rJ   r   rf   r,   )rj   rm   rR   rS   rO   r0   r]   r    r   async_generate_content_handlerr!   r"   r   r   r   r   r#   r   rt   ru   )r   rF   rG   rH   r_   r`   ra   rb   r   rZ   rv   rx   r   r~   s                 r.   r   r   d  s    & J@
-1)* 'FNZZ 23F&+2+C+CjnnZ&F,(A"Aq
 -HH 
 3
 
 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   E5B$E
 2E3E
 6E57B
E
 EE
 E5E
 E
 
	E2E--E22E5c	                 |   t               }
	 |	j                  dd      }d|	v r||	j                  d      }t        j                  d| ||||d|	}|j                  0t        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   Fre   Nr   T)r   rF   rG   r   r"   rJ   r   r   r   rf   r,   )rj   rm   r0   r]   r    r   r   r!   r"   r   r   r   r#   r   rO   rt   rR   ru   )r   rF   rG   rH   r_   r`   ra   rb   r   rZ   rv   r   r   r~   s                 r.   generate_content_streamr     ss   & J8
JJ95A	 'FNZZ 23F,HH 
 3
 
 88@5NN !#@@#+::   %==$$-9-Z-Z)5)R)R , @ @'66$88'!.::h'#ZZ(:B? > 
 	
$  
$$ 3 (
 	

s   A?D BD 	D;D66D;)NNNNNNN)0rk   ro   	functoolsr   typingr   r   r   r   r   r	   r
   httpxpydanticr   r   rR   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Timeoutrd   rn   r   r   r,   r-   r.   <module>r      s      P P P  *  - U S J 5 7  !$*-'!N
 +, # #M
 M
`  37&* /3,0+/59)-@
@
1@
 ./@
 N#	@
 DcN+@
 $sCx.)@
 c3h(@
 eE5==012@
 "#@
 	@
 @
F  37&* /3,0+/59)-S
S
1S
 ./S
 N#	S
 DcN+S
 $sCx.)S
 c3h(S
 eE5==012S
 "#S
 	S
 S
l  37&* /3,0+/59)-S
S
1S
 ./S
 N#	S
 DcN+S
 $sCx.)S
 c3h(S
 eE5==012S
 "#S
 	S
 S
l  37&* /3,0+/59)-K
K
1K
 ./K
 N#	K
 DcN+K
 $sCx.)K
 c3h(K
 eE5==012K
 "#K
 c]K
 K
r-   