MyWorkSS / app.py
Quantum-Monk's picture
Uploading food classifier demo
809e680 verified
# Lets Launch Sagar's demo on web
# YAML metadata looks for app.py by default
# app.py import packages , define gradio function, create demo, run demo with demo.launch
# %%writefile magic pyhton function
# Create Model Demo: Gradio App: inputs - model -output in gradio app
# Create a function to perform infeence
# 1 take an input of strings
# 2 setup a text classsifcation pipeline
# 3 get the output from piepeline return theoutput from the pipeline in step3 as a formatted dictionary with format:
# 4 Return the output from the pipeline in step 3 as a formatted dictionary with the format {"label_1": probability_1, "label_2: probability_2"}
######################################################################################################################
# Import necessary packages
import os
# This looks for the 'Secret' you just added in the Settings tab
hf_token = os.getenv("HF_TOKEN")
import pprint
from pathlib import Path
import numpy as np
import torch
import datasets
import evaluate
from typing import Dict, List
from transformers import pipeline
from transformers import TrainingArguments, Trainer
from transformers import AutoTokenizer, AutoModelForSequenceClassification
# 1. Provide Hugging face model path copy from hugging face
food_not_food_pipeline = pipeline(
task="text-classification",
model="Quantum-Monk/learn_hf_food_not_food_text_classfier-distilbert-base-uncased",
batch_size=32,
# Use 0 for the first GPU or "cpu"
device=0 if torch.cuda.is_available() else -1,
top_k=None # None returns all possible labels
)
# 2. Create the function to use the pipeline
def food_not_food_classifier(text: str) -> List[Dict[str, float]]:
# 3. Get the outputs from our pipeline
# The pipeline returns a list of results
outputs = food_not_food_pipeline(text)[0]
return outputs
# 4. Test the function
result = food_not_food_classifier(text="Yo we're building a local demo!")
print(result)
#format output for gradio
import gradio as gr
# 1. Update your classifier function to include the formatting logic
def food_not_food_classifier(text: str):
# Get the raw output from your pipeline (already defined earlier)
# This returns a list of dictionaries because top_k=None
raw_outputs = food_not_food_pipeline(text)[0]
# 2. Format the output specifically for Gradio Label component
output_dict = {}
for item in raw_outputs:
output_dict[item["label"]] = item["score"]
return output_dict
# 3. Create the Gradio interface
desciption = "A text classfier to determine if a sentence is about food or not food fine tuner from distilbert HF model and dataset. my personal repo located at https://huggingface.co/Quantum-Monk/learn_hf_food_not_food_text_classfier-distilbert-base-uncased my space https://huggingface.co/spaces/Quantum-Monk/MyWorkSS "
demo = gr.Interface(
fn=food_not_food_classifier,
inputs="text",
outputs=gr.Label(num_top_classes=2),
title="Food Not Food Classifier",
description="A text classifier to determine if a sentence is about food or not.",
examples=[
["I whipped up a fresh batch of code, but it seems to have a syntax error"],
["A pancake plate of ice cream"]
]
)
# Make directory to store our demo
from pathlib import Path
# Make Directory
demos_dir = Path("../demos")
demos_dir.mkdir(exist_ok=True)
# Create a folder for food_not_food_text_classfier demo
food_not_food_text_classifier_demo_dir = Path(demos_dir, "food_not_food_text_classifier")
food_not_food_text_classifier_demo_dir.mkdir(exist_ok=True)
# 4. Sagar HF Launch interface!
if __name__ == "__main__":
demo.launch()