Ë
    µŒjH"  ã                  óê   — d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlm Z   G d„ de«      Z! G d„ dee«      Z"y)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                  ó0   — e Zd ZU dZded<   ded<   ded<   y)Ú_ParamMappingz/Mapping from parameter name to parameter value.ú	List[str]Úquery_paramsÚbody_paramsÚpath_paramsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úr/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chains/openapi/chain.pyr   r      s   … Ù9àÓØÓØÔr"   r   c                  óŒ  — e Zd ZU dZded<   dZded<   ded<    ed	e¬
«      Zded<    ed¬«      Z	ded<   dZ
ded<   dZded<   dZded<    ed¬«      Zded<   ed&d„«       Zed&d„«       Zd'd„Zd(d„Zd)d „Zd*d!„Zd+d"„Z	 d,	 	 	 	 	 d-d#„Ze	 	 d.	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d/d$„«       Ze	 	 	 	 	 d0	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d1d%„«       Zy)2ÚOpenAPIEndpointChainz@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                ó   — | j                   gS )z2Expect input key.

        :meta private:
        )r2   ©Úselfs    r#   Ú
input_keyszOpenAPIEndpointChain.input_keys*   s   € ð ×%Ñ%Ð&Ð&r"   c                óP   — | j                   s| j                  gS | j                  dgS )z3Expect output key.

        :meta private:
        Úintermediate_steps©r/   r4   r8   s    r#   Úoutput_keysz OpenAPIEndpointChain.output_keys2   s*   € ð ×-Ò-Ø—O‘OÐ$Ð$à—O‘OÐ%9Ð:Ð:r"   c           
     óô   — | j                   j                  | j                   j                  z   }| j                  j                  D ]1  }|j                  d|› d�t        |j                  |d«      «      «      }Œ3 |S )z/Construct the path from the deserialized input.Ú{Ú}Ú )r(   Úbase_urlÚpathr,   r   Úreplacer1   Úpop)r9   ÚargsrD   Úparams       r#   Ú_construct_pathz$OpenAPIEndpointChain._construct_path=   sg   € à×!Ñ!×*Ñ*¨T×-?Ñ-?×-DÑ-DÑDˆØ×'Ñ'×3Ô3ˆEØ—<‘< " U G¨2 ´°D·H±H¸UÀBÓ4GÓ0HÓI‰Dð 4àˆr"   c                ór   — i }| j                   j                  D ]  }||v sŒ|j                  |«      ||<   Œ |S )z5Extract the query params from the deserialized input.)r,   r   rF   )r9   rG   r   rH   s       r#   Ú_extract_query_paramsz*OpenAPIEndpointChain._extract_query_paramsD   s>   € àˆØ×'Ñ'×4Ô4ˆEØ˜Š}Ø&*§h¡h¨u£o�˜UÒ#ð 5ð Ðr"   c                ó¢   — d}| j                   j                  r6i }| j                   j                  D ]  }||v sŒ|j                  |«      ||<   Œ |S )z<Extract the request body params from the deserialized input.N)r,   r   rF   )r9   rG   r   rH   s       r#   Ú_extract_body_paramsz)OpenAPIEndpointChain._extract_body_paramsL   sR   € àˆØ×Ñ×)Ò)ØˆKØ×+Ñ+×7Ô7�Ø˜D’=Ø)-¯©°%«�K Ò&ð 8ð Ðr"   c                óž   — t        j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|||dœS )zUse the serialized typescript dictionary.

        Resolve the path, query params dict, and optional requestBody dict.
        )ÚurlÚdataÚparams)ÚjsonÚloadsrI   rM   rK   )r9   Úserialized_argsrG   rD   r   r   s         r#   Údeserialize_json_inputz+OpenAPIEndpointChain.deserialize_json_inputV   sU   € ô
 —Z‘Z Ó0ˆØ×#Ñ# DÓ)ˆØ×/Ñ/°Ó5ˆØ×1Ñ1°$Ó7ˆàØØ"ñ
