
    .h7                       d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZmZmZmZmZ d dlmZ d dl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! d	dl"m#Z# d	dl$m%Z%m&Z&m'Z' d	dl(m(Z( d	dl)m*Z*m+Z+m,Z,m-Z-m.Z. d	dl/m0Z0m1Z1 d	dl2m3Z3 d	dl4m5Z5 ddl6m7Z7m8Z8 erd	dl9m:Z: de5 Z;de;iZ<e
d         Z= G d de7          Z>e G d d                      Z? G d d          Z@dS )     )annotationsN)AsyncIterator)	dataclass)TYPE_CHECKINGAnyLiteraloverload)	NOT_GIVENAPIStatusErrorAsyncOpenAIAsyncStreamNotGiven)	ChatModel)ResponseResponseCompletedEventResponseStreamEventResponseTextConfigParam	ToolParamWebSearchToolParamresponse_create_params   )_debug)AgentOutputSchemaBase)	UserError)Handoff)ItemHelpersModelResponseTResponseInputItem)logger)ComputerToolFileSearchToolFunctionToolToolWebSearchTool)	SpanErrorresponse_span)Usage)__version__   )ModelModelTracing)ModelSettingszAgents/Python z
User-Agent)file_search_call.resultszmessage.input_image.image_urlz%computer_call_output.output.image_urlc                  v    e Zd ZdZd,dZd-dZd.dZd/dZed0d"            Z	ed1d%            Z		 d2d3d)Z	d4d*Z
d+S )5OpenAIResponsesModelzG
    Implementation of `Model` that uses the OpenAI Responses API.
    modelstr | ChatModelopenai_clientr   returnNonec                "    || _         || _        d S N)r0   _client)selfr0   r2   s      [/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/agents/models/openai_responses.py__init__zOpenAIResponsesModel.__init__4   s    
 
$    valuer   c                    ||nt           S r6   r
   )r8   r<   s     r9   _non_null_or_not_givenz+OpenAIResponsesModel._non_null_or_not_given<   s    )uuy8r;   system_instructions
str | Noneinputstr | list[TResponseInputItem]model_settingsr,   tools
list[Tool]output_schemaAgentOutputSchemaBase | Nonehandoffslist[Handoff]tracingr+   previous_response_idr   c	                  K   t          |                                          5 }		 |                     |||||||d           d {V }
t          j        rt          j        d           n;t          j        dt          j        d |
j	        D             d           d	           |
j
        r1t          d
|
j
        j        |
j
        j        |
j
        j                  nt                      }|                                r|
