
    7|h                     `    d dl mZmZmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZ  G d dee      Zy)    )AnyListOptional)
Embeddings)	BaseModel
ConfigDictFieldmodel_validator)Selfc                   D   e Zd ZU dZdZeed<    ed      Ze	ed<    edd	      Z
eed<   	  ed
d	      Zeed<   	  ed
d	      Zeed<   	  edd	      Zeed<   	  edd	      Zeed<   	  edd	      Zeed<   	  edd	      Z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   ed<   	  edd	      Zeed<   	  edd	      Zee	   ed<   	  edd      Z ed      defd       Zdee	   deee      fd Z d!e	dee   fd"Z!y)#LlamaCppEmbeddingsa  llama.cpp embedding models.

    To use, you should have the llama-cpp-python library installed, and provide the
    path to the Llama model as a named parameter to the constructor.
    Check out: https://github.com/abetlen/llama-cpp-python

    Example:
        .. code-block:: python

            from langchain_community.embeddings import LlamaCppEmbeddings
            llama = LlamaCppEmbeddings(model_path="/path/to/model.bin")
    Nclient )default
model_pathi   n_ctx)aliasn_partsseedFf16_kv
logits_all
vocab_only	use_mlock	n_threadsn_batchn_gpu_layersTverbosedeviceforbid )extraprotected_namespacesafter)modereturnc                 N   | j                   }g d}|D ci c]  }|t        | |       }}| j                  | j                  |d<   | j                  s	 ddlm}  ||fddi|| _        | S | S c c}w # t        $ r t        d      t        $ r}t        d	| d
|       d}~ww xY w)z4Validate that llama-cpp-python library is installed.)r   r   r   r   r   r   r   r   r   r   r   Nr   r   )Llama	embeddingTzCould not import llama-cpp-python library. Please install the llama-cpp-python library to use this embedding model: pip install llama-cpp-pythonz&Could not load Llama model from path: z. Received error )	r   getattrr   r   	llama_cppr(   ImportError	Exception
ValueError)selfr   model_param_nameskmodel_paramsr(   es          f/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/llamacpp.pyvalidate_environmentz'LlamaCppEmbeddings.validate_environmentE   s     __

 6GG74++GG(+/+<+<L({{+#JO$O,O t- H  !M 
   <ZL I&&'S* s   A-A2 2B$BB$textsc                    | j                   j                  |      }g }|d   D ]w  }	 t        |d   d   t              r3|d   D ]*  }|j	                  t        t        t        |                   , n+|j	                  t        t        t        |d                      y |S # t        t        f$ r. |j	                  t        t        t        |d                      Y w xY w)zEmbed a list of documents using the Llama model.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        datar)   r   )	r   create_embedding
isinstancelistappendmapfloat
IndexError	TypeError)r/   r6   
embeddingsfinal_embeddingsr3   r8   s         r4   embed_documentsz"LlamaCppEmbeddings.embed_documentsn   s     [[11%8
F# 	JAJanQ/6 !+ H(//S5E0FGH %++DUAkN1K,LM	J   	* J ''S+-G(HIJs   A4B:CCtextc                     | j                   j                  |      }|r?t        |t              r/t        |d   t              rt        t	        t
        |d               S t        t	        t
        |            S )zEmbed a query using the Llama model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   )r   embedr:   r;   r=   r>   )r/   rD   r)   s      r4   embed_queryzLlamaCppEmbeddings.embed_query   sZ     KK%%d+	It4IaLRV9WE9Q<011E9-..    )"__name__
__module____qualname____doc__r   r   __annotations__r	   r   strr   intr   r   r   boolr   r   r   r   r   r   r   r   r   r   model_configr
   r   r5   r   r>   rC   rG   r!   rH   r4   r   r      s    FCB'J's'*E3*9-GS-? b'D#'-h/FD/1U,7J7@U,7J7/E5It5,$T=Ix}=/ #3i8GXc]8/ #(N"CL(3-CF$i0GT0)!$h7FHSM72L
 '"&d & #&P T#Y  4U3D  ,/ /U /rH   r   N)typingr   r   r   langchain_core.embeddingsr   pydanticr   r   r	   r
   typing_extensionsr   r   r!   rH   r4   <module>rV      s'    & & 0 B B "I/J I/rH   