
    :iN                         S SK rS SKJr  S SKJr  S SKJr  S SKJ	r	J
r
Jr  S SKJr  S SKJr  S SKJr   " S	 S
\	5      r " S S\\5      r " S S\5      rS\4S jrg)    N)Enum)Path)Any)	BaseModel
ConfigDictfield_validator)BaseSettings)ValidationMode)MistralTokenizerc                       \ rS rSr% Sr\\\\\\\\\\\4   -  4      -  4      \	S'   Sr
\\\\4      S-  \	S'   \" SS9rS\\\4   4S	 jrS
rg)OpenAIChatCompletionRequest   a7  OpenAI chat completion request.

This class is used to parse the request body for the OpenAI chat completion endpoint.

Attributes:
    messages: The messages to use for the chat completion.
    tools: The tools to use for the chat completion.

Note:
    This class accepts extra fields that are not validated.
messagesNtoolsallow)extrareturnc                 .   U R                  5       R                  5        VVs0 s H"  u  pU[        U 5      R                  ;  d  M   X_M$     nnnU R                  R                  5        VVs0 s H  u  pEXC;  d  M  XE_M     snnU l        U$ s  snnf s  snnf )zDrop extra fields from the model.

This method is used to drop extra fields from the model, which are not defined in the model fields.

Returns:
    The extra fields that were dropped from the model.
)
model_dumpitemstypemodel_fields__dict__)selffieldvalueextra_fieldskvs         `/home/james-whalen/.local/lib/python3.13/site-packages/mistral_common/experimental/app/models.pydrop_extra_fields-OpenAIChatCompletionRequest.drop_extra_fields!   s     .2__->-D-D-F
-F\U%W[\`WaWnWnJnLEL-F 	 
 +/--*=*=*?Y*?$!1CX*?Y
 Zs   BB+B:B)r   )__name__
__module____qualname____firstlineno____doc__listdictstrr   __annotations__r   r   model_configr!   __static_attributes__     r    r   r      s{    
 4S4S#S#X2F-F(G#HHHIJJ)-E4S#X$&- G,L4S> r/   r   c                       \ rS rSrSrSrSrg)EngineBackend1   zNThe engine backend to use.

Attributes:
    llama_cpp: The llama.cpp backend.
	llama_cppr.   N)r#   r$   r%   r&   r'   r3   r-   r.   r/   r    r1   r1   1   s     Ir/   r1   c                     ^  \ rS rSr% SrSr\\S'   \R                  R                  S5      r\\S'   Sr\\S'   \R                  r\\S	'   S
r\\S'   Sr\\S'   \" SSS9\S\S\4S j5       5       r\" S	SS9\S\\-  S\4S j5       5       rS\SS4U 4S jjrS\\-  S\SS4S jr\S\4S j5       r\R>                  S\SS4S j5       rSr U =r!$ )Settings;   a   Settings for the Mistral-common API.

Attributes:
    app_name: The name of the application.
    app_version: The version of the application.
    engine_url: The URL of the engine.
    engine_backend: The backend to use for the engine.
    timeout: The timeout to use for the engine API.
zMistral-common APIapp_namezmistral-commonapp_versionz	127.0.0.1
engine_urlengine_backend api_key<   timeoutbeforemoder   r   c                 f    [        U[        5      (       a  UR                  S5      (       a  US S nU$ )N/)
isinstancer*   endswithclsr   s     r    _validate_engine_urlSettings._validate_engine_urlM   s/     eS!!ennS&9&9#2JEr/   c                 F    [        U[        5      (       a  [        U5      nU$ N)rE   r*   r1   rG   s     r    _validate_backendSettings._validate_backendT   s      eS!!!%(Er/   contextNc                 2   > [         TU ]  U5        S U l        g rL   )supermodel_post_init
_tokenizer)r   rO   	__class__s     r    rR   Settings.model_post_init[   s    (37r/   tokenizer_pathvalidation_modec                    US:X  a  [        S5      eU R                  b  [        S5      e[        U[        5      (       a"  [	        U5      nUR                  5       (       a  Un[        U[        5      (       a/  UR                  5       (       a  [        R                  " XS9U l        g [        R                  " [        U5      US9U l        g )Nr;   zITokenizer path must be set via the environment variable `TOKENIZER_PATH`.z'Tokenizer has already been initialized.r@   )	
ValueErrorrS   rE   r*   r   existsr   	from_filefrom_hf_hub)r   rV   rW   candidate_tokenizer_paths       r    _load_tokenizerSettings._load_tokenizer_   s    Rhii__(FGGnc**'+N';$'..00!9nd++0E0E0G0G.88^DO.::3~;NUdeDOr/   c                 J    U R                   c  [        S5      eU R                   $ )NzTokenizer not initialized.)rS   rY   )r   s    r    	tokenizerSettings.tokenizero   s"    ??"9::r/   c                 P    [        U[        5      (       d  [        S5      eXl        g )Nz2Tokenizer must be an instance of MistralTokenizer.)rE   r   rY   rS   )r   r   s     r    ra   rb   u   s!    %!122QRRr/   )rS   )"r#   r$   r%   r&   r'   r7   r*   r+   	importlibmetadataversionr8   r9   r1   r3   r:   r<   r>   intr   classmethodrI   rM   r   rR   r   r
   r^   propertyr   ra   setterr-   __classcell__)rT   s   @r    r5   r5   ;   s?    )Hc( ))112BCKC!J!$1$;$;NM;GSGS\1    2
 %H5cM&9 m   6
8s 8t 8fcDj f> f^b f  +  
  /  D    r/   r5   r   c                      [        5       $ )z,Get the settings for the Mistral-common API.)r5   r.   r/   r    get_settingsrm   |   s
    :r/   )importlib.metadatard   enumr   pathlibr   typingr   pydanticr   r   r   pydantic_settingsr	   *mistral_common.protocol.instruct.validatorr
   (mistral_common.tokens.tokenizers.mistralr   r   r*   r1   r5   rm   r.   r/   r    <module>rv      sT        ; ; * E E!) !HC > | > Bh r/   