o
    ͩZh1                     @  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                   @  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] | NotGiveninput_toolsIterable[ToolParam] | NotGivenreturnNonec                C  *   || _ |j| _|  | _t||d| _d S N)r+   r-   _raw_streamresponse	_response
__stream__	_iteratorResponseStreamState_stateselfr)   r+   r-    r=   `/var/www/html/lang_env/lib/python3.10/site-packages/openai/lib/streaming/responses/_responses.py__init__      
zResponseStream.__init__ ResponseStreamEvent[TextFormatT]c                 C  s
   | j  S N)r8   __next__r<   r=   r=   r>   rC   +   s   
zResponseStream.__next__*Iterator[ResponseStreamEvent[TextFormatT]]c                 c  s    | j D ]}|V  qd S rB   r8   r<   itemr=   r=   r>   __iter__.   s   
zResponseStream.__iter__r
   c                 C  s   | S rB   r=   rD   r=   r=   r>   	__enter__2   s   zResponseStream.__enter__c                 c  s.    | j D ]}| j|}|D ]}|V  qqd S rB   r4   r:   handle_eventr<   Z	sse_eventZevents_to_fireeventr=   r=   r>   r7   5   s   
zResponseStream.__stream__exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                 C  s   |    d S rB   closer<   rO   rQ   rS   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)r6   rV   rD   r=   r=   r>   rV   C   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<   r5   r=   r=   r>   get_final_responseK   s
   z!ResponseStream.get_final_responsec                 C  s   t |  | S )*Blocks until the stream has been consumed.)r   rD   r=   r=   r>   r^   V   s   zResponseStream.until_doneN)r)   r*   r+   r,   r-   r.   r/   r0   r/   rA   )r/   rE   r/   r
   rO   rP   rQ   rR   rS   rT   r/   r0   r/   r0   r/   rZ   )__name__
__module____qualname__r?   rC   rI   rJ   r7   rX   rV   rb   r^   r=   r=   r=   r>   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   c                C     d | _ || _|| _|| _d S rB   )_ResponseStreamManager__stream#_ResponseStreamManager__api_request#_ResponseStreamManager__text_format#_ResponseStreamManager__input_toolsr<   rn   r+   r-   r=   r=   r>   r?   ]      
zResponseStreamManager.__init__ResponseStream[TextFormatT]c                 C  s"   |   }t|| j| jd| _| jS N)r)   r+   r-   )rr   r(   rs   rt   rq   r<   r)   r=   r=   r>   rJ   i   s   zResponseStreamManager.__enter__rO   rP   rQ   rR   rS   rT   c                 C  s   | j d ur| j   d S d S rB   )rq   rV   rW   r=   r=   r>   rX   t   s   
zResponseStreamManager.__exit__N)rn   ro   r+   r,   r-   r.   r/   r0   )r/   rw   rf   )ri   rj   rk   r?   rJ   rX   r=   r=   r=   r>   rm   \       

rm   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   c                C  r1   r2   r3   r;   r=   r=   r>   r?      r@   zAsyncResponseStream.__init__rA   c                   s   | j  I d H S rB   )r8   	__anext__rD   r=   r=   r>   r}      s   zAsyncResponseStream.__anext__/AsyncIterator[ResponseStreamEvent[TextFormatT]]c                 C s"   | j 2 z	3 d H W }|V  q6 d S rB   rF   rG   r=   r=   r>   	__aiter__   s   zAsyncResponseStream.__aiter__c                 C s8   | j 2 z3 d H W }| j|}|D ]}|V  qq6 d S rB   rK   rM   r=   r=   r>   r7      s   zAsyncResponseStream.__stream__r
   c                   s   | S rB   r=   rD   r=   r=   r>   
__aenter__   s   zAsyncResponseStream.__aenter__rO   rP   rQ   rR   rS   rT   c                   s   |   I d H  d S rB   rU   rW   r=   r=   r>   	__aexit__   s   zAsyncResponseStream.__aexit__c                   s   | j  I dH  dS rY   )r6   acloserD   r=   r=   r>   rV      s   zAsyncResponseStream.closerZ   c                   s(   |   I dH  | jj}|std|S )r[   Nr\   r]   ra   r=   r=   r>   rb      s   z&AsyncResponseStream.get_final_responsec                   s   t | I dH  | S )rc   N)r   rD   r=   r=   r>   r^      s   zAsyncResponseStream.until_doneN)r)   r|   r+   r,   r-   r.   r/   r0   rd   )r/   r~   re   rf   rg   rh   )ri   rj   rk   r?   r}   r   r7   r   r   rV   rb   r^   r=   r=   r=   r>   r{   ~   s    







r{   c                   @  rl   )AsyncResponseStreamManagerrn   .Awaitable[AsyncStream[RawResponseStreamEvent]]r+   r,   r-   r.   r/   r0   c                C  rp   rB   )#_AsyncResponseStreamManager__stream(_AsyncResponseStreamManager__api_request(_AsyncResponseStreamManager__text_format(_AsyncResponseStreamManager__input_toolsru   r=   r=   r>   r?      rv   z#AsyncResponseStreamManager.__init__ AsyncResponseStream[TextFormatT]c                   s(   | j I d H }t|| j| jd| _| jS rx   )r   r{   r   r   r   ry   r=   r=   r>   r      s   z%AsyncResponseStreamManager.__aenter__rO   rP   rQ   rR   rS   rT   c                   s$   | j d ur| j  I d H  d S d S rB   )r   rV   rW   r=   r=   r>   r      s   
z$AsyncResponseStreamManager.__aexit__N)rn   r   r+   r,   r-   r.   r/   r0   )r/   r   rf   )ri   rj   rk   r?   r   r   r=   r=   r=   r>   r      rz   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 )r9   r-   r.   r+   r,   r/   r0   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=   ).0Ztoolr=   r=   r>   
<listcomp>   s    z0ResponseStreamState.__init__.<locals>.<listcomp>)	&_ResponseStreamState__current_snapshotr_   r   _input_tools_text_formatinspectisclassr   Z_rich_text_format)r<   r-   r+   r=   r=   r>   r?      s
   zResponseStreamState.__init__rN   RawResponseStreamEvent&List[ResponseStreamEvent[TextFormatT]]c                 C  s~  |  | | _}g }|jdkr>|j|j }|jdksJ |j|j }|jdks)J |tt	|j|j
|j|jd|jd |S |jdkry|j|j }|jdksPJ |j|j }|jdks]J |ttt |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d|jd
 |S |jdkr| j}|d usJ |ttd|d |S || |S )Nresponse.output_text.deltamessageoutput_text)content_indexdeltaitem_idoutput_indextypesnapshotzresponse.output_text.done)r+   )r   r   r   r   textparsed&response.function_call_arguments.deltafunction_call)r   r   r   r   r   response.completed)r   r5   )accumulate_eventr   r   outputr   contentr   appendr   r   r   r   r   r   r!   r"   r   r   	argumentsr_   r   )r<   rN   r   eventsr   r   r5   r=   r=   r>   rL      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+   r5   r-   )r   _create_initial_responser   rH   r   r   r   r	   r   r'   to_dictr&   r   r   r%   partr   r   r   r   r#   r   r5   r   r_   )r<   rN   r   r   r   r=   r=   r>   r   3  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   r`   r   r   r5   r   )r<   rN   r=   r=   r>   r   ^  s   
z,ResponseStreamState._create_initial_responseN)r-   r.   r+   r,   r/   r0   )rN   r   r/   r   )rN   r   r/   r   )ri   rj   rk   r?   rL   r   r   r=   r=   r=   r>   r9      s
    


H+r9   )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(   rm   r{   r   r9   r=   r=   r=   r>   <module>   s(     >">"