U
    Zh5                     @  sp  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 d dlmZmZmZ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mZ d	dlmZmZmZ d	dlm Z m!Z! d	dl"m#Z#m$Z$ d	dl%m&Z&mZ' ddl(m)Z)m*Z*m+Z+ d	dl,m-Z- d	dl.m/Z/m0Z0m1Z1 G dd dee) Z2G dd dee) Z3G dd dee) Z4G dd dee) Z5G dd dee) Z6dS )    )annotationsN)TracebackType)AnyListGenericIterable	Awaitablecast)SelfCallableIteratorAsyncIterator   )ParsedResponseSnapshot)ResponseStreamEventResponseTextDoneEventResponseCompletedEventResponseTextDeltaEvent'ResponseFunctionCallArgumentsDeltaEvent   )	NOT_GIVENNotGiven)is_givenconsume_sync_iteratorconsume_async_iterator)buildconstruct_type_unchecked)StreamAsyncStream)ParsedResponser      )TextFormatT
parse_textparse_response)	ToolParam)ParsedContentParsedResponseOutputMessageParsedResponseFunctionToolCallc                   @  s   e Zd ZddddddddZd	d
ddZdd
ddZdd
ddZdd
ddZdddddddZdd
ddZ	dd
ddZ
dd
d d!Zd"S )#ResponseStreamzStream[RawResponseStreamEvent]type[TextFormatT] | NotGivenIterable[ToolParam] | NotGiven
int | NoneNone
raw_streamtext_formatinput_toolsstarting_afterreturnc                C  s0   || _ |j| _|  | _t||d| _|| _d S N)r/   r0   _raw_streamresponse	_response
__stream__	_iteratorResponseStreamState_state_starting_afterselfr.   r/   r0   r1    r?   M/tmp/pip-unpacked-wheel-693nel7n/openai/lib/streaming/responses/_responses.py__init__   s
    
zResponseStream.__init__ ResponseStreamEvent[TextFormatT]r2   c                 C  s
   | j  S N)r9   __next__r>   r?   r?   r@   rE   -   s    zResponseStream.__next__z*Iterator[ResponseStreamEvent[TextFormatT]]c                 c  s   | j D ]
}|V  qd S rD   r9   r>   itemr?   r?   r@   __iter__0   s    
zResponseStream.__iter__r
   c                 C  s   | S rD   r?   rF   r?   r?   r@   	__enter__4   s    zResponseStream.__enter__c                 c  sB   | j D ]6}| j|}|D ] }| jd ks4|j| jkr|V  qqd S rD   r5   r;   handle_eventr<   sequence_numberr>   Z	sse_eventZevents_to_fireeventr?   r?   r@   r8   7   s
    
zResponseStream.__stream__type[BaseException] | NoneBaseException | NoneTracebackType | Noneexc_typeexcexc_tbr2   c                 C  s   |    d S rD   closer>   rU   rV   rW   r?   r?   r@   __exit__>   s    zResponseStream.__exit__c                 C  s   | j   dS z
        Close the response and release the connection.

        Automatically called if the response body is read to completion.
        N)r7   rY   rF   r?   r?   r@   rY   F   s    zResponseStream.closeParsedResponse[TextFormatT]c                 C  s    |    | jj}|std|S )xWaits until the stream has been read to completion and returns
        the accumulated `ParsedResponse` object.
        ,Didn't receive a `response.completed` event.
until_doner;   _completed_responseRuntimeErrorr>   r6   r?   r?   r@   get_final_responseN   s
    z!ResponseStream.get_final_responsec                 C  s   t |  | S )*Blocks until the stream has been consumed.)r   rF   r?   r?   r@   ra   Y   s    zResponseStream.until_doneN)__name__
