Ë
    µŒjY9  ã                   ó  — d dl Z d dlmZmZmZmZmZmZmZm	Z	 d dl
mZ d dlmZmZ d dlmZmZ d dlmZmZmZmZmZmZ d dlmZmZmZ d dlmZmZ  ed	d
¬«      de defd„«       Z!de defd„Z" eddd¬«       G d„ dee«      «       Z#y)é    N)ÚAnyÚAsyncIteratorÚDictÚIteratorÚListÚOptionalÚUnionÚcast)Ú
deprecated)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseChatModelÚLangSmithParams)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚChatMessageÚHumanMessageÚSystemMessage)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)ÚOllamaEndpointNotFoundErrorÚ_OllamaCommonú0.0.3Ú._chat_stream_response_to_chat_generation_chunk©ÚalternativeÚstream_responseÚreturnc                 ó¨   — t        j                  | «      }|j                  d«      du r|nd}t        t	        |j                  dd«      ¬«      |¬«      S )ú0Convert a stream response to a generation chunk.ÚdoneTNÚresponseÚ ©Úcontent©ÚmessageÚgeneration_info©ÚjsonÚloadsÚgetr   r   ©r   Úparsed_responser*   s      úp/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/ollama.pyÚ)_stream_response_to_chat_generation_chunkr2      sQ   € ô
 —j‘j Ó1€OØ)8×)<Ñ)<¸VÓ)DÈÑ)L‘oÐRV€OÜÜ ×':Ñ':¸:ÀrÓ'JÔKØ'ôð ó    c                 óÈ   — t        j                  | «      }|j                  d«      du r|nd}t        t	        |j                  di «      j                  dd«      ¬«      |¬«      S )	r"   r#   TNr)   r'   r%   r&   r(   r+   r/   s      r1   r   r   $   sc   € ô —j‘j Ó1€OØ)8×)<Ñ)<¸VÓ)DÈÑ)L‘oÐRV€OÜÜØ#×'Ñ'¨	°2Ó6×:Ñ:¸9ÀbÓIô
ð (ô	ð r3   z0.3.1z1.0.0zlangchain_ollama.ChatOllama)ÚsinceÚremovalÚalternative_importc                   ó  — e Zd ZdZedefd„«       Zedefd„«       Z		 dde
ee      dedefd„Z ed	d
¬«      dedefd„«       Zdee   defd„Zdee   deeeeeee   f   f      fd„Z	 ddee   de
ee      dedee   fd„Z	 ddee   de
ee      dedee   fd„Z	 	 	 ddee   de
ee      de
e   dededefd„Z	 	 	 ddee   de
ee      de
e   dededefd„Z	 	 ddee   de
ee      de
e   dedef
d„Z 	 	 ddee   de
ee      de
e   dedef
d„Z!	 	 ddee   de
ee      de
e   dedee   f
d„Z"	 	 ddee   de
ee      de
e   dedee   f
d„Z# ed	d¬«      	 	 ddee   de
ee      de
e   dedee   f
d„«       Z$y) Ú
ChatOllamaa  Ollama locally runs large language models.

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

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ChatOllama
            ollama = ChatOllama(model="llama2")
    r    c                  ó   — y)zReturn type of chat model.zollama-chat© )Úselfs    r1   Ú	_llm_typezChatOllama._llm_typeC   s   € ð r3   c                  ó   — y)z9Return whether this model can be serialized by Langchain.Fr;   )Úclss    r1   Úis_lc_serializablezChatOllama.is_lc_serializableH   s   € ð r3   NÚstopÚkwargsc           	      ó0  —  | j                   d
d|i|¤Ž}t        d| j                  d|j                  d| j                  «      ¬«      }|j                  d| j
                  «      x}r||d<   |xs  |j                  dd«      xs | j                  x}r||d	<   |S )z Get standard params for tracing.rA   ÚollamaÚchatÚtemperature)Úls_providerÚls_model_nameÚls_model_typeÚls_temperatureÚnum_predictÚls_max_tokensNÚls_stopr;   )Ú_get_invocation_paramsr   Úmodelr.   rF   rK   rA   )r<   rA   rB   ÚparamsÚ	ls_paramsrL   rM   s          r1   Ú_get_ls_paramszChatOllama._get_ls_paramsM   s¥   € ð -�×,Ñ,ÑA°$ÐA¸&ÑAˆÜ#Ø ØŸ*™*Ø Ø!Ÿ:™: m°T×5EÑ5EÓFô	
