File size: 3,248 Bytes
98c28c1
 
 
 
 
 
21050e2
 
 
 
 
 
 
98c28c1
 
 
 
 
 
21050e2
 
 
 
 
e131090
21050e2
98c28c1
5381b58
21050e2
 
e131090
45382eb
468491e
5381b58
63bc79a
e131090
63bc79a
45382eb
 
e131090
21050e2
 
e131090
98c28c1
21050e2
 
39d068f
21050e2
 
 
98c28c1
ac08bfb
 
 
 
 
 
 
 
 
 
98c28c1
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
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': ''}]}
    gpt4_avai = check_gpt4_availability()

    if check_key_availability():
        rpm = 0
        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 = int(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", 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 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}")