OKC / app.py
Tiredmaker's picture
Update app.py
1609810
raw
history blame
No virus
3.06 kB
import requests
import gradio as gr
from requests.exceptions import HTTPError
BaseApi = "https://api.openai.com/v1"
# Rate limits for each model
RateLimitPerModel = {
"gpt-3.5-turbo": 2000, # New pay-as-go keys start with 2k for 48 hours
"gpt-4": 200,
"gpt-4-32k": 1000
}
def get_available_models(api_key):
headers = {"Authorization": f"Bearer {api_key}"}
url = f"{BaseApi}/engines"
try:
response = requests.get(url, headers=headers)
response_data = response.json()
available_models = [model["id"] for model in response_data.get("data", []) if model["id"] in {"gpt-4", "gpt-4-32k", "gpt-3.5-turbo"}]
return available_models
except Exception as e:
return []
def check_key_status(api_key, model):
headers = {"Authorization": f"Bearer {api_key}"}
url = f"{BaseApi}/chat/completions"
data = {
"model": model,
"messages": [{"role": "user", "content": ""}],
"max_tokens": -1
}
try:
response = requests.post(url, headers=headers, json=data)
response_data = response.json()
if response.status_code == 401:
return "Error: Invalid API key"
error_type = response_data.get("error", {}).get("type", "")
if error_type == "insufficient_quota" and model in {"gpt-4", "gpt-4-32k"}:
return f"Error: The key for {model} is out of quota, but has gpt4"
elif error_type in ["insufficient_quota", "billing_not_active", "access_terminated"]:
return f"Error: The key for {model} is either out of quota, inactive, or access is terminated."
ratelimited = response.status_code == 429
if (response.status_code == 400 and error_type == "invalid_request_error") or ratelimited:
ratelimit = response.headers.get("x-ratelimit-limit-requests", "0")
org = response.headers.get("openai-organization", "user-xyz")
is_trial_key = "Trial Key" if int(ratelimit) < RateLimitPerModel.get(model, 0) else "Paid Key"
return f"Key for {model} is working. Ratelimit: {ratelimit}, Organization: {org}, Key Type: {is_trial_key}"
except HTTPError as http_err:
return f"HTTP error occurred: {http_err}"
except Exception as e:
return f"Error occurred: {e}"
def check_models(api_key):
available_models = get_available_models(api_key)
if not available_models:
return "Error occurred: Unable to retrieve available models. Please check your API key."
model_info = "\n".join([check_key_status(api_key, model) for model in available_models])
return model_info
# Define Gradio interface with a button to trigger model checking
def trigger_model_check(api_key):
return check_models(api_key)
iface = gr.Interface(
fn=trigger_model_check,
inputs=gr.inputs.Textbox(placeholder="Enter your OpenAI API key", type="text"),
outputs=gr.outputs.Textbox(),
live=False,
title="OKC",
allow_flagging=False, # Disable flagging to prevent unnecessary reporting
)
iface.launch()