Ë
    µŒjH'  ã                   ó†   — d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ dZ e j                  e«      Z G d„ de	«      Zy)	é    N)ÚAnyÚListÚMappingÚOptional)ÚCallbackManagerForLLMRun)ÚLLM)Ú
ConfigDictÚgpt2c                   óð  — e Zd ZU dZeZeed<   	 dZe	e
   ed<   	 dZeed<   	 dZeed<   	 dZeed<   	  ed	¬
«      Ze	 d ddddœdede	e
   de	e   dede	e   dedefd„«       Ze	 d ddœdede	e
   de	e   dedef
d„«       Ze	 	 	 	 	 	 d!dede	e   dede	e   dede	e
   de	e
   defd„«       Zedededed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y)#ÚIpexLLMz¿IpexLLM model.

    Example:
        .. code-block:: python

            from langchain_community.llms import IpexLLM
            llm = IpexLLM.from_model_id(model_id="THUDM/chatglm-6b")
    Úmodel_idNÚmodel_kwargsÚmodelÚ	tokenizerTÚ	streamingÚforbid)Úextra)Útokenizer_idÚload_in_4bitÚload_in_low_bitr   r   r   ÚkwargsÚreturnc          	      ó2   — | j                  ||d||||¬«      S )a•  
        Construct object from model_id

        Args:
            model_id: Path for the huggingface repo id to be downloaded or
                      the huggingface checkpoint folder.
            tokenizer_id: Path for the huggingface repo id to be downloaded or
                      the huggingface checkpoint folder which contains the tokenizer.
            load_in_4bit: "Whether to load model in 4bit.
                      Unused if `load_in_low_bit` is not None.
            load_in_low_bit: Which low bit precisions to use when loading model.
                      Example values: 'sym_int4', 'asym_int4', 'fp4', 'nf4', 'fp8', etc.
                      Overrides `load_in_4bit` if specified.
            model_kwargs: Keyword arguments to pass to the model and tokenizer.
            kwargs: Extra arguments to pass to the model and tokenizer.

        Returns:
            An object of IpexLLM.

        F©r   r   Úlow_bit_modelr   r   r   r   ©Ú_load_model)Úclsr   r   r   r   r   r   s          úk/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/llms/ipex_llm.pyÚfrom_model_idzIpexLLM.from_model_id'   s0   € ð@ �‰ØØ%ØØ%Ø+Ø%Øð ó 
ð 	
ó    )r   c          	      ó2   — | j                  ||ddd||¬«      S )aè  
        Construct low_bit object from model_id

        Args:

            model_id: Path for the ipex-llm transformers low-bit model folder.
            tokenizer_id: Path for the huggingface repo id or local model folder
                      which contains the tokenizer.
            model_kwargs: Keyword arguments to pass to the model and tokenizer.
            kwargs: Extra arguments to pass to the model and tokenizer.

        Returns:
            An object of IpexLLM.
        TFNr   r   )r   r   r   r   r   s        r   Úfrom_model_id_low_bitzIpexLLM.from_model_id_low_bitQ   s/   € ð0 �‰ØØ%ØØØ Ø%Øð ó 
