Ë
    ´Œj:  ã                  óx  — 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 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 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$ dd„Z%dd„Z&	 	 	 	 dd„Z' G d„ de«      Z( eddd¬«      	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z)y) é    )ÚannotationsN)Údefaultdict)ÚTYPE_CHECKINGÚAnyÚCallableÚOptionalÚUnion)Ú
deprecated)ÚCallbackManagerForChainRun)ÚBaseLanguageModel)ÚJsonOutputFunctionsParser)ÚBasePromptTemplateÚChatPromptTemplate)Úget_colored_text)ÚResponse)ÚChain)ÚLLMChain)ÚSequentialChain©ÚOpenAPISpec)Ú	Parameterc           	     ó  — t        j                  d| «      }i }|D �]J  }|j                  d«      j                  d«      }||   }t	        |t
        «      rj|d   dk(  r!|d   dk(  rdnd}d|j                  |«      z   }nä|d   dk(  r'|d   dk(  r|› d	�nd}|› d	�|j                  |«      z   }nµdj                  |«      }n£t	        |t        «      rr|d   dk(  rd	nd}	|j                  «       D �
�cg c]  \  }
}|	j                  |
|f«      ‘Œ }}
}|d   dk(  rd}d}n|d   dk(  rd}d}nd}d
}||j                  |«      z  }n!|d   dk(  rd|› �}n|d   dk(  r	d|› d	|› �}n|}|||<   �ŒM  | j                  di |¤ŽS c c}}
w )Nz{(.*?)}z.;Ú*r   Ú.éÿÿÿÿÚ,Ú;Ú=Ú © )
ÚreÚfindallÚlstripÚrstripÚ
isinstanceÚlistÚjoinÚdictÚitemsÚformat)ÚurlÚpath_paramsÚexpected_path_paramÚ
new_paramsÚparamÚclean_paramÚvalÚsepÚnew_valÚkv_sepÚkÚvÚkv_strss                ús/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain/chains/openai_functions/openapi.pyÚ_format_urlr9      sµ  € ÜŸ*™* Z°Ó5ÐØ€JÜ$ˆØ—l‘l 4Ó(×/Ñ/°Ó4ˆØ˜+Ñ&ˆÜ�cœ4Ô Ø�Q‰x˜3ŠØ" 2™Y¨#Ò-‘c°3�Ø §¡¨£Ñ-‘Ø�q‘˜S’Ø+0°©9¸Ò+;˜˜ QÑ'À�Ø(˜M¨Ð+¨c¯h©h°s«mÑ;‘àŸ(™( 3›-‘Ü˜œTÔ"Ø! "™I¨Ò,‘S°#ˆFØ7:·y±y´{ÔC±{©t¨q°!�v—{‘{ A q 6Õ*°{ˆGÑCØ�Q‰x˜3ŠØ�Ø‘Ø�q‘˜S’Ø�Ø‘à�Ø�Ø�s—x‘x Ó(Ñ(‰GØ�1‰X˜Š_Ø˜#˜�i‰GØ�1‰X˜Š_Ø˜+˜ a¨ uÐ-‰GàˆGØ#ˆ
�5Óð? %ð@ ˆ3�:‰:Ñ#˜
Ñ#Ð#ùó% Ds   Ã-E;c                ó  — i }g }| D ]ô  }|j                   r|j                  |j                   «      }nGt        t        |j                  j                  «       «      «      j                  }|j                  |«      }|j                  r|j                  s|j                  |_        t        j                  |j                  d¬«      «      ||j                  <   |j                  sŒÚ|j                  |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Únamer@   Úappend)ÚparamsÚspecr?   r@   ÚpÚschemarG   s          r8   Ú_openapi_params_to_json_schemarQ   @   sÄ   € Ø€JØ€HÛˆØ�>Š>Ø—_‘_ Q§^¡^Ó4‰Fä $¤T¨!¯)©)×*:Ñ*:Ó*<Ó%=Ó >× PÑ PÐØ—_‘_Ð%6Ó7ˆFØ�=Š= ×!3Ò!3Ø!"§¡ˆFÔÜ!ŸZ™Z¨¯©À¨Ó(FÓGˆ
�1—6‘6ÑØ�:‹:Ø�O‰O˜AŸF™FÕ#ð ð ¨JÀHÑMÐMó    c                óÖ  ‡— 	 ddl m} | j                  sg d„ fS g }i Š| j                  D �]~  }| j	                  |«      D �ci c]  }|j
                  |j                  f|“Œ }}| j                  |«      D �]1  }i }	| j                  ||«      }
