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