§
    šŠtj.  ã                   óf  — d dl Z d dlZd dlmZ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 d dlmZmZ d dl	mZmZmZ d dlmZmZmZmZmZ d d	lmZ d
Z dZ! ej"        e#¦  «        Z$ G d„ de¦  «        Z%e › e!› �dfde%de&de&dee         def
d„Z'de%deegef         fd„Z(de%dedefd„Z)dS )é    N)ÚAnyÚCallableÚDictÚListÚMappingÚOptional)ÚCallbackManagerForLLMRun)ÚLLM)Úconvert_to_secret_strÚget_from_dict_or_envÚpre_init)Ú
ConfigDictÚ	SecretStr)ÚConnectTimeoutÚReadTimeoutÚRequestException)Úbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponential©Úenforce_stop_tokenszhttps://api-nebula.symbl.aiz/v1/model/generatec                   ó¶  — e Zd ZU dZ	 dZee         ed<   	 dZee	         ed<   dZ
ee	         ed<   dZee         ed<   dZee	         ed<   dZee         ed	<   d
Zee         ed<   dZee         ed<   dZee         ed<   dZee         ed<   dZeee	                  ed<   dZee         ed<    ed¬¦  «        Zededefd„¦   «         Zedee	ef         fd„¦   «         Zede e	ef         fd„¦   «         Z!ede	fd„¦   «         Z"deee	                  dedefd„Z#e$ded ee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 )&ÚNebulaa)  Nebula Service models.

    To use, you should have the environment variable ``NEBULA_SERVICE_URL``,
    ``NEBULA_SERVICE_PATH`` and ``NEBULA_API_KEY`` set with your Nebula
    Service, or pass it as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.llms import Nebula

            nebula = Nebula(
                nebula_service_url="NEBULA_SERVICE_URL",
                nebula_service_path="NEBULA_SERVICE_PATH",
                nebula_api_key="NEBULA_API_KEY",
            )
    NÚmodel_kwargsÚnebula_service_urlÚnebula_service_pathÚnebula_api_keyÚmodelé€   Úmax_new_tokensg333333ã?Útemperaturegffffffî?Útop_pg      ð?Úrepetition_penaltyé   Útop_kÚstop_sequencesé
   Úmax_retriesÚforbid)ÚextraÚvaluesÚreturnc                 ó0  — t          |ddt          ¦  «        }t          |ddt          ¦  «        }t          t          |ddd¦  «        ¦  «        }|                     d¦  «        r
