§
    šŠtjìz  ã                   óœ  — d dl Z d dlZd dlZd dlm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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mZ d d
lm Z  d dl!m"Z"m#Z# dZ$dZ%dZ&dZ'dZ(de)de)fd„Z*de)de)fd„Z+de	e)ef         defd„Z, G d„ d¦  «        Z- G d„ dee¦  «        Z. eddd¬¦  «         G d„ d ee.¦  «        ¦   «         Z/dS )!é    N)ÚABC)	ÚAnyÚAsyncGeneratorÚAsyncIteratorÚDictÚIteratorÚListÚMappingÚOptionalÚTuple)Ú
deprecated)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚLLM)ÚGenerationChunk)Úget_from_dict_or_envÚpre_init)Ú	BaseModelÚ
ConfigDictÚField)Úenforce_stop_tokens)Úget_num_tokens_anthropicÚget_token_ids_anthropiczamazon-bedrock-tracez"amazon-bedrock-guardrailAssessmentz

Human:z

Assistant:zCError: Prompt must alternate between '

Human:' and '

Assistant:'.Ú
input_textÚreturnc                 ó¢   — | }dD ]I}|                      |d|z   ¦  «        }t          d¦  «        D ]}|                      d|z   d|z   ¦  «        }ŒŒJ|S )N)úHuman:ú
Assistant:ú

é   z


)ÚreplaceÚrange)r   Únew_textÚwordÚis       ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/bedrock.pyÚ_add_newlines_before_har'   *   sr   € Ø€HØ(ð Hð HˆØ×#Ò# D¨&°4©-Ñ8Ô8ˆÝ�q‘”ð 	Hð 	HˆAØ×'Ò'¨°4©¸À$¹ÑGÔGˆHˆHð	Hà€Oó    c                 ó  — |                       d¦  «        dk    s0|                      d¦  «        |                      d¦  «        k    rd| v rt          dz   | z   } |                       d¦  «        dk    r
| t          z   } | d t	          d¦  «        …         dk    rd| z   } t          | ¦  «        } d}t          t	          | ¦  «        ¦  «        D ]®}| ||t	          t          ¦  «        z   …         t          k    r.|dz  dk    r|dz  }nt          j        t          d| › �z   ¦  «         | ||t	          t          ¦  «        z   …         t          k    r.|dz  dk    r|dz  }Œ�t          j        t          d| › �z   ¦  «         Œ¯|dz  dk    r
| t          z   } | S )	Nr   r   r   ú r   r    é   z
 Received )
ÚcountÚfindÚHUMAN_PROMPTÚASSISTANT_PROMPTÚlenr'   r"   ÚwarningsÚwarnÚALTERNATION_ERROR)r   r,   r%   s      r&   Ú_human_assistant_formatr4   3   s¤  € Ø×Ò˜Ñ!Ô! QÒ&Ð&Ø�Š˜Ñ!Ô! J§O¢O°LÑ$AÔ$AÒAÐAØ˜JÐ&Ð&å! CÑ'¨*Ñ4ˆ
Ø×Ò˜Ñ%Ô%¨Ò*Ð*ØÕ"2Ñ2ˆ
Ø�/•C˜‘M”M�/Ô" hÒ.Ð.Ø˜jÑ(ˆ
Ý(¨Ñ4Ô4€JØ€Eå•3�z‘?”?Ñ#Ô#ð 
Mð 
MˆØ�a˜!�c¥,Ñ/Ô/Ñ/Ð/Ô0µLÒ@Ð@Ø�q‰y˜AŠ~ˆ~Ø˜‘
��å”Õ/Ð2K¸zÐ2KÐ2KÑKÑLÔLÐLØ�a˜!�cÕ"2Ñ3Ô3Ñ3Ð3Ô4Õ8HÒHÐHØ�q‰y˜AŠ~ˆ~Ø˜‘
��å”Õ/Ð2K¸zÐ2KÐ2KÑKÑLÔLÐLøàˆq�y�A‚~€~ØÕ"2Ñ2ˆ
àÐr(   Ústream_responsec           	      ó°   — | d         st          d¬¦  «        S t          | d         d         t          |                      dd¦  «        ¬¦  «        ¬¦  «        S )	z0Convert a stream response to a generation chunk.ÚdeltaÚ ©Útextr:   Ústop_reasonN)Úfinish_reason©r:   Úgeneration_info)r   ÚdictÚget)r5   s    r&   Ú$_stream_response_to_generation_chunkrA   R   sk   € ð ˜7Ô#ð (Ý BÐ'Ñ'Ô'Ð'ÝØ˜WÔ% fÔ-ÝØ)×-Ò-¨m¸TÑBÔBð
ñ 
ô 
ðñ ô ð r(   c                   ót  — e Zd ZdZddddddœZe	 	 	 dd	ed
eeef         de	e         de	e         de	e
e                  deeef         fd„¦   «         Zed	ededefd„¦   «         Ze	 	 dd	edede	e
e                  dedee         f
d„¦   «         Ze	 dd	edede	e
e                  dee         fd„¦   «         ZdS )ÚLLMInputOutputAdapterz»Adapter class to prepare the inputs from Langchain to a format
    that LLM model expects.

    It also provides helper function to extract
    the generated text from the model response.Ú
