
    -`i[             	          U d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlZd dlZd dlZd dlm Z m!Z! d dl"m#Z# d d	l$m%Z% d dl&m'Z' d d
l(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@mAZAmBZBmCZCmDZDmEZE d dlFmGZG d dlHmIZImJZJmKZKmLZLmMZMmNZN d dlOmPZPmQZQ d dlRmSZS d dlTmUZUmVZV d dlWmXZX d dlYmZZZ d dl[m\Z\ d dl]m^Z^m_Z_ d dl`maZambZb d dlcmdZd d dlemfZfmgZg d dlhmiZimjZj d dlkmlZl d dlmmnZn d dlompZp d dlqmrZr d dlsmtZt d dlumvZv d dlwmxZx d d lymzZz d d!l{m|Z| erd d"l}m~Z~ d d#lmZ d d$lmZ d d%lmZ neZeZ~eZeZ e^e          Z ed&          Zee         ez  Zeed'<   ee         ez  Zeed(<   d)eegef         d*eegef         fd+Zd)eegef         d*eegedz  f         fd,Zd-ed*eeeef         z  dz  fd.Zd/ed0ed*e%e         fd1Zd2ee         d0ed*efd3Zd2ee         d0ed*efd4Zd2ee         d*eeef         fd5Zd2ee         d0ed*eeef         fd6Zd/ed*efd7Zd/ed*ee         fd8Z ed9 ej        D                       p6ej        d          xZ                    d:          pe                    d;          Z ej        d<=          d>e,d*eeeeef         f         fd?            Zd>e,d*eeeeef         f         fd@Ze	 G dA dB                      Ze	 G dC dDe                      ZdEefdFZdGed*efdHZdGed*efdIZdS )J    N)Callable)MISSING	dataclassfieldsis_dataclass)permutations)	UnionType)
TYPE_CHECKING	AnnotatedAnyLiteral	TypeAliasTypeVarUnioncastget_args
get_origin)TypeAdapterValidationError)	FieldInfo)TypeIs)AttentionConfigCacheConfigCompilationConfig
ConfigTypeDeviceConfigECTransferConfig
EPLBConfigKVEventsConfigKVTransferConfig
LoadConfig
LoRAConfigModelConfigMultiModalConfigObservabilityConfigParallelConfigPoolerConfigProfilerConfigSchedulerConfigSpeculativeConfigStructuredOutputsConfig
VllmConfigget_attr_docs)	BlockSize
CacheDTypeKVOffloadingBackendMambaCacheMode
MambaDTypePrefixCachingHashAlgo)Device)ConvertOptionHfOverridesLogprobsMode
ModelDTypeRunnerOptionTokenizerMode)MMCacheTypeMMEncoderTPMode)DetailedTraceModules)DistributedExecutorBackendExpertPlacementStrategy)SchedulerPolicy)	get_field)OptimizationLevel)init_loggersuppress_logging)CpuArchEnumcurrent_platformload_general_plugins)is_in_ray_actoris_ray_initialized)is_interleavedmaybe_override_with_speculators)is_gguf)get_model_path)is_cloud_storage)FlexibleArgumentParser)	GiB_bytes)get_ip)resolve_kv_cache_dtype_string)AttentionBackendEnum)LogitsProcessor)QuantizationMethods)LoadFormatsUsageContext)ExecutorTTypeHint	TypeHintTreturn_typereturnc                 0     dt           dt          f fd}|S )Nvalr_   c                 x    	  |           S # t           $ r!}t          j        d|  d d          |d }~ww xY w)NzValue z cannot be converted to .)
ValueErrorargparseArgumentTypeError)ra   er^   s     i/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/engine/arg_utils.py_parse_typezparse_type.<locals>._parse_typey   se    	;s### 	 	 	,DDDkDDD 	s   
 
949strr[   )r^   ri   s   ` rh   
parse_typerl   x   s7                c                 6     dt           dt          d z  f fd}|S )Nra   r_   c                 P    | dk    s| dk    rd S  t                    |           S )N None)rl   )ra   r^   s    rh   _optional_typez%optional_type.<locals>._optional_type   s1    "99v4&z+&&s+++rm   rj   )r^   rr   s   ` rh   optional_typers      s;    ,C ,AH , , , , , ,
 rm   ra   c                     t          j        d|           st          |           S  t          t          j                  |           S )Nz(?s)^\s*{.*}\s*$)rematchrk   rs   jsonloads)ra   s    rh   union_dict_and_strry      s<    8'-- 3xx$=$$S)))rm   	type_hinttypec                 ,    | |u pt          |           |u S )z*Check if the type hint is a specific type.)r   )rz   r{   s     rh   is_typer}      s    =
9 5 5 ==rm   
type_hintsc                 :    t          fd| D                       S )z0Check if the type hints contain a specific type.c              3   8   K   | ]}t          |          V  d S Nr}   ).0rz   r{   s     rh   	<genexpr>z contains_type.<locals>.<genexpr>   s-      DDIwy$''DDDDDDrm   )anyr~   r{   s    `rh   contains_typer      s&    DDDDDDDDDDrm   c                 <    t          fd| D             d          S )z*Get the specific type from the type hints.c              3   <   K   | ]}t          |          |V  d S r   r   )r   thr{   s     rh   r   zget_type.<locals>.<genexpr>   s2      >>GB,=,=>>>>>>>rm   N)nextr   s    `rh   get_typer      s(    >>>>j>>>EEErm   c                 B   t          | t                    }t          |          }t          |d                   t	          fd|D                       st          d| dd |D                        t          | t                    rdnd}d|t          |          iS )	zGet the `type` and `choices` from a `Literal` type hint in `type_hints`.

    If `type_hints` also contains `str`, we use `metavar` instead of `choices`.
    r   c              3   8   K   | ]}t          |          V  d S r   )
isinstance)r   optionoption_types     rh   r   z$literal_to_kwargs.<locals>.<genexpr>   s-      EE6z&+..EEEEEErm   z*All options must be of the same type. Got z with types c                 ,    g | ]}t          |          S  )r{   )r   cs     rh   
<listcomp>z%literal_to_kwargs.<locals>.<listcomp>   s    (B(B(BQa(B(B(Brm   metavarchoicesr{   )	r   r   r   r{   allrd   r   rk   sorted)r~   rz   optionskwargr   s       @rh   literal_to_kwargsr      s    
 W--Iy!!Gwqz""KEEEEWEEEEE 
EE E(B(B'(B(B(BE E
 
 	
 'z377FIIYEKw88rm   c                    t          | |          }t          |          }|d         t          fd|D                       sJ d| d            t                    t          t
          hv r+t          t                    v sJ d d            t          |t          us	t          |v rdnt          |          dS )Nr   c              3   2   K   | ]}|t           u|u V  d S r   )Ellipsis)r   t	elem_types     rh   r   z'collection_to_kwargs.<locals>.<genexpr>   s1      BB!0A0AqI~0A0A0A0ABBrm   z8All non-Ellipsis elements must be of the same type. Got rc   zTIf element can have multiple types, one must be 'str' (i.e. 'list[int | str]'). Got +)r{   nargs)
r   r   r   r   r   r	   rk   tupler   len)r~   r{   rz   typesr   s       @rh   collection_to_kwargsr      s    T**IYEaI BBBBuBBBBB  K5KKK B
 )	 222hy))))):-6: : : *)) 	 E))X->->CJJ  rm   c                     | j         dk    S )z*Check if the class is not a built-in type.builtins)
__module__)rz   s    rh   is_not_builtinr      s    :--rm   c                 \   t                      }t          |           }t          |           }|t          u r)|                    t          |d                              nM|t          t          hv r(|D ]$}|                    t          |                     %n|                    |            |S )z6Extract type hints from Annotated or Union type hints.r   )	setr   r   r   updateget_type_hintsr   r	   add)rz   r~   originargsargs        rh   r   r      s     #J	""FID.a112222	E9%	%	% 	3 	3CnS112222	3 	y!!!rm   c              #      K   | ]}d |v V  	dS )--helpNr   )r   r   s     rh   r   r      s&      ,,CC,,,,,,rm   mkdocszmkdocs/__main__.py   )maxsizeclsc                 
   t           rt          |           ni }i }t          |           D ]3}t          |j                  }d |D             }t          |d           }|j        t          urf|j        }t          |t                    rI|j
        |j        }n]t                      5  |
                                }d d d            n# 1 swxY w Y   n"|j
        t          ur|
                                }|j        }|                    |d                                          }	|	                    dd          }	||	d||<   d}
