o
    @Bio                     @  s  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 d dlmZ ddlmZmZmZ dd	lmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ d
dl%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/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z< ddl=m>Z>m?Z?m@Z@ ddlAmBZBmCZC ddlDmEZE ddlFmGZH ddlImJZK G dd dee3 ZLG dd dee3 ZMG dd dee3 ZNG dd  d ee3 ZOG d!d" d"ee3 ZPG d#d$ d$ZQd+d)d*ZRdS ),    )annotationsN)TracebackType)TYPE_CHECKINGAnyGenericCallableIterable	AwaitableAsyncIteratorcast)SelfIteratorassert_never)	from_json   )ParsedChoiceSnapshotParsedChatCompletionSnapshot#ParsedChatCompletionMessageSnapshot)
ChunkEventContentDoneEventRefusalDoneEventContentDeltaEventRefusalDeltaEventLogprobsContentDoneEventLogprobsRefusalDoneEventChatCompletionStreamEventLogprobsContentDeltaEventLogprobsRefusalDeltaEvent"FunctionToolCallArgumentsDoneEvent#FunctionToolCallArgumentsDeltaEvent   )accumulate_delta   )	NOT_GIVENNotGiven)is_givenconsume_sync_iteratorconsume_async_iterator)
model_dump)buildconstruct_type   )ResponseFormatThas_parseable_inputmaybe_parse_contentparse_chat_completionget_input_tool_by_namesolve_response_format_tparse_function_tool_arguments)StreamAsyncStream)ChatCompletionChunkParsedChatCompletionChatCompletionToolParam)LengthFinishReasonErrorContentFilterFinishReasonError)ChoiceLogprobs)Choice)ResponseFormatc                   @  x   e Zd 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	d0d d!Z
d-d"d#Zed1d%d&Zd,d'd(Zd)S )2ChatCompletionStream+  Wrapper over the Chat Completions streaming API that adds helpful
    events such as `content.done`, supports automatically parsing
    responses & tool calls and accumulates a `ChatCompletion` object
    from each individual chunk.

    https://platform.openai.com/docs/api-reference/streaming
    
raw_streamStream[ChatCompletionChunk]response_format6type[ResponseFormatT] | ResponseFormatParam | NotGiveninput_tools,Iterable[ChatCompletionToolParam] | NotGivenreturnNonec                C  *   || _ |j| _|  | _t||d| _d S NrB   rD   _raw_streamresponse	_response
__stream__	_iteratorChatCompletionStreamState_stateselfr@   rB   rD    rU   f/var/www/html/Trade-python/venv/lib/python3.10/site-packages/openai/lib/streaming/chat/_completions.py__init__8      
zChatCompletionStream.__init__*ChatCompletionStreamEvent[ResponseFormatT]c                 C  s
   | j  S N)rP   __next__rT   rU   rU   rV   r[   D   s   
zChatCompletionStream.__next__4Iterator[ChatCompletionStreamEvent[ResponseFormatT]]c                 c  s    | j D ]}|V  qd S rZ   rP   rT   itemrU   rU   rV   __iter__G   s   
zChatCompletionStream.__iter__r   c                 C  s   | S rZ   rU   r\   rU   rU   rV   	__enter__K   s   zChatCompletionStream.__enter__exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                 C  s   |    d S rZ   closerT   rc   re   rg   rU   rU   rV   __exit__N   s   zChatCompletionStream.__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)rN   rj   r\   rU   rU   rV   rj   V   s   zChatCompletionStream.close%ParsedChatCompletion[ResponseFormatT]c                 C  s   |    | j S )V  Waits until the stream has been read to completion and returns
        the accumulated `ParsedChatCompletion` object.

        If you passed a class type to `.stream()`, the `completion.choices[0].message.parsed`
        property will be the content deserialised into that class, if there was any content returned
        by the API.
        
