§
    šŠtjNG  ã                  ó0  — d dl mZ d dlZd dlmZmZmZ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 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d„Z G d„ de¦  «        Z  G d„ de¦  «        Z! eddd¬¦  «         G d„ dee!¦  «        ¦   «         Z"dS )é    )ÚannotationsN)
ÚAnyÚAsyncIteratorÚCallableÚDictÚIteratorÚListÚMappingÚOptionalÚTupleÚUnion)Ú
deprecated)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseLanguageModel)ÚBaseLLM)ÚGenerationChunkÚ	LLMResult)Ú
ConfigDictÚstream_responseÚstrÚreturnr   c                óª   — 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      ú]/var/www/html/CA-Chatbot/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                  ó  — e Zd ZU dZded<   	 dZded<   	 dZded<   	 dZd	ed
<   	 dZd	ed<   	 dZ	ded<   	 dZ
ded<   	 dZded<   	 dZded<   	 dZded<   	 dZd	ed<   	 dZd	ed<   	 dZded<   	 dZd	ed<   	 dZded<   	 dZd	ed<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded <   	 dZd!ed"<   	 dZd#ed$<   	 ed?d'„¦   «         Zed@d)„¦   «         Z	 	 dAdBd/„Z	 	 dAdCd1„Z 	 dDdEd4„Z!	 dDdFd5„Z"	 	 	 dGdHd<„Z#	 	 	 dGdId>„Z$dS )JÚ_OllamaCommonzhttp://localhost:11434r   Úbase_urlÚllama2ÚmodelNzOptional[int]ÚmirostatzOptional[float]Úmirostat_etaÚmirostat_tauÚnum_ctxÚnum_gpuÚ
num_threadÚnum_predictÚrepeat_last_nÚrepeat_penaltyÚtemperatureúOptional[List[str]]ÚstopÚtfs_zÚtop_kÚtop_pzOptional[str]ÚsystemÚtemplateÚformatÚtimeoutzOptional[Union[int, str]]Ú
keep_alivezOptional[bool]ÚrawzOptional[dict]ÚheaderszUnion[Callable, Tuple, None]Úauthr   úDict[str, Any]c                óü   — | j         | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        | j        | j        | j        | j        dœ| j        | j        | j        | j        dœS )z.Get the default parameters for calling Ollama.)r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r=   r>   r?   r@   )r1   rC   ÚoptionsrA   rB   rE   rF   )r1   rC   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r=   r>   r?   r@   rA   rB   rE   rF   ©Úselfs    r#   Ú_default_paramsz_OllamaCommon._default_params™   s‰   € ð ”ZØ”kà œMØ $Ô 1Ø $Ô 1Øœ<Øœ<Ø"œoØ#Ô/Ø!%Ô!3Ø"&Ô"5Ø#Ô/Øœ	ØœØœØœðð ð  ”kØœØœ/Ø”8ð-
ð 
ð 	
r%   úMapping[str, Any]c                ó2   — i | j         | j        dœ¥| j        ¥S )zGet the identifying parameters.)r1   rC   )r1   rC   rN   rL   s    r#   Ú_identifying_paramsz!_OllamaCommon._identifying_paramsµ   s$   € ð X˜DœJ°$´+Ð>Ð>ÐWÀ$ÔBVÐWÐWr%   ÚpromptÚimagesÚkwargsr   úIterator[str]c              +  óR   K  — ||dœ} | j         d||| j        › d�dœ|¤ŽE d {V —† d S ©N©rR   rS   z/api/generate)Úpayloadr=   Úapi_urlr,   )Ú_create_streamr/   )rM   rR   r=   rS   rT   rY   s         r#   Ú_create_generate_streamz%_OllamaCommon._create_generate_streamº   s|   è è € ð $¨vÐ6Ð6ˆØ&�4Ô&ð 
ØØØ”}Ð3Ð3Ð3ð
ð 
ð ð	
ð 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r%   úAsyncIterator[str]c               ób   K  — ||dœ} | j         d||| j        › d�dœ|¤Ž2 3 d {V —†}|W V — Œ6 d S rW   )Ú_acreate_streamr/   )rM   rR   r=   rS   rT   rY   Úitems          r#   Ú_acreate_generate_streamz&_OllamaCommon._acreate_generate_streamÉ   s’   è è € ð $¨vÐ6Ð6ˆØ.˜$Ô.ð 
ØØØ”}Ð3Ð3Ð3ð
ð 
ð ð	
ð 
ð 	ð 	ð 	ð 	ð 	ð 	ð 	�$ð ˆJˆJˆJˆJˆJð
ð 
ð 
s   ¡.rZ   rY   c                ó8  ‡ — ‰ j         �|�t          d¦  «        ‚‰ j         �‰ j         }‰ 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 ¥‰ j
        |d‰ j        ¬¦  «        }d|_        |j        dk    rD|j        dk    rt          d‰ j        › d�¦  «        ‚|j        }	t          d|j        › d|	› �¦  «        ‚|                     d¬¦  «        S )Nú2`stop` found in both the input and default params.rK   r=   c                ó.   •— i | ]\  }}|‰j         v¯||“ŒS r,   ©rN   ©Ú.0ÚkÚvrM   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%   ÚmessagesrR   rS   rX   úContent-Typeúapplication/jsonT)ÚurlrG   rH   r   ÚstreamrD   ú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`.ú$Ollama call failed with status code ú. Details: )Údecode_unicode)r=   Ú
ValueErrorrN   Úitemsr!   ÚrequestsÚpostÚ
isinstancerG   ÚdictrH   rD   ÚencodingÚstatus_coder'   r1   r   Ú
iter_lines)
rM   rZ   rY   r=   rT   ÚparamsÚkeyÚrequest_payloadr   Úoptional_details
   `         r#   r[   z_OllamaCommon._create_streamÙ   s;  ø€ ð Œ9Ð  TÐ%5ÝÐQÑRÔRÐRØŒYÐ"Ø”9ˆ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ñô ð ð #+¤-�Ý ð3¸8Ô;Oð 3ð 3Ø!0ð3ð 3ñô ð ð ×"Ò"°$Ð"Ñ7Ô7Ð7r%   c           	    ó  ‡ K  — ‰ j         �|�t          d¦  «        ‚‰ j         �‰ j         }‰ 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t          ‰ j	        t          ¦  «        r‰ j	        ni ¥‰ j        |‰ j        ¬¦  «        4 ƒd {V —†	 }	|	j        dk    r;|	j        dk    rt          d¦  «        ‚|	j        }
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 )Nrc   rK   r=   c                ó.   •— i | ]\  }}|‰j         v¯||“ŒS r,   re   rf   s      €r#   rj   z1_OllamaCommon._acreate_stream.<locals>.<dictcomp>/  rk   r%   rl   rR   rS   rX   rm   rn   )ro   rG   rH   r   rD   rr   rs   z(Ollama call failed with status code 404.rt   ru   rq   )r=   rw   rN   rx   r!   ÚaiohttpÚClientSessionrz   r{   rG   r|   rH   rD   Ústatusr'   r   ÚcontentÚdecode)rM   rZ   rY   r=   rT   r€   r�   r‚   Úsessionr   rƒ   Úlines   `           r#   r_   z_OllamaCommon._acreate_stream  sÐ  øè è € ð Œ9Ð  TÐ%5ÝÐQÑRÔRÐRØŒYÐ"Ø”9ˆ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Ø—|’|Øà"Ð$6ðå'1°$´,ÅÑ'EÔ'EÐM�t”|�|È2ðð ”YØ$Øœð $ñ 	ô 	ð /ð /ð /ð /ð /ð /ð /ð /ð Ø”? cÒ)Ð)Ø”¨#Ò-Ð-Ý9ØFñô ð ð +3¬-˜Ý(ð;À8Ä?ð ;ð ;Ø)8ð;ð ;ñô ð ð #+Ô"2ð /ð /ð /ð /ð /ð /ð /˜$ØŸ+š+ gÑ.Ô.Ð.Ð.Ð.Ð.Ð.ð #3Ð"2ð+/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð 	/ð 	/sD   ÄAG9ÅAGÆ!GÆ'GÇG9Ç
G	ÇG9Ç"G	Ç#G9Ç9
HÈHFÚrun_managerú"Optional[CallbackManagerForLLMRun]ÚverboseÚboolr   c                óÂ   — d } | j         ||fi |¤ŽD ];}|r7t          |¦  «        }|€|}n||z  }|r|                     |j        |¬¦  «         Œ<|€t	          d¦  «        ‚|S ©N©r�   z$No data received from Ollama stream.)r\   r$   Úon_llm_new_tokenr   rw   ©	rM   rR   r=   r�   r�   rT   Úfinal_chunkÚstream_respÚchunks	            r#   Ú_stream_with_aggregationz&_OllamaCommon._stream_with_aggregationT  s¦   € ð 26ˆØ7˜4Ô7¸ÀÐOÐOÈÐOÐOð 	ð 	ˆKØð 
Ý<¸[ÑIÔI�ØÐ&Ø"'�K�Kà 5Ñ(�KØð Ø×0Ò0Øœ
Ø 'ð 1ñ ô ð øð ÐÝÐCÑDÔDÐDàÐr%   ú'Optional[AsyncCallbackManagerForLLMRun]c              ‹  óÞ   K  — d } | j         ||fi |¤Ž2 3 d {V —†}|r=t          |¦  «        }|€|}n||z  }|r"|                     |j        |¬¦  «        ƒ d {V —† ŒG6 |€t	          d¦  «        ‚|S r’   )ra   r$   r”   r   rw   r•   s	            r#   Ú_astream_with_aggregationz'_OllamaCommon._astream_with_aggregationn  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)r   rI   )r   rO   ©NN)
rR   r   r=   r<   rS   r<   rT   r   r   rU   )
rR   r   r=   r<   rS   r<   rT   r   r   r]   )N)
rZ   r   rY   r   r=   r<   rT   r   r   rU   )
rZ   r   rY   r   r=   r<   rT   r   r   r]   )NNF)rR   r   r=   r<   r�   rŽ   r�   r�   rT   r   r   r   )rR   r   r=   r<   r�   rš   r�   r�   rT   r   r   r   )%r(   r)   r*   r/   Ú__annotations__r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   ÚpropertyrN   rQ   r\   ra   r[   r_   r™   rœ   r,   r%   r#   r.   r.   -   sG  € € € € € € Ø,€HÐ,Ð,Ð,Ñ,Ø-à€EÐÐÐÑØà"€HÐ"Ð"Ð"Ñ"ðBð %)€LÐ(Ð(Ð(Ñ(ð5ð
 %)€LÐ(Ð(Ð(Ñ(ð%ð "€GÐ!Ð!Ð!Ñ!ð$ð "€GÐ!Ð!Ð!Ñ!ð+ð !%€JÐ$Ð$Ð$Ñ$ðNð
 "&€KÐ%Ð%Ð%Ñ%ðCð $(€MÐ'Ð'Ð'Ñ'ð=ð '+€NÐ*Ð*Ð*Ñ*ð,ð $(€KÐ'Ð'Ð'Ñ'ð=ð !%€DÐ$Ð$Ð$Ñ$Ø&à!€EÐ!Ð!Ð!Ñ!ðMð  €EÐÐÐÑð0ð "€EÐ!Ð!Ð!Ñ!ðCð !€FÐ Ð Ð Ñ ØDà"€HÐ"Ð"Ð"Ñ"ØUà €FÐ Ð Ð Ñ Ø7à!€GÐ!Ð!Ð!Ñ!Ø(à,0€JÐ0Ð0Ð0Ñ0ð	_ð €CÐÐÐÑØà"€GÐ"Ð"Ð"Ñ"ðð
 *.€DÐ-Ð-Ð-Ñ-ðTð ð
ð 
ð 
ñ „Xð
ð6 ðXð Xð Xñ „XðXð %)Ø&*ð	
ð 
ð 
ð 
ð 
ð$ %)Ø&*ð	ð ð ð ð ð( %)ð	<8ð <8ð <8ð <8ð <8ðD %)ð	;/ð ;/ð ;/ð ;/ð ;/ð@ %)Ø:>Øðð ð ð ð ð: %)Ø?CØðð ð ð ð ð ð r%   r.   z0.3.1z1.0.0zlangchain_ollama.OllamaLLM)ÚsinceÚremovalÚalternative_importc                  óŒ   ‡ — e Zd ZdZ ed¬¦  «        Zedd„¦   «         Z	 	 	 ddˆ fd„Z	 	 	 ddˆ fd„Z		 	 ddd„Z
	 	 dd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")
    Úforbid)Úextrar   r   c                ó   — dS )zReturn type of llm.z
