
    dh|!                     N   S SK r S SKrS SKrS SKJr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JrJrJr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#  \RH                  " \%5      r&S	\\'\4   S
\4S jr(S\S
\)4S jr*S	\\'\4   S\
\   S
\4S jr+ " S S\5      r,g)    N)AnyDictIteratorListMappingOptionalType)CallbackManagerForLLMRun)BaseChatModelgenerate_from_stream)		AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageChatMessageChunkHumanMessageHumanMessageChunkSystemMessage)ChatGenerationChatGenerationChunk
ChatResult)get_pydantic_field_names)
ConfigDictmodel_validator_dictreturnc                     U S   nUS:X  a  [        U S   S9$ US:X  a"  [        U R                  SS5      =(       d    SS9$ [        U S   US9$ )Nroleusercontentr!   	assistant r!   r   )r   r   getr   )r   r   s     b/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/llama_edge.py_convert_dict_to_messager(      sW    =Dv~E)$455		9b!9!?R@@5#3$??    messagec                 b   [        U [        5      (       a  U R                  U R                  S.nU$ [        U [        5      (       a  SU R                  S.nU$ [        U [
        5      (       a  SU R                  S.nU$ [        U [        5      (       a  SU R                  S.nU$ [        SU  35      e)N)r   r!   systemr    r#   zGot unknown type )
isinstancer   r   r!   r   r   r   	TypeError)r*   message_dicts     r'   _convert_message_to_dictr0   (   s    ';'' 'I  
G]	+	+ (W__E  
G\	*	* &7??C  
GY	'	' +H  +G9566r)   default_classc                     U R                  S5      nU R                  S5      =(       d    SnUS:X  d
  U[        :X  a	  [        US9$ US:X  d
  U[        :X  a	  [        US9$ U(       d
  U[        :X  a	  [        X2S9$ U" US9$ )Nr   r!   r$   r    r"   r#   r%   )r&   r   r   r   )r   r1   r   r!   s       r'   _convert_delta_to_message_chunkr3   8   sz     99VDii	"(bGv~*;; 11		 ?g..	"22;;W--r)   c                      \ rS rSr% SrSr\\S'    Sr\	\
   \S'    Sr\
\S'    S	r\\S
'    \" SS9r\" SS9\S\\
\4   S\4S j5       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\R<                  4S jrS\ \
\4   S\4S jr!\"S\
4S j5       r#Sr$g)LlamaEdgeChatServiceH   zChat with LLMs via `llama-api-server`

For the information about `llama-api-server`, visit https://github.com/second-state/LlamaEdge
<   request_timeoutNservice_urlNAmodelF	streamingT)populate_by_namebefore)modevaluesr   c           
      p   [        U 5      nUR                  S0 5      n[        U5       HP  nXC;   a  [        SU S35      eXB;  d  M  [        R                  SU SU SU S35        UR                  U5      X4'   MR     UR                  UR                  5       5      nU(       a  [        SU S	35      eX1S'   U$ )
z>Build extra kwargs from additional params that were passed in.model_kwargszFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.zParameters za should be specified explicitly. Instead they were passed in as part of `model_kwargs` parameter.)	r   r&   list
ValueErrorloggerwarningpopintersectionkeys)clsr@   all_required_field_namesextra
field_nameinvalid_model_kwargss         r'   build_extra LlamaEdgeChatService.build_extra[   s     $<C#@ 

>2.v,J" 6*5E!FGG9!* .L !))34JN
 %+JJz$:! '  8DDUZZ\R23 4S T 
 "'~r)   messagesstoprun_managerkwargsc                 6   U R                   (       a   U R                  " SXUS.UD6n[        U5      $ U R                  " U40 UD6nUR                  S:w  a%  [        SUR                   SUR                   35      eUR                  5       nU R                  U5      $ )N)rQ   rR   rS      zError code: z
, reason:  )	r<   _streamr   _chatstatus_coderD   reasonjson_create_chat_result)selfrQ   rR   rS   rT   stream_iterresresponses           r'   	_generateLlamaEdgeChatService._generatev   s     >>,, !+IOK (44jj,V,??c!|COO+<JszzlSTT88:''11r)   c           
   +     #    U R                   " U40 UD6n[        nSnUR                  5        GH  n/ n	U(       a  UR                  S5      n
[        R
                  " Xz5       Vs/ sH  oR                  5       PM     nnS[        U5      -  /U-   n[        [        U5      S-
  5       HL  n[        R                  " U
X   [        U5      -   XS-      [        U5      -    5      nU	R                  U5        MN     U	 H  n[        U[        5      (       d  UR                  5       n[        US   5      S:X  a  M<  US   S   n[        US   U5      nUR                  S5      b  UR                  S5      S	:X  a    GMI  UR                  S5      nUb	  [        US
9OS nUR                   n[#        UUS9nU(       a  UR%                  UR&                  US9  Uv   M     GM     g s  snf 7f)Nz!"object":"chat.completion.chunk"}zutf-8   choicesr   deltafinish_reasonrR   )ri   )r*   generation_info)chunk)rY   r   
iter_linesdecoderefinditerstartlenranger\   loadsappendr-   dictr3   r&   	__class__r   on_llm_new_tokentext)r^   rQ   rR   rS   rT   r`   default_chunk_class	substringlinechunksjson_stringm	positionsirk   choiceri   rj   cg_chunks                      r'   rX   LlamaEdgeChatService._stream   s     jj,V,,7	NN$DF"kk'2 13I0ST0S1WWY0S	T#i.01I=	s9~12A JJ#%L3y>9I!e<L!)n=-E MM%( 3  !%..!JJLEuY'(A-y)!,77O%8 JJ/;

?3v= &

? ; %0 }5  
 ',oo#.!? 00h0O7  % % Us   A"G $G<E$G c                    U R                   c.  [        R                  R                  5       nSUl        SUl        U$ U R                    S3nU R                  (       a4  U R                  U Vs/ sH  n[        U5      PM     snU R                  S.nO(U R                  U Vs/ sH  n[        U5      PM     snS.n[        R                  " UU R                  SSS.[        R                  " U5      S9nU$ s  snf s  snf )	Ni  z8The IP address or port of the chat service is incorrect.z/v1/chat/completions)r;   rQ   stream)r;   rQ   zapplication/json)acceptzContent-Type)urltimeoutheadersdata)r9   requestsmodelsResponserZ   r[   r<   r;   r0   postr8   r\   dumps)r^   rQ   rT   r`   r9   r~   payloads          r'   rY   LlamaEdgeChatService._chat   s    #//**,C!COSCJJ))**>?>>BJK(Q5a8(K..G BJK(Q5a8(KG
 mm((, 2 G$
 
' L Ls   +C2C7ra   c                     [        US   S   R                  S5      5      n[        US9/nUS   nX@R                  S.n[	        X5S9$ )Nrg   r   r*   )r*   usage)token_usager;   )generations
llm_output)r(   r&   r   r;   r   )r^   ra   r*   r   r   r   s         r'   r]   (LlamaEdgeChatService._create_chat_result   sO    *8I+>q+A+E+Ei+PQ%g67w'%0::F
kIIr)   c                     g)Nz	wasm-chatrW   )r^   s    r'   	_llm_typeLlamaEdgeChatService._llm_type   s    r)   rW   )NN)%__name__
__module____qualname____firstlineno____doc__r8   int__annotations__r9   r   strr;   r<   boolr   model_configr   classmethodr   r   rO   r   r   r
   r   rb   r   r   rX   r   r   rY   r   r]   propertyr   __static_attributes__rW   r)   r'   r5   r5   H   s   
 OS0!%K#%!E3&It/L (#c3h C   $8 %):>	2{#2 tCy!2 67	2
 2 
22 %):>	8{#8 tCy!8 67	8
 8 
%	&8td;/ 3 8CTCT BJGCH,= J* J 3  r)   r5   )-r\   loggingrn   typingr   r   r   r   r   r   r	   r   langchain_core.callbacksr
   *langchain_core.language_models.chat_modelsr   r   langchain_core.messagesr   r   r   r   r   r   r   r   r   langchain_core.outputsr   r   r   langchain_core.utilsr   pydanticr   r   	getLoggerr   rE   r   r(   ru   r0   r3   r5   rW   r)   r'   <module>r      s      	 E E E  =
 
 
 S R 9 0			8	$@GCH$5 @+ @k d  .38.-12B-C.. i= ir)   