§
    æ˜º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mZ  e j        e¦  «        Z G d„ dee	¦  «        ZdS )é    N)ÚAnyÚDictÚListÚMappingÚOptional)Ú
Embeddings)Ú	BaseModelÚExtrac                   ó
  — 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<   	 edeeef         fd„¦   «         Z d
Z!ee"         ed<   	 ede#eef         fd„¦   «         Z$ G 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)d
S )'Ú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Ú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    úm/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/embeddings/ollama.pyÚ_default_paramsz OllamaEmbeddings._default_paramsl   sh   € ð ”Zà œMØ $Ô 1Ø $Ô 1Øœ<Øœ<Ø"œoØ!%Ô!3Ø"&Ô"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�7˜DœJÐ'Ð@¨4Ô+?Ð@Ð@r'   c                   ó    — e Zd ZdZej        ZdS )úOllamaEmbeddings.Configz'Configuration for this pydantic object.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   ÚforbidÚextra© r'   r%   ÚConfigr,   Š   s   € € € € € Ø5Ð5à”ˆˆˆr'   r4   Úinputc                 óÀ  — ddi}	 t          j        | j        › d�|| j        |dœ| j        ¥¬¦  «        }n.# t           j        j        $ r}t          d|› �¦  «        ‚d}~ww xY w|j        dk    rt          d	|j        ›d
|j	        ›�¦  «        ‚	 | 
                    ¦   «         }|d         S # t           j        j        $ r}t          d|› d|j	        › �¦  «        ‚d}~ww xY w)z¥Process 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)ÚheadersÚjsonz$Error raised by inference endpoint: NéÈ   z)Error raised by inference API HTTP code: z, Ú	embeddingzError raised by inference API: z.
Response: )ÚrequestsÚpostr   r   r&   Ú
exceptionsÚRequestExceptionÚ
ValueErrorÚstatus_codeÚtextr9   ÚJSONDecodeError)r$   r5   r8   ÚresÚeÚts         r%   Ú_process_emb_responsez&OllamaEmbeddings._process_emb_response�   s6  € ð Ð.ð
ˆð	IÝ”-Ø”=Ð1Ð1Ð1ØØ#œz°UÐSÐS¸dÔ>RÐSðñ ô ˆCˆCøõ
 Ô"Ô3ð 	Ið 	Ið 	IÝÐGÀAÐGÐGÑHÔHÐHøøøøð	Iøøøð Œ?˜cÒ!Ð!Ý�*à”?�?�? C¤H Hð.ñô ð ð	Ø—’‘