__module____qualname__rA   rE   rJ   rK   r8   r[   rY   re   ra   r?   r?   r?   r@   r(      s   r(   c                   @  sD   e Zd ZddddddddZd	d
ddZdddddddZdS )ResponseStreamManagerz,Callable[[], Stream[RawResponseStreamEvent]]r)   r*   r+   r,   api_requestr/   r0   r1   r2   c                C  s"   d | _ || _|| _|| _|| _d S rD   )_ResponseStreamManager__stream#_ResponseStreamManager__api_request#_ResponseStreamManager__text_format#_ResponseStreamManager__input_tools&_ResponseStreamManager__starting_afterr>   rl   r/   r0   r1   r?   r?   r@   rA   `   s
    zResponseStreamManager.__init__zResponseStream[TextFormatT]rC   c                 C  s&   |   }t|| j| j| jd| _| jS N)r.   r/   r0   r1   )rn   r(   ro   rp   rq   rm   r>   r.   r?   r?   r@   rK   n   s    zResponseStreamManager.__enter__rQ   rR   rS   rT   c                 C  s   | j d k	r| j   d S rD   )rm   rY   rZ   r?   r?   r@   r[   z   s    
zResponseStreamManager.__exit__N)rg   rh   ri   rA   rK   r[   r?   r?   r?   r@   rj   _   s   rj   c                   @  s   e Zd ZddddddddZd	d
ddZdd
ddZdd
ddZdd
ddZdddddddZdd
ddZ	dd
ddZ
dd
d d!Zd"S )#AsyncResponseStreamz#AsyncStream[RawResponseStreamEvent]r)   r*   r+   r,   r-   c                C  s0   || _ |j| _|  | _t||d| _|| _d S r3   r4   r=   r?   r?   r@   rA      s
    
zAsyncResponseStream.__init__rB   rC   c                   s   | j  I d H S rD   )r9   	__anext__rF   r?   r?   r@   rv      s    zAsyncResponseStream.__anext__z/AsyncIterator[ResponseStreamEvent[TextFormatT]]c                 C s    | j 2 z3 d H W }|V  q6 d S rD   rG   rH   r?   r?   r@   	__aiter__   s    zAsyncResponseStream.__aiter__c                 C sL   | j 2 z>3 d H W }| j|}|D ] }| jd ks<|j| jkr"|V  q"q6 d S rD   rL   rO   r?   r?   r@   r8      s
    zAsyncResponseStream.__stream__r
   c                   s   | S rD   r?   rF   r?   r?   r@   
__aenter__   s    zAsyncResponseStream.__aenter__rQ   rR   rS   rT   c                   s   |   I d H  d S rD   rX   rZ   r?   r?   r@   	__aexit__   s    zAsyncResponseStream.__aexit__c                   s   | j  I dH  dS r\   )r7   acloserF   r?   r?   r@   rY      s    zAsyncResponseStream.closer]   c                   s&   |   I dH  | jj}|s"td|S )r^   Nr_   r`   rd   r?   r?   r@   re      s
    z&AsyncResponseStream.get_final_responsec                   s   t | I dH  | S )rf   N)r   rF   r?   r?   r@   ra      s    zAsyncResponseStream.until_doneN)rg   rh   ri   rA   rv   rw   r8   rx   ry   rY   re   ra   r?   r?   r?   r@   ru      s   ru   c                   @  sD   e Zd ZddddddddZd	d
ddZdddddddZdS )AsyncResponseStreamManagerz.Awaitable[AsyncStream[RawResponseStreamEvent]]r)   r*   r+   r,   rk   c                C  s"   d | _ || _|| _|| _|| _d S rD   )#_AsyncResponseStreamManager__stream(_AsyncResponseStreamManager__api_request(_AsyncResponseStreamManager__text_format(_AsyncResponseStreamManager__input_tools+_AsyncResponseStreamManager__starting_afterrr   r?   r?   r@   rA      s
    z#AsyncResponseStreamManager.__init__z AsyncResponseStream[TextFormatT]rC   c                   s*   | j I d H }t|| j| j| jd| _| jS rs   )r}   ru   r~   r   r   r|   rt   r?   r?   r@   rx      s    z%AsyncResponseStreamManager.__aenter__rQ   rR   rS   rT   c                   s   | j d k	r| j  I d H  d S rD   )r|   rY   rZ   r?   r?   r@   ry      s    