|j                  «       }| j                  |
«      D ]  }|||j
                  |j                  f<   Œ t        t        «      }|j                  «       D ]  \  }}||d      j                  |«       Œ ddd	d
dœ}|j                  «       D ]  \  }}||   sŒt        ||   | «      |	|<   Œ | j!                  |
«      }|rî|j"                  râi }|j"                  j                  «       D ]U  \  }}|j$                  sŒ| j'                  |j$                  «      }t)        j*                  |j)                  d¬«      «      ||<   ŒW t-        |«      dk(  r4t/        t1        |j                  «       «      «      \  }}|dk(  rdnd}||	|<   n,t-        |«      dkD  rdt        |j3                  «       «      i|	d<   |j5                  | ||«      }|j6                  |j8                  d|	dœdœ}|j                  |«       ||j:                  |j<                  z   dœ‰|d   <   �Œ4 �Œ� 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dˆfd„}||fS # t        $ r}d}t        |«      |‚d}~ww xY wc c}w )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.
    r   )ÚAPIOperationzeCould not import langchain_community.tools. Please install it with `pip install langchain-community`.Nc                  ó   — y ©Nr    r    rR   r8   Ú<lambda>z+openapi_spec_to_openai_fn.<locals>.<lambda>h   s   € ˜4rR   é   rM   ÚheadersÚcookiesr,   )ÚqueryÚheaderÚcookieÚpathTr;   zapplication/jsonrI   ÚdataÚanyOfr=   )r>   r?   )rK   rH   Ú
parameters)Úmethodr+   rK   c                ó†  •— ‰
|    d   }‰
|    d   }|j                  di «      }t        ||«      }d|v r.t        |d   t        «      rt	        j
                  |d   «      |d<   i |¥|¥}	|�d|	v r|	d   j                  |«       n||	d<   |�d|	v r|	d   j                  |«       n||	d<   t        j                  ||fi |	¤d|i¤ŽS )Nrb   r+   r,   r_   rY   rM   Útimeout)	Úpopr9   r%   r(   rI   ÚdumpsÚupdateÚrequestsÚrequest)rK   Úfn_argsrY   rM   rd   Úkwargsrb   r+   r,   Ú_kwargsÚ_name_to_call_maps             €r8   Údefault_call_apiz3openapi_spec_to_openai_fn.<locals>.default_call_api¤   sì   ø€ ð # 4Ñ(¨Ñ2ˆØ Ñ% eÑ,ˆØ—k‘k -°Ó4ˆÜ˜#˜{Ó+ˆØ�WÑ¤¨G°F©O¼TÔ!BÜ"Ÿj™j¨°©Ó9ˆG�F‰OØ'�WÐ' Ð'ˆØÐØ˜GÑ#Ø˜	Ñ"×)Ñ)¨'Õ2à%,�˜	Ñ"ØÐØ˜7Ñ"Ø˜Ñ!×(Ñ(¨Õ0à$*�˜Ñ!Ü×Ñ ¨ÑH¨wÑHÀÒHÐHrR   )NNé   )rK   Ústrrj   r(   rY   úOptional[dict]rM   rq   rd   zOptional[int]rk   r   Úreturnr   )Úlangchain_community.toolsrT   ÚImportErrorÚpathsÚget_parameters_for_pathrK   Úparam_inÚget_methods_for_pathÚget_operationÚcopyÚget_parameters_for_operationr   r&   r)   rL   rQ   Úget_request_body_for_operationrE   rG   rB   rI   rJ   ÚlenrC   rD   rF   Úfrom_openapi_specÚoperation_idrH   Úbase_urlr^   )rN   rT   ÚeÚmsgÚ	functionsr^   rO   r,   rb   Úrequest_argsÚopÚ	op_paramsr/   Úparams_by_typeÚname_locÚparam_loc_to_arg_nameÚ	param_locÚarg_nameÚrequest_bodyÚmedia_typesÚ