ˆ	ð #ŸJ™J }°d×6FÑ6FÓGÐGˆ=ÐGØ)6ˆI�oÑ&ØÒC˜fŸj™j¨°Ó6ÒC¸$¿)¹)ÐCˆ7ÐCØ#*ˆI�iÑ ØÐr3   r   Ú$_convert_messages_to_ollama_messagesr   r)   c                 ó8  — t        |t        «      r,d|j                  j                  «       › d|j                  › �}|S t        |t
        «      r€t        |j                  t        «      rTt        t        t           |j                  «      d   }|j                  d«      }|dk(  rd|d   › d�}|S |dk(  r|d   d	   }|S d|j                  › d�}S t        |t        «      r|j                  › }|S t        |t        «      rd
|j                  › d�}|S t        d|› �«      ‚)Nz

z: r   ÚtypeÚtextz[INST] z [/INST]Ú	image_urlÚurlz<<SYS>> z	 <</SYS>>zGot unknown type )Ú
isinstancer   ÚroleÚ
capitalizer'   r   r   r
   r   r.   r   r   Ú
ValueError)r<   r)   Úmessage_textÚfirst_contentÚcontent_types        r1   Ú_format_message_as_textz"ChatOllama._format_message_as_text^   s:  € ä�gœ{Ô+Ø! '§,¡,×"9Ñ"9Ó";Ð!<¸B¸w¿¹Ð>OÐPˆLð" Ðô! ˜¤Ô.Ü˜'Ÿ/™/¬4Ô0Ü $¤T¬$¡Z°·±Ó AÀ!Ñ D�Ø,×0Ñ0°Ó8�Ø 6Ò)Ø%,¨]¸6Ñ-BÐ,CÀ8Ð#L�Lð Ðð " [Ò0Ø#0°Ñ#=¸eÑ#D�Lð Ðð ")¨¯©Ð(9¸ÐB�ð Ðô ˜¤Ô+Ø%Ÿo™oÐ.ˆLð
 Ðô	 ˜¤Ô/Ø% g§o¡oÐ%6°iÐ@ˆLð Ðô Ð0°°	Ð:Ó;Ð;r3   Úmessagesc                 óh   — dj                  |D �cg c]  }| j                  |«      ‘Œ c}«      S c c}w )NÚ
)Újoinr`   )r<   ra   r)   s      r1   Ú_format_messages_as_textz#ChatOllama._format_messages_as_textt   s3   € Ø�y‰yÙBJÓKÁ(°wˆT×)Ñ)¨'Õ2À(ÑKó
ð 	
ùÚKs   �/c                 ó  — g }|D �]„  }d}t        |t        «      rd}n1t        |t        «      rd}nt        |t        «      rd}nt	        d«      ‚d}g }t        |j
                  t        «      r|j
                  }nût        t        t           |j
                  «      D ]×  }|j                  d«      dk(  r|d|d   › �z  }Œ#|j                  d«      d	k(  r—d }|j                  d	«      }	t        |	t        «      r|d	   }n%t        |	t        «      r
d
|	v r|	d
   }nt	        d«      ‚|j                  d«      }
t        |
«      dkD  r|j                  |
d   «       Œ¹|j                  |
d   «       ŒÎt	        d«      ‚ |j                  |||dœ«       �Œ‡ |S )Nr%   ÚuserÚ	assistantÚsystemz-Received unsupported message type for Ollama.rU   rV   rc   rW   rX   zSOnly string image_url or dict with string 'url' inside content parts are supported.Ú,é   r   zsUnsupported message content type. Must either have type 'text' or type 'image_url' with a string 'image_url' field.)rZ   r'   Úimages)rY   r   r   r   r\   r'   Ústrr
   r   r   r.   ÚdictÚsplitÚlenÚappend)r<   ra   Úollama_messagesr)   rZ   r'   rl   Úcontent_partrW   Útemp_image_urlÚimage_url_componentss              r1   rS   z/ChatOllama._convert_messages_to_ollama_messagesy   s¢  € ð !#ˆÜˆGØˆDÜ˜'¤<Ô0Ø‘Ü˜G¤YÔ/Ø"‘Ü˜G¤]Ô3Ø‘ä Ð!PÓQÐQàˆGØˆFÜ˜'Ÿ/™/¬3Ô/Ø!Ÿ/™/‘ä$(¬¬d©°W·_±_Ö$E�LØ#×'Ñ'¨Ó/°6Ò9Ø R¨°VÑ(<Ð'=Ð#>Ñ>™Ø%×)Ñ)¨&Ó1°[Ò@Ø$(˜	Ø)5×)9Ñ)9¸+Ó)F˜Ü% n´cÔ:Ø(4°[Ñ(A™Iä& ~´tÔ<ÀÈ.ÑAXà(6°uÑ(=™Iä",ð!Fó#ð ð
 09¯©¸sÓ/CÐ,ô Ð3Ó4°qÒ8Ø"ŸM™MÐ*>¸qÑ*AÕBà"ŸM™MÐ*>¸qÑ*AÕBô )ð?óð ð7 %FðB ×"Ñ"à Ø&Ø$ñöðc  ðr Ðr3   c              +   ó¢   K  — | j                   | j                  |«      dœ} | j                  d||| j                  › d�dœ|¤ŽE d {  –—†  y 7 Œ­w©N)rO   ra   z	/api/chat)ÚpayloadrA   Úapi_urlr;   )rO   rS   Ú_create_streamÚbase_url)r<   ra   rA   rB   rx   s        r1   Ú_create_chat_streamzChatOllama._create_chat_stream¸   s_   è ø€ ð —Z‘ZØ×AÑAÀ(ÓKñ
ˆð '�4×&Ñ&ð 
Ø $°4·=±=°/ÀÐ0Kñ
ØOUñ
÷ 	
ò 	
ús   ‚AAÁAÁAc                ó²   K  — | j                   | j                  |«      dœ} | j                  d||| j                  › d�dœ|¤Ž2 3 d {  –—† }|­–— Œ7 Œ
6 y ­wrw   )rO   rS   Ú_acreate_streamr{   )r<   ra   rA   rB   rx   Ústream_resps         r1   Ú_acreate_chat_streamzChatOllama._acreate_chat_streamÆ   so   è ø€ ð —Z‘ZØ×AÑAÀ(ÓKñ
ˆð "6 ×!5Ñ!5ð "
Ø $°4·=±=°/ÀÐ0Kñ"
ØOUò"
÷ 	�+ð Ôð	øñ "
ùs*   ‚AAÁAÁAÁ	AÁAÁAÁAÚrun_managerÚverbosec                 óÈ   — d } | j                   ||fi |¤ŽD ];  }|sŒt        |«      }|€|}n||z  }|sŒ|j                  |j                  ||¬«       Œ= |€t	        d«      ‚|S ©N©Úchunkr‚   z$No data received from Ollama stream.)r|   r   Úon_llm_new_tokenrV   r\   ©	r<   ra   rA   r�   r‚   rB   Úfinal_chunkr   r†   s	            r1   Ú_chat_stream_with_aggregationz(ChatOllama._chat_stream_with_aggregationÕ   s‡   € ð 6:ˆØ3˜4×3Ñ3°H¸dÑMÀfÔMˆKÚÜFÀ{ÓS�ØÐ&Ø"'‘Kà 5Ñ(�KÚØ×0Ñ0ØŸ
™
Ø#Ø 'ð 1õ ð Nð ÐÜÐCÓDÐDàÐr3   c              ‹   óô   K  — d } | j                   ||fi |¤Ž2 3 d {  –—† }|sŒt        |«      }|€|}n||z  }|sŒ$|j                  |j                  ||¬«      ƒ d {  –—†  ŒK7 ŒF7 Œ6 |€t	        d«      ‚|S ­wr„   )r€   r   r‡   rV   r\   rˆ   s	            r1   Ú_achat_stream_with_aggregationz)ChatOllama._achat_stream_with_aggregationð   s¦   è ø€ ð 6:ˆØ!: ×!:Ñ!:¸8ÀTÑ!TÈVÒ!T÷ 	�+ÚÜFÀ{ÓS�ØÐ&Ø"'‘Kà 5Ñ(�KÚØ%×6Ñ6ØŸ
™
Ø#Ø 'ð 7ó ÷ ñ ð	øðøð "Uð ÐÜÐCÓDÐDàÐùsA   ‚A8™A(�A$žA(¡A8¥A8½!A8ÁA&ÁA8Á$A(Á&A8Á(A8c                 ó´   —  | j                   |f||| j                  dœ|¤Ž}t        t        |j                  ¬«      |j
                  ¬«      }t        |g¬«      S )áÄ  Call out to Ollama's generate endpoint.

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

        Returns:
            Chat generations from the model

        Example:
            .. code-block:: python

                response = ollama([
                    HumanMessage(content="Tell me about the history of AI")
                ])
        ©rA   r�   r‚   r&   r(   ©Úgenerations)rŠ   r‚   r   r   rV   r*   r   ©r<   ra   rA   r�   rB   r‰   Úchat_generations          r1   Ú	_generatezChatOllama._generate  sh   € ð0 9�d×8Ñ8Øð
àØ#Ø—L‘Lñ	
ð
 ñ
ˆô )Ü k×&6Ñ&6Ô7Ø'×7Ñ7ô
ˆô  Ð&7Ô8Ð8r3   c              ‹   óÐ   K  —  | j                   |f||| j                  dœ|¤Žƒ d{  –—† }t        t        |j                  ¬«      |j
                  ¬«      }t        |g¬«      S 7 Œ<­w)rŽ   r�   Nr&   r(   r�   )rŒ   r‚   r   r   rV   r*   r   r’   s          r1   Ú
_ageneratezChatOllama._agenerate0  sw   è ø€ ð0 @˜D×?Ñ?Øð
àØ#Ø—L‘Lñ	
ð
 ñ
÷ 
ˆô )Ü k×&6Ñ&6Ô7Ø'×7Ñ7ô
ˆô  Ð&7Ô8Ð8ð
ús   ‚%A&§A$¨=A&c              +   ó  K  — 	  | j                   ||fi |¤ŽD ]>  }|sŒt        |«      }|r(|j                  |j                  || j                  ¬«       |–— Œ@ y # t
        $ r   | j                  ||fi |¤ŽE d {  –—†7   Y y w xY w­w©Nr…   )r|   r   r‡   rV   r‚   r   Ú_legacy_stream©r<   ra   rA   r�   rB   r   r†   s          r1   Ú_streamzChatOllama._streamU  s•   è ø€ ð	EØ7˜t×7Ñ7¸À$ÑQÈ&ÔQ�ÚÜJÈ;ÓW�EÙ"Ø#×4Ñ4Ø!ŸJ™JØ"'Ø$(§L¡Lð 5ô ð
  “Kñ  Røô +ò 	EØ*�t×*Ñ*¨8°TÑD¸VÑD×DÓDð	Eüs9   ‚B„A ž;A ÁBÁ BÁ:A=Á;BÂ BÂBÂBc                óÜ   K  —  | j                   ||fi |¤Ž2 3 d {  –—† }|sŒt        |«      }|r0|j                  |j                  || j                  ¬«      ƒ d {  –—†  |­–— ŒO7 ŒJ7 Œ6 y ­wr˜   )r€   r   r‡   rV   r‚   rš   s          r1   Ú_astreamzChatOllama._astreamj  s}   è ø€ ð "; ×!:Ñ!:¸8ÀTÑ!TÈVÒ!T÷ 		�+ÚÜFÀ{ÓS�ÙØ%×6Ñ6ØŸ
™
Ø#Ø $§¡ð 7ó ÷ ð ð
 ”ð		øðøñ	 "Uùs<   ‚A,—A*›A&œA*ŸA,£8A,ÁA(Á
A,Á&A*Á(A,Á*A,r›   c              +   óØ   K  — | j                  |«      } | j                  ||fi |¤ŽD ]>  }|sŒt        |«      }|r(|j                  |j                  || j
                  ¬«       |–— Œ@ y ­wr˜   )re   Ú_create_generate_streamr2   r‡   rV   r‚   )r<   ra   rA   r�   rB   Úpromptr   r†   s           r1   r™   zChatOllama._legacy_stream|  sr   è ø€ ð ×.Ñ.¨xÓ8ˆØ7˜4×7Ñ7¸ÀÑOÈÔOˆKÚÜAÀ+ÓN�ÙØ×0Ñ0ØŸ
™
Ø#Ø $§¡ð 1ô ð
 “ñ Pùs
   ‚+A*®<A*)N)NNF)NN)%Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyrm   r=   ÚclassmethodÚboolr@   r   r   r   r   rR   r   r   r`   re   r   r	   rS   r   r|   r   r€   r   r   rŠ   r   rŒ   r   r”   r–   r›   r�   r™   r;   r3   r1   r9   r9   2   sè  „ ñ	ð ð˜3ò ó ðð ð 4ò ó ðð
 +/ñØ˜T #™YÑ'ðØ:=ðà	óñ" �Ð%KÔLð¨{ð ¸sò ó Mðð*