completionÚ
outputTextr:   Ú
generationÚoutputs)Ú	anthropicÚamazonÚcohereÚmetaÚmistralNÚproviderÚmodel_kwargsÚpromptÚsystemÚmessagesr   c                 óî   — i |¥}|dk    r:|rd|d<   ||d<   |r||d<   d|vrd|d<   |rt          |¦  «        |d<   d	|vrd|d	<   n0|d
v r||d<   n&|dk    rt          ¦   «         }||d<   i |¥|d<   n||d<   |S )NrH   zbedrock-2023-05-31Úanthropic_versionrQ   rP   Ú
max_tokensi   rO   Úmax_tokens_to_sample)Úai21rJ   rK   rL   rI   Ú	inputTextÚtextGenerationConfig)r4   r?   )ÚclsrM   rN   rO   rP   rQ   Ú
input_bodys          r&   Úprepare_inputz#LLMInputOutputAdapter.prepare_inputo   sè   € ð &˜Ð%ˆ
Ø�{Ò"Ð"Øð 4Ø2F�
Ð.Ñ/Ø)1�
˜:Ñ&Øð 2Ø+1�J˜xÑ(Ø zÐ1Ð1Ø/3�J˜|Ñ,Øð >Ý'>¸vÑ'FÔ'F�
˜8Ñ$Ø)°Ð;Ð;Ø9=�JÐ5Ñ6øØÐ>Ð>Ð>Ø#)ˆJ�xÑ Ð Ø˜Ò!Ð!Ý™œˆJØ&,ˆJ�{Ñ#Ø1A°LÐ1AˆJÐ-Ñ.Ð.à&,ˆJ�{Ñ#àÐr(   Úresponsec                 ó®  — d}|dk    rœt          j        |                     d¦  «                             ¦   «                              ¦   «         ¦  «        }d|v r|                     d¦  «        }�nkd|v r0|                     d¦  «        }|d                              d¦  «        }�n5t          j        |                     d¦  «                             ¦   «         ¦  «        }|dk    rB|                     d	¦  «        d                              d
¦  «                             d¦  «        }n´|dk    r/|                     d¦  «        d                              d¦  «        }n|dk    r|                     d¦  «        }nc|dk    r/|                     d¦  «        d                              d¦  «        }n.|                     d¦  «        d                              d¦  «        }|                     di ¦  «                             di ¦  «        }t          |                     dd¦  «        ¦  «        }t          |                     dd¦  «        ¦  «        }||||||z   dœdœS )Nr8   rH   ÚbodyrD   Úcontentr   r:   rV   ÚcompletionsÚdatarJ   ÚgenerationsrK   rF   rL   rG   ÚresultsrE   ÚResponseMetadataÚHTTPHeadersz x-amzn-bedrock-input-token-countz!x-amzn-bedrock-output-token-count)Úprompt_tokensÚcompletion_tokensÚtotal_tokens)r:   r^   Úusage)ÚjsonÚloadsr@   ÚreadÚdecodeÚint)	rY   rM   r\   r:   Úresponse_bodyr_   Úheadersrf   rg   s	            r&   Úprepare_outputz$LLMInputOutputAdapter.prepare_output�   s9  € àˆØ�{Ò"Ð"Ý œJ x§|¢|°FÑ';Ô';×'@Ò'@Ñ'BÔ'B×'IÒ'IÑ'KÔ'KÑLÔLˆMØ˜}Ð,Ð,Ø$×(Ò(¨Ñ6Ô6�‘Ø˜mÐ+Ð+Ø'×+Ò+¨IÑ6Ô6�Ø˜q”z—~’~ fÑ-Ô-�ùå œJ x§|¢|°FÑ';Ô';×'@Ò'@Ñ'BÔ'BÑCÔCˆMà˜6Ò!Ð!Ø$×(Ò(¨Ñ7Ô7¸Ô:×>Ò>¸vÑFÔF×JÒJÈ6ÑRÔR��Ø˜XÒ%Ð%Ø$×(Ò(¨Ñ7Ô7¸Ô:×>Ò>¸vÑFÔF��Ø˜VÒ#Ð#Ø$×(Ò(¨Ñ6Ô6��Ø˜YÒ&Ð&Ø$×(Ò(¨Ñ3Ô3°AÔ6×:Ò:¸6ÑBÔB��à$×(Ò(¨Ñ3Ô3°AÔ6×:Ò:¸<ÑHÔH�à—,’,Ð1°2Ñ6Ô6×:Ò:¸=È"ÑMÔMˆÝ˜GŸKšKÐ(JÈAÑNÔNÑOÔOˆÝ §¢Ð,OÐQRÑ SÔ SÑTÔTÐàØ!à!.Ø%6Ø -Ð0AÑ Aðð ð
ð 
ð 	
r(   FÚstopÚmessages_apic              #   ó’  K  — |                      d¦  «        }|sd S |rd}n| j                              |d¦  «        }|st          d|› �¦  «        ‚|D �]s}|                      d¦  «        }|sŒt          j        |                      d¦  «                             ¦   «         ¦  «        }	|dk    r|	d         s|	|         d	k    r d S |d
k    r8|	                      |i g¦  «        d                               dd¦  «        dk    r d S |r|	                      d¦  «        dk    r d S |rG|	                      d¦  «        dv r0|	                      d¦  «        dk    rt          |	¦  «        }
|
V — �Œ�Œt          |d
k    r|	|         n|	|         d         d         t          t          |	v r|	                      t          ¦  «        nd i¬¦  «        V — �Œud S )Nr^   Úmessager8   ú4Unknown streaming response output key for provider: ÚchunkÚbytesrJ   Úis_finishedú<EOS_TOKEN>rL   r   r;   rr   ÚtypeÚcontent_block_stop)Úmessage_startÚcontent_block_startÚcontent_block_deltar   r:   r=   )	r@   Úprovider_to_output_key_mapÚ
ValueErrorrj   rk   rm   rA   r   ÚGUARDRAILS_BODY_KEY)rY   rM   r\   rr   rs   ÚstreamÚ
output_keyÚeventrw   Ú	chunk_objÚchks              r&   Úprepare_output_streamz+LLMInputOutputAdapter.prepare_output_streamµ   sG  è è € ð —’˜fÑ%Ô%ˆàð 	ØˆFàð 	JØ"ˆJˆJàÔ7×;Ò;¸HÀbÑIÔIˆJàð 	ÝØQÀxÐQÐQñô ð ð ð .	ñ .	ˆEØ—I’I˜gÑ&Ô&ˆEØð Øåœ
 5§9¢9¨WÑ#5Ô#5×#<Ò#<Ñ#>Ô#>Ñ?Ô?ˆIà˜8Ò#Ð#Ø˜-Ô(ð $Ø,5°jÔ,AÀ]Ò,RÐ,Rà��ð ˜IÒ%Ð%Ø—M’M *¨r¨dÑ3Ô3°AÔ6×:Ò:¸=È"ÑMÔMÐQWÒWÐWà��àð  9§=¢=°Ñ#8Ô#8Ð<PÒ#PÐ#PØ��àð  	§¢¨fÑ 5Ô 5ð :ð !ð !ð
 —=’= Ñ(Ô(Ð,AÒAÐAÝ>¸yÑIÔI�CØ�I�I�I‘Iáõ &ð $ yÒ0Ð0ð " *Ô-Ð-à& zÔ2°1Ô5°fÔ=õ ,å2°iÐ?Ð?ð &ŸMšMÕ*=Ñ>Ô>Ð>à!%ð	%ðñ ô ð ð ð ñ ðC.	ð .	r(   c                ób  K  — |                      d¦  «        }|sd S | j                              |d ¦  «        }|st          d|› �¦  «        ‚|D ]á}|                      d¦  «        }|sŒt          j        |                      d¦  «                             ¦   «         ¦  «        }|dk    r|d         s||         dk    r d S |dk    r8|                      |i g¦  «        d	                               d
d¦  «        dk    r d S t          |dk    r||         n||         d	         d         ¬¦  «        W V — Œâd S )Nr^   rv   rw   rx   rJ   ry   rz   rL   r   r;   r8   rr   r:   r9   )r@   r€   r�   rj   rk   rm   r   )	rY   rM   r\   rr   rƒ   r„   r…   rw   r†   s	            r&   Úaprepare_output_streamz,LLMInputOutputAdapter.aprepare_output_streamü   sŒ  è è € ð —’˜fÑ%Ô%ˆàð 	ØˆFàÔ3×7Ò7¸À$ÑGÔGˆ
àð 	ÝØQÀxÐQÐQñô ð ð ð 	ð 	ˆEØ—I’I˜gÑ&Ô&ˆEØð Øåœ
 5§9¢9¨WÑ#5Ô#5×#<Ò#<Ñ#>Ô#>Ñ?Ô?ˆIà˜8Ò#Ð#Ø˜-Ô(ð $Ø,5°jÔ,AÀ]Ò,RÐ,Rà��ð ˜IÒ%Ð%Ø—M’M *¨r¨dÑ3Ô3°AÔ6×:Ò:¸=È"ÑMÔMÐQWÒWÐWà��å!ð   9Ò,Ð,ð ˜jÔ)Ð)à" :Ô.¨qÔ1°&Ô9ð	ñ ô ð ð ð ð ð ð%	ð 	r(   )NNN)NF©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r€   ÚclassmethodÚstrr   r   r   r	   r[   r?   rq   Úboolr   r   rˆ   r   rŠ   © r(   r&   rC   rC   `   sÊ  € € € € € ð3ð 3ð "ØØØØð"ð "Ðð ð
 !%Ø $Ø)-ðð àðð ˜3 ˜8”nðð ˜”ð	ð
 ˜”ðð ˜4 œ:Ô&ðð 
