o
    ØRWjôž  ã                   @  sr  d dl mZ d dl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 d dlmZmZmZmZ d dlZddl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 ddl m!Z! ddl"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.m/Z/ G dd„ dƒZ0e	de0d�Z1G dd„ dee1 ƒZ2G dd„ dƒZ3e	de3d�Z4G dd„ dee4 ƒZ5d+dd „Z6d,d$d%„Z7d-d)d*„Z8dS ).é    )ÚannotationsN)ÚTracebackType)ÚTYPE_CHECKINGÚAnyÚGenericÚTypeVarÚCallableÚIterableÚIteratorÚcast)Ú	AwaitableÚAsyncIterableÚAsyncIteratorÚassert_neveré   )Úis_dictÚis_listÚconsume_sync_iteratorÚconsume_async_iterator)Ú
model_dump)Úconstruct_type)ÚStreamÚAsyncStream)ÚAssistantStreamEvent)ÚRunÚTextÚMessageÚ	ImageFileÚ	TextDeltaÚMessageDeltaÚMessageContentÚMessageContentDelta)ÚRunStepÚToolCallÚRunStepDeltaÚToolCallDeltac                   @  sr  e Zd ZU ded< 	 dgdd„Zdhd	d
„Zdidd„Zdjdd„Zedkdd„ƒZ	edldd„ƒZ
edmdd„ƒZedndd„ƒZdgdd„Zdgdd „Zdod"d#„Zdpd%d&„Zdqd(d)„Zdrd+d,„Zdgd-d.„Zdsd0d1„Zdtd4d5„Zdud9d:„Zdtd;d<„Zdvd?d@„ZdwdBdC„ZdvdDdE„ZdxdHdI„ZdgdJdK„ZdydNdO„ZdzdQdR„ZdydSdT„Zd{dWdX„Z d|dZd[„Z!d{d\d]„Z"d}d`da„Z#dsdbdc„Z$djddde„Z%dfS )~ÚAssistantEventHandlerzIterable[str]Útext_deltasÚreturnÚNonec                 C  óZ   d | _ d | _d | _d | _d | _d | _d | _i | _i | _d | _	|  
¡ | _|  ¡ | _d | _d S ©N)Ú_current_eventÚ_current_message_content_indexÚ_current_message_contentÚ_current_tool_call_indexÚ_current_tool_callÚ+_AssistantEventHandler__current_run_step_idÚ#_AssistantEventHandler__current_runÚ*_AssistantEventHandler__run_step_snapshotsÚ)_AssistantEventHandler__message_snapshotsÚ0_AssistantEventHandler__current_message_snapshotÚ__text_deltas__r'   Ú
__stream__Ú	_iteratorÚ_AssistantEventHandler__stream©Úself© r<   úo/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/openai/lib/streaming/_assistants.pyÚ__init__*   ó   


zAssistantEventHandler.__init__ÚstreamúStream[AssistantStreamEvent]c                 C  ó   | j rtdƒ‚|| _ d S ©NzyA single event handler cannot be shared between multiple streams; You will need to construct a new event handler instance)r9   ÚRuntimeError©r;   r@   r<   r<   r=   Ú_init:   ó
   ÿ
zAssistantEventHandler._initr   c                 C  s
   | j  ¡ S r+   )r8   Ú__next__r:   r<   r<   r=   rH   B   s   
zAssistantEventHandler.__next__úIterator[AssistantStreamEvent]c                 c  s   � | j D ]}|V  qd S r+   ©r8   ©r;   Úitemr<   r<   r=   Ú__iter__E   s   €
ÿzAssistantEventHandler.__iter__úAssistantStreamEvent | Nonec                 C  ó   | j S r+   ©r,   r:   r<   r<   r=   Úcurrent_eventI   ó   z#AssistantEventHandler.current_eventú
Run | Nonec                 C  rO   r+   )r2   r:   r<   r<   r=   Úcurrent_runM   rR   z!AssistantEventHandler.current_runúRunStep | Nonec                 C  ó   | j sd S | j| j  S r+   )r1   r3   r:   r<   r<   r=   Úcurrent_run_step_snapshotQ   ó   z/AssistantEventHandler.current_run_step_snapshotúMessage | Nonec                 C  rO   r+   )r5   r:   r<   r<   r=   Úcurrent_message_snapshotX   rR   z.AssistantEventHandler.current_message_snapshotc                 C  s   | j r
| j  ¡  dS dS ©z~
        Close the response and release the connection.

        Automatically called when the context manager exits.
        N)r9   Úcloser:   r<   r<   r=   r\   \   s   ÿzAssistantEventHandler.closec                 C  s   t | ƒ dS ©z(Waits until the stream has been consumedN)r   r:   r<   r<   r=   Ú
until_donee   s   z AssistantEventHandler.until_doner   c                 C  s   |   ¡  | jstdƒ‚| jS )úBWait for the stream to finish and returns the completed Run objectúNo final run object found)r^   r2   rD   r:   r<   r<   r=   Úget_final_runi   s   z#AssistantEventHandler.get_final_runúlist[RunStep]c                 C  ó*   |   ¡  | jstdƒ‚dd„ | j ¡ D ƒS )úEWait for the stream to finish and returns the steps taken in this runúNo run steps foundc                 S  ó   g | ]}|‘qS r<   r<   ©Ú.0Ústepr<   r<   r=   Ú
<listcomp>y   ó    z=AssistantEventHandler.get_final_run_steps.<locals>.<listcomp>)r^   r3   rD   Úvaluesr:   r<   r<   r=   Úget_final_run_stepsr   ó   z)AssistantEventHandler.get_final_run_stepsúlist[Message]c                 C  rc   )úJWait for the stream to finish and returns the messages emitted in this runúNo messages foundc                 S  rf   r<   r<   ©rh   Úmessager<   r<   r=   rj   ‚   rk   z<AssistantEventHandler.get_final_messages.<locals>.<listcomp>)r^   r4   rD   rl   r:   r<   r<   r=   Úget_final_messages{   rn   z(AssistantEventHandler.get_final_messagesúIterator[str]c                 c  sR   � | D ]#}|j dkrq|jjjpg D ]}|jdkr%|jr%|jjr%|jjV  qqd S ©Núthread.message.deltaÚtext©ÚeventÚdataÚdeltaÚcontentÚtyperx   Úvalue©r;   rz   Úcontent_deltar<   r<   r=   r6   „   s   €

€þüz%AssistantEventHandler.__text_deltas__c                 C  ó   dS ©zšFires when the stream has finished.

        This happens if the stream is read to completion
        or if an exception occurs during iteration.
        Nr<   r:   r<   r<   r=   Úon_end�   ó    zAssistantEventHandler.on_endrz   c                 C  r‚   ©z2Callback that is fired for every Server-Sent-EventNr<   ©r;   rz   r<   r<   r=   Úon_event–   r…   zAssistantEventHandler.on_eventÚrun_stepr"   c                 C  r‚   ©z1Callback that is fired when a run step is createdNr<   ©r;   r‰   r<   r<   r=   Úon_run_step_created™   r…   z)AssistantEventHandler.on_run_step_createdr|   r$   Úsnapshotc                 C  r‚   ©aX  Callback that is fired whenever a run step delta is returned from the API

        The first argument is just the delta as sent by the API and the second argument
        is the accumulated snapshot of the run step. For example, a tool calls event may
        look like this:

        # delta
        tool_calls=[
            RunStepDeltaToolCallsCodeInterpreter(
                index=0,
                type='code_interpreter',
                id=None,
                code_interpreter=CodeInterpreter(input=' sympy', outputs=None)
            )
        ]
        # snapshot
        tool_calls=[
            CodeToolCall(
                id='call_wKayJlcYV12NiadiZuJXxcfx',
                code_interpreter=CodeInterpreter(input='from sympy', outputs=[]),
                type='code_interpreter',
                index=0
            )
        ],
        Nr<   ©r;   r|   r�   r<   r<   r=   Úon_run_step_deltaœ   r…   z'AssistantEventHandler.on_run_step_deltac                 C  r‚   ©z3Callback that is fired when a run step is completedNr<   r‹   r<   r<   r=   Úon_run_step_done·   r…   z&AssistantEventHandler.on_run_step_doneÚ	tool_callr#   c                 C  r‚   ©z2Callback that is fired when a tool call is createdNr<   ©r;   r“   r<   r<   r=   Úon_tool_call_createdº   r…   z*AssistantEventHandler.on_tool_call_createdr%   c                 C  r‚   ©z<Callback that is fired when a tool call delta is encounteredNr<   r�   r<   r<   r=   Úon_tool_call_delta½   r…   z(AssistantEventHandler.on_tool_call_deltac                 C  r‚   r—   r<   r•   r<   r<   r=   Úon_tool_call_doneÀ   r…   z'AssistantEventHandler.on_tool_call_doneÚ	exceptionÚ	Exceptionc                 C  r‚   ©z4Fired whenever an exception happens during streamingNr<   ©r;   rš   r<   r<   r=   Úon_exceptionÃ   r…   z"AssistantEventHandler.on_exceptionc                 C  r‚   ©zFires if the request times outNr<   r:   r<   r<   r=   Ú
on_timeoutÆ   r…   z AssistantEventHandler.on_timeoutrs   r   c                 C  r‚   ©z0Callback that is fired when a message is createdNr<   ©r;   rs   r<   r<   r=   Úon_message_createdÉ   r…   z(AssistantEventHandler.on_message_createdr   c                 C  r‚   ©ax  Callback that is fired whenever a message delta is returned from the API

        The first argument is just the delta as sent by the API and the second argument
        is the accumulated snapshot of the message. For example, a text content event may
        look like this:

        # delta
        MessageDeltaText(
            index=0,
            type='text',
            text=Text(
                value=' Jane'
            ),
        )
        # snapshot
        MessageContentText(
            index=0,
            type='text',
            text=Text(
                value='Certainly, Jane'
            ),
        )
        Nr<   r�   r<   r<   r=   Úon_message_deltaÌ   r…   z&AssistantEventHandler.on_message_deltac                 C  r‚   ©z2Callback that is fired when a message is completedNr<   r¢   r<   r<   r=   Úon_message_doneå   r…   z%AssistantEventHandler.on_message_donerx   r   c                 C  r‚   ©z;Callback that is fired when a text content block is createdNr<   ©r;   rx   r<   r<   r=   Úon_text_createdè   r…   z%AssistantEventHandler.on_text_createdr   c                 C  r‚   )aŠ  Callback that is fired whenever a text content delta is returned
        by the API.

        The first argument is just the delta as sent by the API and the second argument
        is the accumulated snapshot of the text. For example:

        on_text_delta(TextDelta(value="The"), Text(value="The")),
        on_text_delta(TextDelta(value=" solution"), Text(value="The solution")),
        on_text_delta(TextDelta(value=" to"), Text(value="The solution to")),
        on_text_delta(TextDelta(value=" the"), Text(value="The solution to the")),
        on_text_delta(TextDelta(value=" equation"), Text(value="The solution to the equation")),
        Nr<   r�   r<   r<   r=   Úon_text_deltaë   r…   z#AssistantEventHandler.on_text_deltac                 C  r‚   ©z<Callback that is fired when a text content block is finishedNr<   r©   r<   r<   r=   Úon_text_doneù   r…   z"AssistantEventHandler.on_text_doneÚ
image_filer   c                 C  r‚   ©z;Callback that is fired when an image file block is finishedNr<   ©r;   r®   r<   r<   r=   Úon_image_file_doneü   r…   z(AssistantEventHandler.on_image_file_donec                 C  s‚  || _ |  |¡ t|| jd�\| _}| jd ur| j| j| jj< t|| jd� |D ]}| jd us1J ‚| jj|j	 }|j
dkrC|  |j¡ q(|jdksb|jdksb|jdksb|jdksb|jdksb|jd	krq|j| _| jro|  | j¡ �nË|jd
ks…|jdks…|jdks…|jdkr‹|j| _�n±|jdkr˜|  |j¡ �n¤|jdk�r| j}|d us§J ‚|jj}|jd u�r|jD ]X}|j
dkrÓ|jrÓ|j|j	 }|j
dksËJ ‚|  |j|j¡ |j	| jk�r| jd urú| jj
dkrí|  | jj¡ n| jj
dkrú|  | jj¡ |j	| _|j|j	 | _|j|j	 | _q´|  |jj|¡ �n%|jdk�s#|jdk�r\|j| _|j| j|jj< | jd u�rU|jj| j }|j
dk�rI|  |j¡ n|j
dk�rU|  |j¡ |  |j¡ nà|jdk�rn|jj| _|  |j¡ nÎ|jdk�rz|jj| _nÂ|jdk�rö| j|jj }	|jj}
|
j�rí|
jj
dk�rí|
jjd u�rí|	jj
dk�s¦J ‚|
jjD ]B}|j	| j k�r¾|  !||	jj|j	 ¡ |j	| j k�rã| jd u�rÑ|  | j¡ |j	| _ |	jj|j	 | _|  "| j¡ |	jj|j	 | _�qª|  #|jj|	¡ nF|jdk�s|jdk�s|jdk�s|jdk�r"| j�r|  | j¡ |  $|j¡ d | _n|jdk�s4|jdk�s4|jdk�r5nt%�r<t&|ƒ d | _ d S ©N)rz   rZ   )rz   Úrun_step_snapshotsrx   zthread.run.completedzthread.run.cancelledzthread.run.expiredzthread.run.failedzthread.run.requires_actionzthread.run.incompletezthread.run.createdzthread.run.in_progresszthread.run.cancellingzthread.run.queuedúthread.message.createdrw   r®   zthread.message.completedzthread.message.incompleteúthread.run.step.createdzthread.run.step.in_progressúthread.run.step.deltaÚ
tool_callszthread.run.step.completedzthread.run.step.cancelledzthread.run.step.expiredzthread.run.step.failedzthread.createdzthread.message.in_progressÚerror)'r,   rˆ   Úaccumulate_eventr5   r4   ÚidÚaccumulate_run_stepr3   r}   Úindexr~   rª   rx   rz   r{   r2   r0   r™   r£   r|   r«   r-   r.   r­   r±   r®   r¥   r§   r1   rŒ   Ústep_detailsr·   r/   r˜   r–   r�   r’   r   r   ©r;   rz   Únew_contentr�   Úblockr�   Úmessage_deltaÚsnapshot_contentr}   Ústep_snapshotÚrun_step_deltaÚtool_call_deltar<   r<   r=   Ú_emit_sse_eventÿ   sØ   
þ
þ
€





€







ÿþþ$
z%AssistantEventHandler._emit_sse_eventc              
   c  s¤   � | j }|s
tdƒ‚zBz|D ]
}|  |¡ |V  qW n+ tjtjfy4 } z
|  ¡  |  |¡ ‚ d }~w t	yE } z|  |¡ ‚ d }~ww W |  
¡  d S |  
¡  w ©NzStream has not been started yet)r9   rD   rÆ   ÚhttpxÚTimeoutExceptionÚasyncioÚTimeoutErrorr    rž   r›   r„   ©r;   r@   rz   Úexcr<   r<   r=   r7   �  s*   €
ý
€
€þøz AssistantEventHandler.__stream__N©r(   r)   )r@   rA   r(   r)   ©r(   r   )r(   rI   ©r(   rN   ©r(   rS   ©r(   rU   ©r(   rY   ©r(   r   ©r(   rb   ©r(   ro   )r(   ru   ©rz   r   r(   r)   ©r‰   r"   r(   r)   ©r|   r$   r�   r"   r(   r)   ©r“   r#   r(   r)   ©r|   r%   r�   r#   r(   r)   ©rš   r›   r(   r)   ©rs   r   r(   r)   ©r|   r   r�   r   r(   r)   ©rx   r   r(   r)   ©r|   r   r�   r   r(   r)   ©r®   r   r(   r)   )&Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r>   rF   rH   rM   ÚpropertyrQ   rT   rW   rZ   r\   r^   ra   rm   rt   r6   r„   rˆ   rŒ   r�   r’   r–   r˜   r™   rž   r    r£   r¥   r§   rª   r«   r­   r±   rÆ   r7   r<   r<   r<   r=   r&      sR   
 





	

	
	
	

















 r&   ÚAssistantEventHandlerT)Úboundc                   @  ó.   e Zd ZdZddd	„Zdd
d„Zddd„ZdS )ÚAssistantStreamManagerzöWrapper over AssistantStreamEventHandler that is returned by `.stream()`
    so that a context manager can be used.

    ```py
    with client.threads.create_and_run_stream(...) as stream:
        for event in stream:
            ...
    ```
    Úapi_requestú*Callable[[], Stream[AssistantStreamEvent]]Úevent_handlerrç   r(   r)   c                C  ó   d | _ || _|| _d S r+   )Ú_AssistantStreamManager__streamÚ&_AssistantStreamManager__event_handlerÚ$_AssistantStreamManager__api_request©r;   rë   rí   r<   r<   r=   r>   ³  ó   
zAssistantStreamManager.__init__c                 C  s   |   ¡ | _| j | j¡ | jS r+   )rñ   rï   rð   rF   r:   r<   r<   r=   Ú	__enter__½  s   
z AssistantStreamManager.__enter__Úexc_typeútype[BaseException] | NonerÍ   úBaseException | NoneÚexc_tbúTracebackType | Nonec                 C  s   | j d ur| j  ¡  d S d S r+   )rï   r\   ©r;   rõ   rÍ   rø   r<   r<   r=   Ú__exit__Â  s   
ÿzAssistantStreamManager.__exit__N)rë   rì   rí   rç   r(   r)   )r(   rç   ©rõ   rö   rÍ   r÷   rø   rù   r(   r)   )râ   rã   rä   Ú__doc__r>   rô   rû   r<   r<   r<   r=   rê   ¨  s
    



rê   c                   @  sr  e Zd ZU ded< 	 dgdd„Zdhd	d
„Zdidd„Zdjdd„Zdgdd„Ze	dkdd„ƒZ
e	dldd„ƒZe	dmdd„ƒZe	dndd„ƒZdgdd „Zdod"d#„Zdpd%d&„Zdqd(d)„Zdrd+d,„Zdgd-d.„Zdsd0d1„Zdtd4d5„Zdud9d:„Zdtd;d<„Zdvd?d@„ZdwdBdC„ZdvdDdE„ZdxdHdI„ZdgdJdK„ZdydNdO„ZdzdQdR„ZdydSdT„Zd{dWdX„Z d|dZd[„Z!d{d\d]„Z"d}d`da„Z#dsdbdc„Z$djddde„Z%dfS )~ÚAsyncAssistantEventHandlerzAsyncIterable[str]r'   r(   r)   c                 C  r*   r+   )r,   r-   r.   r/   r0   Ú0_AsyncAssistantEventHandler__current_run_step_idÚ(_AsyncAssistantEventHandler__current_runÚ/_AsyncAssistantEventHandler__run_step_snapshotsÚ._AsyncAssistantEventHandler__message_snapshotsÚ5_AsyncAssistantEventHandler__current_message_snapshotr6   r'   r7   r8   Ú#_AsyncAssistantEventHandler__streamr:   r<   r<   r=   r>   Ú  r?   z#AsyncAssistantEventHandler.__init__r@   ú!AsyncStream[AssistantStreamEvent]c                 C  rB   rC   )r  rD   rE   r<   r<   r=   rF   ê  rG   z AsyncAssistantEventHandler._initr   c                 Ã  s   �| j  ¡ I d H S r+   )r8   Ú	__anext__r:   r<   r<   r=   r  ò  s   €z$AsyncAssistantEventHandler.__anext__ú#AsyncIterator[AssistantStreamEvent]c                 C s"   �| j 2 z	3 d H W }|V  q6 d S r+   rJ   rK   r<   r<   r=   Ú	__aiter__õ  s   €ÿz$AsyncAssistantEventHandler.__aiter__c                 Ã  s    �| j r| j  ¡ I dH  dS dS r[   )r  r\   r:   r<   r<   r=   r\   ù  s   €ÿz AsyncAssistantEventHandler.closerN   c                 C  rO   r+   rP   r:   r<   r<   r=   rQ     rR   z(AsyncAssistantEventHandler.current_eventrS   c                 C  rO   r+   )r   r:   r<   r<   r=   rT     rR   z&AsyncAssistantEventHandler.current_runrU   c                 C  rV   r+   )rÿ   r  r:   r<   r<   r=   rW   
  rX   z4AsyncAssistantEventHandler.current_run_step_snapshotrY   c                 C  rO   r+   )r  r:   r<   r<   r=   rZ     rR   z3AsyncAssistantEventHandler.current_message_snapshotc                 Ã  s   �t | ƒI dH  dS r]   )r   r:   r<   r<   r=   r^     s   €z%AsyncAssistantEventHandler.until_doner   c                 Ã  s$   �|   ¡ I dH  | jstdƒ‚| jS )r_   Nr`   )r^   r   rD   r:   r<   r<   r=   ra     s
   €z(AsyncAssistantEventHandler.get_final_runrb   c                 Ã  ó2   �|   ¡ I dH  | jstdƒ‚dd„ | j ¡ D ƒS )rd   Nre   c                 S  rf   r<   r<   rg   r<   r<   r=   rj   )  rk   zBAsyncAssistantEventHandler.get_final_run_steps.<locals>.<listcomp>)r^   r  rD   rl   r:   r<   r<   r=   rm   "  ó
   €z.AsyncAssistantEventHandler.get_final_run_stepsro   c                 Ã  r	  )rp   Nrq   c                 S  rf   r<   r<   rr   r<   r<   r=   rj   2  rk   zAAsyncAssistantEventHandler.get_final_messages.<locals>.<listcomp>)r^   r  rD   rl   r:   r<   r<   r=   rt   +  r
  z-AsyncAssistantEventHandler.get_final_messagesúAsyncIterator[str]c                 C s\   �| 2 z'3 d H W }|j dkrq|jjjpg D ]}|jdkr)|jr)|jjr)|jjV  qq6 d S rv   ry   r€   r<   r<   r=   r6   4  s   €

€þüz*AsyncAssistantEventHandler.__text_deltas__c                 Ã  ó   �dS rƒ   r<   r:   r<   r<   r=   r„   ?  ó    z!AsyncAssistantEventHandler.on_endrz   c                 Ã  r  r†   r<   r‡   r<   r<   r=   rˆ   F  r  z#AsyncAssistantEventHandler.on_eventr‰   r"   c                 Ã  r  rŠ   r<   r‹   r<   r<   r=   rŒ   I  r  z.AsyncAssistantEventHandler.on_run_step_createdr|   r$   r�   c                 Ã  r  rŽ   r<   r�   r<   r<   r=   r�   L  r  z,AsyncAssistantEventHandler.on_run_step_deltac                 Ã  r  r‘   r<   r‹   r<   r<   r=   r’   g  r  z+AsyncAssistantEventHandler.on_run_step_doner“   r#   c                 Ã  r  r”   r<   r•   r<   r<   r=   r–   j  r  z/AsyncAssistantEventHandler.on_tool_call_createdr%   c                 Ã  r  r—   r<   r�   r<   r<   r=   r˜   m  r  z-AsyncAssistantEventHandler.on_tool_call_deltac                 Ã  r  r—   r<   r•   r<   r<   r=   r™   p  r  z,AsyncAssistantEventHandler.on_tool_call_donerš   r›   c                 Ã  r  rœ   r<   r�   r<   r<   r=   rž   s  r  z'AsyncAssistantEventHandler.on_exceptionc                 Ã  r  rŸ   r<   r:   r<   r<   r=   r    v  r  z%AsyncAssistantEventHandler.on_timeoutrs   r   c                 Ã  r  r¡   r<   r¢   r<   r<   r=   r£   y  r  z-AsyncAssistantEventHandler.on_message_createdr   c                 Ã  r  r¤   r<   r�   r<   r<   r=   r¥   |  r  z+AsyncAssistantEventHandler.on_message_deltac                 Ã  r  r¦   r<   r¢   r<   r<   r=   r§   •  r  z*AsyncAssistantEventHandler.on_message_donerx   r   c                 Ã  r  r¨   r<   r©   r<   r<   r=   rª   ˜  r  z*AsyncAssistantEventHandler.on_text_createdr   c                 Ã  r  )aŒ  Callback that is fired whenever a text content delta is returned
        by the API.

        The first argument is just the delta as sent by the API and the second argument
        is the accumulated snapshot of the text. For example:

        on_text_delta(TextDelta(value="The"), Text(value="The")),
        on_text_delta(TextDelta(value=" solution"), Text(value="The solution")),
        on_text_delta(TextDelta(value=" to"), Text(value="The solution to")),
        on_text_delta(TextDelta(value=" the"), Text(value="The solution to the")),
        on_text_delta(TextDelta(value=" equation"), Text(value="The solution to the equivalent")),
        Nr<   r�   r<   r<   r=   r«   ›  r  z(AsyncAssistantEventHandler.on_text_deltac                 Ã  r  r¬   r<   r©   r<   r<   r=   r­   ©  r  z'AsyncAssistantEventHandler.on_text_doner®   r   c                 Ã  r  r¯   r<   r°   r<   r<   r=   r±   ¬  r  z-AsyncAssistantEventHandler.on_image_file_donec                 Ã  sö  �|| _ |  |¡I d H  t|| jd�\| _}| jd ur#| j| j| jj< t|| jd� |D ]}| jd us5J ‚| jj|j	 }|j
dkrJ|  |j¡I d H  q,|jdksi|jdksi|jdksi|jdksi|jdksi|jd	kr{|j| _| jry|  | j¡I d H  �nû|jd
ks�|jdks�|jdks�|jdkr•|j| _�ná|jdkr¥|  |j¡I d H  �nÑ|jdk�r3| j}|d us´J ‚|jj}|jd u�r&|jD ]d}|j
dkrã|jrã|j|j	 }|j
dksØJ ‚|  |j|j¡I d H  |j	| jk�r| jd u�r| jj
dk�r|  | jj¡I d H  n| jj
dk�r|  | jj¡I d H  |j	| _|j|j	 | _|j|j	 | _qÁ|  |jj|¡I d H  �nC|jdk�s?|jdk�r�|j| _|j| j|jj< | jd u�rw|jj| j }|j
dk�rh|  |j¡I d H  n|j
dk�rw|  |j¡I d H  |  |j¡I d H  nõ|jdk�r–|jj| _|  |j¡I d H  nà|jdk�r¢|jj| _nÔ|jdk�r*| j|jj }	|jj}
|
j�r|
jj
dk�r|
jjd u�r|	jj
dk�sÎJ ‚|
jjD ]K}|j	| j k�ré|  !||	jj|j	 ¡I d H  |j	| j k�r| jd u�rÿ|  | j¡I d H  |j	| _ |	jj|j	 | _|  "| j¡I d H  |	jj|j	 | _�qÒ|  #|jj|	¡I d H  nL|jdk�sB|jdk�sB|jdk�sB|jdk�r\| j�rO|  | j¡I d H  |  $|j¡I d H  d | _n|jdk�sn|jdk�sn|jdk�ront%�rvt&|ƒ d | _ d S r²   )'r,   rˆ   r¹   r  r  rº   r»   r  r}   r¼   r~   rª   rx   rz   r{   r   r0   r™   r£   r|   r«   r-   r.   r­   r±   r®   r¥   r§   rÿ   rŒ   r½   r·   r/   r˜   r–   r�   r’   r   r   r¾   r<   r<   r=   rÆ   ¯  sÚ   €þ
þ
€





€






ÿ
þþ$
z*AsyncAssistantEventHandler._emit_sse_eventc              
   C sÒ   �| j }|s
tdƒ‚zVz|2 z3 d H W }|  |¡I d H  |V  q6 W n4 tjtjfyB } z|  ¡ I d H  |  |¡I d H  ‚ d }~w t	yV } z	|  |¡I d H  ‚ d }~ww W |  
¡ I d H  d S |  
¡ I d H  w rÇ   )r  rD   rÆ   rÈ   rÉ   rÊ   rË   r    rž   r›   r„   rÌ   r<   r<   r=   r7   @  s*   €ý€€þø"z%AsyncAssistantEventHandler.__stream__NrÎ   )r@   r  r(   r)   rÏ   )r(   r  rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   )r(   r  r×   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   )&râ   rã   rä   rå   r>   rF   r  r  r\   ræ   rQ   rT   rW   rZ   r^   ra   rm   rt   r6   r„   rˆ   rŒ   r�   r’   r–   r˜   r™   rž   r    r£   r¥   r§   rª   r«   r­   r±   rÆ   r7   r<   r<   r<   r=   rþ   Ì  sR   
 




	


	
	
	

















 rþ   ÚAsyncAssistantEventHandlerTc                   @  ré   )ÚAsyncAssistantStreamManagera>  Wrapper over AsyncAssistantStreamEventHandler that is returned by `.stream()`
    so that an async context manager can be used without `await`ing the
    original client call.

    ```py
    async with client.threads.create_and_run_stream(...) as stream:
        async for event in stream:
            ...
    ```
    rë   ú,Awaitable[AsyncStream[AssistantStreamEvent]]rí   r  r(   r)   c                C  rî   r+   )Ú$_AsyncAssistantStreamManager__streamÚ+_AsyncAssistantStreamManager__event_handlerÚ)_AsyncAssistantStreamManager__api_requestrò   r<   r<   r=   r>   d  ró   z$AsyncAssistantStreamManager.__init__c                 Ã  s$   �| j I d H | _| j | j¡ | jS r+   )r  r  r  rF   r:   r<   r<   r=   Ú
__aenter__n  s   €z&AsyncAssistantStreamManager.__aenter__rõ   rö   rÍ   r÷   rø   rù   c                 Ã  s$   �| j d ur| j  ¡ I d H  d S d S r+   )r  r\   rú   r<   r<   r=   Ú	__aexit__s  s   €
ÿz%AsyncAssistantStreamManager.__aexit__N)rë   r  rí   r  r(   r)   )r(   r  rü   )râ   rã   rä   rý   r>   r  r  r<   r<   r<   r=   r  X  s
    


r  rz   r   r³   údict[str, RunStep]r(   r)   c              	   C  s„   | j dkr| j|| jj< d S | j dkr@| j}||j }|jr@ttdt|ddd�ƒtdt|jddd�ƒƒ}tttt|d�ƒ||j< d S )Nrµ   r¶   údict[object, object]TF©Úexclude_unsetÚwarnings©Útype_r   )	rz   r{   rº   r|   Úaccumulate_deltar   r   r"   r   )rz   r³   r{   r�   Úmergedr<   r<   r=   r»   }  s&   


þþû
r»   rZ   rY   ú0tuple[Message | None, list[MessageContentDelta]]c                 C  s   | j dkr
| jg fS g }| j dkr|g fS |stdƒ‚| j}|jjr||jjD ]U}z|j|j }W n% tyU   |j |jtt	t
ttt	ƒt|ddd�d�ƒ¡ | |¡ Y q&w ttdt|ddd�ƒtdt|ddd�ƒƒ}tt	t
ttt	ƒ|d�ƒ|j|j< q&||fS )	zIReturns a tuple of message snapshot and newly created text message deltasr´   rw   z5Encountered a message delta with no previous snapshotTFr  r  r  )rz   r{   rD   r|   r}   r¼   Ú
IndexErrorÚinsertr   r    r   r   r   Úappendr  )rz   rZ   r¿   r{   r�   rÀ   r  r<   r<   r=   r¹   š  sV   


ýþþôþþû
ýþ	r¹   Úaccr  r|   c           	      C  sª  |  ¡ D ]Î\}}|| vr|| |< q| | }|d u r|| |< q|dks&|dkr+|| |< qt|tƒr:t|tƒr:||7 }n”t|ttfƒrMt|ttfƒrM||7 }n�t|ƒr[t|ƒr[t||ƒ}nst|ƒrÎt|ƒrÎtdd„ |D ƒƒrr| 	|¡ q|D ]Y}t|ƒs�t
d|› �ƒ‚z|d }W n ty› } ztd|› �ƒ|‚d }~ww t|tƒs¨t
d|› �ƒ‚z|| }W n ty½   | ||¡ Y qtw t|ƒsÆt
dƒ‚t||ƒ||< qt|| |< q| S )	Nr¼   r~   c                 s  s    � | ]}t |tttfƒV  qd S r+   )Ú
isinstanceÚstrÚintÚfloat)rh   Úxr<   r<   r=   Ú	<genexpr>ò  s   € z#accumulate_delta.<locals>.<genexpr>z1Unexpected list delta entry is not a dictionary: z2Expected list delta entry to have an `index` key; z>Unexpected, list delta entry `index` value is not an integer; znot handled yet)Úitemsr$  r%  r&  r'  r   r  r   ÚallÚextendÚ	TypeErrorÚKeyErrorrD   r   r!  )	r#  r|   ÚkeyÚdelta_valueÚ	acc_valueÚdelta_entryr¼   rÍ   Ú	acc_entryr<   r<   r=   r  Ô  sT   


€ÿ
ÿ
r  )rz   r   r³   r  r(   r)   )rz   r   rZ   rY   r(   r  )r#  r  r|   r  r(   r  )9Ú
__future__r   rÊ   Útypesr   Útypingr   r   r   r   r   r	   r
   r   Útyping_extensionsr   r   r   r   rÈ   Ú_utilsr   r   r   r   Ú_compatr   Ú_modelsr   Ú
_streamingr   r   Ú
types.betar   Útypes.beta.threadsr   r   r   r   r   r   r    r!   Útypes.beta.threads.runsr"   r#   r$   r%   r&   rç   rê   rþ   r  r  r»   r¹   r  r<   r<   r<   r=   Ú<module>   s8    ((
   $   
%
: