
    dhK                    L   S r SSKJr  SSKrSSK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rSSKrSSKJrJr  SSKJr  SSKJr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,J-r-  SSK.J/r/  SSK.J0r1  SSK2J3r3J4r4J5r5  SSK6J7r7  SSK8J9r9  SSK:J;r;  SSK<J=r=  SSK>J?r?J@r@JArAJBrB  SSKCJDrD  SSKEJFrF  \R                  " \H5      rI " S S\J5      rK S#     S$S jjrLS%S jrMS&S jrNS'S jrO      S(S jrPS)S jrQ " S S\5      rRS*S jrSS+S  jrTS,S! jrUS-S" jrVg).z!deepinfra.com chat models wrapper    )annotationsN)JSONDecodeError)AnyAsyncIteratorCallableDictIteratorListMappingOptionalSequenceTupleTypeUnion)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LanguageModelInput)BaseChatModelagenerate_from_streamgenerate_from_stream)create_base_retry_decorator)	AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageChatMessageChunkFunctionMessageFunctionMessageChunkHumanMessageHumanMessageChunkSystemMessageSystemMessageChunkToolMessage)ToolCall	tool_call)ChatGenerationChatGenerationChunk
ChatResult)Runnable)BaseToolget_from_dict_or_env)convert_to_openai_tool)	BaseModel
ConfigDictFieldmodel_validator)Self)Requestsc                      \ rS rSrSrSrg)ChatDeepInfraExceptionF   z9Exception raised when the DeepInfra API returns an error. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r9       a/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/deepinfra.pyr7   r7   F   s    Cr@   r7   ChatDeepInfrac                h    [        [        R                  R                  [        /U R
                  US9$ )zLReturns a tenacity retry decorator, preconfigured to handle PaLM exceptions.)error_typesmax_retriesrun_manager)r   requests
exceptionsConnectTimeoutr7   rE   )llmrF   s     rA   _create_retry_decoratorrK   L   s0     '((779OPOO r@   c                    U S   R                  SS5      n [        R                  " U S   S   5      nU R                  S5      n[        XUS9$ ! [        [        4 a    0 n N/f = f)zc
Convert a tool calling response from server to a ToolCall object.
Args:
    tool_call:

Returns:

functionname 	argumentsid)rN   argsrQ   )getjsonloadsr   	TypeErrorcreate_tool_call)r'   rN   rR   rQ   s       rA   _parse_tool_callingrX   Z   sp     Z $$VR0Dzz)J/<= 
t	BR88 Y' s   A A#"A#c                f    S[         R                  " U S   5      U S   S.U R                  S5      S.$ )za
Convert a ToolCall object to a tool calling request for server.
Args:
    tool_call:

Returns:

