Ë
    tPêj(`  ã            	       ó0  — U d 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
 ddlmZ ddl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mZmZ  e«       Zeed<    edd¬«       G d„ d«      «       Zde de!ee e"f   df   de#dz  fd„Z$dee e"f   dee e"f   dedz  fd„Z%de dedz  fd„Z&de defd„Z'd„ Z(ejS                  ddg e	e«      g¬ «       e	e«      fd!efd"„«       Z*ejW                  ddg e	e«      g¬ «       e	e«      fd#e,e e#f   d!efd$„«       Z-ejS                  d%dg e	e«      g¬ «       e	e«      fd!efd&„«       Z.ejW                  d%dg e	e«      g¬ «       e	e«      fd'e,e e#e,e e#f   z  f   d!efd(„«       Z/ G d)„ d*e«      Z0 G d+„ d,e«      Z1ejS                  d-d. e	e«      fe1¬/«      de1fd0„«       Z2ejW                  d-d. e	e«      fe1¬/«      d1e0de1fd2„«       Z3eji                  d3dg e	e«      ge¬/«       e	e«      fd1ed!edefd4„«       Z5y)5aÈ  
COST TRACKING SETTINGS MANAGEMENT

Endpoints for managing cost discount and margin configuration

GET /config/cost_discount_config - Get current cost discount configuration
PATCH /config/cost_discount_config - Update cost discount configuration
GET /config/cost_margin_config - Get current cost margin configuration
PATCH /config/cost_margin_config - Update cost margin configuration
POST /cost/estimate - Estimate cost for a given model and token counts
é    )ÚMapping)Ú	dataclass)ÚFinal)Ú	APIRouterÚDependsÚHTTPException)Ú	BaseModelN)Úverbose_proxy_logger)Úcompletion_cost)ÚCommonProxyErrorsÚCostEstimateRequestÚCostEstimateResponseÚUserAPIKeyAuth)Úuser_api_key_auth)ÚCostPerTokenÚLlmProvidersSetÚ	ModelInfoÚrouterT)ÚfrozenÚslotsc                   ó8   — e Zd ZU eed<   edz  ed<   edz  ed<   y)ÚResolvedCostModelÚmodelNÚproviderÚcustom_cost_per_token)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   © ó    ú~/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/management_endpoints/cost_tracking_settings.pyr   r   #   s   … àƒJØ�D‰jÓØ'¨$Ñ.Ô.r"   r   ÚkeyÚsources.Úreturnc                 óD   ‡ — ˆ fd„|D «       }d„ |D «       }t        |d «      S )Nc              3   ó@   •K  — | ]  }|j                  ‰«      –— Œ y ­w©N)Úget)Ú.0Úsourcer$   s     €r#   ú	<genexpr>z$_configured_price.<locals>.<genexpr>+   s   øè ø€ Ò;¨�V—Z‘Z —_Ñ;ùs   ƒc              3   ó`   K  — | ]&  }t        |t        t        f«      sŒt        |«      –— Œ( y ­wr)   )Ú
isinstanceÚintÚfloat)r+   Úvalues     r#   r-   z$_configured_price.<locals>.<genexpr>,   s"   è ø€ ÒZ u¼*ÀUÌSÔRWÈLÕ:Y”e˜E—lÑZùs   ‚.ž.)Únext)r$   r%   ÚvaluesÚnumerics   `   r#   Ú_configured_pricer6   *   s$   ø€ Û;°7Ô;€FÙZ°ÔZ€GÜ�˜ÓÐr"   Úlitellm_paramsÚ
model_infoc                 ón   — | |f}t        d|«      }t        d|«      }|€|€yt        |xs d|xs d¬«      S )a0  
    Pull per-token pricing configured on a deployment so on-prem / self-hosted
    models (absent from the public cost map) still estimate a real cost.
    Pricing may live on ``litellm_params`` or ``model_info``; ``litellm_params``
    wins, matching the router's cost-map registration precedence.
    Úinput_cost_per_tokenÚoutput_cost_per_tokenNç        )r:   r;   )r6   r   )r7   r8   r%   Úinput_priceÚoutput_prices        r#   Ú_extract_custom_pricingr?   0   sS   € ð % jÐ1€GÜ*Ð+AÀ7ÓK€KÜ+Ð,CÀWÓM€LàÐ˜|Ð3ØäØ(Ò/¨CØ*Ò1¨côð r"   r   c                 óN   — 	 t        j                  | ¬«      S # t        $ r Y y w xY w)N©r   )ÚlitellmÚget_model_infoÚ	ExceptionrA   s    r#   Ú_lookup_model_inforE   F   s*   € ðÜ×%Ñ%¨EÔ2Ð2øÜò Ùðús   ‚ ˜	$£$c                 óž  — ddl m} |��	 |j                  | ¬«      }|röt        |«      dkD  rè|d   }|j	                  di «      }|j	                  di «      }|j	                  d«      }|�t        |«      nd}t        ||«      }|j	                  d«      xs |j	                  d«      }	|	r-t        j                  d	| |	«       t        t        |	«      ||«      S |j	                  d
