§
    æ˜ºhh3  ã                   ó  — d dl Z d dl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 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  G d„ dee¦  «        Z!dS )é    N)ÚAnyÚAsyncIteratorÚDictÚIteratorÚListÚOptionalÚUnion)Ú
deprecated)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseChatModel)Ú	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        | ¦  «        }|                     d¦  «        du r|nd}t          t	          |                     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      ún/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/chat_models/ollama.pyÚ)_stream_response_to_chat_generation_chunkr0      sm   € õ
 ”j Ñ1Ô1€OØ)8×)<Ò)<¸VÑ)DÔ)DÈÐ)LÐ)L�o�oÐRV€OÝÝ ×':Ò':¸:ÀrÑ'JÔ'JÐKÑKÔKØ'ðñ ô ð ó    c                 óî   — t          j        | ¦  «        }|                     d¦  «        du r|nd}t          t	          |                     di ¦  «                             dd¦  «        ¬¦  «        |¬¦  «        S )	r    r!   TNr'   r%   r#   r$   r&   r)   r-   s      r/   r   r   $   s†   € õ ”j Ñ1Ô1€OØ)8×)<Ò)<¸VÑ)DÔ)DÈÐ)LÐ)L�o�oÐRV€OÝÝØ#×'Ò'¨	°2Ñ6Ô6×:Ò:¸9ÀbÑIÔIð
ñ 
ô 
ð (ð	ñ ô ð r1   c                   ó  — e Zd ZdZedefd„¦   «         Z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"dS ) Ú
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                 ó   — dS )zReturn type of chat model.zollama-chat© )Úselfs    r/   Ú	_llm_typezChatOllama._llm_type>   s	   € ð ˆ}r1   c                 ó   — dS )z9Return whether this model can be serialized by Langchain.Fr6   )Úclss    r/   Úis_lc_serializablezChatOllama.is_lc_serializableC   s	   € ð ˆur1   r   Ú$_convert_messages_to_ollama_messagesr   r'   c                 ó:  — t          |t          ¦  «        r%d|j                             ¦   «         › d|j        › �}nàt          |t
          ¦  «        rz|j        d                              d¦  «        dk    rd|j        d         d         › d�}n�|j        d                              d¦  «        dk    r|j        d         d         d	         }nQt          |t          ¦  «        r	|j        › }n3t          |t          ¦  «        rd
|j        › d�}nt          d|› �¦  «        ‚|S )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   Ú
ValueError)r7   r'   Úmessage_texts      r/   Ú_format_message_as_textz"ChatOllama._format_message_as_textH   s#  € å�g�{Ñ+Ô+ð 	<ØP '¤,×"9Ò"9Ñ";Ô";ÐPÐP¸w¼ÐPÐPˆLˆLÝ˜¥Ñ.Ô.ð 
	<ØŒ˜qÔ!×%Ò% fÑ-Ô-°Ò7Ð7ØM¨¬¸Ô);¸FÔ)CÐMÐMÐM��Ø” Ô#×'Ò'¨Ñ/Ô/°;Ò>Ð>Ø&œ¨qÔ1°+Ô>¸uÔE�øÝ˜¥Ñ+Ô+ð 	<Ø%œoÐ/ˆLˆLÝ˜¥Ñ/Ô/ð 	<Ø@ g¤oÐ@Ð@Ð@ˆLˆLåÐ:°Ð:Ð:Ñ;Ô;Ð;ØÐr1   Úmessagesc                 óF   ‡ — d                      ˆ fd„|D ¦   «         ¦  «        S )Nú
