Ë
    µŒj›*  ã                   óŽ  — 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
 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mZmZ d dlmZ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& dede'fd„Z(dee   de'fd„Z)de'defd„Z*dee   de	ee'   ee   f   fd„Z+ G d„ d«      Z,ddddddœZ- eddd¬«       G d„ d ee#«      «       Z.y)!é    N)Údefaultdict)ÚAnyÚDictÚIteratorÚListÚOptionalÚTupleÚUnion)Ú
deprecated)ÚCallbackManagerForLLMRun)ÚBaseChatModel)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚChatMessageÚHumanMessageÚSystemMessage)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)Ú
ConfigDict)Ú$convert_messages_to_prompt_anthropic)Ú convert_messages_to_prompt_llama)ÚBedrockBase)Úget_num_tokens_anthropicÚget_token_ids_anthropicÚmessageÚreturnc                 ó\  — t        | t        «      r,d| j                  j                  «       › d| j                  › �}|S t        | t
        «      rd| j                  › d�}|S t        | t        «      r| j                  › }|S t        | t        «      rd| j                  › d�}|S t        d| › �«      ‚)Nz

z: z[INST] z [/INST]z<<SYS>> z	 <</SYS>>zGot unknown type )	Ú
isinstancer   ÚroleÚ
capitalizeÚcontentr   r   r   Ú
ValueError)r   Úmessage_texts     úq/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/bedrock.pyÚ$_convert_one_message_to_text_mistralr'       s¼   € Ü�'œ;Ô'Ø˜gŸl™l×5Ñ5Ó7Ð8¸¸7¿?¹?Ð:KÐLˆð Ðô 
�Gœ\Ô	*Ø  §¡Ð 1°Ð:ˆð Ðô 
�GœYÔ	'Ø!Ÿ/™/Ð*ˆð
 Ðô	 
�Gœ]Ô	+Ø! '§/¡/Ð!2°)Ð<ˆð Ðô Ð,¨W¨IÐ6Ó7Ð7ó    Úmessagesc                 ó\   — dj                  | D �cg c]  }t        |«      ‘Œ c}«      S c c}w )z3Convert a list of messages to a prompt for mistral.Ú
)Újoinr'   )r)   r   s     r&   Ú"convert_messages_to_prompt_mistralr-   .   s.   € à�9‰9ÙFNÓOÁh¸7Ô	-¨gÕ	6ÀhÑOóð ùÚOs   �)Ú	image_urlc                 ó”   — d}t        j                  || «      }|€t        d«      ‚d|j                  d«      |j                  d«      dœS )a  
    Formats an image of format data:image/jpeg;base64,{b64_string}
    to a dict for anthropic api

    {
      "type": "base64",
      "media_type": "image/jpeg",
      "data": "/9j/4AAQSkZJRg...",
    }

    And throws an error if it's not a b64 image
    z3^data:(?P<media_type>image/.+);base64,(?P<data>.+)$zgAnthropic only supports base64-encoded images currently. Example: data:image/png;base64,'/9j/4AAQSk'...Úbase64Ú
