Ë
    tPêj|0  ã                   ó.  — U d Z ddl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 ddlmZ erddlmZmZmZmZ n	 ddlmZmZmZmZ dd	lmZ dd
lmZmZmZmZ  e«       Zeed<   ej;                  ddg ee«      geej<                  ¬«       ee«      fdede	fd„«       ZejA                  ddg ee«      ge¬«      d ee«      fde!ded   de	fd„«       Z"ejG                  ddg ee«      ge¬«      d ee«      fde!ded   de	fd„«       Z$y# e$ r Y ŒÍw xY w)a/  
FALLBACK MANAGEMENT ENDPOINTS

Dedicated endpoints for managing model fallbacks separately from general config.

POST /fallback - Create or update fallbacks for a specific model
GET /fallback/{model} - Get fallbacks for a specific model
DELETE /fallback/{model} - Delete fallbacks for a specific model
é    N)ÚTYPE_CHECKINGÚFinalÚLiteral)Úverbose_proxy_logger)ÚUserAPIKeyAuth)Úget_all_fallbacks)Úuser_api_key_auth)Ú	APIRouterÚDependsÚHTTPExceptionÚstatus)ÚConfigRepository)ÚFallbackCreateRequestÚFallbackDeleteResponseÚFallbackGetResponseÚFallbackResponseÚrouterz	/fallbackzFallback Management)ÚtagsÚdependenciesÚresponse_modelÚstatus_codeÚdataÚuser_api_key_dictc              ƒ   óD  K  — ddl m}m}m}m} 	 |€t        t        j                  ddi¬«      ‚|j                  }| j                  |vr5t        t        j                  d| j                  › d�t        |«      d	œ¬«      ‚| j                  D �cg c]	  }||vsŒ|‘Œ }}|r*t        t        j                  d
|› �t        |«      d	œ¬«      ‚| j                  | j                  v r+t        t        j                  dd| j                  › d�i¬«      ‚|dus|€t        t        j                  ddi¬«      ‚|j                  «       ƒ d{  –—† }	|	j                  di «      }
d}| j                   dk(  rd}n| j                   dk(  rd}|
j                  |g «      }d}t#        |«      D ]2  \  }}| j                  |v sŒ| j                  | j                  i||<   d} n |s'|j%                  | j                  | j                  i«       ||
|<   t'        j(                  |
«      }t+        |«      j,                  j/                  ddid|dœd|idœ¬«      ƒ d{  –—†  t1        |||«       t3        j4                  d| j                  | j                  | j                   «       t7        | j                  | j                  | j                   d|rdnd› d�¬«      S c c}w 7 �Œˆ7 Œ„# t
        $ r ‚ t8        $ r=}t3        j:                  d |d¬!«       t        t        j                  dd"|› �i¬«      ‚d}~ww xY w­w)#a‡  
    Create or update fallbacks for a specific model.

    This endpoint allows you to configure fallback models separately from the general config.
    Fallbacks are triggered when a model call fails after retries.

    **Example Request:**
    ```json
    {
        "model": "gpt-3.5-turbo",
        "fallback_models": ["gpt-4", "claude-3-haiku"],
        "fallback_type": "general"
    }
    ```

    **Fallback Types:**
    - `general`: Standard fallbacks for any error (default)
    - `context_window`: Fallbacks specifically for context window exceeded errors
    - `content_policy`: Fallbacks specifically for content policy violations
    r   ©Ú
