§
    šŠtj31  ã                   ó,  — 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
 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mZmZmZ d d
lmZmZ d dl m!Z!m"Z"m#Z#m$Z$  G d„ de¦  «        Z% eddd¬¦  «         G d„ dee%¦  «        ¦   «         Z&dS )é    N)ÚAnyÚAsyncIteratorÚCallableÚDictÚIteratorÚListÚMappingÚOptional)Ú
deprecated)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseLanguageModel)ÚLLM)ÚGenerationChunk)ÚPromptValue)Úcheck_package_versionÚget_from_dict_or_envÚget_pydantic_field_namesÚpre_init)Ú_build_model_kwargsÚconvert_to_secret_str)Ú
ConfigDictÚFieldÚ	SecretStrÚmodel_validatorc                   óÀ  — e Zd ZU dZeed<   dZeed<    edd¬¦  «        Ze	ed<   	  edd	¬¦  «        Z
eed
<   	 dZee         ed<   	 dZee         ed<   	 dZee         ed<   	 dZeed<   	 dZee         ed<   	 dZeed<   	 dZee	         ed<   dZee         ed<   dZee	         ed<   dZee	         ed<   dZeee	gef                  ed<    ee¬¦  «        Zee	ef         ed<    ed¬¦  «        e dedefd„¦   «         ¦   «         Z!e"dedefd„¦   «         Z#e$de%e	ef         fd „¦   «         Z&e$de%e	ef         fd!„¦   «         Z'd$d"ee(e	                  de(e	         fd#„Z)dS )%Ú_AnthropicCommonNÚclientÚasync_clientzclaude-2Ú
model_name)ÚdefaultÚaliasÚmodelé   Ú
max_tokensÚmax_tokens_to_sampleÚtemperatureÚtop_kÚtop_pFÚ	streamingÚdefault_request_timeouté   Úmax_retriesÚanthropic_api_urlÚanthropic_api_keyÚHUMAN_PROMPTÚ	AI_PROMPTÚcount_tokens)Údefault_factoryÚmodel_kwargsÚbefore)ÚmodeÚvaluesÚreturnc                 óD   — t          | ¦  «        }t          ||¦  «        }|S ©N)r   r   )Úclsr7   Úall_required_field_namess      ú`/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/anthropic.pyÚbuild_extraz_AnthropicCommon.build_extraE   s'   € õ $<¸CÑ#@Ô#@Ð Ý$ VÐ-EÑFÔFˆØˆó    c                 ó<  — t          t          |dd¦  «        ¦  «        |d<   t          |ddd¬¦  «        |d<   	 ddl}t          d	d
¬¦  «         |                     |d         |d                              ¦   «         |d         |d         ¬¦  «        |d<   |                     |d         |d                              ¦   «         |d         |d         ¬¦  «        |d<   |j        |d<   |j        |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/   ÚANTHROPIC_API_KEYr.   ÚANTHROPIC_API_URLzhttps://api.anthropic.com)r!   r   NÚ	anthropicz0.3)Úgte_versionr+   r-   )Úbase_urlÚapi_keyÚtimeoutr-   r   r   r0   r1   r2   z]Could not import anthropic python package. Please it install it with `pip install anthropic`.)r   r   rC   r   Ú	AnthropicÚget_secret_valueÚAsyncAnthropicr0   r1   r2   ÚImportError)r;   r7   rC   s      r=   Úvalidate_environmentz%_AnthropicCommon.validate_environmentL   s  € õ '<Ý  Ð)<Ð>QÑRÔRñ'
ô '
ˆÐ"Ñ#õ ';ØØØØ/ð	'
ñ '
ô '
ˆÐ"Ñ#ð	ØÐÐÐå! +¸5ÐAÑAÔAÐAØ(×2Ò2ØÐ 3Ô4ØÐ2Ô3×DÒDÑFÔFØÐ8Ô9Ø" =Ô1ð	  3ñ  ô  ˆF�8Ñð &/×%=Ò%=ØÐ 3Ô4ØÐ2Ô3×DÒDÑFÔFØÐ8Ô9Ø" =Ô1ð	 &>ñ &ô &ˆF�>Ñ"ð &/Ô%;ˆF�>Ñ"Ø"+Ô"5ˆF�;ÑØ%+¨HÔ%5Ô%BˆF�>Ñ"Ð"øåð 	ð 	ð 	ÝðEñô ð ð	øøøð
 ˆs   ¹CC? Ã?Dc                 óœ   — | j         | j        dœ}| j        �
| j        |d<   | j        �
| j        |d<   | j        �
| j        |d<   i |¥| j        ¥S )z5Get the default parameters for calling Anthropic API.)r&   r#   Nr'   r(   r)   )r&   r#   r'   r(   r)   r4   )ÚselfÚds     r=   Ú_default_paramsz _AnthropicCommon._default_paramsu   sl   € ð %)Ô$=Ø”Zð
ð 
ˆð ÔÐ'Ø#Ô/ˆAˆmÑØŒ:Ð!ØœˆAˆg‰JØŒ:Ð!ØœˆAˆg‰JØ)�!Ð)�tÔ(Ð)Ð)r?   c                 ó   — i i ¥| j         ¥S )zGet the identifying parameters.)rP   ©rN   s    r=   Ú_identifying_paramsz$_AnthropicCommon._identifying_params„   s   € ð .�"Ð-˜Ô,Ð-Ð-r?   Ústopc                 ó~   — | j         r| j        st          d¦  «        ‚|€g }|                     | j         g¦  «         |S )Nú-Please ensure the anthropic package is loaded)r0   r1   Ú	NameErrorÚextend)rN   rT   s     r=   Ú_get_anthropic_stopz$_AnthropicCommon._get_anthropic_stop‰   sP   € ØÔ ð 	M¨¬ð 	MÝÐKÑLÔLÐLàˆ<ØˆDð 	�Š�TÔ&Ð'Ñ(Ô(Ð(àˆr?   r:   )*Ú__name__Ú
__module__Ú__qualname__r   r   Ú__annotations__r   r   r#   Ústrr&   Úintr'   r
   Úfloatr(   r)   r*   Úboolr+   r-   r.   r/   r   r0   r1   r2   r   Údictr4   r   r   Úclassmethodr>   r   rL   Úpropertyr	   rP   rS   r   rY   © r?   r=   r   r   !   s�  € € € € € € Ø€FˆCÐÐÑØ€L�#ÐÐÑØ�˜z°Ð>Ñ>Ô>€Eˆ3Ð>Ð>Ñ>Øà % ¨c¸Ð FÑ FÔ FÐ˜#ÐFÐFÑFØAà#'€K�˜%”Ð'Ð'Ñ'ØQà€Eˆ8�CŒ=ÐÐÑØ@à!€Eˆ8�EŒ?Ð!Ð!Ñ!ØDà€IˆtÐÐÑØ(à/3Ð˜X eœ_Ð3Ð3Ñ3ØSà€K�ÐÐÑØVà'+Ð�x ”}Ð+Ð+Ñ+à-1Ð�x 	Ô*Ð1Ð1Ñ1à"&€L�(˜3”-Ð&Ð&Ñ&Ø#€Iˆx˜Œ}Ð#Ð#Ñ#Ø37€L�(˜8 S E¨3 JÔ/Ô0Ð7Ð7Ñ7Ø#( 5¸Ð#>Ñ#>Ô#>€L�$�s˜C�x”.Ð>Ð>Ñ>à€_˜(Ð#Ñ#Ô#Øð ð ¨#ð ð ð ñ „[ñ $Ô#ðð
 ð&¨$ð &°4ð &ð &ð &ñ „Xð&ðP ð* ¨¨c¨Ô!2ð *ð *ð *ñ „Xð*ð ð. W¨S°#¨XÔ%6ð .ð .ð .ñ „Xð.ð
ð 
¨°°c´Ô(;ð 
ÀtÈCÄyð 
ð 
ð 
ð 
ð 
ð 
r?   r   z0.0.28z1.0z langchain_anthropic.AnthropicLLM)ÚsinceÚremovalÚalternative_importc                   óÈ  — e Zd ZdZ edd¬¦  «        Zededefd„¦   «         Ze	de
fd„¦   «         Zde
de
fd	„Z	 	 dde
deee
                  dee         dede
f
d„Zdede
fd„Z	 	 dde
deee
                  dee         dede
f
d„Z	 	 dde
deee
                  dee         dedee         f
d„Z	 	 dde
deee
                  dee         dedee         f
d„Zde
defd„Zd
S )rH   aï  Anthropic large language models.

    To use, you should have the ``anthropic`` python package installed, and the
    environment variable ``ANTHROPIC_API_KEY`` set with your API key, or pass
    it as a named parameter to the constructor.

    Example:
        .. code-block:: python

            import anthropic
            from langchain_community.llms import Anthropic

            model = Anthropic(model="<model_name>", anthropic_api_key="my-api-key")

            # Simplest invocation, automatically wrapped with HUMAN_PROMPT
            # and AI_PROMPT.
            response = model.invoke("What are the biggest risks facing humanity?")

            # Or if you want to use the chat mode, build a few-shot-prompt, or
            # put words in the Assistant's mouth, use HUMAN_PROMPT and AI_PROMPT:
            raw_prompt = "What are the biggest risks facing humanity?"
            prompt = f"{anthropic.HUMAN_PROMPT} {prompt}{anthropic.AI_PROMPT}"
            response = model.invoke(prompt)
    T)Úpopulate_by_nameÚarbitrary_types_allowedr7   r8   c                 ó.   — t          j        d¦  «         |S )z,Raise warning that this class is deprecated.zpThis Anthropic LLM is deprecated. Please use `from langchain_community.chat_models import ChatAnthropic` instead)ÚwarningsÚwarn)r;   r7   s     r=   Úraise_warningzAnthropic.raise_warningº   s$   € õ 	Œðñ	
ô 	
ð 	
ð
 ˆr?   c                 ó   — dS )zReturn type of llm.zanthropic-llmre   rR   s    r=   Ú	_llm_typezAnthropic._llm_typeÄ   s	   € ð ˆr?   Úpromptc                 óè   — | j         r| j        st          d¦  «        ‚|                     | j         ¦  «        r|S t	          j        d| j         |¦  «        \  }}|dk    r|S | j         › d|› | j        › d�S )NrV   z
^\n*Human:é   ú z Sure, here you go:
)r0   r1   rW   Ú
startswithÚreÚsubn)rN   rr   Úcorrected_promptÚn_subss       r=   Ú_wrap_promptzAnthropic._wrap_promptÉ   s•   € ØÔ ð 	M¨¬ð 	MÝÐKÑLÔLÐLà×Ò˜TÔ.Ñ/Ô/ð 	ØˆMõ $&¤7¨=¸$Ô:KÈVÑ#TÔ#TÑ Ð˜&Ø�QŠ;ˆ;Ø#Ð#ð Ô#ÐSÐS fÐS¨d¬nÐSÐSÐSÐSr?   NrT   Úrun_managerÚkwargsc                 óü   — | j         r"d} | j        d|||dœ|¤ŽD ]}||j        z  }Œ|S |                      |¦  «        }i | j        ¥|¥} | j        j        j        d|                      |¦  «        |dœ|¤Ž}|j	        S )aî  Call out to Anthropic's completion endpoint.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.

        Returns:
            The string generated by the model.

        Example:
            .. code-block:: python

                prompt = "What are the biggest risks facing humanity?"
                prompt = f"\n\nHuman: {prompt}\n\nAssistant:"
                response = model.invoke(prompt)

        Ú ©rr   rT   r|   ©rr   Ústop_sequencesre   )
r*   Ú_streamÚtextrY   rP   r   ÚcompletionsÚcreater{   Ú
completion©	rN   rr   rT   r|   r}   r‡   ÚchunkÚparamsÚresponses	            r=   Ú_callzAnthropic._callØ   sÐ   € ð0 Œ>ð 	ØˆJØ%˜œð Ø D°kðð ØEKðð ð )ð )�ð ˜eœjÑ(�
�
ØÐà×'Ò'¨Ñ-Ô-ˆØ3�DÔ(Ð3¨FÐ3ˆØ1�4”;Ô*Ô1ð 
Ø×$Ò$ VÑ,Ô,Øð
ð 
ð ð
ð 
ˆð
 Ô"Ð"r?   c                 óP   — |                       |                     ¦   «         ¦  «        S r:   )r{   Ú	to_string)rN   rr   s     r=   Úconvert_promptzAnthropic.convert_prompt  s"   € Ø× Ò  ×!1Ò!1Ñ!3Ô!3Ñ4Ô4Ð4r?   c              ‹   ó  K  — | j         r(d} | j        d|||dœ|¤Ž2 3 d{V —†}||j        z  }Œ6 |S |                      |¦  «        }i | j        ¥|¥} | j        j        j        d|                      |¦  «        |dœ|¤Žƒ d{V —†}|j	        S )z;Call out to Anthropic's completion endpoint asynchronously.r   r€   Nr�   re   )
r*   Ú_astreamr„   rY   rP   r   r…   r†   r{   r‡   rˆ   s	            r=   Ú_acallzAnthropic._acall  s  è è € ð Œ>ð 	ØˆJØ,˜tœ}ð  Ø D°kð ð  ØEKð ð  ð )ð )ð )ð )ð )ð )ð )�eð ˜eœjÑ(�
�
ð ð Ðà×'Ò'¨Ñ-Ô-ˆØ3�DÔ(Ð3¨FÐ3ˆà=˜Ô*Ô6Ô=ð 
Ø×$Ò$ VÑ,Ô,Øð
ð 
ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
 Ô"Ð"s   �/c              +   ó  K  — |                       |¦  «        }i | j        ¥|¥} | j        j        j        d|                      |¦  «        |ddœ|¤ŽD ]9}t          |j        ¬¦  «        }|r|                     |j	        |¬¦  «         |V — Œ:dS )a\  Call Anthropic completion_stream and return the resulting generator.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.
        Returns:
            A generator representing the stream of tokens from Anthropic.
        Example:
            .. code-block:: python

                prompt = "Write a poem about a stream."
                prompt = f"\n\nHuman: {prompt}\n\nAssistant:"
                generator = anthropic.stream(prompt)
                for token in generator:
                    yield token
        T©rr   r‚   Ústream©r„   ©r‰   Nre   )
rY   rP   r   r…   r†   r{   r   r‡   Úon_llm_new_tokenr„   ©rN   rr   rT   r|   r}   rŠ   Útokenr‰   s           r=   rƒ   zAnthropic._stream  sÅ   è è € ð. ×'Ò'¨Ñ-Ô-ˆØ3�DÔ(Ð3¨FÐ3ˆà3�T”[Ô,Ô3ð 
Ø×$Ò$ VÑ,Ô,¸TÈ$ð
ð 
ØRXð
ð 
ð 	ð 	ˆEõ $¨Ô)9Ð:Ñ:Ô:ˆEØð FØ×,Ò,¨U¬Z¸uÐ,ÑEÔEÐEØˆKˆKˆKˆKð	ð 	r?   c                ó@  K  — |                       |¦  «        }i | j        ¥|¥} | j        j        j        d|                      |¦  «        |ddœ|¤Žƒ d{V —†2 3 d{V —†}t          |j        ¬¦  «        }|r"|                     |j	        |¬¦  «        ƒ d{V —† |W V — ŒF6 dS )a[  Call Anthropic completion_stream and return the resulting generator.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.
        Returns:
            A generator representing the stream of tokens from Anthropic.
        Example:
            .. code-block:: python
                prompt = "Write a poem about a stream."
                prompt = f"\n\nHuman: {prompt}\n\nAssistant:"
                generator = anthropic.stream(prompt)
                for token in generator:
                    yield token
        Tr”   Nr–   r—   re   )
rY   rP   r   r…   r†   r{   r   r‡   r˜   r„   r™   s           r=   r‘   zAnthropic._astream@  s  è è € ð, ×'Ò'¨Ñ-Ô-ˆØ3�DÔ(Ð3¨FÐ3ˆà!E Ô!2Ô!>Ô!Eð "
Ø×$Ò$ VÑ,Ô,ØØð"
ð "
ð ð	"
ð "
ð 
ð 
ð 
ð 
ð 
ð 
ð 		ð 		ð 		ð 		ð 		ð 		ð 		�%õ $¨Ô)9Ð:Ñ:Ô:ˆEØð LØ!×2Ò2°5´:ÀUÐ2ÑKÔKÐKÐKÐKÐKÐKÐKÐKØˆKˆKˆKˆKˆKð
ð 
ð 
s   ÁBr„   c                 óX   — | j         st          d¦  «        ‚|                       |¦  «        S )zCalculate number of tokens.rV   )r2   rW   )rN   r„   s     r=   Úget_num_tokenszAnthropic.get_num_tokensd  s1   € àÔ ð 	MÝÐKÑLÔLÐLØ× Ò  Ñ&Ô&Ð&r?   )NN)rZ   r[   r\   Ú__doc__r   Úmodel_configr   r   ro   rd   r^   rq   r{   r
   r   r   r   rŒ   r   r�   r   r’   r   r   rƒ   r   r‘   r_   r�   re   r?   r=   rH   rH   –   sŠ  € € € € € ðð ð2 �:ØØ $ðñ ô €Lð
 ð 4ð ¨Dð ð ð ñ „Xðð ð˜3ð ð ð ñ „XððT 3ð T¨3ð Tð Tð Tð Tð$ %)Ø:>ð	'#ð '#àð'#ð �t˜C”yÔ!ð'#ð Ð6Ô7ð	'#ð
 ð'#ð 
ð'#ð '#ð '#ð '#ðR5 [ð 5°Sð 5ð 5ð 5ð 5ð %)Ø?Cð	#ð #àð#ð �t˜C”yÔ!ð#ð Ð;Ô<ð	#ð
 ð#ð 
ð#ð #ð #ð #ð: %)Ø:>ð	 ð  àð ð �t˜C”yÔ!ð ð Ð6Ô7ð	 ð
 ð ð 
�/Ô	"ð ð  ð  ð  ðJ %)Ø?Cð	"ð "àð"ð �t˜C”yÔ!ð"ð Ð;Ô<ð	"ð
 ð"ð 
�Ô	'ð"ð "ð "ð "ðH' 3ð '¨3ð 'ð 'ð 'ð 'ð 'ð 'r?   rH   )'rw   rm   Útypingr   r   r   r   r   r   r	   r
   Úlangchain_core._api.deprecationr   Úlangchain_core.callbacksr   r   Úlangchain_core.language_modelsr   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   Úlangchain_core.prompt_valuesr   Úlangchain_core.utilsr   r   r   r   Úlangchain_core.utils.utilsr   r   Úpydanticr   r   r   r   r   rH   re   r?   r=   ú<module>rª      s  ðØ 	€	€	€	Ø €€€ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 7Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð ð ð ð ð ð ð ð ð ð ð RÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bðrð rð rð rð rÐ(ñ rô rð rðj €Ø
ØØ9ðñ ô ð
M'ð M'ð M'ð M'ð M'�Ð%ñ M'ô M'ñô ð
M'ð M'ð M'r?   