|:|fdt           dt"          fd	}|||         d
<   ||         dxx         d|
 z  cc<   nt%          |t&                    rt(          j        ||         d<   nt%          |t,                    r*||                             t1          |                     nt%          |t2                    r0||                             t5          |t2                               nEt%          |t6                    r0||                             t5          |t6                               n t%          |t8                    r0||                             t5          |t8                               nt%          |t:                    r|dk    r5t<          ||         d
<   ||         dxx         dt<          j         z  cc<   nk|dv r5t@          ||         d
<   ||         dxx         dt@          j         z  cc<   n2t:          ||         d
<   n t%          |tB                    rtB          ||         d
<   nt%          |tD                    r?t%          |t                     stG          d |D                       rtH          ||         d
<   nt%          |tD                    r<tK          tL          j'                  ||         d
<   ||         dxx         d|
 z  cc<   nUt%          |t                     stG          d |D                       rt           ||         d
<   ntQ          d| d| d          tS          ||                             d
                    t,          u r5||                             t1          ||         d
         h                     t	          d           |v rut%          |t&                    s`tU          ||         d
                   ||         d
<   ||                             d          r!||         d         +                    d           5|S )Nc              3   8   K   | ]}t          |          |V  d S r   )r   r   r   s     rh   r   z"_compute_kwargs.<locals>.<genexpr>   s/      AABR0@0@ARAAAAAArm   rp   %z%%)defaulthelpzFShould either be a valid JSON string or JSON keys passed individually.ra   r_   c                     	 t          |                              |           S # t          $ r'}t          j        t          |                    |d }~ww xY wr   )r   validate_jsonr   re   rf   repr)ra   r   rg   s      rh   parse_dataclassz(_compute_kwargs.<locals>.parse_dataclass  s`    E&s++99#>>>& E E E"4T!WW==1DEs   !$ 
A"AAr{   r   z

actionmax_model_len)max_num_batched_tokenskv_cache_memory_bytesc              3   4   K   | ]}t          |          V  d S r   r   r   s     rh   r   z"_compute_kwargs.<locals>.<genexpr>5  s*      ;;">"%%;;;;;;rm   c              3   4   K   | ]}t          |          V  d S r   r   r   s     rh   r   z"_compute_kwargs.<locals>.<genexpr>;  s;       3
 3
#%N23
 3
 3
 3
 3
 3
rm   zUnsupported type z for argument rc   r   rq   ),
NEEDS_HELPr-   r   r   r{   r   r   r   r   r   default_factoryrD   namegetstripreplacerk   r   r   boolre   BooleanOptionalActionr   r   r   r   r   listr   inthuman_readable_int_or_auto__doc__human_readable_intfloatdictr   ry   rl   rw   rx   rd   r   rs   append)r   cls_docskwargsfieldr~   	generatordataclass_clsr   r   r   json_tipr   s               rh   _compute_kwargsr      s    &07}S!!!RHF ]7 ]7$25:$>$>
 BA*AAA	Y-- =''mG'9-- <*2%oGG *++ < <")"9"9";";< < < < < < < < < < < < < < <"'11++--G z||D"%%++--||C&& $+D99t U 	 $.; E ES E E E E E $3F4L 4L   $58$5$55    :t,, #	T%-%CF4L"":w//  	T4L 1* = =>>>>:u-- 	T4L 4Z G GHHHH:t,, 	T4L 4Z F FGGGG:s++ 	T4L 4Z E EFFFF:s++ 	T&&'AtV$tV$$$(S/I/Q(S(SS$$$$LLL'9tV$tV$$$(K/A/I(K(KK$$$$'*tV$$:u-- 	T#(F4L  :t,, 	T*c**	T;;
;;;;;	T $6F4L  :t,, 	T#-dj#9#9F4L 4L   $58$5$55    :s++ 	Ts 3
 3
)33
 3
 3
 0
 0
 	T $'F4L  RRR4RRRSSS fTl&&v..//7::4L 16$<3G2H I IJJJ ::##M*d,K,K##0f1E#F#FF4L d|	** 7tY'..v666Ms   $CC		C		c                 D    t          j        t          |                     S )a{  Return argparse kwargs for the given Config dataclass.

    If `--help` or `mkdocs` are not present in the command line command, the
    attribute documentation will not be included in the help output.

    The heavy computation is cached via functools.lru_cache, and a deep copy
    is returned so callers can mutate the dictionary without affecting the
    cached version.
    )copydeepcopyr   )r   s    rh   
get_kwargsr   P  s     =--...rm   c            	          e Zd ZU dZej        Zeed<   ej        Ze	ed<   ej
        Z