media_typeÚmedia_type_objectrP   Úschema_dictÚkeyÚapi_opÚfnrn   rm   s                               @r8   Úopenapi_spec_to_openai_fnr”   Q   sZ  ø€ ð&Ý:ð �:Š:Ø‘<ÐÐØ€IØÐØ—
•
ˆà-1×-IÑ-IÈ$Ô-Oó
Ù-O¨ˆQ�V‰V�Q—Z‘ZÐ  !Ñ#Ð-Oð 	ð 
ð ×/Ñ/°×5ˆFØˆLØ×#Ñ# D¨&Ó1ˆBØ#×(Ñ(Ó*ˆIØ×:Ñ:¸2Ö>�Ø:?�	˜5Ÿ:™: u§~¡~Ð6Ò7ð ?ä(¬Ó.ˆNØ(Ÿ™Ö0‘�˜!Ø˜x¨™{Ñ+×2Ñ2°1Õ5ð  1ð "Ø#Ø#Ø%ñ	%Ð!ð (=×'BÑ'BÖ'DÑ#�	˜8Ø! )Ó,Ü-KØ& yÑ1Øó.�L Ò*ð (Eð  ×>Ñ>¸rÓBˆLá × 4Ò 4Ø �Ø5A×5IÑ5I×5OÑ5OÖ5QÑ1�JÐ 1Ø(×:Ó:Ø!%§¡Ð1B×1TÑ1TÓ!U˜Ü26·*±*Ø"ŸK™K°T˜KÓ:ó3˜ JÒ/ð 6Rô �{Ó# qÒ(Ü.2´4¸×8IÑ8IÓ8KÓ3LÓ.MÑ+�J Ø$.Ð2DÒ$D™&È&�CØ(3�L Ò%Ü˜Ó%¨Ò)Ø,3´T¸+×:LÑ:LÓ:NÓ5OÐ+P�L Ñ(à!×3Ñ3°D¸$ÀÓGˆFà×+Ñ+Ø%×1Ñ1à$Ø".ññˆBð ×Ñ˜RÔ à Ø—‘¨¯©Ñ4ñ-Ð˜b ™jÓ)òa 6ð	 ðx #'Ø!%Ø!#ðIØðIàðIð  ðIð ð	Ið
 ðIð ðIð 
õIð6 Ð&Ð&Ð&øô ò &ðHð 	ô ˜#Ó AÐ%ûð&üò
s   ƒK Á K&Ë	K#ËKËK#c                  óx   — 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
y)ÚSimpleRequestChainz5Chain for making a simple request to an API endpoint.r   Úrequest_methodÚresponserp   Ú
output_keyÚfunctionÚ	input_keyc                ó   — | j                   gS rV   )r›   ©Úselfs    r8   Ú
input_keyszSimpleRequestChain.input_keysÌ   s   € à—‘ÐÐrR   c                ó   — | j                   gS rV   )r™   r�   s    r8   Úoutput_keyszSimpleRequestChain.output_keysÐ   s   € à—‘Ð Ð rR   Nc           
     ó‚  — |xs t        j                  «       }|| j                     j                  d«      }|| j                     j                  d«      }t	        |d«      }t	        t        j                  |d¬«      d«      }d|› d�|z   }|j                  |«       | j                  ||«      }	|	j                  t        j                  j                  k7  r2|	j                  › d|	j                  › d	|› d
