
    g              	          d dl m Z  d dlmZmZ d dlZd dlmZmZmZmZ d dl	 d dl
mZ  e       Zej                  ddg ee      gd	d
ee   iid       ej                  dd       ej                  dd      fdee   dee   fd       Zy)    )datetime)ListOptionalN)	APIRouterDependsHTTPExceptionstatus)*)user_api_key_authz/global/activity/cache_hitszBudget & Spend Tracking   modelF)tagsdependencies	responsesinclude_in_schemaz&Time from which to start viewing spend)defaultdescriptionzTime till which to view spend
start_dateend_datec                   K   | |t        t        j                  ddi      t        j                  | d      }t        j                  |d      }ddlm} 	 |t        d      d	}|j                  j                  |||       d{   }|g S |S 7 
# t        $ r+}t        t        j                  dt        |      i      d}~ww xY ww)
a  
    Get number of cache hits, vs misses

    {
        "daily_data": [
                const chartdata = [
                {
                    date: 'Jan 22',
                    cache_hits: 10,
                    llm_api_calls: 2000
                },
                {
                    date: 'Jan 23',
                    cache_hits: 10,
                    llm_api_calls: 12
                },
        ],
        "sum_cache_hits": 20,
        "sum_llm_api_calls": 2012
    }
    Nerrorz&Please provide start_date and end_date)status_codedetailz%Y-%m-%dr   )prisma_clientzDatabase not connected. Connect a database to your proxy - https://docs.litellm.ai/docs/simple_proxy#managing-auth---virtual-keysa  
            SELECT
                CASE 
                    WHEN vt."key_alias" IS NOT NULL THEN vt."key_alias"
                    ELSE 'Unnamed Key'
                END AS api_key,
                sl."call_type",
                sl."model",
                COUNT(*) AS total_rows,
                SUM(CASE WHEN sl."cache_hit" = 'True' THEN 1 ELSE 0 END) AS cache_hit_true_rows,
                SUM(CASE WHEN sl."cache_hit" = 'True' THEN sl."completion_tokens" ELSE 0 END) AS cached_completion_tokens,
                SUM(CASE WHEN sl."cache_hit" != 'True' THEN sl."completion_tokens" ELSE 0 END) AS generated_completion_tokens
            FROM "LiteLLM_SpendLogs" sl
            LEFT JOIN "LiteLLM_VerificationToken" vt ON sl."api_key" = vt."token"
            WHERE 
                sl."startTime" BETWEEN $1::date AND $2::date + interval '1 day'
            GROUP BY 
                vt."key_alias",
                sl."call_type",
                sl."model"
        )r   r	   HTTP_400_BAD_REQUESTr   strptimelitellm.proxy.proxy_serverr   
ValueErrordb	query_raw	Exceptionstr)r   r   start_date_objend_date_objr   	sql_querydb_responsees           j/var/www/openai/venv/lib/python3.12/site-packages/litellm/proxy/analytics_endpoints/analytics_endpoints.pyget_global_activityr)      s     R X-33EF
 	

 &&z:>N$$Xz:L8(
  T 	* *,,66~|
 
 I
  
33SV$
 	

sH   AC
/B BB C
B C
B 	C&CCC
)r   typingr   r   fastapir   r   r   r	   litellm.proxy._types$litellm.proxy.auth.user_api_key_authr   routergetLiteLLM_SpendLogsQueryr"   r)        r(   <module>r4      s     !  = = " B	 !
#	$+,-gt-./    !.<! ,gmm3S
S

 smS
S
r3   