o
    ùT·jR;  ã                   @  s€  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„ deƒZ3d-dd„Z4d.dd „Z5d/d$d%„Z6d&Z7G d'd(„ d(ƒZ8G d)d*„ d*ƒZ9G d+d,„ d,ƒZ:dS )0é    )Ú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                   @  s   e Zd ZU ded< ded< dS )Ú_RequestOptionsúHeaders | NoneÚextra_headersú(float | httpx2.Timeout | None | NotGivenÚtimeoutN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r.   r.   úg/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/openai/lib/streaming/agents/_streams.pyr%      s   
 r%   ÚoptionsÚreturnc                 C  s6   | d }i | ¥d|d urdd„ |  ¡ D ƒi¥S d i¥S )Nr'   c                 S  s"   i | ]\}}|  ¡ d kr||“qS )úidempotency-key)Úlower)Ú.0ÚkeyÚvaluer.   r.   r/   Ú
<dictcomp>'   s   " z$_request_options.<locals>.<dictcomp>)Úitems)r0   Úheadersr.   r.   r/   Ú_request_options#   s   ÿÿþür:   Úidempotency_keyú
str | Omitr9   r&   c                 C  sB   |pi   ¡ D ]\}}| ¡ dkr|  S qt| tƒrttƒ ƒS | S )Nr2   )r8   r3   Ú
isinstancer   Ústrr   )r;   r9   r5   r6   r.   r.   r/   Ú
_input_key-   s
   ÿr?   Úinputú-str | Iterable[AgentSessionInputMessageParam]r    c                 C  sJ   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   r@   )r=   r>   Ú
ValueErrorÚlist)r@   Úmessagesr.   r.   r/   Ú_input_event6   s   

rK   i   c                   @  s4   e Zd Zddd„Zddd	„Zdd
d„Zddd„ZdS )Ú
_TurnStater1   ÚNonec                 C  s(   d | _ d| _tƒ | _tƒ | _tƒ | _d S )NF)Úturn_idÚ
turn_endedÚsetÚ	event_idsr   Úrecent_eventsÚhandled_calls©Úselfr.   r.   r/   Ú__init__G   s
   z_TurnState.__init__Úeventr   Úboolc                 C  s²   |j | jv rdS t| jƒtkr| j | j ¡ ¡ | j |j ¡ | j |j ¡ |j	dkr:|j
jd u r:| jd u r:|j| _|j	dksI|j	dksI|j	dkrW| jd urW|j| jkrWd| _dS )NFzagent.session.turn.createdzagent.session.turn.completedzagent.session.turn.failedzagent.session.turn.cancelledT)Úevent_idrQ   ÚlenrR   Ú_RECENT_EVENT_LIMITÚremoveÚpopleftÚappendÚaddrD   ÚturnÚsubagent_idrN   rO   ©rU   rW   r.   r.   r/   ÚacceptN   s    


z_TurnState.acceptc                 C  s   |j dkp|j dko| jS )Nzagent.session.failedzagent.session.idle)rD   rO   rb   r.   r.   r/   Úterminalb   s   z_TurnState.terminalúAgentFunctionCallItem | Nonec                 C  sJ   |j dks|jj dkrd S |j}|j|jf}|| jv rd S | j |¡ |S )Nzagent.session.turn.item.addedÚfunction_call)rD   ÚitemrN   Úcall_idrS   r_   )rU   rW   Úcallr5   r.   r.   r/   ri   e   s   
z_TurnState.callN©r1   rM   )rW   r   r1   rX   )rW   r   r1   re   )r*   r+   r,   rV   rc   rd   ri   r.   r.   r.   r/   rL   F   s
    


rL   c                   @  óv   e Zd ZdZdededœd1dd„Zd2dd„Zd3dd „Zd2d!d"„Z	d4d$d%„Z
d5d&d'„Zd5d(d)„Zd6d+d,„Zd7d/d0„ZdS )8Ú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)   Úsessionsr#   Ú
session_idr>   r@   rA   rn   ú Mapping[str, ToolHandler] | Noner;   r<   r'   r&   r)   r(   r1   rM   c                C  ód   || _ || _t|ƒ| _t|pi ƒ| _t||ƒ| _t||dœƒ| _	t
ƒ | _d | _d | _d| _d| _d S ©N)r'   r)   F©Ú	_sessionsÚ_session_idrK   Ú_inputÚdictÚ	_handlersr?   Ú_idempotency_keyr:   Ú_optionsrL   Ú_stateÚ_streamÚ	_iteratorÚ_enteredÚ_closed©rU   ro   rp   r@   rn   r;   r'   r)   r.   r.   r/   rV   �   ó   

