
    Nga                        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dS )    )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dS )PremAIEmbeddingszPrem's Embedding APIsint
project_idNzOptional[SecretStr]premai_api_keystrmodelFboolshow_progress_bar   max_retriesr   clientvaluesr   returnc                    	 ddl m} n"# t          $ r}t          d          |d}~ww xY w	 t          |dd          } ||          |d<   n"# t          $ r}t          d	          |d}~ww xY w|S )
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)clsr   r   errorr   s        a/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/premai.pyvalidate_environmentsz&PremAIEmbeddings.validate_environments#   s    	####### 	 	 	?  		X1(*: N  $tN;;;F8 	X 	X 	XKLLRWW	Xs'   	 
(#( A 
A,A''A,textList[float]c                `    t          | | j        | j        |          }|j        d         j        S )zEmbed query textr   r   inputr   )embed_with_retryr   r   data	embedding)selfr*   
embeddingss      r(   embed_queryzPremAIEmbeddings.embed_query7   s5    %
td
 
 

 q!++    texts	List[str]List[List[float]]c                ^    t          | | j        | j        |          j        }d |D             S )Nr-   c                    g | ]	}|j         
S  )r1   ).0r1   s     r(   
<listcomp>z4PremAIEmbeddings.embed_documents.<locals>.<listcomp>C   s    @@@		#@@@r5   )r/   r   r   r0   )r2   r6   r3   s      r(   embed_documentsz PremAIEmbeddings.embed_documents>   s@    %
te
 
 

 	 A@Z@@@@r5   )r   r   r   r   )r*   r   r   r+   )r6   r7   r   r8   )__name__
__module____qualname____doc____annotations__r   r   r   r   r)   r4   r>   r;   r5   r(   r   r      s         OOOL +/N....GJJJ,#####JK,KKK   X&, , , ,A A A A A Ar5   r   r   r   embedderr   r   r   Callable[[Any], Any]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        j        j        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   )rE   r   r"   errors	decorators        r(   create_prem_retry_decoratorrf   F   s      	3N$2+>-C3N/F0H4P.D&50I&6F ,  I r5   r   r   r   r.   Union[str, List[str]]r   c                d    t          | | j                  }|dd            } || |||          S )z+Using tenacity for retry in embedding callsrD   rE   r   r   r   r   r   r.   rg   r   r   c                J    | j         j                            |||          }|S )Nr   r   r.   )r   r3   create)rE   r   r   r.   embedding_responses        r(   _embed_with_retryz+embed_with_retry.<locals>._embed_with_retryv   s3     &_7>>!e ? 
 
 "!r5   rj   )
rE   r   r   r   r   r   r.   rg   r   r   )rf   r   )rE   r   r   r.   retry_decoratorrm   s         r(   r/   r/   k   s]     2h2  O 	" 	" 	" _	" X*EQVWWWWr5   )rE   r   r   r   r   rF   )
rE   r   r   r   r   r   r.   rg   r   r   )
__future__r   loggingtypingr   r   r   r   r   r	   langchain_core.embeddingsr
   #langchain_core.language_models.llmsr   langchain_core.utilsr   r   pydanticr   r   	getLoggerr?   loggerr   rf   r/   r;   r5   r(   <module>rx      s3   " " " " " "  = = = = = = = = = = = = = = = = 0 0 0 0 0 0 K K K K K K ? ? ? ? ? ? ? ? ) ) ) ) ) ) ) )		8	$	$5A 5A 5A 5A 5Ay* 5A 5A 5Av " " " " " "JX X X X X Xr5   