Ë
    uPêjPÞ  ã                   óâ  — d Z ddl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 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 dd	lmZmZmZmZ dd
lmZ  ddl!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/m0Z0m1Z1 ddlm2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z=m>Z> ddl?m@Z@mAZA erddlBmCZD ddlEmFZF ddlGmHZH 	 	 d*dedz  deIdeJdeIdeIdeKdeLejš                  z  dz  d eNd!eIdz  d"eJeIeIf   dz  d#eOeej                   f   fd$„ZQ	 	 d*dedz  deIdeJdeIdeIdeKdeLejš                  z  dz  d eNd!eIdz  d"eJeIeIf   dz  d#eOeej                   f   fd%„ZR G d&„ d'e;«      ZS G d(„ d)«      ZTy)+zE
Calling + translation logic for anthropic's `/v1/messages` endpoint
é    N)ÚCallable)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralÚUnionÚcast)Ú!update_request_with_filtered_beta)ÚRESPONSE_FORMAT_TOOL_NAME)Úmap_finish_reason)ÚJSONFragmentAccumulator)ÚAsyncHTTPHandlerÚHTTPHandlerÚ_get_httpx_clientÚget_async_httpx_client)Úchat_completions)Úrust_chat_completions_accepts)Ú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é   )Ú#ANTHROPIC_TOOL_NAME_REVERSE_MAP_KEYÚAnthropicConfig)ÚLogging©ÚCustomStreamWrapper)Ú
BaseConfigÚclientÚapi_baseÚheadersÚdataÚmodelÚmessagesÚtimeoutÚ	json_modeÚspeedÚtool_name_reverse_mapÚreturnc              ƒ   ó”  K  — | €t         j                  } 	 | j                  |||d||¬«      ƒ d {  –—† }t        |j                  «       d||	|
¬	«      }|j!                  |d
|d|i¬«       ||j"                  fS 7 ŒG# 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©r6   r7   Ústreamr:   Úlogging_objr6   Úresponse©Ústatus_codeÚmessager6   éô  ©rE   rF   F©Ústreaming_responseÚsync_streamr;   r<   r=   Ú Úcomplete_input_dict©ÚinputÚapi_keyÚoriginal_responseÚadditional_args)ÚlitellmÚmodule_level_aclientÚpostÚhttpxÚHTTPStatusErrorÚgetattrr+   rC   rE   ÚareadÚ	ExceptionÚLITELLM_EXCEPTION_TYPESÚ
isinstanceÚstrÚModelResponseIteratorÚaiter_linesÚ	post_callr6   )r4   r5   r6   r7   r8   r9   rB   r:   r;   r<   r=   rC   ÚeÚerror_headersÚerror_responseÚ	exceptionÚcompletion_streams                    úh/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/anthropic/chat/handler.pyÚ	make_callrg   E   si  è ø€ ð €~Ü×-Ñ-ˆð>Ø &§¡ØØØØØØ#ð !,ó !
÷ 
ˆô0  5Ø#×/Ñ/Ó1ØØØØ3ô Ðð ×ÑØØØ+Ø.°Ð5ð	 ô ð ˜h×.Ñ.Ð.Ð.ðQ
ùô × Ñ ò 	
Ü  9¨dÓ3ˆÜ '¨¨:°tÓ <ˆØÐ ¡^Ü# N°I¸tÓDˆMÜØŸ
™
×.Ñ.ØŸ*™*×*Ñ*Ó,×,Ð,Ø!ô
ð 	
ûô
 ò >Ü ×8Ñ8ò 	ˆIÜ˜!˜YÕ'Ø�ð	ô ¨´c¸!³fÔ=Ð=ûð	>üsW   ‚E–A: °A8±A: µAEÁ8A: Á:EÂA"C;Ã/C2Ã0C;Ã;EÄE Ä'E Å 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@   r6   rC   rD   rG   rH   éÈ   rI   rL   zfirst stream response receivedrM   rN   )rS   Úmodule_level_clientrU   rV   rW   rX   r+   rC   rE   ÚreadrZ   r[   r\   r]   r^   Ú
