§
    šŠtjL%  ã                   ó  — d dl Z d dlZd dl mZ d dlmZ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 d dlmZmZmZ d dlmZmZmZ d dlmZmZmZ d d	lmZ d d
lmZm Z m!Z! de"de"fd„Z#dee         dee"ef         fd„Z$ G d„ de¦  «        Z%dS )é    N)ÚJSONDecodeError)ÚAnyÚAsyncIteratorÚDictÚIteratorÚListÚOptional)ÚClientSession)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseChatModelÚagenerate_from_streamÚgenerate_from_stream)Ú	AIMessageÚAIMessageChunkÚBaseMessage)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)Úconvert_to_secret_str)Ú
ConfigDictÚFieldÚ	SecretStrÚroleÚreturnc                 óJ   — ddddœ}| |v r||          S t          d| › �¦  «        ‚)NÚ	assistantÚhuman)Úair   ÚchatzUnknown role type: )Ú
ValueError)r   Úmaps     úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/chat_models/symblai_nebula.pyÚ_convert_roler$      s;   € Ø w¸Ð
@Ð
@€CØˆs€{€{Ø�4ŒyÐåÐ5¨tÐ5Ð5Ñ6Ô6Ð6ó    Úmessagesc                 óN  — d}g }| d d…         D ]m}|j         dk    r1t          |j        t          ¦  «        r|j        }Œ/t	          d¦  «        ‚|                     t          |j         ¦  «        |j        dœ¦  «         Œn| d         j        }|                     d|dœ¦  «         ||dœS )NÚ éÿÿÿÿÚsystemzSystem prompt must be a string)r   Útextr   )Úsystem_promptr&   )ÚtypeÚ
isinstanceÚcontentÚstrr!   Úappendr$   )r&   r*   Úformatted_messagesÚmessager+   s        r#   Ú_format_nebula_messagesr4      sÐ   € Ø€FØÐØ˜C˜R˜C”=ð ð ˆØŒ<˜8Ò#Ð#Ý˜'œ/­3Ñ/Ô/ð CØ œ��å Ð!AÑBÔBÐBà×%Ò%å)¨'¬,Ñ7Ô7Ø#œOðð ñô ð ð ð �BŒ<Ô€DØ×Ò w¸Ð=Ð=Ñ>Ô>Ð>Ø#Ð1CÐDÐDÐDr%   c                   óX  ‡ — e Zd ZU dZdZeed<   	 dZee	         ed<   	 dZ
eed<   dZeed	<    ed
d¬¦  «        Zee         ed<    edd¬¦  «        Zdedd
fˆ fd„Zedefd„¦   «         Z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 	 	 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#ˆ xZ$S )Ú
ChatNebulaam  `Nebula` chat large language model - https://docs.symbl.ai/docs/nebula-llm

    API Reference: https://docs.symbl.ai/reference/nebula-chat

    To use, set the environment variable ``NEBULA_API_KEY``,
    or pass it as a named parameter to the constructor.
    To request an API key, visit https://platform.symbl.ai/#/login
    Example:
        .. code-block:: python

            from langchain_community.chat_models import ChatNebula
            from langchain_core.messages import SystemMessage, HumanMessage

            chat = ChatNebula(max_new_tokens=1024, temperature=0.5)

            messages = [
            SystemMessage(
                content="You are a helpful assistant."
            ),
            HumanMessage(
                "Answer the following question. How can I help save the world."
            ),
            ]
            chat.invoke(messages)
    i   Úmax_new_tokensr   ÚtemperatureFÚ	streamingzhttps://api-nebula.symbl.aiÚnebula_api_urlNzNebula API Token)ÚdescriptionÚnebula_api_keyT)Úpopulate_by_nameÚarbitrary_types_allowedÚkwargsr   c                 óì   •— d|v r#t          |                     d¦  «        ¦  «        }n0dt          j        v r t          t          j        d         ¦  «        }nd } t	          ¦   «         j        dd|i|¤Ž d S )Nr<   ÚNEBULA_API_KEY© )r   ÚpopÚosÚenvironÚsuperÚ__init__)Úselfr?   Úapi_keyÚ	__class__s      €r#   rG   zChatNebula.__init__a   s{   ø€ Ø˜vÐ%Ð%Ý+¨F¯JªJÐ7GÑ,HÔ,HÑIÔIˆGˆGØ¥¤Ð+Ð+Ý+­B¬JÐ7GÔ,HÑIÔIˆGˆGàˆGØ�‰ŒÔÐ:Ð:¨Ð:°6Ð:Ð:Ð:Ð:Ð:r%   c                 ó   — dS )zReturn type of chat model.znebula-chatrB   ©rH   s    r#   Ú	_llm_typezChatNebula._llm_typej   s	   € ð ˆ}r%   c                 óF   — | j         r| j                              ¦   «         S dS )Nr(   )r<   Úget_secret_valuerL   s    r#   Ú_api_keyzChatNebula._api_keyo   s'   € àÔð 	:ØÔ&×7Ò7Ñ9Ô9Ð9Øˆrr%   r&   ÚstopÚrun_managerc              +   ón  K  — | j         › d�}| j        ddœ}t          |¬¦  «        }| j        | j        dœ|¥|¥}d„ |                     ¦   «         D ¦   «         }t          j        |¦  «        }	t          j	        d|||	d¬	¦  «        }
