
    Ng|!                     ^   d dl Z d dlZd dlZd dlmZ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mZmZmZ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#  ej$        e%          Z&d	ee'ef         d
efdZ(ded
e)fdZ*d	ee'ef         de
e         d
efdZ+ G d de          Z,dS )    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                     | d         }|dk    rt          | d                   S |dk    r&t          |                     dd          pd          S t          | d         |          S )Nroleusercontentr!   	assistant r!   r   )r   r   getr   )r   r   s     f/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chat_models/llama_edge.py_convert_dict_to_messager(      sq    =Dv~~E)$45555			9b!9!9!?R@@@@5#3$????    messagec                 4   t          | t                    r| j        | j        d}nrt          | t                    rd| j        d}nRt          | t
                    rd| j        d}n2t          | t                    rd| j        d}nt          d|            |S )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    ';'' 	7 'II	G]	+	+ 7 (W_EE	G\	*	* 7 &7?CC	GY	'	' 7 +HH5G55666r)   default_classc                 2   |                      d          }|                      d          pd}|dk    s|t          k    rt          |          S |dk    s|t          k    rt          |          S |s|t          k    rt          ||          S  ||          S )Nr   r!   r$   r    r"   r#   r%   )r&   r   r   r   )r   r1   r   r!   s       r'   _convert_delta_to_message_chunkr3   8   s     99VDii	""(bGv~~*;;; 1111			 ? ?g....	 ."222d;;;;}W----r)   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
          Z ed          edee	ef         d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e         f
dZdee         dedej        fdZdee	ef         defdZ e!de	fd            Z"dS )LlamaEdgeChatServicezChat 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           
         t          |           }|                    di           }t          |          D ]Y}||v rt          d| d          ||vr<t                              d| d| d| d           |                    |          ||<   Z|                    |                                          }|rt          d| d	          ||d<   |S )
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_extraz LlamaEdgeChatService.build_extra[   s4    $<C#@#@ 

>2..v,, 		; 		;JU"" !F*!F!F!FGGG!999N* N NN N)3N N N  
 %+JJz$:$:j!7DDUZZ\\RR 	T2 T T T  
 "'~r)   messagesstoprun_managerkwargsc                    | j         r  | j        d|||d|}t          |          S  | j        |fi |}|j        dk    rt          d|j         d|j                   |                                }|                     |          S )N)rO   rP   rQ      zError code: z
, reason:  )	r;   _streamr   _chatstatus_coderC   reasonjson_create_chat_result)selfrO   rP   rQ   rR   stream_iterresresponses           r'   	_generatezLlamaEdgeChatService._generatev   s     > 	5&$, !+ IO K (444dj,,V,,?c!!SCOSSszSSTTT88::''111r)   c           
   +     K    | j         |fi |}t          }d}|                                D ]}g }	|r|                    d          }
d t	          j        ||
          D             }dt          |          z  g|z   }t          t          |          dz
            D ]b}t          j	        |
||         t          |          z   ||dz            t          |          z                      }|	
                    |           c|	D ]}t          |t                    s|                                }t          |d                   dk    rE|d         d         }t          |d         |          }|                    d	          |                    d	          d
k    r nd|                    d	          }|t          |          nd }|j        }t!          ||          }|r|                    |j        |           |V  d S )Nz!"object":"chat.completion.chunk"}zutf-8c                 6    g | ]}|                                 S rU   )start.0ms     r'   
<listcomp>z0LlamaEdgeChatService._stream.<locals>.<listcomp>   s     TTT1QWWYYTTTr)      choicesr   deltafinish_reasonrP   )rl   )r*   generation_info)chunk)rW   r   
iter_linesdecoderefinditerlenrangerZ   loadsappendr-   dictr3   r&   	__class__r   on_llm_new_tokentext)r\   rO   rP   rQ   rR   r^   default_chunk_class	substringlinechunksjson_string	positionsirn   choicerl   rm   cg_chunks                     r'   rV   zLlamaEdgeChatService._stream   sT      dj,,V,,,7	NN$$ -	 -	DF )"kk'22 UTI{0S0STTT	#i..01I=	s9~~122 ) )A J#%aL3y>>9Ia!e<L!)nn=- - E MM%((((  !%.. )!JJLLEuY'((A--y)!,77O%8  JJ//;

?33v==E &

? ; ; %0 }5555  
 ',o#.!?    P00h0OOO[-	 -	r)   c                 T   | j         .t          j                                        }d|_        d|_        |S | j          d}| j        r| j        d |D             | j        d}n| j        d |D             d}t          j        || j	        ddd	t          j        |          
          }|S )Ni  z8The IP address or port of the chat service is incorrect.z/v1/chat/completionsc                 ,    g | ]}t          |          S rU   r0   rd   s     r'   rg   z.LlamaEdgeChatService._chat.<locals>.<listcomp>   !    KKKQ5a88KKKr)   )r:   rO   streamc                 ,    g | ]}t          |          S rU   r   rd   s     r'   rg   z.LlamaEdgeChatService._chat.<locals>.<listcomp>   r   r)   )r:   rO   zapplication/json)acceptzContent-Type)urltimeoutheadersdata)r8   requestsmodelsResponserX   rY   r;   r:   postr7   rZ   dumps)r\   rO   rR   r^   r8   payloads         r'   rW   zLlamaEdgeChatService._chat   s    #/**,,C!COSCJJ)???> 
	KK(KKK. GG KK(KKK G
 m(, 2  G$$
 
 
 
r)   r_   c                     t          |d         d                             d                    }t          |          g}|d         }|| j        d}t	          ||          S )Nrj   r   r*   )r*   usage)token_usager:   )generations
llm_output)r(   r&   r   r:   r   )r\   r_   r*   r   r   r   s         r'   r[   z(LlamaEdgeChatService._create_chat_result   sf    *8I+>q+A+E+Ei+P+PQQ%g6667w'%04:FF
kjIIIIr)   c                     dS )Nz	wasm-chatrU   )r\   s    r'   	_llm_typezLlamaEdgeChatService._llm_type   s    {r)   )NN)#__name__
__module____qualname____doc__r7   int__annotations__r8   r   strr:   r;   boolr   model_configr   classmethodr   r   rN   r   r   r
   r   r`   r   r   rV   r   r   rW   r   r[   propertyr   rU   r)   r'   r5   r5   H   s4         
 OS0!%K#%%%!E3&It/:  L _(###c3h C    [ $#8 %):>	2 2{#2 tCy!2 67	2
 2 
2 2 2 22 %):>	8 8{#8 tCy!8 67	8
 8 
%	&8 8 8 8td;/ 3 8CT    BJGCH,= J* J J J J 3    X  r)   r5   )-rZ   loggingrq   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   rD   r   r(   rw   r0   r3   r5   rU   r)   r'   <module>r      s0     				 E E E E E E E E E E E E E E E E E E  = = = = = =       
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 S R R R R R R R R R 9 9 9 9 9 9 0 0 0 0 0 0 0 0		8	$	$@GCH$5 @+ @ @ @ @k d     .38.-12B-C.. . . . i i i i i= i i i i ir)   