§
    è˜ºh-,  ã                  óV  — d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZ d dl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 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% d dl&m'Z' erd dl(m)Z) d6d„Z*d7d„Z+d8d"„Z,d9d$„Z- G d%„ d&e¦  «        Z.	 	 	 	 	 	 	 d:d;d5„Z/dS )<é    )ÚannotationsN)Údefaultdict)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚListÚOptionalÚTupleÚUnion)Ú
ChatOpenAI)ÚOpenAPISpec)ÚBaseLanguageModel)ÚBasePromptTemplateÚChatPromptTemplate)Úget_colored_text)ÚResponse)ÚCallbackManagerForChainRun)ÚChain)ÚLLMChain)ÚSequentialChain)ÚJsonOutputFunctionsParser)ÚAPIOperation)Ú	ParameterÚor   Úprefer_shortÚboolÚreturnúOptional[str]c                óZ   — t          | dd ¦  «        }t          | dd ¦  «        }|r|p|S |p|S )NÚsummaryÚdescription)Úgetattr)r   r   r!   r"   s       úq/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain/chains/openai_functions/openapi.pyÚ_get_descriptionr%      sB   € Ý�a˜ DÑ)Ô)€GÝ˜!˜]¨DÑ1Ô1€KØð &ØÐ%˜+Ð%ØÐ!˜'Ð!ó    ÚurlÚstrÚpath_paramsÚdictc                óT  ‡
— t          j        d| ¦  «        }i }|D �]€}|                     d¦  «                             d¦  «        }||         }t	          |t
          ¦  «        r†|d         dk    r)|d         dk    rdnd}d|                     |¦  «        z   }nþ|d         dk    r/|d         dk    r|› d	�nd}|› d	�|                     |¦  «        z   }nÃd                     |¦  «        }n­t	          |t          ¦  «        ro|d         dk    rd	ndŠ
ˆ
fd
„|                     ¦   «         D ¦   «         }	|d         dk    rd}d}n|d         dk    rd}d}nd}d}||                     |	¦  «        z  }n)|d         dk    rd|› �}n|d         dk    r	d|› d	|› �}n|}|||<   �Œ‚ | j	        di |¤ŽS )Nz{(.*?)}z.;Ú*r   ú.éÿÿÿÿú,ú;ú=c                óD   •— g | ]\  }}‰                      ||f¦  «        ‘ŒS © )Újoin)Ú.0ÚkÚvÚkv_seps      €r$   ú
<listcomp>z_format_url.<locals>.<listcomp>4   s-   ø€ ÐCÐCÐC©t¨q°!�v—{’{ A q 6Ñ*Ô*ÐCÐCÐCr&   Ú r3   )
ÚreÚfindallÚlstripÚrstripÚ
isinstanceÚlistr4   r*   ÚitemsÚformat)r'   r)   Úexpected_path_paramÚ
new_paramsÚparamÚclean_paramÚvalÚsepÚnew_valÚkv_strsr8   s             @r$   Ú_format_urlrK   #   s  ø€ Ýœ* Z°Ñ5Ô5ÐØ€JØ$ð  $ñ  $ˆØ—l’l 4Ñ(Ô(×/Ò/°Ñ4Ô4ˆØ˜+Ô&ˆÝ�c�4Ñ Ô ð 	Ø�QŒx˜3ŠˆØ" 2œY¨#Ò-Ð-�c�c°3�Ø §¢¨¡¤Ñ-��Ø�q”˜S’�Ø+0°¬9¸Ò+;Ð+;˜Ð'Ð'Ð'Ð'À�Ø(Ð+Ð+Ð+¨c¯hªh°s©m¬mÑ;��àŸ(š( 3™-œ-��Ý˜�TÑ"Ô"ð 	Ø! "œI¨Ò,Ð,�S�S°#ˆFØCÐCÐCÐC°s·y²y±{´{ÐCÑCÔCˆGØ�QŒx˜3ŠˆØ�Ø��Ø�q”˜S’�Ø�Ø��à�Ø�Ø�s—x’x Ñ(Ô(Ñ(ˆGˆGà�QŒx˜3ŠˆØ#˜c˜)˜)��Ø�q”˜S’�Ø1˜kÐ1Ð1¨CÐ1Ð1��à�Ø#ˆ
�5ÑÑØˆ3Œ:Ð#Ð#˜
Ð#Ð#Ð#r&   ÚparamsúList[Parameter]Úspecr   c                óÆ  — i }g }| D ]Õ}|j         r|                     |j         ¦  «        }nFt          |j                             ¦   «         ¦  «        d         j        }|                     |¦  «        }|j        r|j        s|j        |_        t          j        |                     d¬¦  «        ¦  «        ||j	        <   |j
        r|                     |j	        ¦  «         ŒÖd||dœS )Nr   T©Úexclude_noneÚobject)ÚtypeÚ