ˆc�3ˆhŒðð ð ñ „[ðð@ ð"
 cð "
°Sð "
¸Tð "
ð "
ð "
ñ „[ð"
ðH ð
 %)Ø"ðDð DàðDð ðDð �t˜C”yÔ!ð	Dð
 ðDð 
�/Ô	"ðDð Dð Dñ „[ðDðL àGKð'ð 'Øð'Ø&)ð'Ø19¸$¸s¼)Ô1Dð'à	�Ô	'ð'ð 'ð 'ñ „[ð'ð 'ð 'r(   rC   c                   óÌ  — e Zd ZU dZ ed¬¦  «        Z ed¬¦  «        Zee	d<   dZ
ee         e	d<   	  edd¬	¦  «        Zee         e	d
<   	 dZee	d<   	 dZee         e	d<   	 ee	d<   	 dZee         e	d<   	 dZee         e	d<   	 dZee	d<   	 ddddddœZeeef         e	d<   ddddœZeeeef                  e	d<   	 ededefd„¦   «         Zedeeef         fd„¦   «         Zdefd„Zedefd„¦   «         Zedefd„¦   «         Zdeeef         fd „Z	 	 	 	 	 d,d!ee         d"ee         d#ee e                  dee e                  d$ee!         d%ede"eeeef         f         fd&„Z#d'e$de$fd(„Z%d'e$defd)„Z&	 	 	 	 	 d,d!ee         d"ee         d#ee 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S ).ÚBedrockBasezBase class for Bedrock models.r“   )Úprotected_namespacesT)ÚexcludeÚclientNÚregion_name)Údefaultr—   Úcredentials_profile_nameÚconfigrM   Úmodel_idrN   Úendpoint_urlFÚ	streamingÚstop_sequencesÚstopSequencesrr   )rH   rI   rV   rJ   rL   Ú#provider_stop_sequence_key_name_map)ÚidÚversionÚtraceÚ
guardrailsÚvaluesr   c                 ó6  — |                      d¦  «        �|S 	 ddl}|d         �|                     |d         ¬¦  «        }n|                     ¦   «         }t          |dd|j        ¬¦  «        |d<   i }|d         r|d         |d<   |d	         r|d	         |d	<   |d
         r|d
         |d