|dd	…         }|                     d¦  «        sd|z   }||d<   ||d<   ||d<   |S )
z?Validate that api key and python package exists in environment.r   ÚNEBULA_SERVICE_URLr   ÚNEBULA_SERVICE_PATHr   ÚNEBULA_API_KEYNú/éÿÿÿÿ)r   ÚDEFAULT_NEBULA_SERVICE_URLÚDEFAULT_NEBULA_SERVICE_PATHr   ÚendswithÚ
startswith)Úclsr-   r   r   r   s        úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/symblai_nebula.pyÚvalidate_environmentzNebula.validate_environmentC   sÑ   € õ 2ØØ Ø Ý&ñ	
ô 
Ðõ 3ØØ!Ø!Ý'ñ	
ô 
Ðõ /Ý  Ð)9Ð;KÈTÑRÔRñ
ô 
ˆð ×&Ò& sÑ+Ô+ð 	9Ø!3°C°R°CÔ!8ÐØ"×-Ò-¨cÑ2Ô2ð 	<Ø"%Ð(;Ñ";Ðà'9ˆÐ#Ñ$Ø(;ˆÐ$Ñ%Ø#1ˆÐÑ àˆó    c                 óD   — | j         | j        | j        | j        | j        dœS )z2Get the default parameters for calling Cohere API.©r"   r#   r'   r$   r%   r>   ©Úselfs    r:   Ú_default_paramszNebula._default_paramsa   s/   € ð #Ô1ØÔ+Ø”ZØ”ZØ"&Ô"9ð
ð 
ð 	
r<   c                 ó:   — | j         pi }| j        | j        dœd|i¥S )zGet the identifying parameters.)r   r   r   )r   r   r   )r@   Ú_model_kwargss     r:   Ú_identifying_paramszNebula._identifying_paramsl   s;   € ð Ô)Ð/¨Rˆà"&Ô"9Ø#'Ô#;ð
ð 
ð ˜}Ð-ð
ð 	
r<   c                 ó   — dS )zReturn type of llm.Únebula© r?   s    r:   Ú	_llm_typezNebula._llm_typev   s	   € ð ˆxr<   Úkwargsc                 óz   — | j         }| j        �|�t          d¦  «        ‚| j        �| j        |d<   n||d<   i |¥|¥S )Nz2`stop` found in both the input and default params.r(   )rA   r(   Ú
ValueError)r@   r(   rI   Úparamss       r:   Ú_invocation_paramszNebula._invocation_params{   s^   € ð Ô%ˆØÔÐ*¨~Ð/IÝÐQÑRÔRÐRØÔ Ð,Ø'+Ô':ˆFÐ#Ñ$Ð$à'5ˆFÐ#Ñ$Ø#�&Ð#˜FÐ#Ð#r<   ÚresponseÚstopc                 óF   — | d         d         }|rt          ||¦  «        }|S )NÚoutputÚtextr   )rN   rO   rR   s      r:   Ú_process_responsezNebula._process_response‡   s-   € à˜Ô! &Ô)ˆØð 	3Ý& t¨TÑ2Ô2ˆDØˆr<   ÚpromptÚrun_managerc                 óÞ   —  | j         |fi |¤Ž}|                     ¦   «         }t          | ||| j        › | j        › �¬¦  «        }|                     d¦  «        }|                      ||¦  «        S )aa  Call out to Nebula Service 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 = nebula("Tell me a joke.")
        )rT   rL   Úurlr(   )rM   ÚstripÚcompletion_with_retryr   r   ÚgetrS   )r@   rT   rO   rU   rI   rL   rN   Ú_stops           r:   Ú_callzNebula._callŽ   s†   € ð" )�Ô(¨Ð8Ð8°Ð8Ð8ˆØ—’‘”ˆå(ØØØØÔ*ÐF¨DÔ,DÐFÐFð	
ñ 
ô 
ˆð —
’
Ð+Ñ,Ô,ˆØ×%Ò% h°Ñ6Ô6Ð6r<   )NN)(Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚdictÚ__annotations__r   Ústrr   r   r   r    r"   Úintr#   Úfloatr$   r%   r'   r(   r   r*   r   Úmodel_configr   r   r;   Úpropertyr   rA   r   rD   rH   rM   ÚstaticmethodrS   r	   r\   rG   r<   r:   r   r      sÂ  € € € € € € ðð ð$ LØ#'€L�(˜4”.Ð'Ð'Ñ'àà(,Ð˜ œÐ,Ð,Ñ,Ø)-Ð˜ #œÐ-Ð-Ñ-Ø*.€N�H˜YÔ'Ð.Ð.Ñ.Ø€Eˆ8�CŒ=ÐÐÑØ$'€N�H˜S”MÐ'Ð'Ñ'Ø#&€K�˜%”Ð&Ð&Ñ&Ø!€Eˆ8�EŒ?Ð!Ð!Ñ!Ø*-Ð˜ œÐ-Ð-Ñ-Ø€Eˆ8�CŒ=ÐÐÑØ*.€N�H˜T #œYÔ'Ð.Ð.Ñ.Ø!#€K�˜#”Ð#Ð#Ñ#à�:Øðñ ô €Lð ð¨$ð °4ð ð ð ñ „Xðð: ð
  c¨3 h¤ð 
ð 
ð 
ñ „Xð
ð ð
 W¨S°#¨XÔ%6ð 
ð 
ð 
ñ „Xð
ð ð˜3ð ð ð ñ „Xðð
$Ø& t¨C¤yÔ1ð
$Ø=@ð
$à	ð
$ð 
$ð 
$ð 
$ð ð Cð ¨x¸¸S¼	Ô/Bð Àsð ð ð ñ „\ðð %)Ø:>ð	7ð 7àð7ð �t˜C”yÔ!ð7ð Ð6Ô7ð	7ð
 ð7ð 
