Ë
    µŒj§  ã                   óÆ   — d Z ddlmZmZ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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ZdZ  G d„ de«      Z!y)z<OctoAI Endpoints chat wrapper. Relies heavily on ChatOpenAI.é    )ÚAnyÚCallableÚDictÚLiteralÚOptionalÚSequenceÚTypeÚUnion)ÚLanguageModelInput)ÚBaseMessage)ÚRunnable)ÚBaseTool)Úconvert_to_secret_strÚget_from_dict_or_envÚpre_init)Úconvert_to_openai_tool)ÚFieldÚ	SecretStr)Ú
ChatOpenAI)Úis_openai_v1zhttps://text.octoai.run/v1/zllama-2-13b-chatc                   óT  ‡ — e Zd ZU dZ ee¬«      Zeed<    e e	d«      d¬«      Z
e	ed<    eed¬«      Zeed	<   ed
efd„«       Zed
eeef   fd„«       Zed
efd„«       Zeded
efd„«       Zdddœdeeeeef   eeef      deeeeed   ef      dee   ded
ee e!f   f
ˆ fd„Z"ˆ xZ#S )Ú
ChatOctoAIaz  OctoAI Chat large language models.

    See https://octo.ai/ for information about OctoAI.

    To use, you should have the ``openai`` python package installed and the
    environment variable ``OCTOAI_API_TOKEN`` set with your API token.
    Alternatively, you can use the octoai_api_token keyword argument.

    Any parameters that are valid to be passed to the `openai.create` call can be passed
    in, even if not explicitly saved on this class.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ChatOctoAI
            chat = ChatOctoAI(model_name="mixtral-8x7b-instruct")
    ©ÚdefaultÚoctoai_api_baseÚ Úapi_key)r   ÚaliasÚoctoai_api_tokenÚmodelÚ
model_nameÚreturnc                  ó   — y)zReturn type of chat model.zoctoai-chat© ©Úselfs    úp/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/octoai.pyÚ	_llm_typezChatOctoAI._llm_type4   s   € ð ó    c                 ó
   — ddiS )Nr   ÚOCTOAI_API_TOKENr$   r%   s    r'   Ú
lc_secretszChatOctoAI.lc_secrets9   s   € à"Ð$6Ð7Ð7r)   c                  ó   — y)NFr$   )Úclss    r'   Úis_lc_serializablezChatOctoAI.is_lc_serializable=   s   € àr)   Úvaluesc                 óX  — t        |ddt        ¬«      |d<   t        t        |dd«      «      |d<   t        |ddt        ¬«      |d<   	 dd	l}t        «       r�|d   j                  «       |d   d
œ}|j                  d«      s) |j                  di |¤Žj                  j                  |d<   |j                  d«      sY |j                  di |¤Žj                  j                  |d<   	 |S |d   |d<   |d   j                  «       |d<   |j                  |d<   |S # t        $ r t        d«      ‚w xY w)z?Validate that api key and python package exists in environment.r   ÚOCTOAI_API_BASEr   r   r+   r!   Ú
MODEL_NAMEr   N)r   Úbase_urlÚclientÚasync_clientÚopenai_api_baseÚopenai_api_keyzTCould not import openai python package. Please install it with `pip install openai`.r$   )r   ÚDEFAULT_API_BASEr   ÚDEFAULT_MODELÚopenair   Úget_secret_valueÚgetÚOpenAIÚchatÚcompletionsÚAsyncOpenAIÚChatCompletionÚImportError)r.   r0   r;   Úclient_paramss       r'   Úvalidate_environmentzChatOctoAI.validate_environmentA   sc  € ô %9ØØØÜ$ô	%
ˆÐ Ñ!ô &;Ü  Ð);Ð=OÓPó&
ˆÐ!Ñ"ô  4ØØØÜ!ô	 
ˆˆ|Ñð	ÛäŒ~à%Ð&8Ñ9×JÑJÓLØ &Ð'8Ñ 9ñ!�ð —z‘z (Ô+Ø'4 v§}¡}Ñ'E°}Ñ'E×'JÑ'J×'VÑ'V�F˜8Ñ$Ø—z‘z .Ô1Ø-?¨V×-?Ñ-?ñ .Ø'ñ.ç‘dŸ;™;ð ˜>Ò*ð ˆð -3Ð3DÑ,E�Ð(Ñ)Ø+1Ð2DÑ+E×+VÑ+VÓ+X�Ð'Ñ(Ø#)×#8Ñ#8��xÑ ð ˆøô ò 	Üð?óð ð	ús   ÁBD Ã%-D ÄD)N)Útool_choiceÚstrictÚtoolsrF   )ÚautoÚnoneÚrequiredÚanyrG   Úkwargsc                óœ  •‡— |D �cg c]  }t        ||¬«      ‘Œ }}‰r”t        ‰t        «      r‰dvrdd‰idœŠ‰dk(  rodŠnlt        ‰t        «      rdŠnYt        ‰t        «      r;|D �cg c]
  }|d   d   ‘Œ }}t        ˆfd„|D «       «      s t        d	‰› d