propertiesÚrequired)Úparam_schemaÚ
get_schemar@   ÚcontentÚvaluesÚmedia_type_schemar"   ÚjsonÚloadsÚnamerU   Úappend)rL   rN   rT   rU   ÚpÚschemarZ   s          r$   Ú_openapi_params_to_json_schemara   J   sá   € Ø€JØ€HØð 
$ð 
$ˆØŒ>ð 	8Ø—_’_ Q¤^Ñ4Ô4ˆFˆFå $ Q¤Y×%5Ò%5Ñ%7Ô%7Ñ 8Ô 8¸Ô ;Ô MÐØ—_’_Ð%6Ñ7Ô7ˆFØŒ=ð 	/ Ô!3ð 	/Ø!"¤ˆFÔÝ!œZ¨¯ªÀ¨Ñ(FÔ(FÑGÔGˆ
�1”6ÑØŒ:ð 	$Ø�OŠO˜AœFÑ#Ô#Ð#øØ¨JÀHÐMÐMÐMr&   ú%Tuple[List[Dict[str, Any]], Callable]c                óh  ‡— | j         sg d„ fS g }i Š| j         D �]Œ}d„ |                      |¦  «        D ¦   «         }|                      |¦  «        D �]S}i }|                      ||¦  «        }|                     ¦   «         }|                      |¦  «        D ]}|||j        |j        f<   Œt          t          ¦  «        }	| 
                    ¦   «         D ]&\  }
}|	|
d                                       |¦  «         Œ'dddddœ}| 
                    ¦   «         D ]&\  }}|	|         rt          |	|         | ¦  «        ||<   Œ'|                      |¦  «        }|rú|j        rói }|j         
                    ¦   «         D ]Q\  }}|j        rE|                      |j        ¦  «        }t#          j        |                     d	¬
¦  «        ¦  «        ||<   ŒRt'          |¦  «        dk    r:t          | 
                    ¦   «         ¦  «        d         \  }}|dk    rdnd}|||<   n9t'          |¦  «        dk    r&dt          |                     ¦   «         ¦  «        i|d<   t+          j        | ||¦  «        }|j        |j        d|dœdœ}|                     |¦  «         ||j        |j        z   dœ‰|d         <   �ŒU�ŒŽ	 	 ddˆfd„}||fS ) a4  Convert a valid OpenAPI spec to the JSON Schema format expected for OpenAI
        functions.

    Args:
        spec: OpenAPI spec to convert.

    Returns:
        Tuple of the OpenAI functions JSON schema and a default function for executing
            a request based on the OpenAI function schema.
    c                 ó   — d S ©Nr3   r3   r&   r$   ú<lambda>z+openapi_spec_to_openai_fn.<locals>.<lambda>i   s   € ˜4€ r&   c                ó,   — i | ]}|j         |j        f|“ŒS r3   )r]   Úparam_in)r5   r_   s     r$   ú
