Ë
    µŒj…3  ã                  ó¶   — d dl mZ d dlZd dlmZmZmZmZmZm	Z	m
Z
mZmZmZ d dlZd dlZd dlmZmZ d dlmZ d dlmZ erd dlmZmZ d dlmZ  G d	„ d
e«      Zy)é    )ÚannotationsN)
ÚTYPE_CHECKINGÚAnyÚAsyncIteratorÚDictÚ	GeneratorÚIteratorÚListÚMappingÚOptionalÚUnion)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚLLM)ÚGenerationChunk)ÚRESTfulChatModelHandleÚRESTfulGenerateModelHandle)ÚLlamaCppGenerateConfigc                  ó`  ‡ — e Zd ZU dZdZded<   ded<   	 ded<   	 ded	<   	 	 	 	 d	 	 	 	 	 	 	 dˆ fd
„Zedd„«       Zedd„«       Z	dd„Z
	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 dd„Ze	 	 	 	 d d„«       Z	 	 d	 	 	 	 	 	 	 	 	 d!d„Z	 d	 	 	 	 	 d"d„Zˆ xZS )#Ú
Xinferencea	  `Xinference` large-scale model inference service.

    To use, you should have the xinference library installed:

    .. code-block:: bash

       pip install "xinference[all]"

    If you're simply using the services provided by Xinference, you can utilize the xinference_client package:

    .. code-block:: bash

        pip install xinference_client

    Check out: https://github.com/xorbitsai/inference
    To run, you need to start a Xinference supervisor on one server and Xinference workers on the other servers

    Example:
        To start a local instance of Xinference, run

        .. code-block:: bash

           $ xinference

        You can also deploy Xinference in a distributed cluster. Here are the steps:

        Starting the supervisor:

        .. code-block:: bash

           $ xinference-supervisor

        Starting the worker:

        .. code-block:: bash

           $ xinference-worker

    Then, launch a model using command line interface (CLI).

    Example:

    .. code-block:: bash

       $ xinference launch -n orca -s 3 -q q4_0

    It will return a model UID. Then, you can use Xinference with LangChain.

    Example:

    .. code-block:: python

        from langchain_community.llms import Xinference

        llm = Xinference(
            server_url="http://0.0.0.0:9997",
            model_uid = {model_uid} # replace model_uid with the model UID return from launching the model
        )

        llm.invoke(
            prompt="Q: where can we visit in the capital of France? A:",
            generate_config={"max_tokens": 1024, "stream": True},
        )

    Example:

    .. code-block:: python

        from langchain_community.llms import Xinference
        from langchain.prompts import PromptTemplate

        llm = Xinference(
            server_url="http://0.0.0.0:9997",
            model_uid={model_uid}, # replace model_uid with the model UID return from launching the model
            stream=True
        )
        prompt = PromptTemplate(
            input=['country'],
            template="Q: where can we visit in the capital of {country}? A:"
        )
        chain = prompt | llm
        chain.stream(input={'country': 'France'})


    To view all the supported builtin models, run:

    .. code-block:: bash

        $ xinference list --all

    NzOptional[Any]ÚclientúOptional[str]Ú
server_urlÚ	model_uidzDict[str, Any]Úmodel_kwargsc                ó¢  •— 	 ddl m} |xs i }t	        ‰| �  d
i |||dœ¤Ž | j                  €t        d«      ‚| j                  €t        d«      ‚i | _	        d| _
        | j                  «        |�| j                  rd|› �| j                  d	<    |||«      | _        y # t        $ r( 	 ddlm} n# t        $ r}t        d«      |‚d }~ww xY wY ŒÄw xY w)Nr   )ÚRESTfulClientzƒCould not import RESTfulClient from xinference. Please install it with `pip install xinference` or `pip install xinference_client`.©r   r   r   zPlease provide server URLzPlease provide the model UIDFzBearer ÚAuthorization© )Úxinference.clientr   ÚImportErrorÚxinference_clientÚsuperÚ__init__r   Ú
ValueErrorr   Ú_headersÚ_cluster_authedÚ_check_cluster_authenticatedr   )Úselfr   r   Úapi_keyr   r   ÚeÚ	__class__s          €úm/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/llms/xinference.pyr%   zXinference.__init__„   s÷   ø€ ð		Ý7ð $Ò) rˆä‰Ññ 	
à(Ø&Ø ,ñò	
ð �?‰?Ð"ÜÐ8Ó9Ð9à�>‰>Ð!ÜÐ;Ó<Ð<à(*ˆŒØ$ˆÔØ×)Ñ)Ô+ØÐ 4×#7Ò#7Ø/6°w°iÐ-@ˆD�M‰M˜/Ñ*á# J°Ó8ˆ�øô? ò 	ðÞ;øÜò Ü!ðYóð ðûðúñ <ð	ús5   ƒB Â	CÂ'B.Â-CÂ.	CÂ7CÃCÃCÃCc                 ó   — y)zReturn type of llm.Ú
xinferencer    ©r*   s    r.   Ú	_llm_typezXinference._llm_type®   s   € ð ó    c                óZ   — i d| j                   i¥d| j                  i¥d| j                  i¥S )zGet the identifying parameters.r   r   r   r   r1   s    r.   Ú_identifying_paramszXinference._identifying_params³   sC   € ð
Ø˜TŸ_™_Ð-ð
à˜DŸN™NÐ+ð
ð ˜t×0Ñ0Ð1ð
ð 	
r3   c                ó  — | j                   › d�}t        j                  |«      }|j                  dk(  rd| _        y |j                  dk7  rt        d|j                  «       d   › �«      ‚|j                  «       }t        |d   «      | _        y )Nz/v1/cluster/authé”  FéÈ   z+Failed to get cluster information, detail: ÚdetailÚauth)r   ÚrequestsÚgetÚstatus_coder(   ÚRuntimeErrorÚjsonÚbool)r*   ÚurlÚresponseÚresponse_datas       r.   r)   z'Xinference._check_cluster_authenticated¼   s�   € Ø—‘Ð!Ð!1Ð2ˆÜ—<‘< Ó$ˆØ×Ñ 3Ò&Ø#(ˆDÕ à×#Ñ# sÒ*Ü"ðØ'Ÿ}™}›¨xÑ8Ð9ð;óð ð %ŸM™M›OˆMÜ#'¨°fÑ(=Ó#>ˆDÕ r3   c                ót  — | j                   €t        d«      ‚| j                   j                  | j                  «      }|j	                  di «      }i | j
                  ¥|¥}|r||d<   |r4|j	                  d«      r#d}| j                  ||||¬«      D ]  }||z  }Œ	 |S |j                  ||¬«      }	|	d   d	   d
   S )aq  Call the xinference model and return the output.

        Args:
            prompt: The prompt to use for generation.
            stop: Optional list of stop words to use when generating.
            generate_config: Optional dictionary for the configuration used for
                generation.

        Returns:
            The generated string by the model.
        úClient is not initialized!Úgenerate_configÚstopÚstreamÚ )ÚmodelÚpromptÚrun_managerrF   ©rK   rF   Úchoicesr   Útext)r   r&   Ú	get_modelr   r<   r   Ú_stream_generateÚgenerate)
r*   rK   rG   rL   ÚkwargsrJ   rF   Úcombined_text_outputÚtokenÚ
completions
             r.   Ú_callzXinference._callÊ   sà   € ð$ �;‰;ÐÜÐ9Ó:Ð:Ø—‘×%Ñ% d§n¡nÓ5ˆà4:·J±JÐ?PÐRTÓ4UˆàB˜T×.Ñ.ÐB°/ÐBˆáØ&*ˆO˜FÑ#á˜×2Ñ2°8Ô<Ø#%Ð Ø×.Ñ.ØØØ'Ø /ð	 /ö �ð %¨Ñ-Ñ$ðð (Ð'ð Ÿ™¨vÀ˜ÓWˆJØ˜iÑ(¨Ñ+¨FÑ3Ð3r3   c              #  óF  K  — |j                  ||¬«      }|D ]…  }t        |t        «      sŒ|j                  dg «      }|sŒ)|d   }t        |t        «      sŒ?|j                  dd«      }	|j                  d«      }
|r|j	                  |	| j
                  |
¬«       |	–— Œ‡ y­w)	a^  
        Args:
            prompt: The prompt to use for generation.
            model: The model used for generation.
            stop: Optional list of stop words to use when generating.
            generate_config: Optional dictionary for the configuration used for
                generation.

        Yields:
            A string token.
        rM   rN   r   rO   rI   Úlogprobs)rU   ÚverboseÚ	log_probsN)rR   Ú
isinstanceÚdictr<   Úon_llm_new_tokenrZ   )r*   rJ   rK   rL   rF   Ústreaming_responseÚchunkrN   ÚchoicerU   r[   s              r.   rQ   zXinference._stream_generateö   s£   è ø€ ð$ #Ÿ^™^Ø¨?ð ,ó 
Ðó (ˆEÜ˜%¤Õ&ØŸ)™) I¨rÓ2�ÚØ$ Q™Z�FÜ! &¬$Õ/Ø &§
¡
¨6°2Ó 6˜Ø$*§J¡J¨zÓ$:˜	Ù&Ø'×8Ñ8Ø&+°T·\±\ÈYð 9ô ð $›ñ (ùs   ‚)B!¬B!ÁB!ÁA
B!c              +  ó  K  — |j                  di «      }i | j                  ¥|¥}|r||d<   | j                  ||«      D ]C  }|sŒ| j                  |«      }|r'|j	                  |j
                  | j                  ¬«       |–— ŒE y ­w©NrF   rG   )rZ   )r<   r   Ú_create_generate_streamÚ$_stream_response_to_generation_chunkr^   rO   rZ   ©r*   rK   rG   rL   rS   rF   Ústream_respr`   s           r.   Ú_streamzXinference._stream  s‘   è ø€ ð !Ÿ*™*Ð%6¸Ó;ˆØB˜T×.Ñ.ÐB°/ÐBˆÙØ&*ˆO˜FÑ#Ø×7Ñ7¸ÀÖPˆKÚØ×AÑAÀ+ÓN�ÙØ×0Ñ0ØŸ
