§
    šŠtj  ã                  ó  — d Z ddlmZ ddlZddlZddlZddlmZ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mZ ddlmZmZ dd	lmZ dd
lmZ erddlZ ej        e ¦  «        Z!dZ"dZ#dd„Z$ G d„ de¦  «        Z%dS )z>EverlyAI Endpoints chat wrapper. Relies heavily on ChatOpenAI.é    )ÚannotationsN)	ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚOptionalÚSequenceÚSetÚTypeÚUnion)ÚBaseMessage)ÚBaseTool)Úconvert_to_secret_strÚget_from_dict_or_env)ÚFieldÚmodel_validator©Úconvert_message_to_dict)Ú
ChatOpenAIzhttps://everlyai.xyz/hostedúmeta-llama/Llama-2-7b-chat-hfÚreturnr   c                 óL   — 	 dd l } n# t          $ r t          d¦  «        ‚w xY w| S )Nr   zŒCould not import tiktoken python package. This is needed in order to calculate get_token_ids. Please install it with `pip install tiktoken`.)ÚtiktokenÚImportError)r   s    úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/chat_models/everlyai.pyÚ_import_tiktokenr   (   sK   € ð
ØˆˆˆˆøÝð 
ð 
ð 
Ýð=ñ
ô 
ð 	
ð
øøøð €Os   ‚ ‡!c                  ó$  ‡ — e Zd ZU dZed"d„¦   «         Zed#d„¦   «         Zed$d„¦   «         Zd	Z	d
e
d<   	  eed¬¦  «        Zde
d<   	 eZde
d<   	 d	Zde
d<   	 ed%d„¦   «         Z ed¬¦  «        ed&d„¦   «         ¦   «         Zd'd„Z	 d(d)ˆ fd!„Zˆ xZS )*ÚChatEverlyAIaQ  `EverlyAI` Chat large language models.

    To use, you should have the ``openai`` python package installed, and the
    environment variable ``EVERLYAI_API_KEY`` set with your API key.
    Alternatively, you can use the everlyai_api_key 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 ChatEverlyAI
            chat = ChatEverlyAI(model_name="meta-llama/Llama-2-7b-chat-hf")
    r   Ústrc                ó   — dS )zReturn type of chat model.zeverlyai-chat© ©Úselfs    r   Ú	_llm_typezChatEverlyAI._llm_typeE   s	   € ð ˆó    úDict[str, str]c                ó
   — ddiS )NÚeverlyai_api_keyÚEVERLYAI_API_KEYr!   r"   s    r   Ú
lc_secretszChatEverlyAI.lc_secretsJ   s   € à"Ð$6Ð7Ð7r%   Úboolc                ó   — dS )NFr!   )Úclss    r   Úis_lc_serializablezChatEverlyAI.is_lc_serializableN   s   € àˆur%   NzOptional[str]r(   Úmodel)ÚdefaultÚaliasÚ
model_nameÚeverlyai_api_basezOptional[Set[str]]Úavailable_modelsúSet[str]c                 ó$   — t          ddg¦  «        S )z'Get available models from EverlyAI API.r   z(meta-llama/Llama-2-13b-chat-hf-quantized)Úsetr!   r%   r   Úget_available_modelsz!ChatEverlyAI.get_available_models[   s!   € õ à/Ø:ðñ
ô 
ð 	
r%   Úbefore)ÚmodeÚvaluesÚdictr   c                ó¾  — t          t          |dd¦  «        ¦  «        |d<   t          |d<   	 ddl}n"# t          $ r}t	          d¦  «        |‚d}~ww xY w	 |j        |d<   n"# t          $ r}t          d	¦  «        |‚d}~ww xY wd
|                     ¦   «         vr
t          |d
<   |d
         }|  
                    ¦   «         }||vrt          d|› d|› d�¦  «        ‚||d<   |S )z?Validate that api key and python package exists in environment.r(   r)   Úopenai_api_keyÚopenai_api_baser   NzTCould not import openai python package. Please install it with `pip install openai`.Úclientz�`openai` has no `ChatCompletion` attribute, this is likely due to an old version of the openai package. Try upgrading it with `pip install --upgrade openai`.r2   zModel name z  not found in available models: ú.r4   )r   r   ÚDEFAULT_API_BASEÚopenair   ÚChatCompletionÚAttributeErrorÚ
ValueErrorÚkeysÚDEFAULT_MODELr8   )r-   r;   rC   ÚeÚexcr2   r4   s          r   Úvalidate_environment_overridez*ChatEverlyAI.validate_environment_overridef   se  € õ $9Ý ØØ"Ø"ñô ñ$
ô $
ˆÐÑ õ %5ˆÐ Ñ!ð	ØˆMˆMˆMˆMøåð 	ð 	ð 	Ýð?ñô ð ðøøøøð	øøøð
	Ø%Ô4ˆF�8ÑÐøÝð 	ð 	ð 	Ýð7ñô ð ð	øøøøð	øøøð ˜vŸ{š{™}œ}Ð,Ð,Ý#0ˆF�<Ñ à˜LÔ)ˆ
à×3Ò3Ñ5Ô5ÐàÐ-Ð-Ð-Ýð'˜jð 'ð 'Ø#ð'ð 'ð 'ñô ð ð
 &6ˆÐ!Ñ"àˆs,   ­2 ²
