Cristóbal Hernández
Add application file
ec2757f
raw
history blame
2.77 kB
import requests
import time
import gradio as gr
import os
########################
## Loading the model: ##
#######################
api_key = os.environ.get("HF_API_KEY_INFERENCE")
API_URL = "https://api-inference.huggingface.co/models/chernandezc/distilbert-base-uncased-finetuned-items-multi-label-21122023-AUGMENTED" #Api endpoint.
headers = {"Authorization": f"Bearer {api_key}"} #This is a read only API key, do not share please :D.
#This is visible just to experiment, I cannot share environment variables.
def query(payload): #Function to use the API.
response = requests.post(API_URL, headers=headers, json=payload)
return response.json() #Return Json.
# ##########################################################
# Function to process the output and print classifications #
############################################################
def classify_output(item):
label_dict = {
'LABEL_0': 'Cognition',
'LABEL_1': 'Affect',
'LABEL_2': 'Self',
'LABEL_3': 'Motivation',
'LABEL_4': 'Attention',
'LABEL_5': 'Overt_Behavior',
'LABEL_6': 'Context'
}
output = query({ #Try to query the endpoint.
"inputs": item,
})
# If the model is loading, wait and try again.
while 'error' in output:
time.sleep(output["estimated_time"]) #Sleep the estimated time and try again.
output = query({
"inputs": item,
})
# Store classifications in a list
classifications = []
# Find the item with the highest score
highest_score_item = max(output[0], key=lambda x: x['score'])
for item in output[0]:
# Check if the score is greater than or equal to 0.5
if item['score'] >= 0.5:
# Append the category and score to the classifications list
classifications.append((label_dict[item['label']], item['score']))
# Construct and print the classification message
if classifications:
classification_str = ', '.join([f"'{label}' ({score:.2f})" for label, score in classifications])
output1 = f"The item you provided is classified as: {classification_str}"
return output1
else:
output2 = f"No classifications with a score of 0.5 or higher were found. \n However, the highest probability was for: '{label_dict[highest_score_item['label']]}' ({round(item['score'],2)}) \n Use this classification with caution due to uncertainty"
return output2
#########################################
######## RUN GRADIO APP #################
#########################################
demo = gr.Interface(fn=classify_output, inputs="text", outputs="text")
demo.launch()