iter_linesr`   r6   )r4   r5   r6   r7   r8   r9   rB   r:   r;   r<   r=   rC   ra   rb   rc   rd   Úresponse_headersre   s                     rf   Úmake_sync_callrn   �   s•  € ð €~Ü×,Ñ,ˆð>Ø Ÿ+™+ØØØØØØ#ð &ó 
ˆð0 ×Ñ˜sÒ"Ü")¨(°I¸tÓ"DÐÜØ ×,Ñ,Ø—M‘M“OØ$ô
ð 	
ô  5Ø#×.Ñ.Ó0ØØØØ3ô Ðð ×ÑØØØ:Ø.°Ð5ð	 ô ð ˜h×.Ñ.Ð.Ð.øôQ × Ñ ò 	
Ü  9¨dÓ3ˆÜ '¨¨:°tÓ <ˆØÐ ¡^Ü# N°I¸tÓDˆMÜØŸ
™
×.Ñ.Ø—J‘J—O‘OÓ%Ø!ô
ð 	
ûô
 ò >Ü ×8Ñ8ò 	ˆIÜ˜!˜YÕ'Ø�ð	ô ¨´c¸!³fÔ=Ð=ûð	>ús*   ”B0 Â0E2ÃA%D(Ä(E2Ä4E-ÅE-Å-E2c                   óN  ‡ — 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
j                  z  dedz  dd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
j                  z  dededededddedz  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dded
e	e
j                  z  defd„Zd„ Zˆ xZS )ÚAnthropicChatCompletionr>   Nc                 ó"   •— t         ‰| �  «        y ©N)ÚsuperÚ__init__)ÚselfÚ	__class__s    €rf   rt   z AnthropicChatCompletion.__init__Æ   s   ø€ Ü‰ÑÕó    r8   r9   r5   Úcustom_prompt_dictÚmodel_responseÚprint_verboser:   r4   rB   ÚLiteLLMLoggingObjr7   r;   c              ƒ   ó,  K  — ddl m} d|d<   t        |||t        j                  |«      ||||||r|j                  d«      nd t        |t        «      r|j                  t        «      nd ¬«      ƒ d {  –—† \  }} |||d|t        |«      ¬«      }|S 7 Œ­w)	Nr   r1   TrA   r<   ©r4   r5   r6   r7   r8   r9   rB   r:   r;   r<   r=   Ú	anthropic©re   r8   Úcustom_llm_providerrB   Ú_response_headers)
Ú,litellm.litellm_core_utils.streaming_handlerr2   rg   ÚjsonÚdumpsÚgetr\   Údictr.   r,   )ru   r8   r9   r5   rx   ry   rz   r:   r4   ÚencodingrP   rB   rA   Ú_is_function_callr7   r;   Úoptional_paramsÚlitellm_paramsÚ	logger_fnr6   r2   re   Ústreamwrappers                          rf   Úacompletion_stream_functionz3AnthropicChatCompletion.acompletion_stream_functionÉ   sª   è ø€ õ, 	UàˆˆX‰ä+4ØØØÜ—‘˜DÓ!ØØØ#ØØÙ2A�/×%Ñ% gÔ.ÀtäKUÐVdÔfjÔKk�×"Ñ"Ô#FÔGÐquô,
÷ &
Ñ"Ð˜7ñ  3Ø/ØØ +Ø#Ü7¸Ó@ô 
ˆð Ðð-&
ús   ‚A0BÁ2BÁ3 Br‰   rŠ   Úprovider_configr3   r2   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)r6   rƒ   r:   rB   rM   rN   rE   rG   r6   ÚtextrC   ©rF   rE   r6   ©r8   Úraw_responsery   rB   rP   Úrequest_datar9   r‰   rŠ   r‡   r;   )r   rS   r"   Ú	ANTHROPICrU   rZ   r`   r]   rX   Úhasattrr+   Útransform_response)ru   r8   r9   r5   rx   ry   rz   r:   r‡   rP   rB   rA   rˆ   r7   r‰   r;   rŠ   rŽ   r‹   r6   r4   Úasync_handlerrC   ra   rE   rb   Ú
error_textrc   s                               rf   Úacompletion_functionz,AnthropicChatCompletion.acompletion_functionû   sO  è ø€ ð.  &ÒlÔ)?ÌW×MaÑMa×MkÑMkÔ)lˆð	Ø$1×$6Ñ$6ØØØØØ'ð %7ó %÷ ˆHð: ×1Ñ1ØØ!Ø)Ø#ØØØØ+Ø)ØØð 2ó 
ð 	
ð;ùô ò 	à×!Ñ!ØØÜ"% a£&Ø!6¸Ð =ð	 "ô ô ")¨¨M¸3Ó!?ˆKÜ# A y°$Ó7ˆMÜ   F¬C°«FÓ3ˆJÜ$+¨A¨z¸4Ó$@ˆNØÐ$©Ü '¨¸	À4Ó H�Ù¤'¨.¸&Ô"AÜ$ ^°V¸ZÓH�
Ü Ø"Ø'Ø%ôð ûð!	üs;   ‚)D¬A( ÁA&ÁA( Á
DÁ&A( Á(	DÁ1B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‰› �«      ‚dt        t        t        f   fˆ$ˆˆˆ%ˆˆˆˆfd„Š#i t        j                  ‰¬«      ¥‰¥}t        ‰‰|‰‰‰'¬«      }|r˜‰‰dœ|¥‰‰dœ}‰
j!                  ‰‰	|¬«       t#        j$                  ‰
‰‰	|¬«      }|du r9d+ˆ"ˆˆ	ˆ#ˆˆ$ˆˆˆ&ˆˆˆ
ˆˆˆˆˆˆ ˆ'ˆfd„}t#        j&                  ‰‰|‰‰	‰‰‰‰||¬«      S t#        j(                  ‰‰|‰‰	‰‰‰‰|¬«
      }|�|S  ‰#«       \  Š}|s‰
j!                  ‰‰	|‰‰dœ¬«        ‰d‰"› �«       |du rs‰'du rJ ‰d«       ‰'|d<   ‰ j+                  ‰‰|‰‰‰‰‰‰	‰
‰‰'‰"‰&‰‰‰‰‰�t-        ‰t.        «      r‰¬«      S d ¬«      S ‰ j1                  ‰‰|‰‰‰‰‰‰	‰$‰
‰‰'‰"‰‰‰‰‰&‰¬«      S ‰'du r‰'|d<   t3        ‰‰‰t5        j6                  |«      ‰‰‰
‰‰&‰r‰j9                  d«      nd t-        ‰t        «      r‰j9                  t:        «      nd ¬«      \  }Š ||‰d‰
t=        ‰«      ¬ «      S ‰�t-        ‰t>        «      stA        d!‰i¬"«      Šn‰Š	 ‰jC                  ‰‰t5        j6                  |«      ‰‰
¬#«      }‰$jO                  ‰|‰‰
‰	|‰‰‰‰‰&¬*«      S # tD        $ r|}tG        |d$d%«      }tG        |d&d «      }tG        |d'tI        |«      «      } tG        |d(d «      }!|€|!rtG        |!d&d «      }|!rtK        |!d'«      rtG        |!d'| «      } tM        | ||¬)«      ‚d }~ww xY w),Nr   r1   )ÚProviderConfigManagerrA   r;   FÚis_vertex_requestÚvertex_count_tokens_location)rP   r6   r8   r9   r‰   rŠ   r5   )r8   Úproviderz%Provider config not found for model: z and provider: r>   c                  óX   •— ‰j                  ‰‰i ‰¥d‰i¥‰‰¬«      } t        ‰| ‰¬«      S )ap  Translate the request the Python way, returning `(headers, data)`.

            The pair stays mutable because the streaming path rewrites it in
            place (`data["stream"] = True`) before sending.

            Shared by the normal path and by the Rust path's fallback, which
            builds it only when the Rust call did not serve the request.
            rž   )r8   r9   r‰   rŠ   r6   )r6   r•   r    )Útransform_requestr
   )	r•   Úconfigr€   r6   rž   rŠ   r9   r8   r‰   s	    €€€€€€€€rf   Úbuild_requestz9AnthropicChatCompletion.completion.<locals>.build_requesto  sO   ø€ ð #)×":Ñ":ØØ!Ø [ ?Ð [Ð4GÐIZÑ [Ø-Øð #;ó #ˆLô 5ØØ)Ø,ôð rw   )r8   )r8   r9   r‰   r€   rŠ   rA   )r8   r9   )rM   r5   r6   )rO   rP   rR   )rB   r9   rP   rR   Tc               “   ó~   •K  —  ‰«       \  } }‰j                  ‰‰|‰‰‰‰‰	‰‰‰‰‰‰‰‰| ‰‰
