§
    šŠtjC7  ã                   ó®   — 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mZ d dlmZ d dlmZ d dlmZ  ej        e¦  «        Z G d„ de¦  «        ZdS )	é    N)ÚAnyÚAsyncIteratorÚDictÚIteratorÚListÚOptional)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚLLM)ÚGenerationChunk)ÚFieldc                   ó¾  — e Zd ZU dZeed<   	 dZee         ed<   	 dZee	         ed<   	  e
dd¬	¦  «        Z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d<   	 dZee         ed<   	 dZee         ed<   	  e
dd¬	¦  «        Zeed<   	  e
dd¬	¦  «        Ze	ed<   	  e
dd ¬	¦  «        Zeed <   	 d!Zee	         ed"<   	  e
dd#¬	¦  «        Zeed#<   	  e
dd$¬	¦  «        Zeed$<   	 g Z ee!e                  ed%<   	 dZ"eed&<   	 e#d'e$ee%f         fd(„¦   «         Z&e#d'e$ee%f         fd)„¦   «         Z'e#d'efd*„¦   «         Z(d4d+ee!e                  d'e$ee%f         fd,„Z)	 	 d5d-ed+ee!e                  d.ee*         d/e%d'ef
d0„Z+	 	 d5d-ed+ee!e                  d.ee,         d/e%d'ef
d1„Z-	 	 d5d-ed+ee!e                  d.ee*         d/e%d'e.e/         f
d2„Z0	 	 d5d-ed+ee!e                  d.ee,         d/e%d'e1e/         f
d3„Z2dS )6ÚTextGenaz  Text generation models from WebUI.

    To use, you should have the text-generation-webui installed, a model loaded,
    and --api added as a command-line option.

    Suggested installation, use one-click installer for your OS:
    https://github.com/oobabooga/text-generation-webui#one-click-installers

    Parameters below taken from text-generation-webui api example:
    https://github.com/oobabooga/text-generation-webui/blob/main/api-examples/api-example.py

    Example:
        .. code-block:: python

            from langchain_community.llms import TextGen
            llm = TextGen(model_url="http://localhost:8500")
    Ú	model_urlNÚpresetéú   Úmax_new_tokensTÚ	do_sample)ÚaliasgÍÌÌÌÌÌô?Útemperaturegš™™™™™¹?Útop_pé   Ú	typical_pr   Úepsilon_cutoffÚ
eta_cutoffgáz®Gáò?Úrepetition_penaltyé(   Útop_kÚ
min_lengthÚno_repeat_ngram_sizeÚ	num_beamsÚpenalty_alphaÚlength_penaltyFÚearly_stoppingéÿÿÿÿÚseedÚadd_bos_tokeni   Útruncation_lengthÚban_eos_tokenÚskip_special_tokensÚstopping_stringsÚ	streamingÚreturnc                 óL  — i d| j         “d| j        “d| j        “d| j        “d| j        “d| j        “d| j        “d| j        “d	| j        “d
| j	        “d| j
        “d| j        “d| j        “d| j        “d| j        “d| j        “d| j        “| j        | j        | j        | j        dœ¥S )z/Get the default parameters for calling textgen.r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r&   r'   )r(   r)   r*   r+   )r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r&   r'   r(   r)   r*   r+   ©Úselfs    ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/textgen.pyÚ_default_paramszTextGen._default_paramsv   s(  € ð
Ø˜dÔ1ð
à˜œð
ð ˜4Ô+ð
ð �T”Zð	
ð
 ˜œð
ð ˜dÔ1ð
ð ˜$œ/ð
ð ! $Ô"9ð
ð �T”Zð
ð ˜$œ/ð
ð # DÔ$=ð
ð ˜œð
ð ˜TÔ/ð
ð ˜dÔ1ð
ð ˜dÔ1ð
ð  �D”Ið!
ð" ˜TÔ/ð#
ð$ "&Ô!7Ø!Ô/Ø#'Ô#;Ø $Ô 5ð+
ð 
ð 
ð 	
ó    c                 ó&   — i d| j         i¥| j        ¥S )zGet the identifying parameters.r   )r   r2   r/   s    r1   Ú_identifying_paramszTextGen._identifying_params‘   s   € ð I�; ¤Ð/ÐH°4Ô3GÐHÐHr3   c                 ó   — dS )zReturn type of llm.Útextgen© r/   s    r1   Ú	_llm_typezTextGen._llm_type–   s	   € ð ˆyr3   Ústopc                 ó‚   — | j         r|�t          d¦  «        ‚| j        €| j        }n	d| j        i}| j         p|pg |d<   |S )a  
        Performs sanity check, preparing parameters in format needed by textgen.

        Args:
            stop (Optional[List[str]]): List of stop sequences for textgen.

        Returns:
            Dictionary containing the combined parameters.
        Nz2`stop` found in both the input and default params.r   r+   )r+   Ú