«      }
|
r-t        j                  d| |
«       t        t        |
«      ||«      S t        | dd«      S # t        $ r!}t        j                  d| |«       Y d}~Œ2d}~ww xY w)ac  
    Resolve a model name (which may be a router alias/model_group) to the
    underlying litellm model name, provider, and any deployment-configured
    pricing used for cost lookup.

    Args:
        model: The model name from the request (could be a router alias like 'e-model-router'
               or an actual model name like 'azure_ai/gpt-4')
    r   )Ú
llm_routerN)Ú
model_namer7   r8   Úcustom_llm_providerÚ
base_modelz2Resolved model '%s' to base_model '%s' from routerr   z'Resolved model '%s' to '%s' from routerz,Could not resolve model '%s' from router: %s)Úlitellm.proxy.proxy_serverrG   Úget_model_listÚlenr*   r   r?   r
   Údebugr   rD   )r   rG   ÚdeploymentsÚfirst_deploymentr7   r8   rI   r   r   rJ   Úresolved_modelÚes               r#   Ú_resolve_model_for_cost_lookuprS   M   s`  € õ 6ð Ñð	aà!+×!:Ñ!:ÀeÐ!:Ó!LˆKáœs ;Ó/°!Ò3Ø*5°a©.Ð Ø(8×(<Ñ(<Ð=MÈrÓ(R�Ø$4×$8Ñ$8¸ÀrÓ$J�
Ø-;×-?Ñ-?Ð@UÓ-VÐ#Ø>QÐ>]¤#Ð&9Ô":Ðcg�Ü/FÀ~ÐWaÓ/bÐ%ð %/§N¡N°<Ó$@Ò$dÀN×DVÑDVÐWcÓDd�
ÙÜ(×.Ñ.Ð/cÐejÐlvÔwÜ,¬S°«_¸hÐH]Ó^Ð^à(6×(:Ñ(:¸7Ó(C�Ù!Ü(×.Ñ.Ð/XÐZ_ÐaoÔpÜ,¬S°Ó-@À(ÐLaÓbÐbô
 ˜U D¨$Ó/Ð/øô	 ò 	aÜ ×&Ñ&Ð'UÐW\Ð^_×`Ñ`ûð	aús   ‹C	D" Ã?D" Ä"	EÄ+EÅEc                 ó,   — | sy|| z  || z  || z  || z  fS )z©
    Calculate costs for a given number of requests.

    Returns tuple of (total_cost, input_cost, output_cost, margin_cost) or all None if num_requests is None/0.
    )NNNNr!   ©Únum_requestsÚcost_per_requestÚ
input_costÚoutput_costÚmargin_costs        r#   Ú_calculate_period_costsr[   x   s4   € ñ Ø%à˜<Ñ'Ø�\Ñ!Ø�lÑ"Ø�lÑ"ð	ð r"   z/config/cost_discount_configúCost Tracking)ÚtagsÚdependenciesÚuser_api_key_dictc              ƒ   óR  K  — ddl m}m} |€'t        ddt        j
                  j                  i¬«      ‚	 |j                  «       ƒ d{  –—† }|j                  di «      }|j                  di «      }d	|iS 7 Œ,# t        $ r$}t        j                  d
|«       d	i icY d}~S d}~ww xY w­w)zo
    Get current cost discount configuration.

    Returns the cost_discount_config from litellm_settings.
    r   ©Úprisma_clientÚproxy_configNéô  Úerror©Ústatus_codeÚdetailÚlitellm_settingsÚcost_discount_configr4   z'Error fetching cost discount config: %s©rK   rb   rc   r   r   Údb_not_connected_errorr2   Ú