ollama-llmr,   rL   s    r#   Ú	_llm_typezOllama._llm_type›  s	   € ð ˆ|r%   NÚpromptsú	List[str]r=   r<   rS   r�   rŽ   rT   r   r   c           	     ó¦   •— g }|D ]<} t          ¦   «         j        |f|||| j        dœ|¤Ž}|                     |g¦  «         Œ=t	          |¬¦  «        S )ád  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.")
        ©r=   rS   r�   r�   ©Úgenerations)Úsuperr™   r�   Úappendr   ©
rM   r©   r=   rS   r�   rT   r¯   rR   r–   Ú	__class__s
            €r#   Ú	_generatezOllama._generate   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%   rR   úIterator[GenerationChunk]c              +  óž   K  —  | j         ||fi |¤ŽD ]:}|r6t          |¦  «        }|r!|                     |j        | j        ¬¦  «         |V — Œ;d S ©Nr“   )r\   r$   r”   r   r�   ©rM   rR   r=   r�   rT   r—   r˜   s          r#   Ú_streamzOllama._streamà  sˆ   è è € ð 8˜4Ô7¸ÀÐOÐOÈÐOÐOð 	ð 	ˆKØð Ý<¸[ÑIÔI�Øð Ø×0Ò0Øœ
Ø $¤ð 1ñ ô ð ð ���øð	ð 	r%   rš   úAsyncIterator[GenerationChunk]c               ó¸   K  —  | j         ||fi |¤Ž2 3 d {V —†}|r=t          |¦  «        }|r'|                     |j        | j        ¬¦  «        ƒ d {V —† |W V — ŒG6 d S r¹   )ra   r$   r”   r   r�   rº   s          r#   Ú_astreamzOllama._astreamñ  sÃ   è è € ð "? Ô!>¸vÀtÐ!VÐ!VÈvÐ!VÐ!Vð 	ð 	ð 	ð 	ð 	ð 	ð 	�+Øð Ý<¸[ÑIÔI�Øð Ø%×6Ò6Øœ
Ø $¤ð 7ñ ô ð ð ð ð ð ð ð ð ����øð "WÐ!VÐ!Vs   ’A)r   r   )NNN)r©   rª   r=   r<   rS   r<   r�   rŽ   rT   r   r   r   r�   )
rR   r   r=   r<   r�   rŽ   rT   r   r   r·   )
rR   r   r=   r<   r�   rš   rT   r   r   r¼   )r(   r)   r*   r+   r   Úmodel_configrŸ   r¨   r´   r¶   r»   r¾   Ú__classcell__)r³   s   @r#   r¤   r¤   ‰  s  ø€ € € € € ðð ð �:Øðñ ô €Lð ðð ð ñ „Xðð %)Ø&*Ø:>ð2ð 2ð 2ð 2ð 2ð 2ð 2ðF %)Ø&*Ø:>ð2ð 2ð 2ð 2ð 2ð 2ð 2ðF %)Ø:>ð	ð ð ð ð ð( %)Ø?Cð	ð ð ð ð ð ð ð ð r%   r¤   )r   r   r   r   )#Ú
__future__r   r   Útypingr   r   r   r   r   r	   r
   r   r   r   r†   ry   Úlangchain_core._api.deprecationr   Úlangchain_core.callbacksr   r   Úlangchain_core.language_modelsr   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   r   Úpydanticr   r$   Ú	Exceptionr'   r.   r¤   r,   r%   r#   ú<module>rÊ      s  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€Ø €€€Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø Ð Ð Ð Ð Ð ðð ð ð ð8ð 8ð 8ð 8ð 8 )ñ 8ô 8ð 8ðYð Yð Yð Yð YÐ%ñ Yô Yð Yðx
 €Ø
ØØ3ðñ ô ð
rð rð rð rð rˆW�mñ rô rñô ð
rð rð rr%   