zAgentSessionStream.__init__r   c                 C  s²   | j s| jr
tdƒ‚d| _ | jj| jfi | j¤Ž}|jdkr"tdƒ‚| jj	j
| jfi | j¤Ž| _z| jj	j| jf| jg| jdœ| j¤Ž W n tyQ   |  ¡  ‚ w |  ¡ | _| S )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€   ÚRuntimeErrorru   Úretrieverv   r{   ÚstatusrH   r†   Ústreamr}   Úcreaterw   rz   ÚBaseExceptionÚcloseÚ_iterater~   ©rU   Úsessionr.   r.   r/   Ú	__enter__˜   s.   
ÿÿ
ÿ
ÿþ
zAgentSessionStream.__enter__Úexc_typeútype[BaseException] | NoneÚexcúBaseException | NoneÚexc_tbúTracebackType | Nonec                 C  s   |   ¡  d S ©N©rŽ   ©rU   r“   r•   r—   r.   r.   r/   Ú__exit__¬   s   zAgentSessionStream.__exit__c                 C  ó   | S r™   r.   rT   r.   r.   r/   Ú__iter__±   ó   zAgentSessionStream.__iter__r   c                 C  s&   | j rt‚| jd u rtdƒ‚t| jƒS )Nz#Use sessions.stream in a with block)r€   ÚStopIterationr~   rˆ   ÚnextrT   r.   r.   r/   Ú__next__´   s
   

zAgentSessionStream.__next__c                 C  s   | D ]}qdS ©zBConsume the remaining events, including any registered tool calls.Nr.   ©rU   Ú_r.   r.   r/   Ú
until_done»   s   ÿzAgentSessionStream.until_donec                 C  s"   d| _ | jdur| j ¡  dS dS ©z?Close the event connection without cancelling the backend turn.TN©r€   r}   rŽ   rT   r.   r.   r/   rŽ   À   s   
ÿzAgentSessionStream.closeúIterator[AgentSessionEvent]c              	   c  sø   � | j d usJ ‚zn| j D ]f}| j |¡sq| j |¡}|r!|  ¡  | j |¡}|d ur2| j |j¡nd }|d ur<t	|ƒ}|V  |sD| j
rL W |  ¡  d S |d urr|d urrzt||t|ƒƒƒ}W n tyl   t|ƒ}Y nw |  |¡ qtdƒ‚|  ¡  w ©NzASession event stream ended before the turn reached idle or failed)r}   r|   rc   rd   rŽ   ri   ry   ÚgetÚnamer   r€   r   r   Ú	Exceptionr   Ú_submit_resultrˆ   )rU   rW   rd   ri   ÚhandlerÚresultr.   r.   r/   r�   Æ   s6   €

	øÿ
€
zAgentSessionStream._iterater°   r!   c                 C  sŠ   t tƒ ƒ}dD ];}z| jjj| jf|g|dœ| j¤Ž W  d S  tyB } z|d u s1t||d ƒs2‚ | j 	|¡ W Y d }~qd }~ww d S ©N)gš™™™™™¹?g333333Ó?g333333ã?Nr…   rh   ©
r>   r   ru   r†   rŒ   rv   r{   r   r   Ú_sleep©rU   r°   r;   ÚdelayÚerrorr.   r.   r/   r®   á   s$   
ÿÿÿ€ýúz!AgentSessionStream._submit_result)ro   r#   rp   r>   r@   rA   rn   rq   r;   r<   r'   r&   r)   r(   r1   rM   ©r1   r   ©r“   r”   r•   r–   r—   r˜   r1   rM   ©r1   r   rj   )r1   r©   ©r°   r!   r1   rM   )r*   r+   r,   Ú__doc__r   r   rV   r’   rœ   rž   r¢   r¦   rŽ   r�   r®   r.   r.   r.   r/   rl   p   s    ÷