ð 	
r"   c                óV   — | j                   r| j                  |d|iS | j                  |iS )z$Return the output from the API call.r<   r=   )r9   r3   r<   s      r#   Ú_get_outputz OpenAPIEndpointChain._get_outpute   s5   € à×)Ò)à—‘ Ø$Ð&8ðð ð
 —O‘O VÐ,Ð,r"   c                ó<  — |xs t        j                  «       }i }|| j                     }|d | j                   }| j                  j                  ||j                  «       ¬«      }t        t        |«      }||d<   |j                  |dd| j                  ¬«       |j                  d«      r| j                  ||«      S |j                  d«      r| j                  |t        d«      d  |«      S 	 | j                  |«      }t        | j                   | j"                  j$                  j&                  «      }	 |	di |¤Ž}
|
j(                  dk7  rit        | j"                  j$                  j&                  «      }|
j(                  › d	|
j*                  › �d
|j-                  «       › d|d   › d�z   d|d   › �z   }n|
j.                  }|d | j                   }||d<   |j                  |dd| j                  ¬«       | j2                  �m| j2                  j                  |||j                  «       ¬«      }t        t        |«      }|j                  |dd| j                  ¬«       | j                  ||«      S | j                  ||«      S # t0        $ r}dt        |«      › �}Y d }~ŒÚd }~ww xY w)N)r0   Ú	callbacksÚrequest_argsÚgreenÚ
)ÚcolorÚendÚverboseÚERRORzMESSAGE:éÈ   z: z
For z  rO   zCalled with args: rQ   zError with message Úresponse_textÚblue)Úresponser0   rY   Úyellowr!   )r   Úget_noop_managerr2   r6   r&   Úpredict_and_parseÚ	get_childr	   r1   Úon_textr_   Ú
startswithrW   ÚlenrU   Úgetattrr+   r(   ÚmethodÚvalueÚstatus_codeÚreasonÚupperÚtextÚ	Exceptionr'   )r9   ÚinputsÚrun_managerÚ_run_managerr<   r0   Ú_api_argumentsÚapi_argumentsrZ   rm   Úapi_responseÚ
method_strrb   ÚeÚ_answerÚanswers                   r#   Ú_callzOpenAPIEndpointChain._callo   sÄ  € ð
 #ÒSÔ&@×&QÑ&QÓ&SˆØÐØ˜d×3Ñ3Ñ4ˆØ#Ð$: d×&:Ñ&:Ð;ˆØ×/Ñ/×AÑAØ%°×1GÑ1GÓ1Ið Bó 
ˆô œS .Ó1ˆØ-:Ð˜>Ñ*Ø×ÑØ ¨d¸D¿L¹Lð 	ô 	
ð ×#Ñ# GÔ,Ø×#Ñ# MÐ3EÓFÐFØ×%Ñ% jÔ1Ø×#Ñ#Øœc *›oÐ/Ð0Ð2Dóð ð	;Ø×6Ñ6°}ÓEˆLÜ˜TŸ]™]¨D×,>Ñ,>×,EÑ,E×,KÑ,KÓLˆFÙ%+Ñ%;¨lÑ%;ˆLØ×'Ñ'¨3Ò.Ü  ×!3Ñ!3×!:Ñ!:×!@Ñ!@ÓA�
à#×/Ñ/Ð0°°<×3FÑ3FÐ2GÐHØ˜z×/Ñ/Ó1Ð2°"°\À%Ñ5HÐ4IÈÐLñMà*¨<¸Ñ+AÐ*BÐCñDñ ð !-× 1Ñ 1�ð &Ð&<¨×(<Ñ(<Ð=ˆØ.;Ð˜?Ñ+Ø×ÑØ ¨T¸4¿<¹<ð 	ô 	
ð ×"Ñ"Ð.Ø×-Ñ-×?Ñ?Ø&Ø)Ø&×0Ñ0Ó2ð @ó ˆGô
 œ#˜wÓ'ˆFØ× Ñ  ¨x¸TÈ4Ï<É<Ð ÔXØ×#Ñ# FÐ,>Ó?Ð?à×#Ñ# MÐ3EÓFÐFøô# ò 	;Ø1´#°a³&°Ð:�Mûð	;ús   Ã+CI: É:	JÊJÊJc                ó^   — t        j                  |||«      } | j                  |f|||dœ|¤ŽS )z;Create an OpenAPIEndpoint from a spec at the specified url.)r+   Úllmr/   )r   Úfrom_openapi_urlÚfrom_api_operation)	ÚclsÚspec_urlrD   rm   r€   r+   r/   ÚkwargsÚ	operations	            r#   Úfrom_url_and_methodz(OpenAPIEndpointChain.from_url_and_method¦   sH   € ô !×1Ñ1°(¸DÀ&ÓIˆ	Ø%ˆs×%Ñ%Øð