ð7ð 7ð 7ð 7ð 7ð 7r<   r   r@   rT   rW   rL   r.   c                 óT  — |pi }d}| j         �| j                              ¦   «         }d|› dœ}d|i}|                     ¦   «         D ]
\  }}|||<   Œt          j        |||¬¦  «        }	|	j        dk    rt          d|	j        › d|	j        › �¦  «        ‚t          j	        |	j        ¦  «        S )	zGenerate text from the model.Nzapplication/json)zContent-TypeÚApiKeyrT   )ÚheadersÚjsonéÈ   z Request failed with status code z and message )
r   Úget_secret_valueÚitemsÚrequestsÚpostÚstatus_codeÚ	ExceptionrR   rl   Úloads)
r@   rT   rW   rL   Úapi_keyrk   ÚbodyÚkeyÚvaluerN   s
             r:   Úmake_requestry   ¬   sæ   € ð ˆ\�r€FØ€GØÔÐ&ØÔ%×6Ò6Ñ8Ô8ˆà*Ø�,ðð €Gð
 �fÐ€Dð —l’l‘n”nð ð ‰
ˆˆUØˆˆS‰	ˆ	õ Œ}˜S¨'¸Ð=Ñ=Ô=€HàÔ˜sÒ"Ð"Ýð,¨xÔ/Cð ,ð ,Ø$œMð,ð ,ñ
ô 
ð 	
õ
 Œ:�h”mÑ$Ô$Ð$r<   Úllmc           
      ó  — d}d}| j         �| j         nd}t          dt          |¦  «        t          d||¬¦  «        t	          t
          t          t          f¦  «        t          t          t          j        ¦  «        ¬¦  «        S )Né   r)   é   Tr&   )Ú
multiplierÚminÚmax)ÚreraiserO   Úwaitr   Úbefore_sleep)r*   r   r   r   r   r   r   r   r   ÚloggerÚloggingÚWARNING)rz   Úmin_secondsÚmax_secondsr*   s       r:   Ú_create_retry_decoratorr‰   Î   sy   € Ø€KØ€Kð &)¤_Ð%@�#”/�/Àa€KÝØÝ Ñ,Ô,Ý¨°ÀÐMÑMÔMå#Õ%5µ~Å{Ð$SÑTÔTå%¥f­g¬oÑ>Ô>ðñ ô ð r<   rI   c                 ój   ‡ — t          ‰ ¦  «        }|dt          dt          fˆ fd„¦   «         } |di |¤ŽS )z*Use tenacity to retry the completion call.Ú_kwargsr.   c                  ó   •— t          ‰fi | ¤ŽS )N)ry   )r‹   rz   s    €r:   Ú_completion_with_retryz5completion_with_retry.<locals>._completion_with_retryã   s   ø€ å˜CÐ+Ð+ 7Ð+Ð+Ð+r<   rG   )r‰   r   )rz   rI   Úretry_decoratorr�   s   `   r:   rY   rY   ß   s_   ø€ å-¨cÑ2Ô2€Oàð,­#ð ,µ#ð ,ð ,ð ,ð ,ð ,ñ „_ð,ð "Ð!Ð+Ð+ FÐ+Ð+Ð+r<   )*rl   r…   Útypingr   r   r   r   r   r   rp   Úlangchain_core.callbacksr	   Ú#langchain_core.language_models.llmsr
   Úlangchain_core.utilsr   r   r   Úpydanticr   r   r   r   r   Útenacityr   r   r   r   r   Úlangchain_community.llms.utilsr   r5   r6   Ú	getLoggerr]   r„   r   rc   ry   r‰   rY   rG   r<   r:   ú<module>r—      s3  ðØ €€€Ø €€€Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?à €€€Ø =Ð =Ð =Ð =Ð =Ð =Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ð ð ð ð ð ð ð ?Ð >Ð >Ð >Ð >Ð >à:Ð Ø2Ð à	ˆÔ	˜8Ñ	$Ô	$€ðN7ð N7ð N7ð N7ð N7ˆSñ N7ô N7ð N7ðh -ÐKÐ.IÐKÐKØ!ð	%ð %Ø
ð%àð%ð 
ð%ð �TŒNð	%ð
 	ð%ð %ð %ð %ðD ð ¨H°c°U¸C°ZÔ,@ð ð ð ð ð",˜vð ,°ð ,¸ð ,ð ,ð ,ð ,ð ,ð ,r<   