§
    šŠtjG  ã                   óº   — 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 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ÚIteratorÚListÚMappingÚOptional)ÚCallbackManagerForLLMRun)ÚLLM)ÚGenerationChunk)Úget_from_dict_or_envÚpre_init)Úenforce_stop_tokensc                   óÀ  — e Zd ZU dZ	 eed<   	 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d<   	 dZee         ed<   dZee         ed<   ededefd„¦   «         Zedefd„¦   «         Zedeeef         fd„¦   «         Zedeeef         fd„¦   «         Zdeee                  dedefd„Zededeee                  d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!i fded"edefd#„Z"	 	 d%dedeee                  dee          dede#e$         f
d$„Z%dS )&ÚPaiEasEndpointam  Langchain LLM class to help to access eass llm service.

        To use this endpoint, must have a deployed eas chat llm service on PAI AliCloud.
    One can set the environment variable ``eas_service_url`` and ``eas_service_token``.
    The environment variables can set with your eas service url and service token.

    Example:
        .. code-block:: python

            from langchain_community.llms.pai_eas_endpoint import PaiEasEndpoint
            eas_chat_endpoint = PaiEasChatEndpoint(
                eas_service_url="your_service_url",
                eas_service_token="your_service_token"
            )
    Úeas_service_urlÚeas_service_tokeni   Úmax_new_tokensgffffffî?Útemperaturegš™™™™™¹?Útop_pr   Útop_kNÚstop_sequencesFÚ	streamingÚmodel_kwargsz2.0ÚversionÚvaluesÚreturnc                 óV   — t          |dd¦  «        |d<   t          |dd¦  «        |d<   |S )z?Validate that api key and python package exists in environment.r   ÚEAS_SERVICE_URLr   ÚEAS_SERVICE_TOKEN)r   )Úclsr   s     úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/pai_eas_endpoint.pyÚvalidate_environmentz#PaiEasEndpoint.validate_environment6   sI   € õ %9ØÐ%Ð'8ñ%
ô %
ˆÐ Ñ!õ ';ØÐ'Ð)<ñ'
ô '
ˆÐ"Ñ#ð ˆó    c                 ó   — dS )zReturn type of llm.Úpai_eas_endpoint© ©Úselfs    r!   Ú	_llm_typezPaiEasEndpoint._llm_typeB   s
   € ð "Ð!r#   c                 ó:   — | j         | j        | j        | j        g dœS )z2Get the default parameters for calling Cohere API.)r   r   r   r   r   )r   r   r   r   r'   s    r!   Ú_default_paramszPaiEasEndpoint._default_paramsG   s,   € ð #Ô1ØÔ+Ø”ZØ”ZØ ð
ð 
ð 	
r#   c                 ó6   — | j         pi }| j        | j        dœ|¥S )zGet the identifying parameters.)r   r   )r   r   r   )r(   Ú_model_kwargss     r!   Ú_identifying_paramsz"PaiEasEndpoint._identifying_paramsR   s6   € ð Ô)Ð/¨Rˆà#Ô3Ø!%Ô!7ð
ð 
ð ð
ð 	
r#   Úkwargsc                 ó¼   — | j         }| j        �|�t          d¦  «        ‚| j        �| j        |d<   n||d<   | j        r|                     | j        ¦  «         i |¥|¥S )Nz2`stop` found in both the input and default params.Ústop)r+   r   Ú
ValueErrorr   Úupdate)r(   r   r/   Úparamss       r!   Ú_invocation_paramsz!PaiEasEndpoint._invocation_params\   sy   € ð Ô%ˆØÔÐ*¨~Ð/IÝÐQÑRÔRÐRØÔ Ð,Ø!Ô0ˆF�6‰NˆNà+ˆF�6‰NØÔð 	-Ø�MŠM˜$Ô+Ñ,Ô,Ð,Ø#�&Ð#˜FÐ#Ð#r#   Úresponser1   c                 ór   — |dk    r| }n| d         }|rt          ||¦  «        }d                     |¦  «        S )Nú1.0r6   Ú )r   Újoin)r6   r1   r   Útexts       r!   Ú_process_responsez PaiEasEndpoint._process_responsej   sG   € ð �eÒÐØˆDˆDà˜JÔ'ˆDàð 	3Ý& t¨TÑ2Ô2ˆDØ�wŠw�t‰}Œ}Ðr#   ÚpromptÚrun_managerc                 ór  —  | j         |fi |¤Ž}|                     ¦   «         }d }	 | j        r!d} | j        |||fi |¤ŽD ]}||j        z  }Œ|S |                      ||¦  «        }|                     d¦  «        }	|                      ||	| j        ¦  «        S # t          $ r}
t          d|
› �¦  «        ‚d }
~
ww xY w)Nr9   r1   zError raised by the service: )r5   Ústripr   Ú_streamr;   Ú	_call_easÚgetr<   r   Ú	Exceptionr2   )r(   r=   r1   r>   r/   r4   r6   Ú
completionÚchunkÚ_stopÚerrors              r!   Ú_callzPaiEasEndpoint._callw   sù   € ð )�Ô(¨Ð8Ð8°Ð8Ð8ˆØ—’‘”ˆØˆð	FØŒ~ð MØ�
Ø)˜Tœ\¨&°$¸ÐNÐNÀvÐNÐNð -ð -�EØ %¤*Ñ,�J�JØ!Ð!àŸ>š>¨&°&Ñ9Ô9�ØŸ
š
 6Ñ*Ô*�Ø×-Ò-¨h¸¸t¼|ÑLÔLÐLøÝð 	Fð 	Fð 	FÝÐD¸UÐDÐDÑEÔEÐEøøøøð	Føøøs   ¦'B ÁAB Â
