|
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 |
|
} |
|
|
|
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) |
|
|
|
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}" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {"organization": org, |
|
"rpm": rpm, |
|
"quota": quota} |
|
|
|
|
|
|
|
|
|
else: |
|
return {"organization": "", |
|
"rpm": "", |
|
"quota": "Invalid key or key has been revoked!"} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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_subscription(key) |
|
for k, v in results.items(): |
|
print(f"{k}: {v}") |