Ë
    uPêjê#  ã            	       óF  — d dl Z d dlmZmZmZmZmZ d dlmZ  G d„ de«      Z	 G d„ de«      Z
 G d„ d	«      Zd
ededz  fd„Zd
edeeef   fd„Zdeeef   deddfd„Zd
edefd„Zdeeef   deeef   deddfd„Zdedeeef   fd„Zddœd
ededeeef   fd„Zd
edeeef   ddfd„Zdeeef   deeef   fd„Zdede	fd„Zdee   deeeef      fd „Zdeeef   deeeef      fd!„Zd
ed"eeef   defd#„Z	 d*d
ed$ed%edz  defd&„Z 	 d*d
ed'ed(ee	   dz  defd)„Z!y)+é    N)ÚAnyÚFinalÚProtocolÚ	TypedDictÚcast)Ú	BaseModelc                   óB   — e Zd ZU eed<   eed<   edz  ed<   edz  ed<   y)ÚFallbackErrorInfoÚmessageÚtypeNÚparamÚcode)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__© ó    út/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/router_utils/add_retry_fallback_headers.pyr
   r
      s    … ØƒLØ
ƒIØ�‰:ÓØ
�‰*Ôr   r
   c                   ó"   — e Zd ZU eeef   ed<   y)Ú_HiddenParamsHostÚ_hidden_paramsN)r   r   r   Údictr   Úobjectr   r   r   r   r   r      s   … Ø˜˜f˜Ñ%Ô%r   r   c                   ó<   — e Zd ZdZdeddfd„Zd	d„Zdefd„Zd
