
    iV                        d Z ddlZddlZddlmZmZmZmZmZm	Z	m
Z
mZmZmZ ddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZmZmZ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+m,Z, ddlm-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z; erddl<m=Z= ddl>m?Z? 	 d$de
e   de@deAde@de@deBde
eeCej                  f      deEde
e@   deeej                  f   fdZG	 d$de
e   de@deAde@de@deBde
eeCej                  f      deEde
e@   deeej                  f   fdZH G d  d!e6      ZI G d" d#      ZJy)%zE
Calling + translation logic for anthropic's `/v1/messages` endpoint
    N)
TYPE_CHECKINGAnyCallableDictListLiteralOptionalTupleUnioncast)!update_request_with_filtered_beta)RESPONSE_FORMAT_TOOL_NAME)map_finish_reason)AsyncHTTPHandlerHTTPHandler_get_httpx_clientget_async_httpx_client)ContentBlockDeltaContentBlockStartContentBlockStopMessageBlockDeltaMessageStartBlock
UsageDelta)#ChatCompletionRedactedThinkingBlockChatCompletionThinkingBlockChatCompletionToolCallChunk#ChatCompletionToolCallFunctionChunk)OutputCodeInterpreterCall"build_code_interpreter_log_outputs)DeltaGenericStreamingChunkLlmProvidersModelResponseModelResponseStreamStreamingChoicesUsage_generate_id   )BaseLLM   )AnthropicErrorprocess_anthropic_headers   )AnthropicConfigCustomStreamWrapper)
BaseConfigclientapi_baseheadersdatamodelmessagestimeout	json_modespeedreturnc
                   K   | t         j                  } 	 | j                  |||d|       d {   }
t        |
j                         d||		      }|j!                  |d
|d|i       ||
j"                  fS 7 F# t        j                  $ rs}t        |dd       }t        |dd       }||rt        |dd       }t        |j                  j                  |j                  j                          d {  7  |      d }~wt        $ r>}t         j                  D ]  }t        ||      s| t        dt        |            d }~ww xY ww)NTr4   r5   streamr8   r4   responsestatus_codemessager4     rA   rB   Fstreaming_responsesync_streamr9   r:    complete_input_dictinputapi_keyoriginal_responseadditional_args)litellmmodule_level_aclientposthttpxHTTPStatusErrorgetattrr+   r?   rA   aread	ExceptionLITELLM_EXCEPTION_TYPES
isinstancestrModelResponseIteratoraiter_lines	post_callr4   )r2   r3   r4   r5   r6   r7   logging_objr8   r9   r:   r?   eerror_headerserror_response	exceptioncompletion_streams                   t/Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/llms/anthropic/chat/handler.py	make_callrd   K   sZ     ~-->gDw % 
 
& .#//1	 +.5	   h....E
    	
9d3 J5 ^#NItDM

..****,,,!
 	

  > 88I!Y' 9 c!f==	>sW   EA8 A6A8 AE6A8 8EA"C9-C0.C99ED>%D>>EEc
                    | t         j                  } 	 | j                  |||d|      }
