
    OjR;                       d dl mZ d dl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mZmZ d dlmZ d dlmZmZ d dlZd	d
lmZ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! 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,m-Z- ddl.m/Z/ e
rddl0m1Z1m2Z2  G d de      Z3d!dZ4d"dZ5d#dZ6dZ7 G d d      Z8 G d d      Z9 G d d       Z:y)$    )annotationsN)deepcopy)uuid4)TracebackType)TYPE_CHECKINGMappingIterableIteratorAsyncIterator)deque)Self	TypedDict   )	argumentsfailed_eventresult_eventis_pending_call_race)ToolHandlerAsyncToolHandler   )OmitHeadersNotGivenomit	not_given)StreamAsyncStream)BadRequestError)AgentSessionEvent)AgentFunctionCallItem))SessionInputParamAgentSessionInputMessage,SessionInputParamAgentSessionInputToolResult)AgentSessionInputMessageParam)SessionsAsyncSessionsc                  "    e Zd ZU ded<   ded<   y)_RequestOptionsHeaders | Noneextra_headers(float | httpx2.Timeout | None | NotGiventimeoutN)__name__
__module____qualname____annotations__     {/var/www/origus_pro_usr/data/www/origus.pro/core/.venv/lib/python3.12/site-packages/openai/lib/streaming/agents/_streams.pyr'   r'      s    !!55r1   r'   c                    | d   }i | d|:|j                         D ci c]  \  }}|j                         dk7  s|| c}}iS d iS c c}}w )Nr)   idempotency-key)itemslower)optionsheaderskeyvalues       r2   _request_optionsr;   #   sj    o&G
 8?}}ke#))+YjJj#u*k  	 ks
   A

A

c                    |xs i j                         D ]  \  }}|j                         dk(  s|c S  t        | t              rt	        t                     S | S )Nr4   )r5   r6   
isinstancer   strr   )idempotency_keyr8   r9   r:   s       r2   
_input_keyr@   -   sT     }"++- 
U99;++L &ot<3uw<Q/Qr1   c                    t        | t              r| st        d      dd| dgdg}nt        |       }|st        d      d|dS )Nzinput must not be emptyuser
input_text)typetext)rolecontentzagent.session.input.message)rD   input)r=   r>   
ValueErrorlist)rH   messagess     r2   _input_eventrL   6   sT    %677#,PU1V0WXY;6771HEEr1   i   c                  ,    e Zd ZddZddZddZddZy)	
_TurnStatec                z    d | _         d| _        t               | _        t	               | _        t               | _        y )NF)turn_id
turn_endedset	event_idsr   recent_eventshandled_callsselfs    r2   __init__z_TurnState.__init__G   s-    #'#&5).365r1   c                   |j                   | j                  v ryt        | j                        t        k(  r3| j                  j                  | j                  j                                | j                  j                  |j                          | j                  j                  |j                          |j                  dk(  r3|j                  j                  | j                  |j                  | _        |j                  dk(  s|j                  dk(  s|j                  dk(  r,| j                   |j                  | j                  k(  rd| _        y)NFzagent.session.turn.createdzagent.session.turn.completedzagent.session.turn.failedzagent.session.turn.cancelledT)event_idrS   lenrT   _RECENT_EVENT_LIMITremovepopleftappendaddrD   turnsubagent_idrP   rQ   rW   events     r2   acceptz_TurnState.acceptN   s    >>T^^+ t!!"&99NN!!$"4"4"<"<">?!!%..15>>*::55%**:P:P:X]a]i]i]q ==DLJJ88zz88zz;;||'EMMT\\,I"&r1   c                ^    |j                   dk(  xs |j                   dk(  xr | j                  S )Nzagent.session.failedzagent.session.idle)rD   rQ   rc   s     r2   terminalz_TurnState.terminalb   s-    zz33o

