
    ~ip                       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 n# e$ r d dlZd dlmZ d1dZY nw xY w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# ddl$m%Z% ddlm&Z&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"ee3                   ZL G d# d$ee3                   ZM G d% d&ee3                   ZN G d' d(ee3                   ZO G d) d*ee3                   ZP G d+ d,          ZQd2d0ZRdS )3    )annotationsN)TracebackType)TYPE_CHECKINGAnyGenericCallableIterable	AwaitableAsyncIteratorcast)SelfIteratorassert_never)	from_json)Dictjson_strbytespartial_modeboolreturnDict[str, Any]c                p    	 t          j        |           S # t           j        $ r}|ri cY d }~S |d }~ww xY wN)jsonloadsJSONDecodeError)r   r   es      /root/.openclaw/workspace/.venvs/ark-sdk/lib/python3.11/site-packages/volcenginesdkarkruntime/common/streaming/chat/_completions.pyr   r   "   sU    	:h'''# 	 	 	 						G	s    50505   )ParsedChoiceSnapshotParsedChatCompletionSnapshot#ParsedChatCompletionMessageSnapshot)
ChunkEventContentDoneEventContentDeltaEventLogprobsContentDoneEventChatCompletionStreamEventLogprobsContentDeltaEvent"FunctionToolCallArgumentsDoneEvent#FunctionToolCallArgumentsDeltaEvent   )accumulate_delta   )	NOT_GIVENIncEx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)ArkLengthFinishReasonError!ArkContentFilterFinishReasonError)ChoiceLogprobs)Choice)ResponseFormatc                  r    e Zd ZdZd d
Zd!dZd"dZd#dZd$dZd%dZ	d&dZ
d#dZed'd            Zd"dZdS )(ChatCompletionStreamWrapper 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.
    
raw_streamStream[ChatCompletionChunk]response_format6type[ResponseFormatT] | ResponseFormatParam | NotGiveninput_tools,Iterable[ChatCompletionToolParam] | NotGivenr   Nonec                   || _         |j        | _        |                                 | _        t          ||          | _        d S NrN   rP   _raw_streamresponse	_response
__stream__	_iteratorChatCompletionStreamState_stateselfrL   rN   rP   s       r   __init__zChatCompletionStream.__init__`   F     &#,**/+
 
 
    *ChatCompletionStreamEvent[ResponseFormatT]c                4    | j                                         S r   )r[   __next__r_   s    r   re   zChatCompletionStream.__next__n   s    ~&&(((rb   4Iterator[ChatCompletionStreamEvent[ResponseFormatT]]c              #  &   K   | j         D ]}|V  d S r   r[   r_   items     r   __iter__zChatCompletionStream.__iter__q   s,      N 	 	DJJJJ	 	rb   r   c                    | S r    rf   s    r   	__enter__zChatCompletionStream.__enter__u   s    rb   exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                .    |                                   d S r   closer_   rp   rr   rt   s       r   __exit__zChatCompletionStream.__exit__x   s     	

rb   c                8    | j                                          dS z
        Close the response and release the connection.

        Automatically called if the response body is read to completion.
        N)rY   rx   rf   s    r   rx   zChatCompletionStream.close   s     	rb   %ParsedChatCompletion[ResponseFormatT]c                \    |                                   | 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_doner]   get_final_completionrf   s    r   r   z)ChatCompletionStream.get_final_completion   s(     	{//111rb   c                $    t          |            | S )*Blocks until the stream has been consumed.)r2   rf   s    r   r   zChatCompletionStream.until_done   s    d###rb   r!   c                    | j         j        S r   r]   current_completion_snapshotrf   s    r   r   z0ChatCompletionStream.current_completion_snapshot       {66rb   c              #  d   K   | j         D ]%}| j                            |          }|D ]}|V  &d S r   rW   r]   handle_chunkr_   	sse_eventevents_to_fireevents       r   rZ   zChatCompletionStream.__stream__   sV      ) 	 	I![55i@@N'  	 	rb   N)rL   rM   rN   rO   rP   rQ   r   rR   r   rc   )r   rg   r   r   rp   rq   rr   rs   rt   ru   r   rR   r   rR   r   r}   r   r!   )__name__
__module____qualname____doc__r`   re   rl   ro   rz   rx   r   r   propertyr   rZ   rn   rb   r   rJ   rJ   Y   s         
 
 
 
) ) ) )            	2 	2 	2 	2   
 7 7 7 X7     rb   rJ   c                  *    e Zd ZdZdd
