
    dh|"                    
   S SK Jr  S SKJrJrJrJrJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJrJrJr  S SKJrJr  S SKJrJr  S S	KJr  S S
KJr     S             SS jjrSS jrSS jr\	" SSS9 " S S\\5      5       rg)    )annotations)AnyDictIteratorListOptional)
deprecated)CallbackManagerForLLMRun)LanguageModelInput)
GenerationGenerationChunk	LLMResult)get_from_dict_or_envpre_init)	BaseModel	SecretStr)BaseLLM)create_retry_decoratorN
GooglePalmc                r   ^  [        T T R                  US9nU          SU 4S jj5       nU" SXUS.UD6$ )z*Use tenacity to retry the completion call.)max_retriesrun_managerc                   > UR                  S0 5      nU(       a  TR                  R                  XUS9$ TR                  R                  " SSU 0UD6$ )Ngeneration_config)contentsstreamr   prompt )getclientgenerate_contentgenerate_text)r   	is_geminir   kwargsr   llms        \/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/llms/google_palm.py_completion_with_retry5completion_with_retry.<locals>._completion_with_retry   s[     #JJ':B?::..BS /   zz''@v@@@    )r   r#   r   )
r   r   r#   boolr   r*   r$   r   returnr   r   )r   r   )r%   r   r#   r   r   r$   retry_decoratorr'   s   `       r&   completion_with_retryr-      s~     -kO A"A/3A=AAMPA	A A " 6=C r)   c                    SU ;   $ )Ngeminir   
model_names    r&   _is_gemini_modelr2   -   s    z!!r)   c                    [        S U R                  S5      SS  5       5      nU(       a  U R                  SS5      $ U $ )zStrip 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  J   #    U H  o(       + =(       d    US    S:H  v   M     g7f)r    Nr   ).0lines     r&   	<genexpr>2_strip_erroneous_leading_spaces.<locals>.<genexpr>7   s"     XCW4H6Q36CWs   !#
   Nz
 )allsplitreplace)texthas_leading_spaces     r&   _strip_erroneous_leading_spacesrA   1   s@     X4::dCSTUTVCWXX||E4((r)   z0.0.12z)langchain_google_genai.GoogleGenerativeAI)alternative_importc                  h   \ rS rSr% SrS\S'   S\S'   SrS\S	'    S
rS\S'    SrS\S'    Sr	S\S'    Sr
S\S'    SrS\S'    SrS\S'    \S"S j5       r\S#S j5       r\S"S j5       r\S$S j5       r\S%S j5       r  S&         S'S jjr  S&         S(S jjr\S)S j5       rS*S  jrS!rg)+r   >   z[
DEPRECATED: Use `langchain_google_genai.GoogleGenerativeAI` instead.

Google PaLM models.
r   r    zOptional[SecretStr]google_api_keyzmodels/text-bison-001strr1   gffffff?floattemperatureNzOptional[float]top_pzOptional[int]top_kmax_output_tokensr;   intn   r   c                ,    [        U R                  5      $ )z=Returns whether a model is belongs to a Gemini family or not.)r2   r1   selfs    r&   r#   GooglePalm.is_gemini\   s      00r)   c                
    SS0$ )NrE   GOOGLE_API_KEYr   rP   s    r&   
