§
    šŠtjí!  ã                  óø   — 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"dS )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                  ó2   — e Zd ZU dZded<   ded<   ded<   dS )Ú_ParamMappingz/Mapping from parameter name to parameter value.ú	List[str]Úquery_paramsÚbody_paramsÚpath_paramsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/chains/openapi/chain.pyr   r      s<   € € € € € € Ø9Ð9àÐÐÑØÐÐÑØÐÐÑÐÐr"   r   c                  ón  — 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dAd"„ZdBd#„ZdCd%„ZdDd(„ZdEd*„Z	 dFdGd/„Ze	 	 dHdId9„¦   «         Ze	 	 	 	 	 dJdKd?„¦   «         ZdS )LÚ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_lengthÚreturnr   c                ó   — | j         gS )zExpect input key.)r2   ©Úselfs    r#   Ú
input_keyszOpenAPIEndpointChain.input_keys*   s   € ð Ô%Ð&Ð&r"   c                ó2   — | j         s| j        gS | j        dgS )zExpect output key.Úintermediate_steps©r/   r4   r9   s    r#   Úoutput_keysz OpenAPIEndpointChain.output_keys/   s(   € ð Ô-ð 	;Ø”OÐ$Ð$à”OÐ%9Ð:Ð:r"   ÚargsúDict[str, str]c           
     óÌ   — | j         j        | j         j        z   }| j        j        D ]=}|                     d|› d�t          |                     |d¦  «        ¦  «        ¦  «        }Œ>|S )z/Construct the path from the deserialized input.Ú{Ú}Ú )r(   Úbase_urlÚpathr,   r   Úreplacer1   Úpop)r:   r@   rG   Úparams       r#   Ú_construct_pathz$OpenAPIEndpointChain._construct_path7   sg   € àÔ!Ô*¨TÔ-?Ô-DÑDˆØÔ'Ô3ð 	Jð 	JˆEØ—<’<  U   µ°D·H²H¸UÀBÑ4GÔ4GÑ0HÔ0HÑIÔIˆDˆDØˆr"   c                ó`   — i }| j         j        D ]}||v r|                     |¦  «        ||<   Œ|S )z5Extract the query params from the deserialized input.)r,   r   rI   )r:   r@   r   rJ   s       r#   Ú_extract_query_paramsz*OpenAPIEndpointChain._extract_query_params>   s@   € àˆØÔ'Ô4ð 	6ð 	6ˆEØ˜ˆ}ˆ}Ø&*§h¢h¨u¡o¤o�˜UÑ#øØÐr"   úOptional[Dict[str, str]]c                ó|   — d}| j         j        r-i }| j         j        D ]}||v r|                     |¦  «        ||<   Œ|S )z<Extract the request body params from the deserialized input.N)r,   r   rI   )r:   r@   r   rJ   s       r#   Ú_extract_body_paramsz)OpenAPIEndpointChain._extract_body_paramsF   sS   € àˆØÔÔ)ð 	9ØˆKØÔ+Ô7ð 9ð 9�Ø˜D�=�=Ø)-¯ª°%©¬�K Ñ&øØÐr"   Úserialized_argsÚdictc                ó´   — t          j        |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|||dœS )zUse the serialized typescript dictionary.

        Resolve the path, query params dict, and optional requestBody dict.
        )ÚurlÚdataÚparams)ÚjsonÚloadsrK   rP   rM   )r:   rQ   r@   rG   r   r   s         r#   Údeserialize_json_inputz+OpenAPIEndpointChain.deserialize_json_inputP   sd   € õ
 ”Z Ñ0Ô0ˆØ×#Ò# DÑ)Ô)ˆØ×/Ò/°Ñ5Ô5ˆØ×1Ò1°$Ñ7Ô7ˆàØØ"ð
ð 
ð 	
r"   r=   c                ó8   — | j         r| j        |d|iS | j        |iS )z$Return the output from the API call.r=   r>   )r:   r3   r=   s      r#   Ú_get_outputz OpenAPIEndpointChain._get_output_   s3   € àÔ)ð 	-à” Ø$Ð&8ðð ð
 ”O VÐ,Ð,r"   ÚinputsúDict[str, Any]Úrun_managerú$Optional[CallbackManagerForChainRun]c                óP  — |pt          j        ¦   «         }i }|| j                 }|d | j        …         }| j                             ||                     ¦   «         ¬¦  «        }t          t          |¦  «        }||d<   | 	                    |dd| j
        ¬¦  «         |                     d¦  «        r|                      ||¦  «        S |                     d¦  «        r+|                      |t          d¦  «        d …         |¦  «        S 	 |                      |¦  «        }t          | j        | j        j        j        ¦  «        }	 |	di |¤Ž}
