
    dh?                        S 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  SSKrSSKJr  SSKJr  SSK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'J(r(J)r)J*r*J+r+J,r,  SSK-J.r.  SSK/J0r0  SSK1J2r2  SSK3J4r4  Sr5 \
S   r6S\S\4S jr7S\S\/ \4   4S jr8 " S S\2\5      r9 " S S\2\5      r: " S S\2\5      r; " S S\2\5      r< " S S\2\5      r=S\.S \S\4S! jr>S"\?S#\?S$\4S \S%\@S&\\6   S\4S' jrAS\.S$\4S \S%\@S&\\6   S\4S( jrB      S/S\.S$\4S \S)\\   S*\\   S+\@S,\\\?\4      S%\@S&\\6   S-\S\4S. jjrCg)0zLAgent that interacts with OpenAPI APIs via a hierarchical planning approach.    N)partial)AnyCallableDictListLiteralOptionalSequencecast)BaseCallbackManager)BaseLanguageModel)BasePromptTemplatePromptTemplate)BaseToolTool)Field)API_CONTROLLER_PROMPTAPI_CONTROLLER_TOOL_DESCRIPTIONAPI_CONTROLLER_TOOL_NAMEAPI_ORCHESTRATOR_PROMPTAPI_PLANNER_PROMPTAPI_PLANNER_TOOL_DESCRIPTIONAPI_PLANNER_TOOL_NAMEPARSING_DELETE_PROMPTPARSING_GET_PROMPTPARSING_PATCH_PROMPTPARSING_POST_PROMPTPARSING_PUT_PROMPT REQUESTS_DELETE_TOOL_DESCRIPTIONREQUESTS_GET_TOOL_DESCRIPTIONREQUESTS_PATCH_TOOL_DESCRIPTIONREQUESTS_POST_TOOL_DESCRIPTIONREQUESTS_PUT_TOOL_DESCRIPTION)ReducedOpenAPISpec)OpenAI)BaseRequestsTool)RequestsWrapperi  )GETPOSTPUTDELETEPATCHpromptreturnc                 ,    SSK Jn  U" [        5       U S9$ )Nr   LLMChainllmr-   )langchain.chains.llmr1   r%   )r-   r1   s     j/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/agent_toolkits/openapi/planner.py_get_default_llm_chainr6   3   s    -H     c                 "    [        [        U 5      $ )z#Returns a default LLMChain factory.)r   r6   )r-   s    r5   _get_default_llm_chain_factoryr9   <   s     )622r7   c                       \ rS rSr% SrSr\\S'    \r	\\S'    \
r\\S'    \" \" \5      S9r\\S'    S	\S
\4S jrS	\S
\4S jrSrg)RequestsGetToolWithParsingC   zHRequests GET tool with LLM-instructed extraction of truncated responses.requests_getnamedescriptionresponse_lengthdefault_factory	llm_chaintextr.   c                 F   SSK Jn   U" U5      nUR	                  S5      n[        [        U R                  R	                  US   US95      nUS U R                   nU R                  R                  XcS   S9R                  5       $ ! [        R                   a  nUeS nAff = f)Nr   parse_json_markdownparamsurl)rH   output_instructionsresponseinstructions)langchain.output_parsers.jsonrG   jsonJSONDecodeErrorgetr   strrequests_wrapperr@   rC   predictstrip)selfrD   rG   dataedata_paramsrL   s          r5   _runRequestsGetToolWithParsing._runQ   s    E	&t,D hhx(&&**4;{*K
 2d223~~%%1F,G & 

