
    Ng8                         d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	m
Z
mZmZ  e j        e          Z G d de	e          ZdS )    N)AnyDictListOptional)
Embeddings)	BaseModel
ConfigDictFieldmodel_validatorc                      e Zd ZU dZdZee         ed<   	 dZee         ed<   	 dZ	ee         ed<   	 dZ
ee         ed<   	 dZee         ed<   	  edd	          Zee         ed
<   	  edd	          Zee         ed<   	  edd	          Zeed<   dZeed<    edd          Z ed          ededefd                        Zdee         deee                  fdZdedee         fdZdS )ClarifaiEmbeddingsa  Clarifai embedding models.

    To use, you should have the ``clarifai`` python package installed, and the
    environment variable ``CLARIFAI_PAT`` set with your personal access token or pass it
    as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import ClarifaiEmbeddings
            clarifai = ClarifaiEmbeddings(user_id=USER_ID,
                                          app_id=APP_ID,
                                          model_id=MODEL_ID)
                             (or)
            Example_URL = "https://clarifai.com/clarifai/main/models/BAAI-bge-base-en-v15"
            clarifai = ClarifaiEmbeddings(model_url=EXAMPLE_URL)
    N	model_urlmodel_idmodel_version_idapp_iduser_idT)defaultexcludepattokenmodelzhttps://api.clarifai.comapi_baseforbid )extraprotected_namespacesbefore)modevaluesreturnc           
         	 ddl m} n# t          $ r t          d          w xY w|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }|                    d	          }|                    d
          }	|                    d          }
 ||||t	          |          |	|
||          |d<   |S )zuValidate that we have all required info to access Clarifai
        platform and python package exists in environment.r   )ModelzXCould not import clarifai python package. Please install it with `pip install clarifai`.r   r   r   r   r   r   r   r   )id)urlr   r   model_versionr   r   r   base_urlr   )clarifai.client.modelr"   ImportErrorgetdict)clsr   r"   r   r   r   r   r   r   r   r   s              c/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/clarifai.pyvalidate_environmentz'ClarifaiEmbeddings.validate_environment0   s    	3333333 	 	 	A  	
 **Y''H%%::j))!::&899JJ{++	::j))jj

7##%"2333	
 	
 	
w s   	 #textsc                   
 ddl m} |                    | j        j                  
d}g }	 t          dt          |          |          D ]h}||||z            }
fdt          |          D             }| j                            |          }|	                    d |j
        D                        in4# t          $ r'}	t                              d|	            Y d}	~	nd}	~	ww xY w|S )zCall out to Clarifai's embedding models.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        r   )Inputs    c                 ^    g | ])\  }}                     t          |          |           *S ))input_idraw_text)get_text_inputstr).0r#   inp	input_objs      r,   
<listcomp>z6ClarifaiEmbeddings.embed_documents.<locals>.<listcomp>e   sF       C ,,c"gg,LL      c                 V    g | ]&}t          |j        j        d          j                  'S r   listdata
embeddingsvector)r7   outputs     r,   r:   z6ClarifaiEmbeddings.embed_documents.<locals>.<listcomp>k   s=       " V[3A6=>>  r;   Predict failed, exception: N)clarifai.client.inputr0   from_auth_helperr   auth_helperrangelen	enumeratepredictextendoutputs	Exceptionloggererror)selfr.   r0   
batch_sizerA   ibatchinput_batchpredict_responseer9   s             @r,   embed_documentsz"ClarifaiEmbeddings.embed_documentsS   sN    	100000++DJ,BCC	

	<1c%jj*55  a!j.01   #,U#3#3   $(:#5#5k#B#B !! &6&>       	< 	< 	<LL:q::;;;;;;;;	< s   BB4 4
C%>C  C%textc                     	 | j                             t          |d          d          }d |j        D             }n4# t          $ r'}t
                              d|            Y d}~nd}~ww xY w|d         S )zCall out to Clarifai's embedding models.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        zutf-8rY   )
input_typec                 V    g | ]&}t          |j        j        d          j                  'S r=   r>   )r7   ops     r,   r:   z2ClarifaiEmbeddings.embed_query.<locals>.<listcomp>   s:       79RW'*122  r;   rD   Nr   )r   predict_by_bytesbytesrM   rN   rO   rP   )rQ   rY   rV   rA   rW   s        r,   embed_queryzClarifaiEmbeddings.embed_queryv   s    		<#z::dG$$  ;     =M=U  JJ  	< 	< 	<LL:q::;;;;;;;;	< !}s   ;> 
A/A**A/)__name__
__module____qualname____doc__r   r   r6   __annotations__r   r   r   r   r
   r   r   r   r   r   r	   model_configr   classmethodr   r-   r   floatrX   r`   r   r;   r,   r   r   
   s         $  $Ix}###"Hhsm"""&*hsm***" FHSM   )!GXc]!!!"tT:::C#:::0 5t<<<E8C=<<<(tT222E3222.Hc...:H2FFFL_(###$ 3    [ $#B!T#Y !4U3D ! ! ! !F U      r;   r   )loggingtypingr   r   r   r   langchain_core.embeddingsr   pydanticr   r	   r
   r   	getLoggerra   rO   r   r   r;   r,   <module>rn      s     , , , , , , , , , , , , 0 0 0 0 0 0 B B B B B B B B B B B B		8	$	$A A A A AJ A A A A Ar;   