Spaces:
Runtime error
Runtime error
import os | |
import gradio as gr | |
import pandas as pd | |
from huggingface_hub import InferenceClient | |
from threading import Timer | |
HUGGINGFACE_TOKEN = os.environ.get("HUGGINGFACE_TOKEN") | |
def get_available_free(): | |
models = InferenceClient().list_deployed_models("text-generation-inference")['text-generation'] | |
models_conclusion = { | |
"Model": [], | |
"API": [], | |
"Text Completion": [], | |
"Chat Completion": [] | |
} | |
for m in models: | |
text_available = False | |
chat_available = False | |
pro_sub = False | |
try: | |
InferenceClient(m, timeout=10, token=HUGGINGFACE_TOKEN).text_generation("Hi.", max_new_tokens=1) | |
text_available = True | |
InferenceClient(m, timeout=10, token=HUGGINGFACE_TOKEN).chat_completion(messages=[{'role': 'user', 'content': 'Hi.'}], max_tokens=1) | |
chat_available = True | |
except Exception as e: | |
print(e) | |
if e and "Model requires a Pro subscription" in str(e): | |
pro_sub = True | |
if e and "Rate limit reached" in str(e): | |
print("Rate Limited!!") | |
if os.path.exists("data.csv"): | |
print("Loading data from file...") | |
return pd.read_csv("data.csv").to_dict(orient='list') | |
return [] | |
models_conclusion["Model"].append(m) | |
models_conclusion["API"].append("Free" if chat_available or text_available else ("Pro Subscription" if pro_sub else "Not Responding")) | |
models_conclusion["Chat Completion"].append("---" if (pro_sub or (not chat_available and not text_available)) else ("β" if chat_available else "β")) | |
models_conclusion["Text Completion"].append("---" if (pro_sub or (not chat_available and not text_available)) else ("β" if text_available else "β")) | |
pd.DataFrame(models_conclusion).to_csv("data.csv", index=False) | |
return models_conclusion | |
def update_data(): | |
data = get_available_free() | |
df = pd.DataFrame(data) | |
return df | |
def display_table(search_query=""): | |
df = update_data() | |
if search_query: | |
filtered_df = df[df["Model"].str.contains(search_query, case=False)] | |
else: | |
filtered_df = df | |
styled_df = filtered_df.style.apply(apply_row_styles, axis=1, subset=["Model", "API", "Text Completion", "Chat Completion"]) | |
return styled_df | |
def apply_row_styles(row): | |
api_value = row["API"] | |
return [ | |
color_status(api_value, row["Model"]), | |
color_status(api_value, row["API"]), | |
color_status(api_value, row["Text Completion"]), | |
color_status(api_value, row["Chat Completion"]) | |
] | |
def color_status(api_value, cell_value): | |
if cell_value == "---": | |
if api_value == "Free": | |
return 'background-color: green' | |
elif api_value == "Pro Subscription": | |
return 'background-color: blue' | |
elif api_value == "Not Responding": | |
return 'background-color: red' | |
else: | |
if cell_value == "Free": | |
return 'background-color: green' | |
elif cell_value == "Pro Subscription": | |
return 'background-color: blue' | |
elif cell_value == "Not Responding": | |
return 'background-color: red' | |
elif cell_value == "β": | |
return 'background-color: green' | |
elif cell_value == "β": | |
return 'background-color: red' | |
return '' | |
def search_models(query): | |
return display_table(query) | |
description = "This is a space that retrieves the status of all supported HF LLM Serverless Inference APIs.\nUpdates every 2 hours!" | |
with gr.Blocks() as demo: | |
gr.Markdown("## HF Serverless LLM Inference API Status") | |
gr.Markdown(description) | |
search_box = gr.Textbox(label="Search for a model", placeholder="Type model name here...") | |
table = gr.Dataframe(value=display_table(), headers="keys") | |
search_box.change(fn=search_models, inputs=search_box, outputs=table) | |
def update_every_two_hours(): | |
search_models(search_box.value) | |
Timer(7200, update_every_two_hours).start() | |
Timer(7200, update_every_two_hours).start() | |
demo.launch() | |