
    Zi-                        S r SSKJr  SSKJr  SSKJr  SSKJrJ	r	  SSK
JrJrJrJrJr  SSKJr  SSKJrJrJr   " S	 S
\\5      rg)zOllama embeddings models.    )annotations)Any)
Embeddings)AsyncClientClient)	BaseModel
ConfigDictPrivateAttrfield_validatormodel_validator)Self)merge_auth_headersparse_url_with_authvalidate_modelc                  $   \ rS rSr% SrS\S'    SrS\S'    \" S5      \S2S j5       5       r	S	r
S
\S'    SrS\S'    0 rS\S'    0 rS\S'    0 rS\S'    \" SS9rS\S'    \" SS9rS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S '    SrS\S!'    SrS"\S#'    SrS\S$'    SrS\S%'    SrS\S&'    \ " S'S(9r!\"S3S) j5       r#\$" S*S+9S4S, j5       r%S5S- jr&S6S. jr'S5S/ jr(S6S0 jr)S1r*g)7OllamaEmbeddings   u	  Ollama embedding model integration.

Set up a local Ollama instance:
    [Install the Ollama package](https://github.com/ollama/ollama) and set up a
    local Ollama instance.

    You will need to choose a model to serve.

    You can view a list of available models via [the model library](https://ollama.com/library).

    To fetch a model from the Ollama model library use `ollama pull <name-of-model>`.

    For example, to pull the llama3 model:

    ```bash
    ollama pull llama3
    ```

    This will download the default tagged version of the model.
    Typically, the default points to the latest, smallest sized-parameter model.

    * On Mac, the models will be downloaded to `~/.ollama/models`
    * On Linux (or WSL), the models will be stored at `/usr/share/ollama/.ollama/models`

    You can specify the exact version of the model of interest
    as such `ollama pull vicuna:13b-v1.5-16k-q4_0`.

    To view pulled models:

    ```bash
    ollama list
    ```

    To start serving:

    ```bash
    ollama serve
    ```

    View the Ollama documentation for more commands.

    ```bash
    ollama help
    ```

Install the `langchain-ollama` integration package:
    ```bash
    pip install -U langchain_ollama
    ```

Key init args — completion params:
    model: str
        Name of Ollama model to use.
    base_url: str | None
        Base url the model is hosted under.

See full list of supported init args and their descriptions in the params section.

Instantiate:
    ```python
    from langchain_ollama import OllamaEmbeddings

    embed = OllamaEmbeddings(model="llama3")
    ```

Embed single text:
    ```python
    input_text = "The meaning of life is 42"
    vector = embed.embed_query(input_text)
    print(vector[:3])
    ```

    ```python
    [-0.024603435769677162, -0.007543657906353474, 0.0039630369283258915]
    ```

Embed multiple texts:
    ```python
    input_texts = ["Document 1...", "Document 2..."]
    vectors = embed.embed_documents(input_texts)
    print(len(vectors))
    # The first 3 coordinates for the first vector
    print(vectors[0][:3])
    ```

    ```python
    2
    [-0.024603435769677162, -0.007543657906353474, 0.0039630369283258915]
    ```

Async:
    ```python
    vector = await embed.aembed_query(input_text)
    print(vector[:3])

    # multiple:
    # await embed.aembed_documents(input_texts)
    ```

    ```python
    [-0.009100092574954033, 0.005071679595857859, -0.0029193938244134188]
    ```
strmodelN
int | None
dimensionsc                2    Ub  US:  a  Sn[        U5      eU$ )N   z(`dimensions` must be a positive integer.)
ValueError)clsvmsgs      u/var/www/eduai.edurigo.com/question_generate/ques_gen_env/lib/python3.13/site-packages/langchain_ollama/embeddings.py_validate_dimensions%OllamaEmbeddings._validate_dimensions   s#     =QU<CS/!    Fboolvalidate_model_on_initz
str | Nonebase_urlzdict | Noneclient_kwargsasync_client_kwargssync_client_kwargs)defaultzClient | None_clientzAsyncClient | None_async_clientmirostatzfloat | Nonemirostat_etamirostat_taunum_ctxnum_gpu
keep_alive
num_threadrepeat_last_nrepeat_penaltytemperaturezlist[str] | Nonestoptfs_ztop_ktop_pforbid)extrac                &   U R                   U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  S.$ )z.Get the default parameters for calling Ollama.r+   r,   r-   r.   r/   r1   r2   r3   r4   r5   r6   r7   r8   r<   )selfs    r   _default_params OllamaEmbeddings._default_params  ss      -- --||||//!//"11++IIZZZZZZ
 	
