
    h<                     P   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	m
Z
mZ d dlmZmZ d dlmZ d dlmZmZmZ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#m$Z$m%Z%  G d d	e%      Z& G d
 de%      Z' G d de'      Z( G d de(      Z) G d dee#      Z*dee+ef   de
e   defdZ,y)    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                       e Zd ZdZddZy)LlamaContentFormatterzContent formatter for `LLaMA`.Nc                     t        d      )Nzb`LlamaContentFormatter` is deprecated for chat models. Use `CustomOpenAIContentFormatter` instead.)	TypeErrorselfs    n/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/chat_models/azureml_endpoint.py__init__zLlamaContentFormatter.__init__.   s    6
 	
    returnN)__name__
__module____qualname____doc__r(    r)   r'   r"   r"   +   s
    (
r)   r"   c                       e Zd ZU dZg dZee   ed<   ede	de
fd       Zedee   fd       Zdee	   d	e
d
edefdZej"                  fded
edefdZy) CustomOpenAIChatContentFormatterz>Chat Content formatter for models with OpenAI like API scheme.)user	assistantsystemSUPPORTED_ROLESmessager+   c                 B   t        t        | j                        }t        | t              rdt        j                  |      dS t        | t              rdt        j                  |      dS t        | t              rdt        j                  |      dS t        | t              r>| j                  t        j                  v r"| j                  t        j                  |      dS dj                  t        j                  D cg c]  }| c}      }t        d|       c c}w )z0Converts a message to a dict according to a roler3   )rolecontentr4   r5   ,z\Received unsupported role. 
                Supported roles for the LLaMa Foundation Model: )r   strr:   
isinstancer   r    escape_special_charactersr   r   r   r9   r2   r6   join
ValueError)r7   r:   r9   	supporteds       r'   _convert_message_to_dictz9CustomOpenAIChatContentFormatter._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$SI AAJO  Ts   >	Dc                 B    t         j                  t         j                  gS )N)r   	dedicated
serverlessr%   s    r'   supported_api_typesz4CustomOpenAIChatContentFormatter.supported_api_types^   s    &002H2S2STTr)   messagesmodel_kwargsapi_typec                 l   |D cg c]  }t         j                  |       }}|t        j                  t        j                  fv rt        j                  d||di      }n<|t        j                  k(  rt        j                  d|i|      }nt        d| d      t        j                  |      S c c}w )/Formats the request according to the chosen api
input_datainput_string
parametersrG   `api_type` # is not supported by this formatter)r2   rB   r   rD   realtimejsondumpsrE   r@   r<   encoder&   rG   rH   rI   r7   chat_messagesrequest_payloads          r'   format_messages_request_payloadz@CustomOpenAIChatContentFormatter.format_messages_request_payloadb   s     $
 -EEgN
 
 ",,"++
 
 #jj (5&2#O /:::"jj*m)T|)TUOhZ'JK  zz/**-
s   B1outputc           	         |t         j                  t         j                  fv r>	 t        j                  |      d   }t        t        |j                               d      S |t         j                  k(  r	 t        j                  |      d   d   }t        |t               st        d      	 t        |d	   d
   dk(  r t        |d	   d   j                               n&t#        |d	   d   j                         |d	   d
         t!        |j%                  d      |j%                  d                  S t        d| d      # t
        t        t        f$ r+}t        | j                  j                  |            |d}~ww xY w# t
        t        t        f$ r+}t        | j                  j                  |            |d}~ww xY w)zFormats responserZ   )rI   Nr:   r7   generation_infochoicesr   ziEndpoint response is not well formed for a chat model. Expected `dict` but `{type(choice)}` was received.r7   r9   r4   r:   )r:   typefinish_reasonlogprobs)ra   rb   rP   rQ   )r   rD   rR   rS   loadsKeyError
IndexErrorr$   r@   format_error_msgformatr   r   striprE   r=   dictr   get)r&   rZ   rI   choicees        r'   format_response_payloadz8CustomOpenAIChatContentFormatter.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/   E 56F F &E;;F G&F==GN)r,   r-   r.   r/   r6   r   r<   __annotations__staticmethodr   r   rB   propertyr   rF   bytesrY   rD   r   rm   r0   r)   r'   r2   r2   5   s    H!@OT#Y@!+ !$ ! !F UT*@%A U U+{#+ + )	+
 
+D ,B+K+K*V*V )*V 
	*Vr)   r2   c                   $     e Zd ZdZd fdZ xZS )LlamaChatContentFormatterzSDeprecated: Kept for backwards compatibility

    Chat Content formatter for Llama.c                 L    t         |           t        j                  d       y )Nz`LlamaChatContentFormatter` will be deprecated in the future. 
                Please use `CustomOpenAIChatContentFormatter` instead.  
            )superr(   warningswarn)r&   	__class__s    r'   r(   z"LlamaChatContentFormatter.__init__   s    	
r)   r*   )r,   r-   r.   r/   r(   __classcell__)rx   s   @r'   rs   rs      s    )
 
r)   rs   c                   .    e Zd ZdZdee   dededefdZ	y)MistralChatContentFormatterz Content formatter for `Mistral`.rG   rH   rI   r+   c                    |D cg c]  }| j                  |       }}|r(|d   d   dk(  r|d   d   dz   |d   d   z   |d   d<   |d= |t        j                  k(  rt        j                  d||di      }n<|t        j
                  k(  rt        j                  d	|i|      }nt        d
| d      t        j                  |      S c c}w )rK   r   r9   r5   r:   z

   rL   rM   rG   rP   rQ   )	rB   r   rR   rS   rT   rE   r@   r<   rU   rV   s          r'   rY   z;MistralChatContentFormatter.format_messages_request_payload   s     PXXG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N)