ValueErrorr   r2   )r0   r:   Úparamss      r1   Ú_get_parameterszTextGen._get_parameters›   sa   € ð Ô ð 	S TÐ%5ÝÐQÑRÔRÐRàŒ;ÐØÔ)ˆFˆFà ¤Ð,ˆFð &*Ô%:Ð%H¸dÐ%HÀbˆÐ!Ñ"àˆr3   ÚpromptÚrun_managerÚkwargsc                 ó‚  — | j         r#d} | j        d|||dœ|¤ŽD ]}||j        z  }Œ|}n”| j        › d�}|                      |¦  «        }	|	                     ¦   «         }
||
d<   t          j        ||
¬¦  «        }|j        dk    r'| 	                    ¦   «         d         d         d	         }nt          d
|› �¦  «         d}|S )áæ  Call the textgen web API and return the output.

        Args:
            prompt: The prompt to use for generation.
            stop: A list of strings to stop generation when encountered.

        Returns:
            The generated text.

        Example:
            .. code-block:: python

                from langchain_community.llms import TextGen
                llm = TextGen(model_url="http://localhost:5000")
                llm.invoke("Write a story about llamas.")
        Ú ©r?   r:   r@   ú/api/v1/generater?   ©ÚjsonéÈ   Úresultsr   ÚtextúERROR: response: r8   )r,   Ú_streamrK   r   r>   ÚcopyÚrequestsÚpostÚstatus_coderH   Úprint©r0   r?   r:   r@   rA   Úcombined_text_outputÚchunkÚresultÚurlr=   ÚrequestÚresponses               r1   Ú_callzTextGen._callµ   s   € ð. Œ>ð 	Ø#%Ð Ø%˜œð Ø D°kðð ØEKðð ð 3ð 3�ð %¨¬
Ñ2Ð$Ð$Ø)ˆFˆFð ”^Ð5Ð5Ð5ˆCØ×)Ò)¨$Ñ/Ô/ˆFØ—k’k‘m”mˆGØ &ˆG�HÑÝ”} S¨wÐ7Ñ7Ô7ˆHàÔ# sÒ*Ð*Ø!Ÿš™œ¨Ô3°AÔ6°vÔ>��åÐ4¨(Ð4Ð4Ñ5Ô5Ð5Ø�àˆr3   c              ‹   ó’  K  — | j         r)d} | j        d|||dœ|¤Ž2 3 d{V —†}||j        z  }Œ6 |}n”| j        › d�}|                      |¦  «        }	|	                     ¦   «         }
||
d<   t          j        ||
¬¦  «        }|j        dk    r'| 	                    ¦   «         d         d	         d
         }nt          d|› �¦  «         d}|S )rC   rD   rE   NrF   r?   rG   rI   rJ   r   rK   rL   r8   )r,   Ú_astreamrK   r   r>   rN   rO   rP   rQ   rH   rR   rS   s               r1   Ú_acallzTextGen._acallã   s$  è è € ð. Œ>ð 	Ø#%Ð Ø,˜tœ}ð  Ø D°kð ð  ØEKð ð  ð 3ð 3ð 3ð 3ð 3ð 3ð 3�eð %¨¬
