o
    ưi                     @   sR   d Z ddlZddlZddlmZmZ ddlmZmZ ddl	m
Z
 G dd dZdS )z%
GigaChat Streaming Response Handler
    N)AnyOptional)ChatCompletionToolCallChunk#ChatCompletionToolCallFunctionChunk)GenericStreamingChunkc                   @   sl   e Zd ZdZ	ddededee fddZded	e	fd
dZ
dd Zd	e	fddZdd Zd	e	fddZdS )GigaChatModelResponseIteratorz*Iterator for GigaChat streaming responses.Fstreaming_responsesync_stream	json_modec                 C   s   || _ | j | _|| _d S N)r   response_iteratorr
   )selfr   r	   r
    r   [/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/gigachat/chat/streaming.py__init__   s   
z&GigaChatModelResponseIterator.__init__chunkreturnc              
   C   s  d}d}d}d}| dg }|stdddddddS |d }| di }| d}| d	dp0d}|d
krl| d
rl|d
 }	|	 di }
t|
trPtj|
dd}
tdt j	dd  dt
|	 dd|
ddd}d}|durrd}t||||pydd| dddS )z-Parse a single streaming chunk from GigaChat. NFchoicesr   texttool_useis_finishedfinish_reasonusageindexdeltar   contentZfunction_call	arguments)ensure_asciiZcall_   functionname)r"   r   )idtyper!   r   Z
tool_callsTr   )getr   
isinstancedictjsondumpsr   uuiduuid4hexr   )r   r   r   r   r   r   r   choicer   	func_callargsr   r   r   chunk_parser   sV   	


	
z*GigaChatModelResponseIterator.chunk_parserc                 C      | S r   r   r   r   r   r   __iter__R      z&GigaChatModelResponseIterator.__iter__c                 C   s   z@| j  }t|tr;|dr|dd  }| dkrtzt|}W n tj	y:   t
dd ddd dd Y W S w | |W S  tyH    w Nzdata:    z[DONE]r   Fr   r   )r   __next__r&   str
startswithstripStopIterationr(   loadsJSONDecodeErrorr   r0   r   r   r   r   r   r7   U   s.   


	z&GigaChatModelResponseIterator.__next__c                 C   r1   r   r   r2   r   r   r   	__aiter__m   r4   z'GigaChatModelResponseIterator.__aiter__c                    s   zC| j  I d H }t|tr?|dr|dd  }| dkr"tzt|}W n tj	y>   t
dd ddd dd Y W S w | |W S  tyL    w r5   )r   	__anext__r&   r8   r9   r:   StopAsyncIterationr(   r<   r=   r   r0   r>   r   r   r   r@   p   s0   

	z'GigaChatModelResponseIterator.__anext__N)F)__name__
__module____qualname____doc__r   boolr   r   r'   r   r0   r3   r7   r?   r@   r   r   r   r   r      s    

8r   )rE   r(   r*   typingr   r   Zlitellm.types.llms.openair   r   Zlitellm.types.utilsr   r   r   r   r   r   <module>   s    