|
 
                    ¦   «          |
                     ¦   «         D ]‡}|                     ¦   «         d
d…         }	 t          j        |¦  «        }n# t          $ r Y Œ@w xY w|d         }t          t!          |¬¦  «        ¬¦  «        }|r|                     ||¬¦  «         |V — ŒˆdS )z#Call out to Nebula's chat endpoint.ú/v1/model/chat/streamingúapplication/json©ÚApiKeyzContent-Type©r&   ©r7   r8   c                 ó   — i | ]
\  }}|®||“ŒS ©NrB   ©Ú.0ÚkÚvs      r#   ú
<dictcomp>z&ChatNebula._stream.<locals>.<dictcomp>Š   ó   € ÐEÐEÐE™D˜A˜q°q°}�1�a°}°}°}r%   ÚPOSTT)ÚheadersÚdataÚstreamé   NÚdelta©r/   ©r3   ©Úchunk)r:   rP   r4   r7   r8   ÚitemsÚjsonÚdumpsÚrequestsÚrequestÚraise_for_statusÚ
iter_linesÚdecodeÚloadsr   r   r   Úon_llm_new_token)rH   r&   rQ   rR   r?   Úurlrc   Úformatted_dataÚpayloadÚjson_payloadÚresponseÚchunk_responseÚchunk_decodedrk   ÚtokenÚcg_chunks                   r#   Ú_streamzChatNebula._streamu   s”  è è € ð Ô$Ð>Ð>Ð>ˆà”mØ.ð
ð 
ˆõ 1¸(ÐCÑCÔCˆà"Ô1ØÔ+ð#
ð #
ð ð#
ð ð	#
ˆð FÐE G§M¢M¡O¤OÐEÑEÔEˆÝ”z 'Ñ*Ô*ˆåÔ#Ø�C ¨|ÀDð
ñ 
ô 
ˆð 	×!Ò!Ñ#Ô#Ð#à&×1Ò1Ñ3Ô3ð 
	ð 
	ˆNØ*×1Ò1Ñ3Ô3°A°B°BÔ7ˆMðÝœ
 =Ñ1Ô1��øÝ"ð ð ð Ø�ðøøøà˜'”NˆEÝ*µ>È%Ð3PÑ3PÔ3PÐQÑQÔQˆHØð DØ×,Ò,¨U¸(Ð,ÑCÔCÐCØˆNˆNˆNˆNð
	ð 
	s   ÃC!Ã!
C.Ã-C.c                ó8  K  — | j         › d�}| j        ddœ}t          |¬¦  «        }| j        | j        dœ|¥|¥}d„ |                     ¦   «         D ¦   «         }t          j        |¦  «        }	t          ¦   «         4 ƒd {V —†}
|
 	                    ||	|d¬¦  «        4 ƒd {V —†	 }| 
                    ¦   «          |j        2 3 d {V —†}|                     ¦   «         d	d …         }	 t          j        |¦  «        }n# t          $ r Y ŒEw xY w|d
         }t          t!          |¬¦  «        ¬¦  «        }|r|                     ||¬¦  «        ƒ d {V —† |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   rU   rV   rX   rY   c                 ó   — i | ]
\  }}|®||“ŒS r[   rB   r\   s      r#   r`   z'ChatNebula._astream.<locals>.<dictcomp>¯   ra   r%   T)rd   rc   re   rf   rg   rh   ri   rj   )r:   rP   r4   r7   r8   rl   rm   rn   r
   Úpostrq   r/   rs   rt   r   r   r   ru   )rH   r&   rQ   rR   r?   rv   rc   rw   rx   ry   Úsessionrz   r{   r|   rk   r}   r~   s                    r#   Ú_astreamzChatNebula._astreamž   s.  è è € ð Ô$Ð>Ð>Ð>ˆØ!œ]Ð<NÐOÐOˆÝ0¸(ÐCÑCÔCˆà"Ô1ØÔ+ð#