eed<   ej        Zeee         z  dz  ed<   ej        Zedz  ed<   ej        Zedz  ed<   ej        Zeed	<   ej        Zeed
<   ej        Ze	ed<   ej        Ze	ed<   ej        Zeez  ed<   ej        Ze	ed<   ej        Zeed<   ej        Zee         dz  ed<   ej        Zedz  ed<   ej        Zeed<   ej        Zeez  ed<   ej        Zeed<   ej         Z e!ed<   e"j#        Z$e%ed<   ej&        Z&e'ed<   ej(        Z(e'dz  ed<   e)j*        Z*ee'         dz  ed<    e+e)d          Z,e'dz  ed<   e-j.        Z.ee/z  e0e1         z  dz  ed<   e-j2        Z2e'ed<   e-j3        Z3eed<   e-j4        Z4e'ed<   e-j5        Z5e'ed<   e-j6        Z6e'ed <   e-j7        Z7e'ed!<   e-j8        Z8e'ed"<   e-j9        Z9e'ed#<   e-j:        Z:e'ed$<   e-j;        Z;e'ed%<   e-j<        Z<e'ed&<   dZ=e'dz  ed'<   dZ>e'dz  ed(<   dZ?e'dz  ed)<   dZ@edz  ed*<   dZAe'dz  ed+<   d,ZBe	ed-<   d,ZCe	ed.<   e-jD        ZDeed/<   e-jE        ZEe	ed0<   e-jF        ZFeed1<   e-jG        ZGe	ed2<   e-jH        ZHe'ed3<   e-jI        ZIe'ed4<   e-jJ        ZJe'ed5<   e-jK        ZKe	dz  ed6<    e+e-d7          ZLeMed7<   e-jN        ZNe	ed8<   e-jO        ZOePed9<   e-jQ        ZQe'ed:<   e-jR        ZRe'ed;<   e-jS        ZSe'dz  ed<<   e"jT        ZTeUdz  ed=<   dZVe	dz  ed><   e"jW        ZWeXed?<   ejY        ZYe	ed@<   ejZ        ZZe	edA<   e"j[        Z[e\edB<   e"j]        Z]e\edC<   e"j^        Z^e\edD<   e"j_        Z_e'dz  edE<   dZ`e'dz  edF<   eajb        Zbe'edG<   eajc        Zce'edH<   eajd        Zde'edI<   dZee'dz  edJ<   ejf        Zfe'edK<   ejg        ZgehedL<   d,Zie	edM<   d,Zje	edN<   ejk        Zkedz  edO<   ejl        Zledz  edP<   ejm        Zme	ez  dz  edQ<    e+edR          ZneoedR<   ejp        Zpedz  edS<   ejq        Zqerdz  edT<   ejs        Zse	edU<   ejt        Zte	edV<   e-ju        Zue	edW<    e+evdX          Zwexee'exee'f         z  f         edY<   evjy        Zye	edZ<   evjz        Zze	ed[<    e+evd\          Z{exeexee|f         f         ed\<   evj}        Z}exee|f         dz  ed]<   evj~        Z~e\ed^<   evj        Zedz  ed_<   evj        Ze'ed`<   evj        Ze	eda<   evj        Zeedb<   evj        Zeez  dz  edc<   dZedz  edd<   evj        Ze	ede<   evj        Ze\edf<   d,Ze	edg<   ej        Ze'edh<   ej        Ze'edi<   ej        Zexeef         dz  edj<   ej        Ze	edk<   ej        Ze'dz  edl<   ej        Zeej         z  dz  edm<   ej        Ze	edn<   e-j        Ze	edo<   e"j        Ze'dz  edp<    e+edq          Zexedq<    e+edr          Zeee         z  edr<   dZe	dz  eds<   eaj        Ze	edt<   eaj        Ze	dz  edu<    e+edv          Zeedv<   ej        Zeedw<   dZedz  edx<   ej        Zedz  edy<   dZexee|f         dz  edz<   ej        Zedz  ed{<   ej        Zedz  ed|<   ej        Zee         dz  ed}<   ej        Ze	ed~<    e+ed          Ze\ed<   ej        Ze	ed<   ej        Ze	ed<   ej        Ze	ed<   ej        Ze	ed<   ej        Ze	ed<   eaj        Zeed<   eaj        Zee0e         z  dz  ed<   ej        Zedz  ed<    e+ed          Ze)ed<    e+ed          Zeed<   e-j        Zeed<   e-j        Zeed<    e+ed          Zeed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   ej        Zeed<   ej        Ze	ed<    e+ed          Zexee|f         ed<   ej        Zeed<   ej        Zeed<   ej        Zedz  ed<   e"j        Ze	ed<   e"j        Zeed<   e"j        Zeed<    e+e"d          Ze'dz  ed<   e"j        Zeed<    e+ed          Zexee|f         ed<   ej        Ze	ed<   ej        Zeed<   ej        Zeee0e         z           dz  ed<   	 eaj        Ze	dz  ed<   eaj        Ze'ed<   e"j        Ze	ed<   ej        Zeed<   e"j        Ze\dz  ed<   e"j        Zeed<   d,Ze	ed<   d Zededefd            Zedej        fd            ZdefdZd ZdefdZdede-dedz  fdZ	 	 ddedz  de	defdZdefdZede'deexedz  e'f         exedz  e'f         f         fd            ZdeddfdZdedz  defdZdS )
EngineArgszArguments for vLLM engine.modelenable_return_routed_expertsmodel_weightsNserved_model_name	tokenizerhf_config_pathrunnerconvertskip_tokenizer_initenable_prompt_embedstokenizer_modetrust_remote_codeallowed_local_media_pathallowed_media_domainsdownload_dirsafetensors_load_strategyload_formatconfig_formatdtypekv_cache_dtypeseedr   cudagraph_capture_sizesmax_cudagraph_capture_sizedistributed_executor_backendpipeline_parallel_sizemaster_addrmaster_portnnodes	node_ranktensor_parallel_sizeprefill_context_parallel_sizedecode_context_parallel_sizedcp_kv_cache_interleave_sizecp_kv_cache_interleave_sizedata_parallel_sizedata_parallel_rankdata_parallel_start_rankdata_parallel_size_localdata_parallel_addressdata_parallel_rpc_portFdata_parallel_hybrid_lbdata_parallel_external_lbdata_parallel_backendenable_expert_parallelall2all_backend
enable_dboubatch_sizedbo_decode_token_thresholddbo_prefill_token_threshold#disable_nccl_for_dp_synchronizationeplb_configenable_eplbexpert_placement_strategy_api_process_count_api_process_rankmax_parallel_loading_workers
block_sizeenable_prefix_cachingprefix_caching_hash_algodisable_sliding_windowdisable_cascade_attn
swap_spacecpu_offload_gbgpu_memory_utilizationr   r   max_num_partial_prefillsmax_long_partial_prefillslong_prefill_token_thresholdmax_num_seqsmax_logprobslogprobs_modedisable_log_statsaggregate_engine_loggingrevisioncode_revisionhf_tokenhf_overridestokenizer_revisionquantizationallow_deprecated_quantizationenforce_eagerdisable_custom_all_reducelimit_per_promptlimit_mm_per_promptenable_mm_embedsinterleave_mm_stringsmedia_io_kwargsmm_processor_kwargsmm_processor_cache_gbmm_processor_cache_typemm_shm_cache_max_object_size_mbmm_encoder_onlymm_encoder_tp_modemm_encoder_attn_backendio_processor_pluginskip_mm_profilingvideo_pruning_rateenable_lora	max_lorasmax_lora_rankdefault_mm_lorasfully_sharded_lorasmax_cpu_loras
lora_dtypeenable_tower_connector_loraray_workers_use_nsightnum_gpu_blocks_overridemodel_loader_extra_configignore_patternsenable_chunked_prefilldisable_chunked_mm_inputdisable_hybrid_kv_cache_managerstructured_outputs_configreasoning_parserreasoning_parser_pluginlogits_processor_patternspeculative_configshow_hidden_metrics_for_versionotlp_traces_endpointcollect_detailed_traceskv_cache_metricskv_cache_metrics_samplecudagraph_metricsenable_layerwise_nvtx_tracingenable_mfu_metrics enable_logging_iteration_detailsenable_mm_processor_statsscheduling_policyscheduler_clspooler_configcompilation_configattention_config
worker_clsworker_extension_clsprofiler_configkv_transfer_configkv_events_configec_transfer_configgeneration_configenable_sleep_modeoverride_generation_config
model_imploverride_attention_dtypeattention_backendcalculate_kv_scalesmamba_cache_dtypemamba_ssm_cache_dtypemamba_block_sizemamba_cache_modeadditional_configuse_tqdm_on_loadpt_load_map_locationlogits_processorsasync_schedulingstream_intervalkv_sharing_fast_prefilloptimization_levelkv_offloading_sizekv_offloading_backendtokens_onlyc                    t          | j        t                    rt          di | j        | _        t          | j        t                    rt          di | j        | _        t          | j        t                    rt          di | j        | _        ddlm	}  |             t          j        j        r| j        }t          | j        | j                  | _        || j        ur!t                               d|| j                   | j        T| j        }t          | j        | j                  | _        || j        ur't                               d|| j                   d S d S d S d S )Nr   rG   z@HF_HUB_OFFLINE is True, replace model_id [%s] to model_path [%s]zHHF_HUB_OFFLINE is True, replace tokenizer_id [%s] to tokenizer_path [%s]r   )r   ri  r   r   rj  r   r  r   vllm.pluginsrH   huggingface_hub	constantsHF_HUB_OFFLINEr   rN   r0  loggerinfor   r4  )selfrH   model_idtokenizer_ids       rh   __post_init__zEngineArgs.__post_init__G  s    d-t44 	S&7&R&R$:Q&R&RD#d+T22 	M$3$L$Ld6K$L$LD!d&-- 	>)==D,<==D555555$3 	zH'
DMBBDJtz))VJ  
 ~)#~!/@W!X!Xt~55KK1$	    	 	 *) 65rm   parserr_   c           	      p!   t          t                    }|                     dt          j                  }dt          j        dd         v rdt          j        dd         v s |j        dpi |d           |j        dqi |d
           |j        dri |d           |j        dsi |d           |j        dti |d           |j        	 dui |d           |j        dvi |d           |j        dwi |d           |j        dxi |d           |j        	 dyi |d           |j        	 dzi |d           |j        d{i |d           |j        d|i |d            |j        	 d}i |d"           |j        d~i |d$           |j        di |d'           |j        	 di |d)           |j        di |d+           |j        	 di |d-           |j        di |d/           |j        di |d1           |j        	 di |d3           |j        	 di |d5           |j        	 di |d7           |j        	 di |d9           |j        	 di |d;           |j        di |d=          |                    d>t          d?d@|dA         dB         |dA         dC         D            |j        di |dF           |j        di |dH           |j        	 di |dJ           |j        	 di |dL           |j        	 di |dN           |j        	 di |dP           |j        di |dR           |j        	 di |dT           |j        	 di |dV           |j        	 di |dX          t          t                    }|                     dYt          j                  } |j        di |d[           |j        di |d]           |j        	 di |d_           |j        	 di |da           |j        di |dc           |j        di |de           |j        	 di |dg          t          t                    }|                     dht          j                  } |j        	 di |dj          t          t                    }|                     dkt          j                  } |j        	 di |dm           |j        	 di |do          t          t                    }	|                     dpt          j                  }
 |
j        	 di |	dr           |
j        	 	 di |	du           |
j        di |	dw           |
j        di |	dy           |
j        di |	d|           |
j        di |	d           |
j        	 di |	d           |
j        	 	 di |	d           |
j        	 di |	d           |
j        	 di |	d           |
j        	 	 di |	d           |
j        	 di |	d          |
                    ddt          d           |
                    ddt          d           |
                    ddt          d           |
                    ddt          d           |
                    ddt          d           |
                    ddt          dd            |
j        	 	 di |	d           |
j        	 	 di |	d           |
j        	 	 di |	d           |
j        	 di |	d           |
j        di |	d           |
j        	 di |	d           |
j        	 di |	d           |
j        	 di |	d           |
j        	 di |	d           |
j        di |	d           |
j        di |	d           |
j        	 di |	d           |
j        	 di |	d           |
j        	 di |	d           |
j        	 di |	d           |
j        di |	d           |
j        	 di |	d          t          t                    }|                     dt          j                  } |j        di |d           |j        	 di |d           |j        	 di |d           |j        di |d           |j        di |d           |j        	 di |d           |j        	 di i |d         dBdi  |j        	 di |d           |j        di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d          t          t                    }|                     dt          j                  } |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d           |j        	 di |d          t          t                    }|                     dt          j                  }|                    d	t           j        d
            |j        di |d           |j        di |d           |j        	 di |d           |j        	 di |d           |j        di |d           |j        	 di |d           |j        di |d          t          t$                    }|                     dt$          j                  } |j        	 di |d           |j        	 di |d          |d         d          }d!d"                    |           d#}||d         d$<   |d         d xx         d% t)          t+          t,                    d&'          D             z  cc<    |j        	 di |d           |j        	 di |d*           |j        	 di |d,           |j        	 di |d.           |j        	 di |d0           |j        	 di |d2           |j        	 di |d4          t          t.                    }|                     d5t.          j                  } |j        	 di i |d7         dBdi  |j        	 di i |d9         dBdi  |j        	 di |d;           |j        	 di |d=           |j        	 di |d?           |j        	 di |dA           |j        	 di i |dC         dBdi  |j        	 di |dE           |j        	 di |dG           |j        	 di |dI           |j        	 di |dK           |j        	 di |dM          t          t0                    }|                     dNt0          j                  } |j        	 di |dP           |j        	 di |dR          t          t2                    }|                     dSt2          j                  }t5          t6          j                  |dT         dU<    |j        	 di |dT           |j        	 di |dX           |j        di |dZ           |j        	 di |d\           |j        	 di |d_           |j        	 di |db           |j        	 di |dd           |j        	 di |df           |j        d i |dh           |j        	 di |dj          |                     dkdldm           |                     dndldo           | S (  z%Shared CLI arguments for vLLM engine.r#   )titledescriptionserve   Nr   --modelr   --runnerr   	--convertr   --tokenizerr   --tokenizer-moder   --trust-remote-coder   --dtyper   --seedr   --hf-config-pathr   --allowed-local-media-pathr   --allowed-media-domainsr   