|
j                  dk7  r3t        |
dd       }t        |
j                  |
j                         |      t        |
j                         d||		      }|j!                  |d
dd|i       ||
j"                  fS # t        j                  $ rj}t        |dd       }t        |dd       }||rt        |dd       }t        |j                  j                  |j                  j                         |      d }~wt        $ r>}t         j                  D ]  }t        ||      s| t        dt        |            d }~ww xY w)NTr=   r4   r?   r@   rC   rD      rE   rH   zfirst stream response receivedrI   rJ   )rO   module_level_clientrQ   rR   rS   rT   r+   r?   rA   readrV   rW   rX   rY   rZ   
iter_linesr\   r4   )r2   r3   r4   r5   r6   r7   r]   r8   r9   r:   r?   r^   r_   r`   ra   response_headersrb   s                    rc   make_sync_callrk      s    ~,,>;;gDw  
& s""8Y= ,,MMO$
 	
 .#..0	 :.5	   h....O    	
9d3 J5 ^#NItDM

..JJOO%!
 	

  > 88I!Y' 9 c!f==	>s*   B. .E0A%D&&E02E+E++E0c                   R    e Zd Zd fdZdddi fdededededed	ed
e	e
ej                  f   dee   dedefdZdi dfdededededed	ed
e	e
ej                  f   dededededddee   de	edf   fdZddi dfdedededededed	eded
e	e
ej                  f   defdZd Z xZS )AnthropicChatCompletionr;   Nc                 "    t         |           y N)super__init__)self	__class__s    rc   rq   z AnthropicChatCompletion.__init__   s        r6   r7   r3   custom_prompt_dictmodel_responseprint_verboser8   r2   r5   r9   c                    K   ddl m} d|d<   t        |||t        j                  |      ||||||r|j                  d      nd 
       d {   \  }} |||d|t        |            }|S 7 w)	Nr   r/   Tr>   r:   
r2   r3   r4   r5   r6   r7   r]   r8   r9   r:   	anthropicrb   r6   custom_llm_providerr]   _response_headers),litellm.litellm_core_utils.streaming_handlerr0   rd   jsondumpsgetr,   )rr   r6   r7   r3   ru   rv   rw   r8   r2   encodingrL   r]   r>   _is_function_callr5   r9   optional_paramslitellm_params	logger_fnr4   r0   rb   streamwrappers                          rc   acompletion_stream_functionz3AnthropicChatCompletion.acompletion_stream_function   s     , 	UX+4D!#2A/%%g.t,
 &
"7 ,/ +#7@
 '&
s   A
A.A, A.r   r   provider_configr1   r0   c                 "  K   |xs$ t        t        j                  j                        }	 |j	                  ||||       d {   }|j                  ||||
|	||||||      S 7  # t
        $ r}|
j                  ||	t        |      d|i       t        |dd      }t        |dd       }t        |dt        |            }t        |d	d       }||rt        |dd       }|rt        |d      rt        |d|      }t        |||
      d }~ww xY ww)N)llm_provider)r4   r   r8   rI   rJ   rA   rC   r4   textr?   rB   rA   r4   r6   raw_responserv   r]   rL   request_datar7   r   r   r   r9   )r   rO   r"   	ANTHROPICrQ   rV   r\   rY   rT   hasattrr+   transform_response)rr   r6   r7   r3   ru   rv   rw   r8   r   rL   r]   r>   r   r5   r   r9   r   r   r   r4   r2   async_handlerr?   r^   rA   r_   
error_textr`   s                               rc   acompletion_functionz,AnthropicChatCompletion.acompletion_function   sN    .  
"8 --77#
	*//'g 0  H2 11!)#+) 2 
 	
3  	!!"%a&!6 =	 "  "!]C8K#Ay$7M FCF3J$Q
D9N$ '	4 H'.&"A$^VZH
 "'% !	s;   )DA' A%A' 	D%A' '	D0BDDDr|   c                    ddl m} ddlm} t	        j
                  |      }|j                  dd       }|j                  dd      }|j                  dd      }|j                  dd        d}t	        j
                  |      }t               j                  |	|||i |d|i|	      }|j                  |t        |      
      }|t        d| d|       |j                  ||i |d|i||      }t        |||      \  }}|
j                  ||	|||d        |d|        |du rs|du rJ |d       ||d<   | j                  |||||||||	|
|||||||||t!        |t"              r|      S d       S | j%                  |||||||||	||
|||||||||      S |du rY||d<   t'        |||t)        j*                  |      |||
|||r|j-                  d      nd 
      \  }} |||d|