z$AsyncResponseStreamManager.__aexit__N)rg   rh   ri   rA   rx   ry   r?   r?   r?   r@   r{      s   r{   c                   @  sN   e Zd ZddddddZddd	d
dZddd	ddZddd	ddZdS )r:   r*   r)   r,   )r0   r/   r2   c                C  sF   d | _ d | _t|r"dd |D ng | _|| _t|r<|nt| _d S )Nc                 S  s   g | ]}|qS r?   r?   ).0Ztoolr?   r?   r@   
<listcomp>   s     z0ResponseStreamState.__init__.<locals>.<listcomp>)	&_ResponseStreamState__current_snapshotrb   r   _input_tools_text_formatinspectisclassr   Z_rich_text_format)r>   r0   r/   r?   r?   r@   rA      s
    zResponseStreamState.__init__RawResponseStreamEventz&List[ResponseStreamEvent[TextFormatT]])rP   r2   c                 C  s  |  | | _}g }|jdkr|j|j }|jdks8t|j|j }|jdksRt|t	t
|j|j|j|j|jd|jd n|jdkr|j|j }|jdkst|j|j }|jdkst|t	tt |j|j|j|jd|jt|j| jdd n|jdkrH|j|j }|jd	ks t|t	t|j|j|j|jd|jd
 nD|jdkr| j}|d k	sht|t	t|jd|d n
|| |S )Nresponse.output_text.deltamessageoutput_text)content_indexdeltaitem_idoutput_indexrN   typesnapshotzresponse.output_text.done)r/   )r   r   r   rN   r   textparsed&response.function_call_arguments.deltafunction_call)r   r   r   rN   r   r   response.completed)rN   r   r6   )accumulate_eventr   r   outputr   AssertionErrorcontentr   appendr   r   r   r   rN   r   r   r!   r"   r   r   	argumentsrb   r   )r>   rP   r   eventsr   r   r6   r?   r?   r@   rM      s~    

	
z ResponseStreamState.handle_eventr   c                 C  s~  | j }|d kr| |S |jdkr|jjdkrP|jtttt	|j
 d n<|jjdkr~|jtttt|j
 d n|j|j n|jdkr|j|j }|jdkr|jtttt|j
 d n|jdkr"|j|j }|jdkrz|j|j }|jdkst| j|j7  _nX|jdkrX|j|j }|jdkrz| j|j7  _n"|jd	krzt| j|j| jd
| _|S )Nzresponse.output_item.addedr   type_valuer   zresponse.content_part.addedr   r   r   r   )r/   r6   r0   )r   _create_initial_responser   rI   r   r   r   r	   r   r'   to_dictr&   r   r   r%   partr   r   r   r   r   r#   r   r6   r   rb   )r>   rP   r   r   r   r?   r?   r@   r   C  sN    

 

z$ResponseStreamState.accumulate_eventc                 C  s.   |j dkrtd|j  dtt|j dS )Nzresponse.createdz5Expected to have received `response.created` before ``r   )r   rc   r   r   r6   r   )r>   rP   r?   r?   r@   r   n  s    
z,ResponseStreamState._create_initial_responseN)rg   rh   ri   rA   rM   r   r   r?   r?   r?   r@   r:      s   L+r:   )7
__future__r   r   typesr   typingr   r   r   r   r   r	   Ztyping_extensionsr
   r   r   r   _typesr   Z_eventsr   r   r   r   r   r   r   _utilsr   r   r   Z_modelsr   r   Z
_streamingr   r   Ztypes.responsesr   r   Z_parsing._responsesr!   r"   r#   Ztypes.responses.tool_paramr$   Ztypes.responses.parsed_responser%   r&   r'   r(   rj   ru   r{   r:   r?   r?   r?   r@   <module>   s&    A%A%