--revisionr0  --code-revisionr1  --tokenizer-revisionr4  --max-model-lenr   --quantization-qr5  --allow-deprecated-quantizationr6  --enforce-eagerr7  --enable-return-routed-expertsr   --max-logprobsr,  --logprobs-moder-  --disable-sliding-windowr#  --disable-cascade-attnr$  --skip-tokenizer-initr   --enable-prompt-embedsr   --served-model-namer   --config-formatr   z
--hf-token?Tr2  r   r   )r{   r   constr   r   --hf-overridesr3  --pooler-configrh  --logits-processor-patternrZ  --generation-configrq  --override-generation-configrs  --enable-sleep-moderr  --model-implrt  --override-attention-dtyperu  --logits-processorsr  --io-processor-pluginrE  r!   --load-formatr   --download-dirr   --safetensors-load-strategyr   --model-loader-extra-configrR  --ignore-patternsrS  --use-tqdm-on-loadr}  --pt-load-map-locationr~  r   --attention-backendbackendr+   --reasoning-parserrX  --reasoning-parser-pluginrY  r&   --distributed-executor-backendr   --pipeline-parallel-size-ppr   --master-addrr  --master-portr  --nnodes-nr  --node-rank-rr  --tensor-parallel-size-tpr  --decode-context-parallel-size-dcpr  --dcp-kv-cache-interleave-sizer  --cp-kv-cache-interleave-sizer	  --prefill-context-parallel-size-pcpr  --data-parallel-size-dpr
  z--data-parallel-rankz-dpnzSData parallel rank of this instance. When set, enables external load balancer mode.)r{   r   z--data-parallel-start-rankz-dprz0Starting data parallel rank for secondary nodes.z--data-parallel-size-localz-dplz5Number of data parallel replicas to run on this node.z--data-parallel-addressz-dpaz+Address of data parallel cluster head-node.z--data-parallel-rpc-portz-dppz)Port for data parallel RPC communication.z--data-parallel-backendz-dpbmpz0Backend for data parallel, either "mp" or "ray".)r{   r   r   --data-parallel-hybrid-lb-dphr  --data-parallel-external-lb-dper  --enable-expert-parallel-epr  --all2all-backendr  --enable-dbor  --ubatch-sizer  --dbo-decode-token-thresholdr  --dbo-prefill-token-thresholdr  %--disable-nccl-for-dp-synchronizationr  --enable-eplbr  --eplb-configr  --expert-placement-strategyr  --max-parallel-loading-workersr  --ray-workers-use-nsightrP  --disable-custom-all-reducer8  --worker-clsrk  --worker-extension-clsrl  r   --block-sizer   --gpu-memory-utilizationr'  --kv-cache-memory-bytesr   --swap-spacer%  --kv-cache-dtypecache_dtype--num-gpu-blocks-overriderQ  --enable-prefix-cachingr!  --prefix-caching-hash-algor"  --cpu-offload-gbr&  --calculate-kv-scalesrw  --kv-sharing-fast-prefillr  --mamba-cache-dtyperx  --mamba-ssm-cache-dtypery  --mamba-block-sizerz  --mamba-cache-moder{  --kv-offloading-sizer  --kv-offloading-backendr  r$   --limit-mm-per-promptr9  --enable-mm-embedsr;  --media-io-kwargsr=  --mm-processor-kwargsr>  --mm-processor-cache-gbr?  --mm-processor-cache-typer@  !--mm-shm-cache-max-object-size-mbrA  --mm-encoder-onlyrB  --mm-encoder-tp-moderC  --mm-encoder-attn-backendrD  --interleave-mm-stringsr<  --skip-mm-profilingrF  --video-pruning-raterG  r"   z--enable-loraz*If True, enable handling of LoRA adapters.)r   r   --max-lorasrI  --max-lora-rankrJ  --lora-dtyperN  --enable-tower-connector-lorarO  --max-cpu-lorasrM  --fully-sharded-lorasrL  --default-mm-lorasrK  r%   !--show-hidden-metrics-for-versionr\  --otlp-traces-endpointr]  r^  r   {,}r   c                 8    g | ]}d                      |          S )r  )join)r   ps     rh   r   z+EngineArgs.add_cli_args.<locals>.<listcomp>  s5     G
 G
 G
CHHQKKG
 G
 G
rm      )r--collect-detailed-traces--kv-cache-metricsr_  --kv-cache-metrics-sampler`  --cudagraph-metricsra  --enable-layerwise-nvtx-tracingrb  --enable-mfu-metricsrc  "--enable-logging-iteration-detailsrd  r)   --max-num-batched-tokensr   --max-num-seqsr+  --max-num-partial-prefillsr(  --max-long-partial-prefillsr)  --long-prefill-token-thresholdr*  --scheduling-policypolicy--enable-chunked-prefillrT  --disable-chunked-mm-inputrU  --scheduler-clsrg  !--disable-hybrid-kv-cache-managerrV  --async-schedulingr  --stream-intervalr  r   --cudagraph-capture-sizesr   --max-cudagraph-capture-sizer   r,   r[  r{   --speculative-config--kv-transfer-configrn  --kv-events-configro  --ec-transfer-configrp  --compilation-config-ccri  --attention-config-acrj  --additional-configr|  --structured-outputs-configrW  --profiler-configrm  --optimization-levelr  z--disable-log-stats
store_truezDisable logging statistics.z--aggregate-engine-loggingzLLog aggregate rather than per-engine statistics when using data parallelism.)r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  r  )r  )r  )r  r  )r  r  )r  r  )r  r  )r  )r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r   )r  )r  )r  )r  )r  )r  )r  )r  )r	  )r
  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r  )r#  )r$  )r%  )r&  )r'  )r(  )r)  )r*  )r+  )r,  )r-  )r.  )r/  )r1  )r2  )r3  )r4  )r5  )r6  )r7  )r8  )r9  )r:  )r;  )r<  )r=  r>  )r?  r@  )rA  )rB  )rC  )rD  )r   r#   add_argument_groupr   sysargvadd_argumentrk   r!   r   r+   r&   r   r   r$   r"   re   r   r%   r  r   r   r=   r)   r   r,   rs   rw   rx   )r  model_kwargsmodel_groupload_kwargs
load_groupattention_kwargsattention_groupstructured_outputs_kwargsstructured_outputs_groupparallel_kwargsparallel_groupcache_kwargscache_groupmultimodal_kwargsmultimodal_grouplora_kwargs
lora_groupobservability_kwargsobservability_groupr   r   scheduler_kwargsscheduler_groupcompilation_kwargscompilation_groupvllm_kwargs
vllm_groups                              rh   add_cli_argszEngineArgs.add_cli_argsj  s   
 "+..//#+ 0 
 
 38ABB<''H,D,D$K$HH,w2GHHH  FF|H/EFFF  HHY0GHHH  LL,{2KLLL  VV|DT7UVVV  !	
 	
%12E%F	
 	
 	
 	! DDl7.CDDD  BB\&-ABBB  VV|DT7UVVV  (	
 	
,89S,T	
 	
 	
 	! %	
 	
)56M)N	
 	
 	
 	! JJj1IJJJ  TTl?6STTT  "	
 	
&23G&H	
 	
 	
 	! TTl?6STTT  XX<;WXXX  -	
 	
:;	
 	
 	
 	! TTl?6STTT  ,	
 	
9:	
 	
 	
 	! RR\.5QRRR  TTl?6STTT  &	
 	
*67O*P	
 	
 	
 	! $	
 	
(45K(L	
 	
 	
 	! #	
 	
'34I'J	
 	
 	
 	! $	
 	
(45K(L	
 	
 	
 	! !	
 	
%12E%F	
 	
 	
 	! TTl?6STTT 	   ,Y7j)&1 	! 	
 	
 	
 	! RR\.5QRRR  TTl?6STTT  (	
 	
,89S,T	
 	
 	
 	! !	
 	
%12E%F	
 	
 	
 	! *	
 	
.:;W.X	
 	
 	
 	! !	
 	
%12E%F	
 	
 	
 	! NN<3MNNN  (	
 	
,89S,T	
 	
 	
 	! !	
 	
%12E%F	
 	
 	
 	! #	
 	
'34I'J	
 	
 	

 !,,.."* / 
 

 	 
NN;}3MNNN
PPK4OPPP
)	
 	
-89T-U	
 	
 	
 	 
)	
 	
-89T-U	
 	
 	
 	 
VV{CT7UVVV
XXDV8WXXX
$	
 	
(34J(K	
 	
 	

 &o66 33#'/ 4 
 
 	%$!	
 	
%5i%@	
 	
 	

 %//F$G$G!#)#<#<+/7 $= $
 $
  	. - 	
 	
 ((:;	
 	
 	

 	. -'	
 	
'(AB	
 	
 	
 %^4422"&. 3 
 
 	$#,	
 	
<=	
 	
 	
 	$#&	
 	
 67	
 	
 	

 	$#VV}7UVVV##VV}7UVVV##RR8QRRR##XX?;;WXXX##&+	
 	
/>?U/V	
 	
 	
 	$#,	
 	
 <=	
 	
 	

 	$#,	
 	
<=	
 	
 	
 	$#+	
 	
;<	
 	
 	
 	$#-	
 	
 =>	
 	
 	

 	$#$)	
 	
-<=Q-R	
 	
 	
 	##"=	 	$ 	
 	
 	
 	##(C	 	$ 	
 	
 	
 	##(H	 	$ 	
 	
 	
 	##%>	 	$ 	
 	
 	
 	##&<	 	$ 	
 	
 	
 	##%C 	$ 	
 	
 	
 	$#'	
 	
 78	
 	
 	

 	$#)	
 	
 9:	
 	
 	

 	$#&	
 	
 67	
 	
 	

 	$#	
 	
#23D#E	
 	
 	
 	$#TTol6STTT##	
 	
m,	
 	
 	
 	$#*	
 	
:;	
 	
 	
 	$#+	
 	
;<	
 	
 	
 	$#3	
 	
CD	
 	
 	
 	$#VV}7UVVV##VV}7UVVV##)	
 	
9:	
 	
 	

 	$#,	
 	
<=	
 	
 	
 	$#&	
 	
*9:R*S	
 	
 	
 	$#)	
 	
9:	
 	
 	
 	$#TTol6STTT##$	
 	
(78N(O	
 	
 	

 "+..//#+ 0 
 
 	! NN<3MNNN  &	
 	
*67O*P	
 	
 	
 	! %	
 	
)56M)N	
 	
 	
 	! NN<3MNNN  SS|M7RSSS  '	
 	
+78Q+R	
 	
 	
 	! %	
 	
674 	
 	
 	
 	! (	
 	
,89S,T	
 	
 	
 	! VV|DT7UVVV  #	
 	
'34I'J	
 	
 	
 	! '	
 	
+78Q+R	
 	
 	
 	! !	
 	
%12E%F	
 	
 	
 	! %	
 	
)56M)N	
 	
 	
 	!  	
 	
$01C$D	
 	
 	
 	!  	
 	
$01C$D	
 	
 	
 	! "	
 	
&23G&H	
 	
 	
 	! %	
 	
)56M)N	
 	
 	

 ''788!44$(0 5 
 
 	&%#	
 	
'89K'L	
 	
 	
 	&% 	
 	
$56H$I	
 	
 	
 	&%	
 	
#45F#G	
 	
 	
 	&%#	
 	
'89N'O	
 	
 	
 	&%%	
 	
):;R)S	
 	
 	
 	&%'	
 	
+<=V+W	
 	
 	
 	&%/	
 	
 AB	
 	
 	
 	&%	
 	
#45F#G	
 	
 	
 	&%"	
 	
&78L&M	
 	
 	
 	&%'	
 	
 9:	
 	
 	
 	&%%	
 	
):;R)S	
 	
 	
 	&%!	
 	
%67J%K	
 	
 	
 	&%"	
 	
&78L&M	
 	
 	

 !,,.."* / 
 

 	1= 	  	
 	
 	

 	 
JJ[1IJJJ
RR[5QRRR
	
 	
,'	
 	
 	
 	 
+	
 	
78	
 	
 	
 	 
RR[5QRRR
#	
 	
'23H'I	
 	
 	
 	 
XXDV8WXXX  **=>>$77'+3 8 
 
 	)(/	
 	
"#DE	
 	
 	
 	)($	
 	
(<=S(T	
 	
 	
 ''@A)L,sxx((,,,EL67	B67	BBB G
 G
!-h7K.L.LPQ!R!R!RG
 G
 G
 	
BBB 	)('	
 	
"#<=	
 	
 	
 	)( 	
 	
$89K$L	
 	
 	
 	)('	
 	
"#<=	
 	
 	
 	)(!	
 	
"#67	
 	
 	
 	)(-	
 	
"#BC	
 	
 	
 	)("	
 	
"#78	
 	
 	
 	)(0	
 	
"#EF	
 	
 	
 &o66 33#'/ 4 
 
 	%$&	
 	
"#;<4 	
 	
 	
 	%$	
 	
">24 	
 	
 	
 	%$(	
 	
,<=W,X	
 	
 	
 	%$)	
 	
:;	
 	
 	
 	%$,	
 	
=>	
 	
 	
 	%$!	
 	
%5h%?	
 	
 	
 	%$&	
 	
"#;<4 	
 	
 	
 	%$(	
 	
,<=W,X	
 	
 	
 	%$	
 	
!1/!B	
 	
 	
 	%$/	
 	
@A	
 	
 	
 	%$ 	
 	
$45G$H	
 	
 	
 	%$	
 	
#34E#F	
 	
 	

 ((9::"55%)1 6 
 
 	'&'	
 	
+=>W+X	
 	
 	
 	'&*	
 	
 !=>	
 	
 	
 !,,.."* / 
 

 5B$*4M4M()&1
"	
 	
&12F&G	
 	
 	
 	 
"	
 	
&12F&G	
 	
 	
 	 
XXDV8WXXX
"	
 	
&12F&G	
 	
 	
 	 
$)	
 	
-89M-N	
 	
 	
 	 
"'	
 	
+67I+J	
 	
 	
 	 
!	
 	
%01D%E	
 	
 	
 	 
)	
 	
-89T-U	
 	
 	
 	 
VV{CT7UVVV
"	
 	
&12F&G	
 	
 	

 	!. 	 	
 	
 	
 	(+ 	 	
 	
 	
 rm   r   c                 l    d t          j        |           D             } | di fd|D             }|S )Nc                     g | ]	}|j         
S r   )r   )r   attrs     rh   r   z,EngineArgs.from_cli_args.<locals>.<listcomp>  s    ???t???rm   c                 R    i | ]#}t          |          |t          |          $S r   )hasattrgetattr)r   re  r   s     rh   
<dictcomp>z,EngineArgs.from_cli_args.<locals>.<dictcomp>  s4    RRRTgdD>Q>QRtWT4((RRRrm   r   )dataclassesr   )r   r   attrsengine_argss    `  rh   from_cli_argszEngineArgs.from_cli_args  s^     @?{'9#'>'>???c 
 
RRRRURRR
 
 rm   c                    t          | j                  rdx| _        | _        t          j        s t                              d| j                   t          d7i d| j        d| j
        d| j        d| j        d| j        d| j        d	| j        d
| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j         d| j!        d| j"        d| j#        d | j$        d!| j%        d"| j&        d#| j'        d$| j(        d%| j)        d&| j*        d'| j+        d(| j,        d)| j-        d*| j.        d+| j/        d,| j0        d-| j1        d.| j2        d/| j3        d0| j4        d1| j5        d2| j6        d3| j7        d4| j8        d5| j9        d6| j:        S )8NggufzThe global random seed is set to %d. Since VLLM_ENABLE_V1_MULTIPROCESSING is set to False, this may affect the random state of the Python process that launched vLLM.r   r   r   r   r   r   r   r   r   r   r   r   r0  r1  r2  r3  r4  r   r5  r6  r7  r   r,  r-  r#  r$  r   r   r   r:  r;  r<  r=  rF  r   r>  r?  r@  rA  rB  rC  rD  rh  rZ  rq  rs  rr  rt  ru  r  rG  rE  r   );rM   r   r5  r   envsVLLM_ENABLE_V1_MULTIPROCESSINGr  warningr   r#   r   r   r   r   r   r   r   r   r   r   r0  r1  r2  r3  r4  r   r6  r7  r   r,  r-  r#  r$  r   r   r   r:  r;  r<  r=  rF  r   r>  r?  r@  rA  rB  rC  rD  rh  rZ  rq  rs  rr  rt  ru  r  rG  rE  r  s    rh   create_model_configzEngineArgs.create_model_config  s   4: 	:399D 02 	NN! 	    5
 5
 5
**5
,,5
  ..5
 ;;	5

 LL5
 nn5
  ..5
 #445
 &*%B%B5
 #'"<"<5
 **5
 5
 ]]5
 ,,5
 ]]5
  **!5