ZddZ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]]rN   rO   rP   rQ   r   rR   c               >    d | _         || _        || _        || _        d S r   )$_ChatCompletionStreamManager__stream)_ChatCompletionStreamManager__api_request-_ChatCompletionStreamManager__response_format)_ChatCompletionStreamManager__input_toolsr_   r   rN   rP   s       r   r`   z$ChatCompletionStreamManager.__init__   s+     GK(!0(rb   %ChatCompletionStream[ResponseFormatT]c                z    |                                  }t          || j        | j                  | _        | j        S N)rL   rN   rP   )r   rJ   r   r   r   r_   rL   s     r   ro   z%ChatCompletionStreamManager.__enter__   sB    ''))
,! 2*
 
 
 }rb   rp   rq   rr   rs   rt   ru   c                J    | j         | j                                          d S d S r   )r   rx   ry   s       r   rz   z$ChatCompletionStreamManager.__exit__   s.     =$M!!!!! %$rb   N)r   r   rN   rO   rP   rQ   r   rR   )r   r   r   )r   r   r   r   r`   ro   rz   rn   rb   r   r   r      sZ         
) 
) 
) 
)	 	 	 	" " " " " "rb   r   c                  r    e Zd ZdZd d
Zd!dZd"dZd#dZd$dZd%dZ	d&dZ
d#dZed'd            Zd"dZdS )(AsyncChatCompletionStreamrK   rL    AsyncStream[ChatCompletionChunk]rN   rO   rP   rQ   r   rR   c                   || _         |j        | _        |                                 | _        t          ||          | _        d S rT   rV   r^   s       r   r`   z"AsyncChatCompletionStream.__init__   ra   rb   rc   c                D   K   | j                                          d {V S r   )r[   	__anext__rf   s    r   r   z#AsyncChatCompletionStream.__anext__   s,      ^--/////////rb   9AsyncIterator[ChatCompletionStreamEvent[ResponseFormatT]]c               4   K   | j         2 3 d {V }|W V  6 d S r   ri   rj   s     r   	__aiter__z#AsyncChatCompletionStream.__aiter__   sH       . 	 	 	 	 	 	 	$JJJJJ )..s   r   c                
   K   | S r   rn   rf   s    r   