|
j        dk    r^t          | j        j        j        ¦  «        }|
j        › d	|
j        › �d
|                     ¦   «         › d|d         › d�z   d|d         › �z   }n|
j        }n)# t0          $ r}dt          |¦  «        › �}Y d }~nd }~ww xY w|d | j        …         }||d<   | 	                    |dd| j
        ¬¦  «         | j        �x| j                             |||                     ¦   «         ¬¦  «        }t          t          |¦  «        }| 	                    |dd| j
        ¬¦  «         |                      ||¦  «        S |                      ||¦  «        S )N)r0   Ú	callbacksÚrequest_argsÚgreenú
)ÚcolorÚendÚverboseÚERRORzMESSAGE:éÈ   z: z
For z  rT   zCalled with args: rV   zError with message Úresponse_textÚblue)Úresponser0   ra   Úyellowr!   )r   Úget_noop_managerr2   r6   r&   Úpredict_and_parseÚ	get_childr	   r1   Úon_textrg   Ú
startswithr[   ÚlenrY   Úgetattrr+   r(   ÚmethodÚvalueÚstatus_codeÚreasonÚupperÚtextÚ	Exceptionr'   )r:   r\   r^   Ú_run_managerr=   r0   Ú_api_argumentsÚapi_argumentsrb   ru   Úapi_responseÚ
method_strrj   ÚeÚ_answerÚanswers                   r#   Ú_callzOpenAPIEndpointChain._calli   s  € ð
 #ÐSÕ&@Ô&QÑ&SÔ&SˆØÐØ˜dÔ3Ô4ˆØ#Ð$: dÔ&:Ð$:Ô;ˆØÔ/×AÒAØ%°×1GÒ1GÑ1IÔ1Ið Bñ 
ô 
ˆõ �S .Ñ1Ô1ˆØ-:Ð˜>Ñ*Ø×ÒØ ¨d¸D¼Lð 	ñ 	
ô 	
ð 	
ð ×#Ò# GÑ,Ô,ð 	Ø×#Ò# MÐ3EÑFÔFÐFØ×%Ò% jÑ1Ô1ð 	Ø×#Ò#Ø�c *™oœoÐ/Ð/Ô0Ð2Dñô ð ð	;Ø×6Ò6°}ÑEÔEˆLÝ˜Tœ]¨DÔ,>Ô,EÔ,KÑLÔLˆFØ%+ VÐ%;Ð%;¨lÐ%;Ð%;ˆLØÔ'¨3Ò.Ð.Ý  Ô!3Ô!:Ô!@ÑAÔA�
à#Ô/ÐHÐH°<Ô3FÐHÐHØL˜z×/Ò/Ñ1Ô1ÐLÐL°\À%Ô5HÐLÐLÐLñMàC¨<¸Ô+AÐCÐCñDð �ð !-Ô 1�øøÝð 	;ð 	;ð 	;Ø:µ#°a±&´&Ð:Ð:ˆMˆMˆMˆMˆMˆMøøøøð	;øøøà%Ð&<¨Ô(<Ð&<Ô=ˆØ.;Ð˜?Ñ+Ø×ÒØ ¨T¸4¼<ð 	ñ 	
ô 	
ð 	
ð Ô"Ð.ØÔ-×?Ò?Ø&Ø)Ø&×0Ò0Ñ2Ô2ð @ñ ô ˆGõ
 �#˜wÑ'Ô'ˆFØ× Ò  ¨x¸TÈ4Ì<Ð ÑXÔXÐXØ×#Ò# FÐ,>Ñ?Ô?Ð?à×#Ò# MÐ3EÑFÔFÐFs   ÄB1F8 Æ8
GÇGÇGÚspec_urlrG   ru   Úllmr   úOptional[Requests]Úkwargsr   ú'OpenAPIEndpointChain'c                óR   — t          j        |||¦  «        } | j        |f|||dœ|¤ŽS )z;Create an OpenAPIEndpoint from a spec at the specified url.)r+   r†   r/   )r   Úfrom_openapi_urlÚfrom_api_operation)	Úclsr…   rG   ru   r†   r+   r/   rˆ   Ú	operations	            r#   Úfrom_url_and_methodz(OpenAPIEndpointChain.from_url_and_method    sO   € õ !Ô1°(¸DÀ&ÑIÔIˆ	Ø%ˆsÔ%Øð
àØØ&?ð	
ð 
ð
 ð
