o
    پi@                     @   s  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 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 d d	lmZ d d
lmZmZmZ d dlmZ eeZde jfddZde jde dee!e B dB fddZ"de jfddZ#G dd deZ$dS )    N)cast)DiffGenerator)SamplingParamsgenerate_request_id)CLISubcommand)RaiseNotImplementedAction)GenerationResult)
ServerArgs)init_logger)MemorySnapshotPerformanceLoggerRequestMetrics)FlexibleArgumentParserparserc                 C   sP   | j dtdddd | j dtdddd t| } t| } | j d	td
d | S )z+Add the arguments for the generate command.z--config FzfRead CLI options from a config JSON or YAML file. If provided, --model-path and --prompt are optional.)typedefaultrequiredhelpz--perf-dump-pathNz8Path to dump the performance metrics (JSON) for the run.z--text-encoder-configsz?JSON array of text encoder configurations (NOT YET IMPLEMENTED))actionr   )add_argumentstrr	   add_cli_argsr   r   )r    r   j/home/ubuntu/.local/lib/python3.10/site-packages/sglang/multimodal_gen/runtime/entrypoints/cli/generate.py add_multimodal_gen_generate_args"   s,   

r   argspromptresultsc              	   C   s   | j r|sdS t|tr|r|d nd}n|}|j}| j r|s!dS t|dd}|di |_|dg |_|dd|_|di }|	 D ]!\}}	t
|	d	d
|	dd
|	dd
|	dd
d}
|
|j|< qHtj| j |||jddd dS )zdump performance if necessaryNr   
request_id)r   stagesstepstotal_duration_msmemory_snapshotsallocated_mbg        reserved_mbpeak_allocated_mbpeak_reserved_mb)r$   r%   r&   r'   )r   modelcli_generate)	file_pathmetricsmetatag)perf_dump_path
isinstancelistr+   r   getr    r!   r"   itemsr   r#   r   dump_benchmark_report
model_path)r   server_argsr   r   resultmetrics_dictr+   memory_snapshots_dictcheckpoint_namesnapshot_dictsnapshotr   r   r   maybe_dump_performance?   s:   







r<   c              
   C   s   d| _ t| }t| }t |d< t| drI| jrIzt	| j|d< t
d|d  W n tjyH } zt
d| td| j |d}~ww tj|j|dd	}|j|d
}|d}t| ||| dS )z)The entry point for the generate command.#mocked_fake_id_for_offline_generater   diffusers_kwargszParsed diffusers_kwargs: %sz.Failed to parse --diffusers-kwargs as JSON: %sz,--diffusers-kwargs must be valid JSON. Got: NT)r4   r5   
local_mode)sampling_params_kwargsr   )r   r	   from_cli_argsr   get_cli_argsr   hasattrr>   jsonloadsloggerinfoJSONDecodeErrorerror
ValueErrorr   from_pretrainedr4   generater1   r<   )r   r5   r@   e	generatorr   r   r   r   r   generate_cmdm   s8   




rO   c                       s   e Zd ZdZd fddZdee fddZdee fdd	Zd
e	j
ddfddZd
e	j
ddfddZde	jdefddZ  ZS )GenerateSubcommandz6The `generate` subcommand for the sglang-diffusion CLIreturnNc                    s(   d| _ t   |  | _|  | _d S )NrL   )namesuper__init___get_init_arg_namesinit_arg_names_get_generation_arg_namesgeneration_arg_namesself	__class__r   r   rT      s   

zGenerateSubcommand.__init__c                 C   s   g dS )z7Get names of arguments for DiffGenerator initialization)num_gpustp_sizesp_sizer4   r   rY   r   r   r   rU      s   z&GenerateSubcommand._get_init_arg_namesc                 C   s   dd t tD S )z0Get names of arguments for generate_video methodc                 S   s   g | ]}|j qS r   )rR   ).0fieldr   r   r   
<listcomp>   s    z@GenerateSubcommand._get_generation_arg_names.<locals>.<listcomp>)dataclassesfieldsr   rY   r   r   r   rW      s   z,GenerateSubcommand._get_generation_arg_namesr   c                 C   s   t | d S )N)rO   rZ   r   r   r   r   cmd   s   zGenerateSubcommand.cmdc                 C   sH   |j dur|j dkrtd|jr tj|js"td|j dS dS )z'Validate the arguments for this commandNr   zNumber of gpus must be positivezConfig file not found: )r]   rJ   configospathexistsre   r   r   r   validate   s
   zGenerateSubcommand.validate
subparsersc                 C   s"   |j dddd}t|}tt|S )NrL   zRun inference on a modelzgsgl_diffusion generate (--model-path MODEL_PATH_OR_ID --prompt PROMPT) | --config CONFIG_FILE [OPTIONS])r   usage)
add_parserr   r   r   )rZ   rl   generate_parserr   r   r   subparser_init   s   
z!GenerateSubcommand.subparser_init)rQ   N)__name__
__module____qualname____doc__rT   r0   r   rU   rW   argparse	Namespacerf   rk   _SubParsersActionr   rp   __classcell__r   r   r[   r   rP      s    rP   )%ru   rc   rD   rh   typingr   sglang.multimodal_genr   4sglang.multimodal_gen.configs.sample.sampling_paramsr   r   7sglang.multimodal_gen.runtime.entrypoints.cli.cli_typesr   3sglang.multimodal_gen.runtime.entrypoints.cli.utilsr   /sglang.multimodal_gen.runtime.entrypoints.utilsr   )sglang.multimodal_gen.runtime.server_argsr	   1sglang.multimodal_gen.runtime.utils.logging_utilsr
   /sglang.multimodal_gen.runtime.utils.perf_loggerr   r   r   sglang.multimodal_gen.utilsr   rq   rF   ArgumentParserr   rv   r   r0   r<   rO   rP   r   r   r   r   <module>   s2   
.#