
    ~
i"                        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   )loadTCould 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:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langchain_community/llms/mlx_pipeline.pyfrom_model_idzMLXPipeline.from_model_idR   s    	####### 	 	 	?  	 ,1r 	K#t*D     E99  $tH.>TJJJE9*0b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_tokensd   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SQS%))&#66)--lC@@
'++Iu==(7(;(;K(N(N	.=.A.A $/
 /
 2A1D1D%t2
 2
 '**7C88&**7C88"1"5"56JA"N"N,tUE3E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SQS%))&#66-11,DD.=.A.A $/
 /
 2A1D1D%t2
 2
 '**7C88&**7C88"1"5"56JA"N"N&&vd&CC++~2n0,t{sE5:LMM22$&=
 
 !$M$j"3	   .!!!
 !
 	 	MUD1 #'D!!%(((  """+D  'T222 =00<<< $$)9ddll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   