B6ÂB1Â1B6r9   r4   c                 óÀ  — d| j         › dœ}| j        dk    rd|› i}nd|› i}|                     ¦   «         D ]
\  }}|||<   Œt          j        | j        ||¬¦  «        }|j        dk    rt          d|j        › d	|j        › �¦  «        ‚	 t          j
        |j        ¦  «        S # t          $ r2}t          |t          j        j        ¦  «        r|j        cY d
}~S |‚d
}~ww xY w)z#Generate text from the eas service.zapplication/json)zContent-TypeÚAuthorizationr8   Ú	input_idsr=   )ÚheadersÚjsonéÈ   z Request failed with status code z and message N)r   r   ÚitemsÚrequestsÚpostr   Ústatus_coderD   r;   rN   ÚloadsÚ
isinstanceÚdecoderÚJSONDecodeError)	r(   r=   r4   rM   ÚbodyÚkeyÚvaluer6   Úes	            r!   rB   zPaiEasEndpoint._call_easŽ   s:  € ð /Ø $Ô 6Ð8ð
ð 
ˆð Œ<˜5Ò Ð à ˜[ðˆDˆDð
 ˜V˜+ðˆDð
 !Ÿ,š,™.œ.ð 	ð 	‰JˆC�ØˆD�‰IˆIõ ”= Ô!5¸wÈTÐRÑRÔRˆàÔ 3Ò&Ð&Ýð0°8Ô3Gð 0ð 0Ø (¤ð0ð 0ñô ð ð
	Ý”:˜hœmÑ,Ô,Ð,øÝð 	ð 	ð 	Ý˜!�Tœ\Ô9Ñ:Ô:ð %Ø”}Ð$Ð$Ð$Ð$Ð$Ð$ØˆGøøøøð	øøøs$   ÂB! Â!
CÂ+%CÃCÃCÃCc              +   óÂ  K  —  | j         |fi |¤Ž}d| j        › dœ}| j        dk    rZd|i|¥}t          j        | j        ||d¬¦  «        }t          |j        ¬¦  «        }	|r|                     |	j        ¦  «         |	V — d S |dd	œ|¥}t          j        | j        ||d¬¦  «        }| 	                    d
dd¬¦  «        D ]¡}
|
r�t          j        |
                     d¦  «        ¦  «        }|d         }d }|d         D ]}||v r|}Œ	d }|r|d |                     |¦  «        …         }n|}|r0t          |¬¦  «        }	|r|                     |	j        ¦  «         |	V — |r d S Œ¢d S )NzTest Client)z
