
    g                       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      Z0 e	de0      Z1 G d dee1         Z2 G d d      Z3 e	de3      Z4 G d dee4         Z5	 	 	 	 	 	 ddZ6	 	 	 	 	 	 ddZ7ddZ8y)    )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                  J   e Zd ZU ded<   	 d%dZd&dZd'dZd(dZed)d       Z	ed*d       Z
ed+d	       Zed,d
       Zd%dZd%dZd-dZd.dZd/dZd0dZd%dZd1dZd2dZd3dZd2dZd4dZd5dZd4dZd6dZd%dZd7dZd8dZd7dZd9dZ d:dZ!d9d Z"d;d!Z#d1d"Z$d(d#Z%y$)<AssistantEventHandlerzIterable[str]text_deltasc                    d | _         d | _        d | _        d | _        d | _        d | _        d | _        i | _        i | _        d | _	        | j                         | _        | j                         | _        d | _        y 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_snapshots0_AssistantEventHandler__current_message_snapshot__text_deltas__r)   
__stream__	_iterator_AssistantEventHandler__streamselfs    U/var/www/openai/venv/lib/python3.12/site-packages/openai/lib/streaming/_assistants.py__init__zAssistantEventHandler.__init__*   sx    ;?:>+?C%48%3715")-8:!79 :>'//1*=A    c                @    | j                   rt        d      || _         y NzyA single event handler cannot be shared between multiple streams; You will need to construct a new event handler instance)r9   RuntimeErrorr;   streams     r<   _initzAssistantEventHandler._init:   %    == L  r>   c                6    | j                   j                         S r+   )r8   __next__r:   s    r<   rG   zAssistantEventHandler.__next__B   s    ~~&&((r>   c              #  6   K   | j                   D ]  }|  y wr+   r8   r;   items     r<   __iter__zAssistantEventHandler.__iter__E   s     NNDJ #s   c                    | j                   S r+   r,   r:   s    r<   current_eventz#AssistantEventHandler.current_eventI       """r>   c                    | j                   S r+   )r2   r:   s    r<   current_runz!AssistantEventHandler.current_runM       !!!r>   c                N    | j                   sy | j                  | j                      S r+   )r1   r3   r:   s    r<   current_run_step_snapshotz/AssistantEventHandler.current_run_step_snapshotQ   %    ))(()C)CDDr>   c                    | j                   S r+   )r5   r:   s    r<   current_message_snapshotz.AssistantEventHandler.current_message_snapshotX       ...r>   c                R    | j                   r| j                   j                          yyz~
        Close the response and release the connection.

        Automatically called when the context manager exits.
        N)r9   closer:   s    r<   r\   zAssistantEventHandler.close\   s      ==MM! r>   c                    t        |        yz(Waits until the stream has been consumedN)r   r:   s    r<   