d„Zy)Ú HiddenParamsAsyncIteratorWrappera`  
    Wraps a bare async generator/iterator (e.g. a provider's raw SSE
    streaming response) that cannot itself hold a ``_hidden_params``
    attribute, so router-derived headers (ITPM/OTPM, model-group, retry,
    fallback) can attach to a streaming response the same way they attach
    to object-based responses (e.g. ``CustomStreamWrapper``).
    ÚinnerÚreturnNc                 ó    — || _         i | _        y ©N)Ú_innerr   )Úselfr   s     r   Ú__init__z)HiddenParamsAsyncIteratorWrapper.__init__   s   € ØˆŒØ13ˆÕr   c                 ó   — | S r!   r   ©r#   s    r   Ú	__aiter__z*HiddenParamsAsyncIteratorWrapper.__aiter__   s   € Øˆr   c              ƒ   ón   K  — t        t        | j                  «      j                  «       ƒ d {  –—† S 7 Œ­wr!   )r   r   r"   Ú	__anext__r&   s    r   r)   z*HiddenParamsAsyncIteratorWrapper.__anext__"   s&   è ø€ Üœ#˜tŸ{™{Ó+×5Ñ5Ó7×7Ð7Ð7ús   ‚,5®3¯5c              ƒ   ót   K  — t        | j                  dd «      }t        |«      r |«       ƒ d {  –—†  y y 7 Œ­w)NÚaclose)Úgetattrr"   Úcallable)r#   r+   s     r   r+   z'HiddenParamsAsyncIteratorWrapper.aclose%   s1   è ø€ Ü §¡¨X°tÓ<ˆÜ�FÔÙ“(�N‰Nð Øús   ‚-8¯6°8)r   r   )r   N)	r   r   r   Ú__doc__r   r$   r'   r)   r+   r   r   r   r   r      s0   „ ñð4˜fð 4¨ó 4óð8 ó 8ôr   r   Úresponser   c                 óv   — | €y t        | t        «      st        | d«      r| S t        | d«      rt        | «      S | S )Nr   r)   )Ú
isinstancer   Úhasattrr   )r/   s    r   Ú&prepare_response_for_header_attachmentr3   +   s>   € ØÐØÜ�(œDÔ!¤W¨XÐ7GÔ%HØˆÜˆx˜Ô%Ü/°Ó9Ð9Ø€Or   c                 ó¤   — t        | t        | t        «      ¬«      }t        | |«       |j	                  d«      }t        |t        «      si }||d<   |S )N©ÚcreateÚadditional_headers)Úget_hidden_params_dictr1   r   Ú_write_hidden_paramsÚget)r/   Úhidden_paramsr7   s      r   Ú"ensure_response_additional_headersr<   5   sT   € Ü1°(Ä:ÈhÔX\ÓC]Ô^€MÜ˜ =Ô1Ø&×*Ñ*Ð+?Ó@ÐÜÐ(¬$Ô/ØÐØ.@ˆÐ*Ñ+ØÐr   r7   Úrequest_kwargsc                 ó  — t        |t        «      r|j                  d«      xs i ni }t        |t        «      r|j                  d«      nd }t        |t        «      sy d}|D ](  \  }}|j                  |«      €Œt        ||   «      | |<   Œ* y )NÚmetadataÚquality_router_decision))Úrouted_modelzx-litellm-quality-router-model)Úquality_tierzx-litellm-quality-router-tier)Ú
routed_viazx-litellm-quality-router-via)Úmatched_keywordz x-litellm-quality-router-keyword)Úcomplexity_tierz#x-litellm-quality-router-complexity)r1   r   r:   r   )r7   r=   r?   ÚdecisionÚquality_header_fieldsÚfieldÚheaders          r   Ú%apply_quality_router_decision_headersrJ   ?   s‘   € ô AKÈ>Ô[_Ô@`�~×)Ñ)¨*Ó5Ò;¹Ðfh€HÜAKÈHÔVZÔA[�h—l‘lÐ#<Ô=Ðae€HÜ�h¤Ô%Øð$Ðð /ò >‰ˆˆvØ�<‰<˜ÓÑ*Ü),¨X°e©_Ó)=Ð˜vÒ&ñ>r   c                 óv  — t        | t        «      r| j                  d«      nt        | dd «      }|€yt        |t        «      r_t	        |j                  d«      xs d«      }|r|S t	        |j                  d«      xs d«      t	        |j                  d«      xs d«      z   S t	        t        |dd«      xs d«      S )NÚusager   Útotal_tokensÚinput_tokensÚoutput_tokens)r1   r   r:   r,   Úint)r/   rL   Útotals      r   Úresponse_in_flight_token_countrR   S   s¤   € Ü,6°xÄÔ,F�8—<‘< Ô(ÌGÐT\Ð^eÐgkÓLl€EØ€}ØÜ�%œÔÜ˜5Ÿ9™9 ^Ó4Ò9¸Ó:ˆÙØˆLÜ�5—9‘9˜^Ó,Ò1°Ó2´S¸¿¹À?Ó9SÒ9XÐWXÓ5YÑYÐYÜŒw�u˜n¨aÓ0Ò5°AÓ6Ð6r   Úremaining_usageÚin_flight_tokensc                 ó~   — |ddœ}|j                  «       D ]%  \  }}|€Œ	|| vsŒ||j                  |d«      z
  | |<   Œ' y )Né   )zx-ratelimit-remaining-tokenszx-ratelimit-remaining-requestsr   )Úitemsr:   )r7   rS   rT   Úin_flight_deltarI   Úvalues         r   Úapply_remaining_usage_headersrZ   _   s\   € ð )9Ø*+ñ€Oð )×.Ñ.Ó0ò P‰ˆ�ØÑ Ð/AÒ!AØ).°×1DÑ1DÀVÈQÓ1OÑ)OÐ˜vÒ&ñPr   r;   c                 ó’   — t        | t        «      rt        d| j                  «       «      S t        | t        «      rt        d| «      S i S ©Núdict[str, object])r1   r   r   Ú
model_dumpr   )r;   s    r   Ú_normalize_hidden_paramsr_   m   s@   € Ü�-¤Ô+ÜÐ'¨×)AÑ)AÓ)CÓDÐDÜ�-¤Ô&ÜÐ'¨Ó7Ð7Ø€Ir   Fr5   r6   c          
      ó¼   — t        | t        «      r't        | j                  d«      «      }|s	|ri }|| d<   |S t        t	        t
        t        | dd «      «      «      }|S ©Nr   )r1   r   r_   r:   r   r   r,   )r/   r6   r;   s      r   r8   r8   u   s_   € ô
 �(œDÔ!Ü0°·±Ð>NÓ1OÓPˆÙ¡ØˆMØ)6ˆHÐ%Ñ&ØÐä,¬T´&¼'À(ÐL\Ð^bÓ:cÓ-dÓe€MØÐr   c                 ót   — t        | t        «      r|| d<   y t        | d«      r|t        t        | «      _        y y ra   )r1   r   r2   r   r   r   )r/   r;   s     r   r9   r9   …   s7   € Ü�(œDÔ!Ø%2ˆÐ!Ò"Ü	�Ð+Ô	,Ø;HŒÔ Ó)Õ8ð 