__aenter__z$AsyncChatCompletionStream.__aenter__   s      rb   rp   rq   rr   rs   rt   ru   c                >   K   |                                   d {V  d S r   rw   ry   s       r   	__aexit__z#AsyncChatCompletionStream.__aexit__   s.       jjllrb   c                H   K   | j                                          d{V  dS r|   )rY   acloserf   s    r   rx   zAsyncChatCompletionStream.close   s4       n##%%%%%%%%%%%rb   r}   c                l   K   |                                   d{V  | j                                        S )r   Nr   rf   s    r   r   z.AsyncChatCompletionStream.get_final_completion  s>       oo{//111rb   c                4   K   t          |            d{V  | S )r   N)r3   rf   s    r   r   z$AsyncChatCompletionStream.until_done  s+      $T*********rb   r!   c                    | j         j        S r   r   rf   s    r   r   z5AsyncChatCompletionStream.current_completion_snapshot  r   rb   c               r   K   | j         2 3 d {V }| j                            |          }|D ]}|W V  ,6 d S r   r   r   s       r   rZ   z$AsyncChatCompletionStream.__stream__  st        $/ 	 	 	 	 	 	 	)![55i@@N'    0//s   6N)rL   r   rN   rO   rP   rQ   r   rR   r   )r   r   r   r   r   r   r   )r   r   r   r   r`   r   r   r   r   rx   r   r   r   r   rZ   rn   rb   r   r   r      s         
 
 
 
0 0 0 0         & & & &	2 	2 	2 	2   
 7 7 7 X7     rb   r   c                  *    e Zd ZdZdd
ZddZddZdS ) 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]]rN   rO   rP   rQ   r   rR   c               >    d | _         || _        || _        || _        d S r   ))_AsyncChatCompletionStreamManager__stream._AsyncChatCompletionStreamManager__api_request2_AsyncChatCompletionStreamManager__response_format._AsyncChatCompletionStreamManager__input_toolsr   s       r   r`   z)AsyncChatCompletionStreamManager.__init__.  s+     LP(!0(rb   *AsyncChatCompletionStream[ResponseFormatT]c                p   K   | j          d {V }t          || j        | j                  | _        | j        S r   )r   r   r   r   r   r   s     r   r   z+AsyncChatCompletionStreamManager.__aenter__:  sO      -------
1! 2*
 
 
 }rb   rp   rq   rr   rs   rt   ru   c                Z   K   | j         !| j                                          d {V  d S d S r   )r   rx   ry   s       r   r   z*AsyncChatCompletionStreamManager.__aexit__E  sD       =$-%%''''''''''' %$rb   N)r   r   rN   rO   rP   rQ   r   rR   )r   r   r   )r   r   r   r   r`   r   r   rn   rb   r   r   r      sZ         
) 
) 
) 
)	 	 	 	( ( ( ( ( (rb   r   c                  ^    e Zd ZeedddZdd
Zedd            ZddZddZ	ddZ
d dZdS )!r\   )rP   rN   rP   rQ   rN   rO   r   rR   c                   d | _         g | _        t          |          rd |D             ng | _        || _        t          j        |          r|nt          | _        d S )Nc                    g | ]}|S rn   rn   ).0tools     r   
<listcomp>z6ChatCompletionStreamState.__init__.<locals>.<listcomp>\  s    ***dT***rb   )	7_ChatCompletionStreamState__current_completion_snapshot/_ChatCompletionStreamState__choice_event_statesr1   _input_tools_response_formatinspectisclassr.   _rich_response_format)r_   rP   rN   s      r   r`   z"ChatCompletionStreamState.__init__P  sr     SW*=?" /7{.C.CK**k**** 	 !0&??NOOY 	"""rb   r}   c                D    t          | j        | j        | j                  S )zParse the final completion object.

        Note this does not provide any guarantees that the stream has actually finished, you must
        only call this method when the stream is finished.
        )chat_completionrN   rP   )r;   r   r   r   rf   s    r   r   z.ChatCompletionStreamState.get_final_completionc  s-     % < 6)
 
 
 	
rb   r!   c                "    | j         J | j         S r   )r   rf   s    r   r   z5ChatCompletionStreamState.current_completion_snapshoto  s    1===11rb   chunkrA   4Iterable[ChatCompletionStreamEvent[ResponseFormatT]]c                n    |                      |          | _        |                     || j                  S )zTAccumulate a new chunk into the snapshot and returns an iterable of events to yield.)r   completion_snapshot)_accumulate_chunkr   _build_events)r_   r   s     r   r   z&ChatCompletionStreamState.handle_chunkt  s@     .2-C-CE-J-J*!! $ B " 
 
 	
rb   choiceChoiceChunkChoiceEventStatec                    	 | j         |j                 S # t          $ r4 t          | j                  }| j                             |           |cY S w xY w)N)rP   )r   index
IndexErrorr   r   append)r_   r   choice_states      r   _get_choice_statez+ChatCompletionStreamState._get_choice_state  sh    	 -fl;; 	  	  	 +8IJJJL&--l;;;	 s    ;AAc                $   | j         }|t          |          S |j        D ]}	 |j        |j                 }|j        j        pg }t          t          t          t          t          t          dt          |j        t          t          dd t          |j        j        pg           D             d                              t          d|j                                                                                |_        t          |          D ]^\  }}|j        j        pg |         }|j        dk    r$|j        dk    sJ |j        j        |j        _        Ht$          rt'          |           _n# t(          $ ry t          t*          t          t*          i |
                    ddh	          d
|j                                        i                    }|j                            |           Y nw xY w|j        r[|j        |_        t1          | j        | j                  r4|j        dk    rt7          |          |j        dk    rt9                      |j        j        rGt=          | j                  r3tA          tC          |j        j        d          d          |j        _"        |j        j        pg D ]}	|j        j        pg |	j                 }
|
j        dk    rtG          | j        |
j        j$                  }|rh|%                    di           %                    d          r?|
j        j&        r3tA          tC          |
j        j&        d          d          |
j        _        t$          rt'          |
           |j'        {|j'        'tQ          tR          |j'        j                  |_'        |j'        j        rA|j'        j        g |j'        _        |j'        j        *                    |j'        j                   |j+        |_+        |S )Nzdict[object, object]Tc                "    i | ]\  }}|d ddiiS )functionparsed_argumentsTrn   )r   idx_s      r   
<dictcomp>z?ChatCompletionStreamState._accumulate_chunk.<locals>.<dictcomp>  sA     
;. 
;. 
;. 5;C 144>8JDA662
;. 
;. 
;.rb   )parsed
tool_calls)excludetype_valuer   deltaexclude_unsetr   messagerU   length)
completioncontent_filterzutf-8)r   )rP   namestrict)content),r   $_convert_initial_chunk_into_snapshotchoicesr   r   r   r   r"   r6   r,   r4   r/   	enumerater   to_dicttyper   r   r   r   r   r    r   finish_reasonr9   r   r   rD   rE   r   r1   r   r   r   r   r<   r   get	argumentslogprobsr5   rF   extendusage)r_   r   r   r   choice_snapshotprevious_tool_calls
tool_index	prev_toolnew_tooltool_call_chunktool_call_snapshot
input_tools               r   r   z+ChatCompletionStreamState._accumulate_chunk  s    #@&7>>>m y	Y y	YF@D"5"=fl"K&5&=&H&NB#*.7"A.  6 *$3$; -1(-6:
;. 
;. ?H4C4K4V 5:79?2 ?2
;. 
;. 
;.)* )*-& -&!" !" !" 6 !!79M9M9O9OPP9      #+ #+'N .77J-K-K 	0 	0)J	 / 7 B Hb*UH ~33'}
::::%.? !):: ' 0$Y///	0  D D D"&("2$//dWI/VV%v|';';'='=   	# 	# $+22?CCCCCD # B060D-&$($9tGX   	B +x77 9DWXXXX+/????AAA&. 8D<V3W3W 1:/197CC!%2 2 2'.
 $*<#:#@b 5 5&5&=&H&NB#)&" &*j88!7$($5/8=" " "J #&NN:r::>>xHH /7A
 HQ!"4"="GQQ)-H H H*3D # 5 !3444*"+3/4& & 70 0 0O,,
 . Y*3;C?AO4<'08??@WXXX$)K!""s   E
E//B G21G2r   0list[ChatCompletionStreamEvent[ResponseFormatT]]c               4   g }|                     t          t          d||                     |j        D ]}|                     |          }|j        |j                 }|j        j        V|j        j        J|                     t          t          d|j        j        |j        j        |j        j
                             |j        j        r|j        j        }|J |j        j        D ]}||j                 }	|	j        dk    rg|j        J |                     t          t          d|	j        j        |j        |	j        j        |	j        j        |j        j        pd                     t$          rt'          |	           |j        ^|j        W|j        j        rK|j        j        r?|                     t          t*          d	|j        j        |j        j        
                     |                    |                    ||| j                             |S )Nr   )r  r   snapshotzcontent.delta)r  r   r  r   r   z#tool_calls.function.arguments.delta )r  r   r   r  r   arguments_deltazlogprobs.content.delta)r  r   r  )choice_chunkr	  rN   )r   r5   r#   r   r   r   r   r   r   r%   r   r   r  r   r*   r   r  r   r   r   r  r(   r  get_done_eventsr   )
r_   r   r   r   r   r   r	  r   tool_call_delta	tool_calls
             r   r   z'ChatCompletionStreamState._build_events  si    LN*7%BUVVV	
 	
 	
 m ;	 ;	F11&99L19&,GO $0#+3?%%),$l2!0!8!@.6=     |& 0,4?
!---'-|'> 0 0O *?+@ AI ~33.7CCC&--! C%J%.%7%<&5&;*3*<*F1:1C1T0?0H0R 1&#%	 	 	    ' 0$Y///*/G/S?* /G/O "))5!9$*O$;%4%=%E	     !!,,!'$3$($9 -      rb   N)rP   rQ   rN   rO   r   rR   r   r   )r   rA   r   r   )r   r   r   r   r   rA   r   r!   )r   rA   r   r!   r   r  )r   r   r   r.   r`   r   r   r   r   r   r   r   rn   rb   r   r\   r\   O  s         EN 
 
 
 
 
 