"  $66#5
$ ,,%5
& **'5
( +/*L*L)5
* ,,+5
, *.)J)J-5
. **/5
0 ,,15
2 $(#>#>35
4 "&!:!:55
6 !% 8 875
8 "&!:!:95
: #44;5
< !% 8 8=5
> "22?5
@ #'"<"<A5
B !00C5
D #44E5
F ,,G5
H !% 8 8I5
J #'"<"<K5
L %)$@$@M5
N -1,P,PO5
P !00Q5
R  $66S5
T %)$@$@U5
V ,,W5
X &*%B%BY5
Z #44[5
\ (,'F'F]5
^ #44_5
` a5
b &*%B%Bc5
d #44e5
f  $66g5
h !% 8 8i5
 5	
rm   c                 n    ddl m} | j        D ]&}||j        v r| j        |         | j        d         |<   'd S )Nr   )TensorizerConfigtensorizer_config)+vllm.model_executor.model_loader.tensorizerrv  rR  _fields)r  rv  keys      rh   validate_tensorizer_argsz#EngineArgs.validate_tensorizer_args  s^    PPPPPP1 	 	C&...237 ./BCCH	 	rm   c           	      z   | j         dk    rd| _        | j        dk    rft          | j        d          r| j                                        | _        i | j        d<   | j        | j        d         d<   |                                  t          | j        | j        | j	        | j        | j
        | j        | j                  S )Nbitsandbytes
tensorizerto_serializablerw  tensorizer_dir)r   r   r   rR  rS  r}  r~  )r5  r   rg  rR  r  r   r{  r!   r   r   rS  r}  r~  rs  s    rh   create_load_configzEngineArgs.create_load_config  s    ..-D|++t57HII 2BBDD . CED*+>?
 *+>?@PQ ))+++(*&*&D&*&D 0!2!%!:
 
 
 	
rm   target_model_configtarget_parallel_configc                 p    | j         dS | j                             ||d           t          di | j         S )a[  Initializes and returns a SpeculativeConfig object based on
        `speculative_config`.

        This function utilizes `speculative_config` to create a
        SpeculativeConfig object. The `speculative_config` can either be
        provided as a JSON string input via CLI arguments or directly as a
        dictionary from the engine.
        Nr  r  r   )r[  r   r*   )r  r  r  s      rh   create_speculative_configz$EngineArgs.create_speculative_config%  sX     "*4
 	&&':*@ 	
 	
 	
 !;;4#:;;;rm   usage_contextheadlessc                 x   t          j                     t          t          t          t           j                            }t          | j                  s@t          | j        | j	        | j
        | j        | j                  \  | _        | _	        | _        |                                 }|j        | _        |j        | _        |j	        | _	        |                     |           |                     |           |                     ||           d}t%          |j                  s|                                }| j        | j        z  dk    sJ d| j         d| j         d            t/          | j        |          }t3          di d| j        d	| j        d
| j        d| j        d|d|j        d| j        d|d| j         d| j!        d| j"        d| j#        d| j$        d| j%        d| j&        d| j'        d| j(        d| j)        d| j*        }d}tW                      riddl,}	|	-                                j.        }|r|/                                ni }
d|
v rd |
d         D             |
d<   t`          1                    d|
           d}te                      rddl,}	|	j3        4                                }|r| j5        r
