
    dhL%                     
   S SK r S SKrS SK Jr  S SKJrJrJrJrJrJ	r	  S SK
r
S SKJr  S SKJrJr  S SKJrJrJr  S SKJrJrJr  S SKJrJrJr  S S	KJr  S S
KJrJ r J!r!  S\"S\"4S jr#S\\   S\\"\4   4S jr$ " S S\5      r%g)    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                 <    SSSS.nX;   a  X   $ [        SU  35      e)N	assistanthuman)air   chatzUnknown role type: )
ValueError)r   maps     f/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/symblai_nebula.py_convert_roler$      s.    w
@C{y.tf566    messagesc                 b   Sn/ nU S S  H|  nUR                   S:X  a8  [        UR                  [        5      (       a  UR                  nM@  [	        S5      eUR                  [        UR                   5      UR                  S.5        M~     U S   R                  nUR                  SUS.5        X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CR=<<8#'//3//  !ABB%%)',,7#OO ! B<Dw=>#DDr%   c                     ^  \ rS rSr% SrSr\\S'    Sr\	\
   \S'    Sr\\S'   S	r\\S
'   \" SSS9r\	\   \S'   \" SSS9rS\SS4U 4S jjr\S\4S j5       r\S\4S j5       r  SS\\   S\	\\      S\	\   S\S\\   4
S jjr  SS\\   S\	\\      S\	\   S\S\ \   4
S jjr!  SS\\   S\	\\      S\	\   S\S\"4
S jjr#  SS\\   S\	\\      S\	\   S\S\"4
S jjr$Sr%U =r&$ )
ChatNebula5   a!  `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                    > SU;   a  [        UR                  S5      5      nO3S[        R                  ;   a  [        [        R                  S   5      nOS n[        TU ]  " SSU0UD6  g )Nr=   NEBULA_API_KEY )r   poposenvironsuper__init__)selfr@   api_key	__class__s      r#   rH   ChatNebula.__init__a   sY    v%+FJJ7G,HIG++BJJ7G,HIGG::6:r%   c                     g)zReturn type of chat model.znebula-chatrC   rI   s    r#   	_llm_typeChatNebula._llm_typej   s     r%   c                 Z    U R                   (       a  U R                   R                  5       $ g)Nr(   )r=   get_secret_valuerN   s    r#   _api_keyChatNebula._api_keyo   s#    &&7799r%   r&   stoprun_managerc              +   n  #    U R                    S3nU R                  SS.n[        US9nU R                  U R                  S.UEUEnUR                  5        V	V
s0 sH  u  pU
c  M
  X_M     nn	n
[        R                  " U5      n[        R                  " SXVUSS	9nUR                  5         UR                  5        H]  nUR                  5       S
S n [        R                  " U5      nUS   n[        [!        US9S9nU(       a  UR#                  UUS9  Uv   M_     gs  sn
n	f ! [         a     Mu  f = f7f)z#Call out to Nebula's chat endpoint./v1/model/chat/streamingapplication/jsonApiKeyzContent-Typer&   r8   r9   NPOSTT)headersdatastream   deltar/   r3   chunk)r;   rS   r4   r8   r9   itemsjsondumpsrequestsrequestraise_for_status
iter_linesdecodeloadsr   r   r   on_llm_new_token)rI   r&   rU   rV   r@   urlr_   formatted_datapayloadkvjson_payloadresponsechunk_responsechunk_decodedrg   tokencg_chunks                     r#   _streamChatNebula._streamu   sG     $$%%=>mm.
 1(C"11++#
 #
 	#
 %,MMOEODAq414OEzz'*##C|D
 	!!#&113N*113AB7M

=1 'NE*>%3PQH,,U(,CN 4 F # s=   AD5D&D,A&D5D$);D5$
D2.D51D22D5c           	     l  #    U R                    S3nU R                  SS.n[        US9nU R                  U R                  S.UEUEnUR                  5        V	V
s0 sH  u  pU
c  M
  X_M     nn	n
[        R                  " U5      n[        5        IS h  vN nUR                  X[USS9 IS h  vN nUR                  5         UR                    S h  vN nUR                  5       SS  n [        R                  " U5      nUS	   n[        [!        US
9S9nU(       a  UR#                  UUS9I S h  vN   U7v   Mn  s  sn
n	f  N N Ns! [         a     M  f = f N(
 S S S 5      IS h  vN    O! , IS h  vN  (       d  f       O= fS S S 5      IS h  vN    g ! , IS h  vN  (       d  f       g = f7f)NrX   rY   rZ   r\   r]   T)r`   r_   ra   rb   rc   rd   re   rf   )r;   rS   r4   r8   r9   rh   ri   rj   r
   postrm   r/   ro   rp   r   r   r   rq   )rI   r&   rU   rV   r@   rr   r_   rs   rt   ru   rv   rw   sessionrx   ry   rz   rg   r{   r|   s                      r#   _astreamChatNebula._astream   s     $$%%=>!]]<NO0(C"11++#
 #
 	#
 %,MMOEODAq414OEzz'* ??g|| $  ))+,4,<,< #.$2$9$9$;AB$?M! $

= 9 "'NE2 .u = H #)::5:QQQ"N) F ## + ! ! R -=	      #?????s   AF4D<&D<,'F4EF4F-E.F1E.EE
EE.+E/E.0E
1E.<F4FE
E	E.E	E.E.F'E*(F.F	4E75F	FF4FF4F1 F#!F1-F4c                    U R                   (       a   U R                  " U4X#S.UD6n[        U5      $ U R                   S3nU R                  SS.n[        US9nU R                  U R                  S.UEUEn	U	R                  5        V
Vs0 sH  u  pUc  M
  X_M     n	n
n[        R                  " U	5      n[        R                  " SXgUS9nUR                  5         UR                  5       n[        [        [!        US	   S
9S9/US9$ s  snn
f )NrU   rV   /v1/model/chatrY   rZ   r\   r]   r^   )r_   r`   r&   rd   re   generations
llm_output)r:   r}   r   r;   rS   r4   r8   r9   rh   ri   rj   rk   rl   rm   r   r   r   )rI   r&   rU   rV   r@   stream_iterrr   r_   rs   rt   ru   rv   rw   rx   r`   s                  r#   	_generateChatNebula._generate   s    >>,,#@FK (44$$%^4!]]<NO0(C"11++#
 #
 	#
 %,MMOEODAq414OEzz'*##FC|T!!#}}'	$zBR0STU
 	
 Fs   	DDc           
      V  #    U R                   (       a(  U R                  " U4X#S.UD6n[        U5      I S h  vN $ U R                   S3nU R                  SS.n[        US9nU R                  U R                  S.UEUEn	U	R                  5        V
Vs0 sH  u  pUc  M
  X_M     n	n
n[        R                  " U	5      n[        5        IS h  vN nUR                  XlUS9 IS h  vN nUR                  5         UR                  5       I S h  vN n[        [        [!        US   S	9S
9/US9sS S S 5      IS h  vN   sS S S 5      IS h  vN   $  GNs  snn
f  N Nu NO N% N! , IS h  vN  (       d  f       O= fS S S 5      IS h  vN    g ! , IS h  vN  (       d  f       g = f7f)Nr   r   rY   rZ   r\   r]   )r`   r_   r&   rd   re   r   )r:   r   r   r;   rS   r4   r8   r9   rh   ri   rj   r
   r   rm   r   r   r   )rI   r&   rU   rV   r@   r   rr   r_   rs   rt   ru   rv   rw   r   rx   r`   s                   r#   
_agenerateChatNebula._agenerate   s     >>--#@FK /{;;;$$%^4!]]<NO0(C"11++#
 #
 	#
 %,MMOEODAq414OEzz'* ??g|| $  ))+%]]_,!&yjAQ/RS!  $	   #?? < F # -	 #   #?????s   5F)EAF)EE%'F)EF)F%E&F)$E#EE#-F9E:F>F)
E!F)F)FE#F!F)#E:	)E,*E:	6F=F)F	F)F&FF&"F)rC   )NN)'__name__
__module____qualname____firstlineno____doc__r8   int__annotations__r9   r	   floatr:   boolr;   r0   r   r=   r   r   model_configr   rH   propertyrO   rS   r   r   r   r   r   r}   r   r   r   r   r   r   __static_attributes____classcell__)rK   s   @r#   r6   r6   5   s   4 NCA#$K%$QIt7NC7*/BT*UNHY'U $L
; ; ; 3   #   %):>	'{#' tCy!' 67	'
 ' 
%	&'X %)?C	%#{#%# tCy!%# ;<	%#
 %# 
*	+%#T %):>	!
{#!
 tCy!!
 67	!

 !
 
!
L %)?C	&{#& tCy!& ;<	&
 & 
& &r%   r6   )&ri   rE   r   typingr   r   r   r   r   r	   rk   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   rC   r%   r#   <module>r      s     	   E E  ! 
 K J R R 6 1 17 7 7Ed;&7 EDcN E,Y Yr%   