§
    ™Štj±3  ã                  óê  — d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	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 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! d dl"m#Z# e
rd dl$m%Z% d dl&m'Z'  ej(        e)¦  «        Z*dZ+d8d„Z,d9d„Z- edd e+¬!¦  «        d:d#„¦   «         Z. edd e+¬!¦  «         G d$„ d%e¦  «        ¦   «         Z/ ed&d e+¬!¦  «        	 	 	 	 	 	 	 d;d<d7„¦   «         Z0dS )=é    )ÚannotationsN)Údefaultdict)ÚCallable)ÚTYPE_CHECKINGÚAny)Ú
deprecated)ÚCallbackManagerForChainRun)ÚBaseLanguageModel)ÚJsonOutputFunctionsParser)ÚBasePromptTemplateÚChatPromptTemplate)Úget_colored_text)ÚJSONDecodeErrorÚResponse)Úoverride)ÚChain)ÚLLMChain)ÚSequentialChain©ÚOpenAPISpec)Ú	Parameterz­Bind your OpenAPI operations as tools on a chat model with `ChatModel.bind_tools(...)` and execute the resulting tool calls with an HTTP client (e.g. `requests` or `httpx`).ÚurlÚstrÚpath_paramsÚdictÚreturnc                ó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      €úo/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_classic/chains/openai_functions/openapi.pyú
<listcomp>z_format_url.<locals>.<listcomp>6   s-   ø€ ÐCÐCÐC©t¨q°!�v—{’{ A q 6Ñ*Ô*ÐCÐCÐCó    Ú r%   )
ÚreÚfindallÚlstripÚrstripÚ
isinstanceÚlistr&   r   ÚitemsÚformat)r   r   Úexpected_path_paramÚ
new_paramsÚparamÚclean_paramÚvalÚsepÚnew_valÚkv_strsr*   s             @r+   Ú_format_urlr?   %   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Ø�1ŒX˜Š_ˆ_Ø˜#�i�iˆGˆGØ�1ŒX˜Š_ˆ_Ø-˜+Ð-Ð-¨Ð-Ð-ˆGˆGàˆGØ#ˆ
�5ÑÑØˆ3Œ:Ð#Ð#˜
Ð#Ð#Ð#r-   Úparamsúlist[Parameter]Úspecr   c                óÔ  — i }g }| D ]Ü}|j         r|                     |j         ¦  «        }nMt          t          |j                             ¦   «         ¦  «        ¦  «        j        }|                     |¦  «        }|j        r|j        s|j        |_        t          j	        |                     d¬¦  «        ¦  «        ||j
        <   |j        r|                     |j
        ¦  «         ŒÝd||dœS )NT©Úexclude_noneÚobject)ÚtypeÚ
propertiesÚrequired)Úparam_schemaÚ
get_schemaÚnextÚiterÚcontentÚvaluesÚmedia_type_schemaÚdescriptionÚjsonÚloadsÚnamerI   Úappend)r@   rB   rH   rI   ÚpÚschemarP   s          r+   Ú_openapi_params_to_json_schemarX   K   sä   € Ø€JØ€HØð 
$ð 
$ˆØŒ>ð 	8Ø—_’_ Q¤^Ñ4Ô4ˆFˆFå $¥T¨!¬)×*:Ò*:Ñ*<Ô*<Ñ%=Ô%=Ñ >Ô >Ô PÐØ—_’_Ð%6Ñ7Ô7ˆFØŒ=ð 	/ Ô!3ð 	/Ø!"¤ˆFÔÝ!œZ¨¯ªÀ¨Ñ(FÔ(FÑGÔGˆ
�1”6ÑØŒ:ð 	$Ø�OŠO˜AœFÑ#Ô#Ð#øØ¨JÀHÐMÐMÐMr-   z1.0.4z2.0.0)ÚsinceÚremovalÚaddendumú%tuple[list[dict[str, Any]], Callable]c                óÔ  ‡— 	 ddl m} n$# t          $ r}d}t          |¦  «        |‚d}~ww xY w| j        sg d„ fS g }i Š| j        D �]•}d„ |                      |¦  «        D ¦   «         }|                      |¦  «        D �]\}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    rAt/          t1          |                     ¦   «         ¦  «        ¦  «        \  }}|dk    rdnd}|||<   n9t-          |¦  «        dk    r&dt          |                     ¦   «         ¦  «        i|d<   |                     | ||¦  «        }|j        |j        d|dœdœ}|                     |¦  «         ||j        |j        z   dœ‰|d         <   �Œ^�Œ—	 	 	 d#d$ˆfd"„}||fS )%ab  OpenAPI spec to OpenAI function JSON Schema.

    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.
    r   )ÚAPIOperationzeCould not import langchain_community.tools. Please install it with `pip install langchain-community`.Nc                 ó   — d S ©Nr%   r%   r-   r+   ú<lambda>z+openapi_spec_to_openai_fn.<locals>.<lambda>z   s   € ˜4€ r-   c                ó,   — i | ]}|j         |j        f|“ŒS r%   )rT   Úparam_in)r'   rV   s     r+   ú