until_donerR   get_final_completionr\   rU   rU   rV   rr   ^   s   
z)ChatCompletionStream.get_final_completionc                 C  s   t |  | S )*Blocks until the stream has been consumed.)r&   r\   rU   rU   rV   rq   i   s   zChatCompletionStream.until_doner   c                 C     | j jS rZ   rR   current_completion_snapshotr\   rU   rU   rV   rv   n      z0ChatCompletionStream.current_completion_snapshotc                 c  s.    | j D ]}| j|}|D ]}|V  qqd S rZ   rL   rR   handle_chunkrT   	sse_eventevents_to_fireeventrU   rU   rV   rO   r   s   
zChatCompletionStream.__stream__N)r@   rA   rB   rC   rD   rE   rF   rG   rF   rY   )rF   r]   rF   r   rc   rd   re   rf   rg   rh   rF   rG   rF   rG   rF   rn   rF   r   )__name__
__module____qualname____doc__rW   r[   ra   rb   rl   rj   rr   rq   propertyrv   rO   rU   rU   rU   rV   r>   /       







r>   c                   @  .   e Zd ZdZdd
dZdddZdddZdS )ChatCompletionStreamManageraK  Context manager over a `ChatCompletionStream` that is returned by `.stream()`.

    This context manager ensures the response cannot be leaked if you don't read
    the stream to completion.

    Usage:
    ```py
    with client.beta.chat.completions.stream(...) as stream:
        for event in stream:
            ...
    ```
    api_request)Callable[[], Stream[ChatCompletionChunk]]rB   rC   rD   rE   rF   rG   c                C     d | _ || _|| _|| _d S rZ   )$_ChatCompletionStreamManager__stream)_ChatCompletionStreamManager__api_request-_ChatCompletionStreamManager__response_format)_ChatCompletionStreamManager__input_toolsrT   r   rB   rD   rU   rU   rV   rW         
z$ChatCompletionStreamManager.__init__%ChatCompletionStream[ResponseFormatT]c                 C  s"   |   }t|| j| jd| _| jS N)r@   rB   rD   )r   r>   r   r   r   rT   r@   rU   rU   rV   rb      s   z%ChatCompletionStreamManager.__enter__rc   rd   re   rf   rg   rh   c                 C  s   | j d ur| j   d S d S rZ   )r   rj   rk   rU   rU   rV   rl      s   
z$ChatCompletionStreamManager.__exit__N)r   r   rB   rC   rD   rE   rF   rG   )rF   r   r   )r   r   r   r   rW   rb   rl   rU   rU   rU   rV   r   y   
    

r   c                   @  r=   )2AsyncChatCompletionStreamr?   r@    AsyncStream[ChatCompletionChunk]rB   rC   rD   rE   rF   rG   c                C  rH   rI   rK   rS   rU   rU   rV   rW      rX   z"AsyncChatCompletionStream.__init__rY   c                   s   | j  I d H S rZ   )rP   	__anext__r\   rU   rU   rV   r      s   z#AsyncChatCompletionStream.__anext__9AsyncIterator[ChatCompletionStreamEvent[ResponseFormatT]]c                 C s"   | j 2 z	3 d H W }|V  q6 d S rZ   r^   r_   rU   rU   rV   	__aiter__   s   z#AsyncChatCompletionStream.__aiter__r   c                   s   | S rZ   rU   r\   rU   rU   rV   
__aenter__   s   z$AsyncChatCompletionStream.__aenter__rc   rd   re   rf   rg   rh   c                   s   |   I d H  d S rZ   ri   rk   rU   rU   rV   	__aexit__   s   z#AsyncChatCompletionStream.__aexit__c                   s   | j  I dH  dS rm   )rN   acloser\   rU   rU   rV   rj      s   zAsyncChatCompletionStream.closern   c                   s   |   I dH  | j S )ro   Nrp   r\   rU   rU   rV   rr      s   
z.AsyncChatCompletionStream.get_final_completionc                   s   t | I dH  | S )rs   N)r'   r\   rU   rU   rV   rq      s   z$AsyncChatCompletionStream.until_doner   c                 C  rt   rZ   ru   r\   rU   rU   rV   rv      rw   z5AsyncChatCompletionStream.current_completion_snapshotc                 C s8   | j 2 z3 d H W }| j|}|D ]}|V  qq6 d S rZ   rx   rz   rU   rU   rV   rO      s   z$AsyncChatCompletionStream.__stream__N)r@   r   rB   rC   rD   rE   rF   rG   r~   )rF   r   r   r   r   r   r   )r   r   r   r   rW   r   r   r   r   rj   rr   rq   r   rv   rO   rU   rU   rU   rV   r      r   r   c                   @  r   ) AsyncChatCompletionStreamManageraV  Context manager over a `AsyncChatCompletionStream` that is returned by `.stream()`.

    This context manager ensures the response cannot be leaked if you don't read
    the stream to completion.

    Usage:
    ```py
    async with client.beta.chat.completions.stream(...) as stream:
        for event in stream:
            ...
    ```
    r   +Awaitable[AsyncStream[ChatCompletionChunk]]rB   rC   rD   rE   rF   rG   c                C  r   rZ   ))_AsyncChatCompletionStreamManager__stream._AsyncChatCompletionStreamManager__api_request2_AsyncChatCompletionStreamManager__response_format._AsyncChatCompletionStreamManager__input_toolsr   rU   rU   rV   rW      r   z)AsyncChatCompletionStreamManager.__init__*AsyncChatCompletionStream[ResponseFormatT]c                   s(   | j I d H }t|| j| jd| _| jS r   )r   r   r   r   r   r   rU   rU   rV   r     s   z+AsyncChatCompletionStreamManager.__aenter__rc   rd   re   rf   rg   rh   c                   s$   | j d ur| j  I d H  d S d S rZ   )r   rj   rk   rU   rU   rV   r     s   