FZ8Z8n_c_n_nor1   c                    |j                   dk7  s|j                  j                   dk7  ry |j                  }|j                  |j                  f}|| j                  v ry | j                  j                  |       |S )Nzagent.session.turn.item.addedfunction_call)rD   itemrP   call_idrU   r`   )rW   rd   callr9   s       r2   rl   z_TurnState.calle   sf    ::88EJJOO<^zz||T\\*$$$$s#r1   NreturnNone)rd   r   rn   bool)rd   r   rn   zAgentFunctionCallItem | None)r,   r-   r.   rX   re   rg   rl   r0   r1   r2   rN   rN   F   s    9(pr1   rN   c                      e Zd ZdZdeded	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 ddZddZ	ddZ
dd	Zdd
ZddZddZy)AgentSessionStreama  Submit input to an idle session and stream through the resulting turn's terminal session event.

    Use as a context manager. Only one caller may submit input to this session while
    the helper runs: the input endpoint does not return a turn ID for correlating
    concurrent writers. Initial idle events and subagent turn completions do not
    end iteration. Failed/cancelled turns remain visible as events; an unexpected
    end of the connection raises RuntimeError. Closing the stream does not cancel
    the backend turn.

    Optional tool handlers run sequentially during iteration, after their call
    event is yielded. Unregistered tools are left for the caller to handle. A
    handler exception submits a generic failure result without exception text.
    Input and tool submissions each use an idempotency key across retries. The
    optional idempotency_key argument applies only to the input submission.
    Ntool_handlersr?   r)   r+   c                  || _         || _        t        |      | _        t	        |xs i       | _        t        ||      | _        t        ||d      | _	        t               | _        d | _        d | _        d| _        d| _        y N)r)   r+   F	_sessions_session_idrL   _inputdict	_handlersr@   _idempotency_keyr;   _optionsrN   _state_stream	_iterator_entered_closedrW   sessions
session_idrH   rt   r?   r)   r+   s           r2   rX   zAgentSessionStream.__init__   sv     "%"5)m1r2 *?M J(=U\)]^ l9==Ar1   c                ~   | j                   s| j                  rt        d      d| _          | j                  j                  | j
                  fi | j                  }|j                  dk7  rt        d       | j                  j                  j                  | j
                  fi | j                  | _        	  | j                  j                  j                  | j
                  f| j                  g| j                  d| j                   | j#                         | _        | S # t        $ r | j!                           w xY w)Nz.An AgentSessionStream can only be entered onceTidle`sessions.stream requires an idle session; use sessions.events.stream to follow an active sessioneventsr?   r   r   RuntimeErrorrx   retrievery   r~   statusrI   r   streamr   createrz   r}   BaseExceptionclose_iterater   rW   sessions     r2   	__enter__zAgentSessionStream.__enter__   s   ==DLLOPP)$..))$*:*:LdmmL>>V#r  4t~~,,33D4D4DVV	(DNN!!((  *.++H]H]aeanan 	  	JJL	s   7AD! !D<c                $    | j                          y Nr   rW   exc_typeexcexc_tbs       r2   __exit__zAgentSessionStream.__exit__   s     	

