§
    šŠtji"  ã                  ó  — d dl mZ d dl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 d dlmZmZ d dlmZmZ d d	lmZ d d
lmZ 	 	 	 d#d$d„Zd%d„Zd&d„Z e	dd ¬!¦  «         G d"„ dee¦  «        ¦   «         ZdS )'é    )Úannotations)ÚAnyÚDictÚIteratorÚListÚOptional)Ú
deprecated)ÚCallbackManagerForLLMRun)ÚLanguageModelInput)Ú
GenerationÚGenerationChunkÚ	LLMResult)Úget_from_dict_or_envÚpre_init)Ú	BaseModelÚ	SecretStr)ÚBaseLLM)Úcreate_retry_decoratorFNÚllmÚ
GooglePalmÚpromptr   Ú	is_geminiÚboolÚstreamÚrun_managerú"Optional[CallbackManagerForLLMRun]Úkwargsr   Úreturnc                óf   ‡ — t          ‰ ‰ j        |¬¦  «        }|dˆ fd
„¦   «         } |d|||dœ|¤ŽS )z*Use tenacity to retry the completion call.)Úmax_retriesr   r   r   r   r   r   r   r   r   c                ó–   •— |                      di ¦  «        }|r‰j                             | ||¬¦  «        S  ‰j        j        dd| i|¤ŽS )NÚgeneration_config)Úcontentsr   r"   r   © )ÚgetÚclientÚgenerate_contentÚgenerate_text)r   r   r   r   r"   r   s        €úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/google_palm.pyÚ_completion_with_retryz5completion_with_retry.<locals>._completion_with_retry   sk   ø€ ð #ŸJšJÐ':¸BÑ?Ô?ÐØð 	Ø”:×.Ò.Ø¨ÐBSð /ñ ô ð ð (ˆsŒzÔ'Ð@Ð@¨vÐ@¸Ð@Ð@Ð@ó    )r   r   r   )
r   r   r   r   r   r   r   r   r   r   r$   )r   r    )r   r   r   r   r   r   Úretry_decoratorr*   s   `       r)   Úcompletion_with_retryr-      s‚   ø€ õ -Ø˜œ°kðñ ô €Oð ðAð Að Að Að Añ „_ðAð "Ð!ð Ø °6ðð Ø=Cðð ð r+   Ú
model_nameÚstrc                ó
   — d| v S )NÚgeminir$   ©r.   s    r)   Ú_is_gemini_modelr3   -   s   € Ø�zÐ!Ð!r+   Útextc                óž   — t          d„ |                      d¦  «        dd…         D ¦   «         ¦  «        }|r|                      dd¦  «        S | S )z°Strip erroneous leading spaces from text.

    The PaLM API will sometimes erroneously return a single leading space in all
    lines > 1. This function strips that space.
    c              3  ó4   K  — | ]}| p|d          dk    V — ŒdS )r   ú Nr$   )Ú.0Úlines     r)   ú	<genexpr>z2_strip_erroneous_leading_spaces.<locals>.<genexpr>7   s1   è è € ÐXÐX¸4 ˜HÐ6¨¨Q¬°3ªÐXÐXÐXÐXÐXÐXr+   ú
é   Nz
 )ÚallÚsplitÚreplace)r4   Úhas_leading_spaces     r)   Ú_strip_erroneous_leading_spacesrA   1   sZ   € õ ÐXÐXÀ4Ç:Â:ÈdÑCSÔCSÐTUÐTVÐTVÔCWÐXÑXÔXÑXÔXÐØð Ø�|Š|˜E 4Ñ(Ô(Ð(àˆr+   z0.0.12z)langchain_google_genai.GoogleGenerativeAI)Úalternative_importc                  óL  — e Zd ZU dZded<   ded<   dZded<   	 d	Zd
ed<   	 dZded<   	 dZded<   	 dZ	ded<   	 dZ
ded<   	 dZded<   	 ed0d„¦   «         Zed1d„¦   «         Zed0d„¦   «         Zed2d„¦   «         Zed3d!„¦   «         Z	 	 d4d5d)„Z	 	 d4d6d,„Zed7d-„¦   «         Zd8d/„ZdS )9r   zg
    DEPRECATED: Use `langchain_google_genai.GoogleGenerativeAI` instead.

    Google PaLM models.
    r   r&   zOptional[SecretStr]Úgoogle_api_keyzmodels/text-bison-001r/   r.   gffffffæ?ÚfloatÚtemperatureNzOptional[float]Útop_pzOptional[int]Útop_kÚmax_output_tokensr<   ÚintÚné   r    r   r   c                ó*   — t          | j        ¦  «        S )z=Returns whether a model is belongs to a Gemini family or not.)r3   r.   ©Úselfs    r)   r   zGooglePalm.is_gemini\   s   € õ   ¤Ñ0Ô0Ð0r+   úDict[str, str]c                ó
   — ddiS )NrD   ÚGOOGLE_API_KEYr$   rN   s    r)   Ú
lc_secretszGooglePalm.lc_secretsa   s   € à Ð"2Ð3Ð3r+   c                ó   — dS )NTr$   rN   s    r)   Úis_lc_serializablezGooglePalm.is_lc_serializablee   s   € àˆtr+   ú	List[str]c                ó
   — g d¢S )z*Get the namespace of the langchain object.)Ú	langchainÚllmsÚgoogle_palmr$   )Úclss    r)   Úget_lc_namespacezGooglePalm.get_lc_namespacei   s   € ð 4Ð3Ð3Ð3r+   Úvaluesr   c                ó˜  — t          |dd¦  «        }|d         }	 ddlm} t          |t          ¦  «        r|                     ¦   «         }|                     |¬¦  «         t          |¦  «        r|                     |¬¦  «        |d<   n||d<   n# t          $ r t          d	¦  «        ‚w xY w|d
         �$d|d
         cxk    rdk    sn t          d¦  «        ‚|d         �$d|d         cxk    rdk    sn t          d¦  «        ‚|d         �|d         dk    rt          d¦  «        ‚|d         �|d         dk    rt          d¦  «        ‚|S )z(Validate api key, python package exists.rD   rR   r.   r   N)Úapi_keyr2   r&   znCould not import google-generativeai python package. Please install it with `pip install google-generativeai`.rF   r<   z+temperature must be in the range [0.0, 1.0]rG   z%top_p must be in the range [0.0, 1.0]rH   ztop_k must be positiverI   z+max_output_tokens must be greater than zero)r   Úgoogle.generativeaiÚgenerativeaiÚ
isinstancer   Úget_secret_valueÚ	configurer3   ÚGenerativeModelÚImportErrorÚ
ValueError)r[   r]   rD   r.   Úgenais        r)   Úvalidate_environmentzGooglePalm.validate_environmentn   s¶  € õ .ØÐ$Ð&6ñ
ô 
ˆð ˜LÔ)ˆ
ð	Ø/Ð/Ð/Ð/Ð/Ð/å˜.­)Ñ4Ô4ð CØ!/×!@Ò!@Ñ!BÔ!B�à�OŠO NˆOÑ3Ô3Ð3å 
Ñ+Ô+ð )Ø#(×#8Ò#8ÀJÐ#8Ñ#OÔ#O��xÑ Ð à#(��xÑ øøÝð 	ð 	ð 	ÝðLñô ð ð	øøøð �-Ô Ð,°Q¸&ÀÔ:OÐ5TÐ5TÒ5TÐ5TÐSTÒ5TÐ5TÐ5TÐ5TÝÐJÑKÔKÐKà�'Œ?Ð&¨q°F¸7´OÐ/HÐ/HÒ/HÐ/HÀqÒ/HÐ/HÐ/HÐ/HÝÐDÑEÔEÐEà�'Œ?Ð&¨6°'¬?¸aÒ+?Ð+?ÝÐ5Ñ6Ô6Ð6àÐ%Ô&Ð2°vÐ>QÔ7RÐVWÒ7WÐ7WÝÐJÑKÔKÐKàˆs   ›A3B ÂB)ÚpromptsÚstopúOptional[List[str]]r   r   r   r   c           
     óô  — g }|| j         | j        | j        | j        | j        dœ}|D ]Â}| j        rFt          | |dd||¬¦  «        }d„ |j        D ¦   «         }	|                     d„ |	D ¦   «         ¦  «         ŒOt          | f| j	        |dd|dœ|¤Ž}g }
|j        D ]<}|d         }t          |¦  «        }|
                     t          |¬	¦  «        ¦  «         Œ=|                     |
¦  «         ŒÃt          |¬
¦  «        S )N)Ústop_sequencesrF   rG   rH   rI   Úcandidate_countFT)r   r   r   r   r"   c                ó`   — g | ]+}d                       d„ |j        j        D ¦   «         ¦  «        ‘Œ,S )Ú c                ó   — g | ]	}|j         ‘Œ
S r$   ©r4   )r8   Úps     r)   ú
<listcomp>z3GooglePalm._generate.<locals>.<listcomp>.<listcomp>°   s   € Ð=Ð=Ð=¨˜QœVÐ=Ð=Ð=r+   )ÚjoinÚcontentÚparts©r8   Úcs     r)   ru   z(GooglePalm._generate.<locals>.<listcomp>¯   sD   € ð ð ð ØCD�B—G’GÐ=Ð=¨Q¬Y¬_Ð=Ñ=Ô=Ñ>Ô>ðð ð r+   c                ó.   — g | ]}t          |¬ ¦  «        ‘ŒS )rs   )r   ry   s     r)   ru   z(GooglePalm._generate.<locals>.<listcomp>²   s#   € Ð#KÐ#KÐ#K¸1¥J°AÐ$6Ñ$6Ô$6Ð#KÐ#KÐ#Kr+   )Úmodelr   r   r   r   Úoutputrs   )Úgenerations)rF   rG   rH   rI   rK   r   r-   Ú
candidatesÚappendr.   rA   r   r   )rO   rj   rk   r   r   r~   r"   r   Úresr   Úprompt_generationsÚ	candidateÚraw_textÚstripped_texts                 r)   Ú	_generatezGooglePalm._generate•   sq  € ð /1ˆà"ØÔ+Ø”ZØ”ZØ!%Ô!7Ø#œvð
ð 
Ðð ð 	7ð 	7ˆFØŒ~ð 7Ý+ØØ!Ø Ø"Ø +Ø&7ðñ ô �ðð ØHKÌðñ ô �
ð ×"Ò"Ð#KÐ#KÀ
Ð#KÑ#KÔ#KÑLÔLÐLÐLå+Øðàœ/Ø!Ø Ø#Ø +ðð ð (ðð �ð &(Ð"Ø!$¤ð Nð N�IØ(¨Ô2�HÝ$CÀHÑ$MÔ$M�MØ&×-Ò-­j¸mÐ.LÑ.LÔ.LÑMÔMÐMÐMØ×"Ò"Ð#5Ñ6Ô6Ð6Ð6å [Ð1Ñ1Ô1Ð1r+   r   úIterator[GenerationChunk]c              +  óê   K  — |                      di ¦  «        }|r||d<   t          | |fdd||dœ|¤ŽD ]?}t          |j        ¬¦  «        }|r"|                     |j        || j        ¬¦  «         |V — Œ@d S )Nr"   rn   T)r   r   r   r"   rs   )ÚchunkÚverbose)r%   r-   r   r4   Úon_llm_new_tokenrŠ   )rO   r   rk   r   r   r"   Ústream_respr‰   s           r)   Ú_streamzGooglePalm._streamÆ   sÑ   è è € ð #ŸJšJÐ':¸BÑ?Ô?ÐØð 	7Ø26ÐÐ.Ñ/Ý0ØØð
ð ØØ#Ø/ð
ð 
ð ð
ð 
ð 	ð 	ˆKõ $¨Ô)9Ð:Ñ:Ô:ˆEØð Ø×,Ò,ØÔ$ØØ œLð -ñ ô ð ð
 ˆKˆKˆKˆKð!	ð 	r+   c                ó   — dS )zReturn type of llm.rZ   r$   rN   s    r)   Ú	_llm_typezGooglePalm._llm_typeâ   s	   € ð ˆ}r+   r4   c                ó€   — | j         rt          d¦  «        ‚| j                             | j        |¬¦  «        }|d         S )a  Get the number of tokens present in the text.

        Useful for checking if an input will fit in a model's context window.

        Args:
            text: The string input to tokenize.

        Returns:
            The integer number of tokens in the text.
        z%Counting tokens is not yet supported!)r|   r   Útoken_count)r   rg   r&   Úcount_text_tokensr.   )rO   r4   Úresults      r)   Úget_num_tokenszGooglePalm.get_num_tokensç   sE   € ð Œ>ð 	FÝÐDÑEÔEÐEØ”×.Ò.°T´_ÈTÐ.ÑRÔRˆØ�mÔ$Ð$r+   )r   r   )r   rP   )r   rV   )r]   r   r   r   )NN)