get_configr*   rD   r
   re   )r_   rb   rc   Úconfigri   rj   rR   s          r#   Úget_cost_discount_configro   ˆ   s³   è ø€ ÷ GàÐÜØØÔ.×EÑE×KÑKÐLô
ð 	
ð
à*×5Ñ5Ó7×7ˆð #)§*¡*Ð-?ÀÓ"DÐØ&6×&:Ñ&:Ð;QÐSUÓ&VÐàÐ.Ð/Ð/ð 8ùô ò Ü×"Ñ"Ð#LÈaÔPØ˜"ˆ~ÕûðüóF   ‚2B'µA7 ÁA5Á	+A7 Á4B'Á5A7 Á7	B$Â BÂB$ÂB'ÂB$Â$B'rj   c              ƒ   ó.  K  — ddl m}m}m} |€'t	        ddt
        j                  j                  i¬«      ‚|durt	        dddi¬«      ‚g }| D ]  }|t        vsŒ|j                  |«       Œ |r"t	        d	dd
dj                  |«      › d�i¬«      ‚| j                  «       D ]J  \  }}t        |t        t        f«      st	        d	d|› d�¬«      ‚d|cxk  rdk  rŒ9n t	        d	d|› d�¬«      ‚ 	 |j                  «       ƒ d{  –—† }d|vri |d<   | |d   d<   |j!                  |¬«      ƒ d{  –—†  | t"        _        t'        j(                  d| «       dd| dœS 7 ŒV7 Œ-# t*        $ r-}	t'        j,                  d|	«       t	        ddd|	› �i¬«      ‚d}	~	ww xY w­w)a$  
    Update cost discount configuration.

    Updates the cost_discount_config in litellm_settings.
    Discounts should be between 0 and 1 (e.g., 0.05 = 5% discount).

    Example:
    ```json
    {
        "vertex_ai": 0.05,
        "gemini": 0.05,
        "openai": 0.01
    }
    ```
    r   ©rb   rc   Ústore_model_in_dbNrd   re   rf   TúCSet `'STORE_MODEL_IN_DB='True'` in your env to enable this feature.é�  úInvalid provider(s): ú, z`. Must be valid LiteLLM providers. See https://docs.litellm.ai/docs/providers for the full list.zDiscount for ú must be a numberé   z% must be between 0 and 1 (0% to 100%)ri   rj   ©Ú
new_configz Updated cost_discount_config: %sz0Cost discount configuration updated successfullyÚsuccess©ÚmessageÚstatusr4   z'Error updating cost discount config: %sz'Failed to update cost discount config: )rK   rb   rc   rs   r   r   rl   r2   r   ÚappendÚjoinÚitemsr/   r0   r1   rm   Úsave_configrB   rj   r
   ÚinforD   re   )
rj   r_   rb   rc   rs   Úinvalid_providersr   Údiscountrn   rR   s
             r#   Úupdate_cost_discount_configr‡   «   s  è ø€ ÷0ñ ð ÐÜØØÔ.×EÑE×KÑKÐLô
ð 	
ð
  Ñ$ÜØØÐbÐcô
ð 	
ð  "ÐØ(ò /ˆØœ?Ò*Ø×$Ñ$ XÕ.ð/ñ ÜØàÐ0°·±Ð;LÓ1MÐ0Nð  Ooð  pðô
ð 	
ð 3×8Ñ8Ó:ò Ñˆ�(Ü˜(¤S¬% LÔ1Ü¨C¸-ÈÀzÐQbÐ8cÔdÐdØ�XÔ" Õ"ÜØØ& x jÐ0UÐVôð ð	ð
à*×5Ñ5Ó7×7ˆð  VÑ+Ø)+ˆFÐ%Ñ&ð >RˆÐ!Ñ"Ð#9Ñ:ð ×&Ñ&°&Ð&Ó9×9Ð9ð (<ŒÔ$ä×!Ñ!Ð"DÐFZÔ[ð JØØ*ñ
ð 	
ð# 8øð 	:ùô ò 
Ü×"Ñ"Ð#LÈaÔPÜØØÐFÀqÀcÐJÐKô
ð 	
ûð
üs[   ‚AFÁA?FÃFÃ.E ÄEÄ*E Ä,EÄ-*E ÅFÅE ÅE Å	FÅ%(FÆFÆFz/config/cost_margin_configc              ƒ   óR  K  — ddl m}m} |€'t        ddt        j
                  j                  i¬«      ‚	 |j                  «       ƒ d{  –—† }|j                  di «      }|j                  di «      }d	|iS 7 Œ,# t        $ r$}t        j                  d
|«       d	i icY d}~S d}~ww xY w­w)zk
    Get current cost margin configuration.

    Returns the cost_margin_config from litellm_settings.
    r   ra   Nrd   re   rf   ri   Úcost_margin_configr4   z%Error fetching cost margin config: %srk   )r_   rb   rc   rn   ri   r‰   rR   s          r#   Úget_cost_margin_configrŠ     s²   è ø€ ÷ GàÐÜØØÔ.×EÑE×KÑKÐLô
ð 	
ð
à*×5Ñ5Ó7×7ˆð #)§*¡*Ð-?ÀÓ"DÐØ$4×$8Ñ$8Ð9MÈrÓ$RÐàÐ,Ð-Ð-ð 8ùô ò Ü×"Ñ"Ð#JÈAÔNØ˜"ˆ~Õûðürp   r‰   c              ƒ   ó¬  K  — ddl m}m}m} |€'t	        ddt
        j                  j                  i¬«      ‚|durt	        dddi¬«      ‚g }| D ]"  }|d	k7  sŒ	|t        vsŒ|j                  |«       Œ$ |r"t	        d
dddj                  |«      › d�i¬«      ‚| j                  «       D �]  \  }}t        |t        t        f«      rd|cxk  rdk  rŒ)n t	        d
d|› d�¬«      ‚t        |t        «      r¨d|v rJ|d   }t        |t        t        f«      st	        d
d|› d�¬«      ‚d|cxk  rdk  sn t	        d
d|› d�¬«      ‚d|v rB|d   }	t        |	t        t        f«      st	        d
d|› d�¬«      ‚|	dk  rt	        d
d|› d�¬«      ‚|rŒãt	        d
d|› d�¬«      ‚t	        d
d|› d�¬«      ‚ 	 |j!                  «       ƒ d{  –—† }
d|
vri |
d<   | |
d   d<   |j#                  |
¬«      ƒ d{  –—†  | t$        _        t)        j*                  d| «       dd| d œS 7 ŒV7 Œ-# t,        $ r-}t)        j.                  d!|«       t	        ddd"|› �i¬«      ‚d}~ww xY w­w)#aR  
    Update cost margin configuration.

    Updates the cost_margin_config in litellm_settings.
    Margins can be:
    - Percentage: {"openai": 0.10} = 10% margin
    - Fixed amount: {"openai": {"fixed_amount": 0.001}} = $0.001 per request
    - Combined: {"vertex_ai": {"percentage": 0.08, "fixed_amount": 0.0005}}
    - Global: {"global": 0.05} = 5% global margin on all providers

    Example:
    ```json
    {
        "global": 0.05,
        "openai": 0.10,
        "anthropic": {"fixed_amount": 0.001},
        "vertex_ai": {"percentage": 0.08, "fixed_amount": 0.0005}
    }
    ```
    r   rr   Nrd   re   rf   Trt   Úglobalru   rv   rw   zl. Must be valid LiteLLM providers or 'global'. See https://docs.litellm.ai/docs/providers for the full list.é
   zMargin percentage for z' must be between 0 and 10 (0% to 1000%)Ú
percentagerx   Úfixed_amountzFixed margin amount for z must be non-negativezMargin config for zA cannot be empty. Must include 'percentage' and/or 'fixed_amount'zMargin for zN must be a number (percentage) or dict with 'percentage' and/or 'fixed_amount'ri   r‰   rz   zUpdated cost_margin_config: %sz.Cost margin configuration updated successfullyr|   r}   z%Error updating cost margin config: %sz%Failed to update cost margin config: )rK   rb   rc   rs   r   r   rl   r2   r   r€   r�   r‚   r/   r0   r1   Údictrm   rƒ   rB   r‰   r
   r„   rD   re   )r‰   r_   rb   rc   rs   r…   r   Úmargin_valuerŽ   r�   rn   rR   s               r#   Úupdate_cost_margin_configr’   0  s  è ø€ ÷:ñ ð ÐÜØØÔ.×EÑE×KÑKÐLô
ð 	
ð
  Ñ$ÜØØÐbÐcô
ð 	
ð  "ÐØ&ò /ˆØ�xÓ H´OÒ$CØ×$Ñ$ XÕ.ð/ñ ÜØàÐ0°·±Ð;LÓ1MÐ0Nð  O{ð  |ðô
ð 	
ð #5×":Ñ":Ó"<ó +Ñˆ�,Ü�l¤S¬% LÔ1à˜Ô+¨Õ+Ü#Ø #Ø3°H°:Ð=dÐeôð ô ˜¤dÔ+à˜|Ñ+Ø)¨,Ñ7�
Ü! *¬s´E¨lÔ;Ü'Ø$'Ø!7¸°zÐARÐSôð ð ˜ZÔ-¨2Ô-Ü'Ø$'Ø!7¸°zÐAhÐiôð ð  Ñ-Ø+¨NÑ;�Ü! ,´´e°Ô=Ü'Ø$'Ø!9¸(¸ÐCTÐUôð ð   !Ò#Ü'Ø$'Ø!9¸(¸ÐCXÐYôð ò  Ü#Ø #Ø/°¨zÐ9zÐ{ôð ô
  ØØ$ X JÐ.|Ð}ôð ðQ+ðZ
à*×5Ñ5Ó7×7ˆð  VÑ+Ø)+ˆFÐ%Ñ&ð <NˆÐ!Ñ"Ð#7Ñ8ð ×&Ñ&°&Ð&Ó9×9Ð9ð &8ŒÔ"ä×!Ñ!Ð"BÐDVÔWð HØØ(ñ
ð 	
ð# 8øð 	:ùô ò 
Ü×"Ñ"Ð#JÈAÔNÜØØÐDÀQÀCÐHÐIô
ð 	
ûð
üsh   ‚AIÁIÁA/IÃB9IÆ	#IÆ-H Ç HÇ*H Ç+HÇ,*H ÈIÈH ÈH È	IÈ$(IÉIÉIc                   ó   — e Zd ZU eed<   y)ÚBlockUnpricedModelsRequestÚenabledN©r   r   r   Úboolr    r!   r"   r#   r”   r”   »  ó   … Ø„Mr"   r”   c                   ó   — e Zd ZU eed<   y)ÚBlockUnpricedModelsResponser•   Nr–   r!   r"   r#   rš   rš   ¿  r˜   r"   rš   z1/config/block_requests_for_models_without_pricing)r\   )r]   r^   Úresponse_modelc               ƒ   óP   K  — t        t        t        j                  «      ¬«      S ­w)N©r•   )rš   r—   rB   Ú)block_requests_for_models_without_pricingr!   r"   r#   Ú-get_block_requests_for_models_without_pricingrŸ   Ã  s   è ø€ ô '¬t´G×4eÑ4eÓ/fÔgÐgùs   ‚$&Úrequestc              ƒ   óB  K  — ddl m}m}m} |€'t	        ddt
        j                  j                  i¬«      ‚|durt	        dddi¬«      ‚	 |j                  «       ƒ d {  –—† }d|vri |d<   | j                  |d   d	<   |j                  |¬
«      ƒ d {  –—†  | j                  t        _        t        j                  d| j                  «       t        | j                  ¬«      S 7 Œ„7 ŒQ# t         $ r-}t        j"                  d|«       t	        ddd|›�i¬«      ‚d }~ww xY w­w)Nr   rr   rd   re   rf   Trt   ri   rž   rz   z5Updated block_requests_for_models_without_pricing: %sr�   z<Error updating block_requests_for_models_without_pricing: %szFailed to update setting: )rK   rb   rc   rs   r   r   rl   r2   rm   r•   rƒ   rB   rž   r
   r„   rš   rD   re   )r    rb   rc   rs   rn   rR   s         r#   Ú0update_block_requests_for_models_without_pricingr¢   Í  s>  è ø€ ÷ñ ð ÐÜØàÔ*×AÑA×GÑGðô
ð 	
ð  Ñ$ÜØàÐ^ðô
ð 	
ð
Ø#×.Ñ.Ó0×0ˆØ VÑ+Ø)+ˆFÐ%Ñ&ØRY×RaÑRaˆÐ!Ñ"Ð#NÑOØ×&Ñ&°&Ð&Ó9×9Ð9à<C¿O¹OŒÔ9Ü×!Ñ!Ð"YÐ[b×[jÑ[jÔkä*°7·?±?ÔCÐCð 1øð 	:ùô ò 
Ü×"Ñ"Ð#aÐcdÔeÜØàÐ5°a°UÐ;ðô
ð 	
ûð
üsO   ‚ADÁ
C& ÁC"Á4C& ÂC$ÂAC& Ã!DÃ"C& Ã$C& Ã&	DÃ/(DÄDÄDz/cost/estimatec              ƒ   ó  K  — ddl m} ddlm}m} t        | j                  «      }|j                  }|j                  }t        j                  d| j                  |«        || || j                  | j                  | j                  | j                  z   ¬«      ¬«      } ||g ddd	d
d
¬«      }		 t        ||||j                  |	¬«      }
|	j                   }|r|j#                  dd«      nd}|r|j#                  dd«      nd}|r|j#                  dd«      nd}t%        |«      }|�|j#                  d«      nd	}|�|j#                  d«      nd	}|�|j#                  d«      nd	}|j                  �|j                  d   n|}|j                  �|j                  d   n|}|�|n|}t'        | j(                  |
|||¬«      \  }}}}t'        | j*                  |
|||¬«      \  }}}}t-        d-i d| j                  “d| j                  “d| j                  “d| j(                  “d| j*                  “d |
“d!|“d"|“d#|“d$|“d%|“d&|“d'|“d(|“d)|“d*|“d+|“d|“d|“d,|“ŽS # t        $ r'}t        ddd| j                  › d|› d|› �i¬«      ‚d	}~ww xY w­w).a�  
    Estimate cost for a given model and token counts.

    This endpoint uses the same cost calculation logic as actual requests,
    including any configured margins and discounts.

    Parameters:
    - model: Model name (e.g., "gpt-4", "claude-3-opus")
    - input_tokens: Expected input tokens per request
    - output_tokens: Expected output tokens per request
    - num_requests_per_day: Number of requests per day (optional)
    - num_requests_per_month: Number of requests per month (optional)

    Returns cost breakdown including:
    - Per-request costs (input, output, margin)
    - Daily costs (if num_requests_per_day provided)
    - Monthly costs (if num_requests_per_month provided)

    Example:
    ```json
    {
        "model": "gpt-4",
        "input_tokens": 1000,
        "output_tokens": 500,
        "num_requests_per_day": 100,
        "num_requests_per_month": 3000
    }
    ```
    r   )ÚLogging)ÚModelResponseÚUsagez2Cost estimate: request.model='%s' resolved to '%s')Úprompt_tokensÚcompletion_tokensÚtotal_tokens)r   ÚusageFÚ
completionNzcost-estimate)r   ÚmessagesÚstreamÚ	call_typeÚ
start_timeÚlitellm_call_idÚfunction_id)Úcompletion_responser   rI   r   Úlitellm_logging_obji”  re   z$Could not calculate cost for model 'z' (resolved to 'z'): rf   rX   r<   rY   Úmargin_total_amountr:   r;   Úlitellm_providerrU   r   Úinput_tokensÚoutput_tokensÚnum_requests_per_dayÚnum_requests_per_monthrW   Úinput_cost_per_requestÚoutput_cost_per_requestÚmargin_cost_per_requestÚ
daily_costÚdaily_input_costÚdaily_output_costÚdaily_margin_costÚmonthly_costÚmonthly_input_costÚmonthly_output_costÚmonthly_margin_costr   r!   )Ú*litellm.litellm_core_utils.litellm_loggingr¤   Úlitellm.types.utilsr¥   r¦   rS   r   r   r
   rN   r¶   r·   r   r   rD   r   Úcost_breakdownr*   rE   r[   r¸   r¹   r   )r    r_   ÚLiteLLMLoggingObjr¥   r¦   ÚresolvedrQ   Úresolved_providerÚmock_responser³   rW   rR   rÇ   rX   rY   rZ   r8   Úmapped_input_priceÚmapped_output_priceÚmapped_providerr:   r;   rI   r½   r¾   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   s                                  r#   Úestimate_costrÏ     sp  è ø€ õN Xß8ô 5°W·]±]ÓC€HØ$ŸN™N€NØ'×0Ñ0Ðä×ÑÐSÐU\×UbÑUbÐdrÔsñ )ØÙØ!×.Ñ.Ø%×3Ñ3Ø ×-Ñ-°×0EÑ0EÑEô
ô€Mñ "3ØØØØØØ'Ø#ô"Ðð
Ü"1Ø -Ø Ø 1Ø"*×"@Ñ"@Ø 3ô#
Ðð  0×>Ñ>€NáAO˜×*Ñ*¨<¸Ô=ÐUX€JÙCQ˜×+Ñ+¨M¸3Ô?ÐWZ€KÙKY˜×+Ñ+Ð,AÀ3ÔGÐ_b€Kä*¨>Ó:€JØJTÐJ` 
§¡Ð/EÔ FÐfjÐØLVÐLb §¡Ð0GÔ!HÐhlÐØCMÐCY˜ZŸ^™^Ð,>Ô?Ð_c€Oð ×)Ñ)Ð5ð 	×&Ñ&Ð'=Ò>àð ð ×)Ñ)Ð5ð 	×&Ñ&Ð'>Ò?à ð ð
 5DÐ4O¡ÐUfÐô 	 Ø×1Ñ1Ø)ØØØô	ñØØØØô 	 Ø×3Ñ3Ø)ØØØô	ñØØØØô  ò Ø�mŠmðà×)Ò)ðð ×+Ò+ðð %×9Ò9ð	ð
  '×=Ò=ðñ *ðñ  *ðñ !,ðñ !,ðñ ðñ *ðñ ,ðñ ,ðñ "ðñ .ðñ  0ð!ñ" 0ð#ñ$ 2ð%ñ& 4ð'ñ( %ð)ð øôu ò 