<dictcomp>z-openapi_spec_to_openai_fn.<locals>.<dictcomp>~   s0   € ð 
ð 
ð 
Ø()ˆQŒV�Q”ZÐ  !ð
ð 
ð 
r-   é   r@   ÚheadersÚcookiesr   )ÚqueryÚheaderÚcookieÚpathTrD   zapplication/jsonrR   ÚdataÚanyOfrF   )rG   rH   )rT   rQ   Ú
parameters)Úmethodr   rT   é   r   Úfn_argsr   údict | NoneÚtimeoutú
int | NoneÚ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 |	¤d|i¤ŽS )Nro   r   r   rl   rf   r@   rs   )	Úpopr?   r3   r   rR   ÚdumpsÚupdateÚrequestsÚrequest)rT   rq   rf   r@   rs   ru   ro   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à$*�˜Ñ!ÝÔ ¨ÐHÐH¨wÐHÐHÀÐHÐHÐHÐHr-   )NNrp   )rT   r   rq   r   rf   rr   r@   rr   rs   rt   ru   r   r   r   )Úlangchain_community.toolsr^   ÚImportErrorÚpathsÚget_parameters_for_pathÚget_methods_for_pathÚget_operationÚcopyÚget_parameters_for_operationrT   rc   r   r4   r5   rU   rX   Úget_request_body_for_operationrN   rP   rK   rR   rS   ÚlenrL   rM   rO   Úfrom_openapi_specÚoperation_idrQ   Úbase_urlrk   )rB   r^   ÚeÚmsgÚ	functionsrk   r   ro   Úrequest_argsÚopÚ	op_paramsr9   Úparams_by_typeÚname_locrV   Úparam_loc_to_arg_nameÚ	param_locÚarg_nameÚrequest_bodyÚmedia_typesÚ
media_typeÚmedia_type_objectrW   Úschema_dictÚkeyÚapi_opÚfnr~   r}   s                               @r+   Úopenapi_spec_to_openai_fnrŸ   \   sÞ  ø€ ð(&Ø:Ð:Ð:Ð:Ð:Ð:Ð:øÝð &ð &ð &ðHð 	õ ˜#ÑÔ AÐ%øøøøð&øøøð Œ:ð  Ø�<�<ÐÐØ€IØÐØ”
ð 7ñ 7ˆð
ð 
Ø-1×-IÒ-IÈ$Ñ-OÔ-Oð
ñ 
ô 
ˆð ×/Ò/°Ñ5Ô5ð 3	ñ 3	ˆ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Øñ.ô .�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µ4¸×8IÒ8IÑ8KÔ8KÑ3LÔ3LÑ.MÔ.MÑ+�J Ø$.Ð2DÒ$DÐ$D˜&˜&È&�CØ(3�L Ñ%Ð%Ý˜Ñ%Ô%¨Ò)Ð)Ø,3µT¸+×:LÒ:LÑ:NÔ:NÑ5OÔ5OÐ+P�L Ñ(à!×3Ò3°D¸$ÀÑGÔGˆFàÔ+Ø%Ô1à$Ø".ðð ðð ˆBð ×Ò˜RÑ Ô Ð à Ø”¨¬Ñ4ð-ð -Ð˜b œjÑ)Ñ)ña3	ðp  $Ø"Ø ðIð Ið Ið Ið Ið Ið Ið6 Ð&Ð&Ð&s   ƒ
 Š
+”&¦+c                  óœ   — e Zd ZU dZded<   	 dZded<   	 dZded<   	 eedd„¦   «         ¦   «         Z	e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 r`   )r¦   ©Úselfs    r+   Ú
input_keyszSimpleRequestChain.input_keyså   s   € ð ”ÐÐr-   c                ó   — | j         gS r`   )r¤   r©   s    r+   Úoutput_keyszSimpleRequestChain.output_keysê   s   € ð ”Ð Ð r-   NÚinputsúdict[str, Any]Úrun_managerú!CallbackManagerForChainRun | Nonec           
     óÌ  — |pt          j        ¦   «         }|| j                                      d¦  «        }|| j                                      d¦  «        }t	          |d¦  «        }t	          t          j        |d¬¦  «        d¦  «        }d|› d�|z   }|                     |¦  «         |                      ||¦  «        }	|	j	        t          j        j        k    r,|	j	        › d|	j        › d	|› d