rj   rV   rk   rl   r   r   r   r   r   r   )
r   r/   rk   rl   r   r   r   r   r   r‡   )r   r/   )r4   r/   r   rJ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r.   rF   rG   rH   rI   rK   r    Úpropertyr   rS   ÚclassmethodrU   r\   r   ri   r†   r�   r�   r”   r$   r+   r)   r   r   >   sâ  € € € € € € ðð ð €K€K�KØ'Ð'Ð'Ñ'Ø-€JÐ-Ð-Ð-Ñ-ØØ€KÐÐÐÑðà!€EÐ!Ð!Ð!Ñ!ðXà€EÐÐÐÑðà'+ÐÐ+Ð+Ð+Ñ+ð(à€A€J€J€J�JðIà€KÐÐÐÑØ@àð1ð 1ð 1ñ „Xð1ð ð4ð 4ð 4ñ „Xð4ð ðð ð ñ „[ðð ð4ð 4ð 4ñ „[ð4ð ð$ð $ð $ñ „Xð$ðR %)Ø:>ð	/2ð /2ð /2ð /2ð /2ðh %)Ø:>ð	ð ð ð ð ð8 ðð ð ñ „Xðð%ð %ð %ð %ð %ð %r+   )FFN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r.   r/   r   r   )r4   r/   r   r/   ) Ú
__future__r   Útypingr   r   r   r   r   Úlangchain_core._api.deprecationr	   Úlangchain_core.callbacksr
   Úlangchain_core.language_modelsr   Úlangchain_core.outputsr   r   r   Úlangchain_core.utilsr   r   Úpydanticr   r   Úlangchain_community.llmsr   Ú&langchain_community.utilities.vertexair   r-   r3   rA   r   r$   r+   r)   ú<module>r¦      s“  ðØ "Ð "Ð "Ð "Ð "Ð "à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø =Ð =Ð =Ð =Ð =Ð =Ø =Ð =Ð =Ð =Ð =Ð =Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø IÐ IÐ IÐ IÐ IÐ Ið ØØ6:ðð ð ð ð ð:"ð "ð "ð "ð
ð 
ð 
ð 
ð €ˆHÐ)TÐUÑUÔUðv%ð v%ð v%ð v%ð v%�˜)ñ v%ô v%ñ VÔUðv%ð v%ð v%r+   