lc_secretsGooglePalm.lc_secretsa   s     "233r)   c                    g)NTr   rP   s    r&   is_lc_serializableGooglePalm.is_lc_serializablee   s    r)   c                
    / SQ$ )z*Get the namespace of the langchain object.)	langchainllmsgoogle_palmr   )clss    r&   get_lc_namespaceGooglePalm.get_lc_namespacei   s
     43r)   c                   [        USS5      nUS   n SSKJn  [        U[        5      (       a  UR                  5       nUR                  US9  [        U5      (       a  UR                  US9US'   OXAS'    US
   b  SUS
   s=::  a  S::  d  O  [        S5      eUS   b  SUS   s=::  a  S::  d  O  [        S5      eUS   b  US   S::  a  [        S5      eUS   b  US   S::  a  [        S5      eU$ ! [         a    [        S	5      ef = f)z(Validate api key, python package exists.rE   rT   r1   r   N)api_keyr0   r    znCould not import google-generativeai python package. Please install it with `pip install google-generativeai`.rH   r;   z+temperature must be in the range [0.0, 1.0]rI   z%top_p must be in the range [0.0, 1.0]rJ   ztop_k must be positiverK   z+max_output_tokens must be greater than zero)r   google.generativeaigenerativeai
isinstancer   get_secret_value	configurer2   GenerativeModelImportError
ValueError)r^   valuesrE   r1   genais        r&   validate_environmentGooglePalm.validate_environmentn   s@    .$&6
 L)
	/.)44!/!@!@!BOONO3
++#(#8#8J#8#Ox #(x  - ,Q&:O5TST5TJKK'?&qF7O/Hq/HDEE'?&6'?a+?566%&2v>Q7RVW7WJKK%  	L 	s   AC2 1C2 2Dc                   / nUU R                   U R                  U R                  U R                  U R                  S.nU GH  nU R
                  (       a  [        U USSUUS9nUR                   V	V
s/ sHA  n	SR                  U	R                  R                   V
s/ sH  oR                  PM     sn
5      PMC     nn	n
UR                  U V	s/ sH  n	[        U	S9PM     sn	5        M  [        U 4U R                  USSUS.UD6n/ nUR                   H+  nUS   n[        U5      nUR                  [        US95        M-     UR                  U5        GM     [!        US	9$ s  sn
f s  sn
n	f s  sn	f )
N)stop_sequencesrH   rI   rJ   rK   candidate_countFT)r   r   r#   r   r    r?   )modelr   r   r#   r   output)generations)rH   rI   rJ   rK   rM   r#   r-   
candidatesjoincontentpartsr?   appendr   r1   rA   r   )rQ   promptsstopr   r$   rv   r   r   rescprw   prompt_generations	candidateraw_textstripped_texts                   r&   	_generateGooglePalm._generate   sn    /1"++ZZZZ!%!7!7#vv
 F~~+! " +&7 ILHV1BGGQYY__=_VV_=>   ""
#K
1JA$6
#KL+//! # + ( &("!$I(2H$CH$MM&--jm.LM "0 ""#56; > [11) > $Ls   2(E#E.E#E)
E#c              +     #    UR                  S0 5      nU(       a  X%S'   [        U U4SSUUS.UD6 HF  n[        UR                  S9nU(       a%  UR	                  UR                  UU R
                  S9  Uv   MH     g 7f)Nr   rp   T)r   r#   r   r   rs   )chunkverbose)r   r-   r   r?   on_llm_new_tokenr   )rQ   r   r}   r   r$   r   stream_respr   s           r&   _streamGooglePalm._stream   s      #JJ':B?26./0
 #/
 
K $)9)9:E,,$$ LL - 
 K!
s   A;A=c                    g)zReturn type of llm.r]   r   rP   s    r&   	_llm_typeGooglePalm._llm_type   s     r)   c                    U R                   (       a  [        S5      eU R                  R                  U R                  US9nUS   $ )zGet 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!)rt   r   token_count)r#   rj   r    count_text_tokensr1   )rQ   r?   results      r&   get_num_tokensGooglePalm.get_num_tokens   s?     >>DEE..T__T.Rm$$r)   r   )r+   r*   )r+   zDict[str, str])r+   	List[str])rk   r   r+   r   )NN)
r|   r   r}   Optional[List[str]]r   "Optional[CallbackManagerForLLMRun]r$   r   r+   r   )
r   rF   r}   r   r   r   r$   r   r+   zIterator[GenerationChunk])r+   rF   )r?   rF   r+   rL   )__name__
__module____qualname____firstlineno____doc____annotations__r1   rH   rI   rJ   rK   rM   r   propertyr#   rU   classmethodrX   r_   r   rm   r   r   r   r   __static_attributes__r   r)   r&   r   r   >   sr    K''-J-K!E?!XE='+}+(AsJIK@1 1 4 4   4 4 $ $R %):>	/2/2 "/2 8	/2
 /2 
/2h %):>	 " 8	
  
#8  %r)   )FFN)r%   r   r   r   r#   r*   r   r*   r   r   r$   r   r+   r   )r1   rF   r+   r*   )r?   rF   r+   rF   ) 
__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-   r2   rA   r   r   r)   r&   <module>r      s    " 6 6 6 = = I I ? ) , I 6:	  	
 4  	:"
 H)TUv%) v% Vv%r)   