%'	 ## 	G	s   B B BB c                    #    [        5       e7fNNotImplementedErrorrV   rD   s     r5   _arun RequestsGetToolWithParsing._aruna        !##    N)__name__
__module____qualname____firstlineno____doc__r>   rR   __annotations__r    r?   MAX_RESPONSE_LENGTHr@   intr   r9   r   rC   r   rZ   ra   __static_attributes__re   r7   r5   r;   r;   C   sq    RD#4K4.OS.867IJIs  1   $ $ $r7   r;   c                       \ rS rSr% SrSr\\S'    \r	\\S'    \
r\\S'    \" \" \5      S9r\\S'    S	\S
\4S jrS	\S
\4S jrSrg)RequestsPostToolWithParsinge   zIRequests POST tool with LLM-instructed extraction of truncated responses.requests_postr>   r?   r@   rA   rC   rD   r.   c                 .   SSK Jn   U" U5      n[	        [
        U R                  R                  US   US   5      5      nUS U R                   nU R                  R                  XSS   S9R                  5       $ ! [        R                   a  nUeS nAff = fNr   rF   rI   rW   rJ   rK   )rN   rG   rO   rP   r   rR   rS   postr@   rC   rT   rU   rV   rD   rG   rW   rX   rL   s         r5   rZ    RequestsPostToolWithParsing._runs   s    E	&t,D S$"7"7"<"<T%[$v,"WX2d223~~%%1F,G & 

%'		 ## 	G	   A9 9BBBc                    #    [        5       e7fr]   r^   r`   s     r5   ra   !RequestsPostToolWithParsing._arun   rc   rd   re   N)rf   rg   rh   ri   rj   r>   rR   rk   r"   r?   rl   r@   rm   r   r9   r   rC   r   rZ   ra   rn   re   r7   r5   rp   rp   e   sq    SD#5K5.OS.867JKIs  1  $ $ $r7   rp   c                       \ rS rSr% SrSr\\S'    \r	\\S'    \
r\\S'    \" \" \5      S9r\\S'    S	\S
\4S jrS	\S
\4S jrSrg)RequestsPatchToolWithParsing   zJRequests PATCH tool with LLM-instructed extraction of truncated responses.requests_patchr>   r?   r@   rA   rC   rD   r.   c                 .   SSK Jn   U" U5      n[	        [
        U R                  R                  US   US   5      5      nUS U R                   nU R                  R                  XSS   S9R                  5       $ ! [        R                   a  nUeS nAff = frt   )rN   rG   rO   rP   r   rR   rS   patchr@   rC   rT   rU   rv   s         r5   rZ   !RequestsPatchToolWithParsing._run   s    E	&t,D &&,,T%[$v,G
 2d223~~%%1F,G & 

%'	 ## 	G	rx   c                    #    [        5       e7fr]   r^   r`   s     r5   ra   "RequestsPatchToolWithParsing._arun   rc   rd   re   N)rf   rg   rh   ri   rj   r>   rR   rk   r!   r?   rl   r@   rm   r   r9   r   rC   r   rZ   ra   rn   re   r7   r5   r|   r|      sq    T D# 6K6.OS.867KLIs  1  $ $ $r7   r|   c                       \ rS rSr% SrSr\\S'    \r	\\S'    \
r\\S'    \" \" \5      S9r\\S'    S	\S
\4S jrS	\S
\4S jrSrg)RequestsPutToolWithParsing   zHRequests PUT tool with LLM-instructed extraction of truncated responses.requests_putr>   r?   r@   rA   rC   rD   r.   c                 .   SSK Jn   U" U5      n[	        [
        U R                  R                  US   US   5      5      nUS U R                   nU R                  R                  XSS   S9R                  5       $ ! [        R                   a  nUeS nAff = frt   )rN   rG   rO   rP   r   rR   rS   putr@   rC   rT   rU   rv   s         r5   rZ   RequestsPutToolWithParsing._run   s    E	&t,D S$"7"7";";DKf"VW2d223~~%%1F,G & 

%'		 ## 	G	rx   c                    #    [        5       e7fr]   r^   r`   s     r5   ra    RequestsPutToolWithParsing._arun   rc   rd   re   N)rf   rg   rh   ri   rj   r>   rR   rk   r#   r?   rl   r@   rm   r   r9   r   rC   r   rZ   ra   rn   re   r7   r5   r   r      sq    RD#4K4.OS.867IJIs  1  $ $ $r7   r   c                       \ rS rSr% SrSr\\S'    \r	\\S'    \
r\\   \S'    \" \" \5      S9r\\S'    S	\S
\4S jrS	\S
\4S jrSrg)RequestsDeleteToolWithParsing   z9Tool that sends a DELETE request and parses the response.requests_deleter>   r?   r@   rA   rC   rD   r.   c                 &   SSK Jn   U" U5      n[	        [
        U R                  R                  US   5      5      nUS U R                   nU R                  R                  XSS   S9R                  5       $ ! [        R                   a  nUeS nAff = f)Nr   rF   rI   rJ   rK   )rN   rG   rO   rP   r   rR   rS   deleter@   rC   rT   rU   rv   s         r5   rZ   "RequestsDeleteToolWithParsing._run   s    E	&t,D S$"7"7">">tE{"KL2d223~~%%1F,G & 