|                     dd¦  «        › �}
nY	 |	                     ¦   «         }
nC# t          $ r
 |	j        }
Y n0t"          $ r$ t$                               d¦  «         |	j        }
Y nw xY w| j        |
iS )z2Run the logic of this chain and return the output.rT   Ú	argumentsÚgreené   )ÚindentzCalling endpoint z with arguments:
z: z
For z Called with args: r@   r.   z)Unexpected error parsing response as JSON)r	   Úget_noop_managerr¦   rw   r   rR   rx   Úon_textr¢   Ústatus_coderz   ÚcodesÚokÚreasonÚgetr   ÚtextÚ	ExceptionÚ_loggerÚ	exceptionr¤   )rª   r®   r°   Ú_run_managerrT   Ú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Ñ!@Ô!@ˆØÔ#¥x¤~Ô'8Ò8Ð8àÔ+ð >ð >¨|Ô/Bð >ð >Øð>ð >à%)§X¢X¨h¸Ñ%;Ô%;ð>ð >ð ˆHð-Ø'×,Ò,Ñ.Ô.��øÝ"ð -ð -ð -Ø'Ô,���Ýð -ð -ð -Ý×!Ò!Ð"MÑNÔNÐNØ'Ô,���ð-øøøð ” Ð*Ð*s   ÄD ÄEÄ-*EÅE)r   r§   r`   )r®   r¯   r°   r±   r   r¯   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r¤   r¦   Úpropertyr   r«   r­   rÈ   r%   r-   r+   r¡   r¡   Ô   sÆ   € € € € € € ð @Ð?àÐÐÑØ/à €JÐ Ð Ð Ñ Ø3à€IÐÐÐÑØ2àØð ð  ð  ñ „Xñ „Xð ð Øð!ð !ð !ñ „Xñ „Xð!ð :>ð+ð +ð +ð +ð +ð +ð +r-   r¡   z0.2.13FúOpenAPISpec | strÚllmúBaseLanguageModel | NoneÚpromptúBasePromptTemplate | NoneÚrequest_chainúChain | NoneÚllm_chain_kwargsrr   ÚverboseÚboolrf   ru   r   r   c           
     ó¾  ‡‡‡— 	 ddl m}	 n$# t          $ r}
d}t          |¦  «        |
‚d}
~
ww xY wt          | t          ¦  «        r‰|	j        |	j        |	j        fD ]K}	  || ¦  «        }  n<# t          $ r ‚ t          $ r% t           
                    d|j        d¬¦  «         Y ŒHw xY wt          | t          ¦  «        rd| › �}t          |¦  «        ‚t          | ¦  «        \  }Š|sd	}t          |¦  «        ‚|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.

    !!! warning "Deprecated"
        This function and all related utilities in this module are deprecated.
        Use LLM tool calling features directly with an HTTP client instead.

    Args:
        spec: OpenAPISpec or url/file/text string corresponding to one.
        llm: language model, should be an OpenAI function-calling model.
        prompt: Main prompt template to use.
        request_chain: Chain for taking the functions output and executing the request.
        params: Request parameters.
        headers: Request headers.
        verbose: Whether to run the chain in verbose mode.
        llm_chain_kwargs: LLM chain additional keyword arguments.
        **kwargs: Additional keyword arguments to pass to the chain.

    r   r   zqCould not import langchain_community.utilities.openapi. Please install it with `pip install langchain-community`.Nz$Parse spec failed for OpenAPISpec.%sT)Úexc_infoz!Unable to parse spec from source zmMust provide an LLM for this chain.For example,
