Ë
    tPêj  ã                  óz  — U d dl mZ d dlmZmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlZd d	lmZ d d
lmZmZmZmZ erd dlmZ  ei «      Zded<    edd¬«       G d„ d«      «       Zdd„Zdd„Zd d„Z 	 	 	 	 d!d„Z!d"d„Z"d#d„Z#	 	 	 	 d$d„Z$d%d„Z%edf	 	 	 	 	 	 	 d&d„Z&d'd„Z'd(d„Z(	 	 	 	 d)d„Z)y)*é    )Úannotations)ÚMappingÚSequence)Ú	dataclass)ÚdateÚdatetimeÚtimezone)Úgroupby)ÚMappingProxyType)ÚTYPE_CHECKINGÚFinalN)Úverbose_logger)ÚDEFAULT_DEPRECATION_WARN_DAYSÚDeprecationStatusÚModelDeprecationInfoÚModelDeprecationResponse)ÚRouterzFinal[Mapping[str, object]]Ú_NO_MODEL_METADATAT)ÚfrozenÚslotsc                  ó,   — e Zd ZU ded<   ded<   ded<   y)Ú_ResolvedDeprecationr   Údeprecation_dateú
str | NoneÚlitellm_modelÚlitellm_providerN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úq/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/common_utils/model_deprecation.pyr   r      s   … àÓØÓØ Ô r"   r   c                óî   — t        | t        «      r| j                  «       S t        | t        «      r| S t        | t        «      sy 	 t        j                  | j                  «       «      S # t        $ r Y y w xY w©N)Ú
isinstancer   r   ÚstrÚfromisoformatÚstripÚ
ValueError)Ú	raw_values    r#   Ú_parse_deprecation_dater,       se   € Ü�)œXÔ&Ø�~‰~ÓÐÜ�)œTÔ"ØÐÜ�i¤Ô%ØðÜ×!Ñ! )§/¡/Ó"3Ó4Ð4øÜò Ùðús   Á"A( Á(	A4Á3A4c                ó.  — t        | t        «      r| sy t        j                  j	                  | «      }t        |t
        «      sy t        |j	                  d«      «      }|€y |j	                  d«      }t        || t        |t        «      r|¬«      S d ¬«      S )Nr   r   ©r   r   r   )r&   r'   ÚlitellmÚ
model_costÚgetr   r,   r   )Ú	model_keyÚentryÚparsedÚproviders       r#   Ú_cost_map_lookupr6   -   s�   € Ü�i¤Ô%©YØÜ×%Ñ%×)Ñ)¨)Ó4€EÜ�eœWÔ%ØÜ+¨E¯I©IÐ6HÓ,IÓJ€FØ€~ØØ—i‘iÐ 2Ó3€HÜØØÜ%/°¼#Ô%>˜ôð ð EIôð r"   c                óT   — | j                  |«      }t        |t        «      r|S t        S r%   )r1   r&   r   r   )Ú
deploymentÚkeyÚvalues      r#   Ú_mapping_fieldr;   >   s%   € Ø—>‘> #Ó&€EÜ˜u¤gÔ.ˆ5ÐFÔ4FÐFr"   c                óî  — t        | d«      }t        | d«      j                  d«      }t        |j                  d«      «      }|�H|j                  d«      }t        |t	        |t
        «      r|ndt	        |t
        «      r|¬«      S d¬«      S t	        |t
        «      rd|v r|j                  dd	«      d	   nd}t        d
„ t        |j                  d«      «      t        |«      t        |«      fD «       d«      S )zIResolve a deployment's deprecation date, preferring its explicit overrideÚ
model_infoÚlitellm_paramsÚmodelr   Nr   r.   ú/é   c              3  ó$   K  — | ]  }|�|–— Œ
 y ­wr%   r!   )Ú.0Úresolveds     r#   ú	<genexpr>z2_resolve_deployment_deprecation.<locals>.<genexpr>U   s    è ø€ ò 	
àð
 Ð#ô ñ	
ùó   ‚Ú
base_model)	r;   r1   r,   r   r&   r'   ÚsplitÚnextr6   )r8   r=   Ú	raw_modelÚoverrider5   Ú
unprefixeds         r#   Ú_resolve_deployment_deprecationrM   C   sý   € ô ' z°<Ó@€JÜ% jÐ2BÓC×GÑGÈÓP€Iä-¨j¯n©nÐ=OÓ.PÓQ€HØÐØ$Ÿ.™.Ð);Ó<ˆÜ#Ø%Ü'1°)¼SÔ'A™)ÀtÜ)3°H¼cÔ)B˜Xô
ð 	
ð IMô
ð 	
ô 7AÀÌCÔ6PÐUXÐ\eÑUe˜	Ÿ™¨¨QÓ/°Ò2Ðko€JÜñ	
ô ! §¡°Ó!=Ó>Ü  Ó+Ü  Ó,ðô	
ð 	óð r"   c                ó   — | dk  ry| |k  ryy)Nr   Ú
deprecatedÚimminentÚupcomingr!   )Ú
days_untilÚwarn_within_dayss     r#   Ú	_classifyrT   b   s   € Ø�A‚~ØØÐ%Ò%ØØr"   c           
     ó
  — | j                  d«      }t        |t        «      r|sy t        | «      }|€y |j                  |z
  j
                  }t        ||j                  |j                  |t        ||«      |j                  ¬«      S )NÚ