rM   rR   rN   )rP   rN   rQ   )typerM   rQ   )rT   dumpsrS   r&   s    rA   _convert_to_tool_callingr\   l   s=     If$56f%
 mmD! r@   c                b   U S   nUS:X  a  [        U S   S9$ US:X  aY  U R                  SS5      =(       d    SnU R                  S/ 5      =(       d    / nU Vs/ sH  n[        U5      PM     nn[        X%S9$ US	:X  a  [	        U S   S9$ US
:X  a  [        U S   U S   S9$ [        U S   US9$ s  snf )Nroleusercontentr`   	assistantrO   
tool_callsr`   rc   systemrM   rN   r`   rN   r`   r^   )r    rS   rX   r   r"   r   r   )_dictr^   r`   tool_calls_contentr'   rc   s         rA   _convert_dict_to_messagerj      s    =Dv~E)$455		))Ir*0b"YY|R8>B<N
<Ny	*<N 	 
 @@		U9%566		uY'7eFmLL5#3$??
s   B,c                   U R                  S5      nU R                  S5      =(       d    SnU R                  S5      =(       d    / nUS:X  d
  U[        :X  a	  [        US9$ US:X  d
  U[        :X  a#  U Vs/ sH  n[        U5      PM     nn[        X4S9$ US	:X  d
  U[        :X  a	  [	        US9$ US
:X  d
  U[
        :X  a  [        X0S   S9$ U(       d
  U[        :X  a	  [        X2S9$ U" US9$ s  snf )Nr^   r`   rO   rc   r_   ra   rb   rd   re   rM   rN   rf   rg   )rS   r!   r   rX   r#   r   r   )rh   default_classr^   r`   rc   r'   s         rA   _convert_delta_to_message_chunkrm      s     99VDii	"(bG<(.BJv~*;; 11		 ?FPQj))4j
QgEE		].@@!'22		}0DD#G-HH	"22;;W-- Rs   3C'c                   [        U [        5      (       a  U R                  U R                  S.nGO[        U [        5      (       a  SU R                  S.nO[        U [
        5      (       a5  U R                   Vs/ sH  n[        U5      PM     nnSU R                  US.nO[        U [        5      (       a  SU R                  S.nOy[        U [        5      (       a  SU R                  U R                  S.nOI[        U [        5      (       a&  SU R                  U R                  U R                  S	.nO[        S
U  35      eSU R                  ;   a  U R                  S   US'   U$ s  snf )N)r^   r`   r_   rb   )r^   r`   rc   re   rM   )r^   r`   rN   tool)r^   r`   rN   tool_call_idzGot unknown type rN   )
isinstancer   r^   r`   r    r   rc   r\   r"   r   rN   r$   rp   
ValueErroradditional_kwargs)messagemessage_dictr'   rc   s       rA   _convert_message_to_dictrv      s=   ';'' 'I	G\	*	* &7??C	GY	'	'AHASAS
ASI$Y/AS 	 
  $

 
G]	+	+ (W__E	G_	-	-LL

 
G[	)	)LL#00	
 ,WI677***&88@V7
s   9E"c                    ^  \ rS rSr% Sr\" SSS9rS\S'    SrS\S	'    S
r	S\S'   \" S
SS9r
S\S'   SrS\S'    \" \S9rS\S'    S
rS\S'    S
rS\S'    SrS\S'    SrS\S'   SrS\S'   SrS\S'   \" S S!9r\S9S" j5       r\S9S# j5       r S:     S;S$ jjr S:     S<S% jjr\" S&S'9\S=S( j5       5       r\" S)S'9S>S* j5       r   S?           S@S+ jjrSAS, jr       SBS- jr!  SC         SDS. jjr"  SC         SES/ jjr#   S?           SFS0 jjr$\S9S1 j5       r%\SGS2 j5       r&SHS3 jr'SGS4 jr(SIS5 jr)SJS6 jr*      SKU 4S7 jjr+S8r,U =r-$ )LrB      z)A chat model that uses the DeepInfra API.zmeta-llama/Llama-2-70b-chat-hfmodel)defaultaliasstr
model_namez4https://api.deepinfra.com/v1/openai/chat/completionsurlNOptional[str]deepinfra_api_tokentimeoutzOptional[float]request_timeout   temperature)default_factoryDict[str, Any]model_kwargstop_pzOptional[int]top_kintn   
max_tokensFbool	streamingrE   T)populate_by_namec                    U R                   U R                  U R                  U R                  U R                  U R
                  S.U R                  E$ )z2Get the default parameters for calling OpenAI API.)ry   r   streamr   r   r   )r}   r   r   r   r   r   r   selfs    rA   _default_paramsChatDeepInfra._default_params   sL     __//nn++#33
 
 	
r@   c                    0 U R                   E$ )z.Get the parameters used for the openai client.)r   r   s    rA   _client_paramsChatDeepInfra._client_params   s     ($&&''r@   c                B   ^  [        T US9nUSU 4S jj5       nU" S0 UD6$ )z*Use tenacity to retry the completion call.rF   c                 @  >  U R                  S5      n[        TR                  5       S9nUR                  TR	                  5       TR                  U 5      US9nTR                  UR                  UR                  5        U$ ! [         a  n[        SU5        e S nAff = fNr   headersr~   datar   EX)popr5   _headerspost_url_body_handle_statusstatus_codetext	Exceptionprintkwargsr   requestresponseer   s        rA   _completion_with_retryCChatDeepInfra.completion_with_retry.<locals>._completion_with_retry  s    
"(**->"?"4==?;"<<		$**V*<o (  ##H$8$8(--H dAs   A=B 
BBBr   r   returnr   r9   rK   r   rF   r   retry_decoratorr   s   `    rA   completion_with_retry#ChatDeepInfra.completion_with_retry   s3     2$KP		 
	 &///r@   c                ^   ^ #    [        T US9nUSU 4S jj5       nU" S0 UD6I Sh  vN $  N7f)z0Use tenacity to retry the async completion call.r   c                   >#     U R                  S5      n[        TR                  5       S9nUR                  TR	                  5       TR                  U 5      US9 IS h  vN nTR                  UR                  UR                  5       I S h  vN 5        UR                  5       I S h  vN sS S S 5      IS h  vN   $  N_ N3 N N! , IS h  vN  (       d  f       g = f! [         a  n[        SU5        e S nAff = f7fr   )r   r5   r   apostr   r   r   statusr   rT   r   r   r   s        rA   r   DChatDeepInfra.acompletion_with_retry.<locals>._completion_with_retry  s     
"(**->"?"4==?;"==		$**V*<o )  ''x}}9NO!)0	   :O0	   
  dAs   D AC! B? C! #*CCC)C*C-C! 9C:C! >D ?C! CCC! CCCC! D C! !
C=+C88C==D Nr   r9   r   r   s   `    rA   acompletion_with_retry$ChatDeepInfra.acompletion_with_retry  s<      2$KP		 
	 ,5f5555s   #-+-before)modec                <    [        USSSS9n[        USSUS9US'   U$ )zGValidate api key, python package exists, temperature, top_p, and top_k.deepinfra_api_keyDEEPINFRA_API_KEYrO   )rz   r   DEEPINFRA_API_TOKENr-   )clsvaluesapi_keys      rA   init_defaultsChatDeepInfra.init_defaults.  s?    
 '	
 )=!!	)
$% r@   afterc                   U R                   b$  SU R                   s=::  a  S::  d  O  [        S5      eU R                  b$  SU R                  s=::  a  S::  d  O  [        S5      eU R                  b  U R                  S::  a  [        S5      eU $ )Nr   r   z+temperature must be in the range [0.0, 1.0]z%top_p must be in the range [0.0, 1.0]ztop_k must be positive)r   rr   r   r   r   s    rA   validate_environment"ChatDeepInfra.validate_environmentA  sw    'T5E5E0J0JJKK::!!tzz*>Q*>DEE::!djjAo566r@   c                
   Ub  UOU R                   nU(       a   U R                  " U4X#S.UD6n[        U5      $ U R                  X5      u  p0 U	EUEn	U R                  " SXS.U	D6n
U R                  U
R                  5       5      $ )NstoprF   messagesrF   r9   )r   _streamr   _create_message_dictsr   _create_chat_resultrT   )r   r   r   rF   r   r   should_streamstream_itermessage_dictsparamsr   s              rA   	_generateChatDeepInfra._generateN  s     #)"4$..,,#@FK (44 $ : :8 J%F%f%-- 
"
?E
 ''88r@   c           	         / nUS    HB  n[        US   5      n[        U[        UR                  S5      S9S9nUR	                  U5        MD     UR                  S0 5      nX`R
                  S.n[        X'S9nU$ )	Nchoicesrt   finish_reason)r   rt   generation_infousage)token_usagery   )generations
llm_output)rj   r(   dictrS   appendr}   r*   )r   r   r   resrt   genr   r   s           rA   r   !ChatDeepInfra._create_chat_resultd  s    I&C.s9~>G  $377?3K LC s# ' ll7B/%0??K
[H
r@   c                    U R                   nUb  SU;   a  [        S5      eX#S'   U Vs/ sH  n[        U5      PM     nnXS4$ s  snf )Nr   z2`stop` found in both the input and default params.)r   rr   rv   )r   r   r   r   mr   s         rA   r   #ChatDeepInfra._create_message_dictsr  sY     $$ !UVV!6N>FGh1!4hG$$ Hs   Ac              +  F  #    U R                  X5      u  pV0 UEUESS0EnU R                  " SXSS.UD6n[        UR                  5       5       HO  n[	        U5      n	U	(       d  M  [        U	S S9n
U(       a#  UR                  [        U	R                  5      U
S9  U
v   MQ     g 7f)Nr   Tr   r   chunkr9   )	r   r   _parse_stream
iter_lines_handle_sse_liner)   on_llm_new_tokenr|   r`   )r   r   r   rF   r   r   r   r   liner   cg_chunks              rA   r   ChatDeepInfra._stream}  s      !% : :8 J5F5f5h5-- 
"
?E
 "("5"5"78D$T*Eu.udS00U]]1C80T 9s   AB!$=B!c               P  #    U R                  X5      u  pVUSS.UEUEnUR                  S5      n[        U R                  5       S9nUR	                  U R                  5       U R                  U5      US9 IS h  vN n	[        U	R                  5        S h  vN n
[        U
5      nU(       d  M  [        US S9nU(       a+  UR                  [        UR                  5      US9I S h  vN   U7v   M`   Ny N] N
 S S S 5      IS h  vN    g ! , IS h  vN  (       d  f       g = f7f)NT)r   r   r   r   r   r   r   )r   r   r5   r   r   r   r   _parse_stream_asyncr`   r   r)   r   r|   )r   r   r   rF   r   r   r   r   r   r   r   r   r   s                rA   _astreamChatDeepInfra._astream  s     !% : :8 J+tPvPP **%674==?3==		$**V"4o ! 
 
1(2B2BC #d(.525RVWH")::.h ;    #N
#
 D
 
 
 
 
 
s   A7D&9C3:D&=DC9C5C9D07D'C7(D3D&5C97D9D:D&DD&D#DD#D&c                "  #    Ub  UOU R                   nU(       a(  U R                  " U4X#S.UD6n[        U5      I S h  vN $ U R                  X5      u  pSU0U	EUEn	U R                  " SSU0U	D6I S h  vN n
U R                  U
5      $  NL N7f)Nr   r   rF   r9   )r   r   r   r   r   r   )r   r   r   rF   r   r   r   r   r   r   r   s              rA   
_agenerateChatDeepInfra._agenerate  s      #)"4$..--#@FK /{;;; $ : :8 Jm@v@@//RKR6RR'',, <
 Ss!   <BB6B5B6BBc                v    U R                   U R                  U R                  U R                  U R                  S.$ )zGet the identifying parameters.)ry   r   r   r   r   )r}   r   r   r   r   r   s    rA   _identifying_params!ChatDeepInfra._identifying_params  s3     __++ZZZZ
 	
r@   c                    g)Nzdeepinfra-chatr9   r   s    rA   	_llm_typeChatDeepInfra._llm_type  s    r@   c                    US:  a  [        SU SU 35      eUS:  a  [        SU 35      eUS:w  a  [        SU SU 35      eg )Ni  zDeepInfra Server error status z: i  z'DeepInfra received an invalid payload:    z6DeepInfra returned an unexpected response with status )r7   rr   r   )r   coder   s      rA   r   ChatDeepInfra._handle_status  sm    3;(0b?  S[FtfMNNS[HbQUPVW  r@   c                    U R                   $ N)r~   r   s    rA   r   ChatDeepInfra._url  s    xxr@   c                &    SU R                    3SS.$ )Nzbearer zapplication/json)AuthorizationzContent-Type)r   r   s    rA   r   ChatDeepInfra._headers  s     &t'?'?&@A.
 	
r@   c                    U$ r  r9   )r   r   s     rA   r   ChatDeepInfra._body  s    r@   c                f   > U Vs/ sH  n[        U5      PM     nn[        TU ]  " SSU0UD6$ s  snf )a  Bind tool-like objects to this chat model.

Assumes model is compatible with OpenAI tool-calling API.

Args:
    tools: A list of tool definitions to bind to this chat model.
        Can be  a dictionary, pydantic model, callable, or BaseTool. Pydantic
        models, callables, and BaseTools will be automatically converted to
        their schema dictionary representation.
    **kwargs: Any additional parameters to pass to the
        :class:`~langchain.runnable.Runnable` constructor.
toolsr9   )r/   superbind)r   r  r   ro   formatted_tools	__class__s        rA   
bind_toolsChatDeepInfra.bind_tools  s>    $ EJJED1$7EJw|</<V<< Ks   .r9   )r   r   r  )rF   "Optional[CallbackManagerForLLMRun]r   r   r   r   )rF   'Optional[AsyncCallbackManagerForLLMRun]r   r   r   r   )r   r   r   r   )r   r4   )NNN)r   List[BaseMessage]r   Optional[List[str]]rF   r  r   Optional[bool]r   r   r   r*   )r   Mapping[str, Any]r   r*   )r   r  r   r  r   z+Tuple[List[Dict[str, Any]], Dict[str, Any]])NN)
r   r  r   r  rF   r  r   r   r   zIterator[ChatGenerationChunk])
r   r  r   r  rF   r  r   r   r   z"AsyncIterator[ChatGenerationChunk])r   r  r   r  rF   r  r   r  r   r   r   r*   )r   r|   )r	  r   r   r   r   None)r   r   )r   r   r   r   )r  zDSequence[Union[Dict[str, Any], Type[BaseModel], Callable, BaseTool]]r   r   r   z)Runnable[LanguageModelInput, BaseMessage]).r:   r;   r<   r=   r>   r2   r}   __annotations__r~   r   r   r   r   r   r   r   r   r   r   rE   r1   model_configpropertyr   r   r   r   r3   classmethodr   r   r   r   r   r   r   r   r  r  r   r   r   r   r  r?   __classcell__)r  s   @rA   rB   rB      s    3 $DGTJTECE&)--',T'KO_K#$K$#(#>L.>Q!E?!XE=AsJIJItKL 

 

 ( (
 AE0=0PS0	00 @D6<6 6 
	60 (#  $" '"
 #
 %):>!%9#9 "9 8	9
 9 9 
9,	%)	%1D	%	4	% %):>	# " 8	
  
'0 %)?C	### "# =	#
 # 
,#8 %)?C!%-#- "- =	-
 - - 
-* 
 
    

=S= = 
3	= =r@   c              #  F   #    U  H  n[        U5      nUc  M  Uv   M     g 7fr  _parse_stream_helperrbodyr   _lines      rA   r   r     s$     $T*K s   !	!c               V   #    U   S h  vN n[        U5      nUc  M  U7v   M    N
 g 7fr  r(  r*  s      rA   r   r     s+      d$T*Kes    )'%'))')c                    U (       ao  U R                  S5      (       aY  U R                  S5      (       a  U [        S5      S  n OU [        S5      S  n U R                  5       S:X  a  g U R                  S5      $ g )Ns   data:s   data: s   [DONE]zutf-8)
startswithlenstripdecode)r   s    rA   r)  r)    sh    ))??9%%I()DH(D::<9$ ;;w''r@   c                     [         R                  " U 5      n[        nUR                  S0 /5      S   R                  S0 5      n[	        X25      $ ! [
         a     g f = f)Nr   r   delta)rT   rU   r   rS   rm   r   )r   objdefault_chunk_classr4  s       rA   r   r     s\    jj,	B4(+//<.uJJ s   AA 
AAr  )rJ   rB   rF   zHOptional[Union[AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun]]r   zCallable[[Any], Any])r'   r   r   r%   )r'   r%   r   r   )rh   r   r   r   )rh   r   rl   zType[BaseMessageChunk]r   r   )rt   r   r   r   )r+  zIterator[bytes]r   zIterator[str])r+  zaiohttp.StreamReaderr   zAsyncIterator[str])r   bytesr   r   )r   r|   r   zOptional[BaseMessageChunk])Wr>   
__future__r   rT   loggingr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   aiohttprG    langchain_core.callbacks.managerr   r   langchain_core.language_modelsr   *langchain_core.language_models.chat_modelsr   r   r   #langchain_core.language_models.llmsr   langchain_core.messagesr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   langchain_core.messages.toolr%   r'   rW   langchain_core.outputsr(   r)   r*   langchain_core.runnablesr+   langchain_core.toolsr,   langchain_core.utilsr.   %langchain_core.utils.function_callingr/   pydanticr0   r1   r2   r3   typing_extensionsr4   &langchain_community.utilities.requestsr5   	getLoggerr:   loggerr   r7   rK   rX   r\   rj   rm   rv   rB   r   r   r)  r   r9   r@   rA   <module>rL     s"   ' "          > 
 L    2 F 
 . ) 5 H B B " ;			8	$	Y 	 			
 9$&@&..-C..,!Hn=M n=b	 r@   