‰¬«      ƒ d {  –—† S 7 Œ­w)N©r8   r9   r7   r5   rx   ry   rz   r‡   rP   rŽ   rB   r‰   rA   rˆ   rŠ   r‹   r6   r4   r;   r:   )r›   )Úfallback_headersÚfallback_datarˆ   r5   rP   r¤   r4   r£   rx   r‡   r;   rŠ   r‹   rB   r9   r8   ry   r‰   rz   ru   rA   r:   s     €€€€€€€€€€€€€€€€€€€€rf   Úpython_fallbackz;AnthropicChatCompletion.completion.<locals>.python_fallback¨  su   øè ø€ ñ 7D³oÑ3Ð$ mØ!%×!:Ñ!:Ø#Ø!)Ø*Ø!)Ø+=Ø'5Ø&3Ø!)Ø 'Ø(.Ø$/Ø(7Ø%Ø*;Ø'5Ø"+Ø 0Ø%Ø"+Ø 'ð) ";ó "÷ ð ð ús   ƒ3=¶;·=)r8   r9   r‰   ry   rP   r5   r€   Úextra_headersr:   Úon_responser©   )
r8   r9   r‰   ry   rP   r5   r€   rª   r:   r«   z_is_function_call: z,makes async anthropic streaming POST request)r8   r9   r7   r5   rx   ry   rz   r‡   rP   rB   r‰   rA   rˆ   r;   rŠ   r‹   r6   r:   r4   r¦   r<   r}   r~   r   r:   )Úparams)r6   r7   r:   rB   rE   rG   r6   r‘   rC   r’   r“   )r>   z#ModelResponse | CustomStreamWrapper)(r‚   r2   Úlitellm.utilsr�   ÚcopyÚdeepcopyÚpopr/   Úvalidate_environmentÚget_provider_chat_configr"   Ú
ValueErrorÚtupler†   Ú
get_configr   Úpre_callÚrust_chat_completions_bridgeÚresponse_loggerÚachat_completions_or_fallbackr   r�   r\   r   r›   rn   rƒ   r„   r…   r.   r,   r   r   rU   rZ   rX   r]   r—   r+   r˜   )(ru   r8   r9   r5   r€   rx   ry   rz   r‡   rP   rB   r‰   r:   rŠ   Úacompletionr‹   r6   r4   r2   r�   Úrust_optional_paramsÚserves_via_rustÚrust_logging_argsÚlog_rust_post_callr©   Úrust_responser7   re   rC   ra   rE   rb   rš   rc   rˆ   r¤   r£   rž   r;   rA   s(   `````````````` ```                @@@@@@rf   Ú
completionz"AnthropicChatCompletion.completion@  s@  ÿÿþ€ õ( 	UÝ7äŸ-™-¨Ó8ˆØ'×+Ñ+¨H°dÓ;ˆØ!0×!4Ñ!4°[À%Ó!Hˆ	Ø)8×)<Ñ)<Ð=PÐRWÓ)XÐØ×ÑÐ:¸DÔAØ#(ÐÜ—=‘= Ó*ˆÜ!Ó#×8Ñ8ØØØØØW˜ÐWÐ0CÐEVÑWØ)Øð 9ó 
ˆð .×FÑFØÜ!Ð"5Ó6ð Gó 
ˆð ˆ>ÜÐDÀUÀGÈ?Ð[nÐZoÐpÓqÐqð	œu¤T¬4 ZÑ0÷ 	ô 	ð4'
Ü×(Ñ(¨uÔ5ð'
àð'
Ðô "?ØØØ0Ø 3Ø)Øô"
ˆñ ð #Ø (ñ(ð +ð(ð
 %Ø"ñ(Ðð × Ñ  x¸ÐRcÐ ÔdÜ(D×(TÑ(TØ'Ø!ØØ 1ô	)Ðð ˜dÑ"÷÷ ÷ ð ô8 4×QÑQØØ%Ø$8Ø#1Ø#Ø%Ø(;Ø")Ø#Ø 2Ø$3ôð ô $@×#PÑ#PØØ!Ø 4Ø-ØØ!Ø$7Ø%ØØ.ô$ˆMð Ð(Ø$Ð$á%›‰ˆ�ñ Ø× Ñ ØØà+/Ø (Ø&ñ!ð !ô ñ 	Ð+Ð,=Ð+>Ð?Ô@Ø˜$Ñà˜$‘áÐLÔMØ!'��X‘Ø×7Ñ7ØØ%ØØ%Ø'9Ø#1Ø"/Ø%Ø#Ø +Ø$3Ø!Ø&7Ø'Ø#1Ø'Ø#Ø#Ø&,Ð&8¼ZÈÔP`Ô=a˜Fð' 8ó ð ð& hlð' 8ó ð ð, ×0Ñ0ØØ%ØØ%Ø'9Ø#1Ø"/Ø%Ø#Ø$*Ø +Ø$3Ø!Ø&7Ø#1Ø'Ø#Ø!Ø'Ø#ð) 1ó ð ð2 ˜$‘à!'��X‘Ü-;Ø!Ø%Ø#ÜŸ™ DÓ)ØØ%Ø +Ø#Ø'Ù:I˜/×-Ñ-¨gÔ6Ètô & n´dÔ;ð '×*Ñ*Ô+NÔOà!ô.Ñ*Ð! 7ñ" +Ø&7ØØ(3Ø +Ü&?ÀÓ&Hôð ð �>¬°F¼KÔ)HÜ.°yÀ'Ð6JÔK‘Fà#�FðØ&,§k¡kØ Ø 'Ü!ŸZ™Z¨Ó-Ø 'Ø$/ð '2ó '�Hð, ×(Ñ(ØØ!Ø)Ø#ØØØØ+Ø)ØØð )ó 
ð 	
øô !ò Ü)0°°MÀ3Ó)G�KÜ$+¨A¨y¸$Ó$?�MÜ!(¨¨F´C¸³FÓ!;�JÜ,3°A°zÀ4Ó,H�NØ$Ð,±Ü(/°À	È4Ó(P˜Ù%¬'°.À&Ô*IÜ%,¨^¸VÀZÓ%P˜
Ü(Ø *Ø$/Ø -ôð ûðús   Ì)M$ Í$	O)Í-A7O$Ï$O)c                  ó   — y rr   © ©ru   s    rf   Ú	embeddingz!AnthropicChatCompletion.embeddingm  s   € àrw   )r>   N)Ú__name__Ú
__module__Ú__qualname__rt   r]   Úlistr†   r#   r   ÚfloatrV   ÚTimeoutr   Úboolr�   r   r›   rÀ   rÄ   Ú__classcell__)rv   s   @rf   rp   rp   Å   só  ø„ õð( ØØØñ)0àð0ð ð0ð ð	0ð
 !ð0ð &ð0ð  ð0ð ˜Ÿ™Ñ&ð0ð ! 4Ñ'ð0ð )ð0ð ð0ð  ó!0ðJ ØØ*.ñ+C
