a
    bgU                     @   sZ   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 deeZdS )    )AnyListOptional)
Embeddings)	BaseModel
ConfigDictFieldmodel_validator)Selfc                   @   s  e Zd ZU dZdZeed< eddZe	ed< eddd	Z
eed< ed
dd	Zeed< ed
dd	Zeed< eddd	Zeed< eddd	Zeed< eddd	Zeed< eddd	Zeed< eddd	Zee ed< eddd	Zee ed< eddd	Zee ed< eddd	Zeed< eddd	Zee	 ed< edddZeddedddZee	 eee  d d!d"Z e	ee d#d$d%Z!dS )&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deviceZforbid )extraZprotected_namespacesafter)mode)returnc              
      s    j }g d} fdd|D } jdur4 j|d<  jsz&ddlm} ||fdd	i| _W nP tyz   td
Y n8 ty } z td| d| W Y d}~n
d}~0 0  S )z4Validate that llama-cpp-python library is installed.)r   r   r   r   r   r   r   r   r   r   r   c                    s   i | ]}|t  |qS r   )getattr).0kselfr   u/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/embeddings/llamacpp.py
<dictcomp>V       z;LlamaCppEmbeddings.validate_environment.<locals>.<dictcomp>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   r   r   Z	llama_cppr+   ImportError	Exception
ValueError)r'   r   Zmodel_param_namesZmodel_paramsr+   er   r&   r(   validate_environmentE   s(    

z'LlamaCppEmbeddings.validate_environment)textsr"   c                 C   s   | j |}g }|d D ]}zRt|d d trT|d D ]}|ttt| q8n|ttt|d  W q ttfy   |ttt|d  Y q0 q|S )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   Zcreate_embedding
isinstancelistappendmapfloat
IndexError	TypeError)r'   r2   Z
embeddingsZfinal_embeddingsr0   r3   r   r   r(   embed_documentsn   s    	 z"LlamaCppEmbeddings.embed_documents)textr"   c                 C   s:   | j |}t|ts$ttt|S ttt|d S dS )zEmbed a query using the Llama model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   N)r   Zembedr4   r5   r7   r8   )r'   r<   r,   r   r   r(   embed_query   s    	
zLlamaCppEmbeddings.embed_query)"__name__
__module____qualname____doc__r   r   __annotations__r   r   strr   intr   r   r   boolr   r   r   r   r   r   r   r   r   r   Zmodel_configr	   r
   r1   r   r8   r;   r=   r   r   r   r(   r      s.   
(r   N)typingr   r   r   Zlangchain_core.embeddingsr   Zpydanticr   r   r   r	   Ztyping_extensionsr
   r   r   r   r   r(   <module>   s   