§
    šŠtj\"  ã                  óª   — d dl mZ d dlZd dlmZmZmZmZmZm	Z	 d dl
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 )é    )ÚannotationsN)ÚAnyÚCallableÚIteratorÚListÚMappingÚOptional)ÚCallbackManagerForLLMRun)ÚLLM)ÚGenerationChunk)Ú
ConfigDictz mlx-community/quantized-gemma-2bc                  ó
  — e Zd ZU dZeZded<   	 dZded<   	 dZded<   	 dZ	ded	<   	 dZ
d
ed<   	 dZded<   	 dZded<   	  ed¬¦  «        Ze	 	 	 	 d d!d„¦   «         Zed"d„¦   «         Zed#d„¦   «         Z	 	 d$d%d„Z	 	 d$d&d„ZdS )'ÚMLXPipelineaò  MLX Pipeline API.

    To use, you should have the ``mlx-lm`` python package installed.

    Example using from_model_id:
        .. code-block:: python

            from langchain_community.llms import MLXPipeline
            pipe = MLXPipeline.from_model_id(
                model_id="mlx-community/quantized-gemma-2b",
                pipeline_kwargs={"max_tokens": 10, "temp": 0.7},
            )
    Example passing model and tokenizer in directly:
        .. code-block:: python

            from langchain_community.llms import MLXPipeline
            from mlx_lm import load
            model_id="mlx-community/quantized-gemma-2b"
            model, tokenizer = load(model_id)
            pipe = MLXPipeline(model=model, tokenizer=tokenizer)
    ÚstrÚmodel_idNr   ÚmodelÚ	tokenizerúOptional[dict]Útokenizer_configúOptional[str]Úadapter_fileFÚboolÚlazyÚpipeline_kwargsÚforbid)ÚextraÚkwargsÚreturnc                óÈ   — 	 ddl m} n# t          $ r t          d¦  «        ‚w xY w|pi }|r |||||¬¦  «        \  }}	n ||||¬¦  «        \  }}	|pi }
 | d|||	||||
dœ|¤ŽS )z5Construct the pipeline object from model_id and task.r   )ÚloadúTCould not import mlx_lm python package. Please install it with `pip install mlx_lm`.)Úadapter_pathr   )r   )r   r   r   r   r   r   r   © )Úmlx_lmr    ÚImportError)Úclsr   r   r   r   r   r   r    r   r   Ú_pipeline_kwargss              úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/mlx_pipeline.pyÚfrom_model_idzMLXPipeline.from_model_idR   sñ   € ð	Ø#Ð#Ð#Ð#Ð#Ð#Ð#øåð 	ð 	ð 	Ýð?ñô ð ð	øøøð ,Ð1¨rÐØð 	KØ#˜tØÐ*¸ÈDð ñ  ô  ÑˆE�9�9ð  $˜t HÐ.>ÀTÐJÑJÔJÑˆE�9à*Ð0¨bÐØˆsð 	
ØØØØ-Ø%ØØ,ð	
ð 	
ð ð	
ð 	
ð 		
s   ‚	 ‰#úMapping[str, Any]c                óD   — | j         | j        | j        | j        | j        dœS )zGet the identifying parameters.©r   r   r   r   r   r,   ©Úselfs    r(   Ú_identifying_paramszMLXPipeline._identifying_paramsz   s/   € ð œØ $Ô 5Ø Ô-Ø”IØ#Ô3ð
ð 
ð 	
ó    c                ó   — dS )NÚmlx_pipeliner#   r-   s    r(   Ú	_llm_typezMLXPipeline._llm_type…   s   € àˆ~r0   ÚpromptÚstopúOptional[List[str]]Úrun_managerú"Optional[CallbackManagerForLLMRun]c           
     ó’  — 	 ddl m} ddlm}m} n# t
          $ r t          d¦  «        ‚w xY w|                     d| j        ¦  «        pi }|                     dd¦  «        }	|                     dd	¦  «        }
|                     d
d¦  «        }|                     dd ¦  «        }|                     dd ¦  «        }|                     dd ¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        } ||	|||¦  «        } |d ||¦  «        } || j        | j	        ||
||||¬¦  «        S )Nr   )Úgenerate©Úmake_logits_processorsÚmake_samplerr!   r   Útempç        Ú
max_tokenséd   ÚverboseFÚ	formatterÚrepetition_penaltyÚrepetition_context_sizeÚtop_pç      ð?Úmin_pÚmin_tokens_to_keepé   )r   r   r4   r@   rB   rC   ÚsamplerÚlogits_processors)
r$   r:   Úmlx_lm.sample_utilsr<   r=   r%   Úgetr   r   r   )r.   r4   r5   r7   r   r:   r<   r=   r   r>   r@   rB   rC   rD   rE   rF   rH   rI   rK   rL   s                       r(   Ú_callzMLXPipeline._call‰   s¾  € ð	Ø'Ð'Ð'Ð'Ð'Ð'ØPÐPÐPÐPÐPÐPÐPÐPÐPøåð 	ð 	ð 	Ýð?ñô ð ð	øøøð !Ÿ*š*Ð%6¸Ô8LÑMÔMÐSÐQSˆà%×)Ò)¨&°#Ñ6Ô6ˆØ)×-Ò-¨l¸CÑ@Ô@ˆ
Ø'×+Ò+¨I°uÑ=Ô=ˆØ(7×(;Ò(;¸KÈÑ(NÔ(Nˆ	Ø.=×.AÒ.AØ  $ñ/
ô /
Ðð 2A×1DÒ1DØ% tñ2
ô 2
Ðð '×*Ò*¨7°CÑ8Ô8ˆØ&×*Ò*¨7°CÑ8Ô8ˆØ"1×"5Ò"5Ð6JÈAÑ"NÔ"NÐà�,˜t U¨EÐ3EÑFÔFˆØ2Ð2ØÐ$Ð&=ñ
ô 
Ðð ˆxØ”*Ø”nØØ!ØØØØ/ð	
ñ 	
ô 	
ð 		
s   ‚ ‘+úIterator[GenerationChunk]c              +  ó4  K  — 	 dd l m} ddlm}m} ddlm} n# t          $ r t          d¦  «        ‚w xY w|                     d| j	        ¦  «        pi }	|	                     dd¦  «        }
|	                     dd	¦  «        }|	                     d
d ¦  «        }|	                     dd ¦  «        }|	                     dd¦  «        }|	                     dd¦  «        }|	                     dd¦  «        }| j
                             |d¬¦  «        }|                     |d         ¦  «        }| j
        j        }| j
        j        }|                     ¦   «           ||