àðC
ð ðC
ð ð	C
ð
 !ðC
ð &ðC
ð  ðC
ð ˜Ÿ™Ñ&ðC
ð ðC
ð ðC
ð  ð!C
ð" ð#C
ð$ &ð%C
ð* ! 4Ñ'ð+C
ð, 
ˆ}Ð3Ð3Ñ	4ó-C
ðh ØØØñ%k
àðk
ð ðk
ð ð	k
ð
 !ðk
ð !ðk
ð &ðk
ð  ðk
ð )ðk
ð ðk
ð ˜Ÿ™Ñ&ðk
ð ók
öZ	rw   rp   c                   ó
  — e Zd Z	 	 	 d$dededz  dedz  deeef   dz  fd„Zedefd„«       Zej                  d	eddfd
„«       Zdefd„Z
deez  defd„Zdedeeedz  eeez     eeef   edz  f   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dz  deeedz  f   fd„Zdedeeedz  eeef   dz  f   fd„Zd%dedededz  fd„Zdededz  fd„Zd„ Zd „ Z d!„ Z!d"„ Z"dedefd#„Z#y)&r^   NrK   r;   r<   r=   c                 óX  — || _         | j                   | _        g | _        d| _        || _        || _        |xs i | _        t        «       | _        d| _	        d| _
        t        «       | _        d| _        d | _        g | _        g | _        g | _        i | _        g | _        d | _        d | _        y )NéÿÿÿÿFÚ
valid_json)rJ   Úresponse_iteratorÚcontent_blocksÚ
tool_indexr;   r<   r=   r'   Úresponse_idÚis_response_format_toolÚconverted_response_format_toolr   Ú_json_bufferÚ
chunk_typeÚcurrent_content_block_typeÚweb_search_resultsÚcompaction_blocksÚreasoning_content_chunksÚ_server_tool_inputsÚtool_resultsÚ_current_server_tool_idÚ_container_id)ru   rJ   rK   r;   r<   r=   s         rf   rt   zModelResponseIterator.__init__s  sÁ   € ð #5ˆÔØ!%×!8Ñ!8ˆÔØ79ˆÔØˆŒØ"ˆŒØˆŒ
ð 6KÒ5PÈbˆÔ"ä'›>ˆÔð .3ˆÔ$à49ˆÔ+ô 4Ó5ˆÔØEQˆŒð 7;ˆÔ'ð 9;ˆÔð 8:ˆÔð 46ˆÔ%ð 46ˆÔ Ø24ˆÔØ37ˆÔ$Ø)-ˆÕrw   r>   c                 ó6   — | j                   j                  «       S rr   )r×   ÚsnapshotrÃ   s    rf   Úaccumulated_jsonz&ModelResponseIterator.accumulated_jsonª  s   € à× Ñ ×)Ñ)Ó+Ð+rw   Úvaluec                 ó:   — | j                   j                  |«       y rr   )r×   Úset)ru   rä   s     rf   rã   z&ModelResponseIterator.accumulated_json®  s   € à×Ñ×Ñ˜eÕ$rw   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
        rL   r   FÚdeltaÚtypeÚ
text_deltaÚthinking_deltaÚinput_json_deltaÚpartial_jsonT)ÚlenrÒ   r…   )ru   ÚargsÚblocks      rf   Ú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Ó>Ñ>‘ð	?ô ˆt‹9˜Š>ØØrw   Úanthropic_usage_chunkc                 óú   — | j                   rdj                  | j                   «      nd }t        «       j                  t	        t
        |«      || j                  ¬«      }|j                  �|j                  | _        |S )NrL   )Úusage_objectÚreasoning_contentr<   )rÜ   Újoinr/   Úcalculate_usager	   r†   r<   )ru   rò   rõ   Úusages       rf   Ú_handle_usagez#ModelResponseIterator._handle_usageÉ  sk   € ØMQ×MjÒMj 2§7¡7¨4×+HÑ+HÔ#IÐptÐÜ&Ó(×8Ñ8ÜœdÐ$9Ó:Ø/Ø—*‘*ð 9ó 