Ñ2Ð$Ð$ð ð *ˆFˆFð ”^Ð5Ð5Ð5ˆCØ×)Ò)¨$Ñ/Ô/ˆFØ—k’k‘m”mˆGØ &ˆG�HÑÝ”} S¨wÐ7Ñ7Ô7ˆHàÔ# sÒ*Ð*Ø!Ÿš™œ¨Ô3°AÔ6°vÔ>��åÐ4¨(Ð4Ð4Ñ5Ô5Ð5Ø�àˆs   �/c              +   ó†  K  — 	 ddl }n# t          $ r t          d¦  «        ‚w xY wi |                      |¦  «        ¥|¥}| j        › d�}|                     ¦   «         }||d<   |                     ¦   «         }	|	                     |¦  «         |	                     t          j	        |¦  «        ¦  «         	 |	 
                    ¦   «         }
t          j        |
¦  «        }
|
d         dk    r9t          |
d	         d¬
¦  «        }|r|                     |j        ¬¦  «         |V — n"|
d         dk    r|	                     ¦   «          dS Œ�©a  Yields results objects as they are generated in real time.

        It also calls the callback manager's on_llm_new_token event with
        similar parameters to the OpenAI LLM class method of the same name.

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

        Returns:
            A generator representing the stream of tokens being generated.

        Yields:
            A dictionary like objects containing a string token and metadata.
            See text-generation-webui docs and below for more.

        Example:
            .. code-block:: python

                from langchain_community.llms import TextGen
                llm = TextGen(
                    model_url = "ws://localhost:5005"
                    streaming=True
                )
                for chunk in llm.stream("Ask 'Hi, how are you?' like a pirate:'",
                        stop=["'","
"]):
                    print(chunk, end='', flush=True)  # noqa: T201

        r   Nz9The `websocket-client` package is required for streaming.z/api/v1/streamr?   TÚeventÚtext_streamrK   )rK   Úgeneration_info)ÚtokenÚ
