
    7|ha                        d dl mZ d dlZd dlmZmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZmZ  ej(                  e      Z G d d	ee      Zd
d	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZy)    )annotationsN)AnyCallableDictListOptionalUnion)
Embeddings)create_base_retry_decorator)get_from_dict_or_envpre_init)	BaseModel	SecretStrc                      e Zd ZU dZded<   	 dZded<   	 ded<   	 d	Zd
ed<   	 dZded<   	 ded<   edd       Z	ddZ
ddZy)PremAIEmbeddingszPrem's Embedding APIsint
project_idNzOptional[SecretStr]premai_api_keystrmodelFboolshow_progress_bar   max_retriesr   clientc                    	 ddl m} 	 t        |dd      } ||      |d<   |S # t        $ r}t        d      |d}~ww xY w# t        $ r}t        d	      |d}~ww xY w)
zFValidate that the package is installed and that the API token is validr   )PremzQCould not import Prem Python package.Please install it with: `pip install premai`Nr   PREMAI_API_KEY)api_keyr   z,Your API Key is incorrect. Please try again.)premair   ImportErrorr   	Exception
ValueError)clsvaluesr   errorr   s        d/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/premai.pyvalidate_environmentsz&PremAIEmbeddings.validate_environments#   s    	#	X1(*:N  $N;F8   	? 	  	XKLRWW	Xs'   $ A 	>9>	A
AAc                z    t        | | j                  | j                  |      }|j                  d   j                  S )zEmbed query textr   r   inputr   embed_with_retryr   r   data	embedding)selftext
embeddingss      r'   embed_queryzPremAIEmbeddings.embed_query7   s4    %

td

 q!+++    c                    t        | | j                  | j                  |      j                  }|D cg c]  }|j                   c}S c c}w )Nr*   r,   )r0   textsr2   r/   s       r'   embed_documentsz PremAIEmbeddings.embed_documents>   sB    %

te

$ 	 6@@		##@@@s   A)r%   r   returnr   )r1   r   r8   zList[float])r6   z	List[str]r8   zList[List[float]])__name__
__module____qualname____doc____annotations__r   r   r   r   r(   r3   r7    r4   r'   r   r      se    OL +/N'.GJ,#t#JK,K &,Ar4   r   r   r   c                  ddl }|j                  j                  j                  |j                  j                  j
                  |j                  j                  j                  |j                  j                  j                  |j                  j                  j                  |j                  j                  j                  |j                  j                  j                  |j                  j                   j"                  |j                  j$                  j&                  |j                  j(                  j*                  |j                  j,                  j.                  |j                  j0                  j2                  g}t5        ||d      }|S )zCreate a retry decorator for PremAIEmbeddings.

    Args:
        embedder (PremAIEmbeddings): The PremAIEmbeddings instance
        max_retries (int): The maximum number of retries

    Returns:
        Callable[[Any], Any]: The retry decorator
    r   N)error_typesr   run_manager)premai.modelsmodelsapi_response_validation_errorAPIResponseValidationErrorconflict_errorConflictErrormodel_not_found_errorModelNotFoundErrorpermission_denied_errorPermissionDeniedErrorprovider_api_connection_errorProviderAPIConnectionErrorprovider_api_status_errorProviderAPIStatusErrorprovider_api_timeout_errorProviderAPITimeoutErrorprovider_internal_server_errorProviderInternalServerErrorprovider_not_found_errorProviderNotFoundErrorrate_limit_errorRateLimitErrorunprocessable_entity_errorUnprocessableEntityErrorvalidation_errorValidationErrorr   )embedderr   r    errors	decorators        r'   create_prem_retry_decoratorr`   F   s     	33NN$$22++>>--CC33NN//FF00HH44PP..DD&&5500II&&66F ,I r4   c                n    t        | | j                        }|	 	 	 	 	 	 	 	 	 	 dd       } || |||      S )z+Using tenacity for retry in embedding callsr?   c                V    | j                   j                  j                  |||      }|S )Nr   r   r+   )r   r2   create)r]   r   r   r+   embedding_responses        r'   _embed_with_retryz+embed_with_retry.<locals>._embed_with_retryv   s3     &__77>>!e ? 
 "!r4   rc   )
r]   r   r   r   r   r   r+   Union[str, List[str]]r8   r   )r`   r   )r]   r   r   r+   retry_decoratorrf   s         r'   r-   r-   k   so     2h22O 	""	"	" 	" %		"
 
	" 	" X*EQVWWr4   )r]   r   r   r   r8   zCallable[[Any], Any])
r]   r   r   r   r   r   r+   rg   r8   r   )
__future__r   loggingtypingr   r   r   r   r   r	   langchain_core.embeddingsr
   #langchain_core.language_models.llmsr   langchain_core.utilsr   r   pydanticr   r   	getLoggerr9   loggerr   r`   r-   r>   r4   r'   <module>rr      s    "  = = 0 K ? )			8	$5Ay* 5Av "" " 	"JXXX X !	X
 	Xr4   