&

 

 

 

 2 2 2 X2	
 	
 	
 	
       E# E# E# E#NI I I I I Irb   r\   c                  .    e Zd ZddZddZddZddZdS )r   rP   list[ChatCompletionToolParam]r   rR   c               d    || _         d| _        d| _        t                      | _        d | _        d S )NF)r   _content_done_logprobs_content_doneset_done_tool_calls*_ChoiceEventState__current_tool_call_index)r_   rP   s     r   r`   zChoiceEventState.__init__[  s4    '"&+#*-%%59&&&rb   r  r   r	  r    rN   rO   r  c                  g }|j         r\|                    |                     ||                     | j        +| j        | j        vr|                     ||| j                   |j        j        pg D ]l}| j        |j        k    rN|                    |                     ||                     | j        |                     ||| j                   |j        | _        m|S )N)r	  rN   )r   r	  r  )	r  r  _content_done_eventsr"  r!  _add_tool_done_eventr   r   r   )r_   r  r	  rN   r   r  s         r   r  z ChoiceEventState.get_done_eventsc  s:    LN( 	!!))$3_ *     .:2$:OOO))#1$3#= *    &+6<" 	= 	=I-@@%%--(7 .     1=--'5(7#'#A .    .7_D**rb   c                  g }|j         j        r| j        sd| _        t          ||j                   }||j         _        |                    t          t          dt          t          t                    t          |                             d|j         j        |                     |j        N|j        j        B| j        s;d| _        |                    t          t          d|j        j                             |S )NT)rN   r   z'type[ContentDoneEvent[ResponseFormatT]]zcontent.done)r  r   r   zlogprobs.content.done)r  r   )r   r   r  r:   r   r   r5   r   r   r$   r=   r  r  r&   )r_   r	  rN   r   r   s        r   r$  z%ChoiceEventState._content_done_events  s-    LN"* 	43E 	!%D( /'/  F .4O#*!! AS"2333ODD  (+3;!    $ $0(0</ = +/D'!!,0+4<     rb   r   r  intc          
        || j         v rd S | j                             |           |j        j        J |j        j        |         }|j        dk    rjt          | j        |j                  }||j        _        |	                    t          t          d||j        j        |j        j        |                     d S t          rt          |           d S d S )Nr   )rP   r   z"tool_calls.function.arguments.done)r  r   r   r  r   )r!  addr   r   r  r>   r   r   r   r   r5   r)   r   r  r   r   )r_   r   r	  r  r  r   s         r   r%  z%ChoiceEventState._add_tool_done_event  s
    ...F!!*---&1===,4?
