§
    æ˜ºhô@  ã                   óì   — d dl Z d dlmZmZmZmZmZmZmZ d dl	Z	d dl
Z
d dlmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZ ded	efd
„Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ dee¦  «        ZdS )é    N)ÚAnyÚAsyncIteratorÚDictÚIteratorÚListÚMappingÚOptional)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseLanguageModel)ÚBaseLLM)ÚGenerationChunkÚ	LLMResult)ÚExtraÚstream_responseÚreturnc                 óª   — t          j        | ¦  «        }|                     d¦  «        du r|nd}t          |                     dd¦  «        |¬¦  «        S )z0Convert a stream response to a generation chunk.ÚdoneTNÚresponseÚ )ÚtextÚgeneration_info)ÚjsonÚloadsÚgetr   )r   Úparsed_responser   s      úg/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/llms/ollama.pyÚ$_stream_response_to_generation_chunkr      sa   € õ ”j Ñ1Ô1€OØ)8×)<Ò)<¸VÑ)DÔ)DÈÐ)LÐ)L�o�oÐRV€OÝØ× Ò  ¨RÑ0Ô0À/ðñ ô ð ó    c                   ó   — e Zd ZdZdS )ÚOllamaEndpointNotFoundErrorz-Raised when the Ollama endpoint is not found.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   r!   r!      s   € € € € € Ø7Ð7Ð7Ð7r   r!   c                   óh  — e Zd ZU 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         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<   	 edeee f         fd„¦   «         Z!ede"ee f         fd„¦   «         Z#	 	 d)dedeee                  deee                  de de$e         f
d„Z%	 	 d)dedeee                  deee                  de de&e         f
d„Z'	 d*d ed!e deee                  de de$e         f
d"„Z(	 d*d ed!e deee                  de de&e         f
d#„Z)	 	 	 d+dedeee                  d%ee*         d&e+de de,fd'„Z-	 	 	 d+dedeee                  d%ee.         d&e+de de,fd(„Z/dS ),Ú_OllamaCommonzhttp://localhost:11434Úbase_urlÚllama2ÚmodelNÚmirostatÚmirostat_etaÚmirostat_tauÚnum_ctxÚnum_gpuÚ
num_threadÚrepeat_last_nÚrepeat_penaltyÚtemperatureÚstopÚtfs_zÚtop_kÚtop_pÚsystemÚtemplateÚformatÚtimeoutÚheadersr   c                 óØ   — | j         | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        | j        | j        | j        dœ| j        | j        dœS )z.Get the default parameters for calling Ollama.)r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   )r+   r;   Úoptionsr9   r:   )r+   r;   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   ©Úselfs    r   Ú_default_paramsz_OllamaCommon._default_paramst   sy   € ð ”ZØ”kà œMØ $Ô 1Ø $Ô 1Øœ<Øœ<Ø"œoØ!%Ô!3Ø"&Ô"5Ø#Ô/Øœ	ØœØœØœðð ð ”kØœð'
ð 
ð 	
r   c                 ó2   — i | j         | j        dœ¥| j        ¥S )zGet the identifying parameters.)r+   r;   )r+   r;   rB   r@   s    r   Ú_identifying_paramsz!_OllamaCommon._identifying_params�   s$   € ð X˜DœJ°$´+Ð>Ð>ÐWÀ$ÔBVÐWÐWr   ÚpromptÚimagesÚkwargsc              +   óR   K  — ||dœ} | j         d||| j        › d�dœ|¤ŽE d {V —† d S ©N©rE   rF   z/api/generate/)Úpayloadr5   Úapi_urlr&   )Ú_create_streamr)   )rA   rE   r5   rF   rG   rK   s         r   Ú_create_generate_streamz%_OllamaCommon._create_generate_stream’   s|   è è € ð $¨vÐ6Ð6ˆØ&�4Ô&ð 
ØØØ”}Ð4Ð4Ð4ð
ð 
ð ð	
ð 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r   c                ób   K  — ||dœ} | j         d||| j        › d�dœ|¤Ž2 3 d {V —†}|W V — Œ6 d S rI   )Ú_acreate_streamr)   )rA   rE   r5   rF   rG   rK   Úitems          r   Ú_acreate_generate_streamz&_OllamaCommon._acreate_generate_stream¡   s’   è è € ð $¨vÐ6Ð6ˆØ.˜$Ô.ð 
ØØØ”}Ð4Ð4Ð4ð
ð 
ð ð	
ð 
ð 	ð 	ð 	ð 	ð 	ð 	ð 	�$ð ˆJˆJˆJˆJˆJð
ð 
ð 
s   ¡.rL   rK   c                 óv  ‡ — ‰ j         �|�t          d¦  «        ‚‰ j         �‰ j         }n|€g }‰ j        }‰ j        D ]}||v r||         ||<   Œd|v r|d         |d<   n1i |d         ¥d|i¥ˆ fd„|                     ¦   «         D ¦   «         ¥|d<   |                     d¦  «        rd|                     dg ¦  «        i|¥}n.|                     d¦  «        |                     dg ¦  «        dœ|¥}t          j        |d	d
it          ‰ j        t          ¦  «        r‰ j        ni ¥|d‰ j
        ¬¦  «        }d|_        |j        dk    rd|j        dk    rt          d‰ j        › d�¦  «        ‚|                     ¦   «                              d¦  «        }	t          d|j        › d|	› �¦  «        ‚|                     d¬¦  «        S )Nú2`stop` found in both the input and default params.r?   r5   c                 ó.   •— i | ]\  }}|‰j         v¯||“ŒS r&   ©rB   ©Ú.0ÚkÚvrA   s      €r   ú
