
    g                     d    d dl Z d dlmZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z
mZ  G d d      Zy)    N)Optional)verbose_logger)ChatCompletionToolCallChunk#ChatCompletionToolCallFunctionChunkChatCompletionUsageBlock)GenericStreamingChunkUsagec                   @    e Zd ZdefdZdedefdZd Zd Z	d Z
d	 Zy
)ModelResponseIteratorsync_streamc                     || _         y N)streaming_response)selfr   r   s      \/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/databricks/streaming_utils.py__init__zModelResponseIterator.__init__   s
    "4    chunkreturnc           	      d   	 t        j                  di |}d}d }d}d}d }|j                  d   j                  j                  #|j                  d   j                  j                  }|j                  d   j                  j
                  t        |j                  d   j                  j
                        dkD  rR|j                  d   j                  j
                  d   j                  !|j                  d   j                  j
                  d   j                  j                  	 t        |j                  d   j                  j
                  d   j                  dt        |j                  d   j                  j
                  d   j                  j                  |j                  d   j                  j
                  d   j                  j                        |j                  d   j                  j
                  d   j                        }|j                  d   j                  d}|j                  d   j                  }t        |dd       }|,t!        |j"                  |j$                  |j&                  	      }t)        |||||d
      S # t*        j,                  $ r t/        d|       w xY w)N Fr   function)name	arguments)idtyper   indexTusage)prompt_tokenscompletion_tokenstotal_tokens)texttool_useis_finishedfinish_reasonr   r   z"Failed to decode JSON from chunk:  )litellmModelResponseStreamchoicesdeltacontent
tool_callslenr   r   r   r   r   r   r   r%   getattrr   r   r    r!   r   jsonJSONDecodeError
ValueError)	r   r   processed_chunkr"   r#   r$   r%   r   usage_chunks	            r   chunk_parserz"ModelResponseIterator.chunk_parser   sv   7	K%99BEBOD>BHKM8<E&&q)//77C&..q177??  ''*00;;G//288CCDqH#++A.44??BKKW#++A.44??BKKUU 7&..q177BB1EHH#@,44Q7zz!-!$$"1"9"9!"<zz!#-!)) *11!4::EEaHNN &&q)77C" / 7 7 : H H+2?GT+RK&0"-";";&1&C&C!,!9!9 )!'+  ## 	KA%IJJ	Ks   J
J "J/c                 (    | j                   | _        | S r   )r   response_iteratorr   s    r   __iter__zModelResponseIterator.__iter__M   s    !%!8!8r   c           	      @   t        | d      s| j                  | _        	 | j                  j                         }	 |j                  dd      }|j                         }t        |      dkD  r't        j                  |      }| j                  |      S t        dddd dd       S # t        $ r t        t
        $ r}t        d|       d }~ww xY w# t        $ r t        t
        $ r7}t        j                  d	| d
| d       t        dddd dd       cY d }~S d }~ww xY w)Nr6   #Error receiving chunk from stream: data:r   r   r   Fr"   r$   r%   r   r   r#   Error parsing chunk: ,
Received chunk: !. Defaulting to empty chunk here.)hasattrr   r6   __next__StopIterationr1   RuntimeErrorreplacestripr-   r/   loadsr4   r   r   debugr   r   e
json_chunks       r   rB   zModelResponseIterator.__next__Q   s8   t01%)%<%<D"	J**335E	MM'2.EKKME5zA~!ZZ.
((z(::, %"$!   	  	J!DQCHII	J$  	  	  's*=eWDef )!  		s;   B" AC C "C9CCD&,DDDc                 D    | j                   j                         | _        | S r   )r   	__aiter__async_response_iteratorr7   s    r   rM   zModelResponseIterator.__aiter__z   s    '+'>'>'H'H'J$r   c           	      l  K   	 | j                   j                          d {   }	 |j                  dd      }|j                         }|dk(  rt        t        |      dkD  r't        j                  |      }| j                  |      S t        dddd dd       S 7 x# t        $ r t        t        $ r}t	        d|       d }~wt
        $ r}t	        d|       d }~ww xY w# t        $ r t        t        $ r7}t        j                  d	| d
| d       t        dddd dd       cY d }~S d }~ww xY ww)Nr:   r;   r   z[DONE]r   r<   Fr=   r>   r?   r@   )rN   	__anext__StopAsyncIterationr1   rD   	ExceptionrE   rF   r-   r/   rG   r4   r   r   rH   rI   s       r   rP   zModelResponseIterator.__anext__~   sT    	J66@@BBE	MM'2.EKKME ((5zA~!ZZ.
((z(::, %"$! # C! 	%$$ 	J!DQCHII 	J!DQCHII	J( " 	%$$ 	  's*=eWDef )!  		sz   D4B BB A!C# D4	C# D4B C 3CC CC  D4#D1:,D,&D1'D4,D11D4N)__name__
__module____qualname__boolr   dictr   r4   r8   rB   rM   rP   r&   r   r   r   r      s;    5 58K$ 8K+@ 8Kv&R(r   r   )r/   typingr   r'   r   litellm.types.llms.openair   r   r   litellm.types.utilsr   r	   r   r&   r   r   <module>r[      s,       " 
 =X Xr   