
    Ng                        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`.)r   )r   r   r   r   r   r   r    )mlx_lmr    ImportError)clsr   r   r   r   r   r   r    r   r   _pipeline_kwargss              a/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/mlx_pipeline.pyfrom_model_idzMLXPipeline.from_model_idR   s    	####### 	 	 	?  	 ,1r 	K#tH.>dSSE99#tH.>TJJJE9*0b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_paramsx   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} n# t          $ r t          d          w xY w|                    d| j                  }|                    dd          }|                    dd          }|                    d	d
          }	|                    dd           }
|                    dd           }|                    dd           }|                    dd          } || j        | j        ||||	|
|||
  
        S )Nr   )generater!   r   temp        
max_tokensd   verboseF	formatterrepetition_penaltyrepetition_context_sizetop_p      ?)
r   r   r4   r;   r=   r?   r@   rA   rB   rC   )r#   r:   r$   getr   r   r   )r.   r4   r5   r7   r   r:   r   r;   r=   r?   r@   rA   rB   rC   s                 r'   _callzMLXPipeline._call   sF   	''''''' 	 	 	?  	 !**%68LMM%))&#66)--lC@@
'++Iu==(7(;(;K(N(N	.=.A.A $/
 /
 2A1D1D%t2
 2
 '**7C88x*n!1$;
 
 
 	
r)   Iterator[GenerationChunk]c           
   +    K   	 dd l m} ddlm} n# t          $ r t	          d          w xY w|                    d| j                  }|                    dd          }|                    dd          }	|                    d	d           }
|                    d
d           }|                    dd          }| j                            |d          }|	                    |d                   }| j        j
        }| j        j        }|                                 t           ||| j        ||
||          t          |	                    D ]{\  \  }}}d }|                    |           |                                 |j        }|r0t'          |          }|r|                    |j                   |V  ||k    s|||v r d S |d S )Nr   )generate_stepr!   r   r;   r<   r=   r>   rA   rB   rC   rD   np)return_tensors)r4   r   r;   rA   rB   rC   )text)mlx.corecoremlx_lm.utilsrI   r$   rE   r   r   encodearrayeos_token_iddetokenizerresetzipr   range	add_tokenfinalizelast_segmentr   on_llm_new_tokenrL   )r.   r4   r5   r7   r   mxrI   r   r;   max_new_tokensrA   rB   rC   prompt_tokensrR   rS   tokenprobnrL   chunks                        r'   _streamzMLXPipeline._stream   sE     	!!!!!!2222222 	 	 	?  	 !**%68LMM%))&#66-11,DD.=.A.A $/
 /
 2A1D1D%t2
 2
 '**7C88&&vd&CC++~2n0 #M$j#5(?   .!!
!
 
!
 	 	MUD1 #'D!!%(((  """+D  'T222 =00<<< $$)9ddll5	 	s    +)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   rG   )__name__
__module____qualname____doc__DEFAULT_MODEL_IDr   __annotations__r   r   r   r   r   r   r   model_configclassmethodr(   propertyr/   r3   rF   rb   r"   r0   r'   r   r      s         , %H$$$$EI'+++++ #'L&&&& D
 '+O****  :  L  ,0&**.#
 #
 #
 #
 [#
J 
 
 
 X
    X %):>	)
 )
 )
 )
 )
\ %):>	? ? ? ? ? ? ?r0   r   )
__future__r   loggingtypingr   r   r   r   r   r	   langchain_core.callbacksr
   #langchain_core.language_models.llmsr   langchain_core.outputsr   pydanticr   rg   	getLoggerrc   loggerr   r"   r0   r'   <module>ru      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	$	$a a a a a# a a a a ar0   