°°kÑ1Bð 
Àsó 
ð
=Ø˜[Ñ)ð=à	ˆd�3˜˜c 4¨¡9˜nÑ-Ð-Ñ.Ñ	/ó=ðD %)ñ
à�{Ñ#ð
ð �t˜C‘yÑ!ð
ð ð	
ð
 
�#‰ó
ð" %)ñà�{Ñ#ðð �t˜C‘yÑ!ðð ð	ð
 
�sÑ	óð$ %)Ø:>Øñà�{Ñ#ðð �t˜C‘yÑ!ðð Ð6Ñ7ð	ð
 ðð ðð 
óð< %)Ø?CØñà�{Ñ#ðð �t˜C‘yÑ!ðð Ð;Ñ<ð	ð
 ðð ðð 
óð< %)Ø:>ñ	#9à�{Ñ#ð#9ð �t˜C‘yÑ!ð#9ð Ð6Ñ7ð	#9ð
 ð#9ð 
ó#9ðP %)Ø?Cñ	#9à�{Ñ#ð#9ð �t˜C‘yÑ!ð#9ð Ð;Ñ<ð	#9ð
 ð#9ð 
ó#9ðP %)Ø:>ñ	Eà�{Ñ#ðEð �t˜C‘yÑ!ðEð Ð6Ñ7ð	Eð
 ðEð 
Ð%Ñ	&óEð0 %)Ø?Cñ	à�{Ñ#ðð �t˜C‘yÑ!ðð Ð;Ñ<ð	ð
 ðð 
Ð*Ñ	+óñ$ � YÔ/ð %)Ø:>ñ	à�{Ñ#ðð �t˜C‘yÑ!ðð Ð6Ñ7ð	ð
 ðð 
Ð%Ñ	&òó 0ñr3   r9   )$r,   Útypingr   r   r   r   r   r   r	   r
   Úlangchain_core._apir   Úlangchain_core.callbacksr   r   Ú*langchain_core.language_models.chat_modelsr   r   Úlangchain_core.messagesr   r   r   r   r   r   Úlangchain_core.outputsr   r   r   Úlangchain_community.llms.ollamar   r   rm   r2   r   r9   r;   r3   r1   Ú<module>r¯      s¥   ðÛ ß R× RÓ Rå *÷÷ V÷÷ ÷ SÑ Rç Vñ ˆGÐ!QÔRð	Øð	àò	ó Sð	ðØðàóñ Ø
ØØ4ôô
W� ó Wóñ
Wr3   