llm_routerÚprisma_clientÚproxy_configÚstore_model_in_dbNÚerrorúRouter not initialized©r   ÚdetailzModel 'z' not found in router)r    Úavailable_modelszInvalid fallback models: z' cannot be its own fallbackTúcDatabase storage not enabled. Set 'STORE_MODEL_IN_DB=True' in your environment to use this feature.Úrouter_settingsÚ	fallbacksÚcontext_windowÚcontext_window_fallbacksÚcontent_policyÚcontent_policy_fallbacksFÚ
param_name©r,   Úparam_valuer.   ©ÚcreateÚupdate©Úwherer   z(Fallback configured: %s -> %s (type: %s)zFallback configuration ÚupdatedÚcreatedz successfully)ÚmodelÚfallback_modelsÚfallback_typeÚmessagezError creating fallback: %s©Úexc_infozFailed to create fallback: )Úlitellm.proxy.proxy_serverr   r   r   r   r   r   ÚHTTP_500_INTERNAL_SERVER_ERRORÚmodel_namesr6   ÚHTTP_404_NOT_FOUNDÚlistr7   ÚHTTP_400_BAD_REQUESTÚ
get_configÚgetr8   Ú	enumerateÚappendÚjsonÚdumpsr   ÚtableÚupsertÚsetattrr   Úinfor   Ú	Exceptionr    )r   r   r   r   r   r   r>   ÚmÚinvalid_fallback_modelsÚconfigr&   Úfallback_keyÚexisting_fallbacksÚfallback_updatedÚiÚfallback_dictÚrouter_settings_jsonÚes                     ú…/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/management_endpoints/fallback_management_endpoints.pyÚcreate_fallbackrX   )   su  è ø€ ÷>ó ðn
àÐÜÜ"×AÑAØÐ!9Ð:ôð ð (×3Ñ3ˆØ�:‰:˜[Ñ(ÜÜ"×5Ñ5à& t§z¡z lÐ2GÐHÜ(,¨[Ó(9ñôð ð 6:×5IÑ5IÖ)b°ÈQÐVaÒMaª!Ð)bÐÐ)bÙ"ÜÜ"×7Ñ7à8Ð9PÐ8QÐRÜ(,¨[Ó(9ñôð ð �:‰:˜×-Ñ-Ñ-ÜÜ"×7Ñ7Ø 7¨4¯:©:¨,Ð6RÐ!SÐTôð ð  DÑ(¨MÐ,AÜÜ"×7Ñ7àð  Cðôð ð +×5Ñ5Ó7×7ˆØ!'§¡Ð,=¸rÓ!Bˆð #ˆØ×ÑÐ!1Ò1Ø5‰LØ×ÑÐ#3Ò3Ø5ˆLð AP×@SÑ@SÐT`ÐbdÓ@eÐð !ÐÜ )Ð*<Ó =ò 	ÑˆAˆ}Ø�z‰z˜]Ò*à)-¯©°T×5IÑ5IÐ(JÐ" 1Ñ%Ø#'Ð Ùð	ñ  à×%Ñ% t§z¡z°4×3GÑ3GÐ&HÔIð );ˆ˜Ñ%ô '+§j¡j°Ó&AÐÜ˜}Ó-×3Ñ3×:Ñ:ØÐ!2Ð3ð #4Ø#7ñð )Ð*>Ð?ñð ;ó 	
÷ 		
ð 		
ô 	�
˜LÐ*<Ô=ä×!Ñ!Ø6¸¿
¹
ÀD×DXÑDXÐZ^×ZlÑZlô	
ô  Ø—*‘*Ø ×0Ñ0Ø×,Ñ,Ø-Ñ;K©iÐQZÐ-[Ð[hÐiô	
ð 	
ùòY *cð6 8ùð>		
ùô2 ò ØÜò 
Ü×"Ñ"Ð#@À!ÈdÕSÜÜ×=Ñ=ØÐ:¸1¸#Ð>Ð?ô
ð 	
ûð
üsi   ‚L �A<K Â	KÂKÂB'K ÅK	ÅA.K Æ1BK ÉKÉA;K ËL ËK ËK ËLË 8LÌLÌL z/fallback/{model})r   r   r   Úgeneralr6   r8   )rY   r(   r*   c           	   ƒ   ó~  K  — ddl m} 	 |€t        t        j                  ddi¬«      ‚t        | ||¬«      }|s$t        t        j                  dd|› d	| › d
�i¬«      ‚t        | ||¬«      S # t        $ r ‚ t        $ r=}t        j                  d|d¬«       t        t        j                  dd|› �i¬«      ‚d}~ww xY w­w)a   
    Get fallback configuration for a specific model.

    **Parameters:**
    - `model`: The model name to get fallbacks for
    - `fallback_type`: Type of fallback to retrieve (query parameter)

    **Example:**
    ```
    GET /fallback/gpt-3.5-turbo?fallback_type=general
    ```
    r   )r   Nr    r!   r"   )r6   r   r8   úNo ú! fallbacks configured for model 'ú')r6   r7   r8   zError getting fallback: %sTr:   zFailed to get fallback: )r<   r   r   r   r=   r   r?   r   rL   r   r    )r6   r8   r   r   r7   rV   s         rW   Úget_fallbackr^   À   sç   è ø€ õ. 6ð
ØÐÜÜ"×AÑAØÐ!9Ð:ôð ô "3¸È:ÐerÔ!sˆáÜÜ"×5Ñ5Ø 3 } oÐ5VÐW\ÐV]Ð]^Ð!_Ð`ôð ô
 #ØØ+Ø'ô
ð 	
øô ò ØÜò 
Ü×"Ñ"Ð#?ÀÈTÕRÜÜ×=Ñ=ØÐ7¸°sÐ;Ð<ô
ð 	
ûð
üs)   ‚B=ŠA A+ Á*B=Á+B:Á=8B5Â5B:Â:B=c           	   ƒ   óŠ  K  — ddl m}m}m}m} 	 |€t        t        j                  ddi¬«      ‚|dus|€t        t        j                  ddi¬«      ‚|j                  «       ƒ d{  –—† }|j                  d	i «      }d
}	|dk(  rd}	n|dk(  rd}	|j                  |	g «      }
d}g }|
D ]  }| |vr|j                  |«       Œd}Œ |s$t        t        j                  dd|› d| › d�i¬«      ‚|||	<   t        j                  |«      }t        |«      j                   j#                  dd	id	|dœd|idœ¬«      ƒ d{  –—†  t%        ||	|«       t'        j(                  d| |«       t+        | |d¬«      S 7 �Œ7 Œ9# t
        $ r ‚ t,        $ r=}t'        j.                  d|d¬«       t        t        j                  dd|› �i¬«      ‚d}~ww xY w­w)a'  
    Delete fallback configuration for a specific model.

    **Parameters:**
    - `model`: The model name to delete fallbacks for
    - `fallback_type`: Type of fallback to delete (query parameter)

    **Example:**
    ```
    DELETE /fallback/gpt-3.5-turbo?fallback_type=general
    ```
    r   r   Nr    r!   r"   Tr%   r&   r'   r(   r)   r*   r+   Fr[   r\   r]   r,   r-   r.   r/   r2   zFallback deleted: %s (type: %s)z+Fallback configuration deleted successfully)r6   r8   r9   zError deleting fallback: %sr:   zFailed to delete fallback: )r<   r   r   r   r   r   r   r=   rA   rB   rC   rE   r?   rF   rG   r   rH   rI   rJ   r   rK   r   rL   r    )r6   r8   r   r   r   r   r   rO   r&   rP   rQ   Úfallback_foundÚupdated_fallbacksrT   rU   rV   s                   rW   Údelete_fallbackrb   ù   s@  è ø€ ÷.ó ðN
