File size: 2,001 Bytes
69c12a2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4f39165
69c12a2
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# app/runtime/request_limit.py
from datetime import date

import gradio as gr

from ui.i18n.translations import translations

# --- Request count management ---
anon_request_count = 0
user_request_counts = {}
last_reset_date = date.today()

ANON_DAILY_LIMIT = 20
USER_DAILY_LIMIT = 15


def reset_counters():
    global anon_request_count, user_request_counts, last_reset_date
    today = date.today()
    anon_request_count = 0
    user_request_counts = {}
    last_reset_date = today

def check_limit(hf_token: gr.OAuthToken | None, hf_user, lang="en") -> tuple[bool, str, str]:
    global anon_request_count, user_request_counts
    today = date.today()
    if today != last_reset_date:
        reset_counters()

    if hf_token is None or not hf_token.token:
        if anon_request_count >= ANON_DAILY_LIMIT:
            msg = translations[lang]["status"].format(login_status="guest", remains=0)
            return False, msg, "guest"
        anon_request_count += 1
        remaining = ANON_DAILY_LIMIT - anon_request_count
        msg = translations[lang]['status'].format(login_status="guest", remains=remaining)
        return True, msg, "guest"
    else:
        user_id = hf_user if hf_user else (hf_token.user if hasattr(hf_token, "user") else hf_token.token[:8])
        count = user_request_counts.get(user_id, 0)
        if count >= USER_DAILY_LIMIT:
            msg = translations[lang]["status"].format(login_status=user_id, remains=0)
            return False, msg, user_id
        user_request_counts[user_id] = count + 1
        remaining = USER_DAILY_LIMIT - user_request_counts[user_id]
        msg = translations[lang]['status'].format(login_status=user_id, remains=remaining)
        return True, msg, user_id
    
def get_guest_req_count():
    return ANON_DAILY_LIMIT - anon_request_count

def get_req_count(hf_user):
    if hf_user == "_guest":
        return ANON_DAILY_LIMIT - anon_request_count
    else:
        return USER_DAILY_LIMIT - user_request_counts.get(hf_user)