ð 	
r!   r   c                 óš  — 	 ddl m}m}	 ddlm}
m} |xs i }|xs i }|xs |}d|vrd|d<   |d   dvrt        d|d   › d	�«      ‚|j                  d«      }	  |
j                  |fi |¤Ž}d
|v r)|j                  «       D ��ci c]  \  }}|d
k7  sŒ||“Œ }}}dddœ}|s|�d}||d<   n
d}||d<   nd}	 | j                  |	||||¬«      }|j                  |«        | d||||dœ|¤ŽS # t        $ r t        d«      ‚w xY w# t        $ r  |j                  |fi |¤Ž}Y Œ³w xY wc c}}w # t        $ r | j                  |||||¬«      }Y Œw xY w)Nr   )Ú	AutoModelÚAutoModelForCausalLM)ÚAutoTokenizerÚLlamaTokenizerz­Could not import ipex-llm. Please install `ipex-llm` properly following installation guides: https://github.com/intel-analytics/ipex-llm?tab=readme-ov-file#install-ipex-llm.ÚdeviceÚcpu)r*   ÚxpuzXIpexLLMBgeEmbeddings currently only supports device to be 'cpu' or 'xpu', but you have: Ú.Útrust_remote_codeT)Ú	use_cacher-   Úfrom_pretrainedr   r   Úload_low_bit)Úload_function_namer   Úload_kwargsr   )r   r   r   r   © )Úipex_llm.transformersr%   r&   Útransformersr'   r(   ÚImportErrorÚ
ValueErrorÚpopr/   Ú	ExceptionÚitemsÚ_load_model_generalÚto)r   r   r   r   r   r   r   r   r%   r&   r'   r(   Ú_model_kwargsÚ_tokenizer_idr)   r   ÚkÚvr2   r1   r   s                        r   r   zIpexLLM._load_models   s  € ð	÷÷ Cð %Ò*¨ˆØ’˜2ˆà$Ò0¨ˆà˜=Ñ(Ø&+ˆM˜(Ñ#à˜Ñ"¨.Ñ8Üð1Ø1>¸xÑ1HÐ0IÈðLóð ð ×"Ñ" 8Ó,ˆð	WØ5˜×5Ñ5°mÑUÀ}ÑUˆIð
  -Ñ/à!.×!4Ñ!4Ô!6ôÙ!6™˜˜A¸!Ð?RÓ:R��1‘Ð!6ð ñ ð Ø!%ñ
ˆñ
 ØÐ*Ø%6Ð"Ø1@�Ð-Ò.à%6Ð"Ø.:�˜NÒ+à!/Ðð	à×+Ñ+Ø$Ø#5Ø!Ø'Ø*ð ,ó ˆEð" 	�‰�Ôáð 
ØØØØ&ñ	
ð
 ñ
ð 	
øôM ò 	Üðcóð ð	ûô0 ò 	WØ6˜×6Ñ6°}ÑVÈÑVŠIð	Wüó
øô: ò 	à×+Ñ+ØØ#5Ø!Ø'Ø*ð ,ó ŠEð	ús;   ‚C( ÁD  ÂD"ÂD"Â4D( Ã(C=Ä DÄDÄ(E
Å	E
Úmodel_classr1   r2   c           	      ó²   — 	 t        | |«      } ||fi i |¥|¥¤ŽS # t        $ r2}t        j                  d| j                  › d|› d|› �«       Y d}~yd}~ww xY w)z,General function to attempt to load a model.zFailed to load model using r,   z: N)Úgetattrr9   ÚloggerÚerrorÚ__name__)rA   r1   r   r2   r   Úload_functionÚes          r   r;   zIpexLLM._load_model_generalÓ   ss   € ð	Ü# KÐ1CÓDˆMÙ  ÑMÐ-L°Ð-L¸|Ð-LÑMÐMøÜò 	Ü�L‰LØ-Ø×'Ñ'Ð(¨Ð*<Ð)=¸RÀ¸sðD÷ñ ûð	ús   ‚ ›	A¤(AÁAc                 ó4   — | j                   | j                  dœS )zGet the identifying parameters.©r   r   rJ   ©Úselfs    r   Ú_identifying_paramszIpexLLM._identifying_paramså   s   € ð Ÿ™Ø ×-Ñ-ñ
ð 	
r!   c                  ó   — y)Nzipex-llmr3   rK   s    r   Ú	_llm_typezIpexLLM._llm_typeí   s   € àr!   ÚpromptÚstopÚrun_managerc                 ó"  — | j                   rÊddlm} | j                  j	                  |d¬«      }|j                  | j                  j                  «      } || j                  dd¬«      }|�'ddlm	} ddl
m}	  | |	|| j                  «      g«      }
nd }
 | j                  j                  |f||