t/        |            S |t!        |t0              st3        d|i      }n|}	 |j5                  ||t)        j*                  |      |      }|jA                  ||||
|	||||||#      S # t6        $ r|}t9        |dd      }t9        |dd       }t9        |d t;        |            }t9        |d!d       } || rt9        | dd       }| rt=        | d       rt9        | d |      }t?        |||"      d }~ww xY w)$Nr   r/   )ProviderConfigManagerr>   r9   Fis_vertex_requestvertex_count_tokens_location)rL   r4   r6   r7   r   r   )r6   providerz%Provider config not found for model: z and provider: )r6   r7   r   r   r4   )r4   r   r   )rI   r3   r4   )rK   rL   rN   z_is_function_call: Tz,makes async anthropic streaming POST request)r6   r7   r5   r3   ru   rv   rw   r   rL   r]   r   r>   r   r9   r   r   r4   r8   r2   )r6   r7   r5   r3   ru   rv   rw   r   rL   r   r]   r   r>   r   r   r   r4   r2   r9   r8   r:   ry   rz   r{   r8   )params)r4   r5   r8   rA   rC   r4   r   r?   r   r   )!r~   r0   litellm.utilsr   copydeepcopypopr.   validate_environmentget_provider_chat_configr"   
ValueErrortransform_requestr   pre_callr   rX   r   r   rk   r   r   r   r,   r   r   rQ   rV   rT   rY   r   r+   r   )!rr   r6   r7   r3   r|   ru   rv   rw   r   rL   r]   r   r8   r   acompletionr   r4   r2   r0   r   r>   r9   r   r   configr5   rb   r?   r^   rA   r_   r   r`   s!                                    rc   
completionz"AnthropicChatCompletion.completion3  s   ( 	U7--8 $$Xt4)--k5A	"1"5"56I5"Q:DA!==*!#88WW0CEVW) 9 
 '??!"56 @ 
 >7woNaMbc  ''WW0CEVW) ( 
 :(
 	'+$" 	 	
 	+,=+>?@$$LM!'X77%%'9#1"/%# +$3!&7'#1'## "-*VEU2V ) 8  , "- 8  4 00%%'9#1"/%#$* +$3!&7#1'#!'#) 1  2 $!'X-;!%#D)% +#':I/--g6t.*!7 +&7(3 +&?&H  >FK)H.y'6JKF#F%{{  '!ZZ- '	  +  H* ((!)#+) ) 
 	
 ! ")!]C"@K$+Ay$$?M!(FCF!;J%,Q
D%AN$,(/	4(P%'.&*I%,^VZ%P
( *$/ - s   (I! !	K&*A7K!!K&c                      y ro    rr   s    rc   	embeddingz!AnthropicChatCompletion.embedding  s    rt   )r;   N)__name__
__module____qualname__rq   rY   listdictr#   r   r   floatrR   Timeoutr	   r   boolr   r   r   r   __classcell__)rs   s   @rc   rm   rm      s   ( )-- - 	-
 !- &-  - uemm+,- )*- -  !-D -1+A
A
 A
 	A

 !A
 &A
  A
 uemm+,A
 A
 A
  !A
" #A
$ &%A
* )*+A
, 
}33	4-A
d %A
A
 A
 	A

 !A
 !A
 &A
  A
 A
 uemm+,A
 A
Frt   rm   c            
          e Zd Z	 	 d!dedee   dee   fdZdefdZdee	e
f   defd	Zd
e	deeee   eeeef      eeef   f   fdZdeeeef      dee   fdZdedeeef   deee   eeef   f   fdZd
e	defdZdefdZd
e	defdZdedee   deeee   f   fdZd
e	deeee   eeeef      f   fdZdedee   fdZdedee   fdZ d Z!d Z"d Z#d Z$d
edefd Z%y)"rZ   NrG   r9   r:   c                 $   || _         | j                   | _        g | _        d| _        || _        || _        t               | _        d| _        d| _	        d| _
        d| _        d | _        g | _        g | _        i | _        g | _        d | _        d | _        y )NFrH   
valid_json)rF   response_iteratorcontent_blocks
tool_indexr9   r:   r'   response_idis_response_format_toolconverted_response_format_toolaccumulated_json
chunk_typecurrent_content_block_typeweb_search_resultscompaction_blocks_server_tool_inputstool_results_current_server_tool_id_container_id)rr   rF   rG   r9   r:   s        rc   rq   zModelResponseIterator.__init__  s     #5!%!8!879"
'> .3$49+ &(EQ :>' 9; 8: 46 246:$,0rt   r;   c                 $   d}t        | j                        dk(  ry| j                  d   d   d   dk(  s| j                  d   d   d   dk(  ry| j                  D ]&  }|d   d   dk(  s||d   j                  d	d      z  }( t        |      dk(  ry
y)zN
        Check if the tool call block so far has been an empty string
        rH   r   Fdeltatype
text_deltathinking_deltainput_json_deltapartial_jsonT)lenr   r   )rr   argsblocks      rc   check_empty_tool_call_argsz0ModelResponseIterator.check_empty_tool_call_args'  s     t""#q( "7+F3|C""1%g.v6:JJ((EW~f%);;g**>2>> ) t9>rt   anthropic_usage_chunkc                 j    t               j                  t        t        |      d | j                        S )N)usage_objectreasoning_contentr:   )r.   calculate_usager   r   r:   )rr   r   s     rc   _handle_usagez#ModelResponseIterator._handle_usage>  s2     00d$9:"** 1 
 	
rt   chunkc           	      4   d}d}i }t        di |}g }| j                  j                  |       d|d   v r	|d   d   }nd|d   v r7| j                  dv rt	        t
        ddd|d   d   d| j                  d	      }nd
|d   v r|d   d
   |d
<   nd|d   v sd|d   v rJt        d|d   j                  d      xs dt        |d   j                  d      xs d            g}||d<   n,d|d   v r%|d   j                  d      dk(  rd|d   d   d|d<   ||||fS )zC
        Helper function to handle the content block delta
        rH   Nr   r   r   tool_useserver_tool_usefunctionname	argumentsidr   r   indexcitationthinking	signature)r   r   r   thinking_blockscontentr   compaction_deltar   r   r   )
r   r   appendr   r   r   r   r   r   rY   )rr   r   r   r   provider_specific_fieldscontent_blockr   s          rc   _content_block_delta_helperz1ModelResponseIterator._content_block_delta_helperE  s    :>#% )2E2  	 	""=1]7++ )&1D}W55 ..2QQ/" *$()6w)?)O% "& =113@3I*3U$Z0-00mG44 ,#*7377
CIr!-"8"<"<["I"ORPO ;J$%67w//g&**626HH +(1)<<$%78
 X0HHHrt   r   c                 |    d}|D ]4  }t        t        t           |j                  d            }|d}|0||z  }6 |S )z.
        Handle the reasoning content
        Nr   rH   )r   r	   rY   r   )rr   r   r   r   thinking_contents        rc   _handle_reasoning_contentz/ModelResponseIterator._handle_reasoning_content  sT     !$E#HSM599Z3HI ($&!+!%55! % ! rt   content_block_startr   c                 <    t        d|d   d         g}||d<   ||fS )z6
        Handle the redacted thinking content
        redacted_thinkingr   r5   )r   r5   r   )r   )rr   r   r   r   s       rc   !_handle_redacted_thinking_contentz7ModelResponseIterator._handle_redacted_thinking_content  s>     0((9&A
 7F !23 888rt   c                     ddl m}m} |j                  di       j                  d      dk(  r
 |di |}|S  |di |}|S )Nr   )ContentBlockStartTextContentBlockStartToolUser   r   r   r   )litellm.types.llms.anthropicr   r   r   )rr   r   r   r   r   s        rc   get_content_block_startz-ModelResponseIterator.get_content_block_start  sS    	

 99_b)--f5C":"CU"C #" #8"@%"@""rt   c                    g }| j                   D ]  }|j                  d      dk7  r|j                  dd      }|j                  di       }t        |      }| j                  j                  |i       }t	        |t
              r|j                  dd      nd}|j                  t        d||| j                  d|	              |S )
a-  Convert accumulated tool_results to OutputCodeInterpreterCall objects.

        Called during streaming to produce provider-neutral code_interpreter_results
        alongside the raw tool_results, so the Responses API layer doesn't need
        Anthropic-specific knowledge.

        Returns the full cumulative list each time (not incremental), matching
        how web_search_results works.  stream_chunk_builder uses "last value
        wins" for list-valued provider_specific_fields keys, so the last
        emission must contain every result.
        r   bash_code_execution_tool_resulttool_use_idrH   r   commandcode_interpreter_call	completed)r   r   codecontainer_idstatusoutputs)	r   r   r   r   rX   r   r   r   r   )rr   resultstrcall_idr   log_outputs
tool_inputr  s           rc   _build_code_interpreter_resultsz5ModelResponseIterator._build_code_interpreter_results  s     ##Bvvf~!BBff]B/GffY+G<WEK1155grBJ4>z44P:>>)R0VXDNN)0!%!3!3&'	 $$ rt   c                 
   	 |j                  dd      xs d}d}d }d}d }i }d }d }	d}
|dk(  r/	 | j                  |      \  }}}	}|	r]| j                  |	      }nI|dk(  rZ	 | j                  |      }g | _        |d   d   | _        |d   d   d	k(  r
|d   d	   }n|d   d   d
k(  s|d   d   dk(  r| xj                  dz  c_        t        |d   d   dt        |d   d   d      | j                        }|d   d   dk(  r;|d   d   | _	        |d   j                  di       }|| j                  | j                  <   d|d   v r^|d   d   }|rSt        t        t        t        f   |      |d<   n1|d   d   dk(  r| j                  ||      \  }	}n|d   d   dk(  rJ| j                   j#                  |d          | j                   |d<   d|d   j                  dd      d|d<   n|d   d   j%                  d      r|d   d   }|dk(  r/| j&                  j#                  |d          | j&                  |d<   ne|dk(  r/| j&                  j#                  |d          | j&                  |d<   n1|dk7  r+| j(                  j#                  |d          | j(                  |d <   | j+                         |d!<   n|d"k(  rt-        d8i | | j
                  d#v r| j/                         }|r$t        d dt        d d$      | j                        }| j
                  dk(  r| j                  rd}| j                  D ]8  }|d%   d   d&k(  s|d%   j                  d'      }t1        |t              s4||z  }: |r-	 t3        j4                  |      | j                  | j                  <   d | _	        d(| _        d | _        n|d)k(  rn|d*k(  rh| j=                  |      \  }}}|r||d+<   t1        |t>              r|j                  d      nd }|r| j(                  r|| _         | j+                         |d!<   ny|d,k(  r,	 tC        d8i |}d-|d.   v ra| jE                  |d.   d-   /      }nH|d0k(  rC	 |j                  d0i       xs i }|j                  d.d       xs t        |      }tG        |d12      | jI                  ||3      \  }}tK        tM        |
tO        |||gnd |r|nd |	r|	nd |4      |5      g|| jP                  6      }|S # t2        j6                  t8        f$ r Y vw xY w# t2        j6                  $ r tS        d7|       w xY w)9Nr   rH   r   content_block_deltar   )r   r   r   r   r   r   r-   r   r   r   r   r   rK   callerr   )r   r   
compactionr   r   r   compaction_start_tool_resultweb_search_tool_resultr   web_fetch_tool_resulttool_search_tool_resultr   code_interpreter_resultscontent_block_stopr   z{}r   r   r   Ftool_resultmessage_delta	containermessage_startusagerB   r   errorrC   )rB   rA   )r   r   )r   
tool_callsr   r   r   )r   r   finish_reason)choicesr  r   z"Failed to decode JSON from chunk: r   )*r   r   r   r   r   r   r   r   r   r   r   r   r   rY   r   r   r   r   endswithr   r   r  r   r   rX   r   loadsJSONDecodeError	TypeErrorr   _handle_message_deltar   r   r   r   r+   _handle_json_mode_chunkr$   r%   r    r   r   )rr   r   
type_chunkr   r   r!  r  r   r   r   r   r   r  caller_datacontent_typeis_emptyr   r   r   r  r  message_start_block_error_dictrB   returned_chunks                            rc   chunk_parserz"ModelResponseIterator.chunk_parser  s   P	K62.4"JD>BHM%)E79$/3   E22 4454A#,"(,(F(F(7 )G )% 44
 '+&B&B&B&O#&(#2Eo2V3/ '7?6I.?GD'8@JN*?;FCGXXOOq(O  ;.?E'!D!4_!Ef!M&(" #oo H ,O<VD,- 8K+88 4 &9%I%M%M#R&

 ' 00 88  #6#GG&9/&J8&T&15d38nk1RHX.'8@DWW
 >>,?1I ? '0 )9&A\Q **112Eo2VW .. -+ !-#6#G#K#K%r$D,-?@ )9&AJJ" $7#G#OL $'?? //66/@
 !33 10 &)@@ //66/@
 !33 10 &)BB ))001D_1UVCGCTCT0@ !@@B 16 33 )5)226UU#>>@H#>#!+%H%)*.& #'//$ 77;LL 88!%)%8%8E$W~f59KK/4W~/A/A./Q#-lC#@$(L$8D	 &9
  % %)JJt$4 !% 8 8$($@$@!"
 8<4/4,26/}, .262L2LU2S/ui<E,[9
 0:)T/J	d+PT ! $(9(9-9* !@@B 16 .& '8&@%&@#1)<< ...A).LW.U / E w& $ii4:%//)T:Hc%j$# # 
 "99th9WND(0$##$(5=5Izt $< !9%) 4C.? '4& ##+N0 "!q %)$8$8)#D % $%t ## 	KA%IJJ	Ks=   MT $T -	T 7,S= #ET =TT TT "T?r   r   c                 ,   | j                   r|||fS |j                  d      0|j                  di       j                  dd      }|t        k(  | _        | j                  r2t	        j
                  |g      }||j                  xs d}d}d| _        ||fS )a  
        If JSON mode is enabled, convert the tool call to a message.

        Anthropic returns the JSON schema as part of the tool call
        OpenAI returns the JSON schema as part of the content, this handles placing it in the content

        Tool streaming follows Anthropic's fine-grained streaming pattern:
        - content_block_start: Contains complete tool info (id, name, empty arguments)
        - content_block_delta: Contains argument deltas (partial_json)
        - content_block_stop: Signals end of tool

        Reference: https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/fine-grained-tool-streaming

        Args:
            text: str
            tool_use: Optional[ChatCompletionToolCallChunk]
        Returns:
            Tuple[str, Optional[ChatCompletionToolCallChunk]]

            text: The text to use in the content
            tool_use: The ChatCompletionToolCallChunk to use in the chunk response
        Nr   r   r   rH   )r   T)r9   r   r   r   r.   !_convert_tool_response_to_messager   r   )rr   r   r   	tool_namerB   s        rc   r(  z-ModelResponseIterator._handle_json_mode_chunk  s    2 ~~!1>! <<) !Z488DI+48Q+QD( ''%GG$:G ","6:3X~rt   c                     t        di |}t        |d   j                  dd      xs d      }| j                  rd}| j	                  |d         }|d   j                  d      }|||fS )	z
        Handle message_delta event for finish_reason, usage, and container.

        Args:
            chunk: The message_delta chunk

        Returns:
            Tuple of (finish_reason, usage, container)
        r   stop_reasonstop)r!  r  r  r  r   )r   r   r   r   r   )rr   r   r  r!  r  r  s         rc   r'  z+ModelResponseIterator._handle_message_delta  s     *2E2)'044]FKUv

 .."M""w9O"P!'*..{;	eY..rt   data_strc                     | xj                   |z  c_         	 t        j                  | j                         }d| _         | j                  |      S # t        j                  $ r Y yw xY w)a  
        Handle partial JSON chunks by accumulating them until valid JSON is received.

        This fixes network fragmentation issues where SSE data chunks may be split
        across TCP packets. See: https://github.com/BerriAI/litellm/issues/17473

        Args:
            data_str: The JSON string to parse (without "data:" prefix)

        Returns:
            ModelResponseStream if JSON is complete, None if still accumulating
        rH   r  N)r   r   r$  r0  r%  )rr   r7  	data_jsons      rc   _handle_accumulated_json_chunkz4ModelResponseIterator._handle_accumulated_json_chunk3  sb      	)	

4#8#89I$&D!$$9$55## 		s   7A A%$A%str_linec                     |dd }| j                   dk(  r| j                  |      S 	 t        j                  |      }| j	                  |      S # t        j
                  $ r d| _         | j                  |      cY S w xY w)a  
        Parse SSE data line, handling both complete and partial JSON chunks.

        Args:
            str_line: The SSE line starting with "data:"

        Returns:
            ModelResponseStream if parsing succeeded, None if accumulating partial JSON
           Nr   r  )r   r:  r   r$  r0  r%  )rr   r;  r7  r9  s       rc   _parse_sse_dataz%ModelResponseIterator._parse_sse_dataN  s     AB<??0066x@@	A

8,I$$9$55## 	A0DO66x@@	As   &A +A<;A<c                     | S ro   r   r   s    rc   __iter__zModelResponseIterator.__iter__h  s    rt   c                    	 	 | j                   j                         }	 |}t        |t              r,|j                  d      }|j                  d      }|dk7  r||d  }|j                  d      r| j                  |      }||S t!        dddd dd 	      S 	 # t        $ rl | j                  rY	 t	        j
                  | j                        }d| _        | j                  |      cY S # t        j                  $ r Y t        w xY wt        t        $ r}t        d|       d }~ww xY w# t        $ r t        t        $ r}t        d
| d|       d }~ww xY wNrH   r  z#Error receiving chunk from stream: utf-8data:r   Fr   )r   is_finishedr!  r  r   r   zError parsing chunk: z,
Received chunk: )r   __next__StopIterationr   r   r$  r0  r%  r   RuntimeErrorrX   bytesdecodefind
startswithr>  r!   rr   r   r9  r^   r;  r   results          rc   rF  zModelResponseIterator.__next__k  s   N..779 eU+$||G4H$MM'2E{#+EF#3&&w/!11(;F)% 1$)&("!% 	 *5  ! 	$(($(JJt/D/D$E	02-#00y0AA// #### N"%H#LMMN2 ! $## "+A3.A%I sY   B A#D' D' D$+7C%"D$%D 8D$?D  D$DD$'E>EEc                 D    | j                   j                         | _        | S ro   )rF   	__aiter__async_response_iteratorr   s    rc   rP  zModelResponseIterator.__aiter__  s    '+'>'>'H'H'J$rt   c                   K   	 	 | j                   j                          d {   }	 |}t        |t              r,|j                  d      }|j                  d      }|dk7  r||d  }|j                  d      r| j                  |      }||S t!        dddd dd 	      S 	 7 |# t        $ rl | j                  rY	 t	        j
                  | j                        }d| _        | j                  |      cY S # t        j                  $ r Y t        w xY wt        t        $ r}t        d|       d }~ww xY w# t        $ r t        t        $ r}t        d
| d|       d }~ww xY wwrB  )rQ  	__anext__StopAsyncIterationr   r   r$  r0  r%  r   rH  rX   rI  rJ  rK  rL  r>  r!   rM  s          rc   rS  zModelResponseIterator.__anext__  s    N"::DDFF eU+$||G4H$MM'2E{#+EF#3&&w/!11(;F)% 1$)&("!% 	 *5 F% 	)(($(JJt/D/D$E	02-#00y0AA// (((( N"%H#LMMN2 & )(( "+A3.A%I s   E#B! BB! A#D3 E#D3 E#B! !D077C1.D0/E#1DD0DD0D++D00E#3E 
EE  E#c                     |}t        |t              r|j                  d      }|j                  d      }|dk7  r||d }|j	                  d      r*t        j                  |dd       }| j                  |      S t        | j                        S )a%  
        Convert a string chunk to a GenericStreamingChunk

        Note: This is used for Anthropic pass through streaming logging

        We can move __anext__, and __next__ to use this function since it's common logic.
        Did not migrate them to minmize changes made in 1 PR.
        rC  rD  r   Nr=  r  )r   )
rX   rI  rJ  rK  rL  r   r$  r0  r$   r   )rr   r   r;  r   r9  s        rc   "convert_str_chunk_to_generic_chunkz8ModelResponseIterator.convert_str_chunk_to_generic_chunk  s     eU#||G,H g&B;'Hw'

8AB<0I$$9$55&$*:*:;;rt   )FN)&r   r   r   r   r	   rY   rq   r   r   r   r   r&   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r  r$   r0  r(  r'  r:  r>  r@  rF  rP  rS  rV  r   rt   rc   rZ   rZ     s    
 %*#)1 )1 D>	)1
 })1VD .
5z9I3J 
u 
?I?I	,-U.0SSTUS#X	
?IB!-/RRS
!
 
#!$9.9 #'sCx.9 
t78$sCx.H	I	9$#T #6G # BQK$ QK+> QKf..#+,G#H.	sH899	:.`//	sHUOXd38n%==	>/0	%	&6A A9L0M A4,^,\< <@S <rt   rZ   ro   )K__doc__r   r   typingr   r   r   r   r   r   r	   r
   r   r   rR   rO   litellm.litellm_core_utilslitellm.typeslitellm.types.utils&litellm.anthropic_beta_headers_managerr   litellm.constantsr   'litellm.litellm_core_utils.core_helpersr   &litellm.llms.custom_httpx.http_handlerr   r   r   r   r   r   r   r   r   r   r   litellm.types.llms.openair   r   r   r   litellm.types.responses.mainr   r   r    r!   r"   r#   r$   r%   r&   r'   baser)   common_utilsr+   r,   transformationr.   r~   r0   )litellm.llms.base_llm.chat.transformationr1   rY   r   r   r   r   r   Headersrd   rk   rm   rZ   r   rt   rc   <module>rg     s         !   8 E   	 	 	  D +PD  2/%&2/2/ 2/ 	2/
 2/ 2/ eE5==0122/ 2/ C=2/ 32/~  :/[!:/:/ :/ 	:/
 :/ :/ eE5==012:/ :/ C=:/ 3:/z{g {|	h< h<rt   