
    .hF                    P   d dl mZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z
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 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( d d
l)m*Z*m+Z+m,Z, ddl-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z;  G d d          Z<dS )    )annotationsN)Iterable)AnyLiteralcast)	NOT_GIVENNotGiven)#ChatCompletionAssistantMessageParam#ChatCompletionContentPartImageParamChatCompletionContentPartParam"ChatCompletionContentPartTextParam#ChatCompletionDeveloperMessageParamChatCompletionMessageChatCompletionMessageParam"ChatCompletionMessageToolCallParam ChatCompletionSystemMessageParam#ChatCompletionToolChoiceOptionParamChatCompletionToolMessageParamChatCompletionUserMessageParam)ChatCompletionToolParam)ResponseFormat)EasyInputMessageParamResponseFileSearchToolCallParamResponseFunctionToolCallResponseFunctionToolCallParamResponseInputContentParamResponseInputImageParamResponseInputTextParamResponseOutputMessageResponseOutputMessageParamResponseOutputRefusalResponseOutputText)FunctionCallOutputItemReferenceMessage   )AgentOutputSchemaBase)AgentsException	UserError)Handoff)TResponseInputItemTResponseOutputItem)FunctionToolTool   )FAKE_RESPONSES_IDc                  v   e Zd Zed0d            Zed1d	            Zed2d            Zed3d            Zed4d            Zed5d            Z	ed6d            Z
ed7d            Zed8d            Zed9d            Zed:d!            Zed;d#            Zed<d'            Zed=d+            Zed>d.            Zd/S )?	Convertertool_choice0Literal['auto', 'required', 'none'] | str | Nonereturn.ChatCompletionToolChoiceOptionParam | NotGivenc                R    |t           S |dk    rdS |dk    rdS |dk    rdS dd|idS )Nautorequirednonefunctionnametyper;   )r   )clsr3   s     ]/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/agents/models/chatcmpl_converter.pyconvert_tool_choicezConverter.convert_tool_choice0   s^     F""6J&&:F""6 #K      final_output_schemaAgentOutputSchemaBase | NoneResponseFormat | NotGivenc                    |r|                                 rt          S dd|                                |                                ddS )Njson_schemafinal_output)r<   strictschema)r>   rG   )is_plain_textr   is_strict_json_schemarG   )r?   rC   s     r@   convert_response_formatz!Converter.convert_response_formatD   se     # 	&9&G&G&I&I 	 "&-CCEE-99;; 
 
 	
rB   messager   list[TResponseOutputItem]c           
     "   g }t          t          g ddd          }|j        r/|j                            t	          |j        dg                      |j        r.|j                            t          |j        d                     |j        rt          d	          |j        r|                    |           |j	        rO|j	        D ]G}|                    t          t          |j        |j        j        |j        j        d
                     H|S )N	assistantrN   	completed)idcontentroler>   statusoutput_text)textr>   r   refusal)rY   r>   z Audio is not currently supportedfunction_call)rS   call_id	argumentsr<   r>   )r   r0   rT   appendr"   rY   r!   audior(   
tool_callsr   rS   r;   r\   r<   )r?   rN   itemsmessage_item	tool_calls        r@   message_to_output_itemsz!Converter.message_to_output_itemsT   sF   +-, 
 
 
 ? 	 ''"mY[\\\   ? 	 ''%goINNN   = 	F!"DEEE 	'LL&&& 
	$/ 	 		,, )"+"4">&/4,      rB   itemr   EasyInputMessageParam | Nonec                    t          |t                    sd S |                                }|ddhk    rd S |                    dd           }|dvrd S d|vrd S t	          t
          |          S )NrT   rU   )userrQ   system	developer)
isinstancedictkeysgetr   r   )r?   rd   rl   rU   s       r@   maybe_easy_input_messagez"Converter.maybe_easy_input_message{   s    $%% 	4yy{{Iv&&&4xx%%CCC4D  4)4000rB   Message | Nonec                    t          |t                    rE|                    d          dk    r,|                    d          dv rt          t          |          S d S )Nr>   rN   rU   )rg   rh   ri   )rj   rk   rm   r   r%   r?   rd   s     r@   maybe_input_messagezConverter.maybe_input_message   sb     tT""
	'  I--    &&&trB   &ResponseFileSearchToolCallParam | Nonec                    t          |t                    r.|                    d          dk    rt          t          |          S d S )Nr>   file_search_call)rj   rk   rm   r   r   rq   s     r@   maybe_file_search_callz Converter.maybe_file_search_call   sA    dD!! 	?dhhv&6&6:L&L&L7>>>trB   $ResponseFunctionToolCallParam | Nonec                    t          |t                    r.|                    d          dk    rt          t          |          S d S )Nr>   rZ   )rj   rk   rm   r   r   rq   s     r@   maybe_function_tool_callz"Converter.maybe_function_tool_call   s@    dD!! 	=dhhv&6&6/&I&I5t<<<trB   FunctionCallOutput | Nonec                    t          |t                    r.|                    d          dk    rt          t          |          S d S )Nr>   function_call_output)rj   rk   rm   r   r#   rq   s     r@   maybe_function_tool_call_outputz)Converter.maybe_function_tool_call_output   sC    
 dD!! 	2dhhv&6&6:P&P&P*D111trB   ItemReference | Nonec                    t          |t                    r.|                    d          dk    rt          t          |          S d S )Nr>   item_reference)rj   rk   rm   r   r$   rq   s     r@   maybe_item_referencezConverter.maybe_item_reference   s@    dD!! 	-dhhv&6&6:J&J&Jt,,,trB   !ResponseOutputMessageParam | Nonec                    t          |t                    rG|                    d          dk    r.|                    d          dk    rt          t          |          S d S )Nr>   rN   rU   rQ   )rj   rk   rm   r   r    rq   s     r@   maybe_response_output_messagez'Converter.maybe_response_output_message   sZ     tT""	:  I--  K//2D999trB   rT   )str | Iterable[ResponseInputContentParam].str | list[ChatCompletionContentPartTextParam]c                    |                      |          }t          |t                    r|S g }|D ]C}|                    d          dk    r(|                    t          t          |                     D|S )Nr>   rX   )extract_all_contentrj   strrm   r]   r   r   )r?   rT   all_contentoutcs        r@   extract_text_contentzConverter.extract_text_content   s}     --g66k3'' 	8: 	H 	HAuuV}}&&

