
    Ig                        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y)    )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y)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)extrac                    	 ddl m} |xs i }|r |||||      \  }}	n ||||      \  }}	|xs i }
 | d|||	||||
d|S # t        $ r t        d      w xY w)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   kwargsr   r   r   _pipeline_kwargss              b/var/www/html/answerous/venv/lib/python3.12/site-packages/langchain_community/llms/mlx_pipeline.pyfrom_model_idzMLXPipeline.from_model_idR   s    	# ,1r#H.>dSE9#H.>TJE9*0b 	
-%,	
 	
 		
  	? 	s   A Ac                v    | 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   s7      $ 5 5 --II#33
 	
    c                     y)Nmlx_pipeliner    r*   s    r&   	_llm_typezMLXPipeline._llm_type   s    r-   c                   	 ddl m} |j                  d| j                        }|j                  dd      }|j                  dd      }|j                  d	d
      }	|j                  dd       }
|j                  dd       }|j                  dd       }|j                  dd      } || j
                  | j                  ||||	|
|||
      S # t        $ r t        d      w xY w)Nr   )generater   r   temp        
max_tokensd   verboseF	formatterrepetition_penaltyrepetition_context_sizetop_p      ?)
r   r   promptr3   r5   r7   r8   r9   r:   r;   )r!   r2   r"   getr   r   r   )r+   r=   stoprun_managerr$   r2   r   r3   r5   r7   r8   r9   r:   r;   s                 r&   _callzMLXPipeline._call   s   	' !**%68L8LM%))&#6)--lC@
'++Iu=(7(;(;K(N	.=.A.A $/
 2A1D1D%t2
 '**7C8**nn!1$;
 	
)  	? 	s   C Cc           
   +  `  K   	 dd l m} ddlm} |j                  d| j                        }|j                  dd      }|j                  dd      }	|j                  d	d       }
|j                  d
d       }|j                  dd      }| j                  j                  |d      }|j                  |d         }| j                  j                  }| j                  j                  }|j                          t         ||| j                  ||
||      t        |	            D ]t  \  \  }}}d }|j!                  |       |j#                          |j$                  }|r-t'        |      }|r|j)                  |j*                         | ||k(  s|o||v st y  y # t        $ r t	        d      w xY ww)Nr   )generate_stepr   r   r3   r4   r5   r6   r9   r:   r;   r<   np)return_tensors)r=   r   r3   r9   r:   r;   )text)mlx.corecoremlx_lm.utilsrC   r"   r>   r   r   encodearrayeos_token_iddetokenizerresetzipr   range	add_tokenfinalizelast_segmentr   on_llm_new_tokenrF   )r+   r=   r?   r@   r$   mxrC   r   r3   max_new_tokensr9   r:   r;   prompt_tokensrL   rM   tokenprobnrF   chunks                        r&   _streamzMLXPipeline._stream   s    	!2 !**%68L8LM%))&#6-11,D.=.A.A $/
 2A1D1D%t2
 '**7C8&&vd&C+~~22nn00 #$jj#5(? .!
!
 	MUD1 #'D!!%(  "++D 'T200< $)9ddl5	5  	? 	s(   F.F E<F.F.F.F++F.)NNFN)r   r   r   r   r   r   r   r   r   r   r$   r   returnr   )r]   zMapping[str, Any])r]   r   )NN)
r=   r   r?   Optional[List[str]]r@   "Optional[CallbackManagerForLLMRun]r$   r   r]   r   )
r=   r   r?   r^   r@   r_   r$   r   r]   zIterator[GenerationChunk])__name__
__module____qualname____doc__DEFAULT_MODEL_IDr   __annotations__r   r   r   r   r   r   r   model_configclassmethodr'   propertyr,   r0   rA   r\   r    r-   r&   r   r      s   , %Hc$E3Is'+n+ #'L-& D$
 '+O^*  L  ,0&**.#
#
 )#
 $	#

 #
 (#
 #
 
#
 #
J 
 
   %):>	)
)
 ")
 8	)

 )
 
)
\ %):>	?? "? 8	?
 ? 
#?r-   r   )
__future__r   loggingtypingr   r   r   r   r   r	   langchain_core.callbacksr
   #langchain_core.language_models.llmsr   langchain_core.outputsr   pydanticr   rd   	getLoggerr`   loggerr   r    r-   r&   <module>rr      sC    "  C C = 3 2 5 			8	$a# ar-   