<    |j        di |¤Ž|d<   n\# t          $ r t          d¦  «        ‚t          $ r}t          d|› �¦  «        ‚d}~wt          $ r}t          d|› �¦  «        |‚d}~ww xY w|S )zJValidate that AWS credentials to and python package exists in environment.r˜   Nr   r›   )Úprofile_namer™   ÚAWS_DEFAULT_REGION)rš   rž   rœ   úbedrock-runtimezRCould not import boto3 python package. Please install it with `pip install boto3`.ú!Error raised by bedrock service: z’Could not load credentials to authenticate with AWS client. Please check that credentials in the specified profile name are valid. Bedrock error: )r«   )	r@   Úboto3ÚSessionr   r™   r˜   ÚImportErrorr�   Ú	Exception)rY   r§   r­   ÚsessionÚclient_paramsÚes         r&   Úvalidate_environmentz BedrockBase.validate_environmentŠ  s­  € ð
 �:Š:�hÑÔÐ+ØˆMð&	ØˆLˆLˆLàÐ0Ô1Ð=ØŸ-š-°VÐ<VÔ5W˜-ÑXÔX��ð  Ÿ-š-™/œ/�å$8ØØØ$ØÔ+ð	%ñ %ô %ˆF�=Ñ!ð ˆMØ�mÔ$ð EØ/5°mÔ/D�˜mÑ,Ø�nÔ%ð GØ06°~Ô0F�˜nÑ-Ø�hÔð ;Ø*0°Ô*:�˜hÑ'à-˜wœ~ÐQÐQÀ=ÐQÐQˆF�8ÑÐøåð 	ð 	ð 	Ýð>ñô ð õ ð 	Fð 	Fð 	FÝÐDÀÐDÐDÑEÔEÐEøøøøÝð 	ð 	ð 	Ýð>à:;ð>ð >ñô ð ð	øøøøð	øøøð ˆs$   ™B#B= Â="DÃC1Ã1DÃ>DÄDc                 ó    — | j         pi }i d|i¥S )zGet the identifying parameters.rN   )rN   )ÚselfÚ_model_kwargss     r&   Ú_identifying_paramszBedrockBase._identifying_params¼  s(   € ð Ô)Ð/¨Rˆð
Ø˜}Ð-ð
ð 	
r(   c                 ó°   — | j         r| j         S | j                             d¦  «        rt          d¦  «        ‚| j                             d¦  «        d         S )NÚarnzFModel provider should be supplied when passing a model ARN as model_idú.r   )rM   r�   Ú
startswithr�   Úsplit©r¶   s    r&   Ú_get_providerzBedrockBase._get_providerÄ  s^   € ØŒ=ð 	!Ø”=Ð ØŒ=×#Ò# EÑ*Ô*ð 	ÝØXñô ð ð Œ}×"Ò" 3Ñ'Ô'¨Ô*Ð*r(   c                 ó2   — |                       ¦   «         dk    S )NrH   )r¿   r¾   s    r&   Ú_model_is_anthropiczBedrockBase._model_is_anthropicÎ  s   € à×!Ò!Ñ#Ô# {Ò2Ð2r(   c                 óä   — 	 t          | j        t          ¦  «        o3t          | j        d         ¦  «        ot          | j        d         ¦  «        S # t          $ r}t          d¦  «        |‚d}~ww xY w)aŒ  
        Determines if guardrails are enabled and correctly configured.
        Checks if 'guardrails' is a dictionary with non-empty 'id' and 'version' keys.
        Checks if 'guardrails.trace' is true.

        Returns:
            bool: True if guardrails are correctly configured, False otherwise.
        Raises:
            TypeError: If 'guardrails' lacks 'id' or 'version' keys.
        r£   r¤   z=Guardrails must be a dictionary with 'id' and 'version' keys.N)Ú
isinstancer¦   r?   r’   ÚKeyErrorÚ	TypeError)r¶   r³   s     r&   Ú_guardrails_enabledzBedrockBase._guardrails_enabledÒ  s‚   € ð
	å˜4œ?­DÑ1Ô1ð 5Ý˜œ¨Ô.Ñ/Ô/ð5å˜œ¨Ô3Ñ4Ô4ðøõ ð 	ð 	ð 	ÝØOñô àðøøøøð	øøøs   ‚AA Á
A/ÁA*Á*A/c                 óp   — d| j                              d¦  «        | j                              d¦  «        dœiS )zÿ
        The canonical way to pass in guardrails to the bedrock service
        adheres to the following format:

        "amazon-bedrock-guardrailDetails": {
            "guardrailId": "string",
            "guardrailVersion": "string"
        }
        zamazon-bedrock-guardrailDetailsr£   r¤   )ÚguardrailIdÚguardrailVersion)r¦   r@   r¾   s    r&   Ú_get_guardrails_canonicalz%BedrockBase._get_guardrails_canonicalê  sA   € ð .Ø#œ×2Ò2°4Ñ8Ô8Ø$(¤O×$7Ò$7¸	Ñ$BÔ$Bð0ð 0ð