d	œ|¤Ž}| j                  j                  |d   d¬
«      }|S | j                  j	                  |d¬«      }|j                  | j                  j                  «      }|�'ddlm	} ddl
m}	  | |	|| j                  «      g«      }
nd }
 | j                  j                  |fd|
i|¤Ž}| j                  j                  |d   d¬
«      t        |«      d  }|S )Nr   )ÚTextStreamerÚpt)Úreturn_tensorsT)Úskip_promptÚskip_special_tokens)ÚStoppingCriteriaList)ÚStopSequenceCriteria)ÚstreamerÚstopping_criteria)rX   r\   )r   r5   rT   r   Úencoder<   r   r)   Ú)transformers.generation.stopping_criteriarY   Útransformers.tools.agentsrZ   ÚgenerateÚdecodeÚlen)rL   rP   rQ   rR   r   rT   Ú	input_idsr[   rY   rZ   r\   ÚoutputÚtexts                r   Ú_callzIpexLLM._callñ   s¢  € ð �>Š>Ý1àŸ™×-Ñ-¨fÀTÐ-ÓJˆIØ!Ÿ™ T§Z¡Z×%6Ñ%6Ó7ˆIÙ#Ø—‘¨DÀdôˆHð Ðõõ Kñ %9Ù)¨$°·±Ó?Ð@ó%Ñ!ð %)Ð!Ø(�T—Z‘Z×(Ñ(Øðà!Ø"3ñð ñ	ˆFð —>‘>×(Ñ(¨°©ÈÐ(ÓMˆDØˆKàŸ™×-Ñ-¨fÀTÐ-ÓJˆIØ!Ÿ™ T§Z¡Z×%6Ñ%6Ó7ˆIØÐõõ Ká$8Ù)¨$°·±Ó?Ð@ó%Ñ!ð %)Ð!Ø(�T—Z‘Z×(Ñ(ØñØ->ðØBHñˆFð —>‘>×(Ñ(¨°©ÈÐ(ÓMÜ�F“�ðˆDð ˆKr!   )N)NFNFNN)NN) rF   Ú
__module__Ú__qualname__Ú__doc__ÚDEFAULT_MODEL_IDr   ÚstrÚ__annotations__r   r   Údictr   r   r   r   Úboolr	   Úmodel_configÚclassmethodr   r    r#   r   Ústaticmethodr;   Úpropertyr   rM   rO   r   r   rf   r3   r!   r   r   r      s™  … ñð %€HˆcÓ$Ø*Ø#'€L�(˜4‘.Ó'Ø0Ø€Eˆ3ÓØØ€IˆsÓØ&Ø€IˆtÓØ8áØô€Lð ð (,ð'
ð
 '+Ø!Ø)-ò'
àð'
ð ˜t‘nð'
ð
 ˜s‘mð'
ð ð'
ð " #™ð'
ð ð'
ð 
ò'
ó ð'
ðR ð (,ð
ð
 '+ò
àð
ð ˜t‘nð
ð
 ˜s‘mð
ð ð
ð 
ò
ó ð
ðB ð '+Ø"Ø)-Ø#Ø'+Ø!%ñ]
àð]
ð ˜s‘mð]
ð ð	]
ð
 " #™ð]
ð ð]
ð ˜t‘nð]
ð ˜‘ð]
ð 
ò]
ó ð]
ð~ ðØðàðð ðð ð	ð
 ðð 
òó ðð" ð
 W¨S°#¨XÑ%6ò 
ó ð
ð ð˜3ò ó ðð %)Ø:>ñ	8àð8ð �t˜C‘yÑ!ð8ð Ð6Ñ7ð	8ð
 ð8ð 
ô8r!   r   )ÚloggingÚtypingr   r   r   r   Úlangchain_core.callbacksr   Ú#langchain_core.language_models.llmsr   Úpydanticr	   rj   Ú	getLoggerrF   rD   r   r3   r!   r   Ú<module>ry      s?   ðÛ ß /Ó /å =Ý 3Ý àÐ ð 
ˆ×	Ñ	˜8Ó	$€ô[ˆcõ [r!   