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