
    dhq                         S SK r S SKrS SKJrJrJrJrJr  S SK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JrJr  S SKJr  \ R0                  " \5      r " S S	\5      rg)
    N)AnyDictListMappingOptional)CallbackManagerForLLMRun)LLM)convert_to_secret_strget_from_dict_or_envpre_init)
ConfigDictField	SecretStrmodel_validator)enforce_stop_tokensc                   2   \ rS rSr% SrSr\\S'    \" \	S9r
\\\4   \S'    Sr\\   \S'   \" S	S
9r\" SS9\S\\\4   S\4S j5       5       r\S\S\4S j5       r\S\\\4   4S j5       r\S\4S j5       r  SS\S\\\      S\\   S\S\4
S jjrSrg)StochasticAI   a  StochasticAI large language models.

To use, you should have the environment variable ``STOCHASTICAI_API_KEY``
set with your API key.

Example:
    .. code-block:: python

        from langchain_community.llms import StochasticAI
        stochasticai = StochasticAI(api_url="")
 api_url)default_factorymodel_kwargsNstochasticai_api_keyforbid)extrabefore)modevaluesreturnc                 @   [        [        U R                  R                  5       5      5      nUR	                  S0 5      n[        U5       HL  nXB;  d  M
  XC;   a  [        SU S35      e[        R                  U SU S35        UR                  U5      X4'   MN     X1S'   U$ )z>Build extra kwargs from additional params that were passed in.r   zFound z supplied twice.zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.)	setlistmodel_fieldskeysget
ValueErrorloggerwarningpop)clsr   all_required_field_namesr   
field_names        ]/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/llms/stochasticai.pybuild_extraStochasticAI.build_extra*   s     $'tC,<,<,A,A,C'D#E 

>2.v,J9&$vj\9I%JKK# %))34JN %+JJz$:! ' "'~    c                 :    [        [        USS5      5      nX!S'   U$ )z,Validate that api key exists in environment.r   STOCHASTICAI_API_KEY)r
   r   )r*   r   r   s      r-   validate_environment!StochasticAI.validate_environment=   s-      5 )?AWX 
 *>%&r0   c                 >    0 SU R                   0ESU R                  0E$ )zGet the identifying parameters.endpoint_urlr   )r   r   selfs    r-   _identifying_params StochasticAI._identifying_paramsF   s0    
t||,
t001
 	
r0   c                     g)zReturn type of llm.stochasticai r7   s    r-   	_llm_typeStochasticAI._llm_typeN   s     r0   promptstoprun_managerkwargsc                 P   U R                   =(       d    0 n0 UEUEn[        R                  " U R                  XS.U R                  R                  5        SSS.S9nUR                  5         UR                  5       nSnU(       d  [        R                  " US   S   U R                  R                  5        SSS.S9n	U	R                  5         U	R                  5       S   n
U
R                  S	5      nUS
Ln[        R                  " S5        U(       d  M  WS   nUb  [        X5      nU$ )a,  Call out to StochasticAI's complete endpoint.

Args:
    prompt: The prompt to pass into the model.
    stop: Optional list of stop words to use when generating.

Returns:
    The string generated by the model.

Example:
    .. code-block:: python

        response = StochasticAI("Tell me a joke.")
)r@   paramszapplication/json)apiKeyAcceptzContent-Type)urljsonheadersFdataresponseUrl)rH   rJ   
completionNg      ?r   )r   requestspostr   r   get_secret_valueraise_for_statusrI   r%   timesleepr   )r8   r@   rA   rB   rC   rE   response_postresponse_post_json	completedresponse_getresponse_get_jsontexts               r-   _callStochasticAI._callS   s.   * ""(b%F%f% "5!66GGIJ, 2
 	&&(*//1	#<<&v.}=!%!:!:!K!K!M N0$6L ))+ , 1 1 3F ;$((6DD(IJJsO ) Aw 't2Dr0   r=   )NN)__name__
__module____qualname____firstlineno____doc__r   str__annotations__r   dictr   r   r   r   r   r   r   model_configr   classmethodr.   r   r3   propertyr   r9   r>   r   r   rZ   __static_attributes__r=   r0   r-   r   r      s:   
 GS#(#>L$sCx.> 15(9-4L (#c3h C   $" $ 4   
WS#X%6 
 
 3   %):>	66 tCy!6 67	6
 6 
6 6r0   r   )loggingrR   typingr   r   r   r   r   rN   langchain_core.callbacksr   #langchain_core.language_models.llmsr	   langchain_core.utilsr
   r   r   pydanticr   r   r   r   langchain_community.llms.utilsr   	getLoggerr\   r'   r   r=   r0   r-   <module>rp      sG      5 5  = 3 V V B B >			8	$y3 yr0   