ÜØàÐ?ÀÇÁ¸ÐN^Ð_mÐ^nÐnrÐstÐruÐvðô
ð 	
ûð
üs+   ‚B*JÂ-I ÃFJÉ	JÉ"I?É?JÊJ)6Ú__doc__Úcollections.abcr   Údataclassesr   Útypingr   Úfastapir   r   r   Úpydanticr	   rB   Úlitellm._loggingr
   Úlitellm.cost_calculatorr   Úlitellm.proxy._typesr   r   r   r   Ú$litellm.proxy.auth.user_api_key_authr   rÆ   r   r   r   r   r    r   r   ÚtupleÚobjectr1   r6   r?   rE   rS   r[   r*   ro   Úpatchr�   r‡   rŠ   r’   r”   rš   rŸ   r¢   ÚpostrÏ   r!   r"   r#   ú<module>rÞ      sj  ðò
õ $Ý !Ý ç 5Ñ 5Ý ã Ý 1Ý 3÷ó õ Cß HÑ Há“€ˆÓ ñ �$˜dÔ#÷/ð /ó $ð/ð˜3ð ¨¨w°s¸F°{Ñ/CÀSÐ/HÑ)Ið ÈeÐVZÉló ðØ˜C ˜KÑ(ðØ6=¸cÀ6¸kÑ6Jðà�DÑóð,˜cð  i°$Ñ&6ó ð(0¨#ð (0Ð2Có (0òVð  ‡�Ø"Ø
Ð	ÙÐ+Ó,Ð-ð ó ñ )0Ð0AÓ(BñØ%òóð
ð< ‡�Ø"Ø
Ð	ÙÐ+Ó,Ð-ð ó ñ )0Ð0AÓ(BñZ
Ø˜s E˜zÑ*ðZ
à%òZ
óð
Z
ðz ‡�Ø Ø
Ð	ÙÐ+Ó,Ð-ð ó ñ )0Ð0AÓ(BñØ%òóð
ð< ‡�Ø Ø
Ð	ÙÐ+Ó,Ð-ð ó ñ )0Ð0AÓ(BñC
Ø˜S %¨$¨s°E¨zÑ*:Ñ":Ð:Ñ;ðC
à%òC
óð
C
ôL ô ô )ô ð ‡�Ø7Ø	ÙÐ+Ó,Ð.Ø.ð	 ó ðhÐ=Xò hóðhð ‡�Ø7Ø	ÙÐ+Ó,Ð.Ø.ð	 ó ð+
Ø'ð+
à ò+
óð+
ð\ ‡�ØØ
Ð	ÙÐ+Ó,Ð-Ø'ð	 ó ñ )0Ð0AÓ(BñXØ ðXà%ðXð òXóñXr"   