o
    ưiGR                     @   s"  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rkd dl!m"Z"m#Z#m$Z$m%Z% neZ"eZ#eZ$eZ%e Z&G dd deZ'G d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j+f  de
e) def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j+f  de
e) def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j+f  de
e) def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j+f  de
e) de	e fd!d"Z/dS )$    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                   @   s   e Zd ZU dZed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< dS )GenerateContentSetupResultz<Internal Type - Result of setting up a generate content callT)Z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)   r)   P/home/app/Keep/.python/lib/python3.10/site-packages/litellm/google_genai/main.pyr   *   s   
 r   c                   @   sl   e Zd ZdZe	ddedeeef fddZe			dded	e	d
e
e de
e de
e defddZdS )GenerateContentHelperz9Helper class for Google GenAI generate content operations;This is a mock response from Google GenAI generate_content.mock_responsereturnc                 C   s,   | 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   )partsZroleSTOPr   )contentZfinishReasonindexZsafetyRatings
         )ZpromptTokenCountZcandidatesTokenCountZtotalTokenCount)r/   
candidatesZusageMetadatar)   r-   r)   r)   r*   mock_generate_content_response<   s   	z4GenerateContentHelper.mock_generate_content_responseNr   contentsconfigr   toolsc              
   K   s@  | d}| dd}tdi |}| dds%|jr%t|jtr%tdtj| ||j|j	d\} }}	}
|j
du r<||_
tj| t|d}|du rb|du rRtd	t| |i dt|p[i |||d
S |j|pgi | d}| dpt| d}|j| ||||d}|du rtd	|j| t|d|i|d t| |||||||d
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   r:   r<   r   rB   )r   Zoptional_paramsr   r   r)   )getr   r-   
isinstancer'   
ValueErrorlitellmget_llm_providerr>   r?   r   r   Z1get_provider_google_genai_generate_content_configZLlmProvidersr   dictZ$map_generate_content_optional_paramsZ"transform_generate_content_requestZupdate_environment_variables)r   r:   r;   r   r<   kwargsr    r!   r   Zdynamic_api_keyZdynamic_api_baser   r   rB   r   r)   r)   r*   setup_generate_content_callR   s   



	z1GenerateContentHelper.setup_generate_content_call)r,   )NNN)r"   r#   r$   r%   staticmethodr'   r   r   r9   r   r   r   r   r   rJ   r)   r)   r)   r*   r+   9   s4    
r+   r   r:   r;   r<   extra_headersextra_query
extra_bodytimeoutr   r.   c	                    s   t  }
z[t }d|	d< d|	v r|du r|	d}|du r)tj| |d\}}}}ttf| ||||||||d	|	}t	 }t|j
|}|d|I dH }t|r[|I dH }|W S |}|W S  tyu } z
tj| |||
|	dd}~ww )z4
    Async: Generate content using Google GenAI
    Tagenerate_contentgenerationConfigN)r   r   )	r   r:   r;   rL   rM   rN   rO   r   r<   r   r   Zoriginal_exceptionZcompletion_kwargsextra_kwargs)localsasyncioget_event_looppoprF   rG   r   generate_contentcontextvarscopy_contextrunrun_in_executoriscoroutine	Exceptionexception_type)r   r:   r;   r<   rL   rM   rN   rO   r   rI   
local_varsloop_funcctxZfunc_with_contextZinit_responseresponseer)   r)   r*   rP      sZ   


rP   c	                 K   s6  t  }
z|	dd}d|	v r|du r|	d}tdi |	}|jr/t|jtr/tj|jdW S tjd| ||||d|	}|		dpF|		d}|j
du r_tjd| ||j|||j|d	|	W S tj|j|||j
|j|j|j|j|||ptt||		d
|		di |d}|W S  ty } z
tj| |||
|	dd}~ww )z-
    Generate content using Google GenAI
    rP   FrQ   Nr8   r   r:   r;   r   r<   rA   rB   )r   r:   r;   r<   	_is_asyncr   rL   r   litellm_metadata)r   r:   r<   r   r   r   r   logging_objrL   rN   rO   rh   r   ri   rB   rR   r)   )rT   rW   r   r-   rD   r'   r+   r9   rJ   rC   r   r   generate_content_handlerr   r   base_llm_http_handlerr   r   r    r   r^   rF   r_   )r   r:   r;   r<   rL   rM   rN   rO   r   rI   r`   rh   r   setup_resultrB   re   rf   r)   r)   r*   rX     s|   



rX   c	              
      s  t  }
zd|	d< d|	v r|du r|	d}|du r)tj| |
ddd\}}}}tjd| ||||d|	}|	dp@|	d	}|jdu rfd
|	v rP|	d
d tj	d| ||j
|j|d|d|	I dH W S tjdi d|jd|d|jd|j
d|d|jd|jd|jd|d|d|ptddd|	dd
dd|	di d	|I dH W S ddd|	dd
dd|	di d	|I dH W S  ty } z
tj| |||
|	dd}~ww )zL
    Async: Generate content using Google GenAI with streaming response
    Tagenerate_content_streamrQ   Nbase_url)r   r>   rg   rA   rB   r=   )r   r:   r;   r   r<   r=   rL   r   r:   r   r   r<   r   r   rj   rL   rN   rO   rh   r   ri   rR   r)   )rT   rW   rF   rG   rC   r+   rJ   r   r   Zasync_generate_content_handlerr   r   rl   rk   r   r   r    r   r^   r_   )r   r:   r;   r<   rL   rM   rN   rO   r   rI   r`   rb   rm   rB   rf   r)   r)   r*   rn   o  s   




	


rn   c	                 K   s  t  }
zg|	dd}d|	v r|du r|	d}tjd| ||||d|	}|jdu rGd|	v r4|	dd tjd| ||j||jd|d|	W S t	j|j
||j|j||j|j|j|||p\t||	d	d|	d
i dW S  ty } z
tj| |||
|	dd}~ww )zE
    Generate content using Google GenAI with streaming response
    rn   FrQ   Nrg   r=   T)r   r:   r;   rh   r   r=   rL   r   ri   )r   r:   r   r   r<   r   r   rj   rL   rN   rO   rh   r   r=   ri   rR   r)   )rT   rW   r+   rJ   r   r   rk   r   r   rl   r   r   r    r   rC   r^   rF   r_   )r   r:   r;   r<   rL   rM   rN   rO   r   rI   r`   rh   rm   rf   r)   r)   r*   generate_content_stream  sn   



rp   )NNNNNNN)0rU   rY   	functoolsr   typingr   r   r   r   r   r   r	   ZhttpxZpydanticr
   r   rF   Zlitellm.constantsr   Z%litellm.google_genai.adapters.handlerr   Z*litellm.litellm_core_utils.litellm_loggingr   r(   Z1litellm.llms.base_llm.google_genai.transformationr   Z*litellm.llms.custom_httpx.llm_http_handlerr   Zlitellm.types.routerr   Zlitellm.utilsr   r   Zlitellm.types.google_genai.mainr   r   r   r   rl   r   r+   r'   floatTimeoutrP   rX   rn   rp   r)   r)   r)   r*   <module>   s   $ 	
C	
[	
^	