ˆð
 �;‰;Ð"ØŸ™ˆDŒJØˆrw   Úchunkc                 ó  — d}d}i }d}t        di |¤Ž}g }| j                  j                  |«       d|d   v r
|d   d   }�nBd|d   v r9| j                  dv �r,t	        t
        ddd|d   d   dœ| j                  d	œ«      }�nd
|d   v r|d   d
   |d
<   nïd|d   v sd|d   v rµ|d   j                  d«      }t        |t        «      r2|r0| j                  j                  |«       |}t        d|¬«      g}||d<   |d   j                  d«      }	t        |	t        «      rg|	ret        ddj                  d„ | j                  D «       «      |	¬«      g}||d<   |€/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
        rL   Nr‘   rè   rí   ©Útool_useÚserver_tool_useÚfunction©ÚnameÚ	arguments©Úidré   rÿ   ÚindexÚcitationÚthinkingÚ	signature)ré   r  Úthinking_blocksc              3   ó¤   K  — | ]H  }t        |d    j                  d«      t        «      r$t        t        |d    j                  d«      «      –— ŒJ y­w)rè   r  N)r\   r…   r]   r	   )Ú.0rð   s     rf   ú	<genexpr>zDModelResponseIterator._content_block_delta_helper.<locals>.<genexpr>  sG   è ø€ ò )à %Ü)¨%°©.×*<Ñ*<¸ZÓ*HÌ#ÔNô !¤ e¨G¡n×&8Ñ&8¸Ó&D×Eñ)ùs   ‚AA)ré   r  r  Úcontentré   Úcompaction_delta©ré   r  rÂ   )r   rÒ   ÚappendrÙ   r	   r   rÓ   r…   r\   r]   rÜ   r   rö   )
ru   rú   r‘   rý   Úprovider_specific_fieldsrõ   Úcontent_blockr	  Úthinking_contentr  s
             rf   Ú_content_block_delta_helperz1ModelResponseIterator._content_block_delta_helperÔ  s$  € ð ˆØ7;ˆØ*,Ð Ø(,ÐÜ0Ñ9°5Ñ9ˆØceˆà×Ñ×"Ñ" =Ô1Ø�] 7Ñ+Ñ+Ø  Ñ)¨&Ñ1ŠDØ˜}¨WÑ5Ñ5ð ×.Ñ.Ð2QÒQÜÜ/à"Ø *à$(Ø)6°wÑ)?ÀÑ)Oñ%ð "&§¡ñó’ð ˜=¨Ñ1Ñ1Ø3@ÀÑ3IÈ*Ñ3UÐ$ ZÒ0Ø˜=¨Ñ1Ñ1°[ÀMÐRYÑDZÑ5ZØ&3°GÑ&<×&@Ñ&@ÀÓ&LÐÜÐ*¬CÔ0Ñ5EØ×-Ñ-×4Ñ4Ð5EÔFØ$4Ð!ä/Ø'Ø!1ôð#�ð ?NÐ(Ð):Ñ;à,¨WÑ5×9Ñ9¸+ÓFˆIÜ˜)¤SÔ)©iä/Ø'Ø!#§¡ñ )à)-×)<Ñ)<ô)ó "ð
 #,ôð
#�ð ?NÐ(Ð):Ñ;Ø$Ð,Ø(*Ñ%Ø˜-¨Ñ0Ñ0°]À7Ñ5K×5OÑ5OÐPVÓ5WÐ[mÒ5mð +Ø(¨Ñ1°)Ñ<ñ<Ð$Ð%7Ñ8ð ØØØ$Øð
ð 	
rw   Úcontent_block_startr  c                 ó<   — t        d|d   d   ¬«      g}||d<   ||fS )z6
        Handle the redacted thinking content
        Úredacted_thinkingr  r7   )ré   r7   r	  )r   )ru   r  r  r	  s       rf   Ú!_handle_redacted_thinking_contentz7ModelResponseIterator._handle_redacted_thinking_content)  s>   € ô 0Ø(Ø(¨Ñ9¸&ÑAôð"
ˆð 7FÐ Ð!2Ñ3àÐ 8Ð8Ð8rw   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…   )ru   rú   r  r  r  s        rf   Úget_content_block_startz-ModelResponseIterator.get_content_block_start;  sS   € ÷	
ð
 �9‰9�_ bÓ)×-Ñ-¨fÓ5¸ÒCÙ":Ñ"C¸UÑ"CÐð #Ð"ñ #8Ñ"@¸%Ñ"@Ðà"Ð"rw   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_idrL   r  ÚcommandÚcode_interpreter_callÚ	completed)ré   r  ÚcodeÚcontainer_idÚstatusÚoutputs)	rÞ   r…   r   rÝ   r\   r†   r  r   rà   )ru   ÚresultsÚtrÚcall_idr  Úlog_outputsÚ
tool_inputr$  s           rf   Ú_build_code_interpreter_resultsz5ModelResponseIterator._build_code_interpreter_resultsH  sÃ   € ð ˆØ×#Ñ#ò 	ˆBØ�v‰v�f‹~Ð!BÒBØØ—f‘f˜]¨BÓ/ˆGØ—f‘f˜Y¨Ó+ˆGÜ<¸WÓEˆKØ×1Ñ1×5Ñ5°g¸rÓBˆJÜ4>¸zÌ4Ô4P�:—>‘> )¨RÔ0ÐVXˆDØ�N‰NÜ)Ø0ØØØ!%×!3Ñ!3Ø&Ø'ôõ	ð	ð$ ˆrw   c                 ó²
  — 	 |j                  dd«      xs d}d}d }d}d }i }d }d }	d}
