File size: 3,982 Bytes
98c28c1
 
 
 
 
 
21050e2
 
 
 
 
 
 
98c28c1
 
 
 
 
 
21050e2
 
 
 
 
 
98c28c1
21050e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98c28c1
21050e2
 
 
 
 
 
 
 
 
 
 
 
98c28c1
21050e2
 
 
 
 
 
98c28c1
ac08bfb
 
 
 
 
 
 
 
 
 
98c28c1
 
 
 
 
 
 
 
 
 
 
21050e2
 
 
 
 
 
 
 
 
 
98c28c1
 
 
 
 
 
 
 
 
e4f662e
 
98c28c1
 
 
 
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import requests
import os
from datetime import datetime
from dateutil.relativedelta import relativedelta
import openai

GPT_TYPES = ["gpt-3.5-turbo", "gpt-4", "gpt-4-32k"]

rate_limit_per_model = {
    "gpt-3.5-turbo": 3500,
    "gpt-4": 200,
    "gpt-4-32k": 10  # No actual clue, rare enough
}

def get_headers(key):
    headers = {'Authorization': f'Bearer {key}'}
    return headers

def get_subscription(key):
    queryUrl = 'https://api.openai.com/v1/chat/completions'
    headers = get_headers(key)    
    #results = r.json()
    body_turbo = {"model": "gpt-3.5-turbo", "max_tokens": 1, "messages": [{'role':'user', 'content': ''}]}
    body_gpt4 = {"model": "gpt-4", "max_tokens": 1, "messages": [{'role':'user', 'content': ''}]}

    if check_key_availability():
        rpm = ""
        org = ""
        quota = ""
        try:
            r = requests.post(queryUrl, headers=headers, json=body_gpt4 if check_gpt4_availability() else body_turbo)
            rpm = r.headers['x-ratelimit-limit-requests']
            org = r.headers['openai-organization']
            quota = ""
        except Exception as e:
            error_message = str(e)
            if "You exceeded your current quota" in error_message:
                rpm = "";
                org = "";
                quota = "No quota left."
            elif "Your account is not active" in error_message:
                rpm = "";
                org = "";
                quota = "Error: Your account is not active, please check your billing details on our website."
            else:
                rpm = "";
                org = "";
                quota = f"Unexpected Error at check_key: {error_message}"
        
        #has_payment_method = results["has_payment_method"]
        # hard_limit = results["hard_limit"]
        #soft_limit_usd = results["soft_limit_usd"]
        #hard_limit_usd = results["hard_limit_usd"]
        #plan_title = results["plan"]["title"]
        #plan_id = results["plan"]["id"]
        #account_name = results["account_name"]
        return {"organization": org,
                "rpm": rpm,
                "quota": quota}
                #"has_payment_method": has_payment_method,
                #"soft_limit_usd": soft_limit_usd,
                #"hard_limit_usd": hard_limit_usd,
                #"plan": plan_title + ", " + plan_id}               
    else:
        return {"organization": "",
                "rpm": "",
                "quota": "Invalid key or key has been revoked!"}
                #"has_payment_method": False,
                #"hard_limit_usd": "",
                #"plan": ""}

#def get_usage(key):
#    if check_key_availability():
#        start_date = datetime.now().strftime('%Y-%m-01')
#        end_date = (datetime.now() + relativedelta(months=1)).strftime('%Y-%m-01')
#        queryUrl = f'https://api.openai.com/dashboard/billing/usage?start_date={start_date}&end_date={end_date}'
#        headers = get_headers(key)
#        r = requests.get(queryUrl, headers=headers)
#        return r.json()
#    else:
#        return ""

def check_gpt4_availability():
    if check_key_availability():
        available_models = [model["root"] for model in openai.Model.list()["data"]]
        if 'gpt-4' in available_models:
            return True
        else:
            return False
    else:
        return False

def check_gpt4_32k_availability():
    if check_key_availability():
        available_models = [model["root"] for model in openai.Model.list()["data"]]
        if 'gpt-4-32k' in available_models:
            return True
        else:
            return False
    else:
        return False

def check_key_availability():
    try:
        openai.Model.list()
        return True
    except:
        return False

if __name__ == "__main__":
    key = os.getenv("OPENAI_API_KEY")
#    results = get_usage(key)
#    print(results)

    results = get_subscription(key)
    for k, v in results.items():
        print(f"{k}: {v}")