§
    šŠtjz  ã                   óÎ   — 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!dS )z<OctoAI Endpoints chat wrapper. Relies heavily on ChatOpenAI.é    )ÚAnyÚCallableÚDictÚLiteralÚOptionalÚSequenceÚTypeÚUnion)ÚLanguageModelInput)Ú	AIMessage)Ú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                   ó¸  ‡ — e Zd ZU dZ ee¬¦  «        Zeed<    e e	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Ú Úoctoai_api_tokenÚmodel)r   ÚaliasÚ
model_nameÚreturnc                 ó   — dS )zReturn type of chat model.zoctoai-chat© ©Úselfs    úd/var/www/html/CA-Chatbot/venv/lib/python3.11/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                 ó   — dS )NFr$   )Úclss    r'   Úis_lc_serializablezChatOctoAI.is_lc_serializable=   s   € àˆur)   Úvaluesc                 ó  — t          |ddt          ¬¦  «        |d<   |                     d¦  «        pd}t          |t          ¦  «        r|                     ¦   «         }nt          |dd¦  «        }t          |¦  «        |d<   t          |ddt          ¬¦  «        |d<   	 d	d
l}t          ¦   «         r‚|d                              ¦   «         |d         dœ}|                     d¦  «        s |j
        di |¤Žj        j        |d<   |                     d¦  «        s |j        di |¤Žj        j        |d<   n2|d         |d<   |d                              ¦   «         |d<   |j        |d<   n# t          $ r t          d¦  «        ‚w xY w|S )z?Validate that api key and python package exists in environment.r   ÚOCTOAI_API_BASEr   r   r   r+   r!   Ú
