§
    æ˜ºhp  ã                   óÂ   — d dl Z d dlZd dlmZmZmZmZmZ d dlZd dl	m
Z
 d dlmZ d dlmZmZmZmZ d dlmZmZ d dlmZ  e j        e¦  «        Z G d„ d	e¦  «        ZdS )
é    N)ÚAnyÚDictÚListÚMappingÚOptional)ÚCallbackManagerForLLMRun)ÚLLM)ÚExtraÚFieldÚ	SecretStrÚroot_validator©Úconvert_to_secret_strÚget_from_dict_or_env)Úenforce_stop_tokensc                   óž  — e Zd ZU dZdZeed<   	  ee¬¦  «        Z	e
eef         ed<   	 dZee         ed<    G d„ d	¦  «        Z ed
¬¦  «        de
eef         de
eef         fd„¦   «         Z e¦   «         de
de
fd„¦   «         Zedeeef         fd„¦   «         Zedefd„¦   «         Z	 	 ddedeee                  dee         dedef
d„ZdS )ÚStochasticAIa2  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_keyc                   ó    — e Zd ZdZej        ZdS )úStochasticAI.Configz'Configuration for this pydantic object.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   ÚforbidÚextra© ó    úm/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/llms/stochasticai.pyÚConfigr   &   s   € € € € € Ø5Ð5à”ˆˆˆr"   r$   T)ÚpreÚvaluesÚreturnc                 óL  — d„ | j                              ¦   «         D ¦   «         }|                     di ¦  «        }t          |¦  «        D ]U}||vrO||v rt	          d|› d�¦  «        ‚t
                               |› d|› d�¦  «         |                     |¦  «        ||<   ŒV||d<   |S )z>Build extra kwargs from additional params that were passed in.c                 ó   — h | ]	}|j         ’Œ
S r!   )Úalias)Ú.0Úfields     r#   ú	<setcomp>z+StochasticAI.build_extra.<locals>.<setcomp>.   s   € Ð#UÐ#UÐ#U°E E¤KÐ#UÐ#UÐ#Ur"   r   zFound z supplied twice.zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.)Ú
__fields__r&   ÚgetÚlistÚ
ValueErrorÚloggerÚwarningÚpop)Úclsr&   Úall_required_field_namesr    Ú
field_names        r#   Úbuild_extrazStochasticAI.build_extra+   sâ   € ð $VÐ#U¸S¼^×=RÒ=RÑ=TÔ=TÐ#UÑ#UÔ#UÐ à—
’
˜>¨2Ñ.Ô.ˆÝ˜v™,œ,ð 	;ð 	;ˆJØÐ!9Ð9Ð9Ø Ð&Ð&Ý$Ð%J¨jÐ%JÐ%JÐ%JÑKÔKÐKÝ—’Ø#ð Nð NØ)3ðNð Nð Nñô ð ð %+§J¢J¨zÑ$:Ô$:��jÑ!øØ!&ˆˆ~ÑØˆr"   c                 óL   — t          t          |dd¦  «        ¦  «        }||d<   |S )z,Validate that api key exists in environment.r   ÚSTOCHASTICAI_API_KEYr   )r5   r&   r   s      r#   Úvalidate_environmentz!StochasticAI.validate_environment=   s7   € õ  5Ý  Ð)?ÐAWÑXÔXñ 
ô  
Ðð *>ˆÐ%Ñ&Øˆr"   c                 ó*   — i d| j         i¥d| j        i¥S )zGet the identifying parameters.Úendpoint_urlr   )r   r   ©Úselfs    r#   Ú_identifying_paramsz StochasticAI._identifying_paramsF   s+   € ð
Ø˜tœ|Ð,ð
à˜tÔ0Ð1ð
ð 	
r"   c                 ó   — dS )zReturn type of llm.Ústochasticair!   r>   s    r#   Ú	_llm_typezStochasticAI._llm_typeN   s	   € ð ˆ~r"   ÚpromptÚstopÚrun_managerÚkwargsc                 ó\  — | j         pi }i |¥|¥}t          j        | j        ||dœ| j                             ¦   «         › dddœ¬¦  «        }|                     ¦   «          |                     ¦   «         }d}|s›t          j        |d         d         | j                             ¦   «         › dddœ¬¦  «        }	|	                     ¦   «          |	                     ¦   «         d         }
|
                     d	¦  «        }|d