ð #
ð ð#
ð ð	#
ˆð FÐE G§M¢M¡O¤OÐEÑEÔEˆÝ”z 'Ñ*Ô*ˆå ‘?”?ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	# gØ—|’|Ø˜,°Àð $ñ ô ð #ð #ð #ð #ð #ð #ð #ð #àØ×)Ò)Ñ+Ô+Ð+Ø,4Ô,<ð #ð #ð #ð #ð #ð #ð #˜.Ø$2×$9Ò$9Ñ$;Ô$;¸A¸B¸BÔ$?�Mð!Ý $¤
¨=Ñ 9Ô 9˜˜øÝ*ð !ð !ð !Ø ˜ð!øøøà! 'œN�EÝ2Ý .°uÐ =Ñ =Ô =ð ñ  ô  �Hð #ð RØ)×:Ò:¸5ÈÐ:ÑQÔQÐQÐQÐQÐQÐQÐQÐQØ"�N�N�N�N�Nð -=Ð,<ð	#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #ð #ð #ð #ð #ð #ð #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#sg   Â  F	Â!E%Â=EÃE%Ã!C6Ã5E%Ã6
D	Ä E%ÄD	ÄAE%ÅF	Å%
E/	Å/F	Å2E/	Å3F	Æ	
FÆFc                 ó
  — | j         r  | j        |f||dœ|¤Ž}t          |¦  «        S | j        › d�}| j        ddœ}t          |¬¦  «        }| j        | j        dœ|¥|¥}	d„ |	                     ¦   «         D ¦   «         }	t          j
        |	¦  «        }
t          j        d|||
¬	¦  «        }|                     ¦   «          | 	                    ¦   «         }t          t          t!          |d
         ¬¦  «        ¬¦  «        g|¬¦  «        S )N©rQ   rR   ú/v1/model/chatrU   rV   rX   rY   c                 ó   — i | ]
\  }}|®||“ŒS r[   rB   r\   s      r#   r`   z(ChatNebula._generate.<locals>.<dictcomp>Ü   ra   r%   rb   )rc   rd   r&   rh   ri   ©ÚgenerationsÚ
llm_output)r9   r   r   r:   rP   r4   r7   r8   rl   rm   rn   ro   rp   rq   r   r   r   )rH   r&   rQ   rR   r?   Ústream_iterrv   rc   rw   rx   ry   rz   rd   s                r#   Ú	_generatezChatNebula._generateÅ   sH  € ð Œ>ð 	5Ø&˜$œ,ØðØ#°ðð Ø@Fðð ˆKõ (¨Ñ4Ô4Ð4àÔ$Ð4Ð4Ð4ˆØ!œ]Ð<NÐOÐOˆÝ0¸(ÐCÑCÔCˆà"Ô1ØÔ+ð#
ð #
ð ð#
ð ð	#
ˆð FÐE G§M¢M¡O¤OÐEÑEÔEˆÝ”z 'Ñ*Ô*ˆåÔ# F¨C¸À|ÐTÑTÔTˆØ×!Ò!Ñ#Ô#Ð#Ø�}Š}‰ŒˆåÝ'µ	À$ÀzÔBRÐ0SÑ0SÔ0SÐTÑTÔTÐUØð
ñ 
ô 
ð 	
r%   c           
   ‹   ó  K  — | j         r& | j        |f||dœ|¤Ž}t          |¦  «        ƒ d {V —†S | j        › d�}| j        ddœ}t          |¬¦  «        }| j        | j        dœ|¥|¥}	d„ |	                     ¦   «         D ¦   «         }	t          j
        |	¦  «        }
t          ¦   «         4 ƒd {V —†}|                     ||
|¬¦  «        4 ƒd {V —†	 }|                     ¦   «          | 	                    ¦   «         ƒ d {V —†}t          t          t!          |d	         ¬
¦  «        ¬¦  «        g|¬¦  «        cd d d ¦  «        ƒd {V —† cd d d ¦  «        ƒd {V —† S # 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 )Nr†   r‡   rU   rV   rX   rY   c                 ó   — i | ]
\  }}|®||“ŒS r[   rB   r\   s      r#   r`   z)ChatNebula._agenerate.<locals>.<dictcomp>ÿ   ra   r%   )rd   rc   r&   rh   ri   r‰   )r9   r„   r   r:   rP   r4   r7   r8   rl   rm   rn   r
   r‚   rq   r   r   r   )rH   r&   rQ   rR   r?   rŒ   rv   rc   rw   rx   ry   rƒ   rz   rd   s                 r#   Ú