User-AgentrK   r8   rL   T)rM   rN   Ústream)r;   ÚTrue)r=   Úuse_stream_chati    Fó    )Ú
chunk_sizeÚdecode_unicodeÚ	delimiterzutf-8r6   r1   )r5   r   r   rQ   rR   r   r   r;   Úon_llm_new_tokenÚ
iter_linesrN   rT   ÚdecodeÚindex)r(   r=   r1   r>   r/   Úinvocation_paramsrM   Úploadr6   ÚresrF   ÚdataÚoutputÚstop_seq_foundÚstop_seqr;   s                   r!   rA   zPaiEasEndpoint._stream±   s
  è è € ð 4˜DÔ3°DÐCÐC¸FÐCÐCÐð (Ø $Ô 6Ð8ð
ð 
ˆð
 Œ<˜5Ò Ð Ø  &Ð>Ð,=Ð>ˆEÝ”}ØÔ$¨g¸EÈ$ðñ ô ˆHõ " x¤}Ð5Ñ5Ô5ˆCàð 7Ø×,Ò,¨S¬XÑ6Ô6Ð6ð ˆIˆIˆIˆIˆIà%¸&ÐVÐVÐDUÐVˆEå”}ØÔ$¨g¸EÈ$ðñ ô ˆHð "×,Ò,Ø°Àð -ñ ô ð ð �ð ð Ýœ: e§l¢l°7Ñ&;Ô&;Ñ<Ô<�DØ! *Ô-�Fà48�NØ$5°fÔ$=ð 6ð 6˜Ø# vÐ-Ð-Ø-5˜Nøð +/�DØ%ð &Ø%Ð&D¨¯ª°^Ñ(DÔ(DÐ&DÔE˜˜à%˜ð ð "Ý-°4Ð8Ñ8Ô8˜Ø&ð CØ'×8Ò8¸¼ÑBÔBÐBØ!˜	˜	˜	ð &ð Ø˜˜øð9ð r#   )NN)&Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r   r   Úintr   Úfloatr   r   r   r   r   Úboolr   Údictr   r   r   r"   Úpropertyr)   r   r+   r   r.   r5   Ústaticmethodr<   r	   rI   rB   r   r   rA   r&   r#   r!   r   r      s#  € € € € € € ðð ð  ØÐÐÑàØÐÐÑà&Ø$'€N�H˜S”MÐ'Ð'Ñ'Ø#'€K�˜%”Ð'Ð'Ñ'Ø €Eˆ8�EŒ?Ð Ð Ñ Ø€Eˆ8�CŒ=ÐÐÑØ*.€N�H˜T #œYÔ'Ð.Ð.Ñ.à"Ø€IˆtÐÐÑàKØ#'€L�(˜4”.Ð'Ð'Ñ'à"€GˆX�cŒ]Ð"Ð"Ñ"àð	¨$ð 	°4ð 	ð 	ð 	ñ „Xð	ð ð"˜3ð "ð "ð "ñ „Xð"ð ð
  c¨3 h¤ð 
ð 
ð 
ñ „Xð
ð ð
 W¨S°#¨XÔ%6ð 
ð 
ð 
ñ „Xð
ð$Ø& t¨C¤yÔ1ð$Ø=@ð$à	ð$ð $ð $ð $ð ð
Øð
Ø% d¨3¤iÔ0ð
Ø;CÀC¼=ð
à	ð
ð 
ð 
ñ „\ð
ð %)Ø:>ð	Fð FàðFð �t˜C”yÔ!ðFð Ð6Ô7ð	Fð
 ðFð 
ðFð Fð Fð Fð. ')¸ð !ð ! ð !°$ð !Àð !ð !ð !ð !ðL %)Ø:>ð	>ð >àð>ð �t˜C”yÔ!ð>ð Ð6Ô7ð	>ð
 ð>ð 
�/Ô	"ð>ð >ð >ð >ð >ð >r#   r   )rN   ÚloggingÚtypingr   r   r   r   r   r   rQ   Úlangchain_core.callbacksr	   Ú#langchain_core.language_models.llmsr
   Úlangchain_core.outputsr   Úlangchain_core.utilsr   r   Úlangchain_community.llms.utilsr   Ú	getLoggerro   Úloggerr   r&   r#   r!   ú<module>r„      s   ðØ €€€Ø €€€Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?à €€€Ø =Ð =Ð =Ð =Ð =Ð =Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?à >Ð >Ð >Ð >Ð >Ð >à	ˆÔ	˜8Ñ	$Ô	$€ð_ð _ð _ð _ð _�Sñ _ô _ð _ð _ð _r#   