|	j        _        ||	j        _        n# t&          $ r}|	                    t+          dd|                                rt-          |          n|j        j        i                     t3          |t4                    r|j        nd }t          j        d| d| d            d }~ww xY wd d d            n# 1 swxY w Y   t;          |
j	        ||
j                  S )NdisabledFstreamzLLM respondedz
LLM resp:
c                6    g | ]}|                                 S  )
model_dump).0xs     r9   
<listcomp>z5OpenAIResponsesModel.get_response.<locals>.<listcomp>\   s     &O&O&O!q||~~&O&O&Or;   r   indent
r)   )requestsinput_tokensoutput_tokenstotal_tokenszError getting responseerrormessagedatazError getting response: z. (request_id: ))outputusageresponse_id)r&   is_disabled_fetch_responser   DONT_LOG_MODEL_DATAr   debugjsondumpsrd   re   r'   r\   r]   r^   include_data	span_dataresponserB   	Exception	set_errorr%   str	__class____name__
isinstancer   
request_idr_   r   id)r8   r@   rB   rD   rE   rG   rI   rK   rL   span_responsero   re   erv   s                 r9   get_responsez!OpenAIResponsesModel.get_response?   s      G$7$7$9$9::: .	m-!%!5!5'"!(  "6 	" 	" 	 	 	 	 	 	 - L1111L_:&O&Ox&O&O&OXYZZZ_ _ _    ~!E!"%-^%@&.n&B%-^%@	      '')) :7?M+449M+1   '' 8#w/C/C/E/E%_SVVV1;K_     .8>-J-JTQ\\PT
WWW*WWWXXXG.	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	` ? 
 
 
 	
s6   GC1DG
F5#BF00F55GGG"AsyncIterator[ResponseStreamEvent]c	               |  K   t          |                                          5 }		 |                     |||||||d           d{V }
d}|
2 3 d{V }t          |t                    r|j        }|W V  )6 |r,|                                r||	j        _        ||	j        _        n}# t          $ rp}|	
                    t          dd|                                rt          |          n|j        j        i                     t          j        d|             d}~ww xY wddd           dS # 1 swxY w Y   dS )	z`
        Yields a partial message as it is generated, as well as the usage information.
        rN   TrP   NzError streaming responser_   r`   zError streaming response: )r&   rg   rh   ru   r   ro   rm   rn   rB   rp   rq   r%   rr   rs   rt   r   r_   )r8   r@   rB   rD   rE   rG   rI   rK   rL   rx   rQ   final_responsechunkry   s                 r9   stream_responsez$OpenAIResponsesModel.stream_response   s      G$7$7$9$9::: "	m!#33'"!(  4 	  	  	 	 	 	 	 	 37#)              %!%)?@@ 8).KKKKK $*
 " :g&:&:&<&< :7EM+449M+1 
 
 
'' :#w/C/C/E/E%_SVVV1;K_     =!==>>>
1"	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	sB   D1'B'A7AB'&D1'
D!1A+DD!!D11D58D5rQ   Literal[True] AsyncStream[ResponseStreamEvent]c	                
   K   d S r6   rS   	r8   r@   rB   rD   rE   rG   rI   rL   rQ   s	            r9   rh   z$OpenAIResponsesModel._fetch_response   s       ,/3r;   Literal[False]r   c	                
   K   d S r6   rS   r   s	            r9   rh   z$OpenAIResponsesModel._fetch_response   s       3r;   FLiteral[True] | Literal[False]+Response | AsyncStream[ResponseStreamEvent]c	                  K   t          j        |          }	|j        r|rt          |          dk    rdn|j        du rdnt          }
t
                              |j                  }t
                              ||          }t
          	                    |          }t          j        rt          j        d           n\t          j        d| j         dt          j        |	d           d	t          j        |j        d           d
| d| d| d| d           | j        j                            |                     |          |                     |          | j        |	|j        |j        |                     |j                  |                     |j                  |                     |j                  |                     |j                  ||
|i t6          |j        pi |j        |j        ||                     |j                  |                     |j                   |                     |j!                             d {V S )Nr   TFzCalling LLMzCalling LLM z with input:
r   rX   z
Tools:
z	
Stream: z
Tool choice: z
Response format: z
Previous response id: rZ   )rL   instructionsr0   rB   includerE   temperaturetop_p
truncationmax_output_tokenstool_choiceparallel_tool_callsrQ   extra_headersextra_query
extra_bodytextstore	reasoningmetadata)"r   input_to_new_input_listr   lenr
   	Converterconvert_tool_choicer   convert_toolsget_response_formatr   ri   r   rj   r0   rk   rl   rE   r7   	responsescreater?   includesr   r   r   
max_tokens_HEADERSr   r   r   r   r   r   )r8   r@   rB   rD   rE   rG   rI   rL   rQ   
list_inputr   r   converted_toolsresponse_formats                 r9   rh   z$OpenAIResponsesModel._fetch_response   s      !8??
 16;@CE

Q D 1U::  	  33N4NOO#11%BB#77FF% 	L''''LBtz B B:j333B B:o&;AFFFB B "B B !,	B B
 %4B B *>B B B   \+22!%!<!<=Q!R!R445HII*#,!'33N4NOO--n.BCC22>3LMM"99.:STT# 3NXN.*F*L"N&2%0 --n.BCC11.2JKK001HII) 3 
 
 
 
 
 
 
 
 	
r;   c                D    | j         t                      | _         | j         S r6   )r7   r   )r8   s    r9   _get_clientz OpenAIResponsesModel._get_client	  s    <&==DL|r;   N)r0   r1   r2   r   r3   r4   )r<   r   r3   r   )r@   rA   rB   rC   rD   r,   rE   rF   rG   rH   rI   rJ   rK   r+   rL   rA   r3   r   )r@   rA   rB   rC   rD   r,   rE   rF   rG   rH   rI   rJ   rK   r+   rL   rA   r3   r{   )r@   rA   rB   rC   rD   r,   rE   rF   rG   rH   rI   rJ   rL   rA   rQ   r   r3   r   )r@   rA   rB   rC   rD   r,   rE   rF   rG   rH   rI   rJ   rL   rA   rQ   r   r3   r   )F)r@   rA   rB   rC   rD   r,   rE   rF   rG   rH   rI   rJ   rL   rA   rQ   r   r3   r   )r3   r   )rt   
__module____qualname____doc__r:   r?   rz   r   r	   rh   r   rS   r;   r9   r/   r/   /   s         % % % %9 9 9 9?
 ?
 ?
 ?
B0 0 0 0d 
/ 
/ 
/ X
/ 
 
 
 X
* 27;
 ;
 ;
 ;
 ;
z     r;   r/   c                  $    e Zd ZU ded<   ded<   dS )ConvertedToolszlist[ToolParam]rE   zlist[IncludeLiteral]r   N)rt   r   r   __annotations__rS   r;   r9   r   r     s*         """"""r;   r   c                      e Zd Zedd            Zedd	            Zedd            Zedd            Zedd            ZdS )r   r   0Literal['auto', 'required', 'none'] | str | Noner3   ,response_create_params.ToolChoice | NotGivenc                    |t           S |dk    rdS |dk    rdS |dk    rdS |dk    rddiS |dk    rddiS |dk    rddiS d|d	S )
Nrequiredautononefile_searchtypeweb_search_previewcomputer_use_previewfunction)r   namer>   )clsr   s     r9   r   zConverter.convert_tool_choice  s     J&&:F""6F""6M))  000,  222. 
 ##  r;   rG   rH   "ResponseTextConfigParam | NotGivenc                    ||                                 rt          S ddd|                                |                                diS )Nformatjson_schemafinal_output)r   r   schemastrict)is_plain_textr
   r   is_strict_json_schema)r   rG   s     r9   r   zConverter.get_response_format4  s^      M$?$?$A$A  )*+7799+AACC	  r;   rE   rF   rI   list[Handoff[Any]]r   c                   g }g }d |D             }t          |          dk    rt          dt          |                     |D ]F}|                     |          \  }}|                    |           |r|                    |           G|D ]*}	|                    |                     |	                     +t          ||          S )Nc                <    g | ]}t          |t                    |S rS   )ru   r    )rU   tools     r9   rW   z+Converter.convert_tools.<locals>.<listcomp>M  s'    SSS4Jt\4R4RS$SSSr;   r)   z,You can only provide one computer tool. Got )rE   r   )r   r   _convert_toolappend_convert_handoff_toolr   )
r   rE   rI   r   r   computer_toolsr   converted_toolr   handoffs
             r9   r   zConverter.convert_toolsD  s     ,.)+SS5SSS~""`3~K^K^``aaa 	) 	)D&)&7&7&=&=#NG"">222 )((( 	G 	GG""3#<#<W#E#EFFFFOhGGGGr;   r   r#   'tuple[ToolParam, IncludeLiteral | None]c                T   t          |t                    r|j        |j        |j        d|j        d}d}nt          |t                    rd|j        |j        d}|}d}nt          |t                    rId|j
        d}|j        r