r,   r-   r.   r/   r   r   r   r   rq   rY   r0   r)   r'   r{   r{      s5    * +{# +  + )	 +
 
 +r)   r{   c                       e Zd ZdZedeeef   fd       Ze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de
e   dee
e      dee   d	edee   f
dZy)AzureMLChatOnlineEndpointa  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                 .    | j                   xs i }i d|iS )zGet the identifying parameters.rH   )rH   )r&   _model_kwargss     r'   _identifying_paramsz-AzureMLChatOnlineEndpoint._identifying_params   s+     ))/R
}-
 	
r)   c                      y)zReturn type of llm.azureml_chat_endpointr0   r%   s    r'   	_llm_typez#AzureMLChatOnlineEndpoint._llm_type   s     'r)   NrG   stoprun_managerkwargsc                 @   | j                   xs i }|j                  |       |r||d<   | j                  j                  ||| j                        }| j
                  j                  ||      }| j                  j                  || j                        }t        |g      S )a  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)	rH   updatecontent_formatterrY   endpoint_api_typehttp_clientcallrm   r   )	r&   rG   r   r   r   r   rX   response_payloadr   s	            r'   	_generatez#AzureMLChatOnlineEndpoint._generate   s    " ))/RV$$(M&!00PPmT%;%;
  ++00 k 1 
 ,,DDd44
 {m44r)   c              +   &  K   | j                   j                  dd      | _         d|vrd n|d   }dd l}i }| j                  j	                         | j                   |d d d d} |j
                  di |}	|D 
cg c]  }
t        j                  |
       }}
d|d d|}t        } |	j                  j                  j                  dd|i|D ]  }t        |t              s|j                         }t        |d	         dk(  r5|d	   d   }t        |d
   |      }i }|j!                  d      x}r||d<   |j!                  d      }|r||d<   |j"                  }t%        ||xs d       }|r|j'                  |j(                  ||       |  y c c}
w w)N/chat/completions timeoutr   api_keybase_urlr   default_headersdefault_queryr   Tstreamr   modelrG   r_   deltara   rb   r]   )chunkrb   r0   )endpoint_urlreplaceopenaiendpoint_api_keyget_secret_valueOpenAIr2   rB   r   chatcompletionscreater=   ri   len_convert_delta_to_message_chunkrj   rx   r   on_llm_new_tokentext)r&   rG   r   r   r   r   r   paramsclient_paramsclientmmessage_dictsdefault_chunk_classr   rk   r^   ra   rb   s                     r'   _streamz!AzureMLChatOnlineEndpoint._stream  s     !--556I2N#61$vi7H,,==?))#!
 // 
 -EEaH
 
 !$HH,3V[[,,33U]UfU 	EeT*

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

? ;;};3@0zz*-H.6
+"'//' / 74E ,,UZZux,XK/	
s   A4F6FC?Fc                `  K   | j                   j                  dd      | _         d|vrd n|d   }dd l}i }| j                  j	                         | j                   |d d d d} |j
                  di |}	|D 
cg c]  }
t        j                  |
       }}
d|d d|}t        } |	j                  j                  j                  dd|i| d {   2 3 d {   }t        |t              s|j                         }t        |d	         dk(  r;|d	   d   }t        |d
   |      }i }|j!                  d      x}r||d<   |j!                  d      }|r||d<   |j"                  }t%        ||xs d       }|r&|j'                  |j(                  ||       d {    | c c}
w 7 7 7 6 y w)Nr   r   r   r   r   Tr   rG   r_   r   ra   rb   r]   )tokenr   rb   r0   )r   r   r   r   r   AsyncOpenAIr2   rB   r   r   r   r   r=   ri   r   r   rj   rx   r   r   r   )r&   rG   r   r   r   r   r   r   r   async_clientr   r   r   r   rk   r^   ra   rb   s                     r'   _astreamz"AzureMLChatOnlineEndpoint._astreamT  s     !--556I2N#61$vi7H,,==?))#!
 *v)):M: 
 -EEaH
 
 !$HH,!E!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   A4F.6F!;F.F&F.F,F(F,B<F.F*F.(F,*F.,F.)NN)r,   r-   r.   r/   rp   r   r<   r   r   r   r   r   r	   r   r   r   r   r   r   r   r   r   r0   r)   r'   r   r      sF   
 
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r)   r   _dictdefault_classr+   c                 x   t        t        | j                  d            }t        t        | j                  d      xs d      }i }| j                  d      r!t        | d         }d|v r
|d   d|d<   ||d<   | j                  d      r| d   |d<   |dk(  s	|t        k(  rt	        |      S |d	k(  s	|t
        k(  rt        ||
      S |dk(  s	|t        k(  rt        |      S |dk(  s	|t        k(  rt        || d         S |dk(  s	|t        k(  rt        || d         S |s	|t        k(  rt        ||      S  ||      S )Nr9   r:   r   function_callname
tool_callsr3   r\   r4   )r:   additional_kwargsr5   function)r:   r   tooltool_call_id)r:   r   )r:   r9   )
r   r<   rj   ri   r   r   r   r   r   r   )r   r   r9   r:   r   r   s         r'   r   r     sN    UYYv&'D3		),23G yy!U?34]"}V'<'D$&M&!-:/*yy*/*=,'v~*;; 11		 ?gARSS		].@@!'22		}0DD#G%-HH	=,<<eN>STT	"22d;;W--r)   )-rS   rv   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"   r2   rs   r{   r   r<   r   r0   r)   r'   <module>r      s     
 
 
 E    S R 
0 
vV'; vVr
 @ 
#+"; #+Lj/B jZ.38.-12B-C..r)   