pd|||¦  «        } |d ||¦  «        }t!           ||| j        ||¬¦  «        t%          |¦  «        ¦  «        D ]{\  \  }}}d }|                     |¦  «         |                     ¦   «          |j        }|r0t-          |¬¦  «        }|r|                     |j        ¦  «         |V — ||k    s|�||v r d S Œ|d S )Nr   r;   )Úgenerate_stepr!   r   r>   r?   r@   rA   rD   rE   rF   rG   rH   rI   rJ   Únp)Úreturn_tensors)r4   r   rK   rL   )Útext)Úmlx.coreÚcorerM   r<   r=   Úmlx_lm.utilsrR   r%   rN   r   r   ÚencodeÚarrayÚeos_token_idÚdetokenizerÚresetÚzipr   ÚrangeÚ	add_tokenÚfinalizeÚlast_segmentr   Úon_llm_new_tokenrU   )r.   r4   r5   r7   r   Úmxr<   r=   rR   r   r>   Úmax_new_tokensrD   rE   rF   rH   rI   Úprompt_tokensr[   r\   rK   rL   ÚtokenÚprobÚnrU   Úchunks                              r(   Ú_streamzMLXPipeline._streamº   sÁ  è è € ð		Ø!Ð!Ð!Ð!Ð!Ð!ØPÐPÐPÐPÐPÐPÐPÐPØ2Ð2Ð2Ð2Ð2Ð2Ð2øåð 	ð 	ð 	Ýð?ñô ð ð	øøøð !Ÿ*š*Ð%6¸Ô8LÑMÔMÐSÐQSˆà%×)Ò)¨&°#Ñ6Ô6ˆØ-×1Ò1°,ÀÑDÔDˆØ.=×.AÒ.AØ  $ñ/
ô /
Ðð 2A×1DÒ1DØ% tñ2
ô 2
Ðð '×*Ò*¨7°CÑ8Ô8ˆØ&×*Ò*¨7°CÑ8Ô8ˆØ"1×"5Ò"5Ð6JÈAÑ"NÔ"NÐà”×&Ò& v¸dÐ&ÑCÔCˆàŸš ¨¤Ñ+Ô+ˆà”~Ô2ˆØ”nÔ0ˆØ×ÒÑÔÐà�,˜t˜{ s¨E°5Ð:LÑMÔMˆà2Ð2ØÐ$Ð&=ñ
ô 
Ðõ !$ØˆMØ$Ø”jØØ"3ð	ñ ô õ �.Ñ!Ô!ñ!
ô !
ð 	ð 	Ñ‰MˆU�D˜1ð #'ˆDØ×!Ò! %Ñ(Ô(Ð(Ø× Ò Ñ"Ô"Ð"ØÔ+ˆDð ð Ý'¨TÐ2Ñ2Ô2�Øð =Ø×0Ò0°´Ñ<Ô<Ð<Ø���ð ˜Ò$Ð$¨Ð)9¸dÀd¸l¸lØ��øð1	ð 	s   „ ™3)NNFN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r*   )r   r   )NN)
r4   r   r5   r6   r7   r8   r   r   r   r   )
r4   r   r5   r6   r7   r8   r   r   r   rP   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚDEFAULT_MODEL_IDr   Ú__annotations__r   r   r   r   r   r   r   Úmodel_configÚclassmethodr)   Úpropertyr/   r3   rO   rk   r#   r0   r(   r   r      s–  € € € € € € ðð ð, %€HÐ$Ð$Ð$Ñ$ØØ€EÐÐÐÑØØ€IÐÐÐÑØØ'+ÐÐ+Ð+Ð+Ñ+ðð #'€LÐ&Ð&Ð&Ñ&ðð €DÐÐÐÑðð
 '+€OÐ*Ð*Ð*Ñ*ðð  �:Øðñ ô €Lð ð ,0Ø&*ØØ*.ð%
ð %
ð %
ð %
ñ „[ð%
ðN ð
ð 
ð 
ñ „Xð
ð ðð ð ñ „Xðð %)Ø:>ð	/
ð /
ð /
ð /
ð /
ðh %)Ø:>ð	Fð Fð Fð Fð Fð Fð Fr0   r   )Ú
__future__r   ÚloggingÚtypingr   r   r   r   r   r	   Úlangchain_core.callbacksr
   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   Úpydanticr   rp   Ú	getLoggerrl   Úloggerr   r#   r0   r(   ú<module>r~      sî   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cà =Ð =Ð =Ð =Ð =Ð =Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð à5Ð à	ˆÔ	˜8Ñ	$Ô	$€ðpð pð pð pð p�#ñ pô pð pð pð pr0   