media_typeÚdata)Útyper1   r2   )ÚreÚmatchr$   Úgroup)r.   Úregexr5   s      r&   Ú_format_imager8   5   sX   € ð C€EÜ�H‰H�U˜IÓ&€EØ€}Üð>ó
ð 	
ð
 Ø—k‘k ,Ó/Ø—‘˜FÓ#ñð r(   c                 óD  — 	 d}g }t        | «      D �]‰  \  }}|j                  dk(  rX|dk7  rt        d«      ‚t        |j                  t
        «      s!t        dt        |j                  «      › �«      ‚|j                  }Œnt        |j                     }t        |j                  t
        «      sÏt        |j                  t        «      sJ d«       ‚g }|j                  D ]œ  }t        |t
        «      r|j                  d|dœ«       Œ(t        |t        «      rOd	|vrt        d
«      ‚|d	   dk(  r&t        |d   d   «      }|j                  d|dœ«       Œu|j                  |«       Œ‡t        dt        |«      › �«      ‚ n|j                  }|j                  ||dœ«       �ŒŒ ||fS )zFormat messages for anthropic.NÚsystemr   z4System message must be at beginning of message list.z.System message must be a string, instead was: z6Anthropic message content must be str or list of dictsÚtext)r3   r;   r3   z&Dict content item must have a type keyr.   ÚurlÚimage)r3   Úsourcez0Content items must be str or dict, instead was: )r!   r#   )Ú	enumerater3   r$   r    r#   ÚstrÚ_message_type_lookupsÚlistÚappendÚdictr8   )	r)   r:   Úformatted_messagesÚir   r!   r#   Úitemr>   s	            r&   Ú_format_anthropic_messagesrH   P   s¯  € ð
ð !€FØ%'ÐÜ ×)‰
ˆˆ7Ø�<‰<˜8Ò#Ø�AŠvÜ Ð!WÓXÐXÜ˜gŸo™o¬sÔ3Ü ð$Ü$(¨¯©Ó$9Ð#:ð<óð ð —_‘_ˆFØä$ W§\¡\Ñ2ˆô ˜'Ÿ/™/¬3Ô/ä˜gŸo™o¬tÔ4ð ØHóÐ4ð
 ˆGØŸœ�Ü˜d¤CÔ(Ø—N‘Nà$*Ø$(ñõô   ¤dÔ+Ø TÑ)Ü(Ð)QÓRÐRØ˜F‘| {Ò2ä!.¨t°KÑ/@ÀÑ/GÓ!H˜ØŸ™à(/Ø*0ñõð  Ÿ™ tÕ,ä$ØJÌ4ÐPTË:È,ÐWóð ñ/ (ð6 —o‘oˆGà×!Ñ!àØ"ñö	
ði *ðt Ð%Ð%Ð%r(   c            
       ón   — e Zd ZdZededee   defd„«       Zededee   de	e
e   ee   f   fd„«       Zy)ÚChatPromptAdapterzeAdapter class to prepare the inputs from Langchain to prompt format
    that Chat model expects.
    Úproviderr)   r   c                 ó¼   — |dk(  rt        |¬«      }|S |dk(  rt        |¬«      }|S |dk(  rt        |¬«      }|S |dk(  rt        |dd¬«      }|S t        d	|› d
�«      ‚)NÚ	anthropic)r)   ÚmetaÚmistralÚamazonz

User:z

Bot:)r)   Úhuman_promptÚ	ai_promptú	Provider z model does not support chat.)r   r   r-   ÚNotImplementedError)ÚclsrK   r)   Úprompts       r&   Úconvert_messages_to_promptz,ChatPromptAdapter.convert_messages_to_prompt¢   s“   € ð �{Ò"Ü9À8ÔLˆFð ˆð ˜ÒÜ5¸xÔHˆFð ˆð ˜Ò"Ü7ÀÔJˆFð ˆð ˜Ò!Ü9Ø!Ø(Ø$ôˆFð ˆô &Ø˜H˜:Ð%BÐCóð r(   c                 ó@   — |dk(  rt        |«      S t        d|› d�«      ‚)NrM   rS   z" not supported for format_messages)rH   rT   )rU   rK   r)   s      r&   Úformat_messagesz!ChatPromptAdapter.format_messages¸   s1   € ð �{Ò"Ü-¨hÓ7Ð7ä!Ø˜�zÐ!CÐDó
ð 	
r(   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr@   r   r   rW   r	   r   r   rY   © r(   r&   rJ   rJ   �   s{   „ ñð ðØðØ&*¨;Ñ&7ðà	òó ðð* ð
Øð
Ø&*¨;Ñ&7ð
à	ˆx˜‰}˜d 4™jÐ(Ñ	)ò
ó ñ
r(   rJ   ÚuserÚ	assistant)ÚhumanÚair   ÚHumanMessageChunkÚfunctionz0.0.34z1.0zlangchain_aws.ChatBedrock)ÚsinceÚremovalÚalternative_importc                   óV  ‡ — e Zd Z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
e   d
ee
e      dee   dedee   f
d„Z	 	 dd	e
e   d
ee
e      dee   dedef
d„Zde
e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 )ÚBedrockChatz%Chat model that uses the Bedrock API.r   c                  ó   — y)zReturn type of chat model.Úamazon_bedrock_chatr_   )Úselfs    r&   Ú	_llm_typezBedrockChat._llm_typeÓ   s   € ð %r(   c                  ó   — y)z9Return whether this model can be serialized by Langchain.Tr_   ©rU   s    r&   Úis_lc_serializablezBedrockChat.is_lc_serializableØ   s   € ð r(   c                 ó
   — g d¢S )z*Get the namespace of the langchain object.)Ú	langchainÚchat_modelsÚbedrockr_   rp   s    r&   Úget_lc_namespacezBedrockChat.get_lc_namespaceÝ   s
   € ò 7Ð6r(   c                 ó@   — i }| j                   r| j                   |d<   |S )NÚregion_name)rx   )rm   Ú