K"j00< -8J8S      <L'8!!6=$+4909C%5  	 	 	 	 	  	-+,,,,,	- 	-rb   N)rP   r  r   rR   )r  r   r	  r    rN   rO   r   r  )r	  r    rN   rO   r   r  )r   r  r	  r    r  r'  r   rR   )r   r   r   r`   r  r$  r%  rn   rb   r   r   r   Z  sf        : : : :+ + + +Z4 4 4 4l$- $- $- $- $- $-rb   r   r   rA   r!   c           	     F   |                                  }t          d|d                   }| j        D ]?}i |                    ddh          d|j                                         i||j        <   @t          t          t          t          dd i|dd	i
                    S )Nzlist[object]r   Tr   r   r   system_fingerprintobjectzchat.completionr   )r  r   r   r4   r   r   r!   r6   )r   datar   r   s       r   r   r     s     ==??D>4	?33G- 
 
!
dWIFF!
v|++--!
 !

 $.$d + 	
 	
 	

 
 
rb   )r   r   r   r   r   r   r  )S
__future__r   r   typesr   typingr   r   r   r   r	   r
   r   r   typing_extensionsr   r   r   jiterr   ImportErrorr   r   _typesr    r!   r"   _eventsr#   r$   r%   r&   r'   r(   r)   r*   _deltasr,   r.   r/   r0   _utilsr1   r2   r3   _compatr4   _modelsr5   r6   _parsingr8   r9   r:   r;   r<   r=   r>   
_streamingr?   r@   
types.chatrA   rB   rC   _exceptionsrD   rE   types.chat.chat_completionrF    types.chat.chat_completion_chunkrG   r   #types.chat.completion_create_paramsrH   ResponseFormatParamrJ   r   r   r   r\   r   r   rn   rb   r   <module>rB     s   # " " " " "       	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ; : : : : : : : : : 
 
 
KKK     	
         
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ' & & & & & 1 1 1 1 1 1 1 1 1 1 N N N N N N N N N N " " " " " " - - - - - - - -                  / . . . . . . .         
        : 9 9 9 9 9 F F F F F F     
G G G G G7?3 G G GT," ," ," ," ,"'/": ," ," ,"^K K K K K 8 K K K\,( ,( ,( ,( ,(w'? ,( ,( ,(^H H H H H 8 H H HVP- P- P- P- P- P- P- P-f     s   7 AA