
    dhH"                        S r SSKJr  SSKrSSKJrJrJrJrJ	r	J
r
  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJrJr  SS
KJr  SSKJrJr  SSKJr  SSKJr  SSKJ r    " S S\5      r! " S S\\5      r"g)zMChain that makes API calls and summarizes the responses to answer a question.    )annotationsN)AnyDictList
NamedTupleOptionalcast)APIRequesterChain)APIResponderChain)Chain)LLMChain)CallbackManagerForChainRun	Callbacks)BaseLanguageModel)	BaseModelField)Response)APIOperation)Requestsc                  8    \ rS rSr% SrS\S'   S\S'   S\S'   Srg)	_ParamMapping   z/Mapping from parameter name to parameter value.	List[str]query_paramsbody_paramspath_params N)__name__
__module____qualname____firstlineno____doc____annotations____static_attributes__r       `/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chains/openapi/chain.pyr   r      s    9r%   r   c                     \ rS rSr% SrS\S'   SrS\S'   S\S	'   \" S
\S9r	S\S'   \" SS9r
S\S'   SrS\S'   SrS\S'   SrS\S'   \" SS9rS\S'   \S(S j5       r\S(S j5       rS)S jrS*S  jrS+S! jrS,S" jrS-S# jr S.     S/S$ jjr\  S0               S1S% jj5       r\     S2                 S3S& jj5       rS'rg)4OpenAPIEndpointChain   z@Chain interacts with an OpenAPI endpoint using natural language.r   api_request_chainNzOptional[LLMChain]api_response_chainr   api_operationT)excludedefault_factoryr   requestsparam_mapping)aliasr   Fboolreturn_intermediate_stepsinstructionsstrinstructions_keyoutput
output_keyr   )gezOptional[int]max_text_lengthc                    U R                   /$ )z"Expect input key.

:meta private:
)r6   selfs    r&   
input_keysOpenAPIEndpointChain.input_keys*   s     %%&&r%   c                Z    U R                   (       d  U R                  /$ U R                  S/$ )z#Expect output key.

:meta private:
intermediate_stepsr3   r8   r<   s    r&   output_keys OpenAPIEndpointChain.output_keys2   s*     --OO$$OO%9::r%   c           
         U R                   R                  U R                   R                  -   nU R                  R                   H2  nUR                  SU S3[        UR                  US5      5      5      nM4     U$ )z/Construct the path from the deserialized input.{} )r,   base_urlpathr0   r   replacer5   pop)r=   argsrJ   params       r&   _construct_path$OpenAPIEndpointChain._construct_path=   sg    !!**T-?-?-D-DD''33E<<"UG2DHHUB4G0HID 4r%   c                x    0 nU R                   R                   H  nX1;   d  M
  UR                  U5      X#'   M     U$ )z5Extract the query params from the deserialized input.)r0   r   rL   )r=   rM   r   rN   s       r&   _extract_query_params*OpenAPIEndpointChain._extract_query_paramsD   s:    ''44E}&*hhuo# 5 r%   c                    SnU R                   R                  (       a9  0 nU R                   R                   H  nX1;   d  M
  UR                  U5      X#'   M     U$ )z<Extract the request body params from the deserialized input.N)r0   r   rL   )r=   rM   r   rN   s       r&   _extract_body_params)OpenAPIEndpointChain._extract_body_paramsL   sN    ))K++77=)-%K& 8 r%   c                    [         R                  " U5      nU R                  U5      nU R                  U5      nU R	                  U5      nUUUS.$ )zoUse the serialized typescript dictionary.

Resolve the path, query params dict, and optional requestBody dict.
)urldataparams)jsonloadsrO   rU   rR   )r=   serialized_argsrM   rJ   r   r   s         r&   deserialize_json_input+OpenAPIEndpointChain.deserialize_json_inputV   sU    
 ZZ0##D)//511$7"
 	
r%   c                `    U R                   (       a  U R                  USU0$ U R                  U0$ )z$Return the output from the API call.rA   rB   )r=   r7   rA   s      r&   _get_output OpenAPIEndpointChain._get_outpute   s5    ))$&8 
 OOV,,r%   c                8   U=(       d    [         R                  " 5       n0 nXR                     nUS U R                   nU R                  R                  XSR                  5       S9n[        [        U5      nXtS'   UR                  USSU R                  S9  UR                  S5      (       a  U R                  Xt5      $ UR                  S5      (       a  U R                  U[        S5      S  U5      $  U R                  U5      n[        U R                   U R"                  R$                  R&                  5      n	U	" S0 UD6n
U
R(                  S:w  ai  [        U R"                  R$                  R&                  5      nU
R(                   S	U
R*                   3S
UR-                  5        SUS    S3-   SUS    3-   nOU
R.                  n US U R                   nXS'   UR                  USSU R                  S9  U R2                  bf  U R2                  R                  UUUR                  5       S9n[        [        U5      nUR                  USSU R                  S9  U R                  X5      $ U R                  X5      $ ! [0         a  nS[        U5       3n S nANS nAff = f)N)r4   	callbacksrequest_argsgreen
)colorendverboseERRORzMESSAGE:   z: z
For z  rX   zCalled with args: rZ   zError with message response_textblue)responser4   rd   yellowr   )r   get_noop_managerr6   r:   r*   predict_and_parse	get_childr	   r5   on_textrj   
startswithra   lenr^   getattrr/   r,   methodvaluestatus_codereasonuppertext	Exceptionr+   )r=   inputsrun_manager_run_managerrA   r4   _api_argumentsapi_argumentsre   rx   api_response
method_strrm   e_answeranswers                   r&   _callOpenAPIEndpointChain._callo   s   
 #S&@&Q&Q&S334#$:d&:&:;//AA%1G1G1I B 
 S.1-:>*dDLL 	 	
 ##G,,##MFF%%j11##c*o/02D 	;66}ELT]]D,>,>,E,E,K,KLF%+%;l%;L''3. !3!3!:!:!@!@A
#//0<3F3F2GHz//12"\%5H4ILM*<+A*BCD  !- 1 1 &&<(<(<=.;?+T4<< 	 	
 "".--??&)&002 @ G
 #w'F  xT4<< X##F??##MFF#  	;1#a&:M	;s   1CI7 7I7 7