model_name)rV   r   r   Údays_until_deprecationÚstatusr   )
r1   r&   r'   rM   r   Údaysr   r   rT   r   )r8   ÚtodayrS   rV   rD   rR   s         r#   Ú_build_infor[   j   s�   € Ø"Ÿ™ |Ó4€JÜ�j¤#Ô&©jØä5°jÓA€HØÐØà!×2Ñ2°UÑ:×@Ñ@€JÜØØ×,Ñ,Ø!×2Ñ2Ø)Ü˜Ð%5Ó6Ø!×2Ñ2ôð r"   c                óZ   — t        | d„ ¬«      }t        d„ t        |d„ ¬«      D «       «      S )zGReport a model group carrying the same date on several deployments oncec                ó2   — | j                   | j                  fS r%   ©rV   r   ©r?   s    r#   ú<lambda>z_dedupe.<locals>.<lambda>‚   s   € °u×7GÑ7GÈ×I_ÑI_Ð6`€ r"   ©r9   c              3  ó8   K  — | ]  \  }}t        |«      –— Œ y ­wr%   )rI   )rC   Ú_Úgroups      r#   rE   z_dedupe.<locals>.<genexpr>ƒ   s   è ø€ ò Ù ˜˜5ŒˆU�ñùs   ‚c                ó2   — | j                   | j                  fS r%   r^   r_   s    r#   r`   z_dedupe.<locals>.<lambda>„   s   € È×HXÑHXÐZ_×ZpÑZpÐGq€ r"   )ÚsortedÚtupler
   )ÚmodelsÚordereds     r#   Ú_deduperj   ~   s3   € ô ˜FÑ(`Ôa€GÜñ Ü$+¨GÑ9qÔ$rôó ð r"   c                óD   ‡— t        t        ˆfd„| D «       d„ ¬«      «      S )Nc              3  óB   •K  — | ]  }|j                   ‰k(  sŒ|–— Œ y ­wr%   )rX   )rC   r?   rX   s     €r#   rE   z_bucket.<locals>.<genexpr>‹   s   øè ø€ ÒA�u¨%¯,©,¸&Ó*@ŒUÑAùs   ƒ˜c                ó   — | j                   S r%   )r   r_   s    r#   r`   z_bucket.<locals>.<lambda>Œ   s   € ˜e×4Ñ4€ r"   ra   )rg   rf   )rh   rX   s    `r#   Ú_bucketrn   ˆ   s#   ø€ ÜÜÛA ÔAÙ4ô	
óð r"   c                óœ  ‡‡— t        j                  t        j                  «      }|xs |j	                  «       Š| �| j                  «       xs dnd}t        t        d„ ˆˆfd„|D «       D «       «      «      }t        j                  dt        |«      t        |«      «       t        t        |d«      t        |d«      t        |d«      ‰|¬«      S )	zGBucket every deployment carrying a deprecation date by how urgent it isr!   c              3  ó$   K  — | ]  }|�|–— Œ
 y ­wr%   r!   )rC   Úinfos     r#   rE   z-collect_model_deprecations.<locals>.<genexpr>œ   s   è ø€ ò 
