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}") |