o
    )i                     @  s   d dl m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	 d dl
mZ d dlmZ er6d dlmZ dd	 Zd$ddZd%ddZd&ddZG dd deZG dd  d eZd'd"d#ZdS )(    )annotationsN)TYPE_CHECKING)OpenAI)ChatCompletionMessageParam)CLISubcommand)FlexibleArgumentParserc                  C  s(   dd } t  t j|  t  t j|  d S )Nc                 S  s   t d d S )Nr   )sysexit)sigframe r   g/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/vllm/entrypoints/cli/openai.pysignal_handler   s   z1_register_signal_handlers.<locals>.signal_handler)signalSIGINTSIGTSTP)r   r   r   r   _register_signal_handlers   s   r   argsargparse.Namespacereturntuple[str, OpenAI]c                 C  sf   t   | j}| jptjdd}t||d}| jr| j}n|j	 }|j
d j}td|  ||fS )NZOPENAI_API_KEYZEMPTY)api_keybase_urlr   zUsing model: )r   urlr   osenvirongetr   
model_namemodelslistdataidprint)r   r   r   Zopenai_clientr   Zavailable_modelsr   r   r   _interactive_cli   s   
r#   system_prompt
str | Noner   strclientr   Nonec                 C  s   g }| d ur| d| d td 	 ztd}W n
 ty#   Y d S w | d|d |jjj||d}|jd j}|j	}| | t| q)	NsystemZrolecontent*Please enter a message for the chat model:T> usermodelmessagesr   )
appendr"   inputEOFErrorchatcompletionscreatechoicesmessager+   )r$   r   r'   conversationinput_messagechat_completionresponse_messageoutputr   r   r   r5   0   s&   

r5   parserr   c                 C  s:   | j dtddd | j dtd dd | j dtd dd | S )	Nz--urlzhttp://localhost:8000/v1z7url of the running OpenAI-Compatible RESTful API servertypedefaulthelpz--model-namez]The model name used in prompt completion, default to the first model in list models API call.z	--api-keyzyAPI key for OpenAI services. If provided, this api key will overwrite the api key obtained through environment variables.)add_argumentr&   r?   r   r   r   _add_query_optionsG   s&   rF   c                   @  :   e Zd ZdZdZedddZedddZdddZdS )ChatCommandz(The `chat` subcommand for the vLLM CLI. r5   r   r   r   r(   c           	      C  s   t | \}}| j}g }|d ur|d|d | jr7|d| jd |jjj||d}t|jd j	j
 d S td 	 ztd}W n
 tyL   Y d S w |d|d |jjj||d}|jd j	}|j
}|| t| q<)	Nr)   r*   r.   r/   r   r,   Tr-   )r#   r$   r2   quickr5   r6   r7   r"   r8   r9   r+   r3   r4   )	r   r   r'   r$   r:   r<   r;   r=   r>   r   r   r   cmdc   s8   
zChatCommand.cmdr?   r   c                 C  s2   t |  | jdtddd | jddtddd	 | S )
z'Add CLI arguments for the chat command.z--system-promptNz`The system prompt to be added to the chat template, used for models that support system prompts.r@   -q--quickZMESSAGEzBSend a single prompt as MESSAGE and print the response, then exit.rA   metavarrC   rF   rD   r&   rE   r   r   r   add_cli_args   s   zChatCommand.add_cli_args
subparsersargparse._SubParsersActionc                 C     |j ddddd}t|S )Nr5   z5Generate chat completions via the running API server.zvllm chat [options]rC   descriptionusage)
add_parserrH   rP   selfrQ   r?   r   r   r   subparser_init   s   
zChatCommand.subparser_initNr   r   r   r(   r?   r   r   r   rQ   rR   r   r   	__name__
__module____qualname____doc__namestaticmethodrJ   rP   rZ   r   r   r   r   rH   _   s    !rH   c                   @  rG   )CompleteCommandz,The `complete` subcommand for the vLLM CLI. completer   r   r   r(   c                 C  s   t | \}}| jr|jj|| jd}t|jd j d S td 	 ztd}W n
 ty1   Y d S w |jj||d}|jd j}t| q!)N)r0   promptr   z Please enter prompt to complete:Tr-   )	r#   rI   r6   r7   r"   r8   textr3   r4   )r   r   r'   
completionZinput_promptr>   r   r   r   rJ      s(   zCompleteCommand.cmdr?   r   c                 C  s    t |  | jddtddd | S )z+Add CLI arguments for the complete command.rK   rL   ZPROMPTz@Send a single prompt and print the completion output, then exit.rM   rO   rE   r   r   r   rP      s   zCompleteCommand.add_cli_argsrQ   rR   c                 C  rS   )Nrf   zOGenerate text completions based on the given prompt via the running API server.zvllm complete [options]rT   )rW   re   rP   rX   r   r   r   rZ      s   
zCompleteCommand.subparser_initNr[   r\   r]   r^   r   r   r   r   re      s    re   list[CLISubcommand]c                   C  s   t  t gS )N)rH   re   r   r   r   r   cmd_init   s   rk   )r   r   r   r   )r$   r%   r   r&   r'   r   r   r(   r\   )r   rj   )
__future__r   argparser   r   r   typingr   Zopenair   Zopenai.types.chatr   Zvllm.entrypoints.cli.typesr   Z
vllm.utilsr   r   r#   r5   rF   rH   re   rk   r   r   r   r   <module>   s$   
	

C3