|j                  dd«      › �}
n	 |	j                  «       }
| j"                  |
iS # t        $ r |	j                   }
Y Œ%w xY w)z2Run the logic of this chain and return the output.rK   Ú	argumentsÚgreené   )ÚindentzCalling endpoint z with arguments:
z: z
For z Called with args: rM   r   )r   Úget_noop_managerr›   re   r   rI   rf   Úon_textr—   Ústatus_coderh   ÚcodesÚokÚreasonÚgetÚ	ExceptionÚtextr™   )rž   ÚinputsÚrun_managerÚ_run_managerrK   ÚargsÚ_pretty_nameÚ_pretty_argsÚ_textÚapi_responser˜   s              r8   Ú_callzSimpleRequestChain._callÔ   s9  € ð #ÒSÔ&@×&QÑ&QÓ&SˆØ�d—n‘nÑ%×)Ñ)¨&Ó1ˆØ�d—n‘nÑ%×)Ñ)¨+Ó6ˆÜ'¨¨gÓ6ˆÜ'¬¯
©
°4ÀÔ(BÀGÓLˆØ# L >Ð1CÐDÀ|ÑSˆØ×Ñ˜UÔ#Ø!%×!4Ñ!4°T¸4Ó!@ˆØ×#Ñ#¤x§~¡~×'8Ñ'8Ò8à×+Ñ+Ð,¨B¨|×/BÑ/BÐ.CØ˜˜ð %Ø%)§X¡X¨h¸Ó%;Ð$<ð>ñ ð-Ø'×,Ñ,Ó.�ð —‘ Ð*Ð*øô ò -Ø'×,Ñ,’ð-ús   ÄD& Ä&D>Ä=D>)rr   z	list[str]rV   )r°   údict[str, Any]r±   z$Optional[CallbackManagerForChainRun]rr   r¹   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r™   r›   ÚpropertyrŸ   r¡   r¸   r    rR   r8   r–   r–   Â   su   … Ù?àÓØ/Ø €J�Ó Ø3Ø€IˆsÓØ2àò ó ð ð ò!ó ð!ð =Að+àð+ð :ð+ð 
ô	+rR   r–   z0.2.13z×This function is deprecated and will be removed in langchain 1.0. See API reference for replacement: https://api.python.langchain.com/en/latest/chains/langchain.chains.openai_functions.openapi.get_openapi_chain.htmlz1.0)ÚsinceÚmessageÚremovalc           
     ó^  ‡‡‡— 	 ddl m}	 t        | t        «      rR|	j
                  |	j                  |	j                  fD ]  }	  || «      }  n t        | t        «      rd| › �}t        |«      ‚t        | «      \  }Š|sd}t        |«      ‚|xs t        j                  d«      }t        d||d|it        d	¬
«      d|dœ|xs i ¤Ž}|xs t        ˆˆˆfd„|¬«      }t!        d||g|j"                  dg|dœ|¤ŽS # t        $ r}
d}t        |«      |
‚d}
~
ww xY w# t        $ r ‚ t        $ r Y Œíw xY w)a  Create a chain for querying an API from a OpenAPI spec.

    Note: this class is deprecated. See below for a replacement implementation.
        The benefits of this implementation are:

        - Uses LLM tool calling features to encourage properly-formatted API requests;
        - Includes async support.

        .. code-block:: python

            from typing import Any

            from langchain.chains.openai_functions.openapi import openapi_spec_to_openai_fn
            from langchain_community.utilities.openapi import OpenAPISpec
            from langchain_core.prompts import ChatPromptTemplate
            from langchain_openai import ChatOpenAI

            # Define API spec. Can be JSON or YAML
            api_spec = """
            {
            "openapi": "3.1.0",
            "info": {
                "title": "JSONPlaceholder API",
                "version": "1.0.0"
            },
            "servers": [
                {
                "url": "https://jsonplaceholder.typicode.com"
                }
            ],
            "paths": {
                "/posts": {
                "get": {
                    "summary": "Get posts",
                    "parameters": [
                    {
                        "name": "_limit",
                        "in": "query",
                        "required": false,
                        "schema": {
                        "type": "integer",
                        "example": 2
                        },
                        "description": "Limit the number of results"
                    }
                    ]
                }
                }
            }
            }
            """

            parsed_spec = OpenAPISpec.from_text(api_spec)
            openai_fns, call_api_fn = openapi_spec_to_openai_fn(parsed_spec)
            tools = [
                {"type": "function", "function": fn}
                for fn in openai_fns
            ]

            prompt = ChatPromptTemplate.from_template(
                "Use the provided APIs to respond to this user query:\n\n{query}"
            )
            llm = ChatOpenAI(model="gpt-4o-mini", temperature=0).bind_tools(tools)

            def _execute_tool(message) -> Any:
                if tool_calls := message.tool_calls:
                    tool_call = message.tool_calls[0]
                    response = call_api_fn(name=tool_call["name"], fn_args=tool_call["args"])
                    response.raise_for_status()
                    return response.json()
                else:
                    return message.content

            chain = prompt | llm | _execute_tool

        .. code-block:: python

            response = chain.invoke({"query": "Get me top two posts."})

    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.
    r   r   zqCould not import langchain_community.utilities.openapi. Please install it with `pip install langchain-community`.Nz!Unable to parse spec from source zkMust provide an LLM for this chain.For example,