ØÐÜÜ"×AÑAØÐ!9Ð:ôð ð
  DÑ(¨MÐ,AÜÜ"×7Ñ7àð  Cðôð ð +×5Ñ5Ó7×7ˆØ!'§¡Ð,=¸rÓ!Bˆð #ˆØÐ,Ò,Ø5‰LØÐ.Ò.Ø5ˆLð AP×@SÑ@SÐT`ÐbdÓ@eÐð ˆØ#%ÐØ/ò 	&ˆMØ˜MÑ)Ø!×(Ñ(¨Õ7à!%‘ð		&ñ ÜÜ"×5Ñ5Ø 3 } oÐ5VÐW\ÐV]Ð]^Ð!_Ð`ôð ð ):ˆ˜Ñ%ô '+§j¡j°Ó&AÐÜ˜}Ó-×3Ñ3×:Ñ:ØÐ!2Ð3ð #4Ø#7ñð )Ð*>Ð?ñð ;ó 	
÷ 		
ð 		
ô 	�
˜LÐ*;Ô<ä×!Ñ!Ð"CÀUÈMÔZä%ØØ'ØAô
ð 	
ðc 8ùðB		
ùô, ò ØÜò 
Ü×"Ñ"Ð#@À!ÈdÕSÜÜ×=Ñ=ØÐ:¸1¸#Ð>Ð?ô
ð 	
ûð
üsN   ‚G�AE1 Á%E,Á&CE1 Ä5E/Ä65E1 Å+GÅ,E1 Å/E1 Å1G Æ8F;Æ;G Ç G)%Ú__doc__rF   Útypingr   r   r   Úlitellm._loggingr   Úlitellm.proxy._typesr   Úlitellm.proxy.auth.model_checksr   Ú$litellm.proxy.auth.user_api_key_authr	   Úfastapir
   r   r   r   ÚImportErrorÚ&litellm.repositories.config_repositoryr   Ú<litellm.types.management_endpoints.router_settings_endpointsr   r   r   r   r   Ú__annotations__ÚpostÚHTTP_200_OKrX   rC   Ústrr^   Údeleterb   © ó    rW   ú<module>rt      s¥  ðòó ß 0Ñ 0å 1Ý /Ý =Ý BáßAÔAðßEÓEõ
 D÷ó ñ “€ˆÓ ð ‡�ØØ
Ð	 ÙÐ+Ó,Ð-Ø#Ø×"Ñ"ð ó ñ )0Ð0AÓ(BñM
Ø
ðM
à%òM
óðM
ð` ‡�ØØ
Ð	 ÙÐ+Ó,Ð-Ø&ð	 ó ð MVÙ(/Ð0AÓ(Bñ0
Øð0
àÐHÑIð0
ð &ò0
óð0
ðf ‡�ØØ
Ð	 ÙÐ+Ó,Ð-Ø)ð	 ó ð MVÙ(/Ð0AÓ(Bñf
Øðf
àÐHÑIðf
ð &òf
óñf
øðK ò áðús   ºD ÄDÄD