Ë
    uPêjm  ã                  óâ   — U d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZ erdd	lmZ d
dddœZded<   dd„Z	 d	 	 	 dd„Z	 d	 	 	 	 	 dd„Zdd„Zdd„Z G d„ de«      Zy)zê
LAR-1 Semantic Routing Strategy

Routes requests based on agent confidence level (LAR-1 protocol).
Thresholds are configurable via routing_strategy_args in router config.

LAR-1 metadata passed via request_kwargs["metadata"]["lar1"]
é    )Úannotations)ÚMapping)ÚTYPE_CHECKINGÚFinal)ÚValidationError)Úverbose_router_logger)ÚCustomRoutingStrategyBase)ÚLAR1MetadataÚLAR1Time)ÚRouterg333333Ó?g      à?gffffffæ?©ÚlowÚmediumÚhighzFinal[dict[str, float]]ÚDEFAULT_THRESHOLDSc                óH   — t        | t        t        f«      rt        | «      S |S ©N)Ú
isinstanceÚintÚfloat)ÚvalueÚdefaults     úi/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/router_strategy/lar1_routing.pyÚ_coerce_thresholdr      s   € Ü�%œ#œu˜Ô&Ü�U‹|ÐØ€Nó    Nc                óÚ   — | xs i }t        |j                  d«      t        d   «      t        |j                  d«      t        d   «      t        |j                  d«      t        d   «      dœS )NÚconfidence_threshold_lowr   Úconfidence_threshold_mediumr   Úconfidence_threshold_highr   r   )r   Úgetr   )Úrouting_strategy_argsÚargss     r   Úlar1_thresholds_from_argsr#   !   si   € ð (Ò-¨2€Dä  §¡Ð*DÓ!EÔGYÐZ_ÑG`ÓaÜ# D§H¡HÐ-JÓ$KÔM_Ð`hÑMiÓjÜ! $§(¡(Ð+FÓ"GÔI[Ð\bÑIcÓdñð r   c                ó`   — t        | t        |«      ¬«      }d| _        | j                  |«       y )N)Úrouter_instanceÚ
thresholdsÚlar1)ÚLAR1RoutingStrategyr#   Úrouting_strategyÚset_custom_routing_strategy)Úrouterr!   Ústrategys      r   Úapply_lar1_routing_strategyr-   ,   s2   € ô *ØÜ,Ð-BÓCô€Hð %€FÔØ
×&Ñ& xÕ0r   c                óš   — i t         ¥| xs i ¥}|d   }|d   }|d   }d|cxk  r|cxk  r|cxk  rdk  sn t        d|› d|› d|› �«      ‚|S )	Nr   r   r   r   é   zCLAR-1 thresholds must satisfy 0 < low < medium < high < 1, got low=z	, medium=z, high=)r   Ú
ValueError)r&   Úmergedr   r   r   s        r   Ú_normalize_thresholdsr2   8   s|   € Ø@Ô)Ð@¨jÒ.>¸BÐ@€FØ˜‘€CØ˜8Ñ$€FØ˜‘.€DØ�Ô'�fÔ'˜tÔ' aÔ'ÜØQÐRUÐQVÐV_Ð`fÐ_gÐgnÐosÐntÐuó
ð 	
ð €Mr   c                ód  — | j                  di «      j                  di «      }t        |t        «      s3t        j                  dt        |«      j                  «       t        «       S 	 t        j                  |«      S # t        $ r*}t        j                  d|«       t        «       cY d }~S d }~ww xY w)NÚmetadatar'   z6[LAR-1] Invalid lar1 metadata type: %s. Using defaultsz1[LAR-1] Invalid lar1 metadata: %s. Using defaults)
r    r   Údictr   ÚwarningÚtypeÚ__name__r
   Úmodel_validater   )Úrequest_kwargsÚlar1_rawÚexcs      r   Ú_parse_lar1_metadatar=   D   s‘   € Ø$×(Ñ(¨°RÓ8×<Ñ<¸VÀRÓH€HÜ�h¤Ô%Ü×%Ñ%Ð&^Ô`dÐemÓ`n×`wÑ`wÔxÜ‹~ÐðÜ×*Ñ*¨8Ó4Ð4øÜò Ü×%Ñ%Ð&YÐ[^Ô_Ü‹~Õûðús   Á'A< Á<	B/ÂB*Â$B/Â*B/c                  óv   — e Zd Z	 	 d	 	 	 dd„Z	 	 	 	 d		 	 	 	 	 	 	 	 	 d
d„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zd„ Zy)r(   Nc                ó2   — || _         t        |«      | _        y r   )Ú_routerr2   r&   )Úselfr%   r&   s      r   Ú__init__zLAR1RoutingStrategy.__init__Q   s   € ð
 'ˆŒÜ/°
Ó;ˆ�r   c              ƒ  ó>  K  — |€i }| j                   €y t        |«      }|j                  }t        d„ |j                  D «       «      }|j
                  j                  }	| j                   j                  |||||¬«      ƒ d {  –—† }
t        |
t        «      r|
S |
sy | j                  |||	«      }| j                  ||
«      \  }}|€y |rt        j                  d||«       |S |j                  di «      j                  dd«      }t        j                  d||«       |S 7 Œš­w)Nc              3  ó4   K  — | ]  }|j                   –— Œ y ­wr   )r   )Ú.0Úes     r   ú	<genexpr>zELAR1RoutingStrategy.async_get_available_deployment.<locals>.<genexpr>h   s   è ø€ Ò?¨A §¥Ñ?ùs   ‚)Úmodelr:   ÚmessagesÚinputÚspecific_deploymentz[LAR-1] confidence=%s -> %sÚ
model_infor7   ÚunknownzE[LAR-1] No deployment for type '%s', fallback to deployment type '%s')r@   r=   Ú
confidenceÚtupleÚevidenceÚtimer   Úasync_get_healthy_deploymentsr   r5   Ú_classify_requestÚ_select_deploymentr   Úinfor    r6   )rA   rH   rI   rJ   rK   r:   r'   rN   rP   Útime_dimÚhealthyÚtargetÚselectedÚexact_matchÚactual_types                  r   Úasync_get_available_deploymentz2LAR1RoutingStrategy.async_get_available_deploymentY   s-  è ø€ ð Ð!ØˆNØ�<‰<ÐØä*¨>Ó:ˆØ ŸO™Oˆ
ÜÑ?°·±Ô?Ó?ˆØŸ)™)Ÿ/™/ˆà#Ÿ|™|×IÑIØØ)ØØØ 3ð  Jó  
÷ 
ˆô �gœtÔ$ØˆNáØà×.Ñ.¨z¸8ÀXÓNˆØ $× 7Ñ 7¸ÀÓ HÑˆ�+àÐØÙÜ!×&Ñ&Ð'DÀjÐRXÔYð ˆð	 "*§¡¨l¸BÓ!?×!CÑ!CÀFÈIÓ!VˆKÜ!×)Ñ)ØWÐY_Ðalôð ˆð3
ús   ‚A>DÂ DÂBDc                ó˜   — d|v ry|t         j                  j                  k(  ry| j                  }||d   k  ry||d   k  ry||d   k  ryy)	NÚ
UNVERIFIEDzcloud-smartz
cloud-fastr   r   r   ÚlocalÚdeep)r   ÚMEMr   r&   )rA   rN   rP   rV   Úts        r   rS   z%LAR1RoutingStrategy._classify_request†   s]   € ð ˜8Ñ#Ø à”x—|‘|×)Ñ)Ò)Øà—?‘?ˆØ˜˜%™Ò Ø Ø˜˜(™Ò#ØØ˜˜&™	Ò!ØØr   c                óÎ   — |sy|D ]@  }t        |t        «      sŒ|j                  di «      j                  dd«      }||k(  sŒ<|dfc S  |D ]  }t        |t        «      sŒ|dfc S  y)N)NFrL   r7   Ú TF)r   r5   r    )rA   Útarget_typeÚdeploymentsÚ
deploymentÚ
model_types        r   rT   z&LAR1RoutingStrategy._select_deployment›   s�   € ñ
 Øà%ò 	(ˆJÜ˜j¬$Ô/ØØ#Ÿ™¨°bÓ9×=Ñ=¸fÀbÓIˆJØ˜[Ó(Ø! 4Ð'Ò'ð	(ð &ò 	)ˆJÜ˜*¤dÕ+Ø! 5Ð(Ò(ð	)ð r   c                ó   — t        d«      ‚)NzcLAR-1 routing only supports async routing. Enable async_only_mode on the router or use acompletion.)ÚNotImplementedError)rA   r"   Úkwargss      r   Úget_available_deploymentz,LAR1RoutingStrategy.get_available_deployment°   s   € Ü!Øqó
ð 	
r   )NN)r%   zRouter | Noner&   údict[str, float] | None)NNFN)
rH   ÚstrrI   zlist[dict[str, str]] | NonerJ   zstr | list | NonerK   zbool | Noner:   zdict | None)rN   r   rP   ztuple[str, ...]rV   rn   Úreturnrn   )re   rn   rf   z
list[dict]ro   ztuple[dict | None, bool])r8   Ú
__module__Ú__qualname__rB   r\   rS   rT   rl   © r   r   r(   r(   P   s¶   „ ð *.Ø.2ð<à&ð<ð ,ó<ð 15Ø#'Ø+0Ø&*ð+àð+ð .ð+ð !ð	+ð
 )ð+ð $ó+ðZàðð "ðð ð	ð
 
óð*àðð  ðð 
"ó	ó*
r   r(   )r   Úobjectr   r   ro   r   r   )r!   úMapping[str, object] | Nonero   údict[str, float])r+   r   r!   rt   ro   ÚNone)r&   rm   ro   ru   )r:   r5   ro   r
   )Ú__doc__Ú
__future__r   Úcollections.abcr   Útypingr   r   Úpydanticr   Úlitellm._loggingr   Úlitellm.routerr	   Úlitellm.types.lar1r
   r   r   r   Ú__annotations__r   r#   r-   r2   r=   r(   rr   r   r   ú<module>r€      s—   ðòõ #å #ß 'å $å 2Ý 4ß 5áÝ%à69ÀSÐRUÑ.VÐ Ð+Ó Vóð :>ðØ6ðàóð :>ð	1Øð	1à6ð	1ð 
ó	1ó	ó	ôc
Ð3õ c
r   