o
    ȳg                     @   s&  d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
mZ ddlmZmZ er:ddlmZ ddlmZ ddlmZ d	d
ddededeee
ef  deegef fddZd$dedd
fddZ	
	
	
d%dee dee ded dd
fddZd&dee ddfddZd&d edee dd!fd"d#Zd
S )'zUtilities to init Vertex AI.    )metadata)TYPE_CHECKINGAnyCallableOptionalUnion)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseLLMcreate_base_retry_decorator
ClientInfo)CredentialsImage   N)max_retriesrun_managerllmr   r   returnc                C   sF   ddl }|jjj|jjj|jjj|jjj|jjjg}t|||d}|S )z0Create a retry decorator for Vertex / Palm LLMs.r   N)error_typesr   r   )	google.api_coreapi_core
exceptionsResourceExhaustedServiceUnavailableAbortedDeadlineExceededGoogleAPIErrorr   )r   r   r   googleerrors	decorator r"   b/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/langchain_community/utilities/vertexai.pycreate_retry_decorator   s   	r$   1.38.0minimum_expected_versionc                 C   s   t d|  )zRaise ImportError related to Vertex SDK being not available.

    Args:
        minimum_expected_version: The lowest expected version of the SDK.
    Raises:
        ImportError: an ImportError that mentions a required version of the SDK.
    zePlease, install or upgrade the google-cloud-aiplatform library: pip install google-cloud-aiplatform>=)ImportError)r&   r"   r"   r#   raise_vertex_import_error*   s
   r(   projectlocationcredentialsr   c                 C   s:   zddl }W n ty   t  Y nw |j| ||d dS )a  Init Vertex AI.

    Args:
        project: The default GCP project to use when making Vertex API calls.
        location: The default location to use when making API calls.
        credentials: The default custom
            credentials to use when making API calls. If not provided credentials
            will be ascertained from the environment.

    Raises:
        ImportError: If importing vertexai SDK did not succeed.
    r   N)r)   r*   r+   )vertexair'   r(   init)r)   r*   r+   r,   r"   r"   r#   init_vertexai8   s   

r.   moduler   c              
   C   sf   zddl m} W n ty } ztd|d}~ww td}| r(| d|  n|}||d| dS )	zReturn a custom user agent header.

    Args:
        module (Optional[str]):
            Optional. The module for a custom user agent header.
    Returns:
        google.api_core.gapic_v1.client_info.ClientInfo
    r   r   zPCould not import ClientInfo. Please, install it with pip install google-api-coreN	langchain-z
langchain/)client_library_version
user_agent)$google.api_core.gapic_v1.client_infor   r'   r   version)r/   r   exclangchain_versionr2   r"   r"   r#   get_client_infoU   s"   	
r8   pathr   c                 C   s   zddl m} W n ty   tdw ddlm} |j|d}| d}t|j|d d	|dd	 d
}t
|dkrEtd|  d||d  S )z(Load an image from Google Cloud Storage.r   )storagez5Could not import google-cloud-storage python package.r   )r)   /      N)prefixr   z"Found more than one candidate for !)google.cloudr:   r'   "vertexai.preview.generative_modelsr   Clientsplitlist
list_blobsjoinlen
ValueError
from_bytesdownload_as_bytes)r9   r)   r:   r   
gcs_clientpiecesblobsr"   r"   r#   load_image_from_gcsp   s   
$rN   )r%   )NNN)N)__doc__	importlibr   typingr   r   r   r   r   langchain_core.callbacksr   r	   #langchain_core.language_models.llmsr
   r   r4   r   google.auth.credentialsr   rA   r   intr$   strr(   r.   r8   rN   r"   r"   r"   r#   <module>   sJ    


 