until_donez AssistantEventHandler.until_donee   s
    d#r>   c                h    | j                          | 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   rA   r:   s    r<   get_final_runz#AssistantEventHandler.get_final_runi   s-    !!:;;!!!r>   c                    | j                          | j                  st        d      | j                  j                         D cg c]  }| c}S c c}w )EWait for the stream to finish and returns the steps taken in this runNo run steps found)r_   r3   rA   valuesr;   steps     r<   get_final_run_stepsz)AssistantEventHandler.get_final_run_stepsr   sJ    ((344!%!:!:!A!A!CD!C!CDDD   	Ac                    | j                          | j                  st        d      | j                  j                         D cg c]  }| c}S c c}w )JWait for the stream to finish and returns the messages emitted in this runNo messages found)r_   r4   rA   rg   r;   messages     r<   get_final_messagesz(AssistantEventHandler.get_final_messages{   sJ    ''233'+'?'?'F'F'HI'HG'HIIIrk   c              #  $  K   | D ]  }|j                   dk7  r|j                  j                  j                  xs g D ]N  }|j                  dk(  s|j
                  s |j
                  j                  s7|j
                  j                   P  y wNthread.message.deltatexteventdatadeltacontenttyperu   valuer;   rw   content_deltas      r<   r6   z%AssistantEventHandler.__text_deltas__   sy     E{{44!&!1!1!9!9!?R!? %%/M4F4F=K]K]KcKc',,222 "@	 s   ABBB3Bc                     yzFires when the stream has finished.

        This happens if the stream is read to completion
        or if an exception occurs during iteration.
        N r:   s    r<   on_endzAssistantEventHandler.on_end       r>   c                     yz2Callback that is fired for every Server-Sent-EventNr   r;   rw   s     r<   on_eventzAssistantEventHandler.on_event   r   r>   c                     yz1Callback that is fired when a run step is createdNr   r;   run_steps     r<   on_run_step_createdz)AssistantEventHandler.on_run_step_created   r   r>   c                     y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;   ry   snapshots      r<   on_run_step_deltaz'AssistantEventHandler.on_run_step_delta   r   r>   c                     yz3Callback that is fired when a run step is completedNr   r   s     r<   on_run_step_donez&AssistantEventHandler.on_run_step_done   r   r>   c                     yz2Callback that is fired when a tool call is createdNr   r;   	tool_calls     r<   on_tool_call_createdz*AssistantEventHandler.on_tool_call_created   r   r>   c                     yz<Callback that is fired when a tool call delta is encounteredNr   r   s      r<   on_tool_call_deltaz(AssistantEventHandler.on_tool_call_delta   r   r>   c                     yr   r   r   s     r<   on_tool_call_donez'AssistantEventHandler.on_tool_call_done   r   r>   c                     yz4Fired whenever an exception happens during streamingNr   r;   	exceptions     r<   on_exceptionz"AssistantEventHandler.on_exception   r   r>   c                     yzFires if the request times outNr   r:   s    r<   