A¼AÁAÁ
A  Á 
A?Á*A:Á:A?útuple[str, tiktoken.Encoding]c                ó  — t          ¦   «         }| j        �| j        }n| j        }	 |                     d¦  «        }nA# t          $ r4 t
                               d¦  «         d}|                     |¦  «        }Y nw xY w||fS )Nzgpt-3.5-turbo-0301z5Warning: model not found. Using cl100k_base encoding.Úcl100k_base)r   Útiktoken_model_namer2   Úencoding_for_modelÚKeyErrorÚloggerÚwarningÚget_encoding)r#   Ú	tiktoken_r/   Úencodings       r   Ú_get_encoding_modelz ChatEverlyAI._get_encoding_model•   s˜   € Ý$Ñ&Ô&ˆ	ØÔ#Ð/ØÔ,ˆEˆEà”OˆEð	5Ø ×3Ò3Ð4HÑIÔIˆHˆHøÝð 	5ð 	5ð 	5Ý�NŠNÐRÑSÔSÐSØ!ˆEØ ×-Ò-¨eÑ4Ô4ˆHˆHˆHð	5øøøð �hˆÐs   ¦< ¼;A:Á9A:Úmessagesúlist[BaseMessage]ÚtoolsúCOptional[Sequence[Union[Dict[str, Any], Type, Callable, BaseTool]]]Úintc           
     óÀ  •— |�t          j        d¦  «         t          j        d         dk    r!t	          ¦   «                              |¦  «        S |                      ¦   «         \  }}d}d}d}d„ |D ¦   «         }|D ]^}	||z  }|	                     ¦   «         D ]B\  }
}|t          | 	                    t          |¦  «        ¦  «        ¦  «        z  }|
dk    r||z  }ŒCŒ_|dz  }|S )	z¿Calculate num tokens with tiktoken package.

        Official documentation: https://github.com/openai/openai-cookbook/blob/
        main/examples/How_to_format_inputs_to_ChatGPT_models.ipynbNzECounting tokens in tool schemas is not yet supported. Ignoring tools.é   é   é   r   c                ó,   — g | ]}t          |¦  «        ‘ŒS r!   r   )Ú.0Úms     r   ú
<listcomp>z=ChatEverlyAI.get_num_tokens_from_messages.<locals>.<listcomp>¹   s!   € ÐFÐFÐF¸Õ0°Ñ3Ô3ÐFÐFÐFr%   Úname)ÚwarningsÚwarnÚsysÚversion_infoÚsuperÚget_num_tokens_from_messagesrW   ÚitemsÚlenÚencoder   )r#   rX   rZ   r/   rV   Útokens_per_messageÚtokens_per_nameÚ
num_tokensÚmessages_dictÚmessageÚkeyÚvalueÚ	__class__s               €r   rk   z)ChatEverlyAI.get_num_tokens_from_messages¤   s  ø€ ð ÐÝŒMØWñô ð õ Ô˜AÔ !Ò#Ð#Ý‘7”7×7Ò7¸ÑAÔAÐAØ×2Ò2Ñ4Ô4‰ˆˆxØÐØˆØˆ
ØFÐF¸XÐFÑFÔFˆØ$ð 	2ð 	2ˆGØÐ,Ñ,ˆJØ%Ÿmšm™oœoð 2ð 2‘
��Uð �c (§/¢/µ#°e±*´*Ñ"=Ô"=Ñ>Ô>Ñ>�
Ø˜&’=�=Ø /Ñ1�Jøð2ð 	�a‰ˆ
ØÐr%   )r   r   )r   r&   )r   r+   )r   r5   )r;   r<   r   r   )r   rL   )N)rX   rY   rZ   r[   r   r\   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr$   r*   Úclassmethodr.   r(   Ú__annotations__r   rH   r2   rB   r3   r4   Ústaticmethodr8   r   rK   rW   rk   Ú__classcell__)rv   s   @r   r   r   4   s‚  ø€ € € € € € ðð ð  ðð ð ñ „Xðð ð8ð 8ð 8ñ „Xð8ð ðð ð ñ „[ðð '+ÐÐ*Ð*Ð*Ñ*Ø&Ø�e M¸ÐAÑAÔA€JÐAÐAÐAÑAØØ-ÐÐ-Ð-Ð-Ñ-Ø)Ø+/ÐÐ/Ð/Ð/Ñ/Ø-àð
ð 
ð 
ñ „\ð
ð €_˜(Ð#Ñ#Ô#Øð+ð +ð +ñ „[ñ $Ô#ð+ðZð ð ð ð( ð ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  r%   r   )r   r   )&rz   Ú
__future__r   Úloggingrh   rf   Útypingr   r   r   r   r   r	   r
   r   r   Úlangchain_core.messagesr   Úlangchain_core.toolsr   Úlangchain_core.utilsr   r   Úpydanticr   r   Ú#langchain_community.adapters.openair   Ú&langchain_community.chat_models.openair   r   Ú	getLoggerrw   rR   rB   rH   r   r   r!   r%   r   ú<module>rŠ      s°  ðØ DÐ Dà "Ð "Ð "Ð "Ð "Ð "à €€€Ø 
€
€
€
Ø €€€ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 0Ð /Ð /Ð /Ð /Ð /Ø )Ð )Ð )Ð )Ð )Ð )Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à GÐ GÐ GÐ GÐ GÐ Gðð ð ð ð ð ð ð Ø€O€O€Oà	ˆÔ	˜8Ñ	$Ô	$€ð 1Ð Ø/€ð	ð 	ð 	ð 	ðPð Pð Pð Pð P�:ñ Pô Pð Pð Pð Pr%   