z*AsyncChatCompletionStreamManager.__aexit__N)r   r   rB   rC   rD   rE   rF   rG   )rF   r   r   )r   r   r   r   rW   r   r   rU   rU   rU   rV   r      r   r   c                   @  sV   e Zd ZdddZd d
dZed!ddZd"ddZd#ddZd$ddZ	d%ddZ
dS )&rQ   rD   rE   rB   rC   rF   rG   c                C  sL   d | _ g | _t|rdd |D ng | _|| _t|r!|| _d S t| _d S )Nc                 S  s   g | ]}|qS rU   rU   ).0toolrU   rU   rV   
<listcomp>+  s    z6ChatCompletionStreamState.__init__.<locals>.<listcomp>)	7_ChatCompletionStreamState__current_completion_snapshot/_ChatCompletionStreamState__choice_event_statesr%   _input_tools_response_formatinspectisclassr#   _rich_response_format)rT   rD   rB   rU   rU   rV   rW   "  s
   z"ChatCompletionStreamState.__init__rn   c                 C  s   t | j| j| jdS )N)chat_completionrB   rD   )r/   rv   r   r   r\   rU   rU   rV   rr   /  s
   z.ChatCompletionStreamState.get_final_completionr   c                 C  s   | j d usJ | j S rZ   )r   r\   rU   rU   rV   rv   6  s   z5ChatCompletionStreamState.current_completion_snapshotchunkr5   0list[ChatCompletionStreamEvent[ResponseFormatT]]c                 C  s   |  || _| j|| jdS )zOAccumulate a new chunk into the snapshot and returns a list of events to yield.)r   completion_snapshot)_accumulate_chunkr   _build_events)rT   r   rU   rU   rV   ry   ;  s
   z&ChatCompletionStreamState.handle_chunkchoiceChoiceChunkChoiceEventStatec                 C  s>   z| j |j W S  ty   t| jd}| j | | Y S w )N)rD   )r   index
IndexErrorr   r   append)rT   r   choice_staterU   rU   rV   _get_choice_stateD  s   z+ChatCompletionStreamState._get_choice_statec                 C  s  | j }|d u rt|S |jD ]W}za|j|j }|jjpg }ttttt	tdt
|jddd t|jjp2g D ddtd|j d|_t|D ]%\}}|jjpTg | }|jdkrj|jdkscJ |jj|j_qKtrpt| qKW n' ty   tttti |j
dd	hd
d|j id}|j| Y nw |jr|j|_t| j| jdr|jdkrt |jdkrt |jjr|jjst| jrt t!|jjddd|j_"|jjpg D ]A}	|jjpg |	j }
|
jdkrt#| j|
jj$d}|r|%di %dr|
jj&rt t!|
jj&ddd|
j_qtrt|
 q|j'd urf|j'd u r4t(t)|j'j|j'jd|_'q|j'jrM|j'jd u rDg |j'_|j'j*|j'j |j'jrf|j'jd u r]g |j'_|j'j*|j'j q|j+|_+|j,|_,|S )Nzdict[object, object]Tc                 S  s   i | ]\}}|d ddiiqS )functionparsed_argumentsTrU   )r   idx_rU   rU   rV   
<dictcomp>e  s    z?ChatCompletionStreamState._accumulate_chunk.<locals>.<dictcomp>)parsed
tool_calls)excludetype_valuer   deltaexclude_unsetr   messagerJ   lengthcontent_filterzutf-8)partial_mode)rD   namestrict)contentrefusal)-r   $_convert_initial_chunk_into_snapshotchoicesr   r   r   r   r   r*   r!   r(   	enumerater   to_dicttyper   r   r   r   r   r   r   finish_reasonr-   r   r   r8   r9   r   r   r%   r   r   bytesr   r0   r   get	argumentslogprobsr)   r:   extendusagesystem_fingerprint)rT   r   r   r   choice_snapshotprevious_tool_calls
tool_index	prev_toolnew_tooltool_call_chunktool_call_snapshot
input_toolrU   rU   rV   r   L  s   










z+ChatCompletionStreamState._accumulate_chunkr   c          
      C  s  g }| ttd||d |jD ]}| |}|j|j }|jjd ur;|jjd ur;| tt	d|jj|jj|jj