on_timeoutz AssistantEventHandler.on_timeout   r   r>   c                     yz0Callback that is fired when a message is createdNr   ro   s     r<   on_message_createdz(AssistantEventHandler.on_message_created   r   r>   c                     y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   s      r<   on_message_deltaz&AssistantEventHandler.on_message_delta   r   r>   c                     yz2Callback that is fired when a message is completedNr   ro   s     r<   on_message_donez%AssistantEventHandler.on_message_done   r   r>   c                     yz;Callback that is fired when a text content block is createdNr   r;   ru   s     r<   on_text_createdz%AssistantEventHandler.on_text_created   r   r>   c                     y)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   s      r<   on_text_deltaz#AssistantEventHandler.on_text_delta   r   r>   c                     yz<Callback that is fired when a text content block is finishedNr   r   s     r<   on_text_donez"AssistantEventHandler.on_text_done   r   r>   c                     yz;Callback that is fired when an image file block is finishedNr   r;   
image_files     r<   on_image_file_donez(AssistantEventHandler.on_image_file_done   r   r>   c                |   || _         | j                  |       t        || j                        \  | _        }| j                  -| j                  | j                  | j                  j
                  <   t        || j                         |D ]^  }| j                  J | j                  j                  |j                     }|j                  dk(  sD| j                  |j                         ` |j                  dk(  sK|j                  dk(  s<|j                  dk(  s-|j                  dk(  s|j                  dk(  s|j                  d	k(  rA|j                  | _        | j                   r| j#                  | j                          d | _         y |j                  d
k(  s-|j                  dk(  s|j                  dk(  s|j                  dk(  r|j                  | _        d | _         y |j                  dk(  r#| j%                  |j                         d | _         y |j                  dk(  r| j                  }|J |j                  j&                  }|j                  m|j                  D ]]  }|j                  dk(  r\|j                  rP|j                  |j                     }|j                  dk(  sJ | j)                  |j                  |j                         |j                  | j*                  k7  r| j,                  }| j,                  j                  dk(  r&| j/                  | j,                  j                         n>| j,                  j                  dk(  r%| j1                  | j,                  j2                         |j                  | _        |j                  |j                     | _        |j                  |j                     | _        ` | j5                  |j                  j&                  |       d | _         y |j                  dk(  s|j                  dk(  r|j                  | _        |j                  | j                  |j                  j
                  <   | j*                  x|j                  j                  | j*                     }|j                  dk(  r| j/                  |j                         n*|j                  dk(  r| j1                  |j2                         | j7                  |j                         d | _         y |j                  dk(  r>|j                  j
                  | _        | j;                  |j                         d | _         y |j                  dk(  r#|j                  j
                  | _        d | _         y |j                  dk(  r| j                  |j                  j
                     }	|j                  j&                  }
|
j<                  rq|
j<                  j                  dk(  rW|
j<                  j>                  @|	j<                  j                  dk(  sJ |
j<                  j>                  D ]  }|j                  | j@                  k(  r3| jC                  ||	j<                  j>                  |j                            |j                  | j@                  k7  r{| j                   | j#                  | j                          |j                  | _         |	j<                  j>                  |j                     | _        | jE                  | j                          |	j<                  j>                  |j                     | _         | jG                  |j                  j&                  |	       d | _         y |j                  dk(  s-|j                  dk(  s|j                  dk(  s|j                  dk(  rQ| j                   r| j#                  | j                          | jI                  |j                         d | _        d | _         y |j                  dk(  s|j                  dk(  s|j                  dk(  r		 d | _         y tJ        rtM        |       d | _         y N)rw   rX   )rw   run_step_snapshotsru   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.createdrt   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   rz   indexr{   r   ru   rw   rx   r2   r0   r   r   ry   r   r-   r.   r   r   r   r   r   r1   r   step_detailsr   r/   r   r   r   r   r   r   r;   rw   new_contentr~   blockr   message_deltasnapshot_contentrz   step_snapshotrun_step_deltatool_call_deltas               r<   _emit_sse_eventz%AssistantEventHandler._emit_sse_event   s   #e7G%)%D%D8
4' **6KOKjKjD$$T%D%D%G%GH#88	

 )M22>>>33;;M<O<OPEzzV#$$UZZ0 ) KK11{{44{{22{{11{{::{{55!&D&&&&t'>'>?\ #Y KK//{{66{{55{{11!&DN #M [[44##EJJ/J #I [[2266H'''!JJ,,M$$0%2%:%:M$))V38J8J+3+;+;M<O<O+P(/44>>>**=+=+=?O?T?TU
 %**d.Q.QQ88D#<<AAVK $ 1 1$2O2O2T2T U!%!>!>!C!C|!S $ 7 78U8U8`8` a>K>Q>Q;8@8H8HI\I\8]5 5=4D4D]EXEX4YD1) &;, !!%**"2"2H=P #O [[66%++Id:d.3jjD+6;jjD$$UZZ]]322>**,,T-P-PQ<<6)%%gll3\\\1++G,>,>?  ,x #w [[55).D&$$UZZ0r #q [[99).D&n #m [[33 55ejjmmDM"ZZ--N++"//44D"//::F$1166,FFF'5'B'B'M'MO&,,0M0MM//+)66AA/BWBWX ',,0M0MM22> 2243J3JK8G8M8M52?2L2L2W2WXgXmXm2n/11$2I2IJ /<.H.H.S.STcTiTi.jD+' (N* ""

  . #% KK66{{99{{77{{66&&&&t'>'>?!!%**-)-D& # [[,,?[0[_d_j_jnu_u # U#"r>   c              #    K   | j                   }|st        d      	 |D ]  }| j                  |       |  	 | j                          y # t        j                  t
        j                  f$ r'}| j                          | j                  |        d }~wt        $ r}| j                  |        d }~ww xY w# | j                          w xY wwNzStream has not been started yet)r9   rA   r   httpxTimeoutExceptionasyncioTimeoutErrorr   r   	Exceptionr   r;   rC   rw   excs       r<   r7   z AssistantEventHandler.__stream__  s     @AA	$$U+   KKM &&(<(<= 	OOc" 	c"	 KKMs?   CA C#B3."BB3B..B33B6 6CCNreturnNone)rC   zStream[AssistantStreamEvent]r   r   r   r   )r   zIterator[AssistantStreamEvent]r   zAssistantStreamEvent | Noner   z
Run | Noner   zRunStep | Noner   Message | Noner   r   r   zlist[RunStep]r   zlist[Message])r   zIterator[str]rw   r   r   r   r   r#   r   r   ry   r%   r   r#   r   r   r   r$   r   r   ry   r&   r   r$   r   r   r   r   r   r   rp   r   r   r   ry   r    r   r   r   r   ru   r   r   r   ry   r   r   r   r   r   r   r   r   r   )&__name__
__module____qualname____annotations__r=   rD   rG   rL   propertyrO   rR   rU   rX   r\   r_   rc   rj   rq   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(      s    
B ) # # " " E E / /"$"EJ3A@6BAKKC-?2AJKJO#br>   r(   AssistantEventHandlerT)boundc                  D    e Zd ZdZ	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 ddZy)	AssistantStreamManagerzWrapper 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:
            ...
    ```
    c               .    d | _         || _        || _        y r+   )_AssistantStreamManager__stream&_AssistantStreamManager__event_handler$_AssistantStreamManager__api_requestr;   api_requestevent_handlers      r<   r=   zAssistantStreamManager.__init__  s     >B,(r>   c                    | j                         | _        | j                  j                  | j                         | j                  S r+   )r   r   r   rD   r:   s    r<   	__enter__z AssistantStreamManager.__enter__  s6    **,""4==1###r>   c                R    | j                   | j                   j                          y y r+   )r   r\   r;   exc_typer   exc_tbs       r<   __exit__zAssistantStreamManager.__exit__  s#     ==$MM! %r>   N)r  z*Callable[[], Stream[AssistantStreamEvent]]r  r   r   r   )r   r   r  ztype[BaseException] | Noner   zBaseException | Noner	  zTracebackType | Noner   r   )r   r   r   __doc__r=   r  r
  r   r>   r<   r   r     sX    )?) .	)
 
)$
"," "" %	"
 
"r>   r   c                  J   e Zd ZU ded<   	 d%dZd&dZd'dZd(dZd%dZe	d)d       Z
e	d*d	       Ze	d+d
       Ze	d,d       Zd%dZd-dZd.dZd/dZd0dZd%dZd1dZd2dZd3dZd2dZd4dZd5dZd4dZd6dZd%dZd7dZd8dZd7dZd9dZ d:dZ!d9d Z"d;d!Z#d1d"Z$d(d#Z%y$)<AsyncAssistantEventHandlerzAsyncIterable[str]r)   c                    d | _         d | _        d | _        d | _        d | _        d | _        d | _        i | _        i | _        d | _	        | j                         | _        | j                         | _        d | _        y r+   )r,   r-   r.   r/   r0   0_AsyncAssistantEventHandler__current_run_step_id(_AsyncAssistantEventHandler__current_run/_AsyncAssistantEventHandler__run_step_snapshots._AsyncAssistantEventHandler__message_snapshots5_AsyncAssistantEventHandler__current_message_snapshotr6   r)   r7   r8   #_AsyncAssistantEventHandler__streamr:   s    r<   r=   z#AsyncAssistantEventHandler.__init__  sx    ;?:>+?C%48%3715")-8:!79 :>'//1*BFr>   c                @    | j                   rt        d      || _         y r@   )r  rA   rB   s     r<   rD   z AsyncAssistantEventHandler._init  rE   r>   c                R   K   | j                   j                          d {   S 7 wr+   )r8   	__anext__r:   s    r<   r  z$AsyncAssistantEventHandler.__anext__  s     ^^--////s   '%'c               H   K   | j                   2 3 d {   }| 7 
6 y wr+   rI   rJ   s     r<   	__aiter__z$AsyncAssistantEventHandler.__aiter__  s!     .. 	$J	.s   "  " "c                n   K   | j                   r#| j                   j                          d{    yy7 wr[   )r  r\   r:   s    r<   r\   z AsyncAssistantEventHandler.close  s-      ==--%%''' '   *535c                    | j                   S r+   rN   r:   s    r<   rO   z(AsyncAssistantEventHandler.current_event  rP   r>   c                    | j                   S r+   )r  r:   s    r<   rR   z&AsyncAssistantEventHandler.current_run  rS   r>   c                N    | j                   sy | j                  | j                      S r+   )r  r  r:   s    r<   rU   z4AsyncAssistantEventHandler.current_run_step_snapshot
  rV   r>   c                    | j                   S r+   )r  r:   s    r<   rX   z3AsyncAssistantEventHandler.current_message_snapshot  rY   r>   c                6   K   t        |        d{    y7 wr^   )r   r:   s    r<   r_   z%AsyncAssistantEventHandler.until_done  s     $T***s   c                   K   | j                          d{    | j                  st        d      | j                  S 7 'w)ra   Nrb   )r_   r  rA   r:   s    r<   rc   z(AsyncAssistantEventHandler.get_final_run  s<     oo!!:;;!!! 	 s   A >(A c                   K   | j                          d{    | j                  st        d      | j                  j                         D cg c]  }| c}S 7 Cc c}w w)re   Nrf   )r_   r  rA   rg   rh   s     r<   rj   z.AsyncAssistantEventHandler.get_final_run_steps"  s\     oo((344!%!:!:!A!A!CD!C!CDD 	 
 E!   A!A7A!	AA!A!c                   K   | j                          d{    | j                  st        d      | j                  j                         D cg c]  }| c}S 7 Cc c}w w)rm   Nrn   )r_   r  rA   rg   ro   s     r<   rq   z-AsyncAssistantEventHandler.get_final_messages+  s\     oo''233'+'?'?'F'F'HI'HG'HII 	 
 Jr$  c               6  K   | 2 3 d {   }|j                   dk7  r|j                  j                  j                  xs g D ]O  }|j                  dk(  s|j
                  s |j
                  j                  s7|j
                  j                   Q 7 6 y wrs   rv   r}   s      r<   r6   z*AsyncAssistantEventHandler.__text_deltas__4  s      	3%{{44!&!1!1!9!9!?R!? %%/M4F4F=K]K]KcKc',,222 "@		34s8   BBBBABB"B9BBBc                   K   ywr   r   r:   s    r<   r   z!AsyncAssistantEventHandler.on_end?          c                   K   ywr   r   r   s     r<   r   z#AsyncAssistantEventHandler.on_eventF  r(  r)  c                   K   ywr   r   r   s     r<   r   z.AsyncAssistantEventHandler.on_run_step_createdI  r(  r)  c                   K   ywr   r   r   s      r<   r   z,AsyncAssistantEventHandler.on_run_step_deltaL  r(  r)  c                   K   ywr   r   r   s     r<   r   z+AsyncAssistantEventHandler.on_run_step_doneg  r(  r)  c                   K   ywr   r   r   s     r<   r   z/AsyncAssistantEventHandler.on_tool_call_createdj  r(  r)  c                   K   ywr   r   r   s      r<   r   z-AsyncAssistantEventHandler.on_tool_call_deltam  r(  r)  c                   K   ywr   r   r   s     r<   r   z,AsyncAssistantEventHandler.on_tool_call_donep  r(  r)  c                   K   ywr   r   r   s     r<   r   z'AsyncAssistantEventHandler.on_exceptions  r(  r)  c                   K   ywr   r   r:   s    r<   r   z%AsyncAssistantEventHandler.on_timeoutv  r(  r)  c                   K   ywr   r   ro   s     r<   r   z-AsyncAssistantEventHandler.on_message_createdy  r(  r)  c                   K   ywr   r   r   s      r<   r   z+AsyncAssistantEventHandler.on_message_delta|  r(  r)  c                   K   ywr   r   ro   s     r<   r   z*AsyncAssistantEventHandler.on_message_done  r(  r)  c                   K   ywr   r   r   s     r<   r   z*AsyncAssistantEventHandler.on_text_created  r(  r)  c                   K   yw)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   s      r<   r   z(AsyncAssistantEventHandler.on_text_delta  r(  r)  c                   K   ywr   r   r   s     r<   r   z'AsyncAssistantEventHandler.on_text_done  r(  r)  c                   K   ywr   r   r   s     r<   r   z-AsyncAssistantEventHandler.on_image_file_done  r(  r)  c                  K   || _         | j                  |       d {    t        || j                        \  | _        }| j                  -| j                  | j                  | j                  j
                  <   t        || j                         |D ]f  }| j                  J | j                  j                  |j                     }|j                  dk(  sD| j                  |j                         d {    h |j                  dk(  sK|j                  dk(  s<|j                  dk(  s-|j                  dk(  s|j                  dk(  s|j                  d	k(  rI|j                  | _        | j                   rS| j#                  | j                          d {    d | _         y |j                  d
k(  s-|j                  dk(  s|j                  dk(  s|j                  dk(  r|j                  | _        d | _         y |j                  dk(  r+| j%                  |j                         d {    d | _         y |j                  dk(  r| j                  }|J |j                  j&                  }|j                  |j                  D ]u  }|j                  dk(  rd|j                  rX|j                  |j                     }|j                  dk(  sJ | j)                  |j                  |j                         d {    |j                  | j*                  k7  r| j,                  | j,                  j                  dk(  r.| j/                  | j,                  j                         d {    nF| j,                  j                  dk(  r-| j1                  | j,                  j2                         d {    |j                  | _        |j                  |j                     | _        |j                  |j                     | _        x | j5                  |j                  j&                  |       d {    d | _         y |j                  dk(  s|j                  dk(  r|j                  | _        |j                  | j                  |j                  j
                  <   | j*                  |j                  j                  | j*                     }|j                  dk(  r$| j/                  |j                         d {    n2|j                  dk(  r#| j1                  |j2                         d {    | j7                  |j                         d {    d | _         y |j                  dk(  rF|j                  j
                  | _        | j;                  |j                         d {    d | _         y |j                  dk(  r#|j                  j
                  | _        d | _         y |j                  dk(  r| j                  |j                  j
                     }	|j                  j&                  }
|
j<                  r|
j<                  j                  dk(  ro|
j<                  j>                  X|	j<                  j                  dk(  sJ |
j<                  j>                  D ]#  }|j                  | j@                  k(  r;| jC                  ||	j<                  j>                  |j                            d {    |j                  | j@                  k7  r| j                   #| j#                  | j                          d {    |j                  | _         |	j<                  j>                  |j                     | _        | jE                  | j                          d {    |	j<                  j>                  |j                     | _        & | jG                  |j                  j&                  |	       d {    d | _         y |j                  dk(  s-|j                  dk(  s|j                  dk(  s|j                  dk(  ra| j                   r#| j#                  | j                          d {    | jI                  |j                         d {    d | _        d | _         y |j                  dk(  s|j                  dk(  s|j                  dk(  r		 d | _         y tJ        rtM        |       d | _         y 7 7 7 C7 7 7 7 @7 7 7 7 7 a7 7 7 |7 &7 7 wr   )'r,   r   r   r  r  r   r   r  rz   r   r{   r   ru   rw   rx   r  r0   r   r   ry   r   r-   r.   r   r   r   r   r   r  r   r   r   r/   r   r   r   r   r   r   r   s               r<   r   z*AsyncAssistantEventHandler._emit_sse_event  s    #mmE"""7G%)%D%D8
4' **6KOKjKjD$$T%D%D%G%GH#88	

 )M22>>>33;;M<O<OPEzzV#**5::666 ) KK11{{44{{22{{11{{::{{55!&D&&,,T-D-DEEE\ #Y KK//{{66{{55{{11!&DN #M [[44))%**555J #I [[2266H'''!JJ,,M$$0%2%:%:M$))V38J8J+3+;+;M<O<O+P(/44>>>"001C1CEUEZEZ[[[
 %**d.Q.QQ88D#<<AAVK&*&7&78U8U8Z8Z&[ [ [!%!>!>!C!C|!S&*&=&=d>[>[>f>f&g g g>K>Q>Q;8@8H8HI\I\8]5 5=4D4D]EXEX4YD1) &;, ''

(8(8(CCCP #O [[66%++Id:d.3jjD+6;jjD$$UZZ]]322>**,,T-P-PQ<<6)++GLL999\\\111'2D2DEEE&&uzz222x #w [[55).D&**5::666r #q [[99).D&n #m [[33 55ejjmmDM"ZZ--N++"//44D"//::F$1166,FFF'5'B'B'M'MO&,,0M0MM"55+)66AA/BWBWX   ',,0M0MM22>"&"8"89P9P"QQQ8G8M8M52?2L2L2W2WXgXmXm2n/"778O8OPPP /<.H.H.S.STcTiTi.jD+' (N* ((

    . #% KK66{{99{{77{{66&&,,T-D-DEEE''

333)-D& # [[,,?[0[_d_j_jnu_u # U#"[ 	#& 7 F 6 \ !\ g D :E2 7 R Q
 F3sV  dcB8dd6c7BdcBd"c#Cd0c1A*dcAd"c"#A=d c%!Cd%c(&2dc+"d;c.<Adc1E	dc4Ad"c7#Ad>c:?Adc=A2d
d "d-d.A#dddddd"d%d(d+d.d1d4d7d:d=d ddc                 K   | j                   }|st        d      	 |2 3 d {   }| j                  |       d {    | (7 #7 6 n# t        j                  t
        j                  f$ r9}| j                          d {  7   | j                  |       d {  7    d }~wt        $ r }| j                  |       d {  7    d }~ww xY w	 | j                          d {  7   y # | j                          d {  7   w xY wwr   )r  rA   r   r   r   r   r   r   r   r   r   r   s       r<   r7   z%AsyncAssistantEventHandler.__stream__@  s     @AA	 % e**51111  & &&(<(<= 	//#####C((( 	##C(((	  & ++-$++-s   DA AAAA A	
A A	A A C. #C0B$BB$B B$$C0CCCCC. D'C*(D.D	DD		DNr   )rC   z!AsyncStream[AssistantStreamEvent]r   r   r   )r   z#AsyncIterator[AssistantStreamEvent]r   r   r   r   r   r   r   )r   zAsyncIterator[str]r   r   r   r   r   r   r   r   r   r   r   )&r   r   r   r   r=   rD   r  r  r\   r   rO   rR   rU   rX   r_   rc   rj   rq   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    s    ##
G 0( # # " " E E / /+"EJ3A@6BAKKC-?2AJKJO#b r>   r  AsyncAssistantEventHandlerTc                  D    e Zd ZdZ	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 ddZy)	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:
            ...
    ```
    c               .    d | _         || _        || _        y r+   )$_AsyncAssistantStreamManager__stream+_AsyncAssistantStreamManager__event_handler)_AsyncAssistantStreamManager__api_requestr  s      r<   r=   z$AsyncAssistantStreamManager.__init__d  s     CG,(r>   c                   K   | j                    d {   | _        | j                  j                  | j                         | j                  S 7 :wr+   )rB  r@  rA  rD   r:   s    r<   
__aenter__z&AsyncAssistantStreamManager.__aenter__n  s?     "000""4==1### 1s   AA;Ac                n   K   | j                   #| j                   j                          d {    y y 7 wr+   )r@  r\   r  s       r<   	__aexit__z%AsyncAssistantStreamManager.__aexit__s  s0      ==$--%%''' %'r  N)r  z,Awaitable[AsyncStream[AssistantStreamEvent]]r  r<  r   r   )r   r<  r  )r   r   r   r  r=   rD  rF  r   r>   r<   r>  r>  X  sX    	)A) 3	)
 
)$
(,( "( %	(
 
(r>   r>  c                   | j                   dk(  r$| j                  || j                  j                  <   y | j                   dk(  r| j                  }||j                     }|j                  rnt	        t        dt        |dd            t        dt        |j                  dd                  }t        t        t        t        |            ||j                  <   y )Nr   r   dict[object, object]TFexclude_unsetwarningstype_r|   )	rw   rx   r   ry   accumulate_deltar   r   r#   r   )rw   r   rx   r   mergeds        r<   r   r   }  s    
 {{//,1JJ5::==){{--zz%dgg.::%*xteL *tzzN	F /37NQX`f<g.hx{{+r>   c                *   | j                   dk(  r| j                  g fS g }| j                   dk7  r|g fS |st        d      | j                  }|j                  j                  r|j                  j                  D ]  }	 |j                  |j
                     }t        t        dt        |dd            t        dt        |dd                  }t        t        t        t        t        t              |            |j                  |j
                  <    ||fS # t        $ rr |j                  j                  |j
                  t        t        t        t        t        t              t        |dd                         |j                  |       Y w xY w)	zIReturns a tuple of message snapshot and newly created text message deltasr   rt   z5Encountered a message delta with no previous snapshotrH  TFrI  rL  )rw   rx   rA   ry   rz   r   rN  r   r   r!   r   r   
IndexErrorinsertappend)rw   rX   r   rx   r~   r   rO  s          r<   r   r     s|    {{..zz2~-/K{{,,'++#RSS::Dzz!ZZ//M!0889L9LM *."5uM ."=uU	 IM"""37$I(001D1DE7 0H $[00C  2(0077!''&&"&sN";",]$Y^"_
 ""=12s   <DA7FFc                \   |j                         D ]V  \  }}|| vr|| |<   | |   }||| |<   |dk(  s|dk(  r|| |<   .t        |t              rt        |t              r||z  }nt        |t        t        f      rt        |t        t        f      r||z  }nt        |      rt        |      rt        ||      }nt        |      rt        |      rt        d |D              r|j                  |       |D ]j  }t        |      st        d|       	 |d   }t        |t              st        d|       	 ||   }t        |      st        d      t        ||      ||<   l || |<   Y | S # t        $ r}t        d|       |d }~ww xY w# t        $ r |j                  ||       Y w xY w)Nr   r{   c              3  R   K   | ]  }t        |t        t        t        f       ! y wr+   )
