§
    æ˜ºhD0  ã                   óð   — 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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mZmZ d d
lmZm Z   G d„ de¦  «        Z! G d„ dee!¦  «        Z"dS )é    N)ÚAnyÚAsyncIteratorÚCallableÚDictÚIteratorÚListÚMappingÚOptional)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseLanguageModel)ÚLLM)ÚGenerationChunk)ÚPromptValue)ÚFieldÚ	SecretStrÚroot_validator)Úcheck_package_versionÚget_from_dict_or_envÚget_pydantic_field_names)Úbuild_extra_kwargsÚconvert_to_secret_strc                   ó°  — 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	         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¬¦  «        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Úanthropic_api_urlÚanthropic_api_keyÚHUMAN_PROMPTÚ	AI_PROMPTÚcount_tokens)Údefault_factoryÚmodel_kwargsT)ÚpreÚvaluesÚreturnc                 óx   — |                      di ¦  «        }t          | ¦  «        }t          |||¦  «        |d<   |S )Nr/   )Úgetr   r   )Úclsr1   ÚextraÚall_required_field_namess       új/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/llms/anthropic.pyÚbuild_extraz_AnthropicCommon.build_extra@   sF   € à—
’
˜>¨2Ñ.Ô.ˆÝ#;¸CÑ#@Ô#@Ð Ý!3Ø�6Ð3ñ"
ô "
ˆˆ~Ñð ˆó    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<   |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(   )Úbase_urlÚapi_keyÚtimeoutr   r   r+   r,   r-   z]Could not import anthropic python package. Please it install it with `pip install anthropic`.)r   r   r>   r   Ú	AnthropicÚget_secret_valueÚAsyncAnthropicr+   r,   r-   ÚImportError)r5   r1   r>   s      r8   Úvalidate_environmentz%_AnthropicCommon.validate_environmentI   so  € õ '<Ý  Ð)<Ð>QÑRÔRñ'
ô '
ˆÐ"Ñ#õ ';ØØØØ/ð	'
ñ '
ô '
ˆÐ"Ñ#ð	ØÐÐÐå! +¸5ÐAÑAÔAÐAØ(×2Ò2ØÐ 3Ô4ØÐ2Ô3×DÒDÑFÔFØÐ8Ô9ð  3ñ  ô  ˆF�8Ñð
 &/×%=Ò%=ØÐ 3Ô4ØÐ2Ô3×DÒDÑFÔFØÐ8Ô9ð &>ñ &ô &ˆF�>Ñ"ð
 &/Ô%;ˆF�>Ñ"Ø"+Ô"5ˆF�;ÑØ%+¨HÔ%5Ô%BˆF�>Ñ"Ð"øåð 	ð 	ð 	ÝðEñô ð ð	øøøð
 ˆs   ¹B7C1 Ã1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&   r/   )ÚselfÚds     r8   Ú_default_paramsz _AnthropicCommon._default_paramsp   sl   € ð %)Ô$=Ø”Zð
ð 
ˆð ÔÐ'Ø#Ô/ˆAˆmÑØŒ:Ð!ØœˆAˆg‰JØŒ:Ð!ØœˆAˆg‰JØ)�!Ð)�tÔ(Ð)Ð)r:   c                 ó   — i i ¥| j         ¥S )zGet the identifying parameters.)rK   ©rI   s    r8   Ú_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)r+   r,   Ú	NameErrorÚextend)rI   rO   s     r8   Ú_get_anthropic_stopz$_AnthropicCommon._get_anthropic_stop„   sP   € ØÔ ð 	M¨¬ð 	MÝÐKÑLÔLÐLàˆ<ØˆDð 	�Š�TÔ&Ð'Ñ(Ô(Ð(àˆr:   ©N)'Ú__name__Ú
__module__Ú__qualname__r   r   Ú__annotations__r   r   r    Ústrr#   Úintr$   r
   Úfloatr%   r&   r'   Úboolr(   r)   r*   r   r+   r,   r-   r   Údictr/   r   r   r9   rG   Úpropertyr	   rK   rN   r   rT   © r:   r8   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à'+Ð�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ð $ð $ð $ñ Ôð$ðL ð* ¨¨c¨Ô!2ð *ð *ð *ñ „Xð*ð ð. W¨S°#¨XÔ%6ð .ð .ð .ñ „Xð.ð
ð 
¨°°c´Ô(;ð 
ÀtÈCÄyð 
ð 
ð 
ð 
ð 
ð 
r:   r   c                   óØ  — e Zd ZdZ G 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 )rC   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("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(prompt)
    c                   ó   — e Zd ZdZdZdZdS )úAnthropic.Configz'Configuration for this pydantic object.TN)rV   rW   rX   Ú__doc__Úallow_population_by_field_nameÚarbitrary_types_allowedr`   r:   r8   ÚConfigrc   «   s"   € € € € € Ø5Ð5à)-Ð&Ø"&ÐÐÐr:   rg   r1   r2   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)r5   r1   s     r8   Úraise_warningzAnthropic.raise_warning±   s$   € õ 	Œðñ	
ô 	
ð 	
ð
 ˆr:   c                 ó   — dS )zReturn type of llm.zanthropic-llmr`   rM   s    r8   Ú	_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 )NrQ   z
^\n*Human:é   ú z Sure, here you go:
)r+   r,   rR   Ú
startswithÚreÚsubn)rI   rn   Úcorrected_promptÚn_subss       r8   Ú_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:   NrO   Ú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(prompt)

        Ú ©rn   rO   rx   ©rn   Ústop_sequencesr`   )