attributess     r&   Úlc_attributeszBedrockChat.lc_attributesâ   s&   € à%'ˆ
à×ÒØ(,×(8Ñ(8ˆJ�}Ñ%àÐr(   Úforbid)Úextrar)   ÚstopÚrun_managerÚkwargsc           	   +   ó&  K  — | j                  «       }d\  }}}|dk(  rt        j                  ||«      \  }}nt        j                  ||¬«      } | j                  d|||||dœ|¤ŽD ]&  }	|	j
                  }
t        t        |
¬«      ¬«      –— Œ( y ­w)N©NNNrM   ©rK   r)   )rV   r:   r)   r}   r~   ©r#   ©r   r_   )Ú_get_providerrJ   rY   rW   Ú _prepare_input_and_invoke_streamr;   r   r   )rm   r)   r}   r~   r   rK   rV   r:   rE   ÚchunkÚdeltas              r&   Ú_streamzBedrockChat._streamï   sµ   è ø€ ð ×%Ñ%Ó'ˆØ-=Ñ*ˆ�Ð*à�{Ò"Ü):×)JÑ)JØ˜(ó*Ñ&ˆFÑ&ô '×AÑAØ!¨Hð Bó ˆFð ;�T×:Ñ:ð 
ØØØ'ØØ#ñ
ð ô
ˆEð —J‘JˆEÜ%¬nÀUÔ.KÔLÓLñ
ùs   ‚BBc           	      óÀ  — d}d| j                   i}| j                  r* | j                  |||fi |¤ŽD ]  }||j                  z  }Œ nw| j	                  «       }d\  }	}
}i |¥}|dk(  rt
        j                  ||«      \  }
}nt
        j                  ||¬«      }	|r||d<    | j                  d|	|||
