Ë
    µŒjâ8  ã                  óÖ  — 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 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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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*m+Z+m,Z, ddl-m.Z.m/Z/ e
rddl0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6  ejn                  e8«      Z9e G d„ d«      «       Z:dd„Z;dd„Z<	 	 	 	 	 	 d d„Z=d!d„Z>d"d„Z? eddd¬«       G d„ de*e«      «       Z@y)#z1Wrapper around Google VertexAI chat-based models.é    )ÚannotationsN)Ú	dataclassÚfield)ÚTYPE_CHECKINGÚAnyÚDictÚIteratorÚListÚOptionalÚUnionÚcast)Úurlparse)Ú
deprecated)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseChatModelÚgenerate_from_stream)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚHumanMessageÚSystemMessage)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)Úpre_init)Ú_VertexAICommonÚis_codey_modelÚis_gemini_model)Úload_image_from_gcsÚraise_vertex_import_error)ÚChatMessageÚChatSessionÚCodeChatSessionÚInputOutputTextPair)ÚContentc                  ó<   — e Zd ZU dZ ee¬«      Zded<   dZded<   y)Ú_ChatHistoryz/Represents a context and a history of messages.)Údefault_factoryzList['ChatMessage']ÚhistoryNúOptional[str]Úcontext)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úlistr*   Ú__annotations__r,   © ó    úr/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/vertexai.pyr(   r(   6   s   … á9á#(¸Ô#>€GÐ Ó>Ø!€Gˆ]Ô!r4   r(   c                óÊ  — ddl m} g d}}t        | «      D ]½  \  }}t        t        |j
                  «      }|dk(  rt        |t        «      r|}Œ8t        |t        «      r& ||j
                  d¬«      }|j                  |«       Œnt        |t        «      r& ||j
                  d¬«      }|j                  |«       Œ¤t        dt        |«      › d|› d	�«      ‚ t        ||¬
«      }|S )a  Parse a sequence of messages into history.

    Args:
        history: The list of messages to re-create the history of the chat.
    Returns:
        A parsed chat history.
    Raises:
        ValueError: If a sequence of message has a SystemMessage not at the
        first place.
    r   )r"   NÚbot)ÚcontentÚauthorÚuserúUnexpected message with type ú at the position Ú.)r,   r*   )Úvertexai.language_modelsr"   Ú	enumerater   Ústrr8   Ú
