File size: 3,946 Bytes
98c28c1 21050e2 98c28c1 21050e2 98c28c1 21050e2 98c28c1 21050e2 98c28c1 21050e2 39d068f 21050e2 98c28c1 ac08bfb 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 |
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': ''}]}
if check_key_availability():
rpm = ""
org = ""
quota = ""
try:
r = requests.post(queryUrl, headers=headers, json=body_gpt4 if check_gpt4_availability() else body_turbo)
rpm = r.headers['x-ratelimit-limit-requests']
org = r.headers['openai-organization']
quota = ""
except Exception as e:
error_message = str(e)
if "You exceeded your current quota" in error_message:
rpm = "";
org = "";
quota = "No quota left."
elif "Your account is not active" in error_message:
rpm = "";
org = "";
quota = "Error: Your account is not active, please check your billing details on our website."
else:
rpm = "";
org = "";
quota = f"Unexpected Error at check_key: {error_message}"
#has_payment_method = results["has_payment_method"]
# hard_limit = results["hard_limit"]
#soft_limit_usd = results["soft_limit_usd"]
#hard_limit_usd = results["hard_limit_usd"]
#plan_title = results["plan"]["title"]
#plan_id = results["plan"]["id"]
#account_name = results["account_name"]
return {"organization": org,
"rpm": rpm,
"quota": quota}
#"has_payment_method": has_payment_method,
#"soft_limit_usd": soft_limit_usd,
#"hard_limit_usd": hard_limit_usd,
#"plan": plan_title + ", " + plan_id}
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_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}") |