u}t          j
        d¦  «         |¯›|d         }|�t          ||¦  «        }|S )at  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.")
        )rD   Úparamszapplication/json)ÚapiKeyÚAcceptzContent-Type)ÚurlÚjsonÚheadersFÚdataÚresponseUrl)rL   rN   Ú
completionNg      à?r   )r   ÚrequestsÚpostr   r   Úget_secret_valueÚraise_for_statusrM   r/   ÚtimeÚsleepr   )r?   rD   rE   rF   rG   rI   Úresponse_postÚresponse_post_jsonÚ	completedÚresponse_getÚresponse_get_jsonÚtexts               r#   Ú_callzStochasticAI._callS   sl  € ð* Ô"Ð( bˆØ%�FÐ%˜fÐ%ˆÝ œØ”Ø"¨fÐ5Ð5à!Ô6×GÒGÑIÔIÐKØ,Ø 2ðð ð
ñ 
ô 
ˆð 	×&Ò&Ñ(Ô(Ð(Ø*×/Ò/Ñ1Ô1ÐØˆ	Øð 	Ý#œ<Ø& vÔ.¨}Ô=à!%Ô!:×!KÒ!KÑ!MÔ!MÐOØ0Ø$6ðð ðñ ô ˆLð ×)Ò)Ñ+Ô+Ð+Ø ,× 1Ò 1Ñ 3Ô 3°FÔ ;ÐØ$×(Ò(¨Ñ6Ô6ˆDØ DÐ(ˆIÝŒJ�s‰OŒOˆOð ð 	ð �AŒwˆØÐõ ' t¨TÑ2Ô2ˆDØˆr"   )NN)r   r   r   r   r   ÚstrÚ__annotations__r   Údictr   r   r   r   r   r   r$   r   r8   r;   Úpropertyr   r@   rC   r   r   r^   r!   r"   r#   r   r      sÙ  € € € € € € ð
ð 
ð €GˆSÐÐÑØà#( 5¸Ð#>Ñ#>Ô#>€L�$�s˜C�x”.Ð>Ð>Ñ>ðð 15Ð˜( 9Ô-Ð4Ð4Ñ4ðð ð ð ð ñ ô ð ð
 €^˜ÐÑÔð  c¨3 h¤ð °D¸¸c¸´Nð ð ð ñ Ôðð" €^ÑÔð¨$ð °4ð ð ð ñ Ôðð ð
 W¨S°#¨XÔ%6ð 
ð 
ð 
ñ „Xð
ð ð˜3ð ð ð ñ „Xðð %)Ø:>ð	6ð 6àð6ð �t˜C”yÔ!ð6ð Ð6Ô7ð	6ð
 ð6ð 
ð6ð 6ð 6ð 6ð 6ð 6r"   r   )ÚloggingrV   Útypingr   r   r   r   r   rR   Úlangchain_core.callbacksr   Ú#langchain_core.language_models.llmsr	   Úlangchain_core.pydantic_v1r
   r   r   r   Úlangchain_core.utilsr   r   Úlangchain_community.llms.utilsr   Ú	getLoggerr   r2   r   r!   r"   r#   ú<module>rk      s  ðØ €€€Ø €€€Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à €€€Ø =Ð =Ð =Ð =Ð =Ð =Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ LÐ LÐ LÐ LÐ LÐ LÐ LÐ Là >Ð >Ð >Ð >Ð >Ð >à	ˆÔ	˜8Ñ	$Ô	$€ðyð yð yð yð y�3ñ yô yð yð yð yr"   