J d            | j5        r| j6        r
J d            | j7        d k    s| j8        d!k    s
J d"            d}| j8        d!k    r| j9        | j:        z  | j        z  }| j:        | j        z  }|| j8        z  }|| j8        z  dk    sJ d#| d$| j8         d            | j;        | j8        k     sJ d%| j;         d&| j8         d            | j;        |z  |z  }| j9        d!k    r5| j6        r.|| _<        t`          1                    d'| j<        | j;                   n| j=        t}          ||z  d!          | _=        | j6        p| j<        du}|r.| j<        
J d(            | j=        d)v s
J d*            d!}d+| _5        n| j=        | j=        }| j?        r	|sd,| _5        | j5        r)|d!k    r#t`          @                    d-           d,}d+| _5        || j9        k    rd+| _5        | j?        p|| _<        | j8        d!k    r&t`          1                    d.| j<        | j;                   n6| j5        r
J d/            | j7        d0k    rt          jB        d1k    rd!}n| j9        }| jC        g| j7        d0k    r,t                      }t`          1                    d2|           |}n7| j7        d k    sJ d3| j7        f            | jE        pt          jG        }n| jC        }| jH        | jH        nt          jH        }| jI        r(|jJ        s!d,|_J        t`          1                    d4           t          di d5| j:        d6| j        d7| jK        d8| j9        d9| j<        pdd:|d;|d<| jE        d=| jL        d>| j8        d?| j;        d@|dA|dB| j7        dC| j5        dD|jM        dE| jN        dF| jO        dG| jP        dH| jQ        dI| jR        dJ| jS        dK| jT        dL| jU        dM| jV        dN| jW        dO| jX        dP| jY        dQ| jZ        dR|dS|dT| j[        dU| j\        dV| j]        dW| j        dX| j^        dY| j_        dZ| j`        d[| ja        }| b                    ||\          }t          di d]|jd        d^| je        d_| jf        d`|jg        da| jh        db| ji        dc|jj        dd|jk        de| jl        df| jm        dg| jn        dh| jo        di| jp        dj| jq        dk| jr        dl| js        }|jj        s| jt        rt          dm          | jv        rMt          | jx        | jy        | jt        | jz        | j{        | j|        | j}        r| j}        dk    r| j}        ndn          nd}|,|*|je        |jf        |j~        d!z   z  k     rt          do          |j        dpk    rdpx| _        | _        t          j        | j                  }| j        i|j        t          dq          t          | j        t                    r+t          | j                                                 |_        n| j        |_        |                                 }| j        r| j        | j        _        | j        r| j        | j        _        t          | j        | j        | j        | j        | j        | j        | j        | j        | j        | j        r
  
        }t          j        | j                  }| j        "|j        t          ds          | j        |_        | j        "|j        t          dt          | j        |_        t9          di du|dv|dw|dx|dy|dz|d{|d||d}|d~| j        d|d|d| j        d| j        d| j        d| j        d| j        d| j        }|S )zi
        Create the VllmConfig.

        NOTE: If VllmConfig is incompatible, we raise an error.
        )device)r   r   r0  r   vllm_speculative_configNr   ztp_size=z must be divisible bydcp_size=rc   r   r'  r   r%  r  is_attention_freerQ  sliding_windowr!  r"  r&  rw  r  rx  ry  rz  r{  r  r  env_varsc                     i | ]}|d S )z***r   )r   ks     rh   ri  z3EngineArgs.create_engine_config.<locals>.<dictcomp>  s'     - - -!"Au- - -rm   z-Using ray runtime env (env vars redacted): %sz:data_parallel_hybrid_lb is not applicable in headless modezJdata_parallel_hybrid_lb and data_parallel_external_lb cannot both be True.r  r  z:nnodes > 1 is only supported with data_parallel_backend=mpzworld_size=z must be divisible by nnodes=z
node_rank=z must be less than nnodes=z@Inferred data_parallel_rank %d from node_rank %d for external lbzYdata_parallel_rank or node_rank must be specified if data_parallel_external_lb is enable.)r  NzIdata_parallel_size_local must be 1 or None when data_parallel_rank is setFTzsdata_parallel_hybrid_lb is not eligible when data_parallel_size_local = 1, autoswitch to data_parallel_external_lb.z0Inferred data_parallel_rank %d from node_rank %dzDdata_parallel_size_local must be set to use data_parallel_hybrid_lb.rayspanz3Using host IP %s as ray-based data parallel addressz3data_parallel_backend can only be ray or mp, got %sz7Skipping tokenizer initialization for tokens-only mode.r   r  r  r
  r  r  r  r  r  r  r  data_parallel_master_ipr  r  r  is_moe_modelr  r  r  r  r  r  r  r  r  r  r  r8  rP  ray_runtime_envplacement_groupr   rk  rl  r  r  r	  r  r  r  runner_typer   r+  r   rT  rU  is_multimodal_modelis_encoder_decoderr0  rg  r(  r)  r*  rV  r  r  zJDefault modality-specific LoRA(s) were provided for a non multimodal model)rJ  rI  rK  rL  rN  rO  rM  zOConsider increasing max_num_batched_tokens or decreasing num_speculative_tokensr}  zEattention_backend and attention_config.backend are mutually exclusive)
r\  r]  r^  r_  r`  ra  rb  rc  re  rd  z]cudagraph_capture_sizes and compilation_config.cudagraph_capture_sizes are mutually exclusivezcmax_cudagraph_capture_size and compilation_config.max_cudagraph_capture_size are mutually exclusivemodel_configcache_configparallel_configscheduler_configdevice_configload_configrj  lora_configr[  rW  observability_configri  rn  ro  rp  rm  r|  r  r   )rF   pre_register_and_updater   r   r4   device_typerO   r   rL   r   r0  r   r[  rt  r   _check_feature_supported4_set_default_chunked_prefill_and_prefix_caching_args1_set_default_max_num_seqs_and_batched_tokens_argsrK   hf_text_configget_sliding_windowr  r  rS   r   r   r   r'  r   r%  r  rQ  r!  r"  r&  rw  r  rx  ry  rz  r{  r  r  rJ   r  get_runtime_contextruntime_envto_dictr  r  rI   utilget_current_placement_groupr  r  r  r  r
  r   r  r  r  maxr  rr  rp  VLLM_RAY_DP_PACK_STRATEGYr  rR   r  r&   r  r  r  r   r  r  is_moer  r  r  r  r  r  r  r  r  r  r  r8  rP  r   rk  rl  r  r	  r  r  r  r)   r  r   r+  r   rT  rU  r  r  rf  rg  r(  r)  r*  rV  r  r  rK  rd   rH  r"   rJ  rI  rL  rN  rO  rM  num_speculative_tokensr5  r   r   r   rj  rv  r  r   rk   rT   upperr  rX  rW  rY  r%   r\  r]  r^  r_  r`  ra  rb  rc  re  rd  ri  r   r   r,   rn  ro  rp  rm  r|  r  )r  r  r  r  r  r  resolved_cache_dtyper  r  r  sanitized_envr  inferred_data_parallel_rank