c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r6   )rG   )Ú.0r'   r7   s     €r/   ú
<listcomp>z7ChatOllama._format_messages_as_text.<locals>.<listcomp>[   s'   ø€ ÐKÐKÐK°wˆT×)Ò)¨'Ñ2Ô2ÐKÐKÐKr1   )Újoin)r7   rH   s   ` r/   Ú_format_messages_as_textz#ChatOllama._format_messages_as_textY   s0   ø€ Ø�yŠyØKÐKÐKÐKÀ(ÐKÑKÔKñ
ô 
ð 	
r1   c                 ó4  — g }|D �]‘}d}t          |t          ¦  «        rd}n?t          |t          ¦  «        rd}n't          |t          ¦  «        rd}nt	          d¦  «        ‚d}g }t          |j        t          ¦  «        r|j        }nö|j        D ]î}|                     d¦  «        dk    r|d|d         › �z  }Œ*|                     d¦  «        d	k    r�t          |                     d	¦  «        t          ¦  «        rf|d	                              d
¦  «        }t          |¦  «        dk    r| 
                    |d         ¦  «         Œµ| 
                    |d         ¦  «         ŒÑt	          d¦  «        ‚t	          d¦  «        ‚| 
                    |||dœ¦  «         �Œ“|S )Nr#   ÚuserÚ	assistantÚsystemz-Received unsupported message type for Ollama.r>   r?   rJ   r@   ú,é   r   z2Only string image_url content parts are supported.zsUnsupported message content type. Must either have type 'text' or type 'image_url' with a string 'image_url' field.)rC   r%   Úimages)rB   r   r   r   rE   r%   Ústrr,   ÚsplitÚlenÚappend)	r7   rH   Úollama_messagesr'   rC   r%   rV   Úcontent_partÚimage_url_componentss	            r/   r<   z/ChatOllama._convert_messages_to_ollama_messages^   sì  € ð ˆØð -	ñ -	ˆGØˆDÝ˜'¥<Ñ0Ô0ð RØ��Ý˜G¥YÑ/Ô/ð RØ"��Ý˜G¥]Ñ3Ô3ð RØ��å Ð!PÑQÔQÐQàˆGØˆFÝ˜'œ/­3Ñ/Ô/ð Ø!œ/��à$+¤Oð ð �LØ#×'Ò'¨Ñ/Ô/°6Ò9Ð9ØÐ#>¨°VÔ(<Ð#>Ð#>Ñ>˜˜Ø%×)Ò)¨&Ñ1Ô1°[Ò@Ð@Ý% l×&6Ò&6°{Ñ&CÔ&CÅSÑIÔIð Ø3?ÀÔ3L×3RÒ3RÐSVÑ3WÔ3WÐ0õ  #Ð#7Ñ8Ô8¸1Ò<Ð<Ø &§¢Ð.BÀ1Ô.EÑ FÔ FÐ FÐ Fà &§¢Ð.BÀ1Ô.EÑ FÔ FÐ FÐ Få",Ø Wñ#ô #ð õ )ð?ñô ð ð ×"Ò"à Ø&Ø$ðð ñô ð ñ ð Ðr1   NÚstopÚkwargsc              +   óv   K  — d|                       |¦  «        i} | j        d||| j        › d�dœ|¤ŽE d {V —† d S ©NrH   z
/api/chat/)Úpayloadr^   Úapi_urlr6   )r<   Ú_create_streamÚbase_url)r7   rH   r^   r_   rb   s        r/   Ú_create_chat_streamzChatOllama._create_chat_stream“   s‡   è è € ð ˜×AÒAÀ(ÑKÔKð
ˆð '�4Ô&ð 
Ø $°4´=Ð0LÐ0LÐ0Lð
ð 
ØPVð
ð 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r1   c                ó†   K  — d|                       |¦  «        i} | j        d||| j        › d�dœ|¤Ž2 3 d {V —†}|W V — Œ6 d S ra   )r<   Ú_acreate_streamre   )r7   rH   r^   r_   rb   Ústream_resps         r/   Ú_acreate_chat_streamzChatOllama._acreate_chat_stream    s¢   è è € ð ˜×AÒAÀ(ÑKÔKð
ˆð "6 Ô!5ð "
Ø $°4´=Ð0LÐ0LÐ0Lð"
ð "
ØPVð"
ð "
ð 	ð 	ð 	ð 	ð 	ð 	ð 	�+ð ÐÐÐÐÐð"
ð "
ð "
s   ³A FÚrun_managerÚverbosec                 óÂ   — d } | j         ||fi |¤ŽD ];}|r7t          |¦  «        }|€|}n||z  }|r|                     |j        |¬¦  «         Œ<|€t	          d¦  «        ‚|S ©N©rl   z$No data received from Ollama stream.)rf   r   Úon_llm_new_tokenr?   rE   ©	r7   rH   r^   rk   rl   r_   Úfinal_chunkri   Úchunks	            r/   Ú_chat_stream_with_aggregationz(ChatOllama._chat_stream_with_aggregation®   s¦   € ð 6:ˆØ3˜4Ô3°H¸dÐMÐMÀfÐMÐMð 	ð 	ˆKØð 
ÝFÀ{ÑSÔS�ØÐ&Ø"'�K�Kà 5Ñ(�KØð Ø×0Ò0Øœ
Ø 'ð 1ñ ô ð øð ÐÝÐCÑDÔDÐDàÐr1   c              ‹   óÞ   K  — d } | j         ||fi |¤Ž2 3 d {V —†}|r=t          |¦  «        }|€|}n||z  }|r"|                     |j        |¬¦  «        ƒ d {V —† ŒG6 |€t	          d¦  «        ‚|S rn   )rj   r   rp   r?   rE   rq   s	            r/   Ú_achat_stream_with_aggregationz)ChatOllama._achat_stream_with_aggregationÈ   sç   è è € ð 6:ˆØ!: Ô!:¸8ÀTÐ!TÐ!TÈVÐ!TÐ!Tð 	ð 	ð 	ð 	ð 	ð 	ð 	�+Øð 
ÝFÀ{ÑSÔS�ØÐ&Ø"'�K�Kà 5Ñ(�KØð Ø%×6Ò6Øœ
Ø 'ð 7ñ ô ð ð ð ð ð ð ð øð "Uð ÐÝÐCÑDÔDÐDàÐs   ”A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")
                ])
        ©r^   rk   rl   r$   r&   ©Úgenerations)rt   rl   r   r   r?   r(   r   ©r7   rH   r^   rk   r_   rr   Úchat_generations          r/   Ú	_generatezChatOllama._generateâ   s}   € ð0 9�dÔ8Øð
àØ#Ø”Lð	
ð 
ð
 ð
ð 
ˆõ )Ý kÔ&6Ð7Ñ7Ô7Ø'Ô7ð
ñ 
ô 
ˆõ  Ð&7Ð8Ñ8Ô8Ð8r1   c              ‹   ó´   K  —  | j         |f||| j        dœ|¤Žƒ d{V —†}t          t          |j        ¬¦  «        |j        ¬¦  «        }t          |g¬¦  «        S )rx   ry   Nr$   r&   rz   )rv   rl   r   r   r?   r(   r   r|   s          r/   Ú
_ageneratezChatOllama._agenerate  s    è è € ð0 @˜DÔ?Øð
àØ#Ø”Lð	
ð 
ð
 ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ˆõ )Ý kÔ&6Ð7Ñ7Ô7Ø'Ô7ð
ñ 
ô 
ˆõ  Ð&7Ð8Ñ8Ô8Ð8r1   c              +   óì   K  — 	  | j         ||fi |¤ŽD ]:}|r6t          |¦  «        }|V — |r!|                     |j        | j        ¬¦  «         Œ;d S # t
          $ r  | j        ||fi |¤ŽE d {V —† Y d S w xY w©Nro   )rf   r   rp   r?   rl   r   Ú_legacy_stream©r7   rH   r^   rk   r_   ri   rs   s          r/   Ú_streamzChatOllama._stream,  sã   è è € ð	EØ7˜tÔ7¸À$ÐQÐQÈ&ÐQÐQð ð �Øð ÝJÈ;ÑWÔW�EØ�K�K�KØ"ð Ø#×4Ò4Ø!œJØ$(¤Lð 5ñ ô ð øðð øõ +ð 	Eð 	Eð 	EØ*�tÔ*¨8°TÐDÐD¸VÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDð	Eøøøs   „A
A ÁA3Á2A3c                ó  K  — 	  | j         ||fi |¤Ž2 3 d {V —†}|r=t          |¦  «        }|W V — |r'|                     |j        | j        ¬¦  «        ƒ d {V —† ŒG6 d S # t
          $ r!  | j        ||fi |¤Ž2 3 d {V —†}|W V — Œ6 Y d S w xY wr‚   )rj   r   rp   r?   rl   r   Ú_legacy_astreamr„   s          r/   Ú_astreamzChatOllama._astream@  sK  è è € ð	Ø%> TÔ%>Ø˜$ð&ð &Ø"(ð&ð &ð 
ð 
ð 
ð 
ð 
ð 
ð 
�kð ð ÝJÈ;ÑWÔW�EØ�K�K�K�KØ"ð Ø)×:Ò:Ø!œJØ$(¤Lð ;ñ ô ð ð ð ð ð ð ð øð&ð &ð &øõ +ð 	ð 	ð 	Ø3˜tÔ3°H¸dÐMÐMÀfÐMÐMð ð ð ð ð ð ð �eØ�����ð  NÐMÐMÐMð	øøøs(   „A “A™AA ÁBÁ6BÁ<BÂBr…   c              +   óÈ   K  — |                       |¦  «        } | j        ||fi |¤ŽD ]:}|r6t          |¦  «        }|V — |r!|                     |j        | j        ¬¦  «         Œ;d S r‚   )rO   Ú_create_generate_streamr0   rp   r?   rl   )r7   rH   r^   rk   r_   Úpromptri   rs   s           r/   rƒ   zChatOllama._legacy_streamW  s™   è è € ð ×.Ò.¨xÑ8Ô8ˆØ7˜4Ô7¸ÀÐOÐOÈÐOÐOð 	ð 	ˆKØð ÝAÀ+ÑNÔN�Ø���Øð Ø×0Ò0Øœ
Ø $¤ð 1ñ ô ð øð	ð 	r1   )N)NNF)NN)#Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚpropertyrW   r8   ÚclassmethodÚboolr;   r
   r   rG   r   rO   r   r	   r<   r   r   r   rf   r   rj   r   r   rt   r   rv   r   r~   r€   r…   rˆ   rƒ   r6   r1   r/   r4   r4   2   sÝ  € € € € € ð	ð 	ð ð˜3ð ð ð ñ „Xðð ð 4ð ð ð ñ „[ðð €Z�Ð%KÐLÑLÔLð¨{ð ¸sð ð ð ñ MÔLðð 
°°kÔ1Bð 
Àsð 
ð 
ð 
ð 
ð
3Ø˜[Ô)ð3à	ˆd�3˜˜c 4¨¤9˜nÔ-Ð-Ô.Ô	/ð3ð 3ð 3ð 3ðp %)ð
ð 
à�{Ô#ð
ð �t˜C”yÔ!ð
ð ð	
ð
 
�#Œð
ð 
ð 
ð 
ð  %)ðð à�{Ô#ðð �t˜C”yÔ!ðð ð	ð
 
�sÔ	ðð ð ð ð" %)Ø:>Øðð à�{Ô#ðð �t˜C”yÔ!ðð Ð6Ô7ð	ð
 ðð ðð 
ðð ð ð ð: %)Ø?CØðð à�{Ô#ðð �t˜C”yÔ!ðð Ð;Ô<ð	ð
 ðð ðð 
ðð ð ð ð: %)Ø:>ð	#9ð #9à�{Ô#ð#9ð �t˜C”yÔ!ð#9ð Ð6Ô7ð	#9ð
 ð#9ð 
ð#9ð #9ð #9ð #9ðP %)Ø?Cð	#9ð #9à�{Ô#ð#9ð �t˜C”yÔ!ð#9ð Ð;Ô<ð	#9ð
 ð#9ð 
ð#9ð #9ð #9ð #9ðP %)Ø:>ð	Eð Eà�{Ô#ðEð �t˜C”yÔ!ðEð Ð6Ô7ð	Eð
 ðEð 
Ð%Ô	&ðEð Eð Eð Eð. %)Ø?Cð	ð à�{Ô#ðð �t˜C”yÔ!ðð Ð;Ô<ð	ð
 ðð 
Ð*Ô	+ðð ð ð ð. €Z� YÐ/Ñ/Ô/ð %)Ø:>ð	ð à�{Ô#ðð �t˜C”yÔ!ðð Ð6Ô7ð	ð
 ðð 
Ð%Ô	&ðð ð ñ 0Ô/ðð ð r1   r4   )"r*   Útypingr   r   r   r   r   r   r	   Úlangchain_core._apir
   Úlangchain_core.callbacksr   r   Ú*langchain_core.language_models.chat_modelsr   Úlangchain_core.messagesr   r   r   r   r   r   Úlangchain_core.outputsr   r   r   Úlangchain_community.llms.ollamar   r   rW   r0   r   r4   r6   r1   r/   ú<module>rš      sÂ  ðØ €€€Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ Là *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð ð ð ð ð EÐ DÐ DÐ DÐ DÐ Dðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rà VÐ VÐ VÐ VÐ VÐ VÐ VÐ Vð €ˆGÐ!QÐRÑRÔRð	Øð	àð	ð 	ð 	ñ SÔRð	ðØðàðð ð ð ðvð vð vð vð v� ñ vô vð vð vð vr1   