o
    )i6                     @   sF  d dl Z d dlZd dlmZmZ d dlmZmZmZ d dl	m
Z
mZmZmZ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#m$Z$m%Z% d d	l&m'Z' d d
l(m)Z) ej*ej+ej,dZ-da.dd Z/					d5dee0 deed  dee0 dee0 dee0 defddZ1		d6dee0 dee2e  defddZ3de0defddZ4de'de2eeef  defdd Z5defd!d"Z6d#e2e de2e7 fd$d%Z8d&ede2e fd'd(Z9d)e!de2e fd*d+Z:de2e7 fd,d-Z;de!fd.d/Z<d0ee7 de!fd1d2Z=d0ee7 de>ee0 ee0 e?f fd3d4Z@dS )7    N)IterableSequence)LiteralOptionalUnion)ResponseFunctionToolCallResponseOutputItemResponseOutputMessageResponseOutputTextResponseReasoningItem)
ActionFindActionOpenPageActionSearchResponseFunctionWebSearch)Content)Tool)AuthorConversationDeveloperContentHarmonyEncodingNameMessageReasoningEffortRoleStreamableParserSystemContentTextContentToolDescriptionload_harmony_encoding)ResponseInputOutputItem)random_uuid)highZmediumlowc                   C   s   t d u r	ttja t S N)_harmony_encodingr   r   ZHARMONY_GPT_OSS r$   r$   j/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/vllm/entrypoints/harmony_utils.pyget_encoding!   s
   r&   model_identityreasoning_effort
start_datebrowser_descriptionpython_descriptionreturnc                 C   s   t  }| d ur|| }|d ur|t| }|d u r$tj d}||}|d ur2|	|}|d ur;|	|}t
tj|}|S )Nz%Y-%m-%d)r   newZwith_model_identityZwith_reasoning_effortREASONING_EFFORTdatetimenowstrftimeZwith_conversation_start_dateZ
with_toolsr   from_role_and_contentr   ZSYSTEM)r'   r(   r)   r*   r+   Zsys_msg_contentZsys_msgr$   r$   r%   get_system_message)   s    



r3   instructionstoolsc                 C   s   t  }| d ur|| }|d ur?g }|D ]}|jdv rq|jdkr(|| qtd|j d|r?dd |D }||}tt	j
|}|S )N)Zweb_search_previewZcode_interpreterfunctionz
tool type z not supportedc                 S   s"   g | ]}t j|j|j|jd qS ))namedescription
parameters)r   r-   r7   r8   r9   ).0toolr$   r$   r%   
<listcomp>R   s    z)get_developer_message.<locals>.<listcomp>)r   r-   Zwith_instructionstypeappend
ValueErrorZwith_function_toolsr   r2   r   Z	DEVELOPER)r4   r5   Zdev_msg_contentZfunction_toolsr;   Zfunction_tool_descriptionsZdev_msgr$   r$   r%   get_developer_messageB   s(   


r@   contentc                 C   s   t tj| S r"   )r   r2   r   USER)rA   r$   r$   r%   get_user_message_   s   rC   response_msgprev_responsesc           	         s  t | ts	|  } d| vs| d dkrF| d }| d }|dkr$d}d nd t |tr5t| | }|S  fd	d
|D }t||}|S | d dkr| d }d }t|D ]}t |trf|j	|krf|} nqV|d u rrt
d| tttjd|j | d }|S | d dkr| d }t|dksJ ttj|d d }|S | d dkrttj| d }|d}|d| d  }|d}|S t
d| d  )Nr=   messagerolerA   systemZ	developerzInstructions:
 c                    s   g | ]}t  |d   dqS textrK   r   r:   cZtext_prefixr$   r%   r<   w   s    z(parse_response_input.<locals>.<listcomp>Zfunction_call_outputcall_idzNo call message found for 
functions.output	reasoning   r   rK   function_call	arguments
commentaryr7   jsonzUnknown input type: )
isinstancedictZ
model_dumpstrr   r2   from_role_and_contentsreversedr   rQ   r?   Zfrom_author_and_contentr   r-   r   ZTOOLr7   len	ASSISTANTZwith_channelZwith_recipientZwith_content_type)	rD   rE   rG   rA   msgcontentsrQ   Zcall_responseZprev_responser$   rP   r%   parse_response_inputc   s^   




	