world_sizeworld_size_within_dplocal_world_sizer  r  host_ipr  r  r  r[  r  r  rj  r  r  ri  configs                                 rh   create_engine_configzEngineArgs.create_engine_config@  si    	0222$D9I9U,V,VWWW  
++ 		/*"n!]&*&<,0,C   BTZ)@ //11!'
)7%/%%l333AA,OOO>><	
 	
 	
 &*l9:: 	? *<<>>N (4+LLPQQQQ=t0 = =9= = = RQQ  = 
  
 # 
 
 

#'#>#>
 #'"<"<
 	

 -,
 +<<
 %)$@$@
 *>
 #'"<"<
 &*%B%B
  ..
 !% 8 8
 %)$@$@
 #44
 #'"<"<
  "22!
" "22#
$  $66%
& #'"<"<'
,  	X JJJ!5577CO9HPO33555bM]**- -&3J&?- - -j) KKGWWW
  	EJJJ "hBBDDO 	
4#? 	
 	
H	
 	
? 0 	
T5S 	
 	
X	
 	
T )T11T[A5E5E5EH 6F5EE '(#;??'-.+,  +d.GG !  *T[8+q000UjUUt{UUU 100 >DK///UT^UUt{UUU 0// !11%+&' &**t/M**E'V+N   
 .603$(<<a1 1- *Qd.ET.Q 	" % 7	C*667 766 0I=== >== ()$+0D((*6'+'D$, 4X 4/3,+ 50HA0M0M1  
 -1)/4,'4+BBB/4, -L1L # {QF+N   3  V 3 )U22.&88 ,-(( ,0+B( %-)U22 ((I7   )0%%1T999I.<999
 $N(N &% %)$>! +7 ''6 	  	SL$D 	S/3L,KKQRRR( (
 (
 (
#'#>#>(
!%!:!:(
 +/*L*L(
  $66	(

  $6;!(
 '@&?(
 &>%=(
 (((
 (((
 ;;(
 nn(
 %:$9(
 $:#9(
 #'"<"<(
 %)$@$@(
  &,,!(
" $(#>#>#(
$ !00%(
& '(
( (()(
* (,'F'F+(
, )-(H(H-(
. 150X0X/(
0 ((1(
2 ((3(
4 '+&D&D5(
6 *.)J)J7(
8 '+&D&D9(
: $(#>#>;(
< ,O=(
> ,O?(
@ *.)J)JA(
B C(
D "&!:!:E(
F *.)J)JG(
H *.)J)JI(
J )-(H(HK(
L  $66M(
N #44O(
T ";; ,#2 < 
 

 + 
 
 
$00
#'#>#>
 **
 '44	

 $(#>#>
 &*%B%B
 !- @ @
  ,>>
 ))
 ,,
 &*%B%B
 '+&D&D
 *.)J)J
 -1,P,P
 "22
  !00!
& / 	D4I 	'  " J"0.!%!6$($<?,0,L%*.*<q*@*@ #00
 
 
 
  	" #". 7 -%<q@B  4   $663AAD 0  =)>??!-'3 -  
 $0#66 B+?*0022, (( ,0+A (--//   	T>B>SD*;' 	, *B  3,0,P!%!:$($@!2$($@"4*.*L#6&*&D-1-R 
  
  
 "]4+BCC'3!9E E   :>9U6*6!<H H  
 / 9  
 
 
%
%
 ,O
 .-	

 (-
 $
 .-
 $
  21
 '+&D&D
 "6!5
  21
  $66
 "22
  $66
  !00!
" #44#
$  $66%
* rm   r  c                 h   | j         t          j         k    rt          d           | j        t          j        k    s| j        t          j        k    rt          d           | j        dk    rCt          | j        dd          }|s-| j        t          j        ddd	fvrd
}t          |           dS dS dS dS )z/Raise an error if the feature is not supported.r  )feature_namezConcurrent Partial Prefillr  supports_ppFr  r  external_launcherzfPipeline Parallelism without Ray distributed executor or multiprocessing executor or external launcherN)
rZ  r   _raise_unsupported_errorr(  r)   r)  r   rh  r   r&   )r  r  r  r   s       rh   r  z#EngineArgs._check_feature_supported  s    (J,OOO$2NOOOO )_-UUU-89 9 %2NOOOO&**!1=% K  <4#D;#	M $ $ 
 )d;;;;;; +*< < $ $rm   r  c                    ddl m} 	 t          j                    }t          j                                                    }n# t          $ r d}d}Y nw xY w|dt          z  k    r%d|vr!|j        d|j	        di}|j        d|j	        di}n |j        d|j	        d	i}|j        d
|j	        d
i}t          j
                    rWt          j                    }|dk    r|j        d	|j	        di}n-|dk    r|j        d|j	        di}n|dk    r|j        d|j	        d
i}t          j                    r,|j        d|z  |j	        d	|z  i}|j        d
|z  |j	        d|z  i}||fS )Nr   rX   rp   F   a100i @  i       i      V6EV5Ei   V5Pi      )vllm.usage.usage_librY   rF   get_device_total_memoryget_device_namelower	ExceptionrQ   	LLM_CLASSOPENAI_API_SERVERis_tpuis_cpu)r   r  rY   device_memorydevice_namedefault_max_num_batched_tokensdefault_max_num_seqs	chip_names           rh   get_batch_defaultszEngineArgs.get_batch_defaults  s   
 	655555	,DFFM*:<<BBDDKK 	 	 	MKKK	 BN**v[/H/H &..*
 &.$   &..*
 &.$  "$$ 	(8::IE!! *D 2D2.. e## *D 2C2.. e## *C 2C2. "$$ 	&z(9.z0A.*
 &j(8.j0@$ 
 ./CCCs   8A AAc                    |j         }|j        }| j        '|| _        t                              d|rdnd           na|j        dk    r&| j        s|rt                              dd           n0|j        dk    r%| j        r|st                              d	d           | j        '|| _        t                              d
|rdnd           n0|j        dk    r%| j        r|st                              dd           t          j	                    rzt          j
                    t          j        t          j        t          j        fv rFt                              d           d| _        t                              d           d| _        d S d S d S )Nz%s chunked prefill by defaultEnabling	DisablinggeneratezThis model does not officially support disabling chunked prefill. Disabling this manually may cause the engine to crash or produce incorrect outputs.local)scopepoolingzThis model does not officially support chunked prefill. Enabling this manually may cause the engine to crash or produce incorrect outputs.z%s prefix caching by defaultzThis model does not officially support prefix caching. Enabling this manually may cause the engine to crash or produce incorrect outputs.zgChunked prefill is not supported for ARM and POWER, S390X and RISC-V CPUs; disabling it for V1 backend.FzfPrefix caching is not supported for ARM and POWER, S390X and RISC-V CPUs; disabling it for V1 backend.)is_chunked_prefill_supportedis_prefix_caching_supportedrT  r  debugr  warning_oncer!  rF   r  get_cpu_architecturerE   POWERPCS390XRISCVr  )r  r  default_chunked_prefilldefault_prefix_cachings       rh   r  z?EngineArgs._set_default_chunked_prefill_and_prefix_caching_argsc  s    #/"K!-!I&.*AD'LL/5F

;   
 $
22/ 3' 3 0 	       $	11+ 2+ 2 0 	      %-)?D&LL.4E

+   
 $	11* 2* 2 0 	      "$$ 	/)9)N)P)PU
 *
 *

 KK/  
 +0D'KK/  
 */D&&&!	/ 	/ *
 *
rm   c                    | j         | j        z  }|                     |          \  }}| j        }| j        }| j        %|                    |t          j                  | _        | j        %|                    |t          j                  | _        |w| j	        st          |j        | j                  | _        t          | j        |j        z  | j                  | _        t                              d| j        |r|j        nd            |T| j        J t          | j        | j                  | _        t                              d| j        |r|j        nd            d S d S )Nz=Defaulting max_num_batched_tokens to %d for %s usage context.z3Defaulting max_num_seqs to %d for %s usage context.)r   r  r  r   r+  r   r)   DEFAULT_MAX_NUM_BATCHED_TOKENSDEFAULT_MAX_NUM_SEQSrT  r  r   minr  r  value)r  r  r  r  r  r  orig_max_num_batched_tokensorig_max_num_seqss           rh   r  z<EngineArgs._set_default_max_num_seqs_and_batched_tokens_args  s   
 043LL
 ##J//	