™
Ø $§¡ð 1ô ð “ñ Qùs   ‚ABÁABc              #  ó¾   K  — | j                   €t        d«      ‚| j                   j                  | j                  «      }|j	                  ||¬«      E d {  –—†  y 7 Œ­w)NrE   rM   )r   r&   rP   r   rR   )r*   rK   rF   rJ   s       r.   rd   z"Xinference._create_generate_stream.  sL   è ø€ ð �;‰;ÐÜÐ9Ó:Ð:Ø—‘×%Ñ% d§n¡nÓ5ˆØ—>‘>¨À�>ÓQ×QÒQús   ‚AAÁAÁAc           
     óP  — d}t        | t        «      rŠ| j                  dg «      }|rj|d   }t        |t        «      rJ|j                  dd«      }t        |t        |j                  dd«      |j                  dd«      ¬«      ¬	«      S t	        d
«      ‚t        |¬«      S t	        d«      ‚)z0Convert a stream response to a generation chunk.rI   rN   r   rO   Úfinish_reasonNrY   )rk   rY   )rO   Úgeneration_infozchoice type error!)rO   zstream_response type error!)r\   r]   r<   r   Ú	TypeError)Ústream_responserU   rN   ra   s       r.   re   z/Xinference._stream_response_to_generation_chunk6  s¤   € ð
 ˆÜ�o¤tÔ,Ø%×)Ñ)¨)°RÓ8ˆGÙØ  ™�Ü˜f¤dÔ+Ø"ŸJ™J v¨rÓ2�Eä*Ø"Ü(,Ø*0¯*©*°_ÀdÓ*KØ%+§Z¡Z°
¸DÓ%Aô)ôð ô $Ð$8Ó9Ð9ä&¨EÔ2Ð2äÐ9Ó:Ð:r3   c               ó4  K  — |j                  di «      }i | j                  ¥|¥}|r||d<   | j                  ||«      2 3 d {  –—† }|sŒ| j                  |«      }|r/|j	                  |j
                  | j                  ¬«      ƒ d {  –—†  |­–— ŒT7 ŒO7 Œ6 y ­wrc   )r<   r   Ú_acreate_generate_streamre   r^   rO   rZ   rf   s           r.   Ú_astreamzXinference._astreamQ  s¬   è ø€ ð !Ÿ*™*Ð%6¸Ó;ˆØB˜T×.Ñ.ÐB°/ÐBˆÙØ&*ˆO˜FÑ#Ø!%×!>Ñ!>¸vÀÔ!W÷ 	�+ÚØ×AÑAÀ+ÓN�ÙØ%×6Ñ6ØŸ
