File size: 3,938 Bytes
98c28c1
 
 
 
 
 
2e4d2e9
21050e2
 
7be74d6
 
21050e2
a9aff6a
21050e2
7be74d6
06cc1fc
 
7be74d6
 
 
98c28c1
 
 
 
 
2e4d2e9
21050e2
 
7be74d6
 
 
 
 
 
 
 
21050e2
98c28c1
e7dbcf0
21050e2
 
7be74d6
45382eb
468491e
e7dbcf0
63bc79a
7be74d6
63bc79a
45382eb
 
e131090
21050e2
 
e131090
98c28c1
21050e2
 
39d068f
21050e2
 
 
98c28c1
ac08bfb
 
 
 
 
 
 
 
 
 
98c28c1
e131090
7be74d6
 
743687c
7be74d6
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
114
115
116
117
118
119
120
121
122
123
124
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-trial": 2000,
    "gpt-3.5-turbo-pay": 3500,
    "gpt-4": 200,
    "gpt-4-32k": 1000  # No actual clue, rare enough
}
body_gpt = {
    "gpt-3.5-turbo": {"model": "gpt-3.5-turbo", "max_tokens": 1, "messages": [{'role':'user', 'content': ''}]},
    "gpt-4": {"model": "gpt-4", "max_tokens": 1, "messages": [{'role':'user', 'content': ''}]},
    "gpt-4-32k": {"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()
    
    key_highest_model = ""
    if check_gpt4_32k_availability():
        key_highest_model = GPT_TYPES[2]
    elif check_gpt4_availability():
        key_highest_model = GPT_TYPES[1]
    else:
        key_highest_model = GPT_TYPES[0]    

    if check_key_availability():
        rpm = ""
        org = ""
        quota = ""
        r = requests.post(queryUrl, headers=headers, json=body_gpt[key_highest_model])
        result = r.json()
        if "id" in result:
            rpm = r.headers['x-ratelimit-limit-requests']
            org = r.headers['openai-organization']
            quota = check_key_type(key_highest_model, 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_TYPES[0]:
        if rpm > rate_limit_per_model['gpt-3.5-turbo-pay']:
            return "yes | pay, possibly big key"
        elif rpm > rate_limit_per_model['gpt-3.5-turbo-trial'] and rpm <= rate_limit_per_model['gpt-3.5-turbo-pay']:
            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}")