
    .h(                    v   d dl mZ d dlZd dlZd dlmZ d dl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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# 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- ddl.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7 erd	dl8m9Z9  G d de6          Z:dS )    )annotationsN)AsyncIterator)TYPE_CHECKINGAnyLiteralcastoverload)	NOT_GIVENAsyncOpenAIAsyncStream)	ChatModel)ChatCompletionChatCompletionChunk)Response   )_debug)AgentOutputSchemaBase)Handoff)ModelResponseTResponseInputItemTResponseStreamEvent)logger)Tool)generation_span)GenerationSpanData)Span)Usage   )	Converter)HEADERSChatCmplHelpers)ChatCmplStreamHandler)FAKE_RESPONSES_ID)ModelModelTracing)ModelSettingsc                  r    e Zd Zd-dZd.d
Zd/dZd0dZed1d#            Zed2d&            Z	 d3d4d*Zd5d+Z	d,S )6OpenAIChatCompletionsModelmodelstr | ChatModelopenai_clientr   returnNonec                "    || _         || _        d S N)r)   _client)selfr)   r+   s      a/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/agents/models/openai_chatcompletions.py__init__z#OpenAIChatCompletionsModel.__init__"   s    
 
$    valuer   c                    ||nt           S r/   )r
   )r1   r5   s     r2   _non_null_or_not_givenz1OpenAIChatCompletionsModel._non_null_or_not_given*   s    )uuy8r4   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          t          | j                  |                                dt          | j        j                  iz  |                                          5 }	|                     |||||||	|d	  	         d {V }
t          j	        rt          j        d           nNt          j        dt          j        |
j        d         j                                        d	           d
           |
j        r1t%          d|
j        j        |
j        j        |
j        j                  nt%                      }|                                r/|
j        d         j                                        g|	j        _        |j        |j        d|	j        _        t7          j        |
j        d         j                  }t;          ||d           cd d d            S # 1 swxY w Y   d S )Nbase_urlr)   model_configdisabledFstreamzReceived model responsez
LLM resp:
r   r   indent
r   )requestsinput_tokensoutput_tokenstotal_tokensrP   rQ   )outputusageresponse_id)r   strr)   to_json_dictr0   rF   is_disabled_fetch_responser   DONT_LOG_MODEL_DATAr   debugjsondumpschoicesmessage
model_dumprU   r   prompt_tokenscompletion_tokensrR   include_data	span_datarT   rP   rQ   r   message_to_output_itemsr   )r1   r8   r:   r<   r=   r?   rA   rC   rD   span_generationresponserU   itemss                r2   get_responsez'OpenAIChatCompletionsModel.get_response-   s\      dj//'4466*c$,J_F`F`9aa((**
 
 
 /	 !11# 2 
 
 
 
 
 
 
 
H ) 67777d$*X-=a-@-H-S-S-U-U^_"`"`"`ddd   >!)!="*."B!)!<	    WW  ##%% ^4<4DQ4G4O4Z4Z4\4\3])0 % 2!&!4/ /O%+
 5h6Fq6I6QRRE    W/	 /	 /	 /	 /	 /	 /	 /	 /	 /	 /	 /	 /	 /	 /	 /	 /	 /	s   'E+GG#&G##AsyncIterator[TResponseStreamEvent]c                K   t          t          | j                  |                                dt          | j        j                  iz  |                                          5 }	|                     |||||||	|d	  	         d{V \  }
}d}t          j	        |
|          2 3 d{V }|W V  |j
        dk    r|j        }6 |                                r!|r|                                g|	j        _        |r*|j        r#|j        j        |j        j        d|	j        _        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.
        rF   rG   TrJ   Nzresponse.completedrS   )r   rW   r)   rX   r0   rF   rY   rZ   r"   handle_streamtyperh   rd   ra   re   rT   rU   rP   rQ   )r1   r8   r:   r<   r=   r?   rA   rC   rD   rg   rh   rK   final_responsechunks                 r2   stream_responsez*OpenAIChatCompletionsModel.stream_responsei   s      dj//'4466*c$,J_F`F`9aa((**
 
 
 	 %)%9%9# &: 
& 
& 
  
  
  
  
  
 Hf /3N4B8VTT 4 4 4 4 4 4 4e:!555%*^N	  U ##%% Q. Q4B4M4M4O4O3P)0 ."6 $2$8$E%3%9%G3 3)/9	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   '?D4&C,A;D44D8;D8spanSpan[GenerationSpanData]rK   Literal[True]1tuple[Response, AsyncStream[ChatCompletionChunk]]c
                
   K   d S r/    
r1   r8   r:   r<   r=   r?   rA   rr   rC   rK   s
             r2   rZ   z*OpenAIChatCompletionsModel._fetch_response   s       =@Cr4   Literal[False]r   c
                
   K   d S r/   rw   rx   s
             r2   rZ   z*OpenAIChatCompletionsModel._fetch_response   s       r4   FboolBChatCompletion | tuple[Response, AsyncStream[ChatCompletionChunk]]c
                  K   t          j        |          }
|r|
                    d|dd           |                                r|