™
Ø $§¡ð 7ó ÷ ð ð ”ð	øðøñ	 "Xùs@   ‚<B¾BÁBÁBÁBÁ
=BÂBÂ
BÂBÂBÂBc               ó�  K  — | j                   |dœ}|�|j                  «       D ]
  \  }}|||<   Œ t        |xr |j                  d«      «      }t	        j
                  «       4 ƒd {  –—† }|j                  | j                  › d�|¬«      4 ƒd {  –—† }|j                  dk7  rA|j                  dk(  rt        d«      ‚|j                  }	t        d|j                  › d	|	› �«      ‚|j                  2 3 d {  –—† }
|st        j                  |
«      ­–— Œ$|
j                  d
«      }|
j!                  d«      sŒG|t#        d«      d  j%                  «       }|sŒft        j                  |«      ­–— Œ7 �Œ	7 Œâ7 Œ6 d d d «      ƒd {  –—†7   n# 1 ƒd {  –—†7  sw Y   nxY wd d d «      ƒd {  –—†7   y # 1 ƒd {  –—†7  sw Y   y xY w­w)N)rJ   rK   rH   z/v1/completions)rA   r?   r8   r7   z)astream call failed with status code 404.z%astream call failed with status code z. Details: zutf-8s   data:)r   Úitemsr@   r<   ÚaiohttpÚClientSessionÚpostr   ÚstatusÚFileNotFoundErrorrO   r&   Úcontentr?   ÚloadsÚdecodeÚ
startswithÚlenÚstrip)r*   rK   rF   Úrequest_bodyÚkeyÚvaluerH   ÚsessionrB   Úoptional_detailÚlineÚjson_strs               r.   rp   z#Xinference._acreate_generate_streamf  s   è ø€ ð 26·±È6Ñ'RˆØÐ&Ø-×3Ñ3Ö5‘
��UØ$)�˜SÒ!ð 6ô �oÒG¨/×*=Ñ*=¸hÓ*GÓHˆÜ×(Ñ(×*Ô*¨gØ—|‘|Ø—‘Ð' Ð7Ø!ð $÷ ô ð Ø—?‘? cÒ)Ø—‘¨#Ò-Ü/ØGóð ð +3¯-©-˜Ü(ØCÀHÇOÁOÐCTð U)Ø)8Ð(9ð;óð ð
 #+×"2Ò"2÷ 	7˜$Ù!Ü"Ÿj™j¨Ó.Ô.à#'§;¡;¨wÓ#7˜ØŸ?™?¨8Õ4Ø'/´°H³°Ð'@×'FÑ'FÓ'H˜HÙ#+Ø (Ü"&§*¡*¨XÓ"6Ô6ð5 +ùðøð 	7øÐ"2÷!÷ ÷ ÷ ó ú÷ +×*×*×*Ó*üsµ   ‚A%GÁ'E0Á(GÁ+%F1ÂE3ÂF1ÂAF
Ã1E7Ã5E5
Ã6E7Ã9>F
Ä88F
Å0GÅ3F1Å5E7Å7F
Å8F1ÆFÆF1Æ
F	ÆFÆF	ÆF1ÆGÆ*F-Æ+GÆ1GÆ7F:Æ8GÆ?G)NNN)r   r   r   r   r+   r   r   r   )ÚreturnÚstr)r†   zMapping[str, Any])r†   ÚNone)NN)
rK   r‡   rG   úOptional[List[str]]rL   ú"Optional[CallbackManagerForLLMRun]rS   r   r†   r‡   )
rJ   z=Union['RESTfulGenerateModelHandle', 'RESTfulChatModelHandle']rK   r‡   rL   rŠ   rF   z"Optional['LlamaCppGenerateConfig']r†   zGenerator[str, None, None])
rK   r‡   rG   r‰   rL   rŠ   rS   r   r†   zIterator[GenerationChunk])N)rK   r‡   rF   úOptional[Dict[str, List[str]]]r†   zIterator[str])rn   r‡   r†   r   )
rK   r‡   rG   r‰   rL   z'Optional[AsyncCallbackManagerForLLMRun]rS   r   r†   zAsyncIterator[GenerationChunk])rK   r‡   rF   r‹   r†   zAsyncIterator[str])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r%   Úpropertyr2   r5   r)   rW   rQ   rh   rd   Ústaticmethodre   rq   rp   Ú__classcell__)r-   s   @r.   r   r      sû  ø… ñZðx !€FˆMÓ ØÓØ&ØÓØ#Ø Ó Ø:ð %)Ø#'Ø!%ð	(9à!ð(9ð !ð(9ð ð	(9ð
 õ(9ðT òó ðð ò
ó ð
ó?ð" %)Ø:>ð	*4àð*4ð "ð*4ð 8ð	*4ð
 ð*4ð 
ó*4ð` ;?Ø>Bð!$àLð!$ð ð!$ð 8ð	!$ð
 <ð!$ð 
$ó!$ðL %)Ø:>ð	àðð "ðð 8ð	ð
 ðð 
#óð, NRðRØðRØ,JðRà	óRð ð;Øð;à	ò;ó ð;ð: %)Ø?Cð	àðð "ðð =ð	ð
 ðð 
(óð, NRð#7Øð#7Ø,Jð#7à	÷#7r3   r   )Ú
__future__r   r?   Útypingr   r   r   r   r   r	   r
   r   r   r   rt   r;   Úlangchain_core.callbacksr   r   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   r!   r   r   Úxinference.model.llm.corer   r   r    r3   r.   Ú<module>rš      sF   ðÝ "ã ÷÷ ÷ ó Û ÷õ 4Ý 2áßTÝ@ôj7�õ j7r3   