_ageneratezChatNebula._agenerateè   s8  è è € ð Œ>ð 	<Ø'˜$œ-ØðØ#°ðð Ø@Fðð ˆKõ /¨{Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;àÔ$Ð4Ð4Ð4ˆØ!œ]Ð<NÐOÐOˆÝ0¸(ÐCÑCÔCˆà"Ô1ØÔ+ð#
ð #
ð ð#
ð ð	#
ˆð FÐE G§M¢M¡O¤OÐEÑEÔEˆÝ”z 'Ñ*Ô*ˆå ‘?”?ð 	ð 	ð 	ð 	ð 	ð 	ð 	 gØ—|’|Ø˜,°ð $ñ ô ð ð ð ð ð ð ð ð àØ×)Ò)Ñ+Ô+Ð+Ø%Ÿ]š]™_œ_Ð,Ð,Ð,Ð,Ð,Ð,�å!å&­yÀÀjÔAQÐ/RÑ/RÔ/RÐSÑSÔSð!ð  $ð	ñ ô ðð ð ð ñ ô ð ð ð ð ð ð ð ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð ð øøøð ð ð ð ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s7   Â-E9ÃA"EÄ/E9Å
E	ÅE9Å!E	Å"E9Å9
FÆF)NN)%Ú__name__Ú
__module__Ú__qualname__Ú__doc__r7   ÚintÚ__annotations__r8   r	   Úfloatr9   Úboolr:   r0   r   r<   r   r   Úmodel_configr   rG   ÚpropertyrM   rP   r   r   r   r   r   r   r   r   r„   r   r�   r�   Ú__classcell__)rJ   s   @r#   r6   r6   5   sÕ  ø€ € € € € € ðð ð4 €N�CÐÐÑØAà#$€K�˜%”Ð$Ð$Ñ$ØQà€IˆtÐÐÑà7€N�CÐ7Ð7Ñ7à*/¨%°ÐBTÐ*UÑ*UÔ*U€N�H˜YÔ'ÐUÐUÑUà�:ØØ $ðñ ô €Lð
; ð ;¨ð ;ð ;ð ;ð ;ð ;ð ;ð ð˜3ð ð ð ñ „Xðð ð˜#ð ð ð ñ „Xðð %)Ø:>ð	'ð 'à�{Ô#ð'ð �t˜C”yÔ!ð'ð Ð6Ô7ð	'ð
 ð'ð 
Ð%Ô	&ð'ð 'ð 'ð 'ðX %)Ø?Cð	%#ð %#à�{Ô#ð%#ð �t˜C”yÔ!ð%#ð Ð;Ô<ð	%#ð
 ð%#ð 
Ð*Ô	+ð%#ð %#ð %#ð %#ðT %)Ø:>ð	!
ð !
à�{Ô#ð!
ð �t˜C”yÔ!ð!
ð Ð6Ô7ð	!
ð
 ð!
ð 
ð!
ð !
ð !
ð !
ðL %)Ø?Cð	&ð &à�{Ô#ð&ð �t˜C”yÔ!ð&ð Ð;Ô<ð	&ð
 ð&ð 
ð&ð &ð &ð &ð &ð &ð &ð &r%   r6   )&rm   rD   r   Útypingr   r   r   r   r   r	   ro   Úaiohttpr
   Úlangchain_core.callbacksr   r   Ú*langchain_core.language_models.chat_modelsr   r   r   Úlangchain_core.messagesr   r   r   Úlangchain_core.outputsr   r   r   Úlangchain_core.utilsr   Úpydanticr   r   r   r0   r$   r4   r6   rB   r%   r#   ú<module>r¤      sÒ  ðØ €€€Ø 	€	€	€	Ø  Ð  Ð  Ð  Ð  Ð  Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eà €€€Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
 KÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1ð7˜ð 7 ð 7ð 7ð 7ð 7ðE d¨;Ô&7ð E¸DÀÀcÀ¼Nð Eð Eð Eð Eð,Yð Yð Yð Yð Y�ñ Yô Yð Yð Yð Yr%   