
    Ng|"                       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        `/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/google_palm.py_completion_with_retryz5completion_with_retry.<locals>._completion_with_retry   sk     #JJ':B?? 	:..BS /    (sz'@@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 )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  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X4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X4::dCSCSTUTVTVCWXXXXX ||E4(((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OONO333
++ )#(#8#8J#8#O#Ox  #(x  	 	 	L  	 - ,Q&:O5T5T5T5TST5T5T5T5TJKKK'?&qF7O/H/H/H/Hq/H/H/H/HDEEE'?&6'?a+?+?5666%&2v>Q7RVW7W7W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    ===QV===r+   )joincontentpartsr8   cs     r)   ru   z(GooglePalm._generate.<locals>.<listcomp>   sD       CDBGG==QY_===>>  r+   c                .    g | ]}t          |           S )rs   )r   ry   s     r)   ru   z(GooglePalm._generate.<locals>.<listcomp>   s#    #K#K#K1JA$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 	7F~ 7+! " +&7   HK  
 ""#K#K
#K#K#KLLLL+/! # +  (  &("!$ N NI(2H$CH$M$MM&--jm.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       #JJ':B?? 	726./0
 #/
 
 
 
 	 	K $)9:::E ,,$ L -   
 KKKK!	 	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          KKK''''-J----K!E!!!!XE'+++++(AJJJJIK@1 1 1 X1 4 4 4 X4    [ 4 4 4 [4 $ $ $ X$R %):>	/2 /2 /2 /2 /2h %):>	    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+   