-r   c                 ó`   — | j                  d«      }t        |t        «      rt        d|«      S i S )Nr7   r]   )r:   r1   r   r   )r;   r7   s     r   Ú_ensure_additional_headers_dictrd   Œ   s5   € ð !.× 1Ñ 1Ð2FÓ GÐÜÐ$¤dÔ+ÜÐ'Ð);Ó<Ð<Ø€Ir   Úerrorc                 óª  — t        t        t        | dt        | «      «      «      }t        t        t        | d| j                  j
                  «      «      }t        t        t        | dd «      «      }t        t        t        | dt        | dd «      «      «      }t        t        |«      t        |«      |�t        |«      nd |�t        |«      ¬«      S d ¬«      S )Nr   r   r   Ústatus_coder   )r   r   r   r   )r   r   r,   r   Ú	__class__r   r
   )re   r   Ú
error_typer   r   s        r   Úget_fallback_error_inforj   •   s²   € Üœ&¤'¨%°¼CÀ»JÓ"GÓH€GÜœV¤W¨U°F¸E¿O¹O×<TÑ<TÓ%UÓV€JÜœ¤¨¨w¸Ó =Ó>€EÜ”vœw u¨m¼WÀUÈFÐTXÓ=YÓZÓ[€DÜÜ�G“Ü�‹_Ø!Ð-Œc�%Œj°4ØÐ*ŒS�‹Yô	ð ð 15ô	ð r   rW   c                 ób   — | D �cg c]  }t        |t        «      sŒt        d|«      ‘Œ! c}S c c}w r\   )r1   r   r   )rW   Úitems     r   Ú_coerce_error_dictsrm   ¢   s(   € Ø8=ÖX°ÄÈDÔRVÕAWŒDÐ$ dÕ+ÒXÐXùÒXs   …,›,c                 óZ  — | j                  d«      }t        |t        «      rt        t	        d|«      «      S t        |t
        «      rI	 t	        t        t        j                  |«      «      }t        |t        «      rt        t	        d|«      «      S g S # t        j                  $ r g cY S w xY w)Núx-litellm-fallback-errorszlist[object])
r:   r1   Úlistrm   r   r   r   ÚjsonÚloadsÚJSONDecodeError)r7   Úexisting_errorsÚparsed_errorss      r   Ú get_fallback_errors_from_headersrv   ¦   s”   € ð 0×3Ñ3Ð4OÓP€OÜ�/¤4Ô(Ü"¤4¨¸Ó#HÓIÐIÜ�/¤3Ô'ð	Ü+/´¼¿
¹
À?Ó8SÓ+TˆMô �m¤TÔ*Ü&¤t¨N¸MÓ'JÓKÐKØ€Iøô	 ×#Ñ#ò 	ØŠIð	ús   Á#B ÂB*Â)B*Úheadersc                 óú   — | €| S t        | t        «      st        | t        «      st        | d«      s| S t	        | t        | t        «      ¬«      }t        |«      }|j                  |«       ||d<   t        | |«       | S )zF
    Helper function to add headers to a response's hidden params
    r   r5   r7   )r1   r   r   r2   r8   rd   Úupdater9   )r/   rw   r;   r7   s       r   Ú_add_headers_to_responserz   ¶   s|   € ð ÐØˆô �x¤Ô+Ü˜8¤TÔ*Ü˜Ð"2Ô3àˆä1°(Ä:ÈhÔX\ÓC]Ô^€MÜ ?ÀÓ NÐØ×Ñ˜gÔ&Ø*<€MÐ&Ñ'ä˜ =Ô1Ø€Or   Úattempted_retriesÚmax_retriesc                 ó0   — d|i}|�||d<   t        | |«      S )z*
    Add retry headers to the request
    zx-litellm-attempted-retrieszx-litellm-max-retries)rz   )r/   r{   r|   Úretry_headerss       r   Úadd_retry_headers_to_responser   Í   s1   € ð 	&Ð'8ð/€Mð ÐØ1<ˆÐ-Ñ.ä# H¨mÓ<Ð<r   Úattempted_fallbacksÚfallback_errorsc                 ó&  — d|i}t        | |«      } |�| €| S t        | t        | t        «      ¬«      }t	        |«      }t        |«      |D �cg c]  }t        d|«      ‘Œ c}z   }t        j                  |«      |d<   ||d<   t        | |«       | S c c}w )ax  
    Add fallback headers to the response

    Args:
        response: The response to add the headers to
        attempted_fallbacks: The number of fallbacks attempted

    Returns:
        The response with the headers added

    Note: It's intentional that we don't add max_fallbacks in response headers
    Want to avoid bloat in the response headers for performance.
    zx-litellm-attempted-fallbacksr5   r]   ro   r7   )
rz   r8   r1   r   rd   rv   r   rq   Údumpsr9   )r/   r€   r�   Úfallback_headersr;   r7   re   Úmerged_errorss           r   Ú add_fallback_headers_to_responser†   Þ   s´   € ð& 	(Ð)<ð2Ðô (¨Ð2BÓC€HØÐ (Ð"2Øˆä1°(Ä:ÈhÔX\ÓC]Ô^€MÜ ?ÀÓ NÐÜ;Ð<NÓOØ6EöSØ-2ŒÐ  %Õ(òSñ €Mô 7;·j±jÀÓ6OÐÐ2Ñ3Ø*<€MÐ&Ñ'Ü˜ =Ô1Ø€OùòSs   ÁBr!   )"rq   Útypingr   r   r   r   r   Úpydanticr   r
   r   r   r   r3   r   r   r<   rJ   rP   rR   rZ   r_   Úboolr8   r9   rd   Ú	Exceptionrj   rp   rm   rv   rz   r   r†   r   r   r   ú<module>r‹      sp  ðÛ ß 8Õ 8å ô˜	ô ô&˜ô &÷ñ ð2°Vð ÀÈÁó ð°ð ¸DÀÀfÀÑ<Mó ð>Ø˜S &˜[Ñ)ð>àð>ð 
ó>ð(	7¨Vð 	7¸ó 	7ðPØ˜S &˜[Ñ)ðPà˜#˜s˜(‘^ðPð ðPð 
ó	Pð¨Fð °t¸CÀ¸KÑ7Hó ð òØðð ðð 
ˆ#ˆvˆ+Ñó	ð I 6ð I¸$¸sÀF¸{Ñ:Kð IÐPTó IðØ˜˜V˜Ñ$ðà	ˆ#ˆvˆ+Ñóð
 9ð 
Ð1Bó 
ðY˜t F™|ð Y°°T¸#¸v¸+Ñ5FÑ0Gó YðØ˜S &˜[Ñ)ðà	ˆ$ˆs�Fˆ{Ñ
Ñóð  vð ¸¸SÀ&¸[Ñ8Ið Èfó ð4 #ñ=Øð=àð=ð �t‘ð=ð ó	=ð( 7;ñ!Øð!àð!ð Ð+Ñ,¨tÑ3ð!ð ô	!r   