rc   c                 C   sF   | d }| d }t |trt|dg}ndd |D }t||}|S )NrG   rA   rL   c                 S   s   g | ]	}t |d  dqS rJ   rM   rN   r$   r$   r%   r<      s    z$parse_chat_input.<locals>.<listcomp>)rZ   r\   r   r   r]   )Zchat_msgrG   rA   rb   ra   r$   r$   r%   parse_chat_input   s   
rd   messagesc                 C   s   t | }t |tj}|S r"   )r   Zfrom_messagesr&   Z"render_conversation_for_completionr   r`   )re   Zconversation	token_idsr$   r$   r%   render_for_completion   s
   
rg   rF   c              	   C   s  | j jdkrg S g }| j}|dur|drt| jdkr!td| jd }t|j	}|dkr>t
d|d	d
 dd}n.|dkrPtd|dd
 dd}n|dkret|d d|dd
 dd}ntd| tdt  |ddd}|| |S | jdkr| jD ]}tdt  g dt|j	ddgdd}|| q|S | jd kr| jd!r| jd"d# }| jD ]}t }	t|j	d$|	 d%|d&|	 d'}
||
 q|S | jd(s| jd)r| jD ]}tdt  g dt|j	ddgdd}|| q|S td*| j | jd+kr@g }| jD ]}t|j	g d,dd-}|| qtd.t  || j jdd/d0}|| |S td1| j )2zG
    Parse a Harmony message into a list of output response items.
    	assistantNbrowser.rU   z-Invalid number of contents in browser messager   zbrowser.searchzcursor:queryrI   search)rj   r=   zbrowser.openurlZ	open_page)rl   r=   zbrowser.findpatternfind)rm   rl   r=   zUnknown browser action: Zws_	completedZweb_search_call)idactionstatusr=   analysisrs_rT   reasoning_textrK   r=   rp   summaryr=   rA   rr   rX   rR   .Zcall_rV   Zft_)rW   rQ   r=   r7   rp   pythonZbrowserzUnknown recipient: finaloutput_textrK   annotationsr=   Zlogprobsmsg_rF   rp   rA   rG   rr   r=   zUnknown channel: )ZauthorrG   	recipient
startswithr_   rA   r?   rY   loadsrK   r   getr   r   r   r   r>   Zchannelr   ResponseReasoningTextContentsplitr   r
   r	   )rF   Zoutput_itemsr   rA   Zbrowser_callrq   Zweb_search_itemreasoning_itemZfunction_nameZ	random_idZresponse_itemrb   r}   	text_itemr$   r$   r%   parse_output_message   s   


?



2
%






r   parserc                 C   s   | j sg S | jtjkrg S | j}|d ur|drg S | jdkr6tdt  g dt	| j ddgd d}|gS | jdkrUt
| j g d	d d
}tdt  |gdddd}|gS g S )Nri   rs   rt   rT   ru   rv   rw   r|   r}   r~   r   rh   ro   rF   r   )current_contentZcurrent_roler   r`   current_recipientr   Zcurrent_channelr   r   r   r
   r	   )r   r   r   r}   r   r$   r$   r%   parse_remaining_state  sJ   




r   c                   C   s
   t   S r"   )r&   Z!stop_tokens_for_assistant_actionsr$   r$   r$   r%   %get_stop_tokens_for_assistant_actions9  s   
r   c                   C   s   t t tjdS )N)rG   )r   r&   r   r`   r$   r$   r$   r%   #get_streamable_parser_for_assistant=  s   r   rf   c                 C   s   t  }| D ]}|| q|S r"   )r   process)rf   r   Ztoken_idr$   r$   r%   parse_output_into_messagesA  s   r   c                 C   s   t | }|j}t|dkrd}|j}d }n9t|dkr)d}|d jd j}|j}n%t|dkr9tdt| d|\}}|jd j}|jd j}|jd u}|||fS )Nr   FrU      z:Expected 2 output messages (reasoning and final), but got ry   )r   re   r_   r   rA   rK   r?   r   )rf   r   Zoutput_msgsZis_tool_callZreasoning_contentZfinal_contentZreasoning_msgZ	final_msgr$   r$   r%   parse_chat_outputH  s*   

r   )NNNNN)NN)Ar/   rY   collections.abcr   r   typingr   r   r   Zopenai.types.responsesr   r   r	   r
   r   Z3openai.types.responses.response_function_web_searchr   r   r   r   Z.openai.types.responses.response_reasoning_itemr   r   Zopenai.types.responses.toolr   Zopenai_harmonyr   r   r   r   r   r   r   r   r   r   r   r   Z vllm.entrypoints.openai.protocolr   Z
vllm.utilsr   ZHIGHZMEDIUMZLOWr.   r#   r&   r\   r3   listr@   rC   rc   rd   intrg   r   r   r   r   r   tupleboolr   r$   r$   r$   r%   <module>   s   8	




4f
)