<dictcomp>z0_OllamaCommon._create_stream.<locals>.<dictcomp>Ë   ó,   ø€ ÐTÐTÐT™D˜A˜q°a¸tÔ?SÐ6SÐ6S�1�aÐ6SÐ6SÐ6Sr   ÚmessagesrE   rF   rJ   úContent-Typeúapplication/jsonT)Úurlr=   r   Ústreamr<   úutf-8éÈ   é”  zwOllama call failed with status code 404. Maybe your model is not found and you should pull the model with `ollama pull z`.Úerrorú$Ollama call failed with status code ú. Details: )Údecode_unicode)r5   Ú
ValueErrorrB   Úitemsr   ÚrequestsÚpostÚ
isinstancer=   Údictr<   ÚencodingÚstatus_coder!   r+   r   Ú
iter_lines)
rA   rL   rK   r5   rG   ÚparamsÚkeyÚrequest_payloadr   Úoptional_details
   `         r   rM   z_OllamaCommon._create_stream±   sV  ø€ ð Œ9Ð  TÐ%5ÝÐQÑRÔRÐRØŒYÐ"Ø”9ˆDˆDØˆ\ØˆDàÔ%ˆàÔ'ð 	*ð 	*ˆCØ�fˆ}ˆ}Ø$ Sœk��s‘øà˜ÐÐØ & yÔ 1ˆF�9ÑÐð!Ø˜Ô#ð!à˜ð!ð !ð UÐTÐTÐT F§L¢L¡N¤NÐTÑTÔTð!ˆF�9Ñð �;Š;�zÑ"Ô"ð 	Ø)¨7¯;ª;°zÀ2Ñ+FÔ+FÐQÈ&ÐQˆOˆOð "Ÿ+š+ hÑ/Ô/Ø!Ÿ+š+ h°Ñ3Ô3ðð ð ðˆOõ ”=ØàÐ 2ðå#-¨d¬l½DÑ#AÔ#AÐI�4”<�<Àrðð !ØØ”Lð	
ñ 	
ô 	
ˆð $ˆÔØÔ 3Ò&Ð&ØÔ# sÒ*Ð*Ý1ðVàGKÄzðVð Vð Vñô ð ð #+§-¢-¡/¤/×"5Ò"5°gÑ">Ô">�Ý ð3¸8Ô;Oð 3ð 3Ø!0ð3ð 3ñô ð ð ×"Ò"°$Ð"Ñ7Ô7Ð7r   c                ó  ‡ K  — ‰ j         �|�t          d¦  «        ‚‰ j         �‰ j         }n|€g }‰ j        }‰ j        D ]}||v r||         ||<   Œd|v r|d         |d<   n1i |d         ¥d|i¥ˆ fd„|                     ¦   «         D ¦   «         ¥|d<   |                     d¦  «        rd|                     dg ¦  «        i|¥}n.|                     d¦  «        |                     dg ¦  «        dœ|¥}t          j        ¦   «         4 ƒd {V —†}|                     |d	d
i|‰ j        ¬¦  «        4 ƒd {V —†	 }	|	j	        dk    ra|	j	        dk    rt          d¦  «        ‚|	                     ¦   «                              d¦  «        ƒ d {V —†}
t          d|	j	        › d|
› �¦  «        ‚|	j        2 3 d {V —†}|                     d¦  «        W V — Œ 6 	 d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )NrT   r?   r5   c                 ó.   •— i | ]\  }}|‰j         v¯||“ŒS r&   rV   rW   s      €r   r[   z1_OllamaCommon._acreate_stream.<locals>.<dictcomp>  r\   r   r]   rE   rF   rJ   r^   r_   )r`   r=   r   r<   rc   rd   z(Ollama call failed with status code 404.re   rf   rg   rb   )r5   ri   rB   rj   r   ÚaiohttpÚClientSessionrl   r<   Ústatusr!   r   ÚcontentÚdecode)rA   rL   rK   r5   rG   rr   rs   rt   Úsessionr   ru   Úlines   `           r   rP   z_OllamaCommon._acreate_streamñ   sÚ  øè è € ð Œ9Ð  TÐ%5ÝÐQÑRÔRÐRØŒYÐ"Ø”9ˆDˆDØˆ\ØˆDàÔ%ˆàÔ'ð 	*ð 	*ˆCØ�fˆ}ˆ}Ø$ Sœk��s‘øà˜ÐÐØ & yÔ 1ˆF�9ÑÐð!Ø˜Ô#ð!à˜ð!ð !ð UÐTÐTÐT F§L¢L¡N¤NÐTÑTÔTð!ˆF�9Ñð �;Š;�zÑ"Ô"ð 	Ø)¨7¯;ª;°zÀ2Ñ+FÔ+FÐQÈ&ÐQˆOˆOð "Ÿ+š+ hÑ/Ô/Ø!Ÿ+š+ h°Ñ3Ô3ðð ð ðˆOõ Ô(Ñ*Ô*ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/¨gØ—|’|ØØ'Ð);Ð<Ø$Øœð	 $ñ ô ð /ð /ð /ð /ð /ð /ð /ð /ð
 Ø”? cÒ)Ð)Ø”¨#Ò-Ð-Ý9ØFñô ð ð 19·²±´×0CÒ0CÀGÑ0LÔ0LÐ*LÐ*LÐ*LÐ*LÐ*LÐ*L˜Ý(ð;À8Ä?ð ;ð ;Ø)8ð;ð ;ñô ð ð #+Ô"2ð /ð /ð /ð /ð /ð /ð /˜$ØŸ+š+ gÑ.Ô.Ð.Ð.Ð.Ð.Ð.ð #3Ð"2ð#/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð 	/ð 	/sC   Ä'G;Ä/A4GÆ#GÆ)GÇG;Ç
G!	Ç!G;Ç$G!	Ç%G;Ç;
HÈHFÚrun_managerÚverbosec                 óÂ   — d } | j         ||fi |¤ŽD ];}|r7t          |¦  «        }|€|}n||z  }|r|                     |j        |¬¦  «         Œ<|€t	          d¦  «        ‚|S ©N©r€   z$No data received from Ollama stream.)rN   r   Úon_llm_new_tokenr   ri   ©	rA   rE   r5   r   r€   rG   Úfinal_chunkÚstream_respÚchunks	            r   Ú_stream_with_aggregationz&_OllamaCommon._stream_with_aggregation,  s¦   € ð 26ˆØ7˜4Ô7¸ÀÐOÐOÈÐOÐOð 	ð 	ˆKØð 
Ý<¸[ÑIÔI�ØÐ&Ø"'�K�Kà 5Ñ(�KØð Ø×0Ò0Øœ
Ø 'ð 1ñ ô ð øð ÐÝÐCÑDÔDÐDàÐr   c              ‹   óÞ   K  — d } | j         ||fi |¤Ž2 3 d {V —†}|r=t          |¦  «        }|€|}n||z  }|r"|                     |j        |¬¦  «        ƒ d {V —† ŒG6 |€t	          d¦  «        ‚|S r‚   )rR   r   r„   r   ri   r…   s	            r   Ú_astream_with_aggregationz'_OllamaCommon._astream_with_aggregationF  sç   è è € ð 26ˆØ!> Ô!>¸vÀtÐ!VÐ!VÈvÐ!VÐ!Vð 	ð 	ð 	ð 	ð 	ð 	ð 	�+Øð 
Ý<¸[ÑIÔI�ØÐ&Ø"'�K�Kà 5Ñ(�KØð Ø%×6Ò6Øœ
Ø 'ð 7ñ ô ð ð ð ð ð ð ð øð "Wð ÐÝÐCÑDÔDÐDàÐs   ”A©NN)N)NNF)0r"   r#   r$   r)   ÚstrÚ__annotations__r+   r,   r	   Úintr-   Úfloatr.   r/   r0   r1   r2   r3   r4   r5   r   r6   r7   r8   r9   r:   r;   r<   r=   rn   Úpropertyr   r   rB   r   rD   r   rN   r   rR   rM   rP   r   Úboolr   r‰   r
   r‹   r&   r   r   r(   r(      sÛ  € € € € € € Ø,€HˆcÐ,Ð,Ñ,Ø-à€Eˆ3ÐÐÑØà"€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ð !€FˆH�SŒMÐ Ð Ñ ØDà"€Hˆh�sŒmÐ"Ð"Ñ"ØUà €FˆH�SŒMÐ Ð Ñ Ø7à!€GˆX�cŒ]Ð!Ð!Ñ!Ø(à"€GˆX�dŒ^Ð"Ð"Ñ"ðð
 ð
  c¨3 h¤ð 
ð 
ð 
ñ „Xð
ð0 ðX W¨S°#¨XÔ%6ð Xð Xð Xñ „XðXð %)Ø&*ð	
ð 
àð
ð �t˜C”yÔ!ð
ð ˜˜cœÔ#ð	
ð
 ð
ð 
�#Œð
ð 
ð 
ð 
ð$ %)Ø&*ð	ð àðð �t˜C”yÔ!ðð ˜˜cœÔ#ð	ð
 ðð 
�sÔ	ðð ð ð ð( %)ð	>8ð >8àð>8ð ð>8ð �t˜C”yÔ!ð	>8ð
 ð>8ð 
�#Œð>8ð >8ð >8ð >8ðH %)ð	9/ð 9/àð9/ð ð9/ð �t˜C”yÔ!ð	9/ð
 ð9/ð 
�sÔ	ð9/ð 9/ð 9/ð 9/ð| %)Ø:>Øðð àðð �t˜C”yÔ!ðð Ð6Ô7ð	ð
 ðð ðð 
ðð ð ð ð: %)Ø?CØðð àðð �t˜C”yÔ!ðð Ð;Ô<ð	ð
 ðð ðð 
ðð ð ð ð ð r   r(   c                   óÚ  ‡ — e Zd ZdZ G d„ d¦  «        Zedefd„¦   «         Z	 	 	 ddee         de	ee                  d	e	ee                  d
e	e
         dedefˆ fd„Z	 	 	 ddee         de	ee                  d	e	ee                  d
e	e
         dedefˆ fd„Z	 	 ddede	ee                  d
e	e
         dedee         f
d„Z	 	 ddede	ee                  d
e	e         dedee         f
d„Zˆ xZS )ÚOllamazýOllama locally runs large language models.

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

    Example:
        .. code-block:: python

            from langchain_community.llms import Ollama
            ollama = Ollama(model="llama2")
    c                   ó    — e Zd ZdZej        ZdS )úOllama.Configz'Configuration for this pydantic object.N)r"   r#   r$   r%   r   ÚforbidÚextrar&   r   r   ÚConfigr–   m  s   € € € € € Ø5Ð5à”ˆˆˆr   r™   r   c                 ó   — dS )zReturn type of llm.z
ollama-llmr&   r@   s    r   Ú	_llm_typezOllama._llm_typer  s	   € ð ˆ|r   NÚpromptsr5   rF   r   rG   c           	      ó¦   •— g }|D ]<} t          ¦   «         j        |f|||| j        dœ|¤Ž}|                     |g¦  «         Œ=t	          |¬¦  «        S )áh  Call out to Ollama's generate endpoint.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.

        Returns:
            The string generated by the model.

        Example:
            .. code-block:: python

                response = ollama("Tell me a joke.")
        ©r5   rF   r   r€   ©Úgenerations)Úsuperr‰   r€   Úappendr   ©
rA   rœ   r5   rF   r   rG   r¡   rE   r†   Ú	__class__s
            €r   Ú	_generatezOllama._generatew  s‚   ø€ ð. ˆØð 		.ð 		.ˆFØ:�%™'œ'Ô:ØðàØØ'Øœðð ð ðð ˆKð ×Ò ˜}Ñ-Ô-Ð-Ð-Ý [Ð1Ñ1Ô1Ð1r   c           	   ‹   ó¶   •K  — g }|D ]B} t          ¦   «         j        |f|||| j        dœ|¤Žƒ d{V —†}|                     |g¦  «         ŒCt	          |¬¦  «        S )rž   rŸ   Nr    )r¢   r‹   r€   r£   r   r¤   s
            €r   Ú
_ageneratezOllama._agenerate›  s¤   øè è € ð. ˆØð 		.ð 		.ˆFØ A¥¡¤Ô AØð!àØØ'Øœð!ð !ð ð!ð !ð ð ð ð ð ð ˆKð ×Ò ˜}Ñ-Ô-Ð-Ð-Ý [Ð1Ñ1Ô1Ð1r   rE   c              +   óž   K  —  | j         ||fi |¤ŽD ]:}|r6t          |¦  «        }|V — |r!|                     |j        | j        ¬¦  «         Œ;d S ©Nrƒ   )rN   r   r„   r   r€   ©rA   rE   r5   r   rG   r‡   rˆ   s          r   Ú_streamzOllama._stream¿  s†   è è € ð 8˜4Ô7¸ÀÐOÐOÈÐOÐOð 	ð 	ˆKØð Ý<¸[ÑIÔI�Ø���Øð Ø×0Ò0Øœ
Ø $¤ð 1ñ ô ð øð	ð 	r   c                ó¸   K  —  | j         ||fi |¤Ž2 3 d {V —†}|r=t          |¦  «        }|W V — |r'|                     |j        | j        ¬¦  «        ƒ d {V —† ŒG6 d S rª   )rP   r   r„   r   r€   r«   s          r   Ú_astreamzOllama._astreamÐ  sÁ   è è € ð "6 Ô!5°f¸dÐ!MÐ!MÀfÐ!MÐ!Mð 	ð 	ð 	ð 	ð 	ð 	ð 	�+Øð Ý<¸[ÑIÔI�Ø����Øð Ø%×6Ò6Øœ
Ø $¤ð 7ñ ô ð ð ð ð ð ð ð øð "NÐ!MÐ!Ms   ’A)NNNrŒ   )r"   r#   r$   r%   r™   r‘   r�   r›   r   r	   r   r   r   r¦   r¨   r   r   r¬   r
   r   r®   Ú__classcell__)r¥   s   @r   r”   r”   a  sL  ø€ € € € € ð	ð 	ðð ð ð ð ñ ô ð ð
 ð˜3ð ð ð ñ „Xðð %)Ø&*Ø:>ð"2ð "2à�c”ð"2ð �t˜C”yÔ!ð"2ð ˜˜cœÔ#ð	"2ð
 Ð6Ô7ð"2ð ð"2ð 
ð"2ð "2ð "2ð "2ð "2ð "2ðN %)Ø&*Ø:>ð"2ð "2à�c”ð"2ð �t˜C”yÔ!ð"2ð ˜˜cœÔ#ð	"2ð
 Ð6Ô7ð"2ð ð"2ð 
ð"2ð "2ð "2ð "2ð "2ð "2ðN %)Ø:>ð	ð àðð �t˜C”yÔ!ðð Ð6Ô7ð	ð
 ðð 
�/Ô	"ðð ð ð ð( %)Ø?Cð	ð àðð �t˜C”yÔ!ðð Ð;Ô<ð	ð
 ðð 
�Ô	'ðð ð ð ð ð ð ð r   r”   )r   Útypingr   r   r   r   r   r   r	   rx   rk   Úlangchain_core.callbacksr
   r   Úlangchain_core.language_modelsr   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   r   Úlangchain_core.pydantic_v1r   r�   r   Ú	Exceptionr!   r(   r”   r&   r   r   ú<module>r·      s�  ðØ €€€Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ Nà €€€Ø €€€ðð ð ð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðØðàðð ð ð ð8ð 8ð 8ð 8ð 8 )ñ 8ô 8ð 8ðð ð ð ð Ð%ñ ô ð ðD
~ð ~ð ~ð ~ð ~ˆW�mñ ~ô ~ð ~ð ~ð ~r   