
    dh<                     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	J
r
Jr  S SKJrJr  S SKJr  S SKJrJrJr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#J$r$J%r%   " S S	\%5      r& " S
 S\%5      r' " S S\'5      r( " S S\(5      r) " S S\\#5      r*S\\+\4   S\
\   S\4S jr,g)    N)	AnyAsyncIteratorDictIteratorListMappingOptionalTypecast)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseChatModel)	AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageChatMessageChunkFunctionMessageChunkHumanMessageHumanMessageChunkSystemMessageSystemMessageChunkToolMessageChunk)ChatGenerationChatGenerationChunk
ChatResult)AzureMLBaseEndpointAzureMLEndpointApiTypeContentFormatterBasec                   "    \ rS rSrSrSS jrSrg)LlamaContentFormatter+   zContent formatter for `LLaMA`.Nc                     [        S5      e)Nzb`LlamaContentFormatter` is deprecated for chat models. Use `CustomOpenAIContentFormatter` instead.)	TypeErrorselfs    h/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/azureml_endpoint.py__init__LlamaContentFormatter.__init__.   s    6
 	
     returnN)__name__
__module____qualname____firstlineno____doc__r)   __static_attributes__r,   r+   r(   r"   r"   +   s
    (
r+   r"   c                       \ rS rSr% Sr/ SQr\\   \S'   \	S\
S\4S j5       r\S\\   4S j5       rS	\\
   S
\S\S\4S jr\R$                  4S\S\S\4S jjrSrg) CustomOpenAIChatContentFormatter5   z>Chat Content formatter for models with OpenAI like API scheme.)user	assistantsystemSUPPORTED_ROLESmessager.   c                 x   [        [        U R                  5      n[        U [        5      (       a  S[
        R                  " U5      S.$ [        U [        5      (       a  S[
        R                  " U5      S.$ [        U [        5      (       a  S[
        R                  " U5      S.$ [        U [        5      (       aA  U R                  [        R                  ;   a#  U R                  [
        R                  " U5      S.$ SR                  [        R                   Vs/ sH  o"PM     sn5      n[        SU 35      es  snf )z0Converts a message to a dict according to a roler8   )rolecontentr9   r:   ,z\Received unsupported role. 
                Supported roles for the LLaMa Foundation Model: )r   strr?   
isinstancer   r    escape_special_charactersr   r   r   r>   r6   r;   join
ValueError)r<   r?   r>   	supporteds       r(   _convert_message_to_dict9CustomOpenAIChatContentFormatter._convert_message_to_dict:   s#    sGOO,g|,,/II'R  ++#/II'R  // /II'R 
 w,, @ P PP  /II'R 
 "B"R"RS"R$"RSI AAJO  Ts   
D7c                 B    [         R                  [         R                  /$ )N)r   	dedicated
serverlessr&   s    r(   supported_api_types4CustomOpenAIChatContentFormatter.supported_api_types^   s    &002H2S2STTr+   messagesmodel_kwargsapi_typec                 z   U Vs/ sH  n[         R                  U5      PM     nnU[        R                  [        R                  4;   a  [
        R                  " SUUS.05      nO>U[        R                  :X  a  [
        R                  " SU0UE5      nO[        SU S35      e[        R                  U5      $ s  snf )/Formats the request according to the chosen api
input_datainput_string
parametersrN   `api_type` # is not supported by this formatter)r6   rG   r   rJ   realtimejsondumpsrK   rE   rA   encoder'   rN   rO   rP   r<   chat_messagesrequest_payloads          r(   format_messages_request_payload@CustomOpenAIChatContentFormatter.format_messages_request_payloadb   s     $
# -EEgN# 	 
 ",,"++
 
 #jj (5&2#O /:::"jj*m)T|)TUOhZ'JK  zz/**-
s   B8outputc           	      t   U[         R                  [         R                  4;   a9   [        R                  " U5      S   n[        [        UR                  5       S9SS9$ U[         R                  :X  a   [        R                  " U5      S   S   n[        U[         5      (       d  [        S5      e [        US	   S
   S:X  a  [        US	   S   R                  5       S9O#[#        US	   S   R                  5       US	   S
   S9[!        UR%                  S5      UR%                  S5      S9S9$ [        SU S35      e! [
        [        [        4 a(  n[        U R                  R                  US95      UeSnAff = f! [
        [        [        4 a(  n[        U R                  R                  US95      UeSnAff = f)zFormats responserb   )rP   Nr?   r<   generation_infochoicesr   ziEndpoint response is not well formed for a chat model. Expected `dict` but `{type(choice)}` was received.r<   r>   r9   r?   )r?   typefinish_reasonlogprobs)ri   rj   rW   rX   )r   rJ   rY   rZ   loadsKeyError
IndexErrorr%   rE   format_error_msgformatr   r   striprK   rB   dictr   get)r'   rb   rP   choicees        r(   format_response_payload8CustomOpenAIChatContentFormatter.format_response_payload   s    ",,"++
 
YF+H5 "!"LLN !%	  -888YF+I6q9!&$//#T  0 ")$V,; "&*;I*F*L*L*NO "9-i8>>@	*62 !%"(**_"=#ZZ
3!  ;xj0STUU= j)4 Y !6!6!=!=x!=!PQWXXY  j)4 Y !6!6!=!=x!=!PQWXXYs/   D: 3<E: :E7#E22E7:F7#F22F7r,   N)r/   r0   r1   r2   r3   r;   r   rA   __annotations__staticmethodr   r   rG   propertyr   rL   bytesr`   rJ   r   ru   r4   r,   r+   r(   r6   r6   5   s    H!@OT#Y@!+ !$ ! !F UT*@%A U U+{#+ + )	+
 
+D ,B+K+K*V*V )*V 
	*V *Vr+   r6   c                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )LlamaChatContentFormatter   zODeprecated: Kept for backwards compatibility

Chat Content formatter for Llama.c                 N   > [         TU ]  5         [        R                  " S5        g )Nz`LlamaChatContentFormatter` will be deprecated in the future. 
                Please use `CustomOpenAIChatContentFormatter` instead.  
            )superr)   warningswarn)r'   	__class__s    r(   r)   "LlamaChatContentFormatter.__init__   s    	
r+   r,   r-   )r/   r0   r1   r2   r3   r)   r4   __classcell__)r   s   @r(   r|   r|      s    )
 
r+   r|   c                   8    \ rS rSrSrS\\   S\S\S\	4S jr
Srg	)
MistralChatContentFormatter   z Content formatter for `Mistral`.rN   rO   rP   r.   c                    U Vs/ sH  o@R                  U5      PM     nnU(       a)  US   S   S:X  a  US   S   S-   US   S   -   US   S'   US	 U[        R                  :X  a  [        R                  " SUUS.05      nO>U[        R
                  :X  a  [        R                  " S	U0UE5      nO[        S
U S35      e[        R                  U5      $ s  snf )rR   r   r>   r:   r?   z

   rS   rT   rN   rW   rX   )	rG   r   rY   rZ   r[   rK   rE   rA   r\   r]   s          r(   r`   ;MistralChatContentFormatter.format_messages_request_payload   s     PXXxG66w?xX]1-f5A a +f4}Q7G	7RR !Y' a -666"jj (5&2#O /:::"jj*m)T|)TUOhZ'JK  zz/**3 Ys   Cr,   N)r/   r0   r1   r2   r3   r   r   r   r   rz   r`   r4   r,   r+   r(   r   r      s5    * +{# +  + )	 +
 
 +r+   r   c                      \ rS rSrSr\S\\\4   4S j5       r	\S\4S j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\\\      S	\\   S
\S\\   4
S jjrSrg)AzureMLChatOnlineEndpoint   a  Azure ML Online Endpoint chat models.

Example:
    .. code-block:: python
        azure_llm = AzureMLOnlineEndpoint(
            endpoint_url="https://<your-endpoint>.<your_region>.inference.ml.azure.com/v1/chat/completions",
            endpoint_api_type=AzureMLApiType.serverless,
            endpoint_api_key="my-api-key",
            content_formatter=chat_content_formatter,
        )
r.   c                 8    U R                   =(       d    0 n0 SU0E$ )zGet the identifying parameters.rO   )rO   )r'   _model_kwargss     r(   _identifying_params-AzureMLChatOnlineEndpoint._identifying_params   s+     ))/R
}-
 	
r+   c                     g)zReturn type of llm.azureml_chat_endpointr,   r&   s    r(   	_llm_type#AzureMLChatOnlineEndpoint._llm_type   s     'r+   NrN   stoprun_managerkwargsc                 @   U R                   =(       d    0 nUR                  U5        U(       a  X%S'   U R                  R                  XU R                  5      nU R
                  R                  XcS9nU R                  R                  XpR                  5      n[        U/S9$ )aG  Call out to an AzureML Managed Online endpoint.
Args:
    messages: The messages in the conversation with the chat model.
    stop: Optional list of stop words to use when generating.
Returns:
    The string generated by the model.
Example:
    .. code-block:: python
        response = azureml_model.invoke("Tell me a joke.")
r   )bodyr   )generations)	rO   updatecontent_formatterr`   endpoint_api_typehttp_clientcallru   r   )	r'   rN   r   r   r   r   r_   response_payloadr   s	            r(   	_generate#AzureMLChatOnlineEndpoint._generate   s    " ))/RV$$(&!00PPT%;%;
  ++00  1 
 ,,DD44
 {m44r+   c              +   \  #    U R                   R                  SS5      U l         SU;  a  S OUS   nSS Kn0 nU R                  R	                  5       U R                   US S S S.nUR
                  " S0 UD6n	U V
s/ sH  n
[        R                  U
5      PM     nn
SUS S.UEn[        nU	R                  R                  R                  " SSU0UD6 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0 nUR!                  S5      =n(       a  UUS'   UR!                  S5      nU(       a  UUS'   UR"                  n[%        UU=(       d    S S9nU(       a  UR'                  UR(                  UUS9  Uv   M     g s  sn
f 7f)N/chat/completions timeoutr   api_keybase_urlr   default_headersdefault_queryr   Tstreamr   modelrN   rg   deltari   rj   re   )chunkrj   r,   )endpoint_urlreplaceopenaiendpoint_api_keyget_secret_valueOpenAIr6   rG   r   chatcompletionscreaterB   rq   len_convert_delta_to_message_chunkrr   r   r   on_llm_new_tokentext)r'   rN   r   r   r   r   r   paramsclient_paramsclientmmessage_dictsdefault_chunk_classr   rs   rf   ri   rj   s                     r(   _stream!AzureMLChatOnlineEndpoint._stream  s     !--556I2N#61$vi7H,,==?))#!
 // 
 -EEaH 	 
 !$HH,[[,,33U]UfUEeT**

5#$)9%a(F3w#E !O &

? ;;};3@0zz*-H.6
+"'//' / 74E ,,UZZux,XK/ V
s   A6F,8F'DF,c                  #    U R                   R                  SS5      U l         SU;  a  S OUS   nSS Kn0 nU R                  R	                  5       U R                   US S S S.nUR
                  " S0 UD6n	U V
s/ sH  n
[        R                  U
5      PM     nn
SUS S.UEn[        nU	R                  R                  R                  " SSU0UD6I S h  vN   S h  vN n[        U[        5      (       d  UR                  5       n[        US	   5      S:X  a  MB  US	   S   n[        US
   U5      n0 nUR!                  S5      =n(       a  UUS'   UR!                  S5      nU(       a  UUS'   UR"                  n[%        X=(       d    S S9nU(       a#  UR'                  UR(                  UUS9I S h  vN   U7v   M  s  sn
f  N N N
 g 7f)Nr   r   r   r   r   Tr   rN   rg   r   ri   rj   re   )tokenr   rj   r,   )r   r   r   r   r   AsyncOpenAIr6   rG   r   r   r   r   rB   rq   r   r   rr   r   r   r   r   )r'   rN   r   r   r   r   r   r   r   async_clientr   r   r   r   rs   rf   ri   rj   s                     r(   _astream"AzureMLChatOnlineEndpoint._astreamT  s     !--556I2N#61$vi7H,,==?))#!
 )):M: 
 -EEaH 	 
 !$HH,!-!2!2!>!>!E!E "
""
"
 
 
 	% eT**

5#$)9%a(F3w!4E !O &

? ;;};3@0zz*-H.6
+"'//'/F$E !22**EH 3    KC

 	./
sU   A6G8F:;GF?GGGGCG.G/GGGG)r   )NN)r/   r0   r1   r2   r3   ry   r   rA   r   r   r   r   r   r	   r   r   r   r   r   r   r   r   r   r4   r,   r+   r(   r   r      sK   
 
T#s(^ 
 
 '3 ' ' %):>	5{#5 tCy!5 67	5
 5 
5H %):>	5{#5 tCy!5 67	5
 5 
%	&5t %)?C	8{#8 tCy!8 ;<	8
 8 
*	+8 8r+   r   _dictdefault_classr.   c                    [        [        U R                  S5      5      n[        [        U R                  S5      =(       d    S5      n0 nU R                  S5      (       a#  [        U S   5      nSU;   a  US   c  SUS'   XTS'   U R                  S5      (       a  U S   US'   US:X  d
  U[        :X  a	  [	        US9$ US	:X  d
  U[
        :X  a	  [        X4S
9$ US:X  d
  U[        :X  a	  [        US9$ US:X  d
  U[        :X  a  [        X0S   S9$ US:X  d
  U[        :X  a  [        X0S   S9$ U(       d
  U[        :X  a	  [        X2S9$ U" US9$ )Nr>   r?   r   function_callname
tool_callsr8   rd   r9   )r?   additional_kwargsr:   function)r?   r   tooltool_call_id)r?   r   )r?   r>   )
r   rA   rr   rq   r   r   r   r   r   r   )r   r   r>   r?   r   r   s         r(   r   r     sH    UYYv&'D3		),23G yy!!U?34]"}V'<'D$&M&!-:/*yy*/*=,'v~*;; 11		 ?gSS		].@@!'22		}0DD#G-HH	=,<<N>STT	"22;;W--r+   )-rZ   r   typingr   r   r   r   r   r   r	   r
   r   langchain_core.callbacksr   r   *langchain_core.language_models.chat_modelsr   langchain_core.messagesr   r   r   r   r   r   r   r   r   r   r   r   langchain_core.outputsr   r   r   )langchain_community.llms.azureml_endpointr   r   r    r"   r6   r|   r   r   rA   r   r,   r+   r(   <module>r      s     
 
 
 E    S R 
0 
vV'; vVr
 @ 
#+"; #+Lj/B jZ.38.-12B-C..r+   