|dk(  r	 | j                  |¬«      \  }}}	}}�nt|dk(  �r…	 | j                  |¬«      }g | _        |d   d   | _        |d   d   dk(  r
|d   d   }�n2|d   d   d	k(  s|d   d   d
k(  rë| xj
                  dz  c_        |d   d   }| j                  r|| j                  v r| j                  |   }t        |d   d   dt        |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(  røt-        d7i |¤Ž | 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,	 tA        d7i |¤Ž}d,|d-   v ra| jC                  |d-   d,   ¬.«      }nH|d/k(  rC	 |j                  d/i «      xs i }|j                  d-d «      xs t        |«      }tE        |d0¬1«      ‚| jG                  ||¬2«      \  }}tI        tK        |
tM        ||�|gnd |r|nd |	r|	nd |¬3«      |¬4«      g|| jN                  ¬5«      }|S # t2        j6                  t8        f$ r Y �Œvw xY w# t2        j6                  $ r tQ        d6|› �«      ‚w xY w)8Nré   rL   r   Úcontent_block_delta©rú   r  r  r‘   rý   rþ   r-   r  r  rÿ   r   r  rO   Ú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_startrø   rF   ©rò   ÚerrorrG   )rF   rE   )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†   r]   r   r  rÛ   r  ÚendswithrÚ   rÞ   r-  r   rñ   r\   rƒ   ÚloadsÚJSONDecodeErrorÚ	TypeErrorrÕ   Ú_handle_message_deltarà   r   rù   r+   Ú_handle_json_mode_chunkr$   r%   r    rÔ   r³   )ru   rú   Ú
type_chunkr‘   rý   rA  rø   r  rõ   r	  r  r  Ú_stream_tool_namer,  Úcaller_dataÚcontent_typeÚis_emptyrï   rð   rí   r<  r%  Úmessage_start_blockÚ_error_dictrF   Úreturned_chunks                             rf   Úchunk_parserz"ModelResponseIterator.chunk_parseri  s‹  € ð^	KØ %§	¡	¨&°"Ó 5Ò ;¸ˆJàˆDØ;?ˆHØˆMØ"&ˆEØ79Ð$Ø,0ÐØnrˆOð ˆEØÐ2Ò2ðð ×4Ñ4¸5Ð4ÓAñØØØ#Ø,Ú%àÐ4Ó4ðð
 .2×-IÑ-IÐPUÐ-IÓ-VÐ#Ø&(�Ô#à2EÀoÑ2VÐW]Ñ2^�Ô/Ø& Ñ7¸Ñ?À6ÒIØ.¨Ñ?ÀÑG’Dà'¨Ñ8¸Ñ@ÀJÒNØ*¨?Ñ;¸FÑCÐGXÒXà—O’O qÑ(•Oð )<¸OÑ(LÈVÑ(TÐ%Ø×1Ò1Ð6GÈ4×KeÑKeÑ6eØ,0×,FÑ,FÐGXÑ,YÐ)ô  ;Ø.¨Ñ?ÀÑEØ'Ü!DØ!2Ø&(ô"ð #Ÿo™oô �Hð +¨?Ñ;¸FÑCÐGXÒXØ7JÈ?Ñ7[Ð\`Ñ7a˜Ô4Ø,?ÀÑ,P×,TÑ,TÐU\Ð^`Ó,a˜