ð 	
r(   rO   rP   rQ   Úrun_managerÚkwargsc                 ó8  — | j         pi }|                      ¦   «         }i |¥|¥}	| j        r'|	                     |                      ¦   «         ¦  «         t
                               ||	|||¬¦  «        }
t          j        |
¦  «        }d}d}|| j	        ||dœ}| j        r$d|d<   | j
                             d¦  «        rd|d<   	  | j        j        d
i |¤Ž}t
                               ||¦  «                             ¦   «         \  }}}n$# t           $ r}t#          d|› �¦  «        ‚d }~ww xY w|�t%          ||¦  «        }|                      |¦  «        }|                     d¦  «        r3|�1 |j        t!          d|                     d	¦  «        › �¦  «        fi |¤Ž ||fS )N)rM   rN   rO   rP   rQ   úapplication/json©r^   ÚmodelIdÚacceptÚcontentTypeÚENABLEDÚ	guardrailr¥   r¬   ÚsignalÚreasonr“   )rN   r¿   rÆ   ÚupdaterÊ   rC   r[   rj   Údumpsr�   r¦   r@   r˜   Úinvoke_modelrq   r§   r°   r�   r   Ú_get_bedrock_services_signalÚon_llm_error)r¶   rO   rP   rQ   rr   rË   rÌ   r·   rM   ÚparamsrZ   r^   rÑ   rÒ   Úrequest_optionsr\   r:   Ú
usage_infor³   Úservices_traces                       r&   Ú_prepare_input_and_invokez%BedrockBase._prepare_input_and_invokeû  s  € ð Ô)Ð/¨Rˆà×%Ò%Ñ'Ô'ˆØ,�MÐ, VÐ,ˆØÔ#ð 	<Ø�MŠM˜$×8Ò8Ñ:Ô:Ñ;Ô;Ð;Ý*×8Ò8ØØØØØð 9ñ 
ô 
ˆ
õ Œz˜*Ñ%Ô%ˆØ#ˆØ(ˆð Ø”}ØØ&ð	
ð 
ˆð Ô#ð 	5Ø+4ˆO˜KÑ(ØŒ×"Ò" 7Ñ+Ô+ð 5Ø+4� Ñ(ð	FØ/�t”{Ô/ÐBÐB°/ÐBÐBˆHå%:×%IÒ%IØ˜(ñ&ô &çŠf‰hŒhñ #ˆD�$˜
˜
øõ ð 	Fð 	Fð 	FÝÐDÀÐDÐDÑEÔEÐEøøøøð	Føøøð ÐÝ& t¨TÑ2Ô2ˆDð
 ×:Ò:¸4Ñ@Ô@ˆà×Ò˜hÑ'Ô'ð 	¨KÐ,CØ$ˆKÔ$ÝØV¸×8JÒ8JÈ8Ñ8TÔ8TÐVÐVñô ðð ð !ð	ð ð ð �ZÐÐs   ÃAD Ä
D&ÄD!Ä!D&r^   c                 ó¶   — | j         rM| j                             d¦  «        r3|                      |¦  «        rdd|                     t          ¦  «        dœS ddddœS )ak  
        This function checks the response body for an interrupt flag or message that indicates
        whether any of the Bedrock services have intervened in the processing flow. It is
        primarily used to identify modifications or interruptions imposed by these services
        during the request-response cycle with a Large Language Model (LLM).
        r¥   TÚGUARDRAIL_INTERVENED)rÕ   rÖ   r¥   FN)rÆ   r¦   r@   Ú_is_guardrails_interventionÚAMAZON_BEDROCK_TRACE_KEY©r¶   r^   s     r&   rÚ   z(BedrockBase._get_bedrock_services_signal=  s€   € ð Ô$ð		à”×#Ò# GÑ,Ô,ð		ð ×0Ò0°Ñ6Ô6ð		ð Ø0ØŸšÕ":Ñ;Ô;ðð ð ð ØØð
ð 
ð 	
r(   c                 ó>   — |                      t          ¦  «        dk    S )Nrâ   )r@   r‚   rå   s     r&   rã   z'BedrockBase._is_guardrails_interventionV  s   € Ø�xŠxÕ+Ñ,Ô,Ð0FÒFÐFr(   c              +   ó<  K  — | j         pi }|                      ¦   «         }|r9|| j        vrt          d|› d�¦  «        ‚||| j                             |¦  «        <   |dk    rd|d<   i |¥|¥}	| j        r'|	                     |                      ¦   «         ¦  «         t           	                    |||||	¬¦  «        }
t          j        |
¦  «        }|| j        dddœ}| j        r$d	|d
<   | j                             d¦  «        rd	|d<   	  | j        j        di |¤Ž}n$# t           $ r}t          d|› �¦  «        ‚d }~ww xY wt                               ||||rdnd¦  «        D ]>}|                      |j        ¦  «         |�|                     |j        |¬¦  «         |V — Œ?d S )NúStop sequence key name for ú is not supported.rJ   Trƒ   )rM   rO   rP   rQ   rN   rÎ   rÏ   rÓ   rÔ   r¥   r¬   F©rw   r“   )rN   r¿   r¢   r�   r@   rÆ   r×   rÊ   rC   r[   rj   rØ   r�   r¦   r˜   Ú!invoke_model_with_response_streamr°   rˆ   rÚ   r>   Úon_llm_new_tokenr:   )r¶   rO   rP   rQ   rr   rË   rÌ   r·   rM   rÜ   rZ   r^   rÝ   r\   r³   rw   s                   r&   Ú _prepare_input_and_invoke_streamz,BedrockBase._prepare_input_and_invoke_streamY  s6  è è € ð Ô)Ð/¨RˆØ×%Ò%Ñ'Ô'ˆàð 	YØ˜tÔGÐGÐGÝ ØN°(ÐNÐNÐNñô ð ð UYˆM˜$ÔB×FÒFÀxÑPÔPÑQà�xÒÐØ&*ˆM˜(Ñ#à,�MÐ, VÐ,ˆàÔ#ð 	<Ø�MŠM˜$×8Ò8Ñ:Ô:Ñ;Ô;Ð;å*×8Ò8ØØØØØð 9ñ 
ô 
ˆ
õ Œz˜*Ñ%Ô%ˆð Ø”}Ø(Ø-ð	
ð 
ˆð Ô#ð 	5Ø+4ˆO˜KÑ(ØŒ×"Ò" 7Ñ+Ô+ð 5Ø+4� Ñ(ð	FØD�t”{ÔDÐWÐWÀÐWÐWˆHˆHøåð 	Fð 	Fð 	FÝÐDÀÐDÐDÑEÔEÐEøøøøð	Føøøõ +×@Ò@Ø�h ¨hÐ&A d d¸Eñ
ô 
ð 	ð 	ˆEð ×-Ò-¨eÔ.CÑDÔDÐDàÐ&Ø×,Ò,¨U¬Z¸uÐ,ÑEÔEÐEØˆKˆKˆKˆKð	ð 	s   ÄD Ä
D9Ä"D4Ä4D9c                ó°  ‡ ‡K  — ‰ j         pi }‰                      ¦   «         }|r9|‰ j        vrt          d|› d�¦  «        ‚||‰ j                             |¦  «        <   |dk    rd|d<   i |¥|¥}t
                               |||¬¦  «        }t          j        |¦  «        Št          j
        ¦   «                              d ˆˆ fd„¦  «        ƒ d {V —†}	t
                               ||	|¦  «        2 3 d {V —†}
