File size: 3,647 Bytes
98c28c1
 
 
 
 
 
2e4d2e9
21050e2
 
a9aff6a
 
21050e2
a9aff6a
21050e2
c1a3d4c
 
98c28c1
 
 
 
 
2e4d2e9
21050e2
 
e131090
21050e2
98c28c1
e7dbcf0
21050e2
 
e131090
45382eb
468491e
e7dbcf0
63bc79a
e7dbcf0
63bc79a
45382eb
 
e131090
21050e2
 
e131090
98c28c1
21050e2
 
39d068f
21050e2
 
 
98c28c1
ac08bfb
 
 
 
 
 
 
 
 
 
98c28c1
e131090
a9aff6a
 
 
 
 
 
 
e131090
a9aff6a
 
 
 
 
 
e131090
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
import requests
import os
from datetime import datetime
from dateutil.relativedelta import relativedelta
import openai

queryUrl = 'https://api.openai.com/v1/chat/completions'
GPT_TYPES = ["gpt-3.5-turbo", "gpt-4", "gpt-4-32k"]
rate_limit_per_model = {
    "gpt-3.5-turbo-new": 2000,
    "gpt-3.5-turbo-old": 3500,
    "gpt-4": 200,
    "gpt-4-32k": 1000  # No actual clue, rare enough
}
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': ''}]}

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

def get_subscription(key):    
    headers = get_headers(key)    
    #results = r.json()
    gpt4_avai = check_gpt4_availability()

    if check_key_availability():
        rpm = ""
        org = ""
        quota = ""
        r = requests.post(queryUrl, headers=headers, json=body_gpt4 if gpt4_avai else body_turbo)
        result = r.json()
        if "id" in result:
            rpm = r.headers['x-ratelimit-limit-requests']
            org = r.headers['openai-organization']
            quota = check_key_type("gpt-4" if gpt4_avai else "gpt-3.5-turbo", int(rpm))         
        else:
            e = result["error"]["code"]
            quota = f"Error: {e}"
            
        return {"organization": org,
                "rpm": rpm,
                "quota": quota}           
    else:
        return {"organization": "",
                "rpm": "",
                "quota": ""}
                #"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_key_type(model, rpm):
    if model == "gpt-3.5-turbo":
        if rpm > rate_limit_per_model['gpt-3.5-turbo-old']:
              return "yes | pay, possibly big key"
        elif rpm == rate_limit_per_model['gpt-3.5-turbo-new'] or rpm == rate_limit_per_model['gpt-3.5-turbo-old']:
            return "yes | pay"
        else:
            return "yes | trial"
    else:
        if rpm < rate_limit_per_model[model]:
            return "yes | trial"
        elif rpm == rate_limit_per_model[model]:
            return "yes | pay"
        else:
            return "yes | pay, possibly big key"
    
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}")