o
    Zh                     @   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)Zerror_typesr   r   )	Zgoogle.api_coreZapi_core
exceptionsZResourceExhaustedZServiceUnavailableZAbortedZDeadlineExceededZGoogleAPIErrorr   )r   r   r   googleerrors	decorator r   ]/var/www/html/lang_env/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-coreNZ	langchain-z
langchain/)client_library_version
user_agent)$google.api_core.gapic_v1.client_infor   r   r   version)r'   r   excZlangchain_versionr)   r   r   r   get_client_infoU   s"   	
r.   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 !)Zgoogle.cloudr0   r   "vertexai.preview.generative_modelsr   ZClientsplitlistZ
list_blobsjoinlen
ValueError
from_bytesZdownload_as_bytes)r/   r!   r0   r   Z
gcs_clientpiecesZblobsr   r   r   load_image_from_gcsp   s   
$r>   )r   )NNN)N)__doc__	importlibr   typingr   r   r   r   r   Zlangchain_core.callbacksr   r	   Z#langchain_core.language_models.llmsr
   r   r+   r   Zgoogle.auth.credentialsr   r6   r   intr   strr    r&   r.   r>   r   r   r   r   <module>   sJ    


 