àØØ&?ñ	
ð
 ñ
ð 	
r"   c                ó   — t        |j                  |j                  |j                  ¬«      }	t	        j
                  ||j                  «       ||¬«      }
|rd}nt        j                  |||¬«      }|xs
 t        «       } | d|
||||	|||dœ|¤ŽS )z<Create an OpenAPIEndpointChain from an operation and a spec.)r   r   r   )Útypescript_definitionr_   rY   N)r_   rY   )r&   r'   r(   r+   r,   r_   r/   rY   r!   )
r   r   r   r   r
   Úfrom_llm_and_typescriptÚto_typescriptr   Úfrom_llmr   )rƒ   r†   r€   r+   r_   r/   Úraw_responserY   r…   r,   Úrequests_chainÚresponse_chainÚ	_requestss                r#   r‚   z'OpenAPIEndpointChain.from_api_operation¼   s³   € ô &Ø"×/Ñ/Ø!×-Ñ-Ø!×-Ñ-ô
ˆô
 +×BÑBØØ"+×"9Ñ"9Ó";ØØô	
ˆñ Ø!‰Nä.×7Ñ7Ø˜W°	ôˆNð Ò*¤£
ˆ	Ùð 

Ø,Ø-Ø#ØØ'ØØ&?Øñ

ð ñ

ð 
	
r"   )Úreturnr   )rG   úDict[str, str]r‘   r1   )rG   r’   r‘   r’   )rG   r’   r‘   zOptional[Dict[str, str]])rT   r1   r‘   Údict)r3   r1   r<   r“   r‘   r“   )N)rt   zDict[str, Any]ru   z$Optional[CallbackManagerForChainRun]r‘   r’   )NF)r„   r1   rD   r1   rm   r1   r€   r   r+   úOptional[Requests]r/   r.   r…   r   r‘   ú'OpenAPIEndpointChain')NFFFN)r†   r   r€   r   r+   r”   r_   r.   r/   r.   r�   r.   rY   r   r…   r   r‘   r•   )r   r   r   r   r    r'   r   r   r+   r,   r/   r2   r4   r6   Úpropertyr:   r>   rI   rK   rM   rU   rW   r~   Úclassmethodr‡   r‚   r!   r"   r#   r%   r%      s½  … ÙJàÓØ-1ÐÐ*Ó1ØÓÙ t¸XÔF€HˆhÓFÙ#(¨Ô#?€M�=Ó?Ø&+Ð˜tÓ+Ø*Ð�cÓ*Ø€J�ÓÙ%*¨a¤[€O�]Ó0àò'ó ð'ð ò;ó ð;óóóó
ó-ð =Að5Gàð5Gð :ð5Gð 
ó	5Gðn ð (,Ø*/ð
àð
ð ð
ð ð	
ð
 ð
ð %ð
ð $(ð
ð ð
ð 
 ò
ó ð
ð* ð
 (,ØØ*/Ø"Ø#ð)
àð)
ð ð)
ð %ð	)
ð
 ð)
ð $(ð)
ð ð)
ð ð)
ð ð)
ð 
 ò)
ó ñ)
r"   r%   )#r   Ú
__future__r   rR   Ú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"   