|dœ|¤Ž\  }}||d<   t        t        t        |¬	«      ¬
«      g|¬«      S )NÚ Úmodel_idr�   rM   r‚   Ústop_sequences)rV   r}   r~   r:   r)   Úusagerƒ   r„   )ÚgenerationsÚ
llm_outputr_   )rŒ   Ú	streamingr‰   r;   r…   rJ   rY   rW   Ú_prepare_input_and_invoker   r   r   )rm   r)   r}   r~   r   Ú
completionr�   r‡   rK   rV   r:   rE   ÚparamsÚ
usage_infos                 r&   Ú	_generatezBedrockChat._generate  s"  € ð ˆ
Ø&0°$·-±-Ð%@ˆ
à�>Š>Ø%˜Ÿ™ h°°kÑLÀVÔL�Ø˜eŸj™jÑ(‘
ñ Mð ×)Ñ)Ó+ˆHØ1AÑ.ˆF�FÐ.Ø%/¨ ZˆFà˜;Ò&Ü->×-NÑ-NØ˜hó.Ñ*�Ñ*ô +×EÑEØ%°ð Fó �ñ Ø+/�Ð'Ñ(à%C T×%CÑ%Cð &ØØØ'ØØ+ñ&ð ñ&Ñ"ˆJ˜
ð #-ˆJ�wÑäÜ'´	À*Ô0MÔNÐOØ!ô
ð 	
r(   Úllm_outputsc                 óÜ   — t        t        «      }i }|D ]P  }|xs i }|j                  di «      }|j                  «       D ]  \  }}||xx   |z  cc<   Œ |j	                  |«       ŒR ||d<   |S )NrŽ   )r   ÚintÚgetÚitemsÚupdate)rm   r—   Úfinal_usageÚfinal_outputÚoutputrŽ   Ú
token_typeÚtoken_counts           r&   Ú_combine_llm_outputsz BedrockChat._combine_llm_outputs;  sy   € Ü&1´#Ó&6ˆØˆÛ!ˆFØ’\˜rˆFØ—J‘J˜w¨Ó+ˆEØ+0¯;©;®=Ñ'�
˜KØ˜JÓ'¨;Ñ6Ô'ð ,9à×Ñ Õ'ð "ð !,ˆ�WÑØÐr(   r;   c                 óP   •— | j                   rt        |«      S t        ‰| �  |«      S ©N)Ú_model_is_anthropicr   ÚsuperÚget_num_tokens©rm   r;   Ú	__class__s     €r&   r§   zBedrockChat.get_num_tokensG  s'   ø€ Ø×#Ò#Ü+¨DÓ1Ð1ä‘7Ñ)¨$Ó/Ð/r(   c                 óP   •— | j                   rt        |«      S t        ‰| �  |«      S r¤   )r¥   r   r¦   Úget_token_idsr¨   s     €r&   r«   zBedrockChat.get_token_idsM  s'   ø€ Ø×#Ò#Ü*¨4Ó0Ð0ä‘7Ñ(¨Ó.Ð.r(   )NN)rZ   r[   r\   r]   Úpropertyr@   rn   r^   Úboolrq   r   rv   r   r   rz   r   Úmodel_configr   r   r   r   r   r‰   r   r–   rD   r¢   r™   r§   r«   Ú__classcell__)r©   s   @r&   rj   rj   Í   sˆ  ø„ ñ 0àð%˜3ò %ó ð%ð ð 4ò ó ðð ð7  c¡ò 7ó ð7ð ð˜t C¨ H™~ò ó ðñ Øô€Lð %)Ø:>ñ	Mà�{Ñ#ðMð �t˜C‘yÑ!ðMð Ð6Ñ7ð	Mð
 ðMð 
Ð%Ñ	&óMðB %)Ø:>ñ	,
à�{Ñ#ð,
ð �t˜C‘yÑ!ð,
ð Ð6Ñ7ð	,
ð
 ð,
ð 
ó,
ð\
°°X¸d±^Ñ0Dð 
Èó 
ð0 3ð 0¨3õ 0ð/ #ð /¨$¨s©)÷ /ñ /r(   rj   )/r4   Úcollectionsr   Útypingr   r   r   r   r   r	   r
   Úlangchain_core._api.deprecationr   Úlangchain_core.callbacksr   Ú*langchain_core.language_models.chat_modelsr   Úlangchain_core.messagesr   r   r   r   r   r   Úlangchain_core.outputsr   r   r   Úpydanticr   Ú)langchain_community.chat_models.anthropicr   Ú$langchain_community.chat_models.metar   Ú langchain_community.llms.bedrockr   Ú'langchain_community.utilities.anthropicr   r   r@   r'   r-   r8   rH   rJ   rA   rj   r_   r(   r&   Ú<module>r¼      s
  ðÛ 	Ý #ß D× DÑ Då 6õõ E÷÷ ÷ SÑ RÝ õõ RÝ 8÷ð°+ð À#ó ð°°kÑ1Bð Àsó ð˜Sð  Tó ð6J&Ø�;ÑðJ&à
ˆ8�C‰=˜$˜t™*Ð$Ñ%óJ&÷Z$
ñ $
ðP Ø
Ø!ØØñÐ ñ Ø
˜EÐ6QôôA/�- ó A/óñA/r(   