|› d�«      ‚t        d‰› �«      ‚‰|d<   t        ‰	| �   dd|i|¤ŽS c c}w c c}w )z;Imitating bind_tool method from langchain_openai.ChatOpenAI)rG   )rI   rJ   rL   rK   ÚfunctionÚname)ÚtyperO   rL   rK   c              3   ó4   •K  — | ]  }|‰d    d   k(  –— Œ y­w)rO   rP   Nr$   )Ú.0Ú	tool_namerF   s     €r'   Ú	<genexpr>z(ChatOctoAI.bind_tools.<locals>.<genexpr>�   s(   øè ø€ ð á%/˜	ð  ¨ZÑ!8¸Ñ!@Õ@Ù%/ùs   ƒzTool choice z1 was specified, but the only provided tools were Ú.zEUnrecognized tool_choice type. Expected str, bool or dict. Received: rF   rH   r$   )	r   Ú
isinstanceÚstrÚboolÚdictrL   Ú
ValueErrorÚsuperÚbind)
r&   rH   rF   rG   rM   ÚtoolÚformatted_toolsÚformatted_toolÚ
tool_namesÚ	__class__s
     `      €r'   Ú
bind_toolszChatOctoAI.bind_toolsn   s3  ù€ ñ EJó
ÙDI¸DÔ" 4°Ö7ÀEð 	ð 
ñ Ü˜+¤sÔ+àÐ&IÑIà *Ø%+¨[Ð$9ñ#�Kð  %Ò'Ø",‘KÜ˜K¬Ô.Ø(‘Ü˜K¬Ô.ñ +:óá*9˜ð # :Ñ.¨vÓ6Ø*9ð ð ô ó á%/óô ô %Ø& { mð 4/Ø/9¨l¸!ð=óð ô
 !ð!Ø!, ð/óð ð %0ˆF�=Ñ!Ü‰w‰|Ñ< /Ð<°VÑ<Ð<ùòI
ùò$s   ‡CÁ)C	)$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r9   r   rX   Ú__annotations__r   r   r:   r!   Úpropertyr(   r   r,   ÚclassmethodrY   r/   r   rE   r   r
   r   r	   r   r   r   rZ   r   r   r   r   rc   Ú__classcell__)rb   s   @r'   r   r      sC  ø… ññ$ !Ð)9Ô:€O�SÓ:Ù"'±	¸"³ÀYÔ"OÐ�iÓOÙ M¸ÔA€J�ÓAàð˜3ò ó ðð ð8˜D  c ™Nò 8ó ð8ð ð 4ò ó ðð ð*¨$ð *°4ò *ó ð*ðd Ø!%ò0=à˜˜d 3¨ 8™n¨d°H¸hÐFÑGÑHð0=ð Ø�$˜˜WÐ%FÑGÈÐMÑNñ
ð	0=ð ˜‘ð0=ð ð0=ð 
Ð$ kÐ1Ñ	2÷0=ñ 0=r)   r   N)"rg   Útypingr   r   r   r   r   r   r	   r
   Úlangchain_core.language_modelsr   Úlangchain_core.messagesr   Úlangchain_core.runnablesr   Úlangchain_core.toolsr   Úlangchain_core.utilsr   r   r   Ú%langchain_core.utils.function_callingr   Úpydanticr   r   Ú&langchain_community.chat_models.openair   Ú langchain_community.utils.openair   r9   r:   r   r$   r)   r'   Ú<module>rv      sP   ðÙ B÷	÷ 	ó 	õ >Ý /Ý -Ý )ß VÑ VÝ Hß %å =Ý 9à0Ð Ø"€ôA=�õ A=r)   