ð 
ð 	
r"   rŽ   rg   Úraw_responsera   r   c                ó  — t          |j        |j        |j        ¬¦  «        }	t	          j        ||                     ¦   «         ||¬¦  «        }
|rd}nt          j        |||¬¦  «        }|pt          ¦   «         } | d|
||||	|||dœ|¤ŽS )z<Create an OpenAPIEndpointChain from an operation and a spec.)r   r   r   )Útypescript_definitionrg   ra   N)rg   ra   )r&   r'   r(   r+   r,   rg   r/   ra   r!   )
r   r   r   r   r
   Úfrom_llm_and_typescriptÚto_typescriptr   Úfrom_llmr   )r�   rŽ   r†   r+   rg   r/   r�   ra   rˆ   r,   Úrequests_chainÚresponse_chainÚ	_requestss                r#   rŒ   z'OpenAPIEndpointChain.from_api_operation¶   sÚ   € õ &Ø"Ô/Ø!Ô-Ø!Ô-ð
ñ 
ô 
ˆõ
 +ÔBØØ"+×"9Ò"9Ñ";Ô";ØØð	
ñ 
ô 
ˆð ð 	Ø!ˆNˆNå.Ô7Ø˜W°	ðñ ô ˆNð Ð*¥¡
¤
ˆ	Øˆsð 

Ø,Ø-Ø#ØØ'ØØ&?Øð

ð 

ð ð

ð 

ð 
	
r"   )r7   r   )r@   rA   r7   r1   )r@   rA   r7   rA   )r@   rA   r7   rN   )rQ   r1   r7   rR   )r3   r1   r=   rR   r7   rR   )N)r\   r]   r^   r_   r7   rA   )NF)r…   r1   rG   r1   ru   r1   r†   r   r+   r‡   r/   r.   rˆ   r   r7   r‰   )NFFFN)rŽ   r   r†   r   r+   r‡   rg   r.   r/   r.   r�   r.   ra   r   rˆ   r   r7   r‰   )r   r   r   r   r    r'   r   r   r+   r,   r/   r2   r4   r6   Úpropertyr;   r?   rK   rM   rP   rY   r[   r„   Úclassmethodr�   rŒ   r!   r"   r#   r%   r%      sþ  € € € € € € ØJÐJàÐÐÑØ-1ÐÐ1Ð1Ð1Ñ1ØÐÐÑØ˜ t¸XÐFÑFÔF€HÐFÐFÐFÑFØ#( 5¨Ð#?Ñ#?Ô#?€MÐ?Ð?Ð?Ñ?Ø&+ÐÐ+Ð+Ð+Ñ+Ø*ÐÐ*Ð*Ð*Ñ*Ø€JÐÐÐÑØ%* U¨a [¡[¤[€OÐ0Ð0Ð0Ñ0àð'ð 'ð 'ñ „Xð'ð ð;ð ;ð ;ñ „Xð;ðð ð ð ðð ð ð ðð ð ð ð
ð 
ð 
ð 
ð-ð -ð -ð -ð =Að5Gð 5Gð 5Gð 5Gð 5Gðn ð (,Ø*/ð
ð 
ð 
ð 
ñ „[ð
ð* ð
 (,ØØ*/Ø"Ø#ð)
ð )
ð )
ð )
ñ „[ð)
ð )
ð )
r"   r%   )#r   Ú
__future__r   rW   Útypingr   r   r   r   r   r	   Ú3langchain_classic.chains.api.openapi.requests_chainr
   Ú3langchain_classic.chains.api.openapi.response_chainr   Úlangchain_classic.chains.baser   Úlangchain_classic.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¦      s€  ðØ SÐ Sà "Ð "Ð "Ð "Ð "Ð "à €€€Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >à QÐ QÐ QÐ QÐ QÐ QØ QÐ QÐ QÐ QÐ QÐ QØ /Ð /Ð /Ð /Ð /Ð /Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ <Ð <Ð <Ð <Ð <Ð <Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð à KÐ KÐ KÐ KÐ KÐ KØ ;Ð ;Ð ;Ð ;Ð ;Ð ;ðð ð ð ð �Jñ ô ð ðC
ð C
ð C
ð C
ð C
˜5 )ñ C
ô C
ð C
ð C
ð C
r"   