ØQ[˜×0Ñ0°×1MÑ1MÑNàÐ#6°Ñ#GÒGØ-@ÀÑ-QÐRZÑ-[˜Ú&Ü15´d¼3Ä¸8±nÀkÓ1R˜H XÓ.Ø(¨Ñ9¸&ÑAÐEXÒXð ×>Ñ>Ø,?Ø1Ið ?ó ñØ'Ú0ð )¨Ñ9¸&ÑAÀ\ÒQð ×*Ñ*×1Ñ1Ð2EÀoÑ2VÔWØDH×DZÑDZÐ,Ð-@ÑAà ,Ø#6°Ñ#G×#KÑ#KÈIÐWYÓ#ZñDÐ,Ð-?Ó@ð
 )¨Ñ9¸&ÑA×JÑJÈ>ÕZà*=¸oÑ*NÈvÑ*V�Lð $Ð'?Ò?ð ×/Ñ/×6Ñ6Ð7JÈ?Ñ7[Ô\ØIM×I`ÑI`Ð0Ð1EÓFØ%Ð)@Ò@ð ×/Ñ/×6Ñ6Ð7JÈ?Ñ7[Ô\ØIM×I`ÑI`Ð0Ð1EÓFØ%Ð)BÓBð ×)Ñ)×0Ñ0Ð1DÀ_Ñ1UÔVØCG×CTÑCTÐ0°Ñ@àOS×OsÑOsÓOuÐ0Ð1KÓLàÐ3Ò3Ü Ñ) 5Ò)à×2Ñ2Ð6UÑUØ&*×&EÑ&EÓ&G�HÙÜ#>Ø#Ø!+Ü%HØ%)Ø*.ô&ð #'§/¡/ô$˜ð ×6Ñ6Ð:KÒKÐPT×PlÒPlØ!˜Ø%)×%8Ñ%8ò 9˜EØ$ W™~¨fÑ5Ð9KÓKØ/4°W©~×/AÑ/AÀ.Ó/Q Ü#-¨l¼CÕ#@Ø$(¨LÑ$8¡Dð	9ñ
  ð%ÜY]×YcÑYcÐdhÓYi × 8Ñ 8¸×9UÑ9UÑ Vð 8<˜Ô4à/4�Ô,à26�Õ/Ø˜}Ò,ð Ø˜Ò.Ø26×2LÑ2LÈUÓ2SÑ/�˜u iÙØ<EÐ,¨[Ñ9ô BLÈIÔW[ÔA\¨)¯-©-¸Ô*=Ðbf�LÙ#¨×(9Ò(9Ø-9˜Ô*ØOS×OsÑOsÓOuÐ0Ð1KÒLØ˜Ò.ðô& .?Ñ-GÀÑ-GÐ#ØÐ1°)Ñ<Ñ<Ø ×.Ñ.ÐEXÐYbÑEcÐdkÑElÐ.Óm‘EØ˜wÒ&ðð &+§Y¡Y¨w¸Ó%;Ò%A¸r�Ø!,§¡°¸DÓ!AÒ!OÄSÈÃZ�Ü$Ø#Ø #ôð ð
 "×9Ñ9¸tÈhÐ9ÓW‰NˆD�(ä$7ä$Ø#Ü#Ø$(Ø5=Ð5I¨¡zÈtÙRjÑ6NÐptÙ@O©_ÐUYØ.?ôð '4ô
ðð Ø×#Ñ#ô%ˆNð$ "Ð!øôY %)×$8Ñ$8¼)Ð#Dò %Ú $ð%ûô\ ×#Ñ#ò 	KÜÐAÀ%ÀÐIÓJÐJð	Kús=   ‚MT4 Í$T4 Î	T4 Î,T Î:ET4 ÔT1Ô-T4 Ô0T1Ô1T4 Ô4"U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  rL   )r@  T)r;   r…   r   rÕ   r/   Ú!_convert_tool_response_to_messager  rÖ   )ru   r‘   rý   Ú	tool_namerF   s        rf   rH  z-ModelResponseIterator._handle_json_mode_chunkJ  s¢   € ð2 �~Š~ Ð!1Ø˜�>Ð!ð �<‰<˜ÓÐ)ð  (Ÿ|™|¨J¸Ó;×?Ñ?ÀÈÓKˆIØ+4Ô8QÑ+QˆDÔ(ð ×'Ò'Ü,×NÑNÐ[cÐZdÔeˆGØÐ"Ø—‘Ò,¨"�Ø�à6:�Ô3à�Xˆ~Ðrw   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)rA  rø   r>  r<  rÂ   )r   r   r…   rÖ   rù   )ru   rú   r;  rA  rø   r<  s         rf   rG  z+ModelResponseIterator._handle_message_deltax  s   € ô  1Ñ9°5Ñ9ˆÜ)¸ÀgÑ8N×8RÑ8RÐS`ÐbhÓ8iÒ8sÐmsÔtˆð ×.Ò.Ø"ˆMØ×)Ñ)ÀÈgÑ@VÐ)ÓWˆØ(¨Ñ1×5Ñ5°kÓBˆ	Ø˜e YÐ.Ð.rw   Údata_strÚis_finalc                 óú   — | j                   j                  |«       |s| j                   j                  «       sy	 | j                   j                  «       \  }}|syt	        |t
        «      r| j                  |¬«      S ŒC)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

        Mid-stream, defer parsing until the buffer's last byte can close a value:
        attempting a parse after every fragment of one large object is O(n^2) and
        holds the GIL, freezing the event loop. At end of stream (is_final) no more
        data is coming, so drain whatever complete values remain regardless of the
        trailing byte.

        Args:
            data_str: The JSON string to parse (without "data:" prefix)
            is_final: True when called from the end-of-stream drain, where the
                trailing-byte heuristic no longer applies

        Returns:
            ModelResponseStream if JSON is complete, None if still accumulating
        Nr0  )r×   r  Úcould_close_jsonÚpop_next_valuer\   r†   rQ  )ru   rX  rY  ÚfoundÚdecodeds        rf   Ú_handle_accumulated_json_chunkz4ModelResponseIterator._handle_accumulated_json_chunkŒ  ss   € ð* 	×Ñ× Ñ  Ô*á × 1Ñ 1× BÑ BÔ DØàØ!×.Ñ.×=Ñ=Ó?‰NˆE�7ÙØÜ˜'¤4Ô(Ø×(Ñ(¨wÐ(Ó7Ð7ð rw   Ú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ã   r0  )rØ   r_  rƒ   rD  rQ  rE  )ru   r`  rX  Ú	data_jsons       rf   Ú_parse_sse_dataz%ModelResponseIterator._parse_sse_data­  s„   € ð # 1 2˜,ˆà�?‰?Ð0Ò0à×6Ñ6°xÓ@Ð@ð	AÜ#Ÿz™z¨(Ó3ˆIØ×$Ñ$¨9Ð$Ó5Ð5øÜ×#Ñ#ò 	Aà0ˆDŒOØ×6Ñ6°xÓ@Ò@ð	Aús   §&A Á+A<Á;A<c                 ó   — | S rr   rÂ   rÃ   s    rf   Ú__iter__zModelResponseIterator.__iter__Ç  s   € Øˆrw   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        $ r, | j                  r| j	                  dd¬«      }|�|cY S 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©NTrL   )rX  rY  z#Error receiving chunk from stream: úutf-8údata:rÏ   Fr   )r‘   Úis_finishedrA  rø   r  rý   zError parsing chunk: z,
