Ë
    µŒj`  ã                   óv   — 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 dlmZ  G d„ de
«      Zy	)
é    )ÚAnyÚCallableÚDictÚIteratorÚListÚOptional)ÚCallbackManagerForLLMRun)ÚLLM)ÚGenerationChunk)Úpre_init)ÚFieldc                   óÞ  — e Zd ZU dZdZeed<   eed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   dZeed	<   eZeed
<    eg «      Zee   ed<   	  ed«      Zeed<   	  ed«      Zeed<   	  ed«      Zeed<   	  ed«      Zeee      ed<   	 edeeef   deeef   fd„«       Zedefd„«       Zdedefd„Z	 	 ddedeee      dee    dedef
d„Z!	 	 ddedeee      dee    dede"e#   f
d„Z$y)Ú	ExLlamaV2a+  ExllamaV2 API.

    - working only with GPTQ models for now.
    - Lora models are not supported yet.

    To use, you should have the exllamav2 library installed, and provide the
    path to the Llama model as a named parameter to the constructor.
    Check out:

    Example:
        .. code-block:: python

            from langchain_community.llms import Exllamav2

            llm = Exllamav2(model_path="/path/to/llama/model")

    #TODO:
    - Add loras support
    - Add support for custom settings
    - Add support for custom stop sequences
    NÚclientÚ
model_pathÚexllama_cacheÚconfigÚ	generatorÚ	tokenizerÚsettingsÚlogfuncÚstop_sequencesé–   Úmax_new_tokensTÚ	streamingÚverboseÚdisallowed_tokensÚvaluesÚreturnc                 óT  — 	 dd l }|j                  j                  «       st	        d«      ‚	 ddlm}m}m}m	} ddl
m}m}	 |d   }
|
sd„ |d	<   |d	   }|d
   r|d
   } ||j                  «       nt        d«      ‚ |«       }|d   |_        |j!                  «         ||«      } ||d¬«      }|j#                  |«        ||«      }|d   r |	|||«      }n
 ||||«      }|d   D �cg c]   }|j%                  «       j'                  «       ‘Œ" c}|d<   t)        |d|d   «        |d|d   › �«       |j+                  d«      }|r|j-                  ||«       ||d<   ||d<   ||d<   ||d<   ||d<   |S # t        $ r}t        d«      |‚d }~ww xY w# t        $ r t        d«      ‚w xY wc c}w )Nr   z@Unable to import torch, please install with `pip install torch`.z/CUDA is not available. ExllamaV2 requires CUDA.)r   ÚExLlamaV2CacheÚExLlamaV2ConfigÚExLlamaV2Tokenizer)ÚExLlamaV2BaseGeneratorÚExLlamaV2StreamingGeneratorzúCould not import exllamav2 library. Please install the exllamav2 library with (cuda 12.1 is required)example : !python -m pip install https://github.com/turboderp/exllamav2/releases/download/v0.0.12/exllamav2-0.0.12+cu121-cp311-cp311-linux_x86_64.whlr   c                   ó   — y )N© )ÚargsÚkwargss     úl/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/llms/exllamav2.pyÚ<lambda>z0ExLlamaV2.validate_environment.<locals>.<lambda>_   s   € ¸ó    r   r   z<settings is required. Custom settings are not supported yet.r   T)Úlazyr   r   zstop_sequences r   r   r   r   r   r   )ÚtorchÚImportErrorÚcudaÚis_availableÚEnvironmentErrorÚ	exllamav2r   r!   r"   r#   Úexllamav2.generatorr$   r%   Ú__dict__ÚNotImplementedErrorÚ	model_dirÚprepareÚload_autosplitÚstripÚlowerÚsetattrÚgetÚdisallow_tokens)Úclsr   r.   Úer   r!   r"   r#   r$   r%   r   r   r   r   Úmodelr   r   r   ÚxÚ
disalloweds                       r*   Úvalidate_environmentzExLlamaV2.validate_environment>   s  € ð	Ûð �z‰z×&Ñ&Ô(Ü"Ð#TÓUÐUð	÷ó ÷ð ˜Ñ#ˆÙÙ <ˆF�9ÑØ˜Ñ#ˆà�*ÒØ˜jÑ)ˆHÙ�H×%Ñ%Õ&ä%ØNóð ñ !Ó"ˆØ! ,Ñ/ˆÔØ�‰Ôá˜&Ó!ˆá& u°4Ô8ˆØ×Ñ˜]Ô+á& vÓ.ˆ	Ø�+ÒÙ3°E¸=È)ÓT‰Iá.¨u°mÀYÓOˆIð @FÐFVÒ?WÓ#XÑ?W¸! A§G¡G£I§O¡OÕ$5Ð?WÑ#XˆÐÑ Ü�Ð*¨FÐ3CÑ,DÔEÙ�/ &Ð)9Ñ":Ð!;Ð<Ô=à—Z‘ZÐ 3Ó4ˆ
ÙØ×$Ñ$ Y°
Ô;à ˆˆxÑØ'ˆˆ{ÑØ!ˆˆxÑØ'ˆˆ{ÑØ"/ˆˆÑàˆøôM ò 	ÜØRóàðûð	ûô$ ò 	Üð^óð ð	üòL $Ys(   ‚E0 ¬F Ã'%F%Å0	F
Å9FÆF
ÆF"c                  ó   — y)zReturn type of llm.r   r'   )Úselfs    r*   Ú	_llm_typezExLlamaV2._llm_typeŠ   s   € ð r,   Útextc                 óL   — | j                   j                  j                  |«      S )z-Get the number of tokens present in the text.)r   r   Ú
num_tokens)rF   rH   s     r*   Úget_num_tokenszExLlamaV2.get_num_tokens�   s   € à�~‰~×'Ñ'×2Ñ2°4Ó8Ð8r,   ÚpromptÚstopÚrun_managerr)   c                 óú   — | j                   }| j                  r,d}| j                  ||||¬«      D ]  }|t        |«      z  }Œ |S |j	                  || j
                  | j                  ¬«      }|t        |«      d  }|S )NÚ )rL   rM   rN   r)   )rL   Úgen_settingsrJ   )r   r   Ú_streamÚstrÚgenerate_simpler   r   Úlen)	rF   rL   rM   rN   r)   r   Úcombined_text_outputÚchunkÚoutputs	            r*   Ú_callzExLlamaV2._call“   s“   € ð —N‘Nˆ	à�>Š>Ø#%Ð ØŸ™Ø D°kÈ&ð &ö �ð %¬¨E«
Ñ2Ñ$ðð (Ð'à×.Ñ.ØØ!Ÿ]™]Ø×.Ñ.ð /ó ˆFð œC ›K˜MÐ*ˆFØˆMr,   c              +   ó°  K  — | j                   j                  |«      }| j                  j                  «        | j                  j	                  g «       | j                  j                  || j                  «       d}	 | j                  j                  «       \  }}}	|dz  }|r|j                  || j                  ¬«       |–— |s|| j                  k(  r	 y ŒZ­w)Nr   é   )Útokenr   )r   Úencoder   ÚwarmupÚset_stop_conditionsÚbegin_streamr   ÚstreamÚon_llm_new_tokenr   r   )
rF   rL   rM   rN   r)   Ú	input_idsÚgenerated_tokensrW   ÚeosÚ_s
             r*   rR   zExLlamaV2._stream­   sÅ   è ø€ ð —N‘N×)Ñ)¨&Ó1ˆ	Ø�‰×ÑÔØ�‰×*Ñ*¨2Ô.Ø�‰×#Ñ# I¨t¯}©}Ô=àÐàØ ŸN™N×1Ñ1Ó3‰MˆE�3˜Ø Ñ!ÐáØ×,Ñ,ØØ ŸL™Lð -ô ð ŠKÙÐ&¨$×*=Ñ*=Ò=Øàð ùs   ‚CC)NN)%Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__rS   r   r   r   r   r   Úprintr   r   r   r   r   r   Úintr   Úboolr   r   r   r   r   rD   ÚpropertyrG   rK   r	   rY   r   r   rR   r'   r,   r*   r   r   
   s½  … ñð, €FˆCÓØƒOØ€M�3ÓØ€FˆCÓØ€IˆsÓØ€IˆsÓð €HˆcÓð €GˆXÓá % b£	€N�D˜‘IÓ)Ø=á ›*€N�CÓ$Ø/á˜D“k€IˆtÓ!Ø8á˜$“K€GˆTÓØ-ñ .3°4«[Ð�x  S¡	Ñ*Ó8Ø7àðI¨$¨s°C¨x©.ð I¸TÀ#ÀsÀ(¹^ò Ió ðIðV ð˜3ò ó ðð9 3ð 9¨3ó 9ð %)Ø:>ñ	àðð �t˜C‘yÑ!ðð Ð6Ñ7ð	ð
 ðð 
óð: %)Ø:>ñ	àðð �t˜C‘yÑ!ðð Ð6Ñ7ð	ð
 ðð 
�/Ñ	"ôr,   r   N)Útypingr   r   r   r   r   r   Úlangchain_core.callbacksr	   Úlangchain_core.language_modelsr
   Úlangchain_core.outputsr   Úlangchain_core.utilsr   Úpydanticr   r   r'   r,   r*   Ú<module>rv      s(   ðß @× @å =Ý .Ý 2Ý )Ý ô~�õ ~r,   