from langchain_openai import ChatOpenAI
model = ChatOpenAI()
z>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)rf   r@   r%   )rT   rÃ   Úcall_api_fnrf   r@   s     €€€r+   ra   z#get_openapi_chain.<locals>.<lambda>a  s$   ø€ ¨+¨+ØØØØð	+
ñ +
ô +
€ r-   )r¢   r×   r£   )ÚchainsÚinput_variablesÚoutput_variablesr×   r%   )Ú%langchain_community.utilities.openapir   r€   r3   r   Úfrom_urlÚ	from_fileÚ	from_textr¿   rÀ   ÚdebugrÉ   Ú
ValueErrorrŸ   r   Úfrom_templater   r   r¡   r   r«   )rB   rÐ   rÒ   rÔ   rÖ   r×   rf   r@   ru   r   rŒ   r�   Ú
conversionÚ
openai_fnsÚ	llm_chainrß   s         ``       @r+   Úget_openapi_chainrí     sT  øøø€ ðD&ØEÐEÐEÐEÐEÐEÐEøÝð &ð &ð &ðHð 	õ ˜#ÑÔ AÐ%øøøøð&øøøõ �$�ÑÔð "àÔ ØÔ!ØÔ!ð
ð 	ð 	ˆJð

Ø!�z $Ñ'Ô'�Ø�øÝð ð ð ØÝð ð ð Ý—’Ø:ØÔ'Ø!ð ñ ô ð ð ð ðøøøõ �d�CÑ Ô ð 	"Ø<°dÐ<Ð<ˆCÝ˜S‘/”/Ð!Ý7¸Ñ=Ô=Ñ€J�Øð ð%ð 	õ
 ˜‰oŒoÐØð Õ)Ô7ØJñô €Fõ ð ØØØ Ð,Ý/¸%Ð@Ñ@Ô@ØØðð ð Ð!˜rðð €Ið "ð Õ%7ð
ð 
ð 
ð 
ð 
ð 
ð ð&ñ &ô &€Mõ ð Ø˜=Ð)Ø!Ô,Ø$˜Øð	ð ð
 ðð ð s"   … Œ
-–(¨-ÁA)Á)6B"Â!B")r   r   r   r   r   r   )r@   rA   rB   r   r   r   )rB   r   r   r\   )NNNNFNN)rB   rÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   rr   r×   rØ   rf   rr   r@   rr   ru   r   r   r   )1Ú
__future__r   rR   Úloggingr/   Úcollectionsr   Úcollections.abcr   Útypingr   r   rz   Úlangchain_core._apir   Úlangchain_core.callbacksr	   Úlangchain_core.language_modelsr
   Ú.langchain_core.output_parsers.openai_functionsr   Úlangchain_core.promptsr   r   Úlangchain_core.utils.inputr   r   r   Útyping_extensionsr   Úlangchain_classic.chains.baser   Úlangchain_classic.chains.llmr   Ú#langchain_classic.chains.sequentialr   rã   r   Úopenapi_pydanticr   Ú	getLoggerrÉ   rÀ   Ú_OPENAPI_REPLACEMENTr?   rX   rŸ   r¡   rí   r%   r-   r+   ú<module>r      s¾  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à €€€Ø *Ð *Ð *Ð *Ð *Ð *Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø <Ð <Ð <Ð <Ð <Ð <Ø TÐ TÐ TÐ TÐ TÐ TØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø &Ð &Ð &Ð &Ð &Ð &à /Ð /Ð /Ð /Ð /Ð /Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?àð +ØAÐAÐAÐAÐAÐAØ*Ð*Ð*Ð*Ð*Ð*à
ˆ'Ô
˜HÑ
%Ô
%€ð0ð ð#$ð #$ð #$ð #$ðLNð Nð Nð Nð" €Ø
ØØ!ðñ ô ð
p'ð p'ð p'ñô ð
p'ðf €Ø
ØØ!ðñ ô ð
2+ð 2+ð 2+ð 2+ð 2+˜ñ 2+ô 2+ñô ð
2+ðj €Ø
ØØ!ðñ ô ð %)Ø(,Ø"&Ø$(ØØØð\ð \ð \ð \ñô ð
\ð \ð \r-   