
    7|h8                         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y)    N)AnyDictListOptional)
Embeddings)	BaseModel
ConfigDictFieldmodel_validatorc                   v   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y)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} |j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d	      }|j                  d
      }	|j                  d      }
 ||||t	        |      |	|
||      |d<   |S # t        $ r t        d      w xY w)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              f/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/clarifai.pyvalidate_environmentz'ClarifaiEmbeddings.validate_environment0   s    	3 **Y'H%::j)!::&89JJ{+	::j)jj

7#"23	
w 3  	A 	s   B/ /Ctextsc           
      l   ddl m} |j                  | j                  j                        }d}g }	 t        dt        |      |      D ]  }||||z    }t        |      D 	cg c]!  \  }}	|j                  t        |      |	      # }
}}	| j                  j                  |
      }|j                  |j                  D cg c].  }t        |j                  j                  d   j                         0 c}        	 |S c c}	}w c c}w # t"        $ r#}t$        j'                  d|        Y d}~|S d}~ww xY w)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    )input_idraw_textPredict failed, exception: N)clarifai.client.inputr0   from_auth_helperr   auth_helperrangelen	enumerateget_text_inputstrpredictextendoutputslistdata
embeddingsvector	Exceptionloggererror)selfr.   r0   	input_obj
batch_sizerB   ibatchr#   inpinput_batchpredict_responseoutputes                 r,   embed_documentsz"ClarifaiEmbeddings.embed_documentsS   s6    	1++DJJ,B,BC	

	<1c%j*5 a!j.1 $-U#3C ,,c"g,L  $(::#5#5k#B !! '7&>&>" V[[33A6==>"   	<LL6qc:;;	<s5   /D  &C<7D =3D
0	D <D 	D3D..D3textc                 P   	 | j                   j                  t        |d      d      }|j                  D cg c].  }t	        |j
                  j                  d   j                        0 }}|d   S c c}w # t        $ r&}t        j                  d|        Y d}~d   S d}~ww xY w)zCall out to Clarifai's embedding models.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        zutf-8rR   )
input_typer   r4   N)r   predict_by_bytesbytesr?   r@   rA   rB   rC   rD   rE   rF   )rG   rR   rN   oprB   rP   s         r,   embed_queryzClarifaiEmbeddings.embed_queryv   s    		<#zz::dG$  ;   >N=U=U79RWW''*112J  !}  	<LL6qc:;;!}	<s(   5A6 3A1*A6 1A6 6	B%?B  B%)__name__
__module____qualname____doc__r   r   r<   __annotations__r   r   r   r   r
   r   r   r   r   r   r	   model_configr   classmethodr   r-   r   floatrQ   rX   r       r,   r   r   
   s   $  $Ix}#"Hhsm"&*hsm*" FHSM )!GXc]!"tT:C#:0 t<E8C=<(tT2E32.Hc.H2FL(#$ 3   $B!T#Y !4U3D !F U ra   r   )loggingtypingr   r   r   r   langchain_core.embeddingsr   pydanticr   r	   r
   r   	getLoggerrY   rE   r   r   ra   r,   <module>rg      s9     , , 0 B B			8	$AJ Ara   