stream_end©Ú	websocketÚImportErrorr>   r   rN   Ú	WebSocketÚconnectÚsendrH   ÚdumpsÚrecvÚloadsr   Úon_llm_new_tokenrK   Úclose©r0   r?   r:   r@   rA   rf   r=   rW   rX   Úwebsocket_clientrV   rU   s               r1   rM   zTextGen._stream  s�  è è € ðH	ØÐÐÐÐøÝð 	ð 	ð 	ÝØKñô ð ð	øøøð
 :�D×(Ò(¨Ñ.Ô.Ð9°&Ð9ˆà”Ð/Ð/Ð/ˆà—+’+‘-”-ˆØ"ˆ�Ñà$×.Ò.Ñ0Ô0Ðà× Ò  Ñ%Ô%Ð%à×Ò�dœj¨Ñ1Ô1Ñ2Ô2Ð2ð	Ø%×*Ò*Ñ,Ô,ˆFÝ”Z Ñ'Ô'ˆFà�gŒ -Ò/Ð/Ý'Ø œØ$(ðñ ô �ð ð CØ×0Ò0°u´zÐ0ÑBÔBÐBØ����Ø˜” LÒ0Ð0Ø ×&Ò&Ñ(Ô(Ð(Ø�ð	ó   „	 ‰#c                ó”  K  — 	 ddl }n# t          $ r t          d¦  «        ‚w xY wi |                      |¦  «        ¥|¥}| j        › d�}|                     ¦   «         }||d<   |                     ¦   «         }	|	                     |¦  «         |	                     t          j	        |¦  «        ¦  «         	 |	 
                    ¦   «         }
t          j        |
¦  «        }
|
d         dk    r@t          |
d	         d¬
¦  «        }|r!|                     |j        ¬¦  «        ƒ d{V —† |W V — n"|
d         dk    r|	                     ¦   «          dS Œ—r_   re   rp   s               r1   r\   zTextGen._astreamY  s•  è è € ðH	ØÐÐÐÐøÝð 	ð 	ð 	ÝØKñô ð ð	øøøð
 :�D×(Ò(¨Ñ.Ô.Ð9°&Ð9ˆà”Ð/Ð/Ð/ˆà—+’+‘-”-ˆØ"ˆ�Ñà$×.Ò.Ñ0Ô0Ðà× Ò  Ñ%Ô%Ð%à×Ò�dœj¨Ñ1Ô1Ñ2Ô2Ð2ð	Ø%×*Ò*Ñ,Ô,ˆFÝ”Z Ñ'Ô'ˆFà�gŒ -Ò/Ð/Ý'Ø œØ$(ðñ ô �ð ð IØ%×6Ò6¸U¼ZÐ6ÑHÔHÐHÐHÐHÐHÐHÐHÐHØ�����Ø˜” LÒ0Ð0Ø ×&Ò&Ñ(Ô(Ð(Ø�ð	rr   )N)NN)3Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r   r   r   Úintr   r   Úboolr   Úfloatr   r   r   r   r   r   r   r    r!   r"   r#   r$   r&   r'   r(   r)   r*   r+   r   r,   Úpropertyr   r   r2   r5   r9   r>   r
   rZ   r	   r]   r   r   rM   r   r\   r8   r3   r1   r   r      s  € € € € € € ðð ð$ €N€N�NØJà €FˆH�SŒMÐ Ð Ñ Ø1à$'€N�H˜S”MÐ'Ð'Ñ'Ø3à�e˜D¨Ð4Ñ4Ô4€IˆtÐ4Ð4Ñ4Øà#&€K�˜%”Ð&Ð&Ñ&ðMð !€Eˆ8�EŒ?Ð Ð Ñ ðGð "#€Iˆx˜ŒÐ"Ð"Ñ"ð8ð '(€N�H˜U”OÐ'Ð'Ñ'Øà"#€J�˜”Ð#Ð#Ñ#Øà*.Ð˜ œÐ.Ð.Ñ.ðFð  €Eˆ8�EŒ?ÐÐÑð?ð !"€J�˜”Ð!Ð!Ñ!Ø.à*+Ð˜( 3œ-Ð+Ð+Ñ+ð<ð
  !€Iˆx˜Œ}Ð Ð Ñ Øà%&€M�8˜E”?Ð&Ð&Ñ&Øà&'€N�H˜U”OÐ'Ð'Ñ'Øà ˜5 Ð.>Ð?Ñ?Ô?€N�DÐ?Ð?Ñ?Øà��b Ð'Ñ'Ô'€Dˆ#Ð'Ð'Ñ'Øà˜% ¨OÐ<Ñ<Ô<€M�4Ð<Ð<Ñ<ð:ð (,Ð�x ”}Ð+Ð+Ñ+ðTð  ˜% ¨_Ð=Ñ=Ô=€M�4Ð=Ð=Ñ=ØVà %  dÐ2GÐ HÑ HÔ HÐ˜ÐHÐHÑHØDà,.Ð�h˜t CœyÔ)Ð.Ð.Ñ.Ø@à€IˆtÐÐÑØ8àð
  c¨3 h¤ð 
ð 
ð 
ñ „Xð
ð4 ðI T¨#¨s¨(¤^ð Ið Ið Iñ „XðIð ð˜3ð ð ð ñ „Xððð  H¨T°#¬YÔ$7ð À4ÈÈSÈÄ>ð ð ð ð ð: %)Ø:>ð	,ð ,àð,ð �t˜C”yÔ!ð,ð Ð6Ô7ð	,ð
 ð,ð 
ð,ð ,ð ,ð ,ðb %)Ø?Cð	,ð ,àð,ð �t˜C”yÔ!ð,ð Ð;Ô<ð	,ð
 ð,ð 
ð,ð ,ð ,ð ,ðb %)Ø:>ð	Fð FàðFð �t˜C”yÔ!ðFð Ð6Ô7ð	Fð
 ðFð 
�/Ô	"ðFð Fð Fð FðV %)Ø?Cð	Fð FàðFð �t˜C”yÔ!ðFð Ð;Ô<ð	Fð
 ðFð 
�Ô	'ðFð Fð Fð Fð Fð Fr3   r   )rH   ÚloggingÚtypingr   r   r   r   r   r   rO   Úlangchain_core.callbacksr	   r
   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   Úpydanticr   Ú	getLoggerrt   Úloggerr   r8   r3   r1   ú<module>r†      s   ðØ €€€Ø €€€Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eà €€€ðð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ðNð Nð Nð Nð Nˆcñ Nô Nð Nð Nð Nr3   