Received chunk: )rÑ   Ú__next__ÚStopIterationr×   r_  r³   ÚRuntimeErrorr\   ÚbytesÚdecodeÚfindÚ
startswithrd  r!   ©ru   rú   Úresultra   r`  r  s         rf   rl  zModelResponseIterator.__next__Ê  sS  € Øð
NØ×.Ñ.×7Ñ7Ó9�ðZØ �Ü˜e¤UÔ+Ø$Ÿ|™|¨GÓ4�HØ$ŸM™M¨'Ó2�EØ ’{Ø#+¨E¨FÐ#3˜à×&Ñ& wÔ/Ø!×1Ñ1°(Ó;�FØÐ)Ø%˜ô 1ØØ$)Ø&(Ø"ØØ!%ôð ð	 *ð/ øô !ò $à×$Ò$Ø!×@Ñ@È"ÐW[Ð@Ó\�FØÐ)Ø%šÜ#Ð#Üò NÜ"Ð%HÈÈÐ#LÓMÐMûðNûô2 !ò $Ü#Ð#Üò ZÜ"Ð%:¸1¸#Ð=PÐQVÐPWÐ#XÓYÐYûðZús;   ƒB žA#C' ÂC' Â,C$ÃC$ÃCÃC$Ã'DÃ>DÄDc                 óD   — | j                   j                  «       | _        | S rr   )rJ   Ú	__aiter__Úasync_response_iteratorrÃ   s    rf   rv  zModelResponseIterator.__aiter__ô  s   € Ø'+×'>Ñ'>×'HÑ'HÓ'JˆÔ$Øˆrw   c              ƒ   óJ  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        $ r, | j                  r| j	                  dd¬«      }|�|cY S 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rh  )rw  Ú	__anext__ÚStopAsyncIterationr×   r_  r³   rn  r\   ro  rp  rq  rr  rd  r!   rs  s         rf   ry  zModelResponseIterator.__anext__ø  sZ  è ø€ Øð
NØ"×:Ñ:×DÑDÓF×F�ðZØ �Ü˜e¤UÔ+Ø$Ÿ|™|¨GÓ4�HØ$ŸM™M¨'Ó2�EØ ’{Ø#+¨E¨FÐ#3˜à×&Ñ& wÔ/Ø!×1Ñ1°(Ó;�FØÐ)Ø%˜ô 1ØØ$)Ø&(Ø"ØØ!%ôð ð	 *ð/ àFùÜ%ò )à×$Ò$Ø!×@Ñ@È"ÐW[Ð@Ó\�FØÐ)Ø%šÜ(Ð(Üò NÜ"Ð%HÈÈÐ#LÓMÐMûðNûô2 &ò )Ü(Ð(Üò ZÜ"Ð%:¸1¸#Ð=PÐQVÐPWÐ#XÓYÐYûðZüsn   ‚D#…B! ¢B£B! ¨A#C3 ÂD#ÂC3 ÂD#ÂB! Â!,C0ÃD#ÃC0ÃC+Ã+C0Ã0D#Ã3D Ä
DÄD Ä D#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.
        ri  rj  rÏ   Nrb  r0  )r  )
r\   ro  rp  rq  rr  rƒ   rD  rQ  r$   rÔ   )ru   rú   r`  r  rc  s        rf   Ú"convert_str_chunk_to_generic_chunkz8ModelResponseIterator.convert_str_chunk_to_generic_chunk!  s‹   € ð ˆÜ�eœUÔ#Ø—|‘| GÓ,ˆHð  —}‘} WÓ-ˆØ�BŠ;Ø  Ð'ˆHà×Ñ˜wÔ'Ü#Ÿz™z¨(°1°2¨,Ó7ˆIØ×$Ñ$¨9Ð$Ó5Ð5ä&¨$×*:Ñ*:Ô;Ð;rw   )FNN)F)$rÅ   rÆ   rÇ   rË   r]   r†   rt   Úpropertyrã   Úsetterrñ   r   r&   rù   r´   r   rÈ   r   r   r   r  r   r  r  r-  r$   rQ  rH  rG  r_  rd  rf  rl  rv  ry  r|  rÂ   rw   rf   r^   r^   r  sT  „ ð
 "'Ø Ø7;ñ5.ð ð5.ð ˜$‘;ð	5.ð
 �T‰zð5.ð  $ C¨ H™~°Ñ4ó5.ðn ð, #ò ,ó ð,ð ×Ñð% cð %¨dò %ó ð%ð¨Dó ð.	°4¸*Ñ3Dð 	Èó 	ðS
ØðS
à	ØØ# dÑ*ØÐ(Ð+NÑNÑOØˆS�#ˆX‰Øˆd‰
ð		ñ
óS
ðj9à.ð9ð #' s¨C x¡.ð9ð 
ˆtÐ7Ñ8¸$¸sÀC¸x¹.ÐHÑ	Ió	9ð$#¨Tð #Ð6Gó #ð°ó ðB_K $ð _KÐ+>ó _KðB,Øð,Ø#>ÀÑ#Eð,à	ˆsÐ/°$Ñ6Ð6Ñ	7ó,ð\/¨4ð /°E¸#¸uÀt¹|ÈTÐRUÐWZÐRZÉ^Ð^bÑMbÐ:bÑ4có /ñ(8°sð 8Àdð 8ÐWjÐmqÑWqó 8ðBA¨ð AÐ0CÀdÑ0Jó Aò4ò'ZòTò'ZðR<¸ð <Ð@Sô <rw   r^   )NN)UÚ__doc__r®   rƒ   Úcollections.abcr   Útypingr   r   r   r   r   r	   rV   rS   Úlitellm.litellm_core_utilsÚlitellm.typesÚlitellm.types.utilsÚ&litellm.anthropic_beta_headers_managerr
   Úlitellm.constantsr   Ú'litellm.litellm_core_utils.core_helpersr   Ú4litellm.litellm_core_utils.json_fragment_accumulatorr   Ú&litellm.llms.custom_httpx.http_handlerr   r   r   r   Úlitellm.rust_bridger   r·   Ú$litellm.rust_bridge.chat_completionsr   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/   Ú*litellm.litellm_core_utils.litellm_loggingr0   r{   r‚   r2   Ú)litellm.llms.base_llm.chat.transformationr3   r]   r†   rÈ   rÉ   rÊ   rË   r´   ÚHeadersrg   rn   rp   r^   rÂ   rw   rf   ú<module>r”     s  ðñó Û Ý $ß B× Bã ã Û !Û Û õõ 8Ý EÝ X÷ó õ QÝ N÷÷ ÷ó ÷÷	÷ 	ó 	õ ß Dß PáÝWÝPÝDð Ø37ñ9/Ø˜tÑ#ð9/àð9/ð ð9/ð ð	9/ð
 ð9/ð ð9/ð �U—]‘]Ñ" TÑ)ð9/ð ð9/ð �‰:ð9/ð    S ™>¨DÑ0ð9/ð ˆ3�—‘ÐÑó9/ðL Ø37ñA/Ø˜$ÑðA/àðA/ð ðA/ð ð	A/ð
 ðA/ð ðA/ð �U—]‘]Ñ" TÑ)ðA/ð ðA/ð �‰:ðA/ð    S ™>¨DÑ0ðA/ð ˆ3�—‘ÐÑóA/ôHj˜gô j÷ZF<ò F<rw   