rl   c                   @  rk   )8Ú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.
    Nrm   ro   r$   rp   r>   r@   rA   rn   ú%Mapping[str, AsyncToolHandler] | Noner;   r<   r'   r&   r)   r(   r1   rM   c                C  rr   rs   rt   r�   r.   r.   r/   rV   ú   r‚   z AsyncAgentSessionStream.__init__r   c                 Ã  sÌ   �| j s| jrtdƒ‚d| _ | jj| jfi | j¤ŽI d H }|jdkr&tdƒ‚| jj	j
| jfi | j¤ŽI d H | _z| jj	j| jf| jg| jdœ| j¤ŽI d H  W n ty^   |  ¡ I d H  ‚ w |  ¡ | _| S )Nz3An AsyncAgentSessionStream can only be entered onceTrƒ   r„   r…   r‡   r�   r.   r.   r/   Ú
__aenter__  s0   €
ÿ"ÿ
ÿÿþ
z"AsyncAgentSessionStream.__aenter__r“   r”   r•   r–   r—   r˜   c                 Ã  s   �|   ¡ I d H  d S r™   rš   r›   r.   r.   r/   Ú	__aexit__%  s   €z!AsyncAgentSessionStream.__aexit__c                 C  r�   r™   r.   rT   r.   r.   r/   Ú	__aiter__*  rŸ   z!AsyncAgentSessionStream.__aiter__r   c                 Ã  s.   �| j rt‚| jd u rtdƒ‚| j ¡ I d H S )Nz*Use sessions.stream in an async with block)r€   ÚStopAsyncIterationr~   rˆ   Ú	__anext__rT   r.   r.   r/   rÂ   -  s   €
z!AsyncAgentSessionStream.__anext__c                 Ã  s   �| 2 z3 dH W }q6 dS r£   r.   r¤   r.   r.   r/   r¦   4  s   €ÿz"AsyncAgentSessionStream.until_donec                 Ã  s*   �d| _ | jdur| j ¡ I dH  dS dS r§   r¨   rT   r.   r.   r/   rŽ   9  s
   €
ÿzAsyncAgentSessionStream.closeú AsyncIterator[AgentSessionEvent]c              	   C s2  �| j d usJ ‚zˆ| j 2 z3 d H W }| j |¡sq| j |¡}|r(|  ¡ I d H  | j |¡}|d ur9| j |j¡nd }|d urCt	|ƒ}|V  |sK| j
rV W |  ¡ I d H  d S |d ur‹|d ur‹z|t|ƒƒ}t |¡ro|I d H }t||ƒ}W n ty‚   t|ƒ}Y nw |  |¡I d H  q6 tdƒ‚|  ¡ I d H  w rª   )r}   r|   rc   rd   rŽ   ri   ry   r«   r¬   r   r€   r   ÚinspectÚisawaitabler   r­   r   r®   rˆ   )rU   rW   rd   ri   r¯   Úoutputr°   r.   r.   r/   r�   ?  s>   €
õ

ÿ€êz AsyncAgentSessionStream._iterater°   r!   c                 Ã  s˜   �t tƒ ƒ}dD ]A}z| jjj| jf|g|dœ| j¤ŽI d H  W  d S  tyI } z|d u s5t||d ƒs6‚ | j 	|¡I d H  W Y d }~qd }~ww d S r±   r²   r´   r.   r.   r/   r®   ]  s&   €
ÿÿÿ€ýúz&AsyncAgentSessionStream._submit_result)ro   r$   rp   r>   r@   rA   rn   r½   r;   r<   r'   r&   r)   r(   r1   rM   r·   r¸   r¹   rj   )r1   rÃ   rº   )r*   r+   r,   r»   r   r   rV   r¾   r¿   rÀ   rÂ   r¦   rŽ   r�   r®   r.   r.   r.   r/   r¼   ñ   s    ÷






r¼   )r0   r%   r1   r%   )r;   r<   r9   r&   r1   r<   )r@   rA   r1   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?   rK   r[   rL   rl   r¼   r.   r.   r.   r/   Ú<module>   s:    



	* 