<dictcomp>z-openapi_spec_to_openai_fn.<locals>.<dictcomp>m   s0   € ð 
ð 
ð 
Ø()ˆQŒV�Q”ZÐ  !ð
ð 
ð 
r&   é   rL   ÚheadersÚcookiesr)   )ÚqueryÚheaderÚcookieÚpathTrP   r   zapplication/jsonr[   ÚdataÚanyOfrR   )rS   rT   )r]   r"   Ú
parameters)Úmethodr'   r]   Nr(   Úfn_argsr*   úOptional[dict]Úkwargsr   r   c                óÎ  •— ‰	|          d         }‰	|          d         }|                      di ¦  «        }t          ||¦  «        }d|v r8t          |d         t          ¦  «        rt	          j        |d         ¦  «        |d<   i |¥|¥}|�%d|v r|d                              |¦  «         n||d<   |�%d|v r|d                              |¦  «         n||d<   t          j        ||fi |¤ŽS )Nrt   r'   r)   rq   rk   rL   )	ÚpoprK   r?   r*   r[   ÚdumpsÚupdateÚrequestsÚrequest)
r]   ru   rk   rL   rw   rt   r'   r)   Ú_kwargsÚ_name_to_call_maps
            €r$   Údefault_call_apiz3openapi_spec_to_openai_fn.<locals>.default_call_api¤   s  ø€ ð # 4Ô(¨Ô2ˆØ Ô% eÔ,ˆØ—k’k -°Ñ4Ô4ˆÝ˜#˜{Ñ+Ô+ˆØ�WÐÐ¥¨G°F¬O½TÑ!BÔ!BÐÝ"œj¨°¬Ñ9Ô9ˆG�F‰OØ'�WÐ' Ð'ˆØÐØ˜GÐ#Ð#Ø˜	Ô"×)Ò)¨'Ñ2Ô2Ð2Ð2à%,�˜	Ñ"ØÐØ˜7Ð"Ð"Ø˜Ô!×(Ò(¨Ñ0Ô0Ð0Ð0à$*�˜Ñ!ÝÔ ¨Ð7Ð7¨wÐ7Ð7Ð7r&   )NN)r]   r(   ru   r*   rk   rv   rL   rv   rw   r   r   r   )ÚpathsÚget_parameters_for_pathÚget_methods_for_pathÚget_operationÚcopyÚget_parameters_for_operationr]   rh   r   r@   rA   r^   ra   Úget_request_body_for_operationrX   rZ   rW   r[   r\   ÚlenrY   r   Úfrom_openapi_specÚoperation_idr"   Úbase_urlrp   )rN   Ú	functionsrp   r)   rt   Úrequest_argsÚopÚ	op_paramsrE   Úparams_by_typeÚname_locr_   Úparam_loc_to_arg_nameÚ	param_locÚarg_nameÚrequest_bodyÚmedia_typesÚ