d |jjd urV|jjd urV| ttd|jj|jjd |jjr|jj}|d usdJ |jjD ]3}||j }	|	jdkr|jd us{J | ttd|	jj|j|	jj|	jj|jjpd	d
 qhtrt|	 qh|jd ur|jd ur|jjr|jjr| ttd|jj|jjd |jjr|jjr| ttd|jj|jjd ||j||| jd q|S )Nr   )r   r   snapshotzcontent.delta)r   r   r   r   zrefusal.delta)r   r   r   r   z#tool_calls.function.arguments.delta )r   r   r   r   r   arguments_deltazlogprobs.content.delta)r   r   r   zlogprobs.refusal.delta)r   r   r   )choice_chunkr   rB   )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   get_done_eventsr   )
rT   r   r   r|   r   r   r   r   tool_call_delta	tool_callrU   rU   rV   r     s   


	


		z'ChatCompletionStreamState._build_eventsN)rD   rE   rB   rC   rF   rG   r   r   )r   r5   rF   r   )r   r   rF   r   r   r5   rF   r   )r   r5   r   r   rF   r   )r   r   r   rW   rr   r   rv   ry   r   r   r   rU   rU   rU   rV   rQ   !  s    



	
}rQ   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   rD   list[ChatCompletionToolParam]rF   rG   c                C  s0   || _ d| _d| _d| _d| _t | _d | _d S )NF)r   _content_done_refusal_done_logprobs_content_done_logprobs_refusal_doneset_done_tool_calls*_ChoiceEventState__current_tool_call_index)rT   rD   rU   rU   rV   rW   &  s   
zChoiceEventState.__init__r   r   r   r   rB   rC   r   c                C  s   g }|j r#|| j||d | jd ur#| j| jvr#| j||| jd |jjp(g D ]$}| j|jkrI|| j||d | jd urI| j||| jd |j| _q)|S )N)r   rB   )r|   r   r   )	r   r   _content_done_eventsr   r   _add_tool_done_eventr   r   r   )rT   r   r   rB   r|   r   rU   rU   rV   r   0  s2   


z ChoiceEventState.get_done_eventsc                C  s  g }|j jr.| js.d| _t||j d}||j _|ttdttt	t
| d|j j|d |j jd urF| jsFd| _|ttd|j jd |jd urc|jjd urc| jscd| _|ttd|jjd	 |jd ur|jjd ur| jsd| _|ttd
|jjd |S )NT)rB   r   z'type[ContentDoneEvent[ResponseFormatT]]zcontent.done)r   r   r   zrefusal.done)r   r   zlogprobs.content.done)r   r   zlogprobs.refusal.done)r   r   r   r.   r   r   r)   r   r   r   r1   r   r   r   r   r   r   r   r   )rT   r   rB   r|   r   rU   rU   rV   r   Y  sR   

z%ChoiceEventState._content_done_eventsr|   r   intc             
   C  s   || j v rd S | j | |jjd usJ |jj| }|jdkr?t| j|jd}||j_|	t
td||jj|jj|d d S trGt| d S d S )Nr   )rD   r   z"tool_calls.function.arguments.done)r   r   r   r   r   )r   addr   r   r   r2   r   r   r   r   r)   r   r   r   r   r   )rT   r|   r   r   r   r   rU   rU   rV   r     s.   


z%ChoiceEventState._add_tool_done_eventN)rD   r   rF   rG   )r   r   r   r   rB   rC   rF   r   )r   r   rB   rC   rF   r   )r|   r   r   r   r   r   rF   rG   )r   r   r   rW   r   r   r   rU   rU   rU   rV   r   %  s
    



)@r   r   r5   rF   r   c                 C  sl   |   }td|d }| jD ]}i |jddhdd|j  i||j< qttttdd i|dd	id
S )Nzlist[object]r   Tr   r   r   r   objectzchat.completionr   )r   r   r   r(   r   r   r   r*   )r   datar   r   rU   rU   rV   r     s(   

r   r   )S
__future__r   r   typesr   typingr   r   r   r   r   r	   r
   r   typing_extensionsr   r   r   jiterr   _typesr   r   r   _eventsr   r   r   r   r   r   r   r   r   r   r   r   _deltasr!   r#   r$   _utilsr%   r&   r'   _compatr(   _modelsr)   r*   _parsingr,   r-   r.   r/   r0   r1   r2   
_streamingr3   r4   
types.chatr5   r6   r7   _exceptionsr8   r9   types.chat.chat_completionr:    types.chat.chat_completion_chunkr;   r   #types.chat.completion_create_paramsr<   ResponseFormatParamr>   r   r   r   rQ   r   r   rU   rU   rU   rV   <module>   s<    (8$	J/J/   