isinstancestrintfloat).0xs     r<   	<genexpr>z#accumulate_delta.<locals>.<genexpr>  s     GY:a#sE!23Ys   %'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)itemsrV  rW  rX  rY  r   rN  r   allextend	TypeErrorKeyErrorrA   rQ  rR  )	accry   keydelta_value	acc_valuedelta_entryr   r   	acc_entrys	            r<   rN  rN    s   !KKM[c>"CHH	"CH '>SF]"CHi%*[#*F$I	C<0ZcSX\5Z$IYGK$8(K@IYGK$8 GYGG  -*{+#&WXcWd$efft'0E "%-#&dejdk$lmmP )% 0I #9-'(9::'7	;'OIe$)  +, Co *r J%   t&)[\g[h'ijpsst " 9$$UK89s*   E-7F-	F
6FF
F+*F+)rw   r   r   zdict[str, RunStep]r   r   )rw   r   rX   r   r   z0tuple[Message | None, list[MessageContentDelta]])rb  rH  ry   rH  r   rH  )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   rN  r   r>   r<   <module>rs     s    "   [ [ [ S S  U U ! % - .	 	 	 V UF FR !!9AVW !"W%;< !"HF  F R &&CKef "('*E"F "(J + 
	:7171 -71 6	71t:r>   