§
    šŠtj"'  ã                   óŠ   — 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dS )	é    N)ÚAnyÚListÚMappingÚOptional)ÚCallbackManagerForLLMRun)ÚLLM)Ú
ConfigDictÚgpt2c                   óp  — 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dS )$Ú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          	      ó:   — |                       ||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          ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/ipex_llm.pyÚfrom_model_idzIpexLLM.from_model_id'   s5   € ð@ �ŠØØ%ØØ%Ø+Ø%Øð ñ 
ô 
ð 	
ó    )r   c          	      ó:   — |                       ||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   s4   € ð0 �ŠØØ%ØØØ Ø%Øð ñ 
ô 
ð 	
r!   Fr   c                 ó   — 	 ddl m}m}	 ddlm}
m} n# t          $ r t          d¦  «        ‚w xY w|pi }|pi }|p|}d|vrd|d<   |d         dvrt          d|d         › d	�¦  «        ‚|                     d¦  «        }	  |
j	        |fi |¤Ž}n# t          $ r  |j	        |fi |¤Ž}Y nw xY wd
|v rd„ |                     ¦   «         D ¦   «         }dddœ}|s|�d}||d<   n
d}||d<   nd}	 |                      |	||||¬¦  «        }n*# t          $ r |                      |||||¬¦  «        }Y nw xY w|                     |¦  «          | d||||dœ|¤ŽS )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_codec                 ó&   — i | ]\  }}|d k    ¯||“ŒS )r-   © )Ú.0ÚkÚvs      r   ú
<dictcomp>z'IpexLLM._load_model.<locals>.<dictcomp>¢   s0   € ð ð ð Ù˜˜A¸!Ð?RÒ:RÐ:R��1Ð:RÐ:RÐ:Rr!   T)Ú	use_cacher-   Úfrom_pretrainedr   r   Úload_low_bit)Úload_function_namer   Úload_kwargsr   )r   r   r   r   r/   )Úipex_llm.transformersr%   r&   Útransformersr'   r(   ÚImportErrorÚ
ValueErrorÚpopr5   Ú	ExceptionÚitemsÚ_load_model_generalÚto)r   r   r   r   r   r   r   r   r%   r&   r'   r(   Ú_model_kwargsÚ_tokenizer_idr)   r   r8   r7   r   s                      r   r   zIpexLLM._load_models   s´  € ð	ðð ð ð ð ð ð ð ð CÐBÐBÐBÐBÐBÐBÐBÐBøåð 	ð 	ð 	Ýðcñô ð ð	øøøð %Ð*¨ˆØ�˜2ˆà$Ð0¨ˆà˜=Ð(Ð(Ø&+ˆM˜(Ñ#à˜Ô"¨.Ð8Ð8ÝðLØ1>¸xÔ1HðLð Lð Lñô ð ð ×"Ò" 8Ñ,Ô,ˆð	WØ5˜Ô5°mÐUÐUÀ}ÐUÐUˆIˆIøÝð 	Wð 	Wð 	WØ6˜Ô6°}ÐVÐVÈÐVÐVˆIˆIˆIð	Wøøøð  -Ð/Ð/ðð Ø!.×!4Ò!4Ñ!6Ô!6ðñ ô ˆMð Ø!%ð
ð 
ˆð
 ð 	0ØÐ*Ø%6Ð"Ø1@�Ð-Ñ.Ð.à%6Ð"Ø.:�˜NÑ+Ð+à!/Ðð	à×+Ò+Ø$Ø#5Ø!Ø'Ø*ð ,ñ ô ˆEˆEøõ ð 	ð 	ð 	à×+Ò+ØØ#5Ø!Ø'Ø*ð ,ñ ô ˆEˆEˆEð	øøøð 	�Š�ÑÔÐàˆsð 
ØØØØ&ð	
ð 
ð
 ð