4 BAFFGGG
rB   *str | list[ChatCompletionContentPartParam]c           	        t          |t                    r|S g }|D ]W}t          |t                    rY|                    d          dk    r@t	          t
          |          }|                    t          d|d                              qt          |t                    r|                    d          dk    rht	          t          |          }d|vs|d         st          d|           |                    t          d|d         |d         d	
                     t          |t                    r+|                    d          dk    rt          d|           t          d|           |S )Nr>   
input_textrX   )r>   rX   input_image	image_urlz.Only image URLs are supported for input_image detail)urlr   )r>   r   
input_filez4File uploads are not supported for chat completions zUnknown content: )rj   r   rk   rm   r   r   r]   r   r   r)   r   )r?   rT   r   r   casted_text_paramcasted_image_params         r@   r   zConverter.extract_all_content   s    gs## 	N46 	9 	9A!T"" 9quuV}}'D'D$()?$C$C!

6#.v6      At$$ 9v-)G)G%)*A1%E%E"&888@RS^@_8#]I[]]   

7(#5k#B&8&B# #      At$$ 9v,)F)F ZWX Z Z[[[ 7A 7 7888
rB   r`   "str | Iterable[TResponseInputItem] list[ChatCompletionMessageParam]c                
   t          |t                    rt          d|          gS g dd+fd}d,fd}|D ]}|                     |          x}r|d	         }|d
         }|dk    r8 |             d|                     |          d}                    |           i|dk    r8 |             d|                     |          d}	                    |	           |dk    r8 |             d|                     |          d}
                    |
           |dk    r9 |             d|                     |          d}                    |           $t          d|           |                     |          x}r|d	         }|d
         } |             |dk    r/d|                     |          d}                    |           |dk    r/d|                     |          d}	                    |	           |dk    r/d|                     |          d}
                    |
           t          d|           | 	                    |          x}r |             t          d          }|d
         }g }|D ]q}|d         dk    r|                    |d                    *|d         dk    r|d         |d<   B|d         dk    rt          d|           t          d|           |rd                    |          }||d
<   g |d<   ||                     |          x}r |            }t          |                    dg                     }t          |d         ddt!          j        |                    dg           |                    d          d          d !          }|                    |           ||d<   |                     |          x}r| |            }t          |                    dg                     }|d"         r|d"         nd#}t          |d$         d|d%         |d !          }|                    |           ||d<   6|                     |          x}r3 |             d&|d$         |d'         d(}                    |           |                     |          x}rt          d)|           t          d*|            |             S )-a  
        Convert a sequence of 'Item' objects into a list of ChatCompletionMessageParam.

        Rules:
        - EasyInputMessage or InputMessage (role=user) => ChatCompletionUserMessageParam
        - EasyInputMessage or InputMessage (role=system) => ChatCompletionSystemMessageParam
        - EasyInputMessage or InputMessage (role=developer) => ChatCompletionDeveloperMessageParam
        - InputMessage (role=assistant) => Start or flush a ChatCompletionAssistantMessageParam
        - response_output_message => Also produces/flushes a ChatCompletionAssistantMessageParam
        - tool calls get attached to the *current* assistant message, or create one if none.
        - tool outputs => ChatCompletionToolMessageParam
        rg   )rU   rT   Nr5   Nonec                 n     1                      d          s d=                                 d  d S d S )Nr_   )rm   r]   )current_assistant_msgresults   r@   flush_assistant_messagez<Converter.items_to_messages.<locals>.flush_assistant_message  sN    $0,00>> <-l;3444(,%%% 10rB   r
   c                 6     t          d           g  d<    S )NrQ   rU   r_   )r
   )r   s   r@   ensure_assistant_messagez=Converter.items_to_messages.<locals>.ensure_assistant_message  s,    $,(KQ\(](](]%68%l3((rB   rU   rT   rh   ri   rQ   z'Unexpected role in easy_input_message: z"Unexpected role in input_message: r   r>   rW   rX   rY   output_audioz<Only audio IDs are supported for chat completions, but got: z/Unknown content type in ResponseOutputMessage: 
r_   rS   r;   ru   queriesrV   )r   rV   )r<   r\   )rS   r>   r;   r\   z{}r[   r<   tooloutput)rU   tool_call_idrT   z7Encountered an item_reference, which is not supported: z"Unhandled item type or structure: )r5   r   )r5   r
   )rj   r   r   rn   r   r]   r   r)   rr   r   r
   joinrv   listrm   r   jsondumpsry   r}   r   )r?   r`   r   r   rd   easy_msgrU   rT   msg_user
msg_systemmsg_developermsg_assistantin_msgresp_msgnew_asstcontentstext_segmentsr   combinedfile_searchasstr_   new_tool_call	func_callr\   func_outputmsgitem_refr   r   s                               @@r@   items_to_messageszConverter.items_to_messages   s   $ eS!! 	.!    46LP	- 	- 	- 	- 	- 	- 	-	) 	) 	) 	) 	) 	)  O	M O	MD77===x MM'"9-6>>++--- &#&#:#:7#C#C@ @H MM(++++X%%++--- (#&#;#;G#D#DD DJ MM*----[((++--- +#&#;#;G#D#DJ JM MM-0000[((++--- +#&#;#;G#D#DJ JM MM-0000#$Td$T$TUUU 224888 iMf~ +'')))6>> &#&#:#:7#C#C   H MM(++++X%% (#&#;#;G#D#D" "J MM*----[(( +#&#;#;G#D#D% %M MM-0000#$O$O$OPPP !>>tDDD NM'')))>KPPP#I. "! _ _AyM11%,,QvY77776i//./	l++6n44'^[\^^   ((]Z[(](]^^^  3#yy77H*2HY')+&(0%% !$ : :4 @ @@ 3M//11!$((<"<"<==
 B"4(# 2%)Z+6??9b+I+I*5//(*C*C & & ! ! ! !!-000%/\""!::4@@@  M//11!$((<"<"<==
6?6LVIk22RV	 B +# )& 1%. ! ! ! !!-000%/\"" # C CD I II M'')))"$/	$:*847 7
 c"""" !55d;;; MXhXX     KT K KLLL!!!rB   r   r.   r   c                    t          |t                    rd|j        |j        pd|j        ddS t          dt          |           d|           )Nr;    r<   description
parametersr=   zLHosted tools are not supported with the ChatCompletions API. Got tool type: z, tool: )rj   r-   r<   r   params_json_schemar)   r>   )r?   r   s     r@   tool_to_openaizConverter.tool_to_openai  s    dL)) 	" I#'#3#9r"&"9    *Dzz* *#'* *
 
 	
rB   handoffHandoff[Any]c                2    d|j         |j        |j        ddS )Nr;   r   r=   )	tool_nametool_descriptioninput_json_schema)r?   r   s     r@   convert_handoff_toolzConverter.convert_handoff_tool  s2     )&7%7 
 
 	
rB   N)r3   r4   r5   r6   )rC   rD   r5   rE   )rN   r   r5   rO   )rd   r   r5   re   )rd   r   r5   ro   )rd   r   r5   rs   )rd   r   r5   rw   )rd   r   r5   rz   )rd   r   r5   r~   )rd   r   r5   r   )rT   r   r5   r   )rT   r   r5   r   )r`   r   r5   r   )r   r.   r5   r   )r   r   r5   r   )__name__
__module____qualname__classmethodrA   rM   rc   rn   rr   rv   ry   r}   r   r   r   r   r   r   r    rB   r@   r2   r2   /   s          [& 
 
 
 [
 $ $ $ [$L 1 1 1 [1$    [    [
    [
    [    [
    [ 
 
 
 [
 # # # [#J ~ ~ ~ [~@ 
 
 
 [
  
 
 
 [
 
 
rB   r2   )=
__future__r   r   collections.abcr   typingr   r   r   openair   r	   openai.types.chatr
   r   r   r   r   r   r   r   r   r   r   r   ,openai.types.chat.chat_completion_tool_paramr   *openai.types.chat.completion_create_paramsr   openai.types.responsesr   r   r   r   r   r   r   r   r    r!   r"   +openai.types.responses.response_input_paramr#   r$   r%   agent_outputr'   
exceptionsr(   r)   handoffsr*   r`   r+   r,   r   r-   r.   fake_idr0   r2   r   rB   r@   <module>r      sx   " " " " " "  $ $ $ $ $ $ % % % % % % % % % % & & & & & & & &                            Q P P P P P E E E E E E                          c b b b b b b b b b 0 0 0 0 0 0 3 3 3 3 3 3 3 3       ; ; ; ; ; ; ; ; % % % % % % % % & & & & & &c
 c
 c
 c
 c
 c
 c
 c
 c
 c
rB   