r'   Ú_streamÚtextrT   rK   r   ÚcompletionsÚcreaterw   Ú
completion©	rI   rn   rO   rx   ry   rƒ   ÚchunkÚparamsÚresponses	            r8   Ú_callzAnthropic._callÏ   sÐ   € ð0 Œ>ð 	ØˆJØ%˜œð Ø D°kðð ØEKðð ð )ð )�ð ˜eœjÑ(�
�
ØÐà×'Ò'¨Ñ-Ô-ˆØ3�DÔ(Ð3¨FÐ3ˆØ1�4”;Ô*Ô1ð 
Ø×$Ò$ VÑ,Ô,Øð
ð 
ð ð
ð 
ˆð
 Ô"Ð"r:   c                 óP   — |                       |                     ¦   «         ¦  «        S rU   )rw   Ú	to_string)rI   rn   s     r8   Ú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}   r`   )
r'   Ú_astreamr€   rT   rK   r   r�   r‚   rw   rƒ   r„   s	            r8   Ú_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        ¬¦  «        }|V — |r|                     |j	        |¬¦  «         Œ: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©rn   r~   Ústream©r€   ©r…   Nr`   )
rT   rK   r   r�   r‚   rw   r   rƒ   Úon_llm_new_tokenr€   ©rI   rn   rO   rx   ry   r†   Útokenr…   s           r8   r   zAnthropic._stream  sÈ   è è € ð. ×'Ò'¨Ñ-Ô-ˆØ3�DÔ(Ð3¨FÐ3ˆà3�T”[Ô,Ô3ð 
Ø×$Ò$ VÑ,Ô,¸TÈ$ð
ð 
ØRXð
ð 
ð 	Fð 	FˆEõ $¨Ô)9Ð:Ñ:Ô:ˆEØˆKˆKˆKØð FØ×,Ò,¨U¬Z¸uÐ,ÑEÔEÐEøð	Fð 	Fr:   c                ó@  K  — |                       |¦  «        }i | j        ¥|¥} | j        j        j        d|                      |¦  «        |ddœ|¤Žƒ d{V —†2 3 d{V —†}t          |j        ¬¦  «        }|W V — |r"|                     |j	        |¬¦  «        ƒ d{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“   r`   )
rT   rK   r   r�   r‚   rw   r   rƒ   r”   r€   r•   s           r8   r�   zAnthropic._astream7  s   è è € ð, ×'Ò'¨Ñ-Ô-ˆØ3�DÔ(Ð3¨FÐ3ˆà!E Ô!2Ô!>Ô!Eð "
Ø×$Ò$ VÑ,Ô,ØØð"
ð "
ð ð	"
ð "
ð 
ð 
ð 
ð 
ð 
ð 
ð 		Lð 		Lð 		Lð 		Lð 		Lð 		Lð 		L�%õ $¨Ô)9Ð:Ñ:Ô:ˆEØˆKˆKˆKˆKØð LØ!×2Ò2°5´:ÀUÐ2ÑKÔKÐKÐKÐKÐKÐKÐKÐKøð
ð 
ð 
s   ÁBr€   c                 óX   — | j         st          d¦  «        ‚|                       |¦  «        S )zCalculate number of tokens.rQ   )r-   rR   )rI   r€   s     r8   Úget_num_tokenszAnthropic.get_num_tokens[  s1   € àÔ ð 	MÝÐKÑLÔLÐLØ× Ò  Ñ&Ô&Ð&r:   )NN)rV   rW   rX   rd   rg   r   r   rk   r_   rZ   rm   rw   r
   r   r   r   rˆ   r   r‹   r   rŽ   r   r   r   r   r�   r[   r™   r`   r:   r8   rC   rC   ‘   s±  € € € € € ðð ð2'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ð €^ÑÔð 4ð ¨Dð ð ð ñ Ôðð ð˜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Ô!ð#ð Ð;Ô<ð	#ð
 ð#ð 
ð#ð #ð #ð #ð: %)Ø:>ð	 Fð  Fàð Fð �t˜C”yÔ!ð Fð Ð6Ô7ð	 Fð
 ð Fð 
�/Ô	"ð Fð  Fð  Fð  FðJ %)Ø?Cð	"Lð "Làð"Lð �t˜C”yÔ!ð"Lð Ð;Ô<ð	"Lð
 ð"Lð 
�Ô	'ð"Lð "Lð "Lð "LðH' 3ð '¨3ð 'ð 'ð 'ð 'ð 'ð 'r:   rC   )#rs   ri   Útypingr   r   r   r   r   r   r	   r
   Úlangchain_core.callbacksr   r   Úlangchain_core.language_modelsr   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   Úlangchain_core.prompt_valuesr   Úlangchain_core.pydantic_v1r   r   r   Úlangchain_core.utilsr   r   r   Úlangchain_core.utils.utilsr   r   r   rC   r`   r:   r8   ú<module>r£      sÍ  ðØ 	€	€	€	Ø €€€ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ Gðð ð ð ð ð ð ð ð ð ð
 QÐ PÐ PÐ PÐ PÐ PÐ PÐ Pðoð oð oð oð oÐ(ñ oô oð oðdN'ð N'ð N'ð N'ð N'�Ð%ñ N'ô N'ð N'ð N'ð N'r:   