àØÐô ñ
ùrF   c              3  ó8   •K  — | ]  }t        |‰‰«      –— Œ y ­wr%   )r[   )rC   r8   Úeffective_todayrS   s     €€r#   rE   z-collect_model_deprecations.<locals>.<genexpr>ž   s   øè ø€ ÒrÐXbœ Z°ÐBR×SÑrùs   ƒz=model_deprecation: %d/%d deployments carry a deprecation daterO   rP   rQ   )rO   rP   rQ   rS   Ú
checked_at)r   Únowr	   Úutcr   Úget_model_listrj   rg   r   ÚdebugÚlenr   rn   )Ú
llm_routerrS   rZ   Úsnapshot_timeÚdeploymentsÚdedupedrs   s    `    @r#   Úcollect_model_deprecationsr~   ‘   s¿   ù€ ô $Ÿ<™<¬¯©Ó5€MØ"Ò: m×&8Ñ&8Ó&:€OØ@JÐ@V˜*×3Ñ3Ó5Ò;¹Ð\^€KäÜñ 
ärÐfqÔrô
ó 	
ó€Gô ×ÑØGÜˆG‹ÜˆKÓôô $Ü˜7 LÓ1Ü˜ *Ó-Ü˜ *Ó-Ø)Ø ôð r"   c                óf   — | j                  dd«      j                  dd«      j                  dd«      S )zRNeutralize Slack control characters so a model name cannot forge a mention or linkú&z&amp;ú<z&lt;ú>z&gt;)Úreplace)r:   s    r#   Ú_escape_slack_mrkdwnr„   ²   s-   € à�=‰=˜˜gÓ&×.Ñ.¨s°FÓ;×CÑCÀCÈÓPÐPr"   c           	     ó(  — | j                   dk  rdt        | j                   «      › d�nd| j                   › d�}dt        | j                  «      › d| j                  rt        | j                  «      nd› d	| j
                  j                  «       › d
|› d�	S )Nr   zalready deprecated zd agozin Údu   â€¢ `z` (provider: Úunknownz, deprecates z, ú))rW   Úabsr„   rV   r   r   Ú	isoformat)rq   Úsuffixs     r#   Ú_format_entryrŒ   ·   s¨   € ð ×&Ñ&¨Ò*ð œc $×"=Ñ"=Ó>Ð?¸uÑEà�4×.Ñ.Ð/¨qÐ1ð ð Ô$ T§_¡_Ó5Ð6ð 7ØEI×EZÒEZÔ*¨4×+@Ñ+@ÔAÐ`iÐjð kØ×+Ñ+×5Ñ5Ó7Ð8¸¸6¸(À!ð	Eðr"   c                ó  — | j                   s| j                  sy| j                   rdgd„ | j                   D «       ¢­nd}| j                  r%d| j                  › d�gd„ | j                  D «       ¢­nd}dj                  d	g|¢|¢d
‘­«      S )z�Render the alert for the deprecated and imminent buckets, None when both are empty

    Upcoming models are left out of the alert to keep it actionable.
    Nz
*Already deprecated:*c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr%   ©rŒ   ©rC   Úis     r#   rE   z3format_deprecation_alert_message.<locals>.<genexpr>Ï   s   è ø€ Ò%T¸1¤m°A×&6Ñ%Tùó   ‚r!   z
*Deprecating within z days:*c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr%   r�   r�   s     r#   rE   z3format_deprecation_alert_message.<locals>.<genexpr>Ô   s   è ø€ Ò: 1Œm˜A×Ñ:ùr’   ú
u"   *âš ï¸� Model Deprecation Warning*zl
Plan migrations to a supported model. See https://docs.litellm.ai/docs/proxy/model_management for guidance.)rO   rP   rS   Újoin)ÚsnapshotÚdeprecated_sectionÚimminent_sections      r#   Ú format_deprecation_alert_messager™   Ä   s¾   € ð ×Ò x×'8Ò'8Øð Zb×YlÒYlÐ	"ÐUÑ%TÀ×@SÑ@SÔ%TÒUÐrtð ð ×Òð % X×%>Ñ%>Ð$?¸wÐGð	
á:¨×(9Ñ(9Ô:ò	
ð
 ð ð �9‰9à0ð	
àð	
ð ð	
ðPñ		
óð r"   )r+   ÚobjectÚreturnúdate | None)r2   rš   r›   ú_ResolvedDeprecation | None)r8   úMapping[str, object]r9   r'   r›   rž   )r8   rž   r›   r�   )rR   ÚintrS   rŸ   r›   r   )r8   rž   rZ   r   rS   rŸ   r›   zModelDeprecationInfo | None)rh   úSequence[ModelDeprecationInfo]r›   ú tuple[ModelDeprecationInfo, ...])rh   r    rX   r   r›   r¡   )rz   zRouter | NonerS   rŸ   rZ   rœ   r›   r   )r:   r'   r›   r'   )rq   r   r›   r'   )r–   r   r›   r   )*Ú
__future__r   Úcollections.abcr   r   Údataclassesr   r   r   r	   Ú	itertoolsr
   Útypesr   Útypingr   r   r/   Úlitellm._loggingr   Ú%litellm.types.proxy.model_deprecationr   r   r   r   Úlitellm.routerr   r   r    r   r,   r6   r;   rM   rT   r[   rj   rn   r~   r„   rŒ   r™   r!   r"   r#   ú<module>r«      s  ðÞ "ç -Ý !ß -Ñ -Ý Ý "ß 'ã Ý +÷ó ñ Ý%á2BÀ2Ó2FÐ Ð/Ó Fñ �$˜dÔ#÷!ð !ó $ð!ó
óó"Gð
Ø$ðà óó>óð(Ø*ðà%óóð :ØðØðàðð ðð ó	óBQó

ðØ&ðàôr"   