%'		 ## 	G	s   A5 5B	BBc                    #    [        5       e7fr]   r^   r`   s     r5   ra   #RequestsDeleteToolWithParsing._arun   rc   rd   re   N)rf   rg   rh   ri   rj   r>   rR   rk   r   r?   rl   r@   r	   rm   r   r9   r   rC   r   rZ   ra   rn   re   r7   r5   r   r      su    C!D#!7K7&%8OXc]8-67LMIs  4  $ $ $r7   r   api_specr3   c           	          SSK Jn  U R                   VVVs/ sH  u  p4oS SU 3PM     nnnn[        [        S/SSSR                  U5      -   0S9nU" XS9n[        [        [        UR                  S	9n	U	$ s  snnnf )
Nr   r0    query	endpointsz- templateinput_variablespartial_variablesr2   )r>   r?   func)
r4   r1   r   r   r   joinr   r   r   run)
r   r3   r1   r>   r?   _endpoint_descriptionsr-   chaintools
             r5   _create_api_planner_toolr      s     . =E<N<N<N$8Dq&+<N   # 	&tyy9N/O(OPF
 ,E"0YYD
 Ks   A6api_urlapi_docsrS   allow_dangerous_requestsallowed_operationsc                 p   SSK Jn  SSKJn  SSKJn  / n	SU;   a%  U" U[        S9n