r1   c                    | S r   r0   rV   s    r2   __iter__zAgentSessionStream.__iter__       r1   c                ~    | j                   rt        | j                  t        d      t	        | j                        S )Nz#Use sessions.stream in a with block)r   StopIterationr   r   nextrV   s    r2   __next__zAgentSessionStream.__next__   s4    <<>>!DEEDNN##r1   c                    | D ]  } yzBConsume the remaining events, including any registered tool calls.Nr0   rW   _s     r2   
until_donezAgentSessionStream.until_done   s     	A	r1   c                `    d| _         | j                  | j                  j                          yyz?Close the event connection without cancelling the backend turn.TNr   r   r   rV   s    r2   r   zAgentSessionStream.close   s(    <<#LL  $r1   c           	   #    K   | j                   J 	 | j                   D ]  }| j                  j                  |      s| j                  j                  |      }|r| j	                          | j                  j                  |      }|%| j                  j                  |j                        nd }|t        |      }| |s| j                  r | j	                          y ||	 t        | |t        |                  }| j                  |        t!        d      # t        $ r t        |      }Y 4w xY w# | j	                          w xY wwNzASession event stream ended before the turn reached idle or failed)r   r   re   rg   r   rl   r|   getnamer   r   r   r   	Exceptionr   _submit_resultr   )rW   rd   rg   rl   handlerresults         r2   r   zAgentSessionStream._iterate   s-    ||'''	 0{{))%0;;//6JJL{{''.;?;K$..,,TYY7QU&#D>Dt|| JJL #(;4!-dGIdO4L!M ''/'0( bcc % 4!-d!34
 JJLsM   EB<D9 ED9 "D9 &DD9 D63D9 5D66D9 9EEc                @   t        t                     }dD ]C  }	  | j                  j                  j                  | j
                  f|g|d| j                    y  y # t        $ r7}|t        ||d         s | j                  j                  |       Y d }~d }~ww xY wN)g?g333333?g333333?Nr   rk   
r>   r   rx   r   r   ry   r~   r   r   _sleeprW   r   r?   delayerrors        r2   r   z!AgentSessionStream._submit_result   s     eg,* 		-E-,%%,,$$.4XZ^ZgZg 		- # -=(<UF9DU(V%%e,,-s   ?A	B&-BB)r   r$   r   r>   rH   -str | Iterable[AgentSessionInputMessageParam]rt   z Mapping[str, ToolHandler] | Noner?   
str | Omitr)   r(   r+   r*   rn   ro   rn   r   r   ztype[BaseException] | Noner   zBaseException | Noner   zTracebackType | Nonern   ro   rn   r   rm   )rn   zIterator[AgentSessionEvent]r   r"   rn   ro   )r,   r-   r.   __doc__r   r   rX   r   r   r   r   r   r   r   r   r0   r1   r2   rr   rr   p   s    , ;?&*(,<E 
 = 8 $ & : 
.(29MWk	
$
!6-r1   rr   c                      e Zd ZdZdeded	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 ddZddZ	ddZ
dd	Zdd
ZddZddZy)AsyncAgentSessionStreamaO  Async counterpart of AgentSessionStream; use with ``async with``.

    Requires an idle session with a single input writer. Handlers may return a
    value or an awaitable; synchronous handlers run inline, without a thread
    pool. Cancellation propagates and closes the event connection. It does not
    cancel the backend turn.
    Nrs   c                  || _         || _        t        |      | _        t	        |xs i       | _        t        ||      | _        t        ||d      | _	        t               | _        d | _        d | _        d| _        d| _        y rv   rw   r   s           r2   rX   z AsyncAgentSessionStream.__init__   sv     "%"5)m1r2 *?M J(=U\)]^ l>BBFr1   c                  K   | j                   s| j                  rt        d      d| _          | j                  j                  | j
                  fi | j                   d {   }|j                  dk7  rt        d       | j                  j                  j                  | j
                  fi | j                   d {   | _        	  | j                  j                  j                  | j
                  f| j                  g| j                  d| j                   d {    | j#                         | _        | S 7 7 ~7 # t        $ r | j!                          d {  7    w xY ww)Nz3An AsyncAgentSessionStream can only be entered onceTr   r   r   r   r   s     r2   
__aenter__z"AsyncAgentSessionStream.__aenter__  s;    ==DLLTUU///0@0@RDMMRR>>V#r  :T^^2299$:J:J\dmm\\	.$..''..  *.++H]H]aeanan    S
 ]  	**,	s\   AE(!D;"AE(>D=?	E(	AE D? E $E(=E(?E E%E E%%E(c                @   K   | j                          d {    y 7 wr   r   r   s       r2   	__aexit__z!AsyncAgentSessionStream.__aexit__%  s      jjls   c                    | S r   r0   rV   s    r2   	__aiter__z!AsyncAgentSessionStream.__aiter__*  r   r1   c                   K   | j                   rt        | j                  t        d      | j                  j	                          d {   S 7 w)Nz*Use sessions.stream in an async with block)r   StopAsyncIterationr   r   	__anext__rV   s    r2   r   z!AsyncAgentSessionStream.__anext__-  sB     <<$$>>!KLL^^--////s   AA	A
Ac                *   K   | 2 3 d{   }
7 6 ywr   r0   r   s     r2   r   z"AsyncAgentSessionStream.until_done4  s       	 	!	ts   c                |   K   d| _         | j                  #| j                  j                          d{    yy7 wr   r   rV   s    r2   r   zAsyncAgentSessionStream.close9  s5     <<#,,$$&&& $&s   1<:<c               J  K   | j                   J 	 | j                   2 3 d {   }| j                  j                  |      s%| j                  j                  |      }|r| j	                          d {    | j                  j                  |      }|%| j                  j                  |j                        nd }|t        |      }| |s| j                  r | j	                          d {    y ||	  |t        |            }t        j                  |      r
| d {   }t        ||      }| j#                  |       d {    67 27 7 h7 2# t        $ r t!        |      }Y :w xY w7 )6 t%        d      # | j	                          d {  7   w xY wwr   )r   r   re   rg   r   rl   r|   r   r   r   r   r   inspectisawaitabler   r   r   r   r   )rW   rd   rg   rl   r   outputr   s          r2   r   z AsyncAgentSessionStream._iterate?  s|    ||'''	#|| 6 6e{{))%0;;//6**,&&{{''.;?;K$..,,TYY7QU&#D>Dt|| **, #(;4!(4!9"..v6+1\F!-dF!; --f555-6
 '(  &2$ 4!-d!345-  ,. bcc**,s   F#F E9EE9AF 3E4A)F F#0E1F#6F 9F =+E(E)E9F E7F E9F F#EE41F 3E44F 9F F FF  F#c                n  K   t        t                     }dD ]K  }	  | j                  j                  j                  | j
                  f|g|d| j                   d {     y  y 7 # t        $ r@}|t        ||d         s | j                  j                  |       d {  7   Y d }~d }~ww xY wwr   r   r   s        r2   r   z&AsyncAgentSessionStream._submit_result]  s      eg,* 		3E32dnn++22$$.4XZ^ZgZg   		3 # 3=(<UF9DU(Vnn++E2223sM   B5AA)A'A)#B5'A))	B220B-"B%#B-(B5-B22B5)r   r%   r   r>   rH   r   rt   z%Mapping[str, AsyncToolHandler] | Noner?   r   r)   r(   r+   r*   rn   ro   r   r   r   rm   )rn   z AsyncIterator[AgentSessionEvent]r   )r,   r-   r.   r   r   r   rX   r   r   r   r   r   r   r   r   r0   r1   r2   r   r      s     @D&*(,<E 
 = = $ & : 
.(29MWk	
0
'<3r1   r   )r7   r'   rn   r'   )r?   r   r8   r(   rn   r   )rH   r   rn   r!   );
__future__r   r   copyr   uuidr   typesr   typingr   r   r	   r
   r   collectionsr   typing_extensionsr   r   httpx2_toolsr   r   r   r   _typesr   r   r   r   r   r   r   
_streamingr   r   _exceptionsr   types.beta.agent_session_eventr   #types.beta.agent_function_call_itemr    $types.beta.agent_session_input_paramr!   r"   ,types.beta.agent_session_input_message_paramr#   'resources.beta.agents.sessions.sessionsr$   r%   r'   r;   r@   rL   r\   rN   rr   r   r0   r1   r2   <module>r      s    "     L L  -  O O 1 ? ? . + @ I [S6i 6
R
F  ' 'T~- ~-By3 y3r1   