
    hL%                        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%y)    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                 <    dddd}| |v r||    S t        d|        )N	assistanthuman)air   chatzUnknown role type: )
ValueError)r   maps     l/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/chat_models/symblai_nebula.py_convert_roler$      s2    w
@Cs{4y.tf566    messagesc                 R   d}g }| d d D ]t  }|j                   dk(  r2t        |j                  t              r|j                  }9t	        d      |j                  t        |j                         |j                  d       v | d   j                  }|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CR= <<8#'//3/  !ABB%%)',,7#OO B<Dw=>#1CDDr%   c                       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        |j                  d            }n1dt        j                  v rt        t        j                  d         }nd }t	        |   dd|i| y )Nr<   NEBULA_API_KEY )r   poposenvironsuper__init__)selfr?   api_key	__class__s      r#   rG   zChatNebula.__init__a   sY    v%+FJJ7G,HIG++BJJ7G,HIGG::6:r%   c                      y)zReturn type of chat model.znebula-chatrB   rH   s    r#   	_llm_typezChatNebula._llm_typej   s     r%   c                 P    | j                   r| j                   j                         S y)Nr(   )r<   get_secret_valuerL   s    r#   _api_keyzChatNebula._api_keyo   s#    &&7799r%   r&   stoprun_managerc              +   r  K   | j                    d}| j                  dd}t        |      }| j                  | j                  d||}|j                         D 	
ci c]  \  }	}
|
	|	|
 }}	}
t        j                  |      }t        j                  d|||d	      }|j                          |j                         D ]_  }|j                         d
d }	 t        j                  |      }|d   }t        t!        |            }|r|j#                  ||       | a yc c}
}	w # t        $ r Y tw xY ww)z#Call out to Nebula's chat endpoint./v1/model/chat/streamingapplication/jsonApiKeyzContent-Typer&   r7   r8   NPOSTT)headersdatastream   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?   urlr[   formatted_datapayloadkvjson_payloadresponsechunk_responsechunk_decodedrc   tokencg_chunks                     r#   _streamzChatNebula._streamu   sR     $$%%=>mm.
 1(C"11++#
 #
 	#
 %,MMOEDAqq}1a4EEzz'*##C|D
 	!!#&113 
	N*113AB7M

=1 'NE*>%3PQH,,U(,CN
	 F # s=   AD7
D"(D"-A(D7D(+=D7(	D41D73D44D7c                `  K   | j                    d}| j                  dd}t        |      }| j                  | j                  d||}|j                         D 	
ci c]  \  }	}
|
	|	|
 }}	}
t        j                  |      }t               4 d {   }|j                  |||d      4 d {   }|j                          |j                  2 3 d {   }|j                         dd  }	 t        j                  |      }|d	   }t        t!        |
            }|r|j#                  ||       d {    | pc c}
}	w 7 7 7 u# t        $ r Y w xY w7 %6 d d d       d {  7   n# 1 d {  7  sw Y   nxY wd d d       d {  7   y # 1 d {  7  sw Y   y xY ww)NrT   rU   rV   rX   rY   T)r\   r[   r]   r^   r_   r`   ra   rb   )r:   rP   r4   r7   r8   rd   re   rf   r
   postri   r/   rk   rl   r   r   r   rm   )rH   r&   rQ   rR   r?   rn   r[   ro   rp   rq   rr   rs   sessionrt   ru   rv   rc   rw   rx   s                      r#   _astreamzChatNebula._astream   s     $$%%=>!]]<NO0(C"11++#
 #
 	#
 %,MMOEDAqq}1a4EEzz'* ? 	# 	#g||, $  # #))+,4,<,< # #.$2$9$9$;AB$?M! $

= 9 "'NE2 .u = H #)::5:QQQ"N) F	### + ! ! R -=	# # # # #	# 	# 	# 	# 	#s   AF.
E(E-&F.EF.F1E
2F5E2EE
EE2/E3E27E
8
E2F.
FE	E	E2E	E2E2 F+E.,F2F	8E;9F	 FF.FF.F+F" F+'F.c                 (   | j                   r! | j                  |f||d|}t        |      S | j                   d}| j                  dd}t        |      }| j                  | j                  d||}	|	j                         D 
ci c]  \  }
}|	|
| }	}
}t        j                  |	      }t        j                  d|||      }|j                          |j                         }t        t        t!        |d	   
            g|      S c c}}
w )NrQ   rR   /v1/model/chatrU   rV   rX   rY   rZ   )r[   r\   r&   r`   ra   generations
llm_output)r9   ry   r   r:   rP   r4   r7   r8   rd   re   rf   rg   rh   ri   r   r   r   )rH   r&   rQ   rR   r?   stream_iterrn   r[   ro   rp   rq   rr   rs   rt   r\   s                  r#   	_generatezChatNebula._generate   s#    >>&$,,#@FK (44$$%^4!]]<NO0(C"11++#
 #
 	#
 %,MMOEDAqq}1a4EEzz'*##FC|T!!#}}'	$zBR0STU
 	
 Fs   
DDc           
      T  K   | j                   r) | j                  |f||d|}t        |       d {   S | j                   d}| j                  dd}t        |      }| j                  | j                  d||}	|	j                         D 
ci c]  \  }
}|	|
| }	}
}t        j                  |	      }t               4 d {   }|j                  |||      4 d {   }|j                          |j                          d {   }t        t        t!        |d   	      
      g|      cd d d       d {    cd d d       d {    S 7 &c c}}
w 7 7 ~7 X7 %7 # 1 d {  7  sw Y   nxY wd d d       d {  7   y # 1 d {  7  sw Y   y xY ww)Nr   r   rU   rV   rX   rY   )r\   r[   r&   r`   ra   r   )r9   r}   r   r:   rP   r4   r7   r8   rd   re   rf   r
   r{   ri   r   r   r   )rH   r&   rQ   rR   r?   r   rn   r[   ro   rp   rq   rr   rs   r|   rt   r\   s                   r#   
_ageneratezChatNebula._agenerate   s     >>'$--#@FK /{;;;$$%^4!]]<NO0(C"11++#
 #
 	#
 %,MMOEDAqq}1a4EEzz'* ? 	 	g||, $   ))+%]]_,!&yjAQ/RS!  $	  	 	 	 < F	 -		  	 	 	 	 	s   1F(EAF(
EE"&F(E"	F(F%E$&F)$E,E&(E,6FE(FF(E*F(F($F&E,(F*F(,E>	2E53E>	:FF(FF(F%F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   ry   r   r   r}   r   r   r   __classcell__)rJ   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   )&re   rD   r   typingr   r   r   r   r   r	   rg   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  ! 
 K J R R 6 1 17 7 7Ed;&7 EDcN E,Y Yr%   