isinstancer   r   Úappendr   Ú
ValueErrorÚtyper(   )	r*   r"   Úvertex_messagesr,   ÚiÚmessager8   Úvertex_messageÚchat_historys	            r5   Ú_parse_chat_historyrJ   >   sÒ   € õ 5à! 4�W€OÜ Ö(‰
ˆˆ7Ü”s˜GŸO™OÓ,ˆØ�Š6”j ¬-Ô8Ø‰GÜ˜¤Ô+Ù(°·±ÈÔOˆNØ×"Ñ" >Õ2Ü˜¤Ô.Ù(°·±ÈÔPˆNØ×"Ñ" >Õ2äØ/´°W³¨Ð>OÐPQÈsÐRSÐTóð ð )ô  ¨¸ÔI€LØÐr4   c                ó¸   — 	 t        | «      }t        |j                  |j                  g«      S # t        $ r"}t
        j                  d|› �«       Y d }~yd }~ww xY w)NzUnable to parse URL: F)r   ÚallÚschemeÚnetlocÚ	ExceptionÚloggerÚdebug)ÚsÚresultÚes      r5   Ú_is_urlrU   ^   sO   € ðÜ˜!“ˆÜ�F—M‘M 6§=¡=Ð1Ó2Ð2øÜò Ü�‰Ð,¨Q¨CÐ0Ô1Üûðús   ‚+. ®	A·AÁAc                óÄ  ‡‡‡— ddl m}mŠmŠ dˆˆˆfd„}g }t	        | «      D ]µ  \  }}|dk(  rt        |t        «      rt        d«      ‚t        |t        «      rd}n.t        |t        «      rd}nt        dt        |«      › d|› d	�«      ‚|j                  }t        |t        «      r|g}|D �	cg c]
  }	 ||	«      ‘Œ }
}	 |||
¬
«      }|j                  |«       Œ· |S c c}	w )Nr   )r&   ÚImageÚPartc                óö  •— t        | t        «      r‰j                  | «      S t        | t        «      st	        dt        | «      › d�«      ‚| d   dk(  r‰j                  | d   «      S | d   dk(  rð| d   d   }|j                  d«      rt        |‰¬«      }nÔ|j                  d	«      rZt        j                  d
|«      }|r|j                  d«      }nt	        d«      ‚‰j                  t        j                  |«      «      }nit        |«      rAt        j                   |«      }|j#                  «        ‰j                  |j$                  «      }n‰j'                  |«      }nt	        d«      ‚‰j)                  |«      S )Nz0Message's content is expected to be a dict, got Ú!rD   ÚtextÚ	image_urlÚurlzgs://)ÚpathÚprojectzdata:image/zdata:image/\w{2,4};base64,(.*)é   zdInvalid image uri. It should be in the format data:image/<image_type>;base64,<base64_encoded_image>.z,Only text and image_url types are supported!)rA   r@   Ú	from_textr   rC   rD   Ú
startswithr    ÚreÚsearchÚgroupÚ
from_bytesÚbase64Ú	b64decoderU   ÚrequestsÚgetÚraise_for_statusr8   Úload_from_fileÚ
from_image)Úpartr^   ÚimageÚencodedÚresponserW   rX   r_   s        €€€r5   Ú_convert_to_promptz6_parse_chat_history_gemini.<locals>._convert_to_promptl   sW  ø€ Ü�dœCÔ Ø—>‘> $Ó'Ð'ä˜$¤Ô%ÜØBÄ4ÈÃ:À,ÈaÐPóð ð �‰<˜6Ò!Ø—>‘> $ v¡,Ó/Ð/Ø�&‰\˜[Ò(Ø˜Ñ$ UÑ+ˆDØ�‰˜wÔ'Ü+°¸wÔG‘Ø—‘ Ô/ä!Ÿy™yÐ)JÈDÓQ�ÙØ%Ÿm™m¨AÓ.‘Gä$ðQóð ð ×(Ñ(¬×)9Ñ)9¸'Ó)BÓC‘Ü˜”Ü#Ÿ<™<¨Ó-�Ø×)Ñ)Ô+Ø×(Ñ(¨×)9Ñ)9Ó:‘à×,Ñ,¨TÓ2‘äÐKÓLÐLØ�‰˜uÓ%Ð%r4   z%SystemMessages are not yet supported!Úmodelr:   r;   r<   r=   )ÚroleÚparts)rn   zUnion[str, Dict]ÚreturnrX   )Ú"vertexai.preview.generative_modelsr&   rW   rX   r?   rA   r   rC   r   r   rD   r8   r@   rB   )r*   r_   r&   rr   rE   rF   rG   rt   Úraw_contentrn   ru   rH   rW   rX   s    `          @@r5   Ú_parse_chat_history_geminiry   g   sê   ú€ ÷ HÑG÷!&ðF €OÜ Ö(‰
ˆˆ7Ø�Š6”j ¬-Ô8ÜÐDÓEÐEÜ˜¤Ô+Ø‰DÜ˜¤Ô.Ø‰DäØ/´°W³¨Ð>OÐPQÈsÐRSÐTóð ð —o‘oˆÜ�k¤3Ô'Ø&˜-ˆKÙ6AÓB±k¨dÑ# DÕ)°kˆÐBÙ  d°%Ô8ˆØ×Ñ˜~Õ.ð# )ð$ Ðùò Cs   Â-Cc                óÂ  — ddl m} t        | «      dz  dk7  rt        dt        | «      › d�«      ‚g }d }t	        | «      D ]�  \  }}|dz  dk(  r7t        |t        «      st        dt        |«      › d|› d�«      ‚|j                  }|dz  d	k(  sŒNt        |t        «      st        d
t        |«      › d|› d�«      ‚ |||j                  ¬«      }|j                  |«       ŒŸ |S )Nr   )r%   é   z8Expect examples to have an even amount of messages, got r=   z;Expected the first message in a part to be from human, got z	 for the zth message.r`   z9Expected the second message in a part to be from AI, got )Ú
input_textÚoutput_text)r>   r%   ÚlenrC   r?   rA   r   rD   r8   r   rB   )Úexamplesr%   Úexample_pairsr|   rF   ÚexampleÚpairs          r5   Ú_parse_examplesrƒ   ¥   s  € Ý<ä
ˆ8ƒ}�qÑ˜AÒÜØFÄsÈ8Ã}ÀoÐUVÐWó
ð 	
ð €MØ€JÜ Ö)‰
ˆˆ7Øˆq‰5�AŠ:Ü˜g¤|Ô4Ü ØQÜ˜G“}�o Y¨q¨c°ð>óð ð !Ÿ™ˆJØˆq‰5�A‹:Ü˜g¤yÔ1Ü ØOÜ˜G“}�o Y¨q¨c°ð>óð ñ 'Ø%°7·?±?ôˆDð × Ñ  Õ&ð# *ð$ Ðr4   c                ó|   — | st        d«      ‚| d   }t        |t        «      st        d|j                  › d�«      ‚|S )zMGet the human message at the end of a list of input messages to a chat model.z:You should provide at least one message to start the chat!éÿÿÿÿz3Last message in the list should be from human, got r=   )rC   rA   r   rD   )ÚmessagesÚquestions     r5   Ú_get_questionrˆ   Ã   sI   € áÜÐUÓVÐVØ˜‰|€HÜ�h¤Ô-ÜØAÀ(Ç-Á-ÀÐPQÐRó
ð 	
ð €Or4   z0.0.12z1.0z&langchain_google_vertexai.ChatVertexAI)ÚsinceÚremovalÚalternative_importc                  óà   — e Zd ZU dZdZded<   	 dZded<   edd„«       Zedd	„«       Z	e
dd
„«       Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zy)ÚChatVertexAIz+`Vertex AI` Chat large language models API.z
chat-bisonr@   Ú
model_nameNzOptional[List[BaseMessage]]r   c                 ó   — y)NTr3   )Úselfs    r5   Úis_lc_serializablezChatVertexAI.is_lc_serializableÛ   s   € àr4   c                ó
   — g d¢S )z*Get the namespace of the langchain object.)Ú	langchainÚchat_modelsÚvertexair3   )Úclss    r5   Úget_lc_namespacezChatVertexAI.get_lc_namespaceß   s
   € ò 8Ð7r4   c                ó  — t        |d   «      }| j                  |«       	 ddlm}m} |rddlm} |r |d   ¬«      |d<   |S t        |d   «      r}n}|j                  |d   «      |d<   |S # t        $ r t        «        Y ŒTw xY w)z7Validate that the python package exists in environment.rŽ   r   )Ú	ChatModelÚCodeChatModel)ÚGenerativeModel)rŽ   Úclient)r   Ú_try_init_vertexair>   r™   rš   rw   r›   ÚImportErrorr!   r   Úfrom_pretrained)r–   ÚvaluesÚ	is_geminir™   rš   r›   Ú	model_clss          r5   Úvalidate_environmentz!ChatVertexAI.validate_environmentä   s    € ô $ F¨<Ñ$8Ó9ˆ	Ø×Ñ˜vÔ&ð	(ßIáõñ
 Ù.¸&ÀÑ:NÔOˆF�8Ñð ˆô ˜f \Ñ2Ô3Ø)‘	à%�	Ø(×8Ñ8¸ÀÑ9MÓNˆF�8ÑØˆøô ò 	(Ü%Ö'ð	(ús   ¡A0 Á0BÂBc                ó  — |�|n| j                   }|r! | j                  |f||dœ|¤Ž}t        |«      S t        |«      } | j                  d|ddœ|¤Ž}	i }
d|	v r|	j                  d«      |
d<   | j                  rWt        || j                  ¬«      }|j                  «       }| j                  j                  |¬«      }|j                  ||	¬«      }nmt        |dd	 «      }|j                  d
«      xs | j                  }|rt        |«      |	d
<    | j                   |fi |	¤Ž} |j                  |j"                  fi |
¤Ž}|j$                  D �cg c]"  }t'        t)        |j*                  ¬«      ¬«      ‘Œ$ }}t-        |¬«      S c c}w )a>  Generate next turn in the conversation.

        Args:
            messages: The history of the conversation as a list of messages. Code chat
                does not support context.
            stop: The list of stop words (optional).
            run_manager: The CallbackManager for LLM run, it's not used at the moment.
            stream: Whether to use the streaming endpoint.

        Returns:
            The ChatResult that contains outputs generated by the model.

        Raises:
            ValueError: if the last message in the list is not from human.
        N)ÚstopÚrun_managerF©r¥   ÚstreamÚcandidate_count©r_   ©r*   ©Úgeneration_configr…   r   ©r8   ©rG   ©Úgenerationsr3   )Ú	streamingÚ_streamr   rˆ   Ú_prepare_paramsÚpopÚ_is_gemini_modelry   r_   rœ   Ú
start_chatÚsend_messagerJ   rj   r   rƒ   Ú_start_chatr8   Ú
candidatesr   r   r[   r   )r�   r†   r¥   r¦   r¨   ÚkwargsÚshould_streamÚstream_iterr‡   ÚparamsÚ
msg_paramsÚhistory_geminirG   Úchatrq   r*   r   Úrr±   s                      r5   Ú	_generatezChatVertexAI._generateü   s™  € ð. #)Ð"4™¸$¿.¹.ˆÙØ&˜$Ÿ,™,ØðØ#°ñØ@FñˆKô (¨Ó4Ð4ä  Ó*ˆØ%�×%Ñ%ÐH¨4¸ÑHÀÑHˆØˆ
Ø Ñ&Ø,2¯J©JÐ7HÓ,IˆJÐ(Ñ)à× Ò Ü7¸È$Ï,É,ÔWˆNØ$×(Ñ(Ó*ˆGØ—;‘;×)Ñ)°.Ð)ÓAˆDØ×(Ñ(¨ÀFÐ(ÓK‰Hä)¨(°3°B¨-Ó8ˆGØ—z‘z *Ó-Ò>°·±ˆHÙÜ%4°XÓ%>��zÑ"Ø#�4×#Ñ# GÑ6¨vÑ6ˆDØ(�t×(Ñ(¨×)9Ñ)9ÑH¸ZÑHˆHð ×(Ò(ó
á(�ô ¤9°Q·V±VÔ#<Ö=Ø(ð 	ð 
ô  kÔ2Ð2ùò	
s   Å'Fc              ‹  ó  K  — d|v r&|j                  d«       t        j                  d«        | j                  dd|i|¤Ž}i }d|v r|j                  d«      |d<   | j                  r_t        || j                  ¬«      }|j                  «       }| j                  j                  |¬«      }	|	j                  ||¬«      ƒ d{  –—† }
nst        |«      }t        |dd	 «      }|j                  d
d«      }|rt        |«      |d
<    | j                  |fi |¤Ž}	 |	j                  |j                  fi |¤Žƒ d{  –—† }
|
j                   D �cg c]"  }t#        t%        |j&                  ¬«      ¬«      ‘Œ$ }}t)        |¬«      S 7 Œ»7 ŒIc c}w ­w)a  Asynchronously generate next turn in the conversation.

        Args:
            messages: The history of the conversation as a list of messages. Code chat
                does not support context.
            stop: The list of stop words (optional).
            run_manager: The CallbackManager for LLM run, it's not used at the moment.

        Returns:
            The ChatResult that contains outputs generated by the model.

        Raises:
            ValueError: if the last message in the list is not from human.
        r¨   z8ChatVertexAI does not currently support async streaming.r¥   r©   rª   r«   r¬   Nr…   r   r®   r¯   r°   r3   )rµ   rP   Úwarningr´   r¶   ry   r_   rœ   r·   Úsend_message_asyncrˆ   rJ   rj   rƒ   r¹   r8   rº   r   r   r[   r   )r�   r†   r¥   r¦   r»   r¾   r¿   rÀ   rG   rÁ   rq   r‡   r*   r   rÂ   r±   s                   r5   Ú
_ageneratezChatVertexAI._agenerate2  s„  è ø€ ð* �vÑØ�J‰J�xÔ Ü�N‰NÐUÔVà%�×%Ñ%Ñ:¨4Ð:°6Ñ:ˆØˆ
Ø Ñ&Ø,2¯J©JÐ7HÓ,IˆJÐ(Ñ)à× Ò Ü7¸È$Ï,É,ÔWˆNØ$×(Ñ(Ó*ˆGØ—;‘;×)Ñ)°.Ð)ÓAˆDØ!×4Ñ4°WÐPVÐ4ÓW×W‰Hä$ XÓ.ˆHÜ)¨(°3°B¨-Ó8ˆGØ—z‘z *¨dÓ3ˆHÙÜ%4°XÓ%>��zÑ"Ø#�4×#Ñ# GÑ6¨vÑ6ˆDØ4˜T×4Ñ4°X×5EÑ5EÑTÈÑT×TˆHð ×(Ò(ó
á(�ô ¤9°Q·V±VÔ#<Ö=Ø(ð 	ð 
ô  kÔ2Ð2ð Xøð Uúò
ùs7   ‚B>FÃ E<ÃA3FÄ4E>Ä5FÅ'F Å.FÅ>FÆ Fc              +  óh  K  —  | j                   d|ddœ|¤Ž}| j                  rXt        || j                  ¬«      }|j	                  «       }| j
                  j                  |¬«      }|j                  |d|¬«      }	nkt        |«      }
t        |d d «      }|j                  dd «      }|rt        |«      |d<    | j                  |fi |¤Ž} |j                  |
j                  fi |¤Ž}	|	D ]E  }t        t!        |j"                  ¬«      ¬	«      }|r|j%                  |j"                  |¬
«       |–— ŒG y ­w)NTr§   rª   r«   )r¨   r­   r…   r   r®   r¯   )Úchunkr3   )r´   r¶   ry   r_   rµ   rœ   r·   r¸   rˆ   rJ   rj   rƒ   r¹   Úsend_message_streamingr8   r   r   r[   Úon_llm_new_token)r�   r†   r¥   r¦   r»   r¾   rÀ   rG   rÁ   Ú	responsesr‡   r*   r   rq   rÉ   s                  r5   r³   zChatVertexAI._streamd  s,  è ø€ ð &�×%Ñ%ÐG¨4¸ÑGÀÑGˆØ× Ò Ü7¸È$Ï,É,ÔWˆNØ$×(Ñ(Ó*ˆGØ—;‘;×)Ñ)°.Ð)ÓAˆDØ×)Ñ)Ø ¸ð *ó ‰Iô % XÓ.ˆHÜ)¨(°3°B¨-Ó8ˆGØ—z‘z *¨dÓ3ˆHÙÜ%4°XÓ%>��zÑ"Ø#�4×#Ñ# GÑ6¨vÑ6ˆDØ3˜×3Ñ3°H×4DÑ4DÑOÈÑOˆIÛ!ˆHÜ'´ÀxÇ}Á}Ô0UÔVˆEÙØ×,Ñ,¨X¯]©]À%Ð,ÔHØ‹Kñ	 "ùs   ‚D0D2c                óÐ   — | j                   s3 | j                  j                  d|j                  |j                  dœ|¤ŽS  | j                  j                  dd|j                  i|¤ŽS )N)r,   Úmessage_historyrÎ   r3   )r   rœ   r·   r,   r*   )r�   r*   r»   s      r5   r¹   zChatVertexAI._start_chat�  se   € ð ×"Ò"Ø)�4—;‘;×)Ñ)ð ØŸ™¸¿¹ñØLRñð ð *�4—;‘;×)Ñ)ÑT¸'¿/¹/ÐTÈVÑTÐTr4   )rv   Úbool)rv   z	List[str])r    r   rv   r   )NNN)r†   úList[BaseMessage]r¥   úOptional[List[str]]r¦   ú"Optional[CallbackManagerForLLMRun]r¨   zOptional[bool]r»   r   rv   r   )NN)
r†   rÐ   r¥   rÑ   r¦   z'Optional[AsyncCallbackManagerForLLMRun]r»   r   rv   r   )
r†   rÐ   r¥   rÑ   r¦   rÒ   r»   r   rv   zIterator[ChatGenerationChunk])r*   r(   r»   r   rv   z#Union[ChatSession, CodeChatSession])r-   r.   r/   r0   rŽ   r2   r   Úclassmethodr‘   r—   r   r£   rÃ   rÇ   r³   r¹   r3   r4   r5   r�   r�   Ï   s@  … ñ 6à"€J�Ó"ØØ,0€HÐ)Ó0àòó ðð ò8ó ð8ð òó ðð4 %)Ø:>Ø!%ð43à#ð43ð "ð43ð 8ð	43ð
 ð43ð ð43ð 
ó43ðr %)Ø?Cð	03à#ð03ð "ð03ð =ð	03ð
 ð03ð 
ó03ðj %)Ø:>ð	à#ðð "ðð 8ð	ð
 ðð 
'óð:UØ#ðUØ/2ðUà	,ôUr4   r�   )r*   rÐ   rv   r(   )rR   r@   rv   rÏ   )r*   rÐ   r_   r+   rv   zList['Content'])r   rÐ   rv   zList['InputOutputTextPair'])r†   rÐ   rv   r   )Ar0   Ú
__future__r   rg   Úloggingrc   Údataclassesr   r   Útypingr   r   r   r	   r
   r   r   r   Úurllib.parser   ri   Úlangchain_core._api.deprecationr   Úlangchain_core.callbacksr   r   Ú*langchain_core.language_models.chat_modelsr   r   Úlangchain_core.messagesr   r   r   r   r   Úlangchain_core.outputsr   r   r   Úlangchain_core.utilsr   Ú!langchain_community.llms.vertexair   r   r   Ú&langchain_community.utilities.vertexair    r!   r>   r"   r#   r$   r%   rw   r&   Ú	getLoggerr-   rP   r(   rJ   rU   ry   rƒ   rˆ   r�   r3   r4   r5   Ú<module>râ      sû   ðÙ 7å "ã Û Û 	ß (ß R× RÓ RÝ !ã Ý 6÷÷÷õ ÷ SÑ RÝ )÷ñ ÷
ñ
 ÷ó õ ;à	ˆ×	Ñ	˜8Ó	$€ð ÷"ð "ó ð"óó@ð;Øð;Ø)6ð;àó;ó|ó<	ñ Ø
ØØ?ôô
uU�? Mó uUóñ
uUr4   