*  '+&A# -&.*H*L*L>+ +D'
 $ 4 8 84! !D
 '.. .1 .// /+ +.!L$>>++ +D'
 LLO+'4>##$   $.::: #D$5t7R S SDLLE!'4>##$    	 %$rm   )NF)__name__r   __qualname__r   r#   r   rk   __annotations__r   r   r   r   r   r   r   r   r9   r   r5   r   r   r   r:   r   r   r   r!   r   r   r   rW   r   r   r8   r   r  r   r/   r   r   r   r   r   rA   r   r&   r   r>   r{   rZ   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r?   r  r  r  r   r.   r!  r"  r3   r#  r$  r%  r   r&  r'  r   r   r)   r(  r)  r*  r+  r,  r-  r7   r.  r/  r0  r1  r2  r3  r6   r4  r5  rV   r6  r7  r8  r$   r:  r   r;  r<  r=  r   r>  r?  r@  r;   rA  rB  rC  r<   rD  rT   rE  rF  rG  rH  r"   rI  rJ  rK  rL  rM  rN  torchrO  rP  rQ  rR  rS  rT  rU  rV  r,   rW  r+   rX  rY  rZ  r[  r%   r\  r]  r^  r=   r_  r`  ra  rb  rc  rd  re  r0  rf  r@   rg  objectrh  r'   ri  rj  r   rk  rl  rm  r(   rn  r    ro  r   rp  r   rq  rr  rs  rt  ru  r  rv  rw  rx  r2   ry  rz  r{  r1   r|  r}  r~  r  rU   r  r  r  r  rB   r  r  r0   r  r  staticmethodrP   rb  classmethodre   	Namespacerm  rt  r{  r  r*   r  rY   r  r  r   r  r  r  r   rm   rh   r   r   ]  sw        $$"E3""")4)Q $QQQ$2M32220;0MsT#Y-MMM'1IsTz111!,!;NC$J;;;&-FL---(0G]000 + ????!,!A$AAA*5*DNMC'DDD);t;;;$/$HcHHH.9.O49t+OOO)6L#*666%/%IsIII%/%;K{";;;$2M3222#)E:)))!,!8NJ888 D#    + 9M3:9991 T#Y-    .7Y7. .d
    	3 !((4>9D@4 4 4 #1"GCGGG%1K111%1K111 'FC'''#-Is--- . C#CCC)7)U!3UUU(6(S #SSS(6(S #SSS'5'QQQQ,????%)d
)))+/cDj///+/cDj///(,3:,,,)-C$J---$)T)))&+t+++!/!E3EEE#1#HDHHH)9OS999%0J000%1K111&4&OOOO'5'QQQQ: (    (iFFKFFF&2K2220 6    -????+=s===3 !#*    $/#9J	D 999)-4$;---, 3    $/#EDEEE!,!A$AAA#.J...'6NE666$/$FEFFF(3(I3:III)-C$J---$3$LcLLL%4%NsNNN(7(T #TTT#L#*####0L#000"-";M<;;;#t###%*d***&/HcDj/// + 9M3:999"-"6HdSj4666 )	+~ F FL+FFF%0%Cd
CCC/:/GL%,GGG*5*S!4SSS%3M4333&4&NtNNN;D9,< <c3c3h#778    .>d>>>"2"H4HHH1:+2 2OT#tCH~-.    2B1Uc3h$.UUU#3#I5III0 [4/    	8 $S    -<OT<<<*:*MMMM0 1C7$>    '+t***.@t@@@ 0 CCCCK)Is)))#1M3111.8.Id38nt+III * >>>> * 8M3:888+5+@Jek!D(@@@(2(NNNN#1#HDHHH*5*MS4ZMMM&/i
<W&X&XtXXX'0y=N'O'OOS49_OOO*.D4K...%4%MdMMM 	7 $TD[    :C/: :6    4DcDDD*.S4Z...+6+OcDjOOO04S#X-444 	; $S4Z    (;'O#*OOO3 T"67$>    1AdAAA%.Y6& &U    2CtCCC9 "4     3EEEE< %d    ':&StSSS)8)????/>/LM3f%,LLL)4)BM<$&BBB,5IjBV,W,W)WWW(1	*>P(Q(QoQQQ$/J/// . C#CCC&/i
<M&N&NO^NNN26(4/666.2nt+22226(4/666(:s:::);t;;;1:12 2S#X    ",J,,,$/$HcHHH5D5L+d2LLL + ????$/$AzAAA(3(I:III#,9[:L#M#McDjMMM'2'CnCCC(1	*>Q(R(RtCH~RRR'8d888 * ?#??? 	% tC$"7784?    !$3$DdTkDDD*:OS:::$/$GTGGG,6,I)III'2'EEEE1<1R.RRRK! ! !F G	3 G	8N G	 G	 G	 \G	R !3    [C
[ C
 C
 C
 C
J  
J 
 
 
 
2<(< !/< 
T	!	< < < <: .2o o#d*o o 
	o o o ob<[ < < < << QDQD 
tL4',-tL44G4L/MM	NQD QD QD [QDfI/'I/	I/ I/ I/ I/V8#d*8 "8 8 8 8 8 8rm   r   c                   J    e Zd ZU dZdZeed<   e	 d	dededefd            Z	dS )
AsyncEngineArgsz'Arguments for asynchronous vLLM engine.Fenable_log_requestsr  async_args_onlyr_   c                 :   t                       |st                              |           } |                     dt          j        t          j        d           |                     dt          j        t          j         dd           t          j	        |            | S )Nz--enable-log-requestszEnable logging requests.)r   r   r   z--disable-log-requestsz&[DEPRECATED] Disable logging requests.T)r   r   r   
deprecated)
rH   r   rb  rI  re   r   r  r  rF   r  )r  r  s     rh   rb  zAsyncEngineArgs.add_cli_args  s     	 	5,,V44F#1#7+	 	 	
 	
 	
 	$1';;9 	 	
 	
 	
 	0888rm   N)F)
r  r   r  r   r  r   r  r  rP   rb  r   rm   rh   r  r    sk         11 %%%%@E &9=	   \  rm   r  r  c                 0    |  d|  d}t          |          )Nz* is not supported. We recommend to remove z from your config.)NotImplementedError)r  msgs     rh   r  r  
  s6     	3 	3	3 	3 	3  c
"
""rm   r  c           	         |                                  } t          j        d|           }|rddddd}ddd	d
d}|                                \  }}||v r'||         }t	          t          |          |z            S ||v r]||         }	 t	          |          |z  S # t          $ r5}t          j        d| d| |	                                 d          |d}~ww xY wt	          |           S )zParse human-readable integers like '1k', '2M', etc.
    Including decimal values with decimal multipliers.

    Examples:
    - '1k' -> 1,000
    - '1K' -> 1,024
    - '25.6k' -> 25,600
    z(\d+(?:\.\d+)?)([kKmMgGtT])i  i@B i ʚ;l    J))r  mgr   r  i   i   @l        )KMGr[   z3Decimals are not allowed with binary suffixes like z. Did you mean to use z	 instead?N)
r   ru   	fullmatchgroupsr   r   rd   re   rf   r  )r  rv   decimal_multiplierbinary_multipliernumbersuffixmultrg   s           rh   r   r     sH    KKMMEL7??E 	
 
 	
 
 '''%f-DuV}}t+,,,((($V,D6{{T))   09179 99%||~~9 9 9  	 u::s   	B 
C%0CCc                     |                                  } | dk    s|                                 dk    rdS t          |           S )aA  Parse human-readable integers like '1k', '2M', etc.
    Including decimal values with decimal multipliers.
    Also accepts -1 or 'auto' as a special value for auto-detection.

    Examples:
    - '1k' -> 1,000
    - '1K' -> 1,024
    - '25.6k' -> 25,600
    - '-1' or 'auto' -> -1 (special value for auto-detection)
    z-1auto)r   r  r   )r  s    rh   r   r   @  s?     KKMME}}//re$$$rm   )re   r   rj  	functoolsrw   rG  collections.abcr   r   r   r   r   	itertoolsr   r   r	   typingr
   r   r   r   r   r   r   r   r   r   r  regexru   r  pydanticr   r   pydantic.fieldsr   typing_extensionsr   	vllm.envsrp  vllm.configr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   vllm.config.cacher.   r/   r0   r1   r2   r3   vllm.config.devicer4   vllm.config.modelr5   r6   r7   r8   r9   r:   vllm.config.multimodalr;   r<   vllm.config.observabilityr=   vllm.config.parallelr>   r?   vllm.config.schedulerr@   vllm.config.utilsrA   vllm.config.vllmrB   vllm.loggerrC   rD   vllm.platformsrE   rF   r  rH   vllm.ray.lazy_utilsrI   rJ   vllm.transformers_utils.configrK   rL   "vllm.transformers_utils.gguf_utilsrM   "vllm.transformers_utils.repo_utilsrN   vllm.transformers_utils.utilsrO   vllm.utils.argparse_utilsrP   vllm.utils.mem_constantsrQ   vllm.utils.network_utilsrR   vllm.utils.torch_utilsrS   #vllm.v1.attention.backends.registryrT   vllm.v1.sample.logits_processorrU   'vllm.model_executor.layers.quantizationrV    vllm.model_executor.model_loaderrW   r  rY   vllm.v1.executorrZ   r  r  r[   r{   r  r\   r  r]   rk   rl   rs   r   ry   r}   r   r   r   r   r   r   r   r   r   rH  argv0endswithr   	lru_cacher   r   r   r  r  r   r   r   r   rm   rh   <module>r8     s6	              



 $ $ $ $ $ $ @ @ @ @ @ @ @ @ @ @ @ @ " " " " " "                                       1 1 1 1 1 1 1 1 % % % % % % $ $ $ $ $ $                                                     0                & % % % % %                @ ? ? ? ? ? ? ? : : : : : : T T T T T T T T 1 1 1 1 1 1 ' ' ' ' ' ' . . . . . . 5 5 5 5 5 5 5 5 8 8 8 8 8 8 8 8 - - - - - - C C C C C C C C        7 6 6 6 6 6 = = = = = = : : : : : : < < < < < < . . . . . . + + + + + + @ @ @ @ @ @ D D D D D D ; ; ; ; ; ; 	KKKKKK<<<<<<111111)))))))HKL 
X		 GCLL3i&() ( ( (Aw'	9 ' ' '	HcUAX. 	8SE1H3E 	 	 	 	xq1 hua$h6O    *C *C$sCx.$84$? * * * *>x >y >VI5F > > > >
Ec(m E9 E E E E E
FX Fi FI F F F F
9#h- 9DcN 9 9 9 9"S] ( tCQTH~    2.h .4 . . . .
h 3x=    & C,,38,,,,, ,!&&x00,~~*++  R   b bS$sCx.-@(A b b b ! bJ
/J 
/4T#s(^(;#< 
/ 
/ 
/ 
/ H H H H H H H HV4     j   @#3 # # # #+c +c + + + +\%c %c % % % % % %rm   