|j        _        |j        r|rt          |          dk    rdn|j        du rdnt          }t          j	        |j
                  }t          j        |          }|rd |D             ng }|D ])}|                    t          j        |                     *t          j        rt!          j        d           nKt!          j        t%          j        |
d	           d
t%          j        |d	           d|	 d| d| d
           |j        r|j        j        nd }t-          j        |                                 |          }t-          j        |                                 ||	          }|                                 j        j                            | j        |
|pt          |                     |j                  |                     |j                   |                     |j!                  |                     |j"                  |                     |j#                  ||||	|                     |          |                     |          |                     |          i tH          |j%        pi |j&        |j'        |                     |j(                             d {V }tS          |tT                    r|S tW          tX          t[          j-                    | j        dg |t          k    rt]          t^          d         |          nd|j         |j        g |pd|j                  }||fS )Nr   system)contentroleTFc                6    g | ]}t          j        |          S rw   )r   tool_to_openai).0tools     r2   
<listcomp>z>OpenAIChatCompletionsModel._fetch_response.<locals>.<listcomp>   s#    LLLd93D99LLLr4   zCalling LLMr   rL   z
Tools:
z	
Stream: z
Tool choice: z
Response format: rN   rJ   )r)   messagesr=   temperaturetop_pfrequency_penaltypresence_penalty
max_tokenstool_choiceresponse_formatparallel_tool_callsrK   stream_optionsstorereasoning_effortextra_headersextra_query
extra_bodymetadatarh   )autorequirednoner   )id
created_atr)   objectrT   r   r   r   r=   r   	reasoning)0r   items_to_messagesinsertrd   re   r:   r   lenr
   convert_tool_choicer   convert_response_formatappendconvert_handoff_toolr   r[   r   r\   r]   r^   r   effortr!   get_store_param_get_clientget_stream_options_paramchatcompletionscreater)   r7   r   r   r   r   r   r    r   r   r   r   
isinstancer   r   r#   timer   r   )r1   r8   r:   r<   r=   r?   rA   rr   rC   rK   converted_messagesr   r   r   converted_toolshandoffr   r   r   retrh   s                        r2   rZ   z*OpenAIChatCompletionsModel._fetch_response   s      '8?? 	%%2$    !! 	6#5DN  16;@CE

Q D 1U::  	  3N4NOO#;MJJPU]LLeLLLL[] 	L 	LG""9#A'#J#JKKKK% 		L''''L:0;;; 8 8:oa@@@8 8!8 8 !,8 8 %4	8 8 8   ?M>V`>3::\`/0@0@0B0BNSS(Av
 
 
 $$&&+7>>*'!.Y33N4NOO--n.BCC"99.:Z[[!889XYY22>3LMM#+ 366~FF--e44!889IJJOgO.*F*L"O&2%0001HII' ? 
 
 
 
 
 
 
 
, c>** 	J y{{*i'' W%?@+NNN &&2 3 <u$.
 
 
 }r4   c                D    | j         t                      | _         | j         S r/   )r0   r   )r1   s    r2   r   z&OpenAIChatCompletionsModel._get_client  s    <&==DL|r4   N)r)   r*   r+   r   r,   r-   )r5   r   r,   r   )r8   r9   r:   r;   r<   r&   r=   r>   r?   r@   rA   rB   rC   r%   rD   r9   r,   r   )r8   r9   r:   r;   r<   r&   r=   r>   r?   r@   rA   rB   rC   r%   rD   r9   r,   rk   )r8   r9   r:   r;   r<   r&   r=   r>   r?   r@   rA   rB   rr   rs   rC   r%   rK   rt   r,   ru   )r8   r9   r:   r;   r<   r&   r=   r>   r?   r@   rA   rB   rr   rs   rC   r%   rK   ry   r,   r   )F)r8   r9   r:   r;   r<   r&   r=   r>   r?   r@   rA   rB   rr   rs   rC   r%   rK   r{   r,   r|   )r,   r   )
__name__
__module____qualname__r3   r7   rj   rq   r	   rZ   r   rw   r4   r2   r(   r(   !   s        % % % %9 9 9 9: : : :x. . . .` @ @ @ X@    X. b b b b bH     r4   r(   );
__future__r   r]   r   collections.abcr   typingr   r   r   r   r	   openair
   r   r   openai.typesr   openai.types.chatr   r   openai.types.responsesr    r   agent_outputr   rA   r   ri   r   r   r   r   r   r   rC   r   tracing.span_datar   tracing.spansr   rU   r   chatcmpl_converterr   chatcmpl_helpersr    r!   chatcmpl_stream_handlerr"   fake_idr#   	interfacer$   r%   r<   r&   r(   rw   r4   r2   <module>r      s=   " " " " " "   ) ) ) ) ) ) > > > > > > > > > > > > > > 6 6 6 6 6 6 6 6 6 6 " " " " " " A A A A A A A A + + + + + +       0 0 0 0 0 0       K K K K K K K K K K             % % % % % % 2 2 2 2 2 2                   ) ) ) ) ) ) 6 6 6 6 6 6 6 6 : : : : : : & & & & & & * * * * * * * * /......{ { { { { { { { { {r4   