o
    $i.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   )Omitomit)is_givenconsume_sync_iteratorconsume_async_iterator)buildconstruct_type_unchecked)StreamAsyncStream)ParsedResponser      )TextFormatT
parse_textparse_response)	ToolParam)ParsedContentParsedResponseOutputMessageParsedResponseFunctionToolCallc                   @  sf   e Zd Zd(ddZd)ddZd*ddZd+ddZd*ddZd,ddZd-d d!Z	d.d#d$Z
d+d%d&Zd'S )/ResponseStream
raw_streamStream[RawResponseStreamEvent]text_formattype[TextFormatT] | Omitinput_toolsIterable[ToolParam] | Omitstarting_after
int | NonereturnNonec                C  0   || _ |j| _|  | _t||d| _|| _d S N)r+   r-   _raw_streamresponse	_response
__stream__	_iteratorResponseStreamState_state_starting_afterselfr)   r+   r-   r/    r@   i/var/www/html/flask_server/venv/lib/python3.10/site-packages/openai/lib/streaming/responses/_responses.py__init__   
   

zResponseStream.__init__ ResponseStreamEvent[TextFormatT]c                 C  s
   | j  S N)r:   __next__r?   r@   r@   rA   rF   -   s   
zResponseStream.__next__*Iterator[ResponseStreamEvent[TextFormatT]]c                 c  s    | j D ]}|V  qd S rE   r:   r?   itemr@   r@   rA   __iter__0   s   
zResponseStream.__iter__r
   c                 C  s   | S rE   r@   rG   r@   r@   rA   	__enter__4   s   zResponseStream.__enter__c                 c  sD    | j D ]}| j|}|D ]}| jd u s|j| jkr|V  qqd S rE   r6   r<   handle_eventr=   sequence_numberr?   	sse_eventevents_to_fireeventr@   r@   rA   r9   7   s   
zResponseStream.__stream__exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                 C  s   |    d S rE   closer?   rU   rW   rY   r@   r@   rA   __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)r8   r\   rG   r@   r@   rA   r\   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?   r7   r@   r@   rA   get_final_responseN   s
   z!ResponseStream.get_final_responsec                 C  s   t |  | S )*Blocks until the stream has been consumed.)r   rG   r@   r@   rA   rd   Y   s   zResponseStream.until_doneN)
r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r1   rD   )r1   rH   r1   r
   rU   rV   rW   rX   rY   rZ   r1   r2   r1   r2   r1   r`   )__name__
__module____qualname__rB   rF   rL   rM   r9   r^   r\   rh   rd   r@   r@   r@   rA   r(      s    







r(   c                   @  *   e Zd ZdddZdddZdddZdS )ResponseStreamManagerapi_request,Callable[[], Stream[RawResponseStreamEvent]]r+   r,   r-   r.   r/   r0   r1   r2   c                C  "   d | _ || _|| _|| _|| _d S rE   )_ResponseStreamManager__stream#_ResponseStreamManager__api_request#_ResponseStreamManager__text_format#_ResponseStreamManager__input_tools&_ResponseStreamManager__starting_afterr?   rt   r+   r-   r/   r@   r@   rA   rB   `   
   
zResponseStreamManager.__init__ResponseStream[TextFormatT]c                 C  s&   |   }t|| j| j| jd| _| jS N)r)   r+   r-   r/   )rx   r(   ry   rz   r{   rw   r?   r)   r@   r@   rA   rM   n   s   zResponseStreamManager.__enter__rU   rV   rW   rX   rY   rZ   c                 C  s   | j d ur| j   d S d S rE   )rw   r\   r]   r@   r@   rA   r^   z   s   
zResponseStreamManager.__exit__N)
rt   ru   r+   r,   r-   r.   r/   r0   r1   r2   )r1   r~   rl   )ro   rp   rq   rB   rM   r^   r@   r@   r@   rA   rs   _       

rs   c                   @  sf   e Zd Zd(ddZd)ddZd*ddZd*ddZd+ddZd,ddZd-d d!Z	d.d#d$Z
d+d%d&Zd'S )/AsyncResponseStreamr)   #AsyncStream[RawResponseStreamEvent]r+   r,   r-   r.   r/   r0   r1   r2   c                C  r3   r4   r5   r>   r@   r@   rA   rB      rC   zAsyncResponseStream.__init__rD   c                   s   | j  I d H S rE   )r:   	__anext__rG   r@   r@   rA   r      s   zAsyncResponseStream.__anext__/AsyncIterator[ResponseStreamEvent[TextFormatT]]c                 C s"   | j 2 z	3 d H W }|V  q6 d S rE   rI   rJ   r@   r@   rA   	__aiter__   s   zAsyncResponseStream.__aiter__c                 C sN   | j 2 z3 d H W }| j|}|D ]}| jd u s|j| jkr"|V  qq6 d S rE   rN   rQ   r@   r@   rA   r9      s   zAsyncResponseStream.__stream__r
   c                   s   | S rE   r@   rG   r@   r@   rA   