U	R                  [        UU
US95        SU;   a%  U" U[        S9nU	R                  [        UUUS95        S	U;   a%  U" U[        S9nU	R                  [        UUUS95        S
U;   a%  U" U[        S9nU	R                  [        UUUS95        SU;   a%  U" U[        S9nU	R                  [!        UUUS95        U	(       d  [#        S5      e[%        [&        SS/U USR)                  U	 Vs/ sH  oR*                  PM     sn5      SR)                  U	 Vs/ sH  oR*                   SUR,                   3PM     sn5      S.S9nU" U" UUS9U	 Vs/ sH  oR*                  PM     snS9nUR/                  UU	SS9$ s  snf s  snf s  snf )Nr   AgentExecutorZeroShotAgentr0   r(   r2   )rS   rC   r   r)   r*   r+   r,   zTools not foundinputagent_scratchpad, 
: )r   r   
tool_namestool_descriptionsr   rC   allowed_toolsT)agenttoolsverbose)langchain.agents.agentr   langchain.agents.mrkl.baser   r4   r1   r   appendr;   r   rp   r   r   r   r   r   r|   
ValueErrorr   r   r   r>   r?   from_agent_and_tools)r   r   rS   r3   r   r   r   r   r1   r   get_llm_chainpost_llm_chainput_llm_chaindelete_llm_chainpatch_llm_chainr   r-   r   s                     r5   _create_api_controller_agentr      s    58-E"" S1CD&!1')A	
 ##!c2EF'!1()A	
 "" S1CD&!1')A	
 %%#4IJ)!1*)A	
 $$"s3GH(!1))A	
 *++& "45 ))5$A54YY5$AB!%@EFII;b!1!1 23F"	
F s62-23UTyyU3E --EPT-UU %BF 4s   F)#F.?F3
c                    ^ ^^^^^ T R                   S   S   mS[        S[        4UUU UUU4S jjn[        [        U[        S9$ )zExpose controller as a tool.

The tool is invoked with a plan from the planner, and dynamically
creates a controller agent with relevant documentation only to
constrain the context.
r   rI   plan_strr.   c           
      &  > Sn[         R                  " X5      nU VVs/ sH&  u  p4SR                  X4R                  S5      S   S9PM(     nnnSnU H  nSnTR                   Hl  u  pn[         R
                  " [         R                  " SS	U	5      5      nUR                  U5      (       d  MJ  S
nUSU S[        R                  " U5       S3-  nMn     U(       a  M  [        U S35      e   [        TUTTTT5      nUR                  U 5      $ s  snnf )Nz'\b(GET|POST|PATCH|DELETE|PUT)\s+(/\S+)*z{method} {route}?r   )methodroute Fz\{.*?\}z.*Tz== Docs for z == 
r   z endpoint does not exist.)refindallformatsplitr   compilesubmatchyamldumpr   r   r   )r   patternmatchesr   r   endpoint_namesdocs_strendpoint_namefound_matchr>   r   docs
regex_namer   r   r   r   base_urlr3   rS   s                 r5   $_create_and_run_api_controller_agentI_create_api_controller_tool.<locals>._create_and_run_api_controller_agent\  s"   <**W/ ")
!( %%V;;s;KA;N%O!( 	 
 +MK!)!3!3ZZ{D$(GH
##M22"&K,}oVDIIdOCTTV WWH	 "4
 ; M?2K!LMM , -$
 yy""/
s   ,D)r>   r   r?   )serversrR   r   r   r   )r   rS   r3   r   r   r   r   s   ````` @r5   _create_api_controller_toolr   L  sJ     "5)H#s #s # #8 %13 r7   shared_memorycallback_managerr   agent_executor_kwargskwargsc	                    SSK Jn
  SSKJn  SSKJn  [        X5      [        U UUUU5      /n[        [        SS/SR                  U Vs/ sH  oR                  PM     sn5      SR                  U Vs/ sH  oR                   S	UR                   3PM     sn5      S
.S9nU" SU" X/US9U Vs/ sH  oR                  PM     snS.U	D6nU
R                  " SUUUUS.U=(       d    0 D6$ s  snf s  snf s  snf )a  Construct an OpenAI API planner and controller for a given spec.

Inject credentials via requests_wrapper.

We use a top-level "orchestrator" agent to invoke the planner and controller,
rather than a top-level planner
that invokes a controller with its plan. This is to keep the planner simple.

You need to set allow_dangerous_requests to True to use Agent with BaseRequestsTool.
Requests can be dangerous and can lead to security vulnerabilities.
For example, users can ask a server to make a request to an internal
server. It's recommended to use requests through a proxy server
and avoid accepting inputs from untrusted sources without proper sandboxing.
Please see: https://python.langchain.com/docs/security
for further security information.

Args:
    api_spec: The OpenAPI spec.
    requests_wrapper: The requests wrapper.
    llm: The language model.
    shared_memory: Optional. The shared memory. Default is None.
    callback_manager: Optional. The callback manager. Default is None.
    verbose: Optional. Whether to print verbose output. Default is True.
    agent_executor_kwargs: Optional. Additional keyword arguments
        for the agent executor.
    allow_dangerous_requests: Optional. Whether to allow dangerous requests.
        Default is False.
    allowed_operations: Optional. The allowed operations.
        Default is ("GET", "POST").
    kwargs: Additional arguments.

Returns:
    The agent executor.
r   r   r   r0   r   r   r   r   r   )r   r   r   )r3   r-   memoryr   )r   r   r   r   re   )r   r   r   r   r4   r1   r   r   r   r   r   r>   r?   r   )r   rS   r3   r   r   r   r   r   r   r   r   r   r1   r   r   r-   r   s                    r5   create_openapi_agentr     s   \ 58- 	!/#$	
	E ( "45))5$A54YY5$AB!%@EFII;b!1!1 23F"
	F  s-H-23UTyyU3 E
 -- )	
 !&B  %BF 4s   	C)2#C.-C3)NNTNF)r(   r)   )Drj   rO   r   	functoolsr   typingr   r   r   r   r   r	   r
   r   r   langchain_core.callbacksr   langchain_core.language_modelsr   langchain_core.promptsr   r   langchain_core.toolsr   r   pydanticr   9langchain_community.agent_toolkits.openapi.planner_promptr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   /langchain_community.agent_toolkits.openapi.specr$   langchain_community.llmsr%   'langchain_community.tools.requests.toolr&   &langchain_community.utilities.requestsr'   rl   	Operationr6   r9   r;   rp   r|   r   r   r   rR   boolr   r   r   re   r7   r5   <module>r      sR   R  	  O O O  8 < E /     & O + D B   4;<	#5 # 33b#g3$!18 $D$"2H $>$#3X $B$!18 $>$$4h $F '8	,LVLVLV &LV 
	LV
 #LV !+LV 	LV^0 0%0 
0 #	0
 !+0 
0n $(6:6:%*.=Q Q%Q 
Q C=	Q
 23Q Q $DcN3Q #Q !+Q Q 	Qr7   