o
    ưi                     @   s   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	T d dl
mZ e Zejddgeegd	d
ee iiddejdddejdddfdee dee fddZdS )    )datetime)ListOptionalN)	APIRouterDependsHTTPExceptionstatus)*)user_api_key_authz/global/activity/cache_hitszBudget & Spend Tracking   modelF)tagsdependencies	responsesZinclude_in_schemaz&Time from which to start viewing spend)defaultdescriptionzTime till which to view spend
start_dateend_datec              
      s   | du s	|du rt tjddidt| d}t|d}ddlm} z|du r-tdd	}|j	|||I dH }|du rAg W S |W S  t
yZ } zt tjdt|idd}~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" >= $1::timestamptz AND "startTime" < ($2::timestamptz + INTERVAL '1 day')
            GROUP BY 
                vt."key_alias",
                sl."call_type",
                sl."model"
        )r   r   ZHTTP_400_BAD_REQUESTr   strptimeZlitellm.proxy.proxy_serverr   
ValueErrordbZ	query_raw	Exceptionstr)r   r   Zstart_date_objZend_date_objr   Z	sql_queryZdb_responsee r   l/home/app/Keep/.python/lib/python3.10/site-packages/litellm/proxy/analytics_endpoints/analytics_endpoints.pyget_global_activity   s8   )

r    )r   typingr   r   Zfastapir   r   r   r   Zlitellm.proxy._typesZ$litellm.proxy.auth.user_api_key_authr
   ZroutergetZLiteLLM_SpendLogsZQueryr   r    r   r   r   r   <module>   s8   