|j        |d<   |j        r
|j        |d	<   |j        r
|j        |d
<   |j        rdnd}nit          |t                    r4d|j        j        |j        j        d         |j        j        d         d}d}n t'          dt)          |           d          ||fS )z#Returns converted tool and includesr   r   
parametersr   r   descriptionNr   )r   user_locationsearch_context_sizer   )r   vector_store_idsmax_num_resultsranking_optionsfiltersr-   r   r   r)   )r   environmentdisplay_widthdisplay_heightzUnknown tool type: z, tool)ru   r"   r   params_json_schemastrict_json_schemar   r$   r   r   r!   r   r   r   r   include_search_resultsr    computerr   
dimensionsr   r   )r   r   r   r   wss        r9   r   zConverter._convert_tool\  s    dL)) (	F	"51"#/) )N /3HHm,, 	F,!%!3'+'?& &B
  NHHn-- 	F%$($9 N # I484H01# I484H01| 9,0Ly)595PZ11VZHHl++ 
	F.#}8!%!9!!<"&-":1"=	 N HH D$t**DDDEEEx''r;   r   r   r   c                :    |j         |j        |j        d|j        dS )Nr   r   )	tool_nameinput_json_schemar   tool_description)r   r   s     r9   r   zConverter._convert_handoff_tool  s.     %!30"3
 
 	
r;   N)r   r   r3   r   )rG   rH   r3   r   )rE   rF   rI   r   r3   r   )r   r#   r3   r   )r   r   r3   r   )	rt   r   r   classmethodr   r   r   r   r   rS   r;   r9   r   r     s           [:    [ H H H [H. -( -( -( [-(^ 
 
 
 [
 
 
r;   r   )A
__future__r   rk   collections.abcr   dataclassesr   typingr   r   r   r	   openair
   r   r   r   r   openai.typesr   openai.types.responsesr   r   r   r   r   r   r    r   agent_outputr   
exceptionsr   rI   r   itemsr   r   r   r   r   r    r!   r"   r#   r$   rK   r%   r&   re   r'   versionr(   	interfacer*   r+   rD   r,   _USER_AGENTr   IncludeLiteralr/   r   r   rS   r;   r9   <module>r      s   " " " " " "  ) ) ) ) ) ) ! ! ! ! ! ! 8 8 8 8 8 8 8 8 8 8 8 8 P P P P P P P P P P P P P P " " " " " "                        0 0 0 0 0 0 " " " " " "       B B B B B B B B B B       R R R R R R R R R R R R R R . . . . . . . .       ! ! ! ! ! ! * * * * * * * * /...... -{,,+& -] ] ] ] ]5 ] ] ]@ # # # # # # # #

 
 
 
 
 
 
 
 
 
r;   