§
    šŠtj”!  ã                   ó^  — 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     úh/var/www/html/CA-Chatbot/venv/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Ø	�Ò	Ð	Ý §¢¨9°bÑ!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ˆˆÝ	�G�YÑ	'Ô	'ð 7Ø +¸¼ÐHÐHˆˆåÐ5¨GÐ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¯   € ð �9Š9�VÑÔ€DØ�iŠi˜	Ñ"Ô"Ð( b€Gàˆ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 )ÚLlamaEdgeChatServicez�Chat 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ñô ð ð
 %+§J¢J¨zÑ$:Ô$:��jÑ!øà7×DÒDÀUÇZÂZÁ\Ä\Ñ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àˆdŒj˜Ð,Ð, VÐ,Ð,ˆàŒ?˜cÒ!Ð!ÝÐS¨C¬OÐSÐSÀsÄzÐSÐSÑTÔTÐTà—8’8‘:”:ˆà×'Ò'¨Ñ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ÐT¨1˜QŸWšW™YœYÐ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  è è € ð ˆdŒj˜Ð,Ð, VÐ,Ð,ˆå6DÐØ7ˆ	Ø—N’NÑ$Ô$ð -	ñ -	ˆDØˆFØð )Ø"Ÿkšk¨'Ñ2Ô2�ð UÐTµ´¸IÀ{Ñ0SÔ0SÐTÑTÔT�	Ø¥# i¡.¤.Ñ0Ð1°IÑ=�	å�s 9™~œ~°Ñ1Ñ2Ô2ð )ð )�AÝ œJØ#Ø% aœL­3¨y©>¬>Ñ9¸IÀaÈ!ÁeÔ<LÝ! )™nœnñ=-ð -ôñô �Eð —M’M %Ñ(Ô(Ð(Ð(àð ð �Ý! %­Ñ.Ô.ð )Ø!ŸJšJ™LœL�EÝ�u˜YÔ'Ñ(Ô(¨AÒ-Ð-Øà˜yÔ)¨!Ô,�Ý7Ø˜7”OÐ%8ñô �ð —J’J˜Ñ/Ô/Ð;ØŸ
š
 ?Ñ3Ô3°vÒ=Ð=à�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ÐK¸QÕ5°aÑ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Ø!ˆCŒOØSˆCŒJØˆJàÔ)Ð?Ð?Ð?ˆàŒ>ð 
	àœØKÐKÀ(ÐKÑKÔKØœ.ðð ˆGˆGð œØ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   € Ý*¨8°IÔ+>¸qÔ+A×+EÒ+EÀiÑ+PÔ+PÑQÔQˆÝ%¨gÐ6Ñ6Ô6Ð7ˆà˜wÔ'ˆØ%0¸4¼:ÐFÐFˆ
Ý k¸jÐ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  € € € € € € ðð ð
 €O�SÐÐÑØ0Ø!%€K�˜#”Ð%Ð%Ñ%Ø!Ø€Eˆ3ÐÐÑØ&Ø€IˆtÐÐÑØ/à�:Øðñ ô €Lð €_˜(Ð#Ñ#Ô#Øð  c¨3 h¤ð °Cð ð ð ñ „[ñ $Ô#ðð8 %)Ø:>ð	2ð 2à�{Ô#ð2ð �t˜C”yÔ!ð2ð Ð6Ô7ð	2ð
 ð2ð 
ð2ð 2ð 2ð 2ð2 %)Ø:>ð	8ð 8à�{Ô#ð8ð �t˜C”yÔ!ð8ð Ð6Ô7ð	8ð
 ð8ð 
Ð%Ô	&ð8ð 8ð 8ð 8ðt˜d ;Ô/ð ¸3ð À8ÔCTð ð ð ð ðBJ¨G°C¸°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Ñ	$Ô	$€ð@ G¨C°¨HÔ$5ð @¸+ð @ð @ð @ð @ð kð °dð ð ð ð ð .Ø�3˜�8Ôð.Ø-1Ð2BÔ-Cð.àð.ð .ð .ð .ð ið ið ið ið i˜=ñ iô ið ið ið ir)   