
     sg                        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ZddZddZddZ e	d	ee   
      ZddZy)    )annotationsN)ListLiteralUnionAnyTypeTypeVar)	BaseModelc                ^   t        | dd       t        u r>t        | d      rt        | j                        dk\  sJ t        | j                  d         S t        | dd       t        u r_t        | d      rt        | j                        dk\  sJ | j                  D cg c]  }|t        d       us| }}|rt        |d         S | S t        | dd       t        u st        | dd       t        u r>t        | d      rt        | j                        dk\  sJ t        | j                  d         S | S c c}w )N
__origin____args__   r   )
getattrr   hasattrlenr   typer   _get_base_typelistr   )
annotationargnon_optional_argss      G/var/www/html/venv/lib/python3.12/site-packages/llama_cpp/server/cli.pyr   r   
   s/   z<.'9z:.3z7J7J3Kq3PPPJ''*++	\4	0E	9z:.3z7J7J3Kq3PPP%...
#T$Z2GC.
 .
 !"3A"677  	
L$/47:|T2d:z:.3z7J7J3Kq3PPPj11!455.
s   D*,D*c                    t        | dd       }|t        u s|t        u ry|t        t        fv rt        d | j                  D              S y)Nr   Tc              3  2   K   | ]  }t        |        y w)N)_contains_list_type).0r   s     r   	<genexpr>z&_contains_list_type.<locals>.<genexpr>$   s     K&s+Ks   F)r   r   r   r   r   anyr   )r   origins     r   r   r      sG    Zt4F~4	GU#	#Kz7J7JKKK    c                    t        | t              r| j                  d      } h d}h d}t        |       j	                         j                         }||v ry||v ryt        d|        )Nzutf-8>   1tyonyestrue>   0fnnoofffalseTFzInvalid boolean argument: )
isinstancebytesdecodestrlowerstrip
ValueError)r   true_valuesfalse_valuesarg_strs       r   _parse_bool_argr8   )   sf    #ujj!6K8L#hnn$$&G+	L	 5cU;<<r    c                   |j                   j                         D ]  \  }}|j                  }|j                  r%|r#|j	                         s|d|j                   dz  }|j
                  t        |j
                        nt        }t        |j
                        }|t        ur| j                  d| ||rdnd||       |t        u s| j                  d| |t        |         y)z:Add arguments from a pydantic model to an argparse parser.z (default: )Nz--*)destnargsr   help)r<   r   r>   )model_fieldsitemsdescriptiondefaultis_requiredr   r   r1   r   booladd_argumentr8   )parsermodelnamefieldrA   	base_type	list_types          r   add_args_from_modelrL   :   s     ))//1 e''==[1B1B1D[q99K050@0@0LN5++,RU 	 ((8(89	D TF&cD     TF$#}	   #r    T)boundc           
          | di t        |      j                         D ci c]  \  }}||| j                  v r|| c}}S c c}}w )z2Parse a pydantic model from an argparse namespace. )varsr@   r?   )rG   argskvs       r   parse_model_from_argsrU   Y   sX      T
((*
1}e&8&8!8 qD
 
s   A)r   	Type[Any]returnrV   )r   zType[Any] | NonerW   rD   )r   zstr | bytes | boolrW   rD   )rF   zargparse.ArgumentParserrG   zType[BaseModel])rG   rM   rR   zargparse.NamespacerW   rM   )
__future__r   argparsetypingr   r   r   r   r   r	   pydanticr
   r   r   r8   rL   rM   rU   rP   r    r   <module>r\      s?    "  ; ; (="8 CtI'r    