r!   after)modec                   U R                   =(       d    0 n[        U R                  5      u  p#[        X5        UnU R                  (       a  0 UEU R                  EnUnU R
                  (       a  0 UEU R
                  En[        SSU0UD6U l        [        SSU0UD6U l	        U R                  (       a   [        U R                  U R                  5        U $ )zSet clients to use for Ollama.host )r%   r   r$   r   r'   r&   r   r)   r   r*   r#   r   r   )r=   r%   cleaned_urlauth_headersr'   r&   s         r   _set_clientsOllamaEmbeddings._set_clients'  s     **0b$7$F!=7*""!R$6!R$:Q:Q!R+##"U%8"UD<T<T"UE;E2DE(QkQ=PQ&&4<<4r!   c                    U R                   (       d  Sn[        U5      eU R                   R                  U R                  UU R                  U R
                  U R                  S9S   $ )Embed search docs.zTOllama sync client is not initialized. Make sure the model was properly constructed.r   optionsr0   
embeddings)r)   RuntimeErrorembedr   r   r>   r0   r=   textsr   s      r   embed_documents OllamaEmbeddings.embed_documents=  sh    ||@  s##||!!JJ(( " 
  	r!   c                ,    U R                  U/5      S   $ )Embed query text.r   )rR   r=   texts     r   embed_queryOllamaEmbeddings.embed_queryM  s    ##TF+A..r!   c                   #    U R                   (       d  Sn[        U5      eU R                   R                  U R                  UU R                  U R
                  U R                  S9I Sh  vN S   $  N7f)rJ   zUOllama async client is not initialized. Make sure the model was properly constructed.rK   NrM   )r*   rN   rO   r   r   r>   r0   rP   s      r   aembed_documents!OllamaEmbeddings.aembed_documentsQ  sy     !!@  s##$$**

??,,?? +    	s   A'A3)A1*A3c                H   #    U R                  U/5      I Sh  vN S   $  N7f)rU   Nr   )r[   rV   s     r   aembed_queryOllamaEmbeddings.aembed_queryc  s#     ++TF33Q773s   " ")r*   r)   )r   r   returnr   )r`   zdict[str, Any])r`   r   )rQ   z	list[str]r`   zlist[list[float]])rW   r   r`   zlist[float])+__name__
__module____qualname____firstlineno____doc____annotations__r   r   classmethodr   r#   r$   r%   r&   r'   r
   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r	   model_configpropertyr>   r   rG   rR   rX   r[   r^   __static_attributes__rD   r!   r   r   r      s    fP J!J
!
 \"  # $)D(  Hj* "$M;# (*) ')( )6G]60(3D(AM%A6HjJ "&L,%7
 "&L,%' GZ& GZ- "J
! "J
!N
 !%M:$E $(NL'. !%K$? "D
!&E<Q E:2 E<E L 
 
$ '" #* /$8r!   r   N)re   
__future__r   typingr   langchain_core.embeddingsr   ollamar   r   pydanticr   r	   r
   r   r   typing_extensionsr   langchain_ollama._utilsr   r   r   r   rD   r!   r   <module>rr      s=     "  0 &  # L8y* L8r!   