
    dh                         S r SSKJrJrJrJrJrJrJrJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJr  SSKJrJrJr  SSKJr  SS	KJrJr  SS
KJr  SSKJr  SrSr  " S S\5      r!g)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                   X  ^  \ rS rSr% Sr\" \S9r\\	S'   \" \
" S5      SS9r\
\	S'   \" \S	S9r\\	S
'   \S\4S j5       r\S\\\4   4S j5       r\S\4S j5       r\S\S\4S j5       rSSS.S\\\\\4   \\\4      S\\\\\S   \4      S\\   S\S\ \!\"4   4
U 4S jjjr#Sr$U =r%$ )
ChatOctoAI   aN  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                     g)zReturn type of chat model.zoctoai-chat selfs    ^/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/octoai.py	_llm_typeChatOctoAI._llm_type4   s         c                 
    SS0$ )Nr    OCTOAI_API_TOKENr%   r&   s    r(   
lc_secretsChatOctoAI.lc_secrets9   s    "$677r+   c                     g)NFr%   )clss    r(   is_lc_serializableChatOctoAI.is_lc_serializable=   s    r+   valuesc                 l   [        USS[        S9US'   [        [        USS5      5      US'   [        USS[        S9US'    SS	Kn[        5       (       a  US   R                  5       US   S
.nUR                  S5      (       d)  UR                  " S0 UD6R                  R                  US'   UR                  S5      (       d)  UR                  " S0 UD6R                  R                  US'   U$ US   US'   US   R                  5       US'   UR                  US'    U$ ! [         a    [        S5      ef = f)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)r1   r4   r?   client_paramss       r(   validate_environmentChatOctoAI.validate_environmentA   sg    %9$	%
 ! &; );=OP&
!"  4!	 
|	~~%&89JJL &'8 9! zz(++'-}}'E}'E'J'J'V'VF8$zz.11-3-?-? .'.d;; >*  -33D,E()+12D+E+V+V+X'(#)#8#8x    	? 	s   B*D --D D3N)tool_choicestricttoolsrK   )autononerequiredanyrL   kwargsc                  >^ U Vs/ sH  n[        XSS9PM     nnT(       a  [        T[        5      (       a  TS;  a  SST0S.mTS:X  a  SmO[        T[        5      (       a  SmOg[        T[        5      (       aD  U Vs/ sH  nUS   S   PM     nn[        U4S jU 5       5      (       d  [        S	T S
U S35      eO[        ST 35      eTUS'   [        T	U ]   " SSU0UD6$ s  snf s  snf )z;Imitating bind_tool method from langchain_openai.ChatOpenAI)rL   )rN   rO   rQ   rP   functionname)typerT   rQ   rP   c              3   8   >#    U H  nUTS    S   :H  v   M     g7f)rT   rU   Nr%   ).0	tool_namerK   s     r(   	<genexpr>(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: rK   rM   r%   )	r   
isinstancestrbooldictrQ   
ValueErrorsuperbind)
r'   rM   rK   rL   rR   toolformatted_toolsformatted_tool
tool_names	__class__s
     `      r(   
bind_toolsChatOctoAI.bind_toolsn   sE    EJ
DID"47E 	 
 +s++&II *%+[$9#K %'",KK..(K.. +:*9 #:.v6*9    %/   %&{m 4//9l!= 	 !!!,/  %0F=!w|</<V<<I
$s   C#>C(r%   )&__name__
__module____qualname____firstlineno____doc__r   r=   r   r^   __annotations__r   r    r>   r"   propertyr)   r   r.   classmethodr_   r2   r   rI   r   r
   r   r	   r   r   r   r`   r   r   r   r   ri   __static_attributes____classcell__)rh   s   @r(   r   r      sC   $ !)9:OS:"'	"Y"OiOMAJA3   8DcN 8 8 4   *$ *4 * *d !%0=d38ndHhFGH0= $W%FGMN
	0= 0= 0= 
$k1	20= 0=r+   r   N)"ro   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      sP    B	 	 	 > / - ) V V H % = 90 "A= A=r+   