JJJc                ^    [         R                  " XU5      nU R                  " U4UUUS.UD6$ )z;Create an OpenAPIEndpoint from a spec at the specified url.)r/   llmr3   )r   from_openapi_urlfrom_api_operation)	clsspec_urlrJ   rx   r   r/   r3   kwargs	operations	            r&   from_url_and_method(OpenAPIEndpointChain.from_url_and_method   sD     !11(&I	%%
&?	

 
 	
r%   c                $   [        UR                  UR                  UR                  S9n	[        R
                  " UUR                  5       UUS9n
U(       a  SnO[        R                  " X$US9nU=(       d
    [        5       nU " SU
UUUU	UUUS.UD6$ )z<Create an OpenAPIEndpointChain from an operation and a spec.)r   r   r   )typescript_definitionrj   rd   N)rj   rd   )r*   r+   r,   r/   r0   rj   r3   rd   r   )
r   r   r   r   r
   from_llm_and_typescriptto_typescriptr   from_llmr   )r   r   r   r/   rj   r3   raw_responserd   r   r0   requests_chainresponse_chain	_requestss                r&   r   'OpenAPIEndpointChain.from_api_operation   s     &"//!--!--

 +BB"+"9"9";	
 !N.77	N *
	 

,-#'&?

 

 
	
r%   r   )returnr   )rM   Dict[str, str]r   r5   )rM   r   r   r   )rM   r   r   zOptional[Dict[str, str]])r]   r5   r   dict)r7   r5   rA   r   r   r   )N)r   zDict[str, Any]r   z$Optional[CallbackManagerForChainRun]r   r   )NF)r   r5   rJ   r5   rx   r5   r   r   r/   Optional[Requests]r3   r2   r   r   r   'OpenAPIEndpointChain')NFFFN)r   r   r   r   r/   r   rj   r2   r3   r2   r   r2   rd   r   r   r   r   r   )r   r   r    r!   r"   r#   r+   r   r   r/   r0   r3   r6   r8   r:   propertyr>   rC   rO   rR   rU   r^   ra   r   classmethodr   r   r$   r   r%   r&   r(   r(      s   J-1*1tXFHhF#(#?M=?&+t+*c*J%*a[O]0' ' ; ;
- =A5G5G :5G 
	5Gn  (,*/

 
 	

 
 %
 $(
 
 
 
 
* 
 (,*/"#)
)
 )
 %	)

 )
 $()
 )
 )
 )
 
 )
 )
r%   r(   )#r"   
__future__r   r[   typingr   r   r   r   r   r	   +langchain.chains.api.openapi.requests_chainr
   +langchain.chains.api.openapi.response_chainr   langchain.chains.baser   langchain.chains.llmr   langchain_core.callbacksr   r   langchain_core.language_modelsr   pydanticr   r   r/   r   2langchain_community.tools.openapi.utils.api_modelsr   &langchain_community.utilities.requestsr   r   r(   r   r%   r&   <module>r      sN    S "  > > I I ' ) J < %  K ;J I
5) I
r%   