o
    پi4                     @   s  d dl Z d dlmZ d dlmZmZmZ d dlZd dlm	Z	m
Z
mZm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#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/					d7dee0 deed  dee0 dee0 dee0 defddZ1	d8d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	defd#d$Z6defd%d&Z7d'e2e de2e8 fd(d)Z9de2e8 fd*d+Z:de!fd,d-Z;d.efd/d0Z<d1e!fd2d3Z=d4ee8 fd5d6Z>dS )9    N)Iterable)LiteralOptionalUnion)ResponseOutputItemResponseOutputMessageResponseOutputTextResponseReasoningItem)ResponseFunctionToolCall)
ActionFindActionOpenPageActionSearchResponseFunctionWebSearch)Content)Tool)AuthorConversationDeveloperContentHarmonyEncodingNameMessageReasoningEffortRoleStreamableParserSystemContentTextContentToolDescriptionload_harmony_encoding)ResponseInputOutputItem)random_uuid)highmediumlowc                   C   s   t d u r	ttja t S N)_harmony_encodingr   r   HARMONY_GPT_OSS r%   r%   X/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/entrypoints/harmony_utils.pyget_encoding6   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   newwith_model_identitywith_reasoning_effortREASONING_EFFORTdatetimenowstrftimewith_conversation_start_date
with_toolsr   from_role_and_contentr   SYSTEM)r(   r)   r*   r+   r,   sys_msg_contentsys_msgr%   r%   r&   get_system_message=   s    



r;   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)web_search_previewcode_interpreterfunctionz
tool type z not supportedc                 S   s"   g | ]}t j|j|j|jd qS ))namedescription
parameters)r   r.   rA   rB   rC   ).0toolr%   r%   r&   
<listcomp>g   s    z)get_developer_message.<locals>.<listcomp>)r   r.   with_instructionstypeappend
ValueErrorwith_function_toolsr   r7   r   	DEVELOPER)r<   r=   dev_msg_contentfunction_toolsrE   function_tool_descriptionsdev_msgr%   r%   r&   get_developer_messageV   s(   


rQ   contentc                 C   s   t tj| S r"   )r   r7   r   USER)rR   r%   r%   r&   get_user_messagev   s   rT   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  )NrH   messagerolerR   system	developerzInstructions:
 c                    s   g | ]}t  |d   dqS )textr\   )r   rD   ctext_prefixr%   r&   rF      s    z(parse_response_input.<locals>.<listcomp>function_call_outputcall_idzNo call message found for 
functions.output	reasoning   r   r\   function_call	arguments
commentaryrA   jsonzUnknown input type: )
isinstancedict
model_dumpstrr   r7   from_role_and_contentsreversedr
   rc   rJ   from_author_and_contentr   r.   r   TOOLrA   len	ASSISTANTwith_channelwith_recipientwith_content_type)	rU   rV   rX   rR   msgcontentsrc   call_responseprev_responser%   r`   r&   parse_response_inputz   sX   




r}   re   c                 C   s   t | tr| j}dd | jD }t||}|S t | tr7ttj	| j
}|d}|| j}|d}|S tdt|  )Nc                 S      g | ]}t |jd qS r]   r   r\   r^   r%   r%   r&   rF          z)parse_response_output.<locals>.<listcomp>rj   rk   zUnknown output type: )rl   r   rX   rR   r   rp   r
   r7   r   ru   ri   rv   rw   rA   rx   rJ   rH   )re   rX   rz   ry   r%   r%   r&   parse_response_output   s   



r   c                 C   sB   | j }| j}t|trt|dg}ndd |D }t||}|S )Nr]   c                 S   r~   r   r   r^   r%   r%   r&   rF      r   z$parse_chat_input.<locals>.<listcomp>)rX   rR   rl   ro   r   r   rp   )chat_msgrX   rR   rz   ry   r%   r%   r&   parse_chat_input   s   
r   messagesc                 C   s   t | }t |tj}|S r"   )r   from_messagesr'   "render_conversation_for_completionr   ru   )r   conversation	token_idsr%   r%   r&   render_for_completion   s
   
r   c                   C   s
   t   S r"   )r'   !stop_tokens_for_assistant_actionsr%   r%   r%   r&   %get_stop_tokens_for_assistant_actions   s   
r   c                   C   s   t t tjdS )N)rX   )r   r'   r   ru   r%   r%   r%   r&   #get_streamable_parser_for_assistant   s   r   rW   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  dg 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  dg 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.d/}|| |S td0| j )1N	assistantbrowser.rg   z-Invalid number of contents in browser messager   zbrowser.searchzcursor:queryr[   search)r   rH   zbrowser.openurl	open_page)r   rH   zbrowser.findpatternfind)r   r   rH   zUnknown browser action: ws_	completedweb_search_call)idactionstatusrH   analysisrs_rf   reasoning_textr\   rH   r   rH   summaryrR   r   rj   rd   .call_rh   ft_)ri   rc   rH   rA   r   pythonbrowserzUnknown recipient: finaloutput_textr\   annotationsrH   logprobsmsg_rW   r   rR   rX   r   rH   zUnknown channel: )authorrX   	recipient
startswithrt   rR   rJ   orjsonloadsr\   r   getr   r   r   r   rI   channelr	   ResponseReasoningTextContentsplitr
   r   r   )rW   output_itemsr   rR   browser_callr   web_search_itemreasoning_itemfunction_name	random_idresponse_itemrz   r   	text_itemr%   r%   r&   parse_output_message   s   


B


4
'




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  dg 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 )Nr   r   r   rf   r   r   r   r   r   r   r   r   r   rW   r   )current_contentcurrent_roler   ru   current_recipientr   current_channelr	   r   r   r   r   )r   r   r   r   r   r%   r%   r&   parse_remaining_stateD  sF   



r   r   c                 C   s   t  }| D ]}|| q|S r"   )r   process)r   r   token_idr%   r%   r&   parse_output_into_messagesl  s   r   )NNNNN)NN)?r2   collections.abcr   typingr   r   r   r   openai.types.responsesr   r   r   r	   2openai.types.responses.response_function_tool_callr
   3openai.types.responses.response_function_web_searchr   r   r   r   .openai.types.responses.response_reasoning_itemr   r   openai.types.responses.toolr   openai_harmonyr   r   r   r   r   r   r   r   r   r   r   r   &sglang.srt.entrypoints.openai.protocolr   sglang.srt.utilsr   HIGHMEDIUMLOWr1   r#   r'   ro   r;   listrQ   rT   r}   r   r   intr   r   r   r   r   r   r%   r%   r%   r&   <module>   sx   8



 
4j(