ð 
ð 	
s,   ‚ “-Á>B ÂB(Â'B(Ã)D Ä$D+Ä*D+Úmodel_classr7   r8   c           	      ó¾   — 	 t          | |¦  «        } ||fi i |¥|¥¤ŽS # t          $ r3}t                               d| j        › d|› d|› �¦  «         Y d}~dS d}~ww xY w)z,General function to attempt to load a model.zFailed to load model using r,   z: N)Úgetattrr>   ÚloggerÚerrorÚ__name__)rD   r7   r   r8   r   Úload_functionÚes          r   r@   zIpexLLM._load_model_generalÓ   sÃ   € ð	Ý# KÐ1CÑDÔDˆMØ �= ÐMÐMÐ-L°Ð-L¸|Ð-LÐMÐMÐMøÝð 	ð 	ð 	Ý�LŠLðDØÔ'ðDð DØ*<ðDð DØ@AðDð Dñô ð ð ð ð ð ð ð øøøøð	øøøs   ‚ Ÿ
A©(AÁAc                 ó    — | j         | j        dœS )zGet the identifying parameters.©r   r   rM   ©Úselfs    r   Ú_identifying_paramszIpexLLM._identifying_paramså   s   € ð œØ Ô-ð
ð 
ð 	
r!   c                 ó   — dS )Nzipex-llmr/   rN   s    r   Ú	_llm_typezIpexLLM._llm_typeí   s   € àˆzr!   ÚpromptÚstopÚrun_managerc                 óî  — | j         rºddlm} | j                             |d¬¦  «        }|                     | j        j        ¦  «        } || j        dd¬¦  «        }|�(ddlm	} ddl
m}	  | |	|| j        ¦  «        g¦  «        }
nd }
 | j        j        |f||
d	œ|¤Ž}| j                             |d         d¬
¦  «        }|S | j                             |d¬¦  «        }|                     | j        j        ¦  «        }|�(ddlm	} ddl
m}	  | |	|| j        ¦  «        g¦  «        }
nd }
 | j        j        |fd|
i|¤Ž}| j                             |d         d¬
¦  «        t          |¦  «        d …         }|S )Nr   )ÚTextStreamerÚpt)Úreturn_tensorsT)Úskip_promptÚskip_special_tokens)ÚStoppingCriteriaList)ÚStopSequenceCriteria)ÚstreamerÚstopping_criteria)r[   r_   )r   r:   rW   r   ÚencoderA   r   r)   Ú)transformers.generation.stopping_criteriar\   Útransformers.tools.agentsr]   ÚgenerateÚdecodeÚlen)rO   rS   rT   rU   r   rW   Ú	input_idsr^   r\   r]   r_   ÚoutputÚtexts                r   Ú_callzIpexLLM._callñ   s:  € ð Œ>ð 1	Ø1Ð1Ð1Ð1Ð1Ð1àœ×-Ò-¨fÀTÐ-ÑJÔJˆIØ!Ÿš T¤ZÔ%6Ñ7Ô7ˆIØ#�|Ø”¨DÀdðñ ô ˆHð Ððð ð ð ð ð ð KÐJÐJÐJÐJÐJð %9Ð$8Ø)Ð)¨$°´Ñ?Ô?Ð@ñ%ô %Ð!Ð!ð %)Ð!Ø(�T”ZÔ(Øðà!Ø"3ðð ð ð	ð ˆFð ”>×(Ò(¨°¬ÈÐ(ÑMÔMˆDØˆKàœ×-Ò-¨fÀTÐ-ÑJÔJˆIØ!Ÿš T¤ZÔ%6Ñ7Ô7ˆIØÐðð ð ð ð ð ð KÐJÐJÐJÐJÐJà$8Ð$8Ø)Ð)¨$°´Ñ?Ô?Ð@ñ%ô %Ð!Ð!ð %)Ð!Ø(�T”ZÔ(Øðð Ø->ðØBHðð ˆFð ”>×(Ò(¨°¬ÈÐ(ÑMÔMÝ�F‘”��ôˆDð ˆKr!   )N)NFNFNN)NN) rI   Ú
__module__Ú__qualname__Ú__doc__ÚDEFAULT_MODEL_IDr   ÚstrÚ__annotations__r   r   Údictr   r   r   r   Úboolr	   Úmodel_configÚclassmethodr   r    r#   r   Ústaticmethodr@   Úpropertyr   rP   rR   r   r   ri   r/   r!   r   r   r      sT  € € € € € € ðð ð %€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ð 
ð 
ð 
ñ „Xð
ð ð˜3ð ð ð ñ „Xðð %)Ø:>ð	8ð 8àð8ð �t˜C”yÔ!ð8ð Ð6Ô7ð	8ð
 ð8ð 
ð8ð 8ð 8ð 8ð 8ð 8r!   r   )ÚloggingÚtypingr   r   r   r   Úlangchain_core.callbacksr   Ú#langchain_core.language_models.llmsr   Úpydanticr	   rm   Ú	getLoggerrI   rG   r   r/   r!   r   ú<module>r|      sÀ   ðØ €€€Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à =Ð =Ð =Ð =Ð =Ð =Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð àÐ ð 
ˆÔ	˜8Ñ	$Ô	$€ð[ð [ð [ð [ð [ˆcñ [ô [ð [ð [ð [r!   