”
ˆAØ�[”>Ð!øÝÔ"Ô2ð 	ð 	ð 	ÝØL°!ÐLÐLÀ#Ä(ÐLÐLñô ð øøøøð	øøøs-   †.5 µA Á	AÁA ÂB* Â*CÂ>CÃCc                 ó´   ‡ — ‰ j         rA	 ddlm}  ||d¬¦  «        }n.# t          $ r t                               d¦  «         |}Y nw xY w|}ˆ fd„|D ¦   «         S )Nr   )Útqdmr   )ÚdesczgUnable to show progress bar because tqdm could not be imported. Please install with `pip install tqdm`.c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r3   )rG   )Ú.0r7   r$   s     €r%   ú
<listcomp>z+OllamaEmbeddings._embed.<locals>.<listcomp>À   s'   ø€ ÐGÐGÐG°v�×*Ò*¨6Ñ2Ô2ÐGÐGÐGr'   )r   rI   ÚImportErrorÚloggerÚwarning)r$   r5   rI   Úiter_s   `   r%   Ú_embedzOllamaEmbeddings._embed²   sž   ø€ ØÔð 	ð	Ø%Ð%Ð%Ð%Ð%Ð%à˜˜UÐ);Ð<Ñ<Ô<��øÝð ð ð Ý—’ð>ñô ð ð ���ðøøøð ˆEØGÐGÐGÐGÀÐGÑGÔGÐGs   Š ž&AÁAÚtextsc                 óN   ‡ — ˆ fd„|D ¦   «         }‰                       |¦  «        }|S )zÅEmbed documents using an Ollama deployed embedding model.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        c                 ó&   •— g | ]}‰j         › |› �‘ŒS r3   )r   )rL   rB   r$   s     €r%   rM   z4OllamaEmbeddings.embed_documents.<locals>.<listcomp>Ë   s'   ø€ ÐQÐQÐQÀ4 Ô 6Ð>¸Ð>Ð>ÐQÐQÐQr'   )rR   )r$   rS   Úinstruction_pairsÚ
embeddingss   `   r%   Úembed_documentsz OllamaEmbeddings.embed_documentsÂ   s8   ø€ ð RÐQÐQÐQÈ5ÐQÑQÔQÐØ—[’[Ð!2Ñ3Ô3ˆ
ØÐr'   rB   c                 óT   — | j         › |› �}|                      |g¦  «        d         }|S )zªEmbed a query using a Ollama deployed embedding model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   )r   rR   )r$   rB   Úinstruction_pairr;   s       r%   Úembed_queryzOllamaEmbeddings.embed_queryÏ   s8   € ð #Ô4Ð<°dÐ<Ð<ÐØ—K’KÐ!1Ð 2Ñ3Ô3°AÔ6ˆ	ØÐr'   )*r-   r.   r/   r0   r   ÚstrÚ__annotations__r   r   r   r   r   Úintr   Úfloatr   r   r   r   r   r   r   r   r   r   r   r   r   ÚboolÚpropertyr   r   r&   r(   Údictr   r*   r4   rG   rR   rX   r[   r3   r'   r%   r   r      s9  € € € € € € ðð ð. -€HˆcÐ,Ð,Ñ,Ø-Ø€Eˆ3ÐÐÑØà(Ð�sÐ(Ð(Ñ(Ø.Ø&Ð�sÐ&Ð&Ñ&Ø.à"€Hˆh�sŒmÐ"Ð"Ñ"ðBð %)€L�(˜5”/Ð(Ð(Ñ(ð5ð
 %)€L�(˜5”/Ð(Ð(Ñ(ð%ð "€GˆX�cŒ]Ð!Ð!Ñ!ð$ð "€GˆX�cŒ]Ð!Ð!Ñ!ð+ð !%€J�˜”Ð$Ð$Ñ$ðNð
 $(€M�8˜C”=Ð'Ð'Ñ'ð=ð '+€N�H˜U”OÐ*Ð*Ñ*ð,ð $(€K�˜%”Ð'Ð'Ñ'ð=ð !%€Dˆ(�4˜”9Ô
Ð$Ð$Ñ$Ø&à!€Eˆ8�EŒ?Ð!Ð!Ñ!ðMð  €Eˆ8�CŒ=ÐÐÑð0ð "€Eˆ8�EŒ?Ð!Ð!Ñ!ðCð  €M�4ÐÐÑØJàð
  c¨3 h¤ð 
ð 
ð 
ñ „Xð
ð* $(€L�(˜4”.Ð'Ð'Ñ'Ø"àðA W¨S°#¨XÔ%6ð Að Að Añ „XðAðð ð ð ð ñ ô ð ð
!¨3ð !°4¸´;ð !ð !ð !ð !ðFH˜D œIð H¨$¨t°E¬{Ô*;ð Hð Hð Hð Hð  T¨#¤Yð °4¸¸U¼Ô3Dð ð ð ð ð ð ¨¨U¬ð ð ð ð ð ð r'   r   )ÚloggingÚtypingr   r   r   r   r   r<   Úlangchain_core.embeddingsr   Úlangchain_core.pydantic_v1r	   r
   Ú	getLoggerr-   rO   r   r3   r'   r%   ú<module>rh      s½   ðØ €€€Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à €€€Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à	ˆÔ	˜8Ñ	$Ô	$€ðOð Oð Oð Oð O�y *ñ Oô Oð Oð Oð Or'   