
    Ng>%                        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     j/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chat_models/symblai_nebula.py_convert_roler$      s;    w
@
@Cs{{4y5t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CRC=  <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%%+FJJ7G,H,HIIGG+++BJ7G,HIIGG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EDAqq}1a}}}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EGMMOOEEEz'**#C|D
 
 
 	!!###&1133 
	 
	N*1133ABB7M
=11"   'NE*>%3P3P3PQQQH D,,U(,CCCNNNN
	 
	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EGMMOOEEEz'** ?? 	# 	# 	# 	# 	# 	# 	#g||, $   # # # # # # # #))+++,4,< # # # # # # #.$2$9$9$;$;ABB$?M! $
= 9 9* ! ! ! !!'NE2 .u = = =     H # R)::5:QQQQQQQQQ"NNNNN -=,<	# # # # # # # # # # # # # # # # # # # # # # # # # # #	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#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EGMMOOEEEz'**#FC|TTT!!###}}'	$zBR0S0S0S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EGMMOOEEEz'** ?? 	 	 	 	 	 	 	g||, $          ))+++%]]__,,,,,,!&yjAQ/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 NCA#$K%$$$QIt7NC777*/%BT*U*U*UNHY'UUU: $  L
; ; ; ; ; ; ; ; 3    X #    X %):>	' '{#' tCy!' 67	'
 ' 
%	&' ' ' 'X %)?C	%# %#{#%# tCy!%# ;<	%#
 %# 
*	+%# %# %# %#T %):>	!
 !
{#!
 tCy!!
 67	!

 !
 
!
 !
 !
 !
L %)?C	& &{#& tCy!& ;<	&
 & 
& & & & & & & &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%   