|�<t          j        |j        ¦  «        r#|                     |
j        |
¬¦  «        ƒ d {V —† n|�|                     |
j        |
¬¦  «         |
W V — Œi6 d S )	Nrè   ré   rJ   Trƒ   )rM   rO   rN   c                  óJ   •— ‰j                              ‰ ‰j        dd¬¦  «        S )NrÎ   rÏ   )r˜   rë   r�   )r^   r¶   s   €€r&   ú<lambda>z?BedrockBase._aprepare_input_and_invoke_stream.<locals>.<lambda>¸  s-   ø€ �D”K×AÒAØØœØ)Ø.ð	 Bñ ô € r(   rê   )rN   r¿   r¢   r�   r@   rC   r[   rj   rØ   ÚasyncioÚget_running_loopÚrun_in_executorrŠ   Úiscoroutinefunctionrì   r:   )r¶   rO   rr   rË   rÌ   r·   rM   rÜ   rZ   r\   rw   r^   s   `          @r&   Ú!_aprepare_input_and_invoke_streamz-BedrockBase._aprepare_input_and_invoke_streamœ  sü  øøè è € ð Ô)Ð/¨RˆØ×%Ò%Ñ'Ô'ˆàð 	YØ˜tÔGÐGÐGÝ ØN°(ÐNÐNÐNñô ð ð UYˆM˜$ÔB×FÒFÀxÑPÔPÑQà�xÒÐØ&*ˆM˜(Ñ#à,�MÐ, VÐ,ˆÝ*×8Ò8Ø f¸6ð 9ñ 
ô 
ˆ
õ Œz˜*Ñ%Ô%ˆå Ô1Ñ3Ô3×CÒCØðð ð ð ð ñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆõ 1×GÒGØ�h ñ
ô 
ð 		ð 		ð 		ð 		ð 		ð 		ð 		�%ð Ð&­7Ô+FØÔ,ñ,ô ,Ð&ð "×2Ò2°5´:ÀUÐ2ÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKØÐ(Ø×,Ò,¨U¬Z¸uÐ,ÑEÔEÐEØˆKˆKˆKˆKˆKð
ð 
ð 
s   Ã,E)NNNNN©NN)-rŒ   r�   rŽ   r�   r   Úmodel_configr   r˜   r   Ú__annotations__r™   r   r‘   r›   rœ   rM   rN   r   rž   rŸ   r’   r¢   r
   r¦   r   r´   Úpropertyr¸   r¿   rÁ   rÆ   rÊ   r	   r   r   rà   r?   rÚ   rã   r   r   rí   r   r   rõ   r“   r(   r&   r•   r•   '  sk  € € € € € € Ø(Ð(à�:°2Ð6Ñ6Ô6€Là�% Ð%Ñ%Ô%€FˆCÐ%Ð%Ñ%à!%€K�˜#”Ð%Ð%Ñ%ðð /4¨e¸DÈ$Ð.OÑ.OÔ.OÐ˜h sœmÐOÐOÑOðð €FˆCÐÐÑØLà"€Hˆh�sŒmÐ"Ð"Ñ"ðð €M€M�Mð5ð $(€L�(˜4”.Ð'Ð'Ñ'Ø1à"&€L�(˜3”-Ð&Ð&Ñ&ØCà€IˆtÐÐÑØ(ð &Ø!Ø Ø"Øð>ð >Ð'¨°°c°Ô):ð ð ñ ð ØØð/ð /€J�˜  c Ô*Ô+ð ð ñ ð
(ðT ð/¨$ð /°4ð /ð /ð /ñ „Xð/ðb ð
 W¨S°#¨XÔ%6ð 
ð 
ð 
ñ „Xð
ð+˜sð +ð +ð +ð +ð ð3 Tð 3ð 3ð 3ñ „Xð3ð ð Tð ð ð ñ „Xðð.
¨4°°S°¬>ð 
ð 
ð 
ð 
ð& !%Ø $Ø)-Ø$(Ø:>ð@ ð @ à˜”ð@ ð ˜”ð@ ð ˜4 œ:Ô&ð	@ ð
 �t˜C”yÔ!ð@ ð Ð6Ô7ð@ ð ð@ ð 
ˆs�D˜˜c˜”NÐ"Ô	#ð@ ð @ ð @ ð @ ðD
°ð 
¸$ð 
ð 
ð 
ð 
ð2G°ð G¸ð Gð Gð Gð Gð
 !%Ø $Ø)-Ø$(Ø:>ðAð Aà˜”ðAð ˜”ðAð ˜4 œ:Ô&ð	Að
 �t˜C”yÔ!ðAð Ð6Ô7ðAð ðAð 
�/Ô	"ðAð Að Að AðL %)Ø?Cð	-ð -àð-ð �t˜C”yÔ!ð-ð Ð;Ô<ð	-ð
 ð-ð 
�Ô	'ð-ð -ð -ð -ð -ð -r(   r•   z0.0.34z1.0zlangchain_aws.BedrockLLM)ÚsinceÚremovalÚalternative_importc                   óJ  ‡ — e Zd ZdZ	 ededefˆ fd„¦   «         Zedefd„¦   «         Z	e
defd„¦   «         Ze
dee         fd„¦   «         Zedeeef         fd„¦   «         Z e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f
d„Z	 	 ddedeee                  dee         dedeedf         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ˆ fd„Zdedee         fˆ fd„Zˆ xZ S )ÚBedrockaÍ  Bedrock models.

    To authenticate, the AWS client uses the following methods to
    automatically load credentials:
    https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html

    If a specific credential profile should be used, you must pass
    the name of the profile from the ~/.aws/credentials file that is to be used.

    Make sure the credentials / roles used have the required policies to
    access the Bedrock service.
    r§   r   c                 óž   •— |d         }|                      d¦  «        rt          d¦  «        ‚t          ¦   «                              |¦  «        S )Nr�   zanthropic.claude-3z|Claude v3 models are not supported by this LLM.Please use `from langchain_community.chat_models import BedrockChat` instead.)r¼   r�   Úsuperr´   )rY   r§   r�   Ú	__class__s      €r&   r´   zBedrock.validate_environmentë  sU   ø€ à˜*Ô%ˆØ×ÒÐ3Ñ4Ô4ð 	Ýðñô ð õ
 ‰wŒw×+Ò+¨FÑ3Ô3Ð3r(   c                 ó   — dS )zReturn type of llm.Úamazon_bedrockr“   r¾   s    r&   Ú	_llm_typezBedrock._llm_typeö  s
   € ð  Ðr(   c                 ó   — dS )z9Return whether this model can be serialized by Langchain.Tr“   ©rY   s    r&   Úis_lc_serializablezBedrock.is_lc_serializableû  s	   € ð ˆtr(   c                 ó
   — g d¢S )z*Get the namespace of the langchain object.)Ú	langchainÚllmsÚbedrockr“   r  s    r&   Úget_lc_namespacezBedrock.get_lc_namespace   s   € ð 0Ð/Ð/Ð/r(   c                 ó,   — i }| j         r
| j         |d<   |S )Nr™   )r™   )r¶   Ú
attributess     r&   Úlc_attributeszBedrock.lc_attributes  s%   € à%'ˆ
àÔð 	9Ø(,Ô(8ˆJ�}Ñ%àÐr(   Úforbid)ÚextraNrO   rr   rË   rÌ   c                 ó$   —  | j         d|||dœ|¤ŽS )a�  Call out to Bedrock service with streaming.

        Args:
            prompt (str): The prompt to pass into the model
            stop (Optional[List[str]], optional): Stop sequences. These will
                override any stop sequences in the `model_kwargs` attribute.
                Defaults to None.
            run_manager (Optional[CallbackManagerForLLMRun], optional): Callback
                run managers used to process the output. Defaults to None.

        Returns:
            Iterator[GenerationChunk]: Generator that yields the streamed responses.

        Yields:
            Iterator[GenerationChunk]: Responses from the model.
        ©rO   rr   rË   r“   )rí   )r¶   rO   rr   rË   rÌ   s        r&   Ú_streamzBedrock._stream  s4   € ð. 5ˆtÔ4ð 
Ø °+ð
ð 
ØAGð
ð 
ð 	
r(   c                 ó€   — | j         r"d} | j        d|||dœ|¤ŽD ]}||j        z  }Œ|S  | j        d|||dœ|¤Ž\  }}|S )ag  Call out to Bedrock service model.

        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

                response = llm.invoke("Tell me a joke.")
        r8   r  r“   )rŸ   r  r:   rà   )	r¶   rO   rr   rË   rÌ   rD   rw   r:   Ú_s	            r&   Ú_callzBedrock._call-  s—   € ð, Œ>ð 	ØˆJØ%˜œð Ø D°kðð ØEKðð ð )ð )�ð ˜eœjÑ(�
�
ØÐà0�$Ô0ð 
Ø °+ð
ð 
ØAGð
ð 
‰ˆˆað ˆr(   c                óH   K  —  | j         d|||dœ|¤Ž2 3 d{V —†}|W V — Œ6 dS )ad  Call out to Bedrock service with streaming.

        Args:
            prompt (str): The prompt to pass into the model
            stop (Optional[List[str]], optional): Stop sequences. These will
                override any stop sequences in the `model_kwargs` attribute.
                Defaults to None.
            run_manager (Optional[CallbackManagerForLLMRun], optional): Callback
                run managers used to process the output. Defaults to None.

        Yields:
            AsyncGenerator[GenerationChunk, None]: Generator that asynchronously yields
            the streamed responses.
        r  Nr“   )rõ   )r¶   rO   rr   rË   rÌ   rw   s         r&   Ú_astreamzBedrock._astreamP  sw   è è € ð* B˜4ÔAð 
Ø °+ð
ð 
ØAGð
ð 
ð 	ð 	ð 	ð 	ð 	ð 	ð 	�%ð ˆKˆKˆKˆKˆKð
ð 
ð 
s   ”!c              ‹   óž   K  — | j         st          d¦  «        ‚d„  | j        d|||dœ|¤Ž2 ¦   «         ƒ d{V —†}d                     |¦  «        S )am  Call out to Bedrock service model.

        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

                response = await llm._acall("Tell me a joke.")
        z4Streaming must be set to True for async operations. c              “   ó.   K  — g | 3 d {V —†	 }|j         ‘Œ6 S r‹   r9   )Ú.0rw   s     r&   ú
<listcomp>z"Bedrock._acall.<locals>.<listcomp>ƒ  sQ   è è € ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
àð ŒJð
ð 
ð 
ð 
s   …r  Nr8   r“   )rŸ   r�   r  Újoin)r¶   rO   rr   rË   rÌ   Úchunkss         r&   Ú_acallzBedrock._acallj  s—   è è € ð, Œ~ð 	UÝÐSÑTÔTÐTð
ð 
à,˜tœ}ð  Ø D°kð ð  ØEKð ð  ð
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð �wŠw�v‰ŒÐr(   r:   c                 ór   •— | j         rt          |¦  «        S t          ¦   «                              |¦  «        S r‹   )rÁ   r   r   Úget_num_tokens©r¶   r:   r  s     €r&   r"  zBedrock.get_num_tokens‹  s4   ø€ ØÔ#ð 	0Ý+¨DÑ1Ô1Ð1å‘7”7×)Ò)¨$Ñ/Ô/Ð/r(   c                 ór   •— | j         rt          |¦  «        S t          ¦   «                              |¦  «        S r‹   )rÁ   r   r   Úget_token_idsr#  s     €r&   r%  zBedrock.get_token_ids‘  s4   ø€ ØÔ#ð 	/Ý*¨4Ñ0Ô0Ð0å‘7”7×(Ò(¨Ñ.Ô.Ð.r(   rö   )!rŒ   r�   rŽ   r�   r   r   r´   rù   r‘   r  r�   r’   r  r	   r  r   r  r   r÷   r   r   r   r   r  r  r   r   r  r   rn   r"  r%  Ú__classcell__)r  s   @r&   rþ   rþ   Ì  s  ø€ € € € € ðð ðð ð4¨$ð 4°4ð 4ð 4ð 4ð 4ð 4ñ „Xð4ð ð ˜3ð  ð  ð  ñ „Xð ð ð 4ð ð ð ñ „[ðð ð0  c¤ð 0ð 0ð 0ñ „[ð0ð ð˜t C¨ Hœ~ð ð ð ñ „Xðð �:Øðñ ô €Lð %)Ø:>ð	
ð 
àð
ð �t˜C”yÔ!ð
ð Ð6Ô7ð	
ð
 ð
ð 
�/Ô	"ð
ð 
ð 
ð 
ð< %)Ø:>ð	!ð !àð!ð �t˜C”yÔ!ð!ð Ð6Ô7ð	!ð
 ð!ð 
ð!ð !ð !ð !ðL %)Ø?Cð	ð àðð �t˜C”yÔ!ðð Ð;Ô<ð	ð
 ðð 
˜¨Ð-Ô	.ðð ð ð ð: %)Ø?Cð	ð àðð �t˜C”yÔ!ðð Ð;Ô<ð	ð
 ðð 
ðð ð ð ðB0 3ð 0¨3ð 0ð 0ð 0ð 0ð 0ð 0ð/ #ð /¨$¨s¬)ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /r(   rþ   )0rñ   rj   r1   Úabcr   Útypingr   r   r   r   r   r	   r
   r   r   Úlangchain_core._api.deprecationr   Úlangchain_core.callbacksr   r   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   Úlangchain_core.utilsr   r   Úpydanticr   r   r   Úlangchain_community.llms.utilsr   Ú'langchain_community.utilities.anthropicr   r   rä   r‚   r.   r/   r3   r‘   r'   r4   rA   rC   r•   rþ   r“   r(   r&   ú<module>r1     sÑ  ðØ €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 7Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à >Ð >Ð >Ð >Ð >Ð >ðð ð ð ð ð ð ð ð
 2Ð Ø:Ð Ø€Ø#Ð àMð ð
¨ð °ð ð ð ð ð¨ð °ð ð ð ð ð>Ø˜#˜s˜(”^ðàðð ð ð ðDð Dð Dð Dð Dñ Dô Dð DðNbð bð bð bð b�)˜Sñ bô bð bðJ €Ø
˜EÐ6Pðñ ô ðF/ð F/ð F/ð F/ð F/ˆc�;ñ F/ô F/ñô ðF/ð F/ð F/r(   