MODEL_NAMEr   N)Úapi_keyÚ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_BASEÚgetÚ
isinstancer   Úget_secret_valuer   ÚDEFAULT_MODELÚopenair   ÚOpenAIÚchatÚcompletionsÚAsyncOpenAIÚChatCompletionÚImportError)r.   r0   r   Ú	token_strr?   Úclient_paramss         r'   Úvalidate_environmentzChatOctoAI.validate_environmentA   só  € õ %9ØØØÝ$ð	%
ñ %
ô %
ˆÐ Ñ!ð "Ÿ:š:Ð&8Ñ9Ô9Ð?¸RÐÝÐ&­	Ñ2Ô2ð 	Ø(×9Ò9Ñ;Ô;ˆIˆIå,ØÐ*Ð,>ñô ˆIõ &;¸9Ñ%EÔ%EˆÐ!Ñ"Ý3ØØØÝ!ð	 
ñ  
ô  
ˆˆ|Ñð	ØˆMˆMˆMå‰~Œ~ð 9à%Ð&8Ô9×JÒJÑLÔLØ &Ð'8Ô 9ð!ð !�ð —z’z (Ñ+Ô+ð WØ'4 v¤}Ð'EÐ'E°}Ð'EÐ'EÔ'JÔ'V�F˜8Ñ$Ø—z’z .Ñ1Ô1ð 'Ø-?¨VÔ-?ð .ð .Ø'ð.ð .äœ;ð ˜>Ñ*øð -3Ð3DÔ,E�Ð(Ñ)Ø+1Ð2DÔ+E×+VÒ+VÑ+XÔ+X�Ð'Ñ(Ø#)Ô#8��xÑ øøÝð 	ð 	ð 	Ýð?ñô ð ð	øøøð ˆs   ÂCE# Å#E=N)Útool_choiceÚstrictÚtoolsrI   )ÚautoÚnoneÚrequiredÚanyrJ   Úkwargsc                ó´  •‡‡— ˆfd„|D ¦   «         }‰r«t          ‰t          ¦  «        r‰dvrdd‰idœŠ‰dk    rdŠn}t          ‰t          ¦  «        rdŠnet          ‰t          ¦  «        r>d„ |D ¦   «         }t	          ˆfd	„|D ¦   «         ¦  «        st          d
‰› d|› d�¦  «        ‚nt          d‰› �¦  «        ‚‰|d<    t          ¦   «         j        dd|i|¤ŽS )z;Imitating bind_tool method from langchain_openai.ChatOpenAIc                 ó2   •— g | ]}t          |‰¬ ¦  «        ‘ŒS ))rJ   r   )Ú.0ÚtoolrJ   s     €r'   ú
<listcomp>z)ChatOctoAI.bind_tools.<locals>.<listcomp>   s4   ø€ ð 
ð 
ð 
Ø<@Õ" 4°Ð7Ñ7Ô7ð
ð 
ð 
r)   )rL   rM   rO   rN   ÚfunctionÚname)ÚtyperV   rO   rN   c                 ó*   — g | ]}|d          d         ‘ŒS )rV   rW   r$   )rS   Úformatted_tools     r'   rU   z)ChatOctoAI.bind_tools.<locals>.<listcomp>‘   s2   € ð ð ð à&ð # :Ô.¨vÔ6ðð ð r)   c              3   ó<   •K  — | ]}|‰d          d         k    V — ŒdS )rV   rW   Nr$   )rS   Ú	tool_namerI   s     €r'   ú	<genexpr>z(ChatOctoAI.bind_tools.<locals>.<genexpr>•   sF   øè è € ð ð à!ð  ¨ZÔ!8¸Ô!@Ò@ðð ð ð ð ð r)   zTool choice z1 was specified, but the only provided tools were ú.zEUnrecognized tool_choice type. Expected str, bool or dict. Received: rI   rK   r$   )r<   ÚstrÚboolÚdictrO   Ú
ValueErrorÚsuperÚbind)r&   rK   rI   rJ   rP   Úformatted_toolsÚ
tool_namesÚ	__class__s     ``   €r'   Ú
bind_toolszChatOctoAI.bind_toolss   s‘  øøø€ ð
ð 
ð 
ð 
ØDIð
ñ 
ô 
ˆð ð  	0Ý˜+¥sÑ+Ô+ð àÐ&IÐIÐIà *Ø%+¨[Ð$9ð#ð #�Kð  %Ò'Ð'Ø",�KøÝ˜K­Ñ.Ô.ð Ø(��Ý˜K­Ñ.Ô.ð ðð à*9ðñ ô �
õ ð ð ð ð à%/ðñ ô ñ ô ð õ %ð= {ð =ð =Ø/9ð=ð =ð =ñô ð ð	õ !ð/Ø!,ð/ð /ñô ð ð %0ˆF�=Ñ!Ø�u‰wŒwŒ|Ð<Ð< /Ð<°VÐ<Ð<Ð<r)   )$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r:   r   r_   Ú__annotations__r   r   r>   r!   Úpropertyr(   r   r,   Úclassmethodr`   r/   r   rH   r   r
   r   r	   r   r   r   ra   r   r   r   r   rh   Ú__classcell__)rg   s   @r'   r   r      sà  ø€ € € € € € ðð ð$ !˜5Ð)9Ð:Ñ:Ô:€O�SÐ:Ð:Ñ:Ø"' %°	°	¸"±´Ð">Ñ">Ô">Ð�iÐ>Ð>Ñ>Ø�e M¸ÐAÑAÔA€J�ÐAÐAÑAàð˜3ð ð ð ñ „Xðð ð8˜D  c œNð 8ð 8ð 8ñ „Xð8ð ð 4ð ð ð ñ „[ðð ð/¨$ð /°4ð /ð /ð /ñ „Xð/ðn Ø!%ð0=ð 0=ð 0=à˜˜d 3¨ 8œn¨d°H¸hÐFÔGÔHð0=ð Ø�$˜˜WÐ%FÔGÈÐMÔNô
ð	0=ð ˜”ð0=ð ð0=ð 
Ð$ iÐ/Ô	0ð0=ð 0=ð 0=ð 0=ð 0=ð 0=ð 0=ð 0=ð 0=ð 0=r)   r   N)"rl   Ú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   r:   r>   r   r$   r)   r'   ú<module>r{      sn  ðØ BÐ Bð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð >Ð =Ð =Ð =Ð =Ð =Ø -Ð -Ð -Ð -Ð -Ð -Ø -Ð -Ð -Ð -Ð -Ð -Ø )Ð )Ð )Ð )Ð )Ð )Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ HÐ HÐ HÐ HÐ HÐ HØ %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à =Ð =Ð =Ð =Ð =Ð =Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9à0Ð Ø"€ðF=ð F=ð F=ð F=ð F=�ñ F=ô F=ð F=ð F=ð F=r)   