from langchain_openai import ChatOpenAI
llm = ChatOpenAI()
z>Use the provided API's to respond to this user query:

{query}rƒ   F)Ú	args_onlyrš   )ÚllmÚpromptÚ
llm_kwargsÚoutput_parserr™   Úverbosec                ó   •—  ‰| |‰‰¬«      S )N)rY   rM   r    )rK   r³   Úcall_api_fnrY   rM   s     €€€r8   rW   z#get_openapi_chain.<locals>.<lambda>‡  s   ø€ ©+ØØØØõ	+
rR   )r—   rÉ   r˜   )ÚchainsÚinput_variablesÚoutput_variablesrÉ   r    )Ú%langchain_community.utilities.openapir   rt   r%   rp   Úfrom_urlÚ	from_fileÚ	from_textr®   Ú
ValueErrorr”   r   Úfrom_templater   r   r–   r   rŸ   )rN   rÅ   rÆ   Úrequest_chainÚllm_chain_kwargsrÉ   rY   rM   rk   r   r�   r‚   Ú
conversionÚ
openai_fnsÚ	llm_chainrË   s         ``       @r8   Úget_openapi_chainrÚ   ð   s’  ú€ ðT&ÝEô �$œÔà× Ñ Ø×!Ñ!Ø×!Ñ!ó
ˆJð
Ù! $Ó'�Ùð
ô �dœCÔ Ø5°d°VÐ<ˆCÜ˜S“/Ð!Ü7¸Ó=Ñ€J�Ùð#ð 	ô
 ˜‹oÐØò Ô)×7Ñ7ØJó€Fô ð ØØØ Ð,Ü/¸%Ô@ØØñð Ò!˜rñ€Ið "ò Ô%7õ
ð ô&€Mô ð Ø˜=Ð)Ø!×,Ñ,Ø$˜Øñ	ð
 ñð øôg ò &ðHð 	ô ˜#Ó AÐ%ûð&ûô ò ØÜò Ùðús)   …C8 ÁDÃ8	DÄDÄDÄD,Ä+D,)r+   rp   r,   r(   rr   rp   )rM   zlist[Parameter]rN   r   rr   r(   )rN   r   rr   z%tuple[list[dict[str, Any]], Callable])NNNNFNN)rN   zUnion[OpenAPISpec, str]rÅ   zOptional[BaseLanguageModel]rÆ   zOptional[BasePromptTemplate]rÕ   zOptional[Chain]rÖ   rq   rÉ   ÚboolrY   rq   rM   rq   rk   r   rr   r   )*Ú
__future__r   rI   r!   Úcollectionsr   Útypingr   r   r   r   r	   rh   Ú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   Úlangchain.chains.baser   Úlangchain.chains.llmr   Úlangchain.chains.sequentialr   rÏ   r   Úopenapi_pydanticr   r9   rQ   r”   r–   rÚ   r    rR   r8   Ú<module>ré      s  ðÝ "ã Û 	Ý #ß @Õ @ã Ý *Ý ?Ý <Ý Tß IÝ 7Ý å 'Ý )Ý 7áÝAÝ*ó#$óLNð"n'Ø
ðn'à*ón'ôb++˜ô ++ñ\ Ø
ð	}ð ôð (,Ø+/Ø%)Ø'+ØØ"Ø!ð\Ø
!ð\à	$ð\ð )ð\ð #ð	\ð
 %ð\ð ð\ð ð\ð ð\ð ð\ð ò\óñ\rR   