__aenter__   s   zAsyncResponseStream.__aenter__rU   rV   rW   rX   rY   rZ   c                   s   |   I d H  d S rE   r[   r]   r@   r@   rA   	__aexit__   s   zAsyncResponseStream.__aexit__c                   s   | j  I dH  dS r_   )r8   acloserG   r@   r@   rA   r\      s   zAsyncResponseStream.closer`   c                   s(   |   I dH  | jj}|std|S )ra   Nrb   rc   rg   r@   r@   rA   rh      s   z&AsyncResponseStream.get_final_responsec                   s   t | I dH  | S )ri   N)r   rG   r@   r@   rA   rd      s   zAsyncResponseStream.until_doneN)
r)   r   r+   r,   r-   r.   r/   r0   r1   r2   rj   )r1   r   rk   rl   rm   rn   )ro   rp   rq   rB   r   r   r9   r   r   r\   rh   rd   r@   r@   r@   rA   r      s    







r   c                   @  rr   )AsyncResponseStreamManagerrt   .Awaitable[AsyncStream[RawResponseStreamEvent]]r+   r,   r-   r.   r/   r0   r1   r2   c                C  rv   rE   )#_AsyncResponseStreamManager__stream(_AsyncResponseStreamManager__api_request(_AsyncResponseStreamManager__text_format(_AsyncResponseStreamManager__input_tools+_AsyncResponseStreamManager__starting_afterr|   r@   r@   rA   rB      r}   z#AsyncResponseStreamManager.__init__ AsyncResponseStream[TextFormatT]c                   s,   | j I d H }t|| j| j| jd| _| jS r   )r   r   r   r   r   r   r   r@   r@   rA   r      s   z%AsyncResponseStreamManager.__aenter__rU   rV   rW   rX   rY   rZ   c                   s$   | j d ur| j  I d H  d S d S rE   )r   r\   r]   r@   r@   rA   r      s   
z$AsyncResponseStreamManager.__aexit__N)
rt   r   r+   r,   r-   r.   r/   r0   r1   r2   )r1   r   rl   )ro   rp   rq   rB   r   r   r@   r@   r@   rA   r      r   r   c                   @  s4   e Zd ZdddZdddZdddZdddZdS )r;   r-   r.   r+   r,   r1   r2   c                C  sL   d | _ d | _t|rdd |D ng | _|| _t|r!|| _d S t| _d S )Nc                 S  s   g | ]}|qS r@   r@   ).0toolr@   r@   rA   
<listcomp>   s    z0ResponseStreamState.__init__.<locals>.<listcomp>)	&_ResponseStreamState__current_snapshotre   r   _input_tools_text_formatinspectisclassr   _rich_text_format)r?   r-   r+   r@   r@   rA   rB      s
   zResponseStreamState.__init__rT   RawResponseStreamEvent&List[ResponseStreamEvent[TextFormatT]]c                 C  s  |  | | _}g }|jdkrB|j|j }|jdksJ |j|j }|jdks)J |tt	|j|j
|j|j|j|jd|jd	 |S |jdkr|j|j }|jdksTJ |j|j }|jdksaJ |ttt |j|j|j|j|jd|jt|j| jdd	 |S |jdkr|j|j }|jd	ksJ |tt|j
|j|j|jd|jd
 |S |jdkr| j}|d usJ |tt|jd|d |S || |S )Nresponse.output_text.deltamessageoutput_text)content_indexdeltaitem_idoutput_indexrP   logprobstypesnapshotzresponse.output_text.done)r+   )r   r   r   rP   r   r   textparsed&response.function_call_arguments.deltafunction_call)r   r   r   rP   r   r   response.completed)rP   r   r7   )accumulate_eventr   r   outputr   contentr   appendr   r   r   r   rP   r   r   r   r!   r"   r   r   	argumentsre   r   )r?   rT   r   eventsr   r   r7   r@   r@   rA   rO      s   
@
,


z ResponseStreamState.handle_eventr   c                 C  s~  | j }|d u r| |S |jdkrJ|jjdkr)|jtttt	|j
 d |S |jjdkrA|jtttt|j
 d |S |j|j |S |jdkrl|j|j }|jdkrj|jtttt|j
 d |S |jdkr|j|j }|jdkr|j|j }|jdksJ | j|j7  _|S |jdkr|j|j }|jdkr| j|j7  _|S |jd	krt| j|j| jd
| _|S )Nzresponse.output_item.addedr   type_valuer   zresponse.content_part.addedr   r   r   r   )r+   r7   r-   )r   _create_initial_responser   rK   r   r   r   r	   r   r'   to_dictr&   r   r   r%   partr   r   r   r   r#   r   r7   r   re   )r?   rT   r   r   r   r@   r@   rA   r   E  sX   

"






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   rf   r   r   r7   r   )r?   rT   r@   r@   rA   r   p  s   
z,ResponseStreamState._create_initial_responseN)r-   r.   r+   r,   r1   r2   )rT   r   r1   r   )rT   r   r1   r   )ro   rp   rq   rB   rO   r   r   r@   r@   r@   rA   r;      s
    


N+r;   )7
__future__r   r   typesr   typingr   r   r   r   r   r	   typing_extensionsr
   r   r   r   _typesr   _eventsr   r   r   r   r   r   r   _utilsr   r   r   _modelsr   r   
_streamingr   r   types.responsesr   r   _parsing._responsesr!   r"   r#   types.responses.tool_paramr$   types.responses.parsed_responser%   r&   r'   r(   rs   r   r   r;   r@   r@   r@   rA   <module>   s(     A%A%