
    7|h                         d dl Z d dlmZmZmZmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZmZ  e j                  e      Z e	ddd	       G d
 dee             Zy)    N)AnyDictListMappingOptional)
deprecated)
Embeddings)	BaseModel
ConfigDictz0.3.1z1.0.0z!langchain_ollama.OllamaEmbeddings)sinceremovalalternative_importc                   v   e Zd ZU dZdZeed<   	 dZeed<   	 dZeed<   	 dZ	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<   	 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<   	 d
Ze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d<   	 d
Zee   ed<   	 ede ee!f   fd       Z"d
Z#ee   ed<   	 ede$ee!f   fd       Z% e&dd !      Z'd"edee   fd#Z(d"ee   deee      fd$Z)d%ee   deee      fd&Z*d'edee   fd(Z+y
))OllamaEmbeddingsa  Ollama locally runs large language models.

    To use, follow the instructions at https://ollama.ai/.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import OllamaEmbeddings
            ollama_emb = OllamaEmbeddings(
                model="llama:7b",
            )
            r1 = ollama_emb.embed_documents(
                [
                    "Alpha is the first letter of Greek alphabet",
                    "Beta is the second letter of Greek alphabet",
                ]
            )
            r2 = ollama_emb.embed_query(
                "What is the second letter of Greek alphabet"
            )

    zhttp://localhost:11434base_urlllama2modelz	passage: embed_instructionzquery: query_instructionNmirostatmirostat_etamirostat_taunum_ctxnum_gpu
num_threadrepeat_last_nrepeat_penaltytemperaturestoptfs_ztop_ktop_pFshow_progressheadersreturnc                 @   | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  ddS )z.Get the default parameters for calling Ollama.)r   r   r   r   r   r   r   r   r   r   r    r!   r"   )r   options)r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   selfs    d/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/ollama.py_default_paramsz OllamaEmbeddings._default_paramsx   s     ZZ MM $ 1 1 $ 1 1<<<<"oo!%!3!3"&"5"5#//		
 	
    model_kwargsc                 :    i d| j                   i| j                  S )zGet the identifying parameters.r   )r   r+   r(   s    r*   _identifying_paramsz$OllamaEmbeddings._identifying_params   s$     A7DJJ'@4+?+?@@r,   forbid )extraprotected_namespacesinputc                 "   ddi| j                   xs i }	 t        j                  | j                   d|| j                  |d| j
                        }|j                  dk7  r%t        d	|j                  d
|j                        	 |j                         }|d   S # t        j                  j                  $ r}t        d|       d}~ww xY w# t        j                  j                  $ r }t        d| d|j                         d}~ww xY w)zProcess a response from the API.

        Args:
            response: The response from the API.

        Returns:
            The response as a dictionary.
        zContent-Typezapplication/jsonz/api/embeddings)r   prompt)r$   jsonz$Error raised by inference endpoint: N   z)Error raised by inference API HTTP code: z, 	embeddingzError raised by inference API: z.
Response: )r$   requestspostr   r   r+   
exceptionsRequestException
ValueErrorstatus_codetextr7   JSONDecodeError)r)   r4   r$   resets         r*   _process_emb_responsez&OllamaEmbeddings._process_emb_response   s    .
||!r

	I--==/1#zzUSd>R>RSC ??c!??CHH. 	
A[>! ""33 	ICA3GHH	I ""22 	1!M#((L 	s/   >B 	C C;C		CD.D		Dc                     | j                   r	 ddlm}  ||d      }n|}|D cg c]  }| j                  |       c}S # t        $ r t        j	                  d       |}Y Aw xY wc c}w )Nr   )tqdmr   )desczgUnable to show progress bar because tqdm could not be imported. Please install with `pip install tqdm`.)r#   rG   ImportErrorloggerwarningrE   )r)   r4   rG   iter_r6   s        r*   _embedzOllamaEmbeddings._embed   sq    	%U);< EAFGv**62GG  >  Hs   A  A&  A#"A#textsc                 l    |D cg c]  }| j                    |  }}| j                  |      }|S c c}w )zEmbed documents using an Ollama deployed embedding model.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        )r   rM   )r)   rN   r@   instruction_pairs
embeddingss        r*   embed_documentsz OllamaEmbeddings.embed_documents   sE     LQQ4 6 67v>QQ[[!23
 Rs   1r@   c                 P    | j                    | }| j                  |g      d   }|S )zEmbed a query using a Ollama deployed embedding model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   )r   rM   )r)   r@   instruction_pairr9   s       r*   embed_queryzOllamaEmbeddings.embed_query   s7     #445dV<KK!1 23A6	r,   ),__name__
__module____qualname____doc__r   str__annotations__r   r   r   r   r   intr   floatr   r   r   r   r   r   r   r   r   r    r!   r"   r#   boolr$   dictpropertyr   r   r+   r-   r   r/   r   model_configrE   rM   rR   rU   r1   r,   r*   r   r      sP   . -Hc,-E3(s(.&s&."Hhsm"B %)L(5/(5
 %)L(5/(% "GXc]!$ "GXc]!+ !%J$N
 $(M8C='= '+NHUO*, $(K%'= !%D(49
$&!E8E?!M  E8C=0 "E8E?!C  M4J"GXd^"
 
c3h 
 
* $(L(4.'"AWS#X%6 A A H2FL"3 "4; "HHDI H$tE{*; H T#Y 4U3D  U r,   r   )loggingtypingr   r   r   r   r   r:   langchain_core._api.deprecationr   langchain_core.embeddingsr	   pydanticr
   r   	getLoggerrV   rJ   r   r1   r,   r*   <module>rh      sZ     5 5  6 0 *			8	$ 
:
Sy* S
Sr,   