media_typeÚmedia_type_objectr`   Úschema_dictÚkeyÚapi_opÚfnr€   r   s                            @r$   Úopenapi_spec_to_openai_fnr�   [   sw  ø€ ð Œ:ð  Ø�<�<ÐÐØ€IØÐØ”
ð 6ñ 6ˆð
ð 
Ø-1×-IÒ-IÈ$Ñ-OÔ-Oð
ñ 
ô 
ˆð ×/Ò/°Ñ5Ô5ð 2	ñ 2	ˆFØˆLØ×#Ò# D¨&Ñ1Ô1ˆBØ#×(Ò(Ñ*Ô*ˆIØ×:Ò:¸2Ñ>Ô>ð @ð @�Ø:?�	˜5œ: u¤~Ð6Ñ7Ð7Ý(­Ñ.Ô.ˆNØ(ŸšÑ0Ô0ð 6ð 6‘�˜!Ø˜x¨œ{Ô+×2Ò2°1Ñ5Ô5Ð5Ð5à!Ø#Ø#Ø%ð	%ð %Ð!ð (=×'BÒ'BÑ'DÔ'Dð ð Ñ#�	˜8Ø! )Ô,ð Ý-KØ& yÔ1°4ñ.ô .�L Ñ*øð  ×>Ò>¸rÑBÔBˆLàð Q Ô 4ð QØ �Ø5AÔ5I×5OÒ5OÑ5QÔ5Qð ð Ñ1�JÐ 1Ø(Ô:ð Ø!%§¢Ð1BÔ1TÑ!UÔ!U˜Ý26´*Ø"ŸKšK°T˜KÑ:Ô:ñ3ô 3˜ JÑ/øõ �{Ñ#Ô# qÒ(Ð(Ý.2°;×3DÒ3DÑ3FÔ3FÑ.GÔ.GÈÔ.JÑ+�J Ø$.Ð2DÒ$DÐ$D˜&˜&È&�CØ(3�L Ñ%Ð%Ý˜Ñ%Ô%¨Ò)Ð)Ø,3µT¸+×:LÒ:LÑ:NÔ:NÑ5OÔ5OÐ+P�L Ñ(å!Ô3°D¸$ÀÑGÔGˆFàÔ+Ø%Ô1à$Ø".ðð ðð ˆBð ×Ò˜RÑ Ô Ð à Ø”¨¬Ñ4ð-ð -Ð˜b œjÑ)Ñ)ñ_2	ðn #'Ø!%ð	8ð 8ð 8ð 8ð 8ð 8ð 8ð4 Ð&Ð&Ð&r&   c                  ó|   — e Zd ZU dZded<   	 dZded<   	 dZded<   	 edd„¦   «         Zedd„¦   «         Z		 ddd„Z
dS )ÚSimpleRequestChainz5Chain for making a simple request to an API endpoint.r   Úrequest_methodÚresponser(   Ú
output_keyÚfunctionÚ	input_keyr   ú	List[str]c                ó   — | j         gS re   )r¤   ©Úselfs    r$   Ú
input_keyszSimpleRequestChain.input_keysË   s   € à”ÐÐr&   c                ó   — | j         gS re   )r¢   r§   s    r$   Úoutput_keyszSimpleRequestChain.output_keysÏ   s   € à”Ð Ð r&   NÚinputsúDict[str, Any]Úrun_managerú$Optional[CallbackManagerForChainRun]c                ód  — |pt          j        ¦   «         }|| j                                      d¦  «        }|| j                                      d¦  «        }t	          |d¦  «        }t	          t          j        |d¬¦  «        d¦  «        }d|› d�|z   }|                     |¦  «         |                      ||¦  «        }	|	j	        dk    r3|	j	        › d	|	j
        › �d
|› d�z   d|                     dd¦  «        › �z   }
n-	 |	                     ¦   «         }
n# t          $ r
 |	j        }
Y nw xY w| j        |
iS )z2Run the logic of this chain and return the output.r]   Ú	argumentsÚgreené   )ÚindentzCalling endpoint z with arguments:
éÈ   z: z
For ú zCalled with args: rL   r:   )r   Úget_noop_managerr¤   ry   r   r[   rz   Úon_textr    Ústatus_codeÚreasonÚgetÚ	ExceptionÚtextr¢   )r¨   r¬   r®   Ú_run_managerr]   ÚargsÚ_pretty_nameÚ_pretty_argsÚ_textÚapi_responser¡   s              r$   Ú_callzSimpleRequestChain._callÓ   s`  € ð #ÐSÕ&@Ô&QÑ&SÔ&SˆØ�d”nÔ%×)Ò)¨&Ñ1Ô1ˆØ�d”nÔ%×)Ò)¨+Ñ6Ô6ˆÝ'¨¨gÑ6Ô6ˆÝ'­¬
°4ÀÐ(BÑ(BÔ(BÀGÑLÔLˆØD LÐDÐDÐDÀ|ÑSˆØ×Ò˜UÑ#Ô#Ð#Ø!%×!4Ò!4°T¸4Ñ!@Ô!@ˆØÔ# sÒ*Ð*àÔ+ÐDÐD¨|Ô/BÐDÐDØ"˜4Ð"Ð"Ð"ñ#à> t§x¢x°¸Ñ'<Ô'<Ð>Ð>ñ?ð ˆHð-Ø'×,Ò,Ñ.Ô.��øÝð -ð -ð -Ø'Ô,���ð-øøøà” Ð*Ð*s   Ã=D ÄD&Ä%D&)r   r¥   re   )r¬   r­   r®   r¯   r   r­   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r¢   r¤   Úpropertyr©   r«   rÄ   r3   r&   r$   rŸ   rŸ   Á   s°   € € € € € € Ø?Ð?àÐÐÑØ/Ø €JÐ Ð Ð Ñ Ø3Ø€IÐÐÐÑØ2àð ð  ð  ñ „Xð ð ð!ð !ð !ñ „Xð!ð =Að+ð +ð +ð +ð +ð +ð +r&   rŸ   FúUnion[OpenAPISpec, str]ÚllmúOptional[BaseLanguageModel]ÚpromptúOptional[BasePromptTemplate]Úrequest_chainúOptional[Chain]Úllm_chain_kwargsúOptional[Dict]Úverboserk   rw   r   c           
     óD  ‡‡‡— t          | t          ¦  «        ryt          j        t          j        t          j        fD ].}		  |	| ¦  «        }  n# t          $ r}
|
‚d}
~
wt          $ r Y Œ+w xY wt          | t          ¦  «        rt          d| › �¦  «        ‚t          | ¦  «        \  }Š|pt          d¬¦  «        }|pt          j        d¦  «        }t          d||d|it          d¬¦  «        d	|d
œ|pi ¤Ž}|pt          ˆˆˆfd„|¬¦  «        }t!          d||g|j        dg|dœ|¤ŽS )a˜  Create a chain for querying an API from a OpenAPI spec.

    Args:
        spec: OpenAPISpec or url/file/text string corresponding to one.
        llm: language model, should be an OpenAI function-calling model, e.g.
            `ChatOpenAI(model="gpt-3.5-turbo-0613")`.
        prompt: Main prompt template to use.
        request_chain: Chain for taking the functions output and executing the request.
    Nz!Unable to parse spec from source zgpt-3.5-turbo-0613)Úmodelz>Use the provided API's to respond to this user query:

{query}rŒ   F)Ú	args_onlyr£   )rÌ   rÎ   Ú
llm_kwargsÚoutput_parserr¢   rÔ   c                ó"   •—  ‰| |‰‰¬¦  «        S )N)rk   rL   r3   )r]   r¿   Úcall_api_fnrk   rL   s     €€€r$   rf   z#get_openapi_chain.<locals>.<lambda>#  s!   ø€ ¨+¨+Ø�$ °ð+
ñ +
ô +
€ r&   )r    rÔ   r¡   )ÚchainsÚinput_variablesÚoutput_variablesrÔ   r3   )r?   r(   r   Úfrom_urlÚ	from_fileÚ	from_textÚImportErrorr¼   Ú
ValueErrorr�   r   r   Úfrom_templater   r   rŸ   r   r©   )rN   rÌ   rÎ   rÐ   rÒ   rÔ   rk   rL   rw   Ú
conversionÚeÚ
openai_fnsÚ	llm_chainrÛ   s         ``     @r$   Úget_openapi_chainré   ï   sÕ  øøø€ õ( �$�ÑÔð IåÔ ÝÔ!ÝÔ!ð
ð 	ð 	ˆJð
Ø!�z $Ñ'Ô'�Ø�øÝð ð ð Ø�øøøøÝð ð ð Ø�ðøøøå�d�CÑ Ô ð 	IÝÐGÀÐGÐGÑHÔHÐHÝ7¸Ñ=Ô=Ñ€J�Ø
ð •Ø"ðñ ô €Cð ð Õ)Ô7ØJñô €Fõ ð ØØØ Ð,Ý/¸%Ð@Ñ@Ô@ØØðð ð Ð!˜rðð €Ið "ð Õ%7ð
ð 
ð 
ð 
ð 
ð 
ð ð	&ñ &ô &€Mõ ð Ø˜=Ð)Ø!Ô,Ø$˜Øð	ð ð
 ðð ð s   ¿AÁ
A(ÁAÁA(Á'A()r   r   r   r   r   r   )r'   r(   r)   r*   r   r(   )rL   rM   rN   r   r   r*   )rN   r   r   rb   )NNNNFNN)rN   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   rÓ   rÔ   r   rk   rÓ   rL   rÓ   rw   r   r   r   )0Ú
__future__r   r[   r;   Úcollectionsr   Útypingr   r   r   r   r	   r
   r   r   r|   Úlangchain_community.chat_modelsr   Ú%langchain_community.utilities.openapir   Úlangchain_core.language_modelsr   Úlangchain_core.promptsr   r   Úlangchain_core.utils.inputr   r   Úlangchain.callbacks.managerr   Úlangchain.chains.baser   Úlangchain.chains.llmr   Úlangchain.chains.sequentialr   Ú)langchain.output_parsers.openai_functionsr   Úlangchain.toolsr   Úopenapi_pydanticr   r%   rK   ra   r�   rŸ   ré   r3   r&   r$   ú<module>rù      s7  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ Sà €€€Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø =Ð =Ð =Ð =Ð =Ð =Ø <Ð <Ð <Ð <Ð <Ð <Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð à BÐ BÐ BÐ BÐ BÐ BØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø )Ð )Ð )Ð )Ð )Ð )Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø OÐ OÐ OÐ OÐ OÐ OØ (Ð (Ð (Ð (Ð (Ð (àð +Ø*Ð*Ð*Ð*Ð*Ð*ð"ð "ð "ð "ð$$ð $$ð $$ð $$ðNNð Nð Nð Nð"c'ð c'ð c'ð c'ðL++ð ++ð ++ð ++ð ++˜ñ ++ô ++ð ++ð` (,